elastic Remote Direct Memory Access (eRDMA) を使用して、高い通信パフォーマンス、低レイテンシ、および高スループットを必要とするTCPアプリケーションのネットワーク通信を高速化するには、network Accelerator (NetACC) を使用して、アプリケーションコードを変更することなくeRDMAおよびTCPアプリケーションを適応させることができます。 このトピックでは、NetACCとNetACCの使用方法について説明します。
NetACCはパブリックプレビュー中です。
Introduction to NetACC
NetACCは、低レイテンシや高スループットなどのeRDMAの利点を活用し、互換性のあるソケットインターフェイスを使用して既存のTCPアプリケーションを高速化するユーザーモードネットワーク高速化ライブラリです。
シナリオ
NetACCは、高いネットワークオーバーヘッドを伴うシナリオに適しています。
パケット /秒 (PPS) レートが高いシナリオ、特に、多数の小さなパケットが送受信されるシナリオ。 NetACCを使用すると、Redisがリクエストを処理する場合など、特定のシナリオでCPUオーバーヘッドを削減し、システムスループットを向上させることができます。
ネットワークレイテンシに敏感なシナリオ: ネットワーク応答を高速化するために、eRDMAはTCPよりも低いネットワークレイテンシを提供します。
短寿命接続の繰り返し作成: セカンダリ接続を確立するプロセスを高速化して、接続作成時間を短縮し、システムパフォーマンスを向上させることができます。
NetACCのインストール
インストール方法
eRDMAドライバーを使用してNetACCをインストール
eRDMAドライバをインストールすると、NetACCが自動的にインストールされます。 eRDMAドライバーのインストール方法については、「エンタープライズレベルのインスタンスにeRDMAを設定する」トピックの既存のECSインスタンスにeRDMAを設定するセクションをご参照ください。
NetACCの個別インストール
NetACCの特定のバージョンを使用するか、Elastic Compute Service (ECS) インスタンスでNetACCを一時的に使用できます。 インスタンスで次のコマンドを実行して、NetACCを個別にインストールします。
sudo curl -fsSL https://netacc-release.oss-cn-hangzhou.aliyuncs.com/release/netacc_download_install.sh | sudo sh
設定ファイル
NetACCをインストールすると、
/etc/netacc.conf
設定ファイルが自動的に生成されます。 NACC_SOR_IO_THREADSやNACC_LOG_PATHなどのNetACCのパラメーターを設定ファイルで設定できます。 次のサンプルコードは、設定ファイルでパラメーターを設定する方法の例を示しています。
NetACCの使用
アプリケーションでNetACCを使用するには、netacc_run
コマンドを実行するか、LD_PRELOAD
環境変数を設定します。
netacc_Run
コマンドを実行します。
netacc_run
は、アプリケーションの起動時にnetaccを読み込むツールです。 COMMANDコマンドの前にnetacc_run
を追加して、アプリケーションを起動し、同時にNetACCを読み込むことができます。 COMMANDコマンドは、アプリケーションを起動するためのコマンドを指定します。
netacc_run
は、netaccのパフォーマンスを向上させるための複数のパラメーターを提供します。 たとえば、-tはI/Oスレッドの数を指定し、-pは再利用するQPの数を指定します。 netacc_run
コマンドを実行して設定するパラメーターは、設定ファイルのパラメーターを上書きします。
例:
次の例では、Redisアプリケーションが使用されています。 Redisコマンドの前に
netacc_run
を追加して、Redisアプリケーションを起動し、同時にNetACCをロードします。次のコマンドを実行してRedisサービスを開始し、同時にNetACCをロードします。
netacc_run redis-server
次のコマンドを実行してredis-benchmarkユーティリティを起動し、同時にNetACCをロードします。
netacc_run redis-benchmark
LD_PRELOAD
環境変数の設定
LD_PRELOAD
環境変数は、プログラムの起動時にプリロードされる共有ライブラリを指定します。 NetACCの読み込みを自動化するには、関連するスクリプトのLD_PRELOAD
環境変数の値にNetACCを指定します。
次のコマンドを実行して、NetACCダイナミックライブラリの場所を照会します。
ldconfig -p | grep netacc
次のコマンド出力が返されます。
次のコマンドを実行して、
LD_PRELOAD
環境変数を設定し、プリロードされた共有ライブラリを指定します。LD_PRELOAD=/lib64/libnetacc-preload.so your_application
_application
を高速化するアプリケーションに置き換えます。例: 次の例では、Redisアプリケーションが使用されています。
次のコマンドを実行してRedisサービスを開始し、同時にNetACCをロードします。
LD_PRELOAD=/lib64/libnetacc-preload.so redis-server
次のコマンドを実行してredis-benchmarkユーティリティを起動し、同時にNetACCをロードします。
LD_PRELOAD=/lib64/libnetacc-preload.so redis-benchmark
NetACCの監視
netacc_ss
は、netaccが提供するモニタリングツールです。 netacc_ss
コマンドを実行して、NetACC-acceleratedプロセスによって送受信されるデータのステータスを監視できます。 サーバーとクライアントでコマンドを実行して、NetACCを監視できます。
次のコマンドを実行して、NetACC-acceleratedプロセスによって送受信されるデータのステータスを監視します。
netacc_ss -s all -p <Process ID>
プロセスのIDを照会するには、ps -ef | grep <プロセス名>
コマンドを実行します。
RedisアプリケーションでNetACCを使用
NetACC for Redisアプリケーションのメリット
改善されたシステムスループット
NetACCは、Redisが1秒間に大量のリクエストを処理するシナリオに適しています。 これにより、CPUオーバーヘッドが削減され、システムスループットが向上します。
高速化されたネットワーク応答
NetACCは、eRDMAの低遅延の利点を活用して、Redisアプリケーションへのネットワーク応答を大幅に高速化します。
Redisパフォーマンスベンチマークで使用されるNetACC
Redis-benchmark
は、Redisの組み込みベンチマークユーティリティです。これは、多数のクライアントをシミュレートしてRedisサーバーにリクエストを同時に送信することにより、さまざまなワークロードでのRedisサーバーのパフォーマンスを測定するように設計されています。
テストシナリオ
redis-benchmark
のユーティリティでNetACCを使用して、100のクライアントと4つのスレッドをシミュレートし、5百万のSETリクエストを行います。
準備
ECSコンソールのインスタンス購入ページに2つのeRDMA対応ECSインスタンスを作成します。 eRDMA Driverを自動インストールし、eRDMA Interfaceを選択して、プライマリelastic network Interface (ENI) のeRDMA interface (ERI) 機能を有効にします。 1つのECSインスタンスをRedisサーバーとして使用し、もう1つのECSインスタンスをRedisクライアントとして使用します。
ECSインスタンスには次の設定があります。
イメージ: Alibaba Cloud Linux 3
インスタンスタイプ: ecs.g8ae.4xlarge
プライマリENIのプライベートIPアドレス: サーバーの場合は172.17.0.90、クライアントの場合は172.17.0.91。 次のベンチマークでは、ビジネス要件に基づいてIPアドレスを実際の値に置き換えます。
説明このトピックでは、ECSインスタンスのプライマリENIがベンチマークを実行するためにERI機能が有効になっています。 172.17.0.90は、Redisサーバーとして機能するECSインスタンスのプライマリENIのプライベートIPアドレスです。
ECSインスタンスのセカンダリENIのERI機能を有効にする場合は、上記のIPアドレスをセカンダリENIのプライベートIPアドレスに置き換えます。 詳細については、「エンタープライズレベルのインスタンスでeRDMAを設定する」トピックの「ECSインスタンスを作成するときにeRDMAを設定する」セクションをご参照ください。
手順
Redisサーバーとして機能するECSインスタンスとRedisクライアントとして機能するECSインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
ECSインスタンスにeRDMAドライバーがインストールされているかどうかを確認します。
ECSインスタンスの起動後、
ibv_devinfo
コマンドを実行して、eRDMAドライバーがインストールされているかどうかを確認します。次のコマンド出力は、eRDMAドライバがインストールされていることを示します。
次のコマンド出力は、eRDMAドライバがインストールされていることを示します。 eRDMAドライバのインストールには数分かかります。 しばらくしてからもう一度お試しください。
ECSインスタンスで次のコマンドを実行し、Redisをインストールします。
sudo yum install -y redis
次のコマンド出力は、Redisがインストールされていることを示します。
redis-benchmark
ユーティリティを使用して、Redisのパフォーマンスをベンチマークします。NetACCでベンチマークを実行
Redisサーバーとして機能するECSインスタンスで次のコマンドを実行し、NetACCを使用してRedisを起動し、Redisを高速化します。
netacc_run redis-server --port 6379 --protected-mode no
説明6379を、Redisを起動する実際のポートの番号に置き換えます。 詳細については、このトピックの「redis-serverコマンドで使用される共通パラメーター」をご参照ください。
この例では、netaccを使用するために
netacc_run
コマンドを実行します。 NetACCを使用する他の方法については、このトピックのNetACCの使用セクションを参照してください。
次のコマンド出力は、Redisが期待どおりに起動されることを示します。
Redisクライアントとして機能するECSインスタンスで次のコマンドを実行して、redis-benchmarkを開始します。
netacc_run redis-benchmark -h 172.17.0.90 -p 6379 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t set
説明172.17.0.90をRedisサーバーの実際のIPアドレスに、6379 Redisが起動されている実際のポートの番号に置き換えます。 詳細については、このトピックの「redis-benchmarkで使用される一般的なコマンドパラメーター」をご参照ください。
ベンチマーク結果は、ネットワーク条件に基づいて変化し得る。 このトピックで提供されるベンチマークデータは参考用です。
前のベンチマーク結果の最後にある [概要] セクションは、1秒あたり約770,000のリクエストを処理できることを示しています。 Redisベンチマーク結果のメトリクスの詳細については、このトピックの「redisの一般的なメトリクス-ベンチマークベンチマーク結果」をご参照ください。
NetACCなしでベンチマークを実行する
Redisサーバーとして機能するECSインスタンスで次のコマンドを実行し、Redisを起動します。
redis-server --port 6379 --protected-mode no --save
説明6379を、Redisを起動する実際のポートの番号に置き換えます。 詳細については、このトピックの「redis-serverコマンドで使用される共通パラメーター」をご参照ください。
次のコマンド出力は、Redisが期待どおりに起動されることを示します。
Redisクライアントとして機能するECSインスタンスで次のコマンドを実行して、redis-benchmarkを開始します。
redis-benchmark -h 172.17.0.90 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t set
説明172.17.0.90をRedisサーバーの実際のIPアドレスに、6379 Redisが起動されている実際のポートの番号に置き換えます。 詳細については、このトピックの「redis-benchmarkで使用される一般的なコマンドパラメーター」をご参照ください。
ベンチマーク結果は、ネットワーク条件に基づいて変化し得る。 このトピックで提供されるベンチマークデータは参考用です。
前のベンチマーク結果の最後にある [概要] セクションは、1秒あたり約330,000のリクエストを処理できることを示しています。 Redisベンチマーク結果のメトリクスの詳細については、このトピックの「redisの一般的なメトリクス-ベンチマークベンチマーク結果」をご参照ください。