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

Elastic Compute Service:NetACCを使用したTCPアプリケーションの高速化

最終更新日:Dec 30, 2024

Network Accelerator (NetACC) は、低レイテンシや高スループットなどの柔軟なリモートダイレクトメモリアクセス (eRDMA) の利点を活用し、互換性のあるソケットインターフェイスを使用して既存のTCPアプリケーションを高速化するユーザーモードネットワーク高速化ライブラリです。 高い通信パフォーマンス、低レイテンシ、高スループットを必要とするTCPアプリケーションでは、NetACCを使用してeRDMAを適応させ、アプリケーションコードを変更することなくアプリケーションのネットワーク通信を高速化できます。

重要

NetACCはパブリックプレビュー中です。

シナリオ

NetACCは、ネットワークオーバーヘッドの多いシナリオに適しています。

  • パケット /秒 (PPS) レートが高いシナリオ、特に、多数の小さなパケットが送受信されるシナリオ。 NetACCを使用すると、Redisがリクエストを処理する場合など、特定のシナリオでCPUオーバーヘッドを削減し、システムスループットを向上させることができます。

  • ネットワークレイテンシに敏感なシナリオ: ネットワーク応答を高速化するために、eRDMAはTCPよりも低いネットワークレイテンシを提供します。

  • 短寿命接続の繰り返し作成: セカンダリ接続を確立するプロセスを高速化して、接続作成時間を短縮し、システムパフォーマンスを向上させることができます。

NetACCのインストール

  • インストール方法

    • eRDMAドライバーを使用してNetACCをインストール

      eRDMAドライバをインストールすると、NetACCが自動的にインストールされます。 eRDMAドライバーのインストール方法については、「eRDMAの使用」トピックの「ECSインスタンスへのeRDMAドライバーのインストール」をご参照ください。

    • NetACCの個別インストール

      次のコマンドを実行して、特定のバージョンのNetACCを個別にインストールするか、Elastic Compute Service (ECS) インスタンスでNetACCを一時的に使用します。

      sudo curl -fsSL https://netacc-release.oss-cn-hangzhou.aliyuncs.com/release/netacc_download_install.sh | sudo sh
  • 設定ファイルと最適化されたパラメーター

    NetACCをインストールすると、/etc/netacc.conf設定ファイルが自動的に生成されます。 NetACCのパフォーマンスを最適化するには、NACC_SOR_MSG_SIZENACC_RDMA_MR_MIN_INC_SIZENACC_RDMA_MR_MAX_INC_SIZENACC_SOR_CONNPER_QPNACC_SOR_THREADSなどの特定のパラメーターを設定します。 NACC_SOR_MSG_SIZEは、バッファのサイズを指定する。 NACC_RDMA_MR_MIN_INC_SIZEは、RDMAによって登録される第1のメモリ領域 (MR) のサイズを指定する。 NACC_RDMA_MR_MAX_INC_SIZEは、RDMAによって登録されるMRの最大サイズを指定する。 NACC_SOR_CONN_PER_QPは、キューペア (QP) あたりの接続数を指定します。 NACC_SOR_IO_THREADSはNetACCスレッドの数を指定します。

    次のサンプルコードは、設定ファイルでパラメーターを設定する方法の例を示しています。

    /etc/netacc.confのサンプル設定ファイル

    [netacc]
    # The size of a buffer. If a data block to be sent is large, you can increase the size to improve performance or reduce the size to save memory. 
    # int
    NACC_SOR_MSG_SIZE=16384
    
    # The size of the first MR registered by RDMA. You can reduce the size to save memory.
    # Set this parameter to a value that is the Nth power multiple of 2 of the NACC_SOR_MSG_SIZE value. The minimum multiple is 1.
    NACC_RDMA_MR_MIN_INC_SIZE=16384
    
    # The maximum size of an MR registered by RDMA, which ranges from 1 MB to 512 MB. You can reduce the size to save memory.
    # Set this parameter to a value that is the Nth power multiple of 2 of the NACC_RDMA_MR_MIN_INC_SIZE value. The minimum multiple is 1.
    NACC_RDMA_MR_MAX_INC_SIZE=8388608
    
    # The number of connections per QP. You can increase the value to improve performance. In specific scenarios, set this parameter to 1.
    # int
    NACC_SOR_CONN_PER_QP=1
    
    # The number of NetACC threads. If the throughput is high, increase the value.
    # int
    NACC_SOR_IO_THREADS=1
    
    # The expiration time of empty QPs. Unit: milliseconds. A value of 0 specifies that the empty QPs immediately expire. A value of -1 specifies that the empty QPs never expire.
    NACC_EMPTY_QP_EXPIRE_MS=60000
    
    # The maximum number of empty QPs allowed.
    NACC_EMPTY_QP_MAX_ALL=100
    
    # The maximum number of empty QPs allowed for each destination address.
    NACC_EMPTY_QP_MAX_PER=10
    
    # The probability of using RDMA to establish connections. Valid values: 0 to 100.
    NACC_CONNECT_RDMA_PERCENT=100
    
    # Specifies whether RDMA is enabled by default.
    NACC_ENABLE_RDMA_DEFAULT=1
    
    # The log level.
    # 0: TRACE
    # 1: DEBUG
    # 2: INFO
    # 3: WARN
    # 4: ERROR
    # 5: FATAL
    NACC_LOG_LEVEL=3
    
    # The log path.
    NACC_LOG_PATH="/tmp/netacc.log"
    
    # The following parameters are infrequently used or do not need to be configured.
    
    # The thread affinity.
    # string
    NACC_SOR_AFFINITY=""
    
    # Specifies whether to preferentially use TCP to establish a connection.
    # bool
    NACC_CONN_TCP_FIRST=0

