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

Alibaba Cloud Linux:SMCのトラブルシューティング

最終更新日:Jul 05, 2024

このトピックでは、共有メモリ通信 (SMC) で発生する可能性のある問題とその解決方法について説明します。 このトピックは、Alibaba Cloud Linux 3に適用されます。

SMCはTCPを超えるアプリケーションパフォーマンスの改善を提供しません

問題の説明

TCPの代わりにSMCを使用してアプリケーションのTCP接続を高速化しても、アプリケーションのパフォーマンスは向上しません。

原因と解決策

  • アプリケーションに対して確立されたSMC接続はTCPにフォールバックします。 この場合、リモートダイレクトメモリアクセス (RDMA) を使用してネットワーク通信を高速化することはできません。 フォールバックの問題のトラブルシューティングと解決方法については、このトピックの「SMC fall back to TCP and RDMA cannot be used to accelerate communications」をご参照ください。

  • アプリケーションのネットワーク通信オーバーヘッドは、オーバーヘッド全体のごく一部を占める。 たとえば、アプリケーションはCPU集約型であり、ネットワーク通信にわずかに依存します。

  • SMCは、アプリケーションのネットワーク通信モデルと互換性がありません。 シナリオ例:

    • 短期間の接続が頻繁に確立され、閉じられるシナリオ。 SMC接続の確立には、RDMAリソースの作成および要求などの低速パス操作が含まれます。 主に短命の接続を使用するアプリケーションの場合、SMCはTCPを超えるパフォーマンスの改善を提供しません。

    • リソースが制限されているシナリオ。 SMC通信に必要なリソースは、Elastic Compute Service (ECS) インスタンスのメモリおよびeRDMAインターフェイス (ERI) 仕様に従います。 リソースが不十分な場合、SMCはTCPにフォールバックできます。 詳細については、「」をご参照ください。

SMCを有効にすると通信が失敗する

問題の説明

Alibaba Cloud Linux 3を実行するECSインスタンスの共有メモリ通信SMC-R (Remote Direct Memory Access) を有効にすると、特定のインターネット接続サービスのアドレスなどの特定のアドレスにpingを送信できますが、アクセスできません。 SMC-Rを無効にすると、問題は解決されます。

原因

一部のサーバーは、TCP仕様に厳密に準拠していません。 サーバがTCPオプションを処理するとき、サーバはTCPオプションを再生することができる。 その結果、ローカルエンドは、SMC能力のないピアサーバがSMCをサポートしていると誤ってみなす。

説明

TCP実装MUST (MUST-6) は、オプションが長さフィールドを持つと仮定して、実装していないTCPオプションをエラーなく無視します。 詳細については、「RFC 9293」をご参照ください。

SMCのサポートを示すために使用されるTCPオプションが再生されると、ローカルエンドはピアサーバーをSMC対応であると誤認します。 この場合、ハンドシェイクエラーが発生します。 その結果、cURL要求などの要求は失敗しますが、インターネット制御メッセージプロトコル (ICMP) を介したpingは成功します。

image

check_tcpoption_replay.pyツールを使用して問題を診断できます。

check_tcpoption_replay.pyをクリックしてスクリプトの内容を表示します

scape. all import * から

from scapy.all import *
import time
import argparse

# Set up command line arguments
parser = argparse.ArgumentParser(description='Check if the server replays with the same TCP option.')
parser.add_argument('-i', '--ip', required=True, help='Target IP address')
parser.add_argument('-p', '--port', required=True, type=int, help='Target port number')
parser.add_argument('-v', '--verbose', action='store_true', help='Print verbose output')
args = parser.parse_args()

# Target IP and port
target_ip = args.ip  # Get target IP from command line arguments
target_port = args.port  # Get target port from command line arguments
verbose = args.verbose  # Get verbose flag from command line arguments

# Create a TCP SYN packet that includes a special TCP Option
ip = IP(dst=target_ip)
syn = TCP(sport=RandShort(), dport=target_port, flags='S', options=[(254, b'xxxx')])
syn_ack_pkt = sr1(ip/syn, timeout=1, verbose=verbose)

# Check if the returned packet is a TCP SYN-ACK
if syn_ack_pkt and TCP in syn_ack_pkt and syn_ack_pkt[TCP].flags & 18:  # SYN-ACK flags
    # Check for the special TCP Option
    if any(opt[0] == 254 and opt[1] == b'xxxx' for opt in syn_ack_pkt[TCP].options):
        print("The server has replayed the TCP option")
    else:
        print("The server did not replay the TCP option")
else:
    print("Failed to receive SYN-ACK, please make sure the IP and port are correct")
    sys.exit(1)

