すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:SMC の適用性

最終更新日:May 16, 2025

このトピックでは、共有メモリ通信 (SMC) アクセラレーションがシナリオに適しているかどうか、および SMC アクセラレーションを使用するための条件が満たされているかどうかを判断する方法について説明します。

概要

従来のデータセンターのアプリケーションがクラウドに移行するにつれて、ネットワーク遅延とスループットは新たな課題に直面しています。従来の仮想ネットワークインターフェースと TCP スタックは、最新のデータセンターの高いスループットと低い遅延の要件を満たすことができません。クラウドコンピューティングシナリオにおけるデータ処理装置 (DPU) 機能の向上に伴い、リモートダイレクトメモリアクセス (RDMA) ネットワークが提供され、ハードウェア機能を最大限に活用し、ネットワークパフォーマンスを向上させています。このような状況において、基盤となる DPU ハードウェアのパフォーマンスを活用し、大規模なクラウドアプリケーションをサポートし、開発者、デプロイメント、およびメンテナンスが容易なソフトウェアとハードウェアのコラボレーションプロトコルスタックは、クラウドベースのデータセンターネットワークにとって重要な選択肢となります。

IBM によって Linux コミュニティにオープンソース化され、Alibaba Cloud Linux 3 で強化された SMC は、上記の要件を満たしています。SMC は、TCP/IP スタックと並行して動作するカーネルネットワークプロトコルスタックですが、より軽量です。SMC は、パケットのカプセル化や解析などのネットワークプロトコルの処理を基盤となるハードウェアデバイスにオフロードし、遅延と CPU オーバーヘッドを効果的に削減します。さらに、SMC はリモート共有メモリを直接読み書きすることでデータを送信し、ネットワークスループットを大幅に向上させます

SMC は、RDMA テクノロジーに基づく RDMA over SMC (SMC-R) と、内部共有メモリ (ISM) テクノロジーに基づくダイレクトメモリアクセス over SMC (SMC-D) に分類されます。Elastic RDMA (eRDMA) に基づいて、Alibaba Cloud Linux 3 は SMC-R アクセラレーション機能を提供します。以下の説明は SMC-R に関連しています。

設計の観点から、SMC スタックは従来のネットワークソケットインターフェースと互換性があり、その開発方法と使用方法も従来の TCP アプリケーションと似ています。 socket() システムコールをインターセプトしてソケットファミリとプロトコルパラメータを変更することで、既存の TCP アプリケーションは、アプリケーションを変更または再コンパイルすることなく、SMC スタックにシームレスに切り替えることができます。詳細については、「SMC を有効化および構成する」をご参照ください。

通信接続を確立するとき、SMC スタックは最初にピアとの TCP 接続を確立します。TCP 3 ウェイハンドシェイク中に、特別な TCP オプション (種類: 254、値: 0xE2D4C3D9) が SYN パケットに含まれ、SMC 機能を示し、ピアが SMC をサポートしているかどうかを確認します。ハンドシェイクが成功すると、両端で対応する RDMA リソースが作成され、追加のハンドシェイクが完了します。後続のデータトラフィックは RDMA ネットワークを介して送信されます。ハンドシェイクが失敗した場合、両端は確立された TCP 接続に安全にフォールバックするため、ピアが SMC をサポートしていない場合でも通信が中断されることはありません。

接続が確立されると、SMC スタックは最初の SMC 接続に対して RDMA 信頼性接続 (RC) (SMC リンク) を作成します。トラフィックは RDMA ネットワークを介して SMC リンク上で送信されます。RDMA リンクを効率的に使用し、RDMA リソースのオーバーヘッドを最小限に抑えるために、後続の SMC 接続はこの SMC リンクの再利用を試みます。再利用制限に達すると、新しい SMC リンクが作成されます。複数の SMC リンクが SMC リンクグループ (LGR) を形成して RDMA 伝送機能を提供し、ディザスタリカバリを実現できます。

