このトピックでは、共有メモリ通信(SMC)のメンテナンス中にネットワークの正常性を判断するためにモニタリングする必要があるメトリックについて説明します。
前提条件
Alibaba Cloud Linux 3 が提供するユーザーモード SMC メンテナンスツールセットである smc-tools
がインストールされています。
smc-tools
ツールセットがインストールされていない場合は、次のコマンドを実行してツールセットをインストールします。
sudo yum install -y smc-tools
プロトコルスタックのモニタリング
SMC スタックは、接続、トラフィック、共有メモリに関連する統計メトリックを提供し、netlink を使用してメトリックをユーザースペースに転送します。 smc-tools ツールセットの smcr
コマンドは、netlink から統計メトリックを取得して解釈します。
SMC-R スタックに関する統計情報のクエリ
現在の
net 名前空間
で、Remote Direct Memory Access(SMC-R)スタックを介した SMC に関する統計情報をクエリするには、次のコマンドを実行します。smcr stats
コマンド出力の例:
# smcr stats SMC-R Connections Summary Total connections handled 5076 // 処理された接続の合計数 SMC connections 5076 // SMC 接続の数 Handshake errors 0 // ハンドシェイクエラーの数 Avg requests per SMC conn 1977.0 // SMC 接続ごとの平均リクエスト数 TCP fallback 0 // TCP フォールバックの数 RX Stats // 受信統計 Data transmitted (Bytes) 200705600 (200.7M) // 送信されたデータ量(バイト) Total requests 5017741 // リクエストの合計数 Buffer usage (Bytes) 0 (0) // バッファ使用量(バイト) Buffer full 0 (0.00%) // バッファフルになった回数 8KB 16KB 32KB 64KB 128KB 256KB 512KB >512KB Bufs 0 0 0 0 0 5.076K 0 0 // バッファのサイズ分布 Reqs 5.018M 0 0 0 0 0 0 0 // リクエストのサイズ分布 TX Stats // 送信統計 Data transmitted (Bytes) 1194173445 (1.194G) // 送信されたデータ量(バイト) Total requests 5017640 // リクエストの合計数 Buffer usage (Bytes) 0 (0) // バッファ使用量(バイト) Buffer full 0 (0.00%) // バッファフルになった回数 Buffer full (remote) 0 (0.00%) // リモートバッファフルになった回数 Buffer too small 0 (0.00%) // バッファが小さすぎた回数 Buffer too small (remote) 0 (0.00%) // リモートバッファが小さすぎた回数 8KB 16KB 32KB 64KB 128KB 256KB 512KB >512KB Bufs 0 0 0 0 0 5.076K 0 0 // バッファのサイズ分布 Reqs 5.018M 0 0 0 0 0 0 0 // リクエストのサイズ分布 Extras // その他 Special socket calls 5 // 特殊なソケット呼び出しの数
次のパラメーターに注意してください。
パラメーター
説明
Total connections handled
SMC-R スタックによって処理された接続の合計数。
SMC connections
、Handshake errors
、およびTCP fallback
の値の合計です。SMC connections
SMC-R 接続に変換された接続の合計数。
Handshake errors
ピアからの応答がないなど、ハンドシェイクフェーズ中のエラーが原因で失敗した接続の合計数。
Avg requests per SMC conn
SMC 接続ごとに送受信されたリクエストの平均数。
TCP fallback
TCP/IP にフォールバックした接続の合計数。
Rx/Data transmitted (Bytes)
SMC-R 接続を介して受信されたバイトの合計数。
Rx/Total requests
SMC-R 接続を介して受信されたリクエストの合計数。
Rx/Buffer usage(Bytes)
SMC-R 接続で使用される受信(Rx)バッファの合計サイズ。単位:バイト。
Rx/Buffer full
SMC-R 接続の Rx バッファが満杯になった回数の合計。SMC-R 接続を使用するユーザーモードアプリケーションが、接続に割り当てられた Rx バッファからデータをタイムリーに読み取らない場合、Rx バッファが満杯になる可能性があります。このパラメーターの値を小さくするには、SMC-R 接続を使用するユーザーモードアプリケーションを設定して、できるだけ早く Rx バッファからデータを読み取るか、Rx バッファの容量を増やします。そうしないと、送信側はバックプレッシャーを受け、受信側は新しいデータを受信できません。
Rx/Bufs
SMC-R 接続で使用される Rx バッファの分布。SMC-R は、リンクグループごとにメモリプールを保持します。接続が確立されると、SMC-R はメモリプールから適切なサイズのアイドルメモリブロックを接続に Rx バッファとして割り当てます。アイドルメモリブロックがない場合、SMC-R は適切なサイズの新しいメモリブロックを作成します。接続が閉じられると、メモリブロックはメモリプールに再利用されます。このパラメーターは、Rx バッファがメモリプールから SMC-R 接続に割り当てられた回数の合計と、Rx バッファが作成および再利用された回数を含む Rx バッファサイズの分布を指定しますが、メモリを消費する Rx バッファの実際の数を指定するものではありません。
Rx/Reqs
SMC-R 接続を介して受信されたリクエストのサイズ分布。
Tx/Data transmitted (Bytes)
SMC-R 接続を介して送信されたバイトの合計数。
Tx/Total requests
SMC-R 接続を介して送信されたリクエストの合計数。
Tx/Buffer full
SMC-R 接続の送信(Tx)バッファが満杯になった回数の合計。SMC-R スタックが Tx バッファ内のデータをタイムリーにリンクに送信しない場合、Tx バッファが満杯になる可能性があります。割合が高い場合は、ビジネス要件に基づいて Tx バッファの容量を増やします。
Tx/Buffer full (remote)
SMC-R 接続のピア Rx バッファが満杯になった回数の合計。SMC-R 接続のピア Rx バッファが満杯の場合、ローカルエンドはピアにデータを送信できません。割合が高い場合は、ビジネス要件に基づいてピア Rx バッファの容量を増やします。
Tx/Buffer too small
SMC-R 接続を介して送信されたリクエストのサイズが対応する Tx バッファのサイズを超えた回数の合計。SMC-R 接続を介して送信されたリクエストのサイズが対応する Tx バッファのサイズを超える場合、Tx バッファのサイズが小さすぎます。割合が高い場合は、ビジネス要件に基づいて Tx バッファの容量を増やします。
Tx/Buffer too small (remote)
SMC-R 接続を介して送信されたリクエストのサイズが対応するピア Rx バッファのサイズを超えた回数の合計。SMC-R 接続を介して送信されたリクエストのサイズが対応するピア Rx バッファのサイズを超える場合、ピア Rx バッファのサイズが小さすぎます。割合が高い場合は、ビジネス要件に基づいてピア Rx バッファの容量を増やします。
Tx/Bufs
注: このチュートリアルでは、Linux オペレーティング システムを使用します。Windows の場合も手順は同様です。
Tx/Reqs
SMC-R 接続を介して送信されたリクエストのサイズ分布。
SMC-R リンクグループに関する統計情報のクエリ
説明デフォルトでは、リンクグループには 1 つのリンクが含まれており、32 の SMC-R 接続を伝送できます。各リンクグループは、キューペア(QP)、保護ドメイン(PD)、メモリ登録(MR)など、SMC-R の RDMA リソースのセットを維持するために使用されます。
現在の net 名前空間でアクセス可能な RDMA デバイスに関連付けられているすべての SMC-R リンクグループに関する統計情報をクエリするには、次のコマンドを実行します。
smcr linkgroup
コマンド出力の例:
# smcr linkgroup LG-ID LG-Role LG-Type VLAN #Conns PNET-ID // LG-ID:リンクグループID、LG-Role:リンクグループのロール、LG-Type:リンクグループのタイプ、VLAN:VLAN ID、#Conns:接続数、PNET-ID:物理ネットワークID 00000300 SERV SINGLE 0 0
使用中の QP の数を示すリンクグループの数と、次の表のパラメーターに注意してください。
パラメーター
説明
#Conns
リンクグループ
によって伝送される SMC 接続の数。リンクグループの詳細情報をクエリするには、
smcr -d linkgroup
コマンドを実行できます。コマンド出力の例:
LG-ID : 00000500 // リンクグループID LG-Role : CLNT // リンクグループのロール LG-Type : SINGLE // リンクグループのタイプ VLAN : 0 // VLAN ID PNET-ID : // 物理ネットワークID Version : 2 // バージョン Peer-Rel : 1 // ピアのリリース Peer-Host: // ピアホスト Peer-OS : LINUX // ピアOS Direct : Yes // 直接接続かどうか EID : SMCV2-DEFAULT-UEID // エンドポイントID #Conns : 32 // 接続数 Sndbuf : 8388608 B // 送信バッファサイズ CNY : 8388608 B // 受信バッファサイズ
次のパラメーターに注意してください。
パラメーター
説明
Sndbuf
リンクグループによって管理される Tx バッファプールによって占有されるメモリの総量。単位:バイト。
CNY
リンクグループによって管理される Rx バッファプールによって占有されるメモリの総量。単位:バイト。
SMC-R デバイスに関する統計情報のクエリ
SMC-R スタックによって使用される RDMA デバイスに関する情報をクエリするには、次のコマンドを実行します。
smcr device
コマンド出力の例:
# smcr device Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID // Net-Dev:ネットワークデバイス名、IB-Dev:InfiniBand デバイス名、IB-P:InfiniBand ポート、IB-State:InfiniBand デバイスの状態、Type:RDMA デバイスのタイプ、Crit:重大なエラーがあるかどうか、#Links:リンク数、PNET-ID:物理ネットワーク ID eth1 erdma_0 1 ACTIVE 0x107f No 0
次のパラメーターに注意してください。
パラメーター
説明
Net-Dev
イーサネットデバイスの名前。
IB-Dev
RDMA デバイスの名前。
IB-P
RDMA デバイスのポート。
IB-State
RDMA デバイスのステータス。
Type
RDMA デバイスのタイプ。デバイスが Alibaba Cloud の elastic RDMA(eRDMA)デバイスの場合、
0x107f
が表示されます。#Links
RDMA デバイスに関連付けられているリンクの数。
PNET-ID
RDMA デバイスの物理ネットワーク(PNET)ID。詳細については、「PNET ID パラメーターを設定する」をご参照ください。
接続のモニタリング
ss
と同様に、smc-tools
ツールセットの SMC ユーザーモードツール smcss
は、SMC ソケットをモニタリングします。 smcss
ツールは、netlink
からソケット情報を取得します。これには、ネゴシエーション後に SMC を使用するソケットに関する情報、またはネゴシエーションが失敗した場合に TCP にフォールバックするソケットに関する情報が含まれます。
SMC ソケットに関する基本情報のクエリ
現在の
net 名前空間
で、SMC スタックで実行されているか、TCP スタックにフォールバックしている、接続中、クローズ中、または接続済みの SMC ソケットに関する基本情報をクエリするには、次のコマンドを実行します。smcss
コマンド出力の例:
# smcss State UID Inode Local Address Peer Address Intf Mode // State:ソケットの状態、UID:ユーザーID、Inode:inode 番号、Local Address:ローカルアドレス、Peer Address:ピアアドレス、Intf:インターフェース、Mode:モード ACTIVE 00994 2954337 xxx.xxx.x.xx:80 xxx.xxx.x.xx:36000 0000 SMCR ACTIVE 00994 2953297 xxx.xxx.x.xx:80 xxx.xxx.x.xx:35948 0000 TCP 0x03010000
次のパラメーターに注意してください。
INIT
:ソケットは初期化中です。CLOSED
: ソケットは閉じられています。LISTEN
: ソケットはリスニング ソケットです。ACTIVE
:SMC ソケットは接続が確立されています。PEERCLW1
:ピアにはこれ以上データが送信されません。PEERCLW2
:ピアとのデータの送受信はこれ以上行われません。APPLCLW1
:ピアからこれ以上データが受信されません。APPLCLW2
:ピアとのデータの送受信はこれ以上行われません。APPLFINCLW
:ピアがソケットを閉じました。PEERFINCLW
:ソケットはローカルで閉じられています。PEERABORTW
:ソケットはローカルで異常終了しました。PROCESSABORT
:ピアがソケットを異常終了しました。SMCR: SMC-R スタックを使用して通信します。
TCP <fallback reason>
: TCP/IP スタックにフォールバックします。数値コードは、フォールバックの理由を示します。数値コードの意味については、「SMC を有効にした後の TCP/IP へのフォールバック」をご参照ください。LISTEN 状態の SMC ソケットに関する統計情報のクエリ
次のコマンドを実行して、現在の
net 名前空間
で listen (LISTEN) 状態の SMC ソケットに関する統計情報をクエリします。smcss -l
smcss -l
コマンド出力のパラメーターは、smcss
コマンド出力のパラメーターと同じです。SMC-R スタックで実行されている SMC ソケットに関する統計情報のクエリ
現在の
net 名前空間
で SMC-R スタックで実行されている SMC ソケットに関する統計情報をクエリするには、次の命令を実行します。smcss -R
コマンド出力の例:
# smcss -R State UID Inode Local Address Peer Address Intf Mode Role IB-device Port Linkid GID Peer-GID ACTIVE 00000 1833669 xxx.xxx.x.xx:33618 xxx.xxx.x.xx:80 0000 SMCR CLNT erdma_0 01 01 0000:0000:0000:0000:0000:xxxx:xxxx:xxxx 0000:0000:0000:0000:0000:xxxx:xxxx:xxxx
smcss
コマンド出力の前述の基本パラメーターに加えて、次のパラメーターに注意してください。パラメーター
説明
IB-device
接続に使用される RDMA デバイスの名前。
Port
接続に使用される RDMA デバイスのポート。
GID
接続に使用される RDMA デバイスのグローバル ID (GID)。
Peer-GID
ピア RDMA デバイスの GID。
すべての SMC ソケットに関する統計情報のクエリ
現在
net 名前空間
内のすべての SMC ソケットに関する統計情報をクエリするには、次のコマンドを実行します。smcss -a
smcss -a
コマンド出力のパラメーターは、smcss
コマンド出力のパラメーターと同じです。
パラメーター | 説明 |
| ソケットのステータス。有効な値: |
| ローカルの IPv4 または IPv4 マップ IPv6 アドレスとポート。SMC は IPv4 プロトコルのみをサポートします。 |
| ピア IPv4 アドレスまたは IPv4 マップ IPv6 アドレスとポート。CSMC は IPv4 プロトコルのみをサポートします。 |
| 通信モード。 |
デバイスの監視
SMC-R は、Alibaba Cloud eRDMA デバイスを基盤となる RDMA デバイスとして使用します。 eRDMA は、RDMA リソースとデバイスに関する統計情報を収集するためのさまざまなユーザーモードツールを提供します。 詳細については、「eRDMA の監視と診断」をご参照ください。
統合監視ツール
smc_monitor_ex
は、smc-tools
によって提供される監視ツールスクリプトであり、smcr
や smcss
などの smc-tools
のアトミック命令を呼び出して、SMC トラフィック、接続、およびメモリ使用量に関する統計を収集します。
ツールの使用方法
smc_monitor_ex
の使用方法をクエリするには、次のコマンドを実行します。警告smc_monitor_ex は実験的なツールであるため、その使用方法は将来変更される可能性があります。
# smc_monitor_ex -h usage: smc_monitor_ex [-h] {speed,s,connection,c,memory,m,base,b} ... SMC Monitor Tool (Experimental) // SMC 監視ツール(実験的) positional arguments: // 位置引数 {speed,s,connection,c,memory,m,base,b} commands // コマンド speed (s) View transfer rates // 転送速度を表示 connection (c) View connection counts // 接続数を表示 memory (m) View memory usages // メモリ使用量を表示 base (b) View transfer rates, connection counts, and memory usages // 転送速度、接続数、メモリ使用量を表示 optional arguments: // オプション引数 -h, --help show this help message and exit // このヘルプメッセージを表示して終了
SMC トラフィックに関する統計のクエリ
smc_monitor_ex
でspeed
サブコマンドを実行して、現在のnet namespace
内の SMC トラフィック レートと 1 秒あたりのレコード数(RPS)をクエリします。# smc_monitor_ex speed -h usage: smc_monitor_ex speed [-h] [-i INTERVAL] [-r] [-m {smcr,smcd,smc}] optional arguments: // オプション引数 -h, --help show this help message and exit // このヘルプメッセージを表示して終了 -i INTERVAL, --interval INTERVAL Interval in seconds to display transfer rates. // 転送速度を表示する間隔(秒単位)。 -r, --raw Display rates in B/s without converting units. // 単位を変換せずに B/s で速度を表示。 -m {smcr,smcd,smc}, --mode {smcr,smcd,smc} Mode to check, either 'smc', 'smcr' or 'smcd', default is 'smc' // 確認するモード。「smc」、「smcr」、または「smcd」。デフォルトは「smc」。
たとえば、次のコマンドを実行して、現在の
net namespace
内の SMC-R トラフィック レートと RPS を 1 秒ごとにクエリします。# smc_monitor_ex speed -m smcr -i 1 Date Mode Rx Rate Rx Rps Tx Rate Tx Rps // 日付 モード 受信速度 受信 RPS 送信速度 送信 RPS 2025-02-21 14:01:48 smcr 0.0 B/s 0.0 /s 0.0 B/s 0.0 /s Date Mode Rx Rate Rx Rps Tx Rate Tx Rps // 日付 モード 受信速度 受信 RPS 送信速度 送信 RPS 2025-02-21 14:01:49 smcr 0.0 B/s 0.0 /s 0.0 B/s 0.0 /s Date Mode Rx Rate Rx Rps Tx Rate Tx Rps // 日付 モード 受信速度 受信 RPS 送信速度 送信 RPS 2025-02-21 14:01:50 smcr 0.0 B/s 0.0 /s 0.0 B/s 0.0 /s
SMC 接続に関する統計のクエリ
smc_monitor_ex
でconnection
サブコマンドを実行して、現在のnet namespace
内で SMC を使用している接続数または TCP にフォールバックしている接続数をクエリします。# smc_monitor_ex connection -h usage: smc_monitor_ex connection [-h] [-i INTERVAL] [-m {smc,smcr,smcd,fallback,all}] optional arguments: // オプション引数 -h, --help show this help message and exit // このヘルプメッセージを表示して終了 -i INTERVAL, --interval INTERVAL Interval in seconds to display connections. // 接続を表示する間隔(秒単位)。 -m {smc,smcr,smcd,fallback,all}, --mode {smc,smcr,smcd,fallback,all} Mode to check, either 'all', 'smc', 'smcr', 'smcd' or 'fallback', default is 'all' // 確認するモード。「all」、「smc」、「smcr」、「smcd」、または「fallback」。デフォルトは「all」。
たとえば、次のコマンドを実行して、現在の
net namespace
内で SMC-R を使用している接続数を 1 秒ごとにクエリします。# smc_monitor_ex connection -m smcr -i 1 Date Mode #Conn // 日付 モード 接続数 2025-02-21 14:06:47 smcr 0 Date Mode #Conn // 日付 モード 接続数 2025-02-21 14:06:48 smcr 0 Date Mode #Conn // 日付 モード 接続数 2025-02-21 14:06:49 smcr 0
メモリ使用量に関する統計のクエリ
smc_monitor_ex
でmemory
サブコマンドを実行して、現在のnet namespace
内の SMC 接続で使用されているリングバッファの合計サイズをクエリします。# smc_monitor_ex memory -h usage: smc_monitor_ex memory [-h] [-i INTERVAL] [-r] [-m {smcr,smcd,smc}] optional arguments: // オプション引数 -h, --help show this help message and exit // このヘルプメッセージを表示して終了 -i INTERVAL, --interval INTERVAL Interval in seconds to display ringbuf usages. // リングバッファの使用量を表示する間隔(秒単位)。 -r, --raw Display memory usages in bytes without converting units. // 単位を変換せずにバイト単位でメモリ使用量を表示。 -m {smcr,smcd,smc}, --mode {smcr,smcd,smc} Mode to check, either 'smcr', 'smcd' or 'smc', default is 'smc' // 確認するモード。「smcr」、「smcd」、または「smc」。デフォルトは「smc」。
たとえば、次のコマンドを実行して、現在の
net namespace
内の SMC-R 接続で使用されているリングバッファの合計サイズを 1 秒ごとにクエリします。# smc_monitor_ex memory -m smcr -i 1 Date Mode Rx Bufs Tx Bufs // 日付 モード 受信バッファ 送信バッファ 2025-01-06 15:14:20 smcr 512.00 KB 512.00 KB Date Mode Rx Bufs Tx Bufs // 日付 モード 受信バッファ 送信バッファ 2025-01-06 15:14:21 smcr 512.00 KB 512.00 KB
すべての SMC 統計のクエリ
smc_monitor_ex
でbase
サブコマンドを実行して、現在のnet namespace
内の上記のすべての SMC 関連統計をクエリします。たとえば、次のコマンドを実行して、現在の
net namespace
内のすべての SMC-R 関連統計を 1 秒ごとにクエリします。# smc_monitor_ex base -m smcr -i 1 Date Mode Rx Rate Rx Rps Tx Rate Tx Rps #Conn Rx Bufs Tx Bufs // 日付 モード 受信速度 受信 RPS 送信速度 送信 RPS 接続数 受信バッファ 送信バッファ 2025-01-06 15:17:23 smcr 1.81 GB/s 21.66 K/s 0 B/s 0 /s 2 512.00 KB 512.00 KB Date Mode Rx Rate Rx Rps Tx Rate Tx Rps #Conn Rx Bufs Tx Bufs // 日付 モード 受信速度 受信 RPS 送信速度 送信 RPS 接続数 受信バッファ 送信バッファ 2025-01-06 15:17:24 smcr 1.82 GB/s 21.81 K/s 0 B/s 0 /s 2 512.00 KB 512.00 KB