# Complete the TCP handshake
if syn_ack_pkt:
    ack = TCP(sport=syn_ack_pkt[TCP].dport, dport=target_port, flags='A', seq=syn_ack_pkt[TCP].ack, ack=syn_ack_pkt[TCP].seq + 1)
    send(ip/ack, verbose=verbose)

# Wait for 1 second before disconnecting
time.sleep(1)

# Send TCP FIN to close the connection
if syn_ack_pkt:
    fin = TCP(sport=syn_ack_pkt[TCP].dport, dport=target_port, flags='FA', seq=syn_ack_pkt[TCP].ack, ack=syn_ack_pkt[TCP].seq + 1)
    last_ack_pkt = sr1(ip/fin, timeout=1, verbose=verbose)

# Complete the four-way handshake
if last_ack_pkt and TCP in last_ack_pkt and last_ack_pkt[TCP].flags & 16:  # ACK flag
    last_ack = TCP(sport=syn_ack_pkt[TCP].dport, dport=target_port, flags='A', seq=last_ack_pkt[TCP].ack, ack=last_ack_pkt[TCP].seq + 1)
    send(ip/last_ack, verbose=verbose)
  1. Python 3およびScapyライブラリをインストールします。

    yum install python3 -y
    python3 -m pip install scapy
  2. check_tcpoption_replay.pyツールを実行します。

    python3 check_tcpoption_replay.py -i <Server IP address> -p <Server port>

    特定のサーバーでTCPオプションの再生の問題が発生した場合、コマンド出力にサーバーがTCPオプションを再生しましたが表示されます。 特定のサーバーでTCPオプションの再生の問題が発生しなかった場合、コマンド出力に [サーバーはTCPオプションを再生しませんでした] が表示されます。

解決策

TCPオプションのリプレイの問題は予期せず発生し、TCPオプションは中間ネットワークノードまたはピアによってリプレイされるため、解決できません。 上記の「問題の説明」セクションで説明されている問題のあるサービスにアクセスする場合は、SMCを使用しないことを推奨します。

smc_runコマンドの実行後にSMCの有効化に失敗しました

問題の説明

を実行した後、smc_run ./fooコマンドを実行してアプリケーションのSMCを有効にすると、smcr lコマンドを実行してSMC-Rのリンクグループを探索しますが、コマンド出力はSMC-Rのリンクグループが作成されていないことを示します。 次に、smcss -aコマンドを実行してSMCソケットを照会しますが、コマンド出力は、SMC接続が存在しないこと、またはSMC接続が片側でTCPにフォールバックすることを示します。 コマンドの詳細については、「」をご参照ください。

原因

smc_runコマンドは、次のメカニズムを使用してSMCを透過的に有効にします。LD_PRELOAD変数で指定されたsmc-toolsから他のライブラリの前にダイナミックリンクライブラリをプリロードし、プリロードされたダイナミックリンクライブラリでソケット (2) 呼び出しを行い、ソケットのファミリとプロトコルを変更します。 アプリケーションが動的にリンクされていない場合、smc_runコマンドを実行して、アプリケーションのSMCを透過的に有効にすることはできません。

解決策

smcの使用」で説明されているsysctl net. SMC. tcp2smcコマンドを実行してSMCを有効にします。

SMCを有効にすると、特定のポートが使用できなくなります

問題の説明

SMCがロードされると、65500〜65515のポート範囲内の16個のポートが使用できなくなります。 ポートのバインド (2) 呼び出しを行うと、EADDRINUSEが返されます。

原因

SMC-RとeRDMAは一緒に使用されます。 SMCモジュールは、帯域外 (OOB) 接続を確立するために、ERIが存在するネット名前空間内のポート65500 65515を使用する。 dmesgコマンドを実行し、コマンド出力で次の情報を表示できます。

smc: smc: load SMC module with reserve_mode
NET: Registered protocol family 43
smc: netns <netns ID> reserved ports [65500 ~ 65515] for eRDMA OOB
smc: adding ib device erdma_0 with port count 1
smc: ib device erdma_0 port 1 has pnetid

があります

SMCモジュールがポートを占有できない場合、SMCモジュールはeRDMAデバイスを使用できません。

解決策

SMCモジュールをアンロードしてポートを解放します。 SMCモジュールをアンロードする方法については、「SMCの使用」トピックの手順セクションを参照してください。

SMCはTCPにフォールバックし、RDMAを使用して通信を加速することはできません

問題の説明

アプリケーションでSMCがTCPを置き換えることを有効にした後、smcss -aコマンドを実行すると、コマンドの出力は、SMC接続が自動的にTCPにフォールバックすることを示します。

原因