NetACCの使用

アプリケーションでNetACCを使用するには、netacc_runコマンドを実行するか、環境変数LD_PRELOADを設定します。 NetACCを使用する前に、このトピックの考慮事項のセクションに精通している必要があります。

netacc_Runコマンドを実行します。

netacc_runは、アプリケーションの起動時にnetaccを読み込むツールです。 <COMMAND> コマンドの前にnetacc_runを追加して、アプリケーションを起動し、同時にNetACCをロードできます。 <COMMAND> は、アプリケーションを起動するためのコマンドを指定します。

netacc_runは、netaccのパフォーマンスを向上させるための複数のパラメーターを提供します。 たとえば、-tはI/Oスレッドの数を指定し、-pはQPあたりの接続数を指定します。 netacc_runコマンドを実行したときに設定するパラメーターは、設定ファイルのパラメーターを上書きします。

netacc_runコマンドパラメーター

netacc_run -h
Usage: netacc_run [ OPTIONS ] COMMAND

Run COMMAND using NetACC for TCP sockets

OPTIONS:
   -f <path>   set config file, default /etc/netacc.conf
   -p <num>    set max connections per QP, default 1
   -t <num>    set netacc io threads, default 4
   -s <num>    set netacc message size, default 16384
   -F <num>    fast connect mode, default 0
   -d          enable debug mode
   -T          use TCP first in connect
   -P <num>    polling cq time ms
   -A <str>    affinity CPU list, 0 | 1-3 | 1,3,4
   -i <num>    set cq comp_vector, default 0
   -h          display this message
   -v          display version info
  • 例:

    次の例では、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を指定します。

  1. 次のコマンドを実行して、NetACCダイナミックライブラリの場所を照会します。

    ldconfig -p | grep netacc

    次のコマンド出力が返されます。

    image

  2. 次のコマンドを実行して、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

    スクリプトでLD_PRELOAD環境変数を設定する

    NetACCを頻繁に使用してアプリケーションを高速化する場合、またはスクリプトを使用して複数のアプリケーションを管理し、アプリケーションの起動時にNetACCを使用してアプリケーションを高速化する場合は、スクリプトでLD_PRELOAD環境変数を設定します。 たとえば、run_with_netaccという名前のスクリプトを作成できます。

    #!/bin/bash
    LD_PRELOAD=/lib64/libnetacc-preload.so $@

    次のコマンドを実行して、アプリケーションを起動し、同時にNetACCをロードします。

    ./run_with_netacc.sh your_application

    例: 次の例では、Redisアプリケーションが使用されています。

    • 次のコマンドを実行してRedisを起動し、NetACCを同時にロードします。

      ./run_with_netacc.sh redis-server
    • 次のコマンドを実行してredis-benchmarkユーティリティを起動し、同時にNetACCをロードします。

      ./run_with_netacc.sh redis-benchmark

