このトピックでは、共有メモリ通信 (SMC) エラーの診断と特定の方法について説明します。
前提条件
smc-tools
は、Alibaba Cloud Linux 3 が提供するユーザーモードの SMC メンテナンスツールセットで、インストールされています。
smc-tools
ツールセットがインストールされていない場合は、次のコマンドを実行してツールセットをインストールします。
sudo yum install -y smc-tools
フォールバック診断
SMC スタックは、接続確立時に SMC を使用するかどうかについてピアと自動的にネゴシエートします。 SMC を使用するための条件が満たされない場合、スタックは安全に TCP にフォールバックします。 smcss
コマンドを実行して、各 SMC 接続のフォールバック理由をクエリできます。 詳細については、「接続の監視」をご参照ください。
パケットキャプチャ診断
SMC スタックは、従来のネットワークプロトコルスタックをバイパスするために、リモートダイレクトメモリアクセス (RDMA) およびその他のダイレクトメモリアクセス (DMA) 技術をデータ送信に使用します。 この場合、従来のスニッフィングポイントをデータパケットと制御パケットのキャプチャに直接使用することはできません。
バージョン ANCK 5.10.134-18
以降、Alibaba Cloud Linux 3 カーネルは、SMC スタック上のデータパケットと制御パケットをキャプチャするためのソリューションを提供しています。
共有メモリ内の接続制御メッセージとデータブロックを受信または送信する場合、SMC カーネルスタックは、ターゲットデータメモリを指す UDP ソケットバッファ (skb) を構築し、skb を特定の仮想ネットワークデバイス (ダミーデバイス) に送信します。 skb は仮想ネットワークデバイスによってサイレントに消費され、ネットワークに入りません。 このプロセス中に、skb は既存のカーネルスニッフィングポイントを通過します。次の図の
dev_queue_xmit_nit()
を参照してください。 これにより、tcpdump
とlibpcap
は、仮想ネットワークデバイス上の SMC スタックによって送受信されたデータパケットと制御パケットをキャプチャできます。SMC ハンドシェイクプロセスにおける TCP パケットは、引き続き元のイーサネットネットワークインターフェースコントローラー (NIC) でキャプチャされます。
次の表は、前の図に示されている段階でのパケットをキャプチャする方法について説明しています。
パケットタイプ | トラフィックベアリングデバイス | キャプチャデバイス | キャプチャされたパケット形式 |
SMC ハンドシェイクネゴシエーション TCP パケット または TCP スタックへのフォールバック後のパケット | イーサネット NIC (例: | イーサネット NIC (例: | TCP |
SMC データパケットまたは制御パケット | RDMA NIC (例: | 仮想 NIC (例: | UDP |
smc-tools
は、このソリューションに基づいてパケットキャプチャツール smcdump-ex
を提供します。これは、SMC 通信プロセス全体を簡単にキャプチャするための tcpdump
ツールの再カプセル化スクリプトです。 smcdump-ex
は、現在の net 名前空間
に smc-dummy{4 文字のランダムな文字}
という名前の仮想ネットワークデバイスを作成し、SMC データパケットと制御パケットをキャプチャする機能を有効にします。 smcdump-ex
は、必要に応じて tcpdump
を使用して、イーサネットデバイスまたは仮想ネットワークデバイス上の SMC ハンドシェイクネゴシエーションパケット、データパケット、および制御パケットをキャプチャします。 SIGINT (Ctrl+C) 信号を受信すると、smcdump-ex
はキャプチャを終了し、キャプチャ機能を無効にし、仮想ネットワークデバイスを破棄します。
ツールの使用方法
次のコマンドを実行して、
smcdump-ex
の使用方法をクエリします。警告smcdump-ex は実験的なツールであるため、その使用方法は将来変更される可能性があります。
smcdump-ex -h usage: smcdump-ex [-h] [-m {all,smc,smcd,smcr}] [-t {all,raw,cdc}] [--param PARAM] [--filter FILTER] [--legacy] SMC Dump - SMC Traffic Capture (Experimental) optional arguments: -h, --help show this help message and exit -m {all,smc,smcd,smcr}, --mode {all,smc,smcd,smcr} Select the mode (default: smc) -t {all,raw,cdc}, --type {all,raw,cdc} Select the packet type (default: all) --param PARAM Additional parameters for tcpdump. e.g. --param '-w packets.pcap' --filter FILTER Additional filter expressions for tcpdump. e.g. --filter 'host xxx.xxx.x.x and port 8080' --legacy Use the legacy SMC dump header format
-m
を使用してデータキャプチャモードを設定しますオプションのキャプチャモード:
all
: すべてのネットワークインターフェイスでパケットをキャプチャします。これはtcpdump -i any
を呼び出すことと同じです。all
を指定すると、イーサネットインターフェイス上の SMC ハンドシェイクネゴシエーションパケットと、新しく作成された仮想ネットワークインターフェイス上の SMC データパケットと制御パケットがキャプチャされます。 このモードでは、--filter
を使用して追加のtcpdump
フィルタ式を構成し、ネットワークパケットキャプチャの範囲を絞り込んで、SMC ネゴシエーションパケットを正確にキャプチャすることをお勧めします。 詳細については、--filter
を参照してください。smc
、smcr
、smcd
: 新しく作成された仮想ネットワークインターフェイス上の SMC、SMC-R、SMC-D データパケットと制御パケットのみをそれぞれキャプチャします。これはtcpdump -i smc-dummy{4 文字のランダムな文字}
を呼び出すことと同じです。
-t
を使用してキャプチャするネットワークパケットのタイプを設定しますキャプチャするネットワークパケットのオプションタイプ:
all
: SMC データパケットと制御パケット。raw
: SMC データパケットのみ。cdc
: SMC 制御パケットのみ。
--param
を使用して追加のtcpdump
パラメータを指定しますたとえば、
--param '-w smcdata.pcap'
を指定して、キャプチャされたコンテンツをファイルにダンプします。--filter
を使用して追加のtcpdump
フィルタルールを構成しますたとえば、
--filter 'host <ip> and port <port>'
を指定して、キャプチャするパケットの IP アドレスとポートを構成します。 これにより、SMC ネゴシエーションパケットが正確にキャプチャされ、結果分析で他の TCP ネットワークパケットによる干渉を防ぎます。--legacy
を使用して古いsmc dump header
形式を解析しますこのパラメータは、
ANCK 5.10.134-17.3
カーネルバージョンとの互換性のためだけにあります。 カーネルバージョンANCK 5.10.134-18
以降では、このパラメータは不要です。
例
たとえば、次の smcdump-ex コマンドを実行して、SMC 接続通信中に IP アドレス 192.168.2.5 とポート番号 5201 を含むすべてのデータパケットをキャプチャし、キャプチャされたパケットを
smc.pcap
ファイルにダンプします。smcdump-ex -m all -t all --param '-w smc.pcap' --filter 'host 192.168.2.5 and port 5201'
--param '-w <pcap file>'
パラメータを使用して.pcap
ファイルにダンプしたキャプチャされたパケットは、Lua プラグインを備えた Wireshark を使用してさらに分析できます。Wireshark をダウンロードしてインストールします。
Lua プラグインを備えた Wireshark を使用して、
.pcap
ファイルに保存されているキャプチャされたパケットをさらに分析します。Lua プラグインをダウンロードします: https://os-smc-new.oss-cn-hangzhou.aliyuncs.com/smc_dump.lua。
説明Lua プラグインを使用するには、Wireshark の Lua インタープリターのバージョンが 5.3 以降であることを確認してください。
Wireshark Lua script
のインストールパスを確認し、Lua スクリプトをパスに配置します。macOS で
Wireshark Lua script
のインストールパスを確認します。Wireshark を実行します。
メニューバーで、
を選択します。
Windows で
Wireshark Lua script
のインストールパスを確認します。Wireshark を実行します。
Wireshark のメインインターフェイスで、
を選択します。
Wireshark を再起動するか、Lua プラグインを再読み込みして、スクリプトを有効にします。 その後、ペイロードに SMC ダンプヘッダーが含まれるすべての UDP パケットが SMC パケットとして解析されます。
パフォーマンス診断
パフォーマンス比較テスト中に SMC パフォーマンスのフォールバックなどの問題が発生した場合は、基本的なパフォーマンステストツールを使用して問題を特定できます。
SMC の場合、
sockperf
、qperf
、iperf3
、netperf
などの基本的なネットワークパフォーマンステストツールを使用して、帯域幅とレイテンシのベンチマークを行うことができます。Elastic RDMA (eRDMA) の場合、
perftest
基本パフォーマンステストツールを使用して、帯域幅とレイテンシのベンチマークを行うことができます。 詳細については、「eRDMA ネットワークパフォーマンスのテスト」をご参照ください。
ベンチマーク中に SMC または eRDMA のパフォーマンスが低下した場合は、 チケットを送信 して、さらに処理を進めてください。 ベンチマークが正常な場合は、「SMC の有効化と構成」を参照して、SMC の構成を確認してください。