SMC接続の確立中に例外によってSMC接続がTCPにフォールバックする場合でも、SMC接続は通信に使用できますが、SMC接続を使用するアプリケーションはRDMAのパフォーマンス上の利点を活用できません。 SMCからTCPへのフォールバックが発生すると、原因コードが返されます。 コードに基づいてフォールバックの原因を特定できます。

解決策

  1. smcss -aコマンドを実行して、SMC-to-TCPフォールバックの原因コードを取得します。

    サンプルコマンド出力:

    State          UID   Inode   Local Address           Peer Address            Intf Mode
    ACTIVE         00000 0156721 192.168.99.21:60188     192.168.99.22:8090      0000 TCP 0x03010000
    ACTIVE         00000 1202539 172.16.4.189:44780      172.16.4.190:1811       0000 SMCR

    最初のエントリでは、Intfモード列のTCPは、SMC接続がTCPに戻ったことを示します。 原因コードは0x03010000です。 2番目のエントリでは、Intfモード列のSMCRは、SMC-R接続が確立されていることを示します。 Intfモード列に2つの原因コード (例: 0x05000000と0x03030001) が表示されている場合、最初のコードはローカルホストの原因を示し、2番目のコードはピアホストの原因を示します。 ほとんどの場合、SMCからTCPへのフォールバックはピアホストによって発生します。

  2. 原因コードに基づいてSMCからTCPへのフォールバックの原因を特定し、フォールバックを解決します。

    次の表に、SMC-to-TCPフォールバックの原因と原因コードを示し、フォールバックの解決策を示します。

    原因コード

    説明

    考えられる原因と解決策

    0x01010000

    メモリ不足のため、リソースを作成できません。

    • 原因: ホストメモリが、SMC接続の確立に必要なデータ構造と読み取りおよび書き込み操作に対応するには不十分です。

    • 解決策: 不要なプロセスの終了などの操作を実行して、使用可能なメモリを増やします。

    0x02010000

    接続レイヤ制御 (CLC) またはリンクレイヤ制御 (LLC) メッセージがTCPハンドシェークプロセス中に送信されると、RDMAリンクを介して送信されるリンク確認メッセージがタイムアウトします。

      • 原因1: RDMAネットワークインターフェースカード (RNIC) またはRDMAリンクに障害が発生します。 その結果、RDMAリンクを介して送信されるLLCメッセージに対する応答はタイムアウトする。

      • 解決策1: RNICが期待どおりに機能することを確認します。

      • 原因2: イーサネットネットワークインターフェイスコントローラー (NIC) またはTCP/IPネットワークに障害が発生します。 その結果、TCP接続を介して送信されるCLCメッセージに対する応答はタイムアウトする。

      • 解決策2: イーサネットNICが期待どおりに機能することを確認します。

    0x02020000

    RDMAリンクを確立するためにLLCメッセージが送信されると、タイムアウトが発生します。

    原因コードは使用されていません。

    0x03000000

    設定が正しくないため、正しいIPアドレスを取得できません。

    • 原因: SMC接続を確立するための提案が作成されると、CLCソケットに対応するIPアドレスを取得できません。

    • 解決策: TCPベースのCLC接続と対応するデバイスが期待どおりに機能することを確認してください。

    0x03010000

    ピアホストはSMCをサポートまたは使用していません。

    • 原因: ピアホストはSMCをサポートしていません。 ピアホストがSMCをサポートしている場合、TCPハンドシェークプロセス中にCLC接続を介して送信されるSYNまたはSYNACKパケットには、SMC TCPオプションフラグが含まれます。

    • 解決策: ローカルまたはピアホスト上のアプリケーションのプロトコルスタックがSMCプロトコルスタックに置き換えられているかどうかを確認し、smc-toolsパッケージからsmcssコマンドを実行してSMC接続のステータスを確認します。 アプリケーションに対応する接続およびポートが存在しない場合は、TCPをSMCに置き換えてSMC接続を確立します。

    0x03020000

    IPsecはサポートされていません。

    • 原因: IPsecはSMC接続で使用されていますが、SMCはIPsecをサポートしていません。

    • 解決策: SMC接続でIPsecを使用しないでください。

    0x03030000

    共有メモリ通信なし-ダイレクトメモリアクセス (SMC-D) またはSMC-Rデバイスが利用可能です。

      • 原因1: SMC-R接続を確立するために利用可能なRDMAデバイスがない。

      • 解決策1: smcr dコマンドを実行して、RDMAデバイスがSMC-R接続を確立できるかどうかを確認します。 Alibaba Cloud eRDMAシナリオで使用可能なRDMAデバイスがない場合は、ECSコンソールでERIsが適切に設定され、ERIドライバーがインスタンスオペレーティングシステムに適切にインストールされていることを確認してください。

      • 原因2: 複数のイーサネットNICが使用されている場合、SMC-R接続に使用されているイーサネットNICはeRDMA対応ではなく、eRDMAデバイスが見つかりません。

      • 解決策2: ibv_devinfoコマンドを実行して、eRDMAデバイスのノードGUIDを照会します。 ip addrコマンドを実行して、イーサネットNICのMACアドレスを照会します。 次に、eRDMAデバイスのノードGUIDをイーサネットNICのMACアドレスと比較して、イーサネットNICがeRDMA対応であるかどうかを判断します。

      • 原因3: RDMAデバイスが排他モードで実行するように設定されている場合、SMCはRDMAソケットが作成されているネット名前空間でのみRDMAデバイスを検索します。

      • 解決策3: rdma systemコマンドを実行して、RDMAデバイスの動作モードを確認します。 RDMAデバイスが排他モードで実行されている場合、コマンド出力にnetns exclusiveが表示されます。 ネット名前空間でRDMAデバイスを使用するには、rdma dev set <RDMA device name> netns <net namespace name> コマンドを実行して、RDMAデバイスをネット名前空間に移動します。 RDMAデバイスがRDMA over Converged Ethernet (RoCE) またはInternet Wide Area RDMA Protocol (iWARP) デバイスの場合は、RDMAデバイスと必要なEthernetデバイスをネット名前空間に移動します。

      • 原因4: eRDMAデバイスを使用すると、クライアントはAF_INET6接続をSMC接続に置き換えることを試みます。

      • 解決策4: eRDMAデバイスは、AF_INET6接続の置換を許可しないSMCバージョン2 (SMCv2) プロトコルのみに基づいています。 TCPを使用します。 次に、アプリケーションのプロトコルファミリをAF_INETに変更します。

    0x03030001

    SMC-Dデバイスはありません。

    Alibaba CloudはSMC-Dデバイスを提供していません。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x03030002

    SMC-Rデバイスはありません。

      • 原因1: SMC接続確立中に、選択されたRDMAデバイスが無効になります。

      • 解決策1: smcr dコマンドを実行して、SMC-Rデバイスがシステムで使用可能かどうかを確認します。 必要なRDMAデバイスがAlibaba Cloud ERIの場合、ECSコンソールにERIが追加され、ERIドライバーが適切にインストールおよび設定されていることを確認します。

      • 原因2: 複数のイーサネットNICが使用されている場合、SMC-R接続に使用されているイーサネットNICはeRDMA対応ではなく、eRDMAデバイスが見つかりません。

      • 解決策2: ibv_devinfoコマンドを実行して、eRDMAデバイスのノードGUIDを照会します。 ip addrコマンドを実行して、イーサネットNICのMACアドレスを照会します。 次に、eRDMAデバイスのノードGUIDをイーサネットNICのMACアドレスと比較して、イーサネットNICがeRDMA対応であるかどうかを判断します。

      • 原因3: RDMAデバイスが排他モードで実行するように設定されている場合、SMCはRDMAソケットが作成されているネット名前空間でのみRDMAデバイスを検索します。

      • 解決策3: rdma systemコマンドを実行して、RDMAデバイスの動作モードを確認します。 RDMAデバイスが排他モードで実行されている場合、コマンド出力にnetns exclusiveが表示されます。 ネット名前空間でRDMAデバイスを使用するには、rdma dev set <RDMA device name> netns <net namespace name> コマンドを実行して、RDMAデバイスをネット名前空間に移動します。 RDMAデバイスがRoCEまたはiWARPデバイスの場合は、RDMAデバイスと必要なイーサネットデバイスをnet名前空間に移動します。

    0x03030003

    SMC-DデバイスはISMv2プロトコルをサポートしていません。

    Alibaba CloudはSMC-Dデバイスを提供していません。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x03030004

    ピアホストは、SMCv2プロトコルの拡張をサポートしていません。

    • 原因: ローカルホストに対してSMCv2プロトコルが有効になっていますが、ピアホストはSMCv2プロトコルをサポートしていません。 SMCプロトコルスタックは、基になるデバイス機能に基づいてSMCv1またはSMCv2プロトコルを使用します。 Alibaba Cloud eRDMAまたはRoCE v2のシナリオでは、SMCv2が使用されます。

    • 解決策: 両方の通信ホストで同じタイプのRDMAデバイスを使用して、ホストが同じSMCプロトコルバージョンを使用するようにします。 smcr dコマンドを実行して、SMC-Rデバイスを照会します。 コマンド出力の [タイプ] 列の値は、SMC-Rデバイスのタイプを示します。 値は、RoCE_Express、RoCE_Express2、および0x107fを含む。 値0x107fはAlibaba Cloud eRDMAを示します。

    0x03030005

    ピアホストは、SMC-D v2プロトコルの拡張をサポートしていません。

    Alibaba CloudはSMC-Dデバイスを提供していません。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x03030006

    ピアホストには、システムエンタープライズID (SEID) がありません。

    原因コードは使用されていません。

    0x03030007

    SMC-D v2デバイスは使用できません。

    Alibaba CloudはSMC-Dデバイスを提供していません。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x03030008

    ピアホストには、ユーザー定義のエンタープライズID (UEID) がありません。

    • 原因: SMCv2プロトコルは使用されていますが、UEIDは指定されていません。

    • 解決策: smc-toolsパッケージからsmcr ueid {show | add | del} コマンドを実行して、両方の通信ホストに同じUEIDを指定します。

    0x03030009

    ローカルホストとピアホスト間のSMCバージョンネゴシエーションが失敗します。

    • 原因: ローカルホストとピアホストによってネゴシエートされるSMCバージョンが、CLCハンドシェイク中に変更されます。

    • 解決策: ローカルホストとピアホストが同じオペレーティングシステム配布を実行していることを確認します。

    0x0303000a

    リンクグループあたりの最大接続数 (LGRネゴシエーションあたりの最大接続数) のネゴシエーションが失敗しました。

    • 原因: SMCv2.1はLGRネゴシエーションごとの最大接続をサポートします。 交渉の結果が受け入れられない場合、フォールバックが発生する。 たとえば、ネゴシエートされた数はゼロであるか、ローカルホストに許可された最大値を超えています。

    • 解決策: ローカルホストとピアホストが同じオペレーティングシステム配布を実行していることを確認します。

    0x0303000b

    リンクグループあたりの最大リンク数 (LGRネゴシエーションあたりの最大リンク数) のネゴシエーションが失敗します。

    • 原因: SMCv2.1はLGRネゴシエーションごとに最大リンクをサポートします。 交渉の結果が受け入れられない場合、フォールバックが発生する。 たとえば、ネゴシエートされた数はゼロであるか、ローカルホストに許可された最大値を超えています。

    • 解決策: ローカルホストとピアホストが同じオペレーティングシステム配布を実行していることを確認します。

    0x0303000c

    ローカルホストとピアホスト間のSMCベンダー機能のネゴシエーションが失敗しました。

    • 原因: ローカルホストとピアホストによってネゴシエートされたSMCベンダー機能は、CLCハンドシェイク中に変更されます。

    • 解決策: ローカルホストとピアホストが同じオペレーティングシステム配布を実行していることを確認します。 次に、uname -rコマンドを実行してカーネルのバージョンを確認します。 カーネルのバージョンが5.10.134-015の場合、接続確立時にsysctl net.smc.vendor_exp_optionsの値を変更しないでください。 カーネルのバージョンが5.10.134-016以降の場合は、接続確立時にsysctl net.smc.experiment_vendor_optionsの値を変更しないでください。

    0x03040000

    ローカルホストとピアホストは、SMCデバイスの異なるモードを使用します。

    Alibaba CloudはSMC-Dデバイスを提供していません。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x03050000

    ピアホストのリモートメモリバッファ要素 (RMBE) は、アイバッチャを有する。

    原因コードはLinuxでは使用されていません。

    0x03060000

    SMC接続はMSG_FASTOPENフラグをサポートしていません。

    • 原因: SMCはMSG_FASTOPENフラグをサポートしていません。

    • 解決策: SMCソケットが作成されたら、MSG_FASTOPENフラグを削除します。

    0x03070000

    ローカルホストのIPプレフィックスまたはIPサブセットは、ピアホストのIPプレフィックスまたはIPサブセットとは異なります。

    • 原因: RDMAデバイスがRoCEv1デバイスの場合、SMCv1プロトコルが自動的に使用されます。 SMCv1はサブネット内通信のみをサポートします。 両方の通信ホストが同じサブネットにない場合、フォールバックが発生します。

    • 解決策: RDMAデバイスがRoCEv1デバイスの場合、両方の通信ホストが同じサブネットにあることを確認してください。 RDMAデバイスがeRDMA対応である場合、SMCv2プロトコルは自動的に使用され、サブネット制限によるフォールバックは発生しません。

    0x03080000

    デバイスのVLAN IDを取得できません。

    • 原因: 接続確立中に、SMCはSMCソケットに対応するデバイスのVLAN IDの取得を試みます。

    • 解決策: 5つのデバイスと対応するイーサネットデバイスによって識別されるTCP接続が期待どおりに機能することを確認してください。

    0x03090000

    VLAN IDを内部共有メモリ (ISM) デバイスに登録することはできません。

    Alibaba CloudはSMC-Dデバイスを提供していません。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x030a0000

    リンクグループにはSMC-R RDMAリンクがありません。

    • 原因: SMC-R接続が確立されると、接続が属するリンクグループからのリンクが割り当てられます。 接続にリンクが割り当てられていない場合、RDMAを使用して接続を高速化することはできません。

    • 解決策: smcr dコマンドを実行して、ECSインスタンス上のRNICが期待どおりに機能するかどうかを確認します。 必要なRDMAデバイスがAlibaba Cloud ERIの場合、ECSコンソールにERIが追加され、ERIドライバーが適切にインストールおよび設定されていることを確認します。

    0x030b0000

    クライアントは、サーバーによって提供されるRDMAリンクを見つけることができません。

    • 原因: クライアントは、サーバーから提供されたキューエア番号 (QPN) 、グローバル識別子 (GID) 、およびメディアアクセス制御アドレス (MAC) 情報に基づいてRDMAリンクを検索し、サーバーへの接続を確立します。 クライアントが必要なRDMAリンクを見つけることができない場合、RDMAによって接続を高速化することはできません。

    • 解決策: smcr dコマンドを実行して、ECSインスタンス上のRNICが期待どおりに機能するかどうかを確認します。 必要なRDMAデバイスがAlibaba Cloud ERIの場合、ECSコンソールにERIが追加され、ERIドライバーが適切にインストールおよび設定されていることを確認します。

    0x030c0000

    SMCバージョンのネゴシエーションが失敗します。

    • 原因: ローカルホストとピアホストによってネゴシエートされたSMCバージョンは受け入れられません。

    • 解決策: ローカルホストとピアホストが同じオペレーティングシステム配布を実行していることを確認します。

    0x030d0000

    SMC-D DMBの最大数に達します。

    Alibaba CloudはSMC-Dデバイスを提供していません。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x030e0000

    ピアホストは、SMC-R V2プロトコルを介してローカルホストに接続できません。

    • 原因: SMCv2プロトコルを介して接続が確立されると、クライアントはサーバーによって提供されたIPアドレスに基づいてルーティング情報を見つける必要があります。 現在、クライアントはローカルホストとピアホストのIPアドレスに基づいてルーティング情報を見つけることができません。

    • 解決策: 5つのデバイスと対応するイーサネットデバイスによって識別されるTCP接続が期待どおりに機能し、到達可能であることを確認します。 たとえば、イーサネットNIC、IP設定、およびルーティング設定が正常でアクセス可能であることを確認します。

    0x030f0000

    SMC-R V2接続が間接接続であるかどうかを示すフラグが不適切に設定される。

    • 原因: SMCv2プロトコルを介して接続が確立されると、クライアントは、サーバーからのゲートウェイフラグに基づいて、トラフィックがゲートウェイを通過すると判断します。 ただし、ローカルホストとピアホストのIPアドレスに基づいて取得されたルーティング情報は、トラフィックがゲートウェイを通過しないことを示します。

    • 解決策: 5つのデバイスと対応するイーサネットデバイスによって識別されるTCP接続が期待どおりに機能し、到達可能であり、同じネットワークパスを使用していることを確認します。 たとえば、イーサネットNIC、IP設定、およびルーティング設定が正常でアクセス可能であることを確認します。

    0x04000000

    サーバーとクライアントは同じリンクグループを使用しません。

    • 原因: 接続確立中に、サーバーはリンクグループを再利用しますが、クライアントはリンクグループを作成したいと考えています。

    • 解決策: smcr dコマンドを実行して、ECSインスタンス上のRNICが期待どおりに機能するかどうかを確認します。 必要なRDMAデバイスがAlibaba Cloud ERIの場合、ECSコンソールにERIが追加され、ERIドライバーが適切にインストールおよび設定されていることを確認します。

    0x05000000

    ピアホストはハンドシェイクを拒否します。

    • 原因: 接続確立中、ピアホストはCLCメッセージで応答してRDMA接続を拒否します。

    • 解決策: smcssコマンドを実行し、5つの情報に基づいて拒否されたRDMA接続を見つけ、ピアホストの原因コードに基づいてフォールバック原因を特定します。

    0x09990000

    RDMA関連リソースの作成に失敗しました。

    • 原因: RDMAリソースの作成または初期化に失敗しました。

    • 解決策: RDMAモニタリングツールを使用して、失敗したリソース要求に関する統計を表示します。 Alibaba Cloud eRDMAデバイスを使用している場合、eadm statコマンドを実行してエラー統計を表示できます。

    0x09990001

    RDMA RTokenの追加に失敗しました。

    これはSMCプロトコルスタックの問題です。 問題が発生した場合は、Alibaba Cloudテクニカルサポートにお問い合わせください。

    0x09990002

    RDMAキューペア (QP) の初期化に失敗します。

    • 原因: 接続確立中にRDMA QPを必要とするRDMAリンクを作成する必要がある場合、SMCはInfiniBand (IB) verbsインターフェイスを呼び出してRDMA QPを初期化および修正します。 このプロセス中に問題が発生します。

    • 解決策: smcr dコマンドを実行して、使用可能なSMC-Rデバイスを照会します。 RDMAデバイスがAlibaba Cloud ERIの場合、ERIがECSコンソールで適切に設定され、ERIドライバーがオペレーティングシステムに適切にインストールされていることを確認します。

    0x09990003

    SMCが使用するRDMAデバイスにメモリ領域 (MR) を登録できない場合。

    • 原因: 通信にRDMAを使用する場合、データにアクセスして書き込むには、RDMAデバイスにMRを登録する必要があります。 MRの数またはサイズがRDMAデバイスでサポートされている仕様を超えると、エラーが報告されます。

    • 解決策: smcr dコマンドを実行して、SMCで使用されているRDMAデバイスの名前を照会します。 ibv_devinfo -d <RDMA device name> -v | grep max_mrコマンドを実行します。 コマンド出力では、max_mrはRDMAデバイスがサポートするmrの最大数を示し、max_mr_sizeはRDMAデバイスがサポートするmrの最大サイズを示します。 ほとんどの場合、MRの最大数に達したために問題が発生します。 MRの数を減らすには、SMC接続の数を減らします。

    0x09990004

    SMCフロー制御に必要なクレジットは初期化できません。

    • 原因: RNICまたはRDMAリンクが失敗します。 その結果、クレジットメッセージは、RDMAリンクを介して送信することができない。

    • 解決策: RNICが期待どおりに機能することを確認してください。