NetACCの監視

netacc_ssはnetaccのモニタリングツールです。 netacc_ssコマンドを実行し、NetACC-accelerated TCPアプリケーションのプロセスが送受信するデータのステータスを監視します。 NetACCを監視するには、サーバーとクライアントでコマンドを実行します。

netacc_ssコマンド

netacc_ss -h
Usage:
 netacc_ss: [-p] <pid> [options]...
 Show monitoring information of specified netacc process

Options:
 -c   clear unused sock file
 -h   display this help
 -s   display specified monitoring metric[s]. [all|cfg|cnt|mem|qp|sock]
      all: all monitoring information
      cfg: configuration information
      cnt: counter information[default]
      mem: memory information
      qp : queue pair information
      sock: socket information
 -v   display netacc version

Examples:
 netacc_ss -p 12345 -s mem,cnt

次のコマンドを実行して、NetACC-accelerated TCPアプリケーションのプロセスによって送受信されたデータのステータスを照会します。

netacc_ss -s all -p <Process ID>
説明

プロセスのIDを照会するには、ps -ef | grep <プロセス名> コマンドを実行します。

考慮事項

  • NetACCを使用する場合、eRDMAインターフェイス (ERI) 機能が有効になっているelastic network Interface (ENI) を使用して確立されたTCP接続のみがRDMA接続に変換されることに注意してください。 他の接続はTCP接続のままである。

    説明

    両方のネットワーク通信端がERI対応ENIをサポートしていない場合、NetACCはRDMA接続を確立できず、TCPにフォールバックします。

  • NetACCを使用するときに複数のプロセスが相互に通信する場合、カーネルのプロセス間通信 (IPC) メカニズムを使用してRDMAソケットファイル記述子を他のプロセスに送信することはできません。

    説明

    RDMA接続は、特定のQPに基づいて確立される。 QPは、プロセス間で直接共有することはできない。 その結果、RDMA接続をプロセス間で共有することはできない。

  • NetACCフレームワークはIPv6をサポートしていません。 NetACCを使用するときにIPv6-relatedの競合やエラーを防ぐには、sysctl net.ipv6.conf.all.disable_ipv6=1コマンドを実行してIPv6を無効にすることを推奨します。

  • NetACCはホットアップデートをサポートしていません。 NetACCのホットアップデートは予期しないエラーを引き起こす可能性があります。 NetACCを更新する前に、NetACC-acceleratedアプリケーションのプロセスを停止する必要があります。

  • NetACCは、SO_REUSEPORT、SO_ZEROCOPY、TCP_INQなどの特定のTCPソケットオプションをサポートしていません。

  • NetACCはGNU Cライブラリ (glibc) に依存しており、Golang環境などの非glibc環境では実行できません。

  • NetACCを使用する前に、ulimit -l unlimitedコマンドを実行して、プロセスがロックできる物理メモリの最大量を無制限に設定することを推奨します。

    説明

    ulimit-1パラメータの値が過度に小さい場合、MRのサイズがロック可能なメモリの許容最大量を超えるため、RDMAはMRを登録できない可能性があります。

  • NetACC高速化アプリケーションが通信のためにTCPポートでリッスンする場合、NetACCはRDMAネットワーク環境で効率的なデータ転送を実現するためにRDMAポート (TCPポートと20000) でもリッスンします。

    説明

    RDMAポートが占有されているか、または有効なポート範囲外にある場合、接続を確立できません。 ポートの競合を防ぐためにポートを適切に割り当てます。

  • NetACCでは、親プロセスがfork() システムコールを使用して子プロセスを作成した後、子プロセスは親プロセスによってすでに確立されているソケット接続を継承しません。

    説明

    これは、通信障害を引き起こす可能性がある。 この場合、子プロセスは新しいソケット接続を確立する必要があります。

  • デフォルトでは、NetACCでQP再利用機能が無効になっています。

    • NetACC設定ファイルNACC_SOR_CONN_PER_QPパラメーターを設定するか、netacc_runコマンドを実行してQP再利用機能を有効にし、複数の接続でQPを再利用できるようにすることで、QPあたりの接続数 (-p) を1より大きい値に設定できます。

    • QP再利用機能が有効にされると、特に多数の同時接続が存在するシナリオにおいて、QPの数、管理オーバーヘッド、およびリソース消費が低減されて、全体的な通信効率が改善される。

    • QP再利用機能を有効にすると、複数のRDMA接続がローカルポート番号を共有する場合があります。 RDMAでは、ポート番号はQPを識別するが、接続は識別しない。 複数の接続がQPを共有する場合、接続はローカルポート番号も共有する。

      説明

      異なるサービスを提供したり、異なるポートでリッスンしたりするなど、アプリケーションが異なるローカルポート番号を必要とする場合は、QP再利用機能を無効にします。 QP再利用機能が有効になっている場合、ローカルポート番号に基づいて接続を区別することができず、ポート競合を引き起こす可能性があります。

