Elastic Remote Direct Memory Access(eRDMA)はリクエストの処理を高速化し、超低レイテンシを実現します。このトピックでは、eRDMA ベースの共有メモリ通信(SMC)と Redis をデプロイし、SMC を使用して Redis のリクエスト処理能力をテストする方法について説明します。
背景情報
SMC は、カーネル空間で動作する高パフォーマンス プロトコルスタック で、共有メモリ技術を使用し、ソケットレイヤーと互換性があります。共有メモリ技術に基づいて、内部共有メモリ(ISM)技術を使用する Shared Memory Communications - Direct Memory Access(SMC-D)と、RDMA 技術を使用する Shared Memory Communications over Remote Direct Memory Access(SMC-R)の 2 つのバリエーションに分類されます。詳細については、「SMC の適用性」をご参照ください。
Alibaba Cloud Linux 3 は、eRDMA に基づく SMC-R アクセラレーション機能を提供します。Alibaba Cloud で SMC-R を使用するには、eRDMA 対応 ECS インスタンスを作成する必要があります。
準備
eRDMA 対応インスタンスを 2 つ作成し、前提条件[カスタム起動] タブでインスタンスを作成する オプションを選択し、プライマリ Elastic Network Interface(ENI)の eRDMA インターフェース(ERI)機能を有効にします。詳細については、「」をご参照ください。
ECS インスタンスは、以下の構成のサーバーとクライアントとして機能します。
インスタンスタイプ: ecs.g8i.8xlarge
イメージ: Alibaba Cloud Linux 3.2104 LTS 64 ビット
ネットワーク: ECS インスタンスは同じ セキュリティグループ に属し、内部ネットワークを介して相互に通信できます。
プライマリ ENI のプライマリ プライベート IP アドレス: サーバーとして使用するインスタンスの場合は 192.168.0.25、クライアントとして使用するインスタンスの場合は 192.168.0.24。必要に応じて IP アドレスを置き換えます。
説明このトピックのテストでは、プライマリ ENI の ERI 機能が有効になっている ECS インスタンスを使用します。サーバーとして使用される ECS インスタンスのプライマリ ENI のプライマリ プライベート IP アドレス は 192.168.0.25 です。
セカンダリ ENI の ERI 機能が有効になっている ECS インスタンスをテストに使用する場合は、上記の IP アドレスをセカンダリ ENI のプライマリ プライベート IP アドレス に置き換えます。詳細については、「ステップ 3: ERI を ECS インスタンスにバインドする」をご参照ください。
ステップ 1: SMC をデプロイする
ECS インスタンスに接続します。
詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
ECS インスタンスで次のコマンドを実行して、SMC-R モジュールをデプロイします。
modprobe smc && modinfo smcECS インスタンスで次のコマンドを実行して IPv6 を無効にし、ERI で eRDMA 接続を確立できるようにします。
重要Alibaba Cloud eRDMA デバイスと SMC は IPv6 アドレスをサポートしていません。アプリケーションが IPv6 を使用する場合、SMC は TCP にフォールバックします。詳細については、「IPv6 アドレスが使用されている場合、SMC は TCP にフォールバックする」をご参照ください。
カーネルバージョン
ANCK 5.10.134-17.3以降、SMC はIPv4-mapped IPv6アドレスをサポートしています。
sysctl net.ipv6.conf.all.disable_ipv6=1ECS インスタンスで次のコマンドを実行して、トラフィックが優先的に eRDMA 経由で送信されるように SMC eRDMA 機能を有効にします。
net 名前空間に対して透過的なソケット変換が有効になると、net 名前空間内の以降の新しい TCP ソケットは SMC ソケットに変換され、既存の TCP ソケットは影響を受けません。sysctl net.smc.tcp2smc=1ECS インスタンスで次のコマンドを実行して、smc-tools をインストールします。
smc-tools は IBM のツールキットで、SMC-R をさまざまな側面から監視および診断できます。これは、以下のモジュールで構成されています。
smcr: SMC-R リソースの統計を表示します。
smcss: SMC ソケットに関する情報を表示します。
yum install -y smc-toolssmc-tools をインストールした後、
smcss -aコマンドを実行して現在のトラフィックパスをクエリします。
ステップ 2: Redis をデプロイする
ECS インスタンスに Redis をデプロイします。
ECS インスタンスに接続します。
詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
ECS インスタンスで次のコマンドを実行して、Redis をインストールします。
sudo yum install -y redisサーバーとして使用する ECS インスタンスで次のコマンドを実行して、Redis サーバーを起動します。
redis-server --bind 192.168.0.25 --port 6379 --protected-mode no --save説明192.168.0.25 は、サーバーとして使用されるインスタンス上のプライマリ ENI のプライマリ プライベート IP アドレスであり、6379 は Redis がリッスンするポート番号です。プライマリ プライベート IP アドレスとポート番号を実際の値に置き換えてください。

クライアントとして使用する ECS インスタンスに接続し、ストレステストを実行します。
次のコマンドを実行して、Redis サーバーに接続します。
redis-cli -h 192.168.0.25 -p 6379redis-benchmark を使用してストレステストを実行します。
次のコマンドを実行して、100 クライアントがサーバーに 1,000,000 個の SET コマンドを送信するのをシミュレートします。
redis-benchmark -h 192.168.0.25 -p 6379 -n 1000000 -t set -c 100
SMC-R を有効にした後、複数のストレステストプロセスを起動して複合テストを実行することもできます。上記の手順を繰り返して別の Redis クライアントをデプロイし、2 つの Redis クライアントで複数のストレステストプロセスを起動し、Redis サーバーの 1 秒あたりの操作数(OPS)を表示します。
SET コマンドの 8 つのストレステストプロセスを開始するためのサンプルコマンド:
redis-benchmark -h 192.168.0.25 -p 6379 -n 100000000 -t set --threads 8 -c 100GET コマンドの 8 つのストレステストプロセスを開始するためのサンプルコマンド:
redis-benchmark -h 192.168.0.25 -p 6379 -n 1000000 -t get --threads 8 -c 100Redis サーバーの OPS 数を表示するためのサンプルコマンド:
redis-cli -h 192.168.0.25 -p 6379 info | grep instantaneous_ops_per_sec説明新しい接続ウィンドウを開き、上記のコマンドを入力します。