SMCを有効にすると、一般的なネットワークO&Mツールによって収集されたデータが期待に応えられません

問題の説明

Alibaba Cloud Linux 3を実行するECSインスタンスに対してSMCを有効にすると、tcpdumpやWiresharkなどの一般的なネットワーク分析ツール、およびSocket Statistics (ss) やnetstatなどのネットワークモニタリングツールが、期待に合わない、または期待されるトラフィックデータを収集できないネットワークトラフィックデータを収集します。

原因

SMC-Rは、RDMAに基づく通信プロトコルである。 現在、一般的なネットワークO&MツールはTCPトラフィックのみを分析または監視し、RDMAパケットを識別できません。 その結果、ネットワークO&Mツールに表示されるデータは、実際のネットワークデータと一致しません。

解決策

RDMA関連のO&Mツールを使用して、データを分析または監視します。 詳細については、「eRDMAの監視と確認」をご参照ください。

GPUアクセラレーションまたはスーパーコンピューティングクラスター (SCC) インスタンスにロードされているSMCモジュールは使用できません

問題の説明

GPUアクセラレーションまたはSCCインスタンスにロードされたSMCモジュールは使用できません。

原因

Mellanox OpenFabrics Enterprise Distribution (OFED) ドライバーは、GPUアクセラレーションおよびSCCインスタンスにインストールされます。 OFEDスタック内のSMCモジュールは自動的にロードされ、機能しません。 Mellanox OFEDドライバをインストールすると、RDMA関連関数のシンボルが変更されます。 カーネルに含まれているSMCモジュールの読み込みに失敗し、不明シンボルエラーが表示されます。