依存関係

  • eRDMA 機能

    Alibaba Cloud Elastic Compute Service (ECS) で SMC-R を使用するには、eRDMA ネットワークインターフェース (ERI) を構成します。ERI をサポートするインスタンスタイプと ERI の構成方法については、「エンタープライズレベルインスタンスで eRDMA を有効にする」をご参照ください。

  • オペレーティングシステム

    Alibaba Cloud Linux 3 は、カーネル 5.10.134-16 以降で SMC-R 機能をサポートしています。カーネルの表示方法と更新方法については、「カーネルバージョンを変更する」をご参照ください。

シナリオ

SMC は以下のシナリオに適しています。

  • ユーザーモードプログラムを変更したくないシナリオ

    SMC の主な利点は、TCP アプリケーションがネットワークパフォーマンスを向上させるために変更を加えることなく RDMA テクノロジーを利用できるようにすることです。ただし、カーネルプロトコルスタックとして、SMC は追加のシステムコールとカーネルモードとユーザーモードのデータコピーのオーバーヘッドが発生するため、ネイティブ RDMA アプリケーションよりもパフォーマンスが劣ります。SMC は、既存のアプリケーションとのシームレスな統合が望ましいシナリオに最適です。

  • 遅延に敏感でスループットに敏感なシナリオ

    SMC は、ネットワークプロトコルの処理を基盤となるハードウェアデバイスにオフロードし、遅延と CPU オーバーヘッドを効果的に削減します。また、SMC はデータ伝送に直接メモリアクセスを有効にすることで、ネットワークスループットを向上させます。したがって、SMC は遅延とスループットのメトリックを優先するシナリオに適しています。

  • 内部ネットワークシナリオ

    SMC は両端からのサポートが必要です。これは、サーバーとクライアントで SMC を簡単に有効化できる内部ネットワークシナリオでより実現可能です。これらのシナリオの短いネットワークリンクは、SMC のネットワーク上の利点を増幅させます。

  • ネットワークリソースの大部分

    ネットワークリソースの大部分を占めるサービスは、SMC によってネットワーク遅延とスループットの大幅な改善が見られます。

不利なシナリオを防ぐ

SMC は、特定のシナリオでは TCP よりもパフォーマンスが低下したり、期待される結果を達成できなかったりする可能性があります。以下のシナリオでは SMC を使用しないでください。

シナリオ

説明

解決策

短いライフサイクルの通信

SMC 接続の確立には、TCP ハンドシェイク、SMC ハンドシェイク、RDMA リソースの作成 (SMC-R を使用する場合) などの複数のプロセスが含まれるため、接続パフォーマンスが低下し、短いライフサイクルの通信では TCP よりもパフォーマンスが劣ります。

smc-ebpf ツールを使用して SMC 有効化範囲を構成し、このような接続に SMC が使用されないようにします。詳細については、「SMC を有効化および構成する」をご参照ください。

大量のバースト接続

短期間のライフサイクル通信シナリオと同様に、多数のバースト接続が開始された場合、SMC の接続パフォーマンスの低下により、接続確立プロセスでキューイングと待機が発生し、接続確立のタイムアウトが発生します。

ネットワーク要素間の通信

SMC 接続の確立中に、まずピアとの TCP 接続が確立されます。TCP 3 ウェイハンドシェイクでは、SYN/SYN-ACK パケットに特別な TCP Experimental Option が含まれており、SMC のサポートを示します。

image.png

ただし、一部のネットワーク要素は、認識できないオプションを持つ SYN パケットを誤って破棄したり、返された SYN-ACK パケットでこのオプションを無条件に再生したりすることがあります。これにより、ハンドシェイクのタイムアウトや、ピアの SMC サポートの誤った判断が発生し、接続の確立のタイムアウトまたはブロックにつながる可能性があります。この問題は、インターネット サービスにアクセスするときに断続的に発生します。サービス リンクが異常なネットワーク要素を通過するかどうかを確認するには、自動チェックツールを使用できます。具体的な操作については、「自動チェックツール」をご参照ください。

パブリックネットワーク通信

クロスネットワーク要素通信シナリオと同様に、パブリックネットワーク通信は多くの場合、クロスネットワーク要素アクセスを伴い、接続確立のタイムアウトまたはブロックが発生しやすくなります。

さらに、パブリックネットワーク通信の両端で SMC を使用する条件を満たすことは難しいため、TCP にフォールバックします。

