Elastic Remote Direct Memory Access (eRDMA) を使用すると、超低レイテンシでリクエストを処理できます。 このトピックでは、共有メモリ通信 (SMC) とRedisをeRDMA拡張Elastic Compute Service (ECS) インスタンスにデプロイし、SMCを使用してRedisのリクエスト処理機能をテストする方法について説明します。
背景情報
SMCは、カーネル空間で機能し、RDMAテクノロジを使用し、ソケット層と互換性のある高性能プロトコルスタックです。 SMCは、共有メモリ技術に基づく以下のバリエーションで提供される: 共有メモリ通信 − 内部共有メモリ (ISM) 技術を使用するダイレクトメモリアクセス (SMC-D) 、およびRDMA技術を使用するリモートダイレクトメモリアクセス (SMC-R) を介した共有メモリ通信。 このトピックでは、SMC-Rをデプロイし、SMC-Rを使用してテストを実行する方法について説明します。
ステップ1: SMCのデプロイ
このステップでは、クライアントとして機能するインスタンスCとサーバーとして機能するインスタンスDの2つのECSインスタンスを作成する必要があります。 この例では、次の設定を持つECSインスタンスが作成されます。
インスタンスタイプ: ecs.c7re.8xlarge
イメージ: Alibaba Cloud Linux 3.2104 LTS 64ビット。
ECSインスタンスは同じセキュリティグループに属し、内部ネットワークを介して相互に通信できます。
インスタンスDのプライマリelastic network interface (ENI) には、プライマリプライベートIPアドレス192.168.5.49が割り当てられます。
インスタンスCとインスタンスDの2つのeRDMA拡張ECSインスタンスを作成して接続します。
詳細については、「エンタープライズレベルのインスタンスでのeRDMAの設定」をご参照ください。
インスタンスCとインスタンスDで次のコマンドを実行し、SMC-Rモジュールをデプロイします。
modprobe smc && modinfo smc
インスタンスCとインスタンスDで次のコマンドを実行してIPv6を無効にし、インスタンスでeRDMA接続を確立できるようにします。
sysctl net.ipv6.conf.all.disable_ipv6=1
SMC eRDMA機能を有効にするには、インスタンスCとインスタンスDで次のコマンドを実行します。 このように、トラフィックはeRDMA上で優先的に実行される。
sysctl net.smc.tcp2smc=1
インスタンスCとインスタンスDで次のコマンドを実行し、smc-toolsをインストールします。
smc-toolsは、複数の側面からSMC-Rを監視および診断できるIBMのツールキットです。 smc-toolsは次のモジュールで構成されています。
smcr: SMC-Rリソースに関する統計情報を表示します。
smcss: SMCソケットに関する情報を表示します。
yum install -y smc-tools
smc-toolsをインストールしたら、
smcss -a
コマンドを実行して現在のSMC接続を照会できます。
ステップ2: オープンソースRedisのデプロイ
インスタンスCとインスタンスDにSMCをデプロイした後、インスタンスにRedisをデプロイできます。 このセクションでは、Redisクライアントとして機能するインスタンスCとRedisサーバーとして機能するインスタンスDにRedisをデプロイする方法について説明します。
インスタンスCおよびインスタンスDに接続します。詳細については、「接続方法の概要」をご参照ください。
インスタンスCとインスタンスDにオープンソースRedisをインストールします。
次のコマンドを実行して、オープンソースRedisのインストールパッケージをダウンロードします。
wget https://github.com/redis/redis/archive/refs/tags/6.2.5.zip
Redisのバージョンについては、「Redis GitHub Repo」をご参照ください。
次のコマンドを実行してインストールパッケージを解凍し、インストールパッケージの解凍先ディレクトリに移動します。
unzip 6.2.5.zip && cd redis-6.2.5
説明インスタンスCとインスタンスDに
unzip
ユーティリティがインストールされていることを確認します。インスタンスにユーティリティがインストールされていない場合は、yum install -y unzip zip
コマンドを実行してユーティリティをインストールします。次のコマンドを実行して、Redisをコンパイルしてインストールします。
make -j
インスタンスDで次のコマンドを実行してRedisを起動します。
./src/redis-server --bind 192.168.5.49 --port 6379 --protected-mode no --save
説明192.168.5.49は、インスタンスDのプライマリENIのプライマリプライベートIPアドレスです。6379は、Redisがリッスンするポートの番号です。 プライマリプライベートIPアドレスとポート番号を実際の値に置き換えます。
RedisクライアントからRedisサーバーに接続してテストします。
次のコマンドを実行して、Redisサーバーに接続します。
. /src/redis-cli -h 192.168.5.49 -p 6379
redis-benchmarkを使用してストレステストを実行します。
次のコマンドを実行して、1,000,000 SETコマンドをサーバーに送信する100のクライアントをシミュレートします。
. /src/redis-benchmark -h 192.168.5.49 -p 6379 -n 1000000 -t set -c 100
または、複数のストレステストプロセスを開始して、SMC-Rを有効にした後に組み合わせテストを実行できます。 上記の手順を実行して、別のRedisクライアントをデプロイし、2つのRedisクライアントで複数のストレステストプロセスを開始してから、Redisサーバーの1秒あたりの操作数 (OPS) を表示します。
SETコマンドの8つのストレステストプロセスを開始するために使用されるサンプルコマンド:
. /src/redis-benchmark -h 192.168.5.49 -p 6379 -n 100000000 -t set -- threads 8 -c 100
GETコマンドの8つのストレステストプロセスを開始するために使用されるサンプルコマンド:
. /src/redis-benchmark -h 192.168.5.49 -p 6379 -n 1000000 -t get -- threads 8 -c 100
Redisサーバー上のOPSの数を表示するために使用されるサンプルコマンド:
./src/redis-cli -h 192.168.5.49 -p 6379 info | grep instantaneous_ops_per_sec
説明新しい接続ウィンドウを開き、上記のコマンドを入力します。