解決策

Alibaba Cloud Linux 3のSMCモジュールは、GPUアクセラレーションまたはSCCインスタンスでは使用できません。

SMCを有効にすると、setsockoptおよびgetsockopt呼び出しの一部のSOL_SOCKETまたはSOL_TCPレベルオプションが期待どおりに機能しなくなります。

問題の説明

SMCを有効にしてアプリケーションでTCPを置き換えた後、TCP接続に使用された一部のSOL_SOCKETまたはSOL_TCPレベルのオプションは、setsockoptまたはgetsockopt呼び出しを行って構成できないか、構成後に期待どおりに機能しません。

原因

TCPプロトコルスタックをSMCプロトコルスタックに配置すると、共有バッファが使用されてSMCリンクを介してデータが転送されます。 SMCのプロトコルスタック設計とデータ転送方法は、TCPのプロトコルスタック設計とデータ転送方法とは大きく異なります。 この場合、SOL_SOCKETまたはSOL_TCPレベルのオプションは適用できません。

解決策

Alibaba Cloud Linux 3のSMCでサポートされている、またはサポートされていないSOL_SOCKETまたはSOL_TCPレベルオプションに注意してください。 次の表は、SOL_SOCKETまたはSOL_TCPレベルオプションのSMCのサポートを示しています。

