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

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

最終更新日:Oct 17, 2024

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のパラメーターを設定ファイルで設定できます。 次のサンプルコードは、設定ファイルでパラメーターを設定する方法の例を示しています。

    /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 memory region (MR) registered by RDMA. You can reduce the size to save memory.
    # The Nth power multiple of 2 of the NACC_SOR_MSG_SIZE value. The minimum value is 1.
    NACC_RDMA_MR_MIN_INC_SIZE=16384
    
    # The maximum size of an MR registered by RDMA. Valid values: 1 to 512. Unit: MB. You can reduce the size to save memory.
    # The Nth power multiple of 2 of the NACC_RDMA_MR_MIN_INC_SIZE value. Valid values: 1 to 512. Unit: MB.
    NACC_RDMA_MR_MAX_INC_SIZE=8388608
    
    # The number of links that can reuse a queue pair (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 total number of empty QPs allowed.
    NACC_EMPTY_QP_MAX_ALL=100
    
    # The total 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_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プロセスによって送受信されるデータのステータスを監視できます。 サーバーとクライアントでコマンドを実行して、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プロセスによって送受信されるデータのステータスを監視します。

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リクエストを行います。

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から999までのランダムな整数を使用することを指定します。

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

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

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

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

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 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を設定する」セクションをご参照ください。

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

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

  • インスタンスとイメージ: eRDMAとイメージをサポートするインスタンスタイプを選択します。 詳細については、このトピックの制限セクションを参照してください。 eRDMAドライバの自動インストール: ECSインスタンスの作成中にeRDMAドライバーを自動的にインストールするには、このオプションを選択します。

    image

  • ENI: プライマリENIの右側にあるeRDMAインターフェイスを選択します。

    重要

    ECSインスタンスを作成する場合、プライマリENIに対してのみERI機能を有効にできます。 各ECSインスタンスにバインドできるERIは1つだけです。 セカンダリENIを使用してECSインスタンスでeRDMAを設定する場合は、ERI機能が有効になっているセカンダリENIを作成し、ECSインスタンスの作成後にENIをECSインスタンスにバインドします。 詳細については、「ENIの作成」および「ENIのバインド」をご参照ください。

    image

手順

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

    詳細については、「パスワードまたはキーを使用した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インスタンスで次のコマンドを実行して、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接続であることを示しています。 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の一般的なメトリクス-ベンチマークベンチマーク結果」をご参照ください。