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

Alibaba Cloud Linux:SMC 診断

最終更新日:May 16, 2025

このトピックでは、共有メモリ通信 (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() を参照してください。 これにより、tcpdumplibpcap は、仮想ネットワークデバイス上の SMC スタックによって送受信されたデータパケットと制御パケットをキャプチャできます。

  • SMC ハンドシェイクプロセスにおける TCP パケットは、引き続き元のイーサネットネットワークインターフェースコントローラー (NIC) でキャプチャされます。

次の表は、前の図に示されている段階でのパケットをキャプチャする方法について説明しています。

パケットタイプ

トラフィックベアリングデバイス

キャプチャデバイス

キャプチャされたパケット形式

SMC ハンドシェイクネゴシエーション TCP パケット

または TCP スタックへのフォールバック後のパケット

イーサネット NIC (例: eth0)

イーサネット NIC (例: eth0)

TCP

SMC データパケットまたは制御パケット

RDMA NIC (例: erdma_0)

仮想 NIC (例: dummy0)

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 を参照してください。

      • smcsmcrsmcd: 新しく作成された仮想ネットワークインターフェイス上の 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 を使用してさらに分析できます。

    1. Wireshark をダウンロードしてインストールします。

    2. Lua プラグインを備えた Wireshark を使用して、.pcap ファイルに保存されているキャプチャされたパケットをさらに分析します。

      1. Lua プラグインをダウンロードします: https://os-smc-new.oss-cn-hangzhou.aliyuncs.com/smc_dump.lua

        説明

        Lua プラグインを使用するには、Wireshark の Lua インタープリターのバージョンが 5.3 以降であることを確認してください。

      2. Wireshark Lua script のインストールパスを確認し、Lua スクリプトをパスに配置します。

        • macOS で Wireshark Lua script のインストールパスを確認します。

          1. Wireshark を実行します。

          2. メニューバーで、[Wireshark] > [Wireshark について] > [フォルダ] を選択します。

            image

            image

        • Windows で Wireshark Lua script のインストールパスを確認します。

          1. Wireshark を実行します。

          2. Wireshark のメインインターフェイスで、[ヘルプ] > [フォルダ] を選択します。

            image

    3. Wireshark を再起動するか、Lua プラグインを再読み込みして、スクリプトを有効にします。 その後、ペイロードに SMC ダンプヘッダーが含まれるすべての UDP パケットが SMC パケットとして解析されます。

パフォーマンス診断

パフォーマンス比較テスト中に SMC パフォーマンスのフォールバックなどの問題が発生した場合は、基本的なパフォーマンステストツールを使用して問題を特定できます。

  • SMC の場合、sockperfqperfiperf3netperf などの基本的なネットワークパフォーマンステストツールを使用して、帯域幅とレイテンシのベンチマークを行うことができます。

  • Elastic RDMA (eRDMA) の場合、perftest 基本パフォーマンステストツールを使用して、帯域幅とレイテンシのベンチマークを行うことができます。 詳細については、「eRDMA ネットワークパフォーマンスのテスト」をご参照ください。

ベンチマーク中に SMC または eRDMA のパフォーマンスが低下した場合は、 チケットを送信 して、さらに処理を進めてください。 ベンチマークが正常な場合は、「SMC の有効化と構成」を参照して、SMC の構成を確認してください。