テーブルには、Y、M、Nが表示されます。

  • Y: このオプションはSMCでサポートされており、設定および取得でき、期待どおりに機能します。

  • M: このオプションはSMCではサポートされておらず、設定および取得できますが、SMCとTCPのデザインの違いにより、期待どおりに機能することはできません。

  • N: このオプションはSMCでサポートされていないため、設定または取得できません。 原因コード0x03060000または0x03010001でTCPへのフォールバックが発生します。

SOL_SOCKETレベルオプション

オプション

SMCによるサポート

SO_DEBUG

Y

SO_REUSEADDR

Y

SO_TYPE

Y

SO_ERROR

Y

SO_DONTROUTE

M

SO_BROADCAST

M

SO_SNDBUF

Y

SO_RCVBUF

Y

SO_SNDBUFFORCE

Y

SO_RCVBUFFORCE

Y

SO_KEEPALIVE

M

SO_OOBINLINE

M

SO_NO_CHECK

M

SO_PRIORITY

M

SO_LINGER

Y

SO_BSDCOMPAT

M

SO_REUSEPORT

Y

SO_PASSCRED

M

SO_PEERCRED

M

SO_RCVLOWAT

M

SO_SNDLOWAT

M

SO_RCVTIMEO_OLD

Y

SO_SNDTIMEO_OLD