最後に、SMC は内部データセンターネットワークを高速化するために設計されており、セキュリティ強化メカニズムは提供していません。 SMC は、信頼されていない環境には適していません。

メモリ リソースの制約

SMC は共有メモリ通信に基づいており、事前に割り当てられたバッファーを共有メモリとして使用するため、メモリオーバーヘッドが発生します。

デフォルトでは、SMC 接続は一方の端で sysctl net.smc.wmem + sysctl net.smc.rmem のバッファーサイズを占有します。詳細については、「SMC を有効化および構成する」をご参照ください。

  • smc-ebpf ツールを使用して SMC 有効範囲を設定し、メモリ リソースが制約されている環境での SMC の有効化を回避します。詳細については、「SMC を有効化および設定する」をご参照ください。

  • 送受信バッファーのデフォルト サイズを調整します。詳細については、「SMC を有効化および設定する」をご参照ください。

ゾーン間の通信

ゾーンをまたぐシナリオでは、伝送レイテンシは数百マイクロ秒から数ミリ秒になるため、SMC によって得られるレイテンシの利点が減少し、大きなメリットが得られません。 一方で、ネットワークの帯域幅とレイテンシの積が増加すると、帯域幅を最大限に活用するために送受信バッファーを増やす必要があり、メモリ リソースの負荷が増加します。

ゾーンをまたがる SMC 通信の使用を防ぐために、一意のエンドポイント識別子(UEID)を使用します。詳細については、「SMC を有効化および構成する」をご参照ください。

自動チェックツール

Alibaba Cloud Linux 3 は、SMC 関連の基本的な環境構成、通信リンク、および通信機能の自動チェック用の aliyunsmc-check ツールを提供しています。aliyunsmc-check ツールは、aliyun-smc-extensions パッケージに含まれています。

  • パッケージのインストール

    次のコマンドを実行して、aliyun-smc-extensions パッケージをインストールします。

    sudo yum install -y aliyun-smc-extensions
  • 基本環境構成チェック

    基本環境構成チェックでは、オペレーティングシステムのカーネルバージョンや eRDMA デバイスの存在など、基本環境の正当性を検証します。次のコマンドを実行してチェックを実行します。

    aliyunsmc-check basic_check

    コマンド出力例

    image

  • 通信リンクチェック

    通信リンクチェックでは、通信リンク上のネットワーク要素が SMC 通信に影響を与えるかどうかを検証し、リンクが SMC 通信に適しているかどうかを判断します。次のコマンドを実行してチェックを実行します。<url> を実際の URL に置き換えます。

    aliyunsmc-check syn_check --url <url>

    コマンド出力例

    image.png

    URL が正しく、リンクがチェックに失敗した場合、リンクは SMC 通信には適していません。smc-ebpf ツールを使用して、リンク上の SMC 通信を無効にします。詳細については、「SMC を有効化および構成する」をご参照ください。

  • SMC 通信チェック

    SMC 通信チェックでは、hosts パラメーターで指定されたリモートホストと現在のマシンとの間で、SMC を使用して通常の通信ができるかどうかを検証します。チェック中に、SSH を使用してリモートホストにログインします。コマンドパラメーターには SSH 認証情報が必要です。

    次の SSH 認証方式がサポートされています。

    • SSH ログインに keyfile を使用します。

      • <peer ip> をリモートホストの IP アドレスに置き換えます。

      • <usr> をリモートホストのユーザー名に置き換えます。

      • <keyfile> を SSH 秘密鍵ファイルのパスに置き換えます。

      aliyunsmc-check connect_check --hosts <peer ip> --user <usr> --key <keyfile>
    • SSH ログインにパスワードを使用します。

      • <peer ip> をリモートホストの IP アドレスに置き換えます。

      • <usr> をリモートホストのユーザー名に置き換えます。

      • <passwd> をリモートホストのパスワードに置き換えます。

      aliyunsmc-check connect_check --hosts <peer ip> --user <usr> --pwd <passwd>
    • SSH パスワードレスログインを使用します。

      • <peer ip> をリモートホストの IP アドレスに置き換えます。

      • <usr> をリモートホストのユーザー名に置き換えます。

      aliyunsmc-check connect_check --hosts <peer ip> --user <usr>

    コマンド出力例

    image.png