RedisアプリケーションでNetACCを使用

NetACC for Redisアプリケーションのメリット

  • 改善されたシステムスループット

    NetACCは、Redisが1秒間に大量のリクエストを処理するシナリオに適しています。 NetACCはCPUオーバーヘッドを削減し、システムスループットを向上させます。

  • 高速化されたネットワーク応答

    NetACCは、eRDMAの低遅延の利点を活用して、Redisアプリケーションへのネットワーク応答を大幅に高速化します。

Redisパフォーマンスベンチマークで使用されるNetACC

Redis-benchmarkは、Redisの組み込みベンチマークユーティリティです。これは、多数のクライアントをシミュレートしてRedisサーバーにリクエストを同時に送信することにより、さまざまなワークロードでのRedisサーバーのパフォーマンスを測定するように設計されています。

テストシナリオ

redis-benchmarkのユーティリティでNetACCを使用して、100のクライアントと4つのスレッドをシミュレートし、5百万のSETリクエストを行います。

redis-serverコマンドで使用する共通パラメーター

redis-serverコマンドは、Redisサーバーを起動するために使用されます。 redis-server -hコマンドを実行すると、redis-serverコマンドと一緒に使用できるパラメーターを表示できます。 次のサンプルredis-serverコマンドのパラメーターに注意してください。

redis-server --port 6379 --protected-mode no
  • -- port 6379: -- portパラメーターは、Redisサーバーを起動するポートを指定します。 デフォルト値は 6379 です。 パラメーターを指定しない場合は、デフォルト値が使用されます。 この例では、パラメーターは6379に設定されています。

  • -- protected-mode no: -- protected-modeパラメーターは、Redisサーバーの保護モードを有効にするかどうかを指定します。 保護モードはRedisのセキュリティ機能です。 保護モードを有効にすると、Redisサーバーはローカルホスト (127.0.0.1またはlocalhost) で実行されているクライアントからの接続のみを受け入れ、外部ホストからのすべての接続を拒否します。 noの値は、RedisサーバーがすべてのIPアドレスからの接続を受け入れることを指定します。

    重要

    本番環境で保護モードを無効にすると、本番環境がセキュリティリスクにさらされる可能性があります。 オープンネットワーク環境では慎重に進めてください。

redis-benchmarkで使用される一般的なコマンドパラメーター

redis-benchmarkは、Redisが提供するストレステストツールで、複数のクライアントをシミュレートして多数のリクエストを送信することでRedisのパフォーマンスをテストします。 redis-benchmark -- helpコマンドを実行すると、redis-benchmarkコマンドと一緒に使用できるパラメーターを表示できます。 次のサンプルredis-benchmarkコマンドのパラメーターに注意してください。