Y

SO_SECURITY_AUTHENTICATION

N

SO_SECURITY_ENCRYPTION_TRANSPORT

N

SO_SECURITY_ENCRYPTION_NETWORK

N

SO_BINDTODEVICE

N

SO_ATTACH_FILTER

M

SO_DETACH_FILTER

M

SO_PEERNAME

Y

SO_ACCEPTCONN

M

SO_PEERSEC

N

SO_PASSSEC

M

SO_MARK

M

SO_PROTOCOL

Y

SO_DOMAIN

Y

SO_RXQ_OVFL

M

SO_WIFI_STATUS

M

SO_PEEK_OFF

N

SO_NOFCS

M

SO_LOCK_FILTER

Y

SO_SELECT_ERR_QUEUE

M

SO_BUSY_POLL

M

SO_MAX_PACING_RATE

M

SO_BPF_EXTENSIONS

Y

SO_INCOMING_CPU

M

SO_ATTACH_BPF

M

SO_ATTACH_REUSEPORT_CBPF

M

SO_ATTACH_REUSEPORT_EBPF

N

SO_CNX_ADVICE

M

SO_MEMINFO

M

SO_INCOMING_NAPI_ID

M

SO_COOKIE

Y

SO_PEERGROUPS

N

SO_ZEROCOPY