redis-benchmark -h 172.17.0.90 -p 6379 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t set
  • -h 172.17.0.90 :-hパラメーターには、Redisサーバーのホスト名またはIPアドレスを指定します。 この例では、-hパラメーターは172.17.0.90に設定されています。

  • -p 6379 :-pパラメーターは、Redisが起動するポートを指定します。 デフォルト値は 6379 です。 Redisがポート6379で起動されている場合、このパラメーターを指定する必要はありません。 Redisが別のポートで起動する場合は、このパラメーターをポートの番号に設定します。

    説明

    sudo grep "^ port" /<redis.confファイルが格納されているパス>/redis.confコマンドを実行して、Redisが起動されているポートを照会できます。 デフォルトでは、redis.confファイルは /etc/redis.confパスに格納されます。

  • -c 100 :-cパラメーターは、同時接続 (クライアント) の数を指定します。 この例では、-cパラメーターは100に設定されています。

  • -n 5000000 :-nパラメーターは、実行するリクエストの総数を指定します。 この例では、-nパラメーターは5000000に設定されています。

  • -r 10000 :-rパラメーターは、使用するランダムキーの範囲を指定します。 この例では、-rパラメーターは10000に設定されています。これは、setコマンドがベンチマークのキーの一部として0から9999までのランダムな整数を使用することを指定します。

  • -- threads 4: -- threadsパラメータは、スレッドの数を指定する。 この例では、-- threadsパラメーターは4に設定されています。 デフォルトでは、redis-benchmarkは1つのスレッドのみを使用してベンチマークを実行します。 ただし、特定のシステムでは、redis-benchmarkが複数のスレッドを使用して同時実行をシミュレートできます。

  • -d 512 :-dパラメーターは、各SETリクエストのデータサイズをバイト単位で指定します。 この例では、-dパラメーターは512に設定されています。

  • -t set :-tパラメーターは、テストのサブセットのみを実行するように指定します。 -tパラメーターの後に、テストするコマンドの名前が続きます。 この例では、-tパラメーターはsetコマンドのみのパフォーマンスをベンチマークするようにsetに設定されています。

上記のサンプルコマンドは、4つのスレッドを使用して、172.17.0.90で実行されるRedisサーバーへのスレッドごとに100の同時接続を確立し、サーバーに5百万のSETリクエストを送信します。 各SET要求は、512バイトのランダムデータを含み、鍵の一部として0から9999までのランダム整数を使用する。

redisの一般的な指標-ベンチマークベンチマーク結果

  • スループットの概要:

    rps: ベンチマーク中にRedisサーバーが処理できる1秒あたりのリクエスト数。 たとえば、332933.81リクエスト /秒は、Redisサーバーが332,934リクエスト /秒を処理できることを示します。

  • 待ち時間の概要: 単位: ミリ秒。

    • avg: 平均レイテンシ。すべてのリクエストの平均応答時間です。

    • min: 最小レイテンシ。これは、すべてのリクエストにわたる最小応答時間です。

    • p50: リクエストの50% がこのレイテンシ値よりも速いことを示す50パーセンタイル。

    • p95: 95番目のパーセンタイル。これは、リクエストの95% がこのレイテンシ値よりも速いことを示します。

    • p99: 99パーセンタイル。リクエストの99% がこのレイテンシ値よりも速いことを示します。

    • max: 最大レイテンシ。すべてのリクエストの最大応答時間です。

準備

ECSコンソールのインスタンス購入ページに2つのeRDMA対応ECSインスタンスを作成します。 eRDMAドライバの自動インストールを選択し、eRDMAインターフェイスを選択して、プライマリENIの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インスタンスへのERIのバインド」セクションをご参照ください。

ECSインスタンス作成時に特定のパラメーターを設定する方法の例

ECSインスタンスを作成するときは、次のパラメーターまたはオプションに注意してください。 ECSインスタンス購入ページのその他のパラメーターについては、「カスタム起動タブでインスタンスを作成する」をご参照ください。

  • インスタンスとイメージ: eRDMAをサポートするインスタンスタイプを選択し、eRDMAドライバをインストールします。

    インスタンス: 詳細については、このトピックの制限セクションを参照してください。

  • ENI: プライマリENIの右側にあるeRDMA Interfaceオプションを選択して、ERIをECSインスタンスにバインドします。

    image

説明

エンタープライズレベルのインスタンスを作成する場合、プライマリelastic network interface (ENI) に対してのみERI機能を有効にできます。 ECSコンソールで、またはAPI操作を呼び出すことによって、セカンダリENIのERI機能を有効にできます。 詳細については、「ERI」をご参照ください。

手順

  1. Redisサーバーとして機能するECSインスタンスとRedisクライアントとして機能するECSインスタンスに接続します。

    詳細については、「ワークベンチを使用したSSH経由のLinuxインスタンスへのログイン」をご参照ください。

  2. ECSインスタンスにeRDMAドライバーがインストールされているかどうかを確認します。

    ECSインスタンスの起動後、ibv_devinfoコマンドを実行して、eRDMAドライバーがインストールされているかどうかを確認します。

    • 次のコマンド出力は、eRDMAドライバがインストールされていることを示します。

      image

    • 次のコマンド出力は、eRDMAドライバがインストールされていることを示します。 eRDMAドライバがインストールされるまで数分待ってから、後でもう一度お試しください。

      image

  3. ECSインスタンスで次のコマンドを実行し、Redisをインストールします。

    sudo yum install -y redis

    次のコマンド出力は、Redisがインストールされていることを示します。

    image

  4. redis-benchmarkユーティリティを使用して、Redisのパフォーマンスをベンチマークします。

    NetACCを使用したベンチマークの実行
    1. Redisサーバーとして機能するECSインスタンスで次のコマンドを実行し、NetACCを使用してRedisを起動し、Redisを高速化します。

      netacc_run redis-server --port 6379 --protected-mode no
      説明
      • 6379を、Redisを起動する実際のポートの番号に置き換えます。 詳細については、このトピックの「redis-serverコマンドとともに使用される共通パラメーター」をご参照ください。

      • この例では、netaccを使用するためにnetacc_runコマンドを実行します。 NetACCを使用する他の方法については、このトピックのNetACCの使用セクションを参照してください。

      次のコマンド出力は、Redisが期待どおりに起動されることを示します。

      image

    2. Redisクライアントとして機能するECSインスタンスで次のコマンドを実行し、NetACCを使用してredis-benchmarkを開始し、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で使用される一般的なコマンドパラメーター」をご参照ください。

      • ベンチマーク結果は、ネットワーク条件に基づいて変化し得る。 このトピックで提供されるベンチマークデータは参考用です。

      サンプルRedisベンチマーク結果

      ====== SET ======                                                      
        5000000 requests completed in 6.52 seconds
        100 parallel clients
        512 bytes payload
        keep alive: 1
        host configuration "save": 3600 1 300 100 60 10000
        host configuration "appendonly": no
        multi-thread: yes
        threads: 4
      
      Latency by percentile distribution:
      0.000% <= 0.039 milliseconds (cumulative count 3)
      50.000% <= 0.127 milliseconds (cumulative count 2677326)
      75.000% <= 0.143 milliseconds (cumulative count 3873096)
      87.500% <= 0.151 milliseconds (cumulative count 4437348)
      93.750% <= 0.159 milliseconds (cumulative count 4715347)
      96.875% <= 0.175 milliseconds (cumulative count 4890339)
      98.438% <= 0.183 milliseconds (cumulative count 4967042)
      99.609% <= 0.191 milliseconds (cumulative count 4991789)
      99.902% <= 0.207 milliseconds (cumulative count 4995847)
      99.951% <= 0.263 milliseconds (cumulative count 4997733)
      99.976% <= 0.303 milliseconds (cumulative count 4998853)
      99.988% <= 0.343 milliseconds (cumulative count 4999403)
      99.994% <= 0.367 milliseconds (cumulative count 4999704)
      99.997% <= 0.391 milliseconds (cumulative count 4999849)
      99.998% <= 2.407 milliseconds (cumulative count 4999924)
      99.999% <= 5.407 milliseconds (cumulative count 4999962)
      100.000% <= 6.847 milliseconds (cumulative count 4999981)
      100.000% <= 8.423 milliseconds (cumulative count 4999991)
      100.000% <= 8.919 milliseconds (cumulative count 4999996)
      100.000% <= 9.271 milliseconds (cumulative count 4999998)
      100.000% <= 9.471 milliseconds (cumulative count 4999999)
      100.000% <= 9.583 milliseconds (cumulative count 5000000)
      100.000% <= 9.583 milliseconds (cumulative count 5000000)
      
      Cumulative distribution of latencies:
      18.820% <= 0.103 milliseconds (cumulative count 941003)
      99.917% <= 0.207 milliseconds (cumulative count 4995847)
      99.977% <= 0.303 milliseconds (cumulative count 4998853)
      99.998% <= 0.407 milliseconds (cumulative count 4999879)
      99.998% <= 0.503 milliseconds (cumulative count 4999903)
      99.998% <= 0.703 milliseconds (cumulative count 4999904)
      99.998% <= 0.807 milliseconds (cumulative count 4999905)
      99.998% <= 0.903 milliseconds (cumulative count 4999906)
      99.998% <= 1.007 milliseconds (cumulative count 4999908)
      99.998% <= 1.103 milliseconds (cumulative count 4999909)
      99.998% <= 1.207 milliseconds (cumulative count 4999912)
      99.998% <= 1.407 milliseconds (cumulative count 4999913)
      99.998% <= 1.503 milliseconds (cumulative count 4999915)
      99.998% <= 1.607 milliseconds (cumulative count 4999916)
      99.998% <= 1.703 milliseconds (cumulative count 4999917)
      99.998% <= 1.807 milliseconds (cumulative count 4999918)
      99.998% <= 1.903 milliseconds (cumulative count 4999919)
      99.998% <= 2.103 milliseconds (cumulative count 4999920)
      99.999% <= 3.103 milliseconds (cumulative count 4999931)
      99.999% <= 4.103 milliseconds (cumulative count 4999944)
      99.999% <= 5.103 milliseconds (cumulative count 4999958)
      99.999% <= 6.103 milliseconds (cumulative count 4999971)
      100.000% <= 7.103 milliseconds (cumulative count 4999984)
      100.000% <= 8.103 milliseconds (cumulative count 4999989)
      100.000% <= 9.103 milliseconds (cumulative count 4999996)
      100.000% <= 10.103 milliseconds (cumulative count 5000000)
      
      Summary:
        throughput summary: 767341.94 requests per second
        latency summary (msec):
                avg       min       p50       p95       p99       max
              0.126     0.032     0.127     0.167     0.183     9.583

      前のベンチマーク結果の最後にある [概要] セクションは、1秒あたり約770,000のリクエストを処理できることを示しています。 Redisベンチマーク結果のメトリクスの詳細については、このトピックの「redisの一般的なメトリクス-ベンチマークベンチマーク結果」をご参照ください。

    netacc_ssを使用したベンチマーク中のRedisサーバーのモニタリング

    ベンチマーク中は、Redisサーバーとして機能するECSインスタンスでnetacc_ssを使用してサーバーを監視できます。

    • 次のコマンドを実行して、Redisプロセス (redis-server) のIDを照会します。

      ps -ef | grep redis-server

      次のコマンド出力は、redis-serverプロセスのIDが114379であることを示します。

      image

    • 次のコマンドを実行して、Redisの接続情報とRedisが送受信したデータのステータスを照会します。

      netacc_ss -p 114379 -s all
      説明

      上記のコマンドの114379を実際のRedisプロセスIDに置き換えます。 詳細については、このトピックの「netacc_ssコマンド」をご参照ください。

      次のコマンド出力は、Redisに対して確立されたソケット接続がRDMA接続であることを示しています。 これは、RedisサーバーおよびRedisクライアントとして機能するECSインスタンスのENIに対してERI機能が有効になっているためです。 右端の4列は、送受信されるメッセージの数および量を示す。

      image

    NetACCなしでベンチマークを実行する
    1. Redisサーバーとして機能するECSインスタンスで次のコマンドを実行し、Redisを起動します。

      redis-server --port 6379 --protected-mode no --save
      説明

      6379を、Redisを起動する実際のポートの番号に置き換えます。 詳細については、このトピックの「redis-serverコマンドとともに使用される共通パラメーター」をご参照ください。

      次のコマンド出力は、Redisが期待どおりに起動されることを示します。

      image

    2. 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で使用される一般的なコマンドパラメーター」をご参照ください。

      • ベンチマーク結果は、ネットワーク条件に基づいて変化し得る。 このトピックで提供されるベンチマークデータは参考用です。

      サンプルRedisベンチマーク結果

      ====== SET ======                                                         
        5000000 requests completed in 15.02 seconds
        100 parallel clients
        512 bytes payload
        keep alive: 1
        host configuration "save": 
        host configuration "appendonly": no
        multi-thread: yes
        threads: 4
      
      Latency by percentile distribution:
      0.000% <= 0.055 milliseconds (cumulative count 27)
      50.000% <= 0.287 milliseconds (cumulative count 2635010)
      75.000% <= 0.335 milliseconds (cumulative count 3782931)
      87.500% <= 0.367 milliseconds (cumulative count 4459136)
      93.750% <= 0.391 milliseconds (cumulative count 4720397)
      96.875% <= 0.415 milliseconds (cumulative count 4855130)
      98.438% <= 0.439 milliseconds (cumulative count 4936478)
      99.219% <= 0.455 milliseconds (cumulative count 4965765)
      99.609% <= 0.471 milliseconds (cumulative count 4984031)
      99.805% <= 0.487 milliseconds (cumulative count 4993326)
      99.902% <= 0.495 milliseconds (cumulative count 4995579)
      99.951% <= 0.511 milliseconds (cumulative count 4997659)
      99.976% <= 0.551 milliseconds (cumulative count 4998848)
      99.988% <= 0.599 milliseconds (cumulative count 4999468)
      99.994% <= 0.631 milliseconds (cumulative count 4999722)
      99.997% <= 0.663 milliseconds (cumulative count 4999862)
      99.998% <= 0.695 milliseconds (cumulative count 4999924)
      99.999% <= 0.759 milliseconds (cumulative count 4999964)
      100.000% <= 0.807 milliseconds (cumulative count 4999982)
      100.000% <= 1.935 milliseconds (cumulative count 4999993)
      100.000% <= 2.071 milliseconds (cumulative count 4999996)
      100.000% <= 2.111 milliseconds (cumulative count 4999998)
      100.000% <= 2.119 milliseconds (cumulative count 4999999)
      100.000% <= 2.143 milliseconds (cumulative count 5000000)
      100.000% <= 2.143 milliseconds (cumulative count 5000000)
      
      Cumulative distribution of latencies:
      0.028% <= 0.103 milliseconds (cumulative count 1377)
      0.985% <= 0.207 milliseconds (cumulative count 49228)
      60.094% <= 0.303 milliseconds (cumulative count 3004705)
      96.325% <= 0.407 milliseconds (cumulative count 4816230)
      99.938% <= 0.503 milliseconds (cumulative count 4996887)
      99.991% <= 0.607 milliseconds (cumulative count 4999546)
      99.999% <= 0.703 milliseconds (cumulative count 4999927)
      100.000% <= 0.807 milliseconds (cumulative count 4999982)
      100.000% <= 0.903 milliseconds (cumulative count 4999987)
      100.000% <= 1.903 milliseconds (cumulative count 4999990)
      100.000% <= 2.007 milliseconds (cumulative count 4999995)
      100.000% <= 2.103 milliseconds (cumulative count 4999997)
      100.000% <= 3.103 milliseconds (cumulative count 5000000)
      
      Summary:
        throughput summary: 332955.97 requests per second
        latency summary (msec):
                avg       min       p50       p95       p99       max
              0.292     0.048     0.287     0.399     0.447     2.143

      前のベンチマーク結果の最後にある [概要] セクションは、1秒あたり約330,000のリクエストを処理できることを示しています。 Redisベンチマーク結果のメトリクスの詳細については、このトピックの「redisの一般的なメトリクス-ベンチマークベンチマーク結果」をご参照ください。