N

SO_TXTIME

M

SO_BINDTOIFINDEX

N

SO_TIMESTAMP_OLD

M

SO_TIMESTAMPNS_OLD

M

SO_TIMESTAMPING_OLD

M

SO_TIMESTAMP_NEW

M

SO_TIMESTAMPNS_NEW

M

SO_TIMESTAMPING_NEW

M

SO_RCVTIMEO_NEW

Y

SO_SNDTIMEO_NEW

Y

SO_DETACH_REUSEPORT_BPF

N

SOL_TCPレベルのオプション

オプション

SMCによるサポート

TCP_NODELAY

Y

TCP_MAXSEG

M

TCP_CORK

Y

TCP_KEPIDLE

M

TCP_KEEPINTVL

M

TCP_KEEPCNT

M

TCP_SYNCNT

M

TCP_LINGER2

M

TCP_DEFER_ACCEPT

Y

TCP_WINDOW_CLAMP

M

TCP_INFO

M

TCP_QUICKACK

M

TCP_CONGESTION

M

TCP_MD5SIG

Y

TCP_THIN_LINEAR_TIMEOUTS

M

TCP_THIN_DUPACK

M

TCP_USER_TIMEOUT

M

TCP_REPAIR

M

TCP_REPAIR_QUEUE

M

TCP_QUEUE_SEQ

M

TCP_REPAIR_OPTIONS

M

TCP_FASTOPEN

N

TCP_TIMESTAMP

M

TCP_NOTSENT_LOWAT

M

TCP_CC_INFO

M

TCP_SAVE_SYN

Y

TCP_SAVED_SYN

Y

TCP_REPAIR_WINDOW

M

TCP_FASTOPEN_CONNECT

N

TCP_ULP

N

TCP_MD5SIG_EXT

Y

TCP_FASTOPEN_KEY

N

TCP_FASTOPEN_NO_COOKIE

N

TCP_ZEROCOPY_RECEIVE

N

TCP_CM_INQ/TCP_INQ

M

TCP_TX_DELAY

M