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

Elastic Compute Service:ネットワーク性能テスト

最終更新日:Apr 29, 2026

パケット転送レート (PPS)、ネットワーク帯域幅、ネットワークレイテンシーは、ECS インスタンスにおけるネットワークパフォーマンスの重要な指標です。ネットワークパフォーマンスをテストすることで、その安定性、レイテンシー、スループットを評価し、ユーザーエクスペリエンスとアプリケーションパフォーマンスを向上させることができます。このトピックでは、Netperfsockperf などのツールを使用して、ECS インスタンスのネットワークパフォーマンスをテストする方法について説明します。

重要
  • データ損失を防ぐため、新規の空の ECS インスタンスでネットワークパフォーマンスをテストしてください。

  • インスタンスタイプのメトリクスは、テスト環境で検証済みです。インスタンスの実際のパフォーマンスは、インスタンスの負荷やネットワーキングモデルなどの要因によって異なる場合があります。

テスト環境の準備

要件

  • パケット転送レート (pps)、ネットワーク帯域幅、ネットワーク遅延のテストなど、さまざまなテストシナリオに対応するために、Elastic Compute Service (ECS) インスタンスを準備します。ECS インスタンスの作成方法については、「ECS インスタンスのカスタム起動」をご参照ください。

    重要

    正確で比較可能なテスト結果を確保するために、同じインスタンスタイプのインスタンスを使用してください。これにより、vCPU 数、メモリサイズ、ネットワーク帯域幅の違いがテスト結果に影響するのを防ぐことができます。

  • 各テストにおいて、すべての ECS インスタンスは同じ VPC 内にあり、同じ VSwitch を使用し、同じセキュリティグループに属している必要があります。

環境の例

次の表に、テストマシンと補助テストマシンのインスタンスタイプと数量の例を示します。テスト中は、要件に基づいてマシンを選択してください。

  • ECS インスタンスのパケット転送レート (pps) のテスト (Linux のみ)

    説明

    このトピックでは、適切なベンチマークツールが利用できないため、Windows インスタンスでのパケット転送レート (pps) のテスト手順は省略しています。

    6,000,000 pps 未満

    仕様

    テストマシン

    補助テストマシン

    インスタンスタイプ

    ecs.g7.large

    ecs.g7.large

    イメージ

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    インスタンス数

    1

    1

    ネットワーク

    パブリック IP アドレスが割り当て済み。

    6,000,000~20,000,000 pps

    仕様

    テストマシン

    補助テストマシン

    インスタンスタイプ

    ecs.g7.16xlarge

    ecs.g7.16xlarge

    イメージ

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    インスタンス数

    1

    3

    ネットワーク

    パブリック IP アドレスが割り当て済み。

    20,000,000 pps 超

    仕様

    テストマシン

    補助テストマシン

    インスタンスタイプ

    ecs.g7.32xlarge

    ecs.g7.32xlarge

    イメージ

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    インスタンス数

    1

    3

    ネットワーク

    パブリック IP アドレスが割り当て済み。

  • ECS インスタンスのネットワーク帯域幅とネットワーク遅延のテスト

    Linux インスタンス

    仕様

    テストマシン

    補助テストマシン

    インスタンスタイプ

    ecs.g7.large

    ecs.g7.large

    イメージ

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    インスタンス数

    1

    1

    ネットワーク

    パブリック IP アドレスが割り当て済み。

    Windows インスタンス

    仕様

    テストマシン

    補助テストマシン

    インスタンスタイプ

    ecs.g7.large

    ecs.g7.large

    イメージ

    Windows Server 2022

    Windows Server 2022

    インスタンス数

    1

    1

    ネットワーク

    パブリック IP アドレスが割り当て済み。

ネットワークパフォーマンスのテスト

ネットワーク PPS のテスト (Linux のみ)

説明

適切なテストツールがすぐに入手できないため、このトピックでは Windows インスタンスでのパケット転送レート (PPS) をテストする手順は記載していません。

6,000,000 PPS 未満

  1. テストインスタンスと補助テストインスタンスに接続します。

    詳細については、「Workbench を使用して Linux インスタンスにログインする」をご参照ください。

  2. テストインスタンスと補助テストインスタンスの両方で、次のコマンドを実行して Netperf をダウンロードします。

    wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz
  3. テストインスタンスと補助テストインスタンスの両方で、Netperf と sar 監視ツールをインストールします。

    1. 次のコマンドを実行して依存関係をインストールし、Netperf パッケージを展開します。

      sudo yum install -y gcc autoconf automake libtool sysstat
      tar -zxvf netperf-2.7.0.tar.gz
    2. 次のコマンドを実行して gcc のバージョンを確認します。

      gcc -v 2>&1
    3. テストインスタンスまたは補助テストインスタンスの gcc のバージョンが 10 より新しい場合は、次の手順を実行して gcc が正しくコンパイルできるようにします。それ以外の場合は、この手順をスキップします。

      1. 次のコマンドを実行して nettest_omni.c ファイルを編集します。

        cd netperf
        vim src/nettest_omni.c
      2. i を押して挿入モードに入り、nettest_omni.c ファイルから宣言済み変数を手動で削除します。

        次の変数宣言を削除します:

        /* ソケット用のさまざまなオプション        */
        
        int
          loc_nodelay,    /* ローカルで NODELAY を使用する/しない    */
          rem_nodelay,    /* リモートで NODELAY を使用する/しない  */
          loc_sndavoid,    /* ローカルで送信コピーを回避する    */
          loc_rcvavoid,    /* ローカルで受信コピーを回避する    */
          rem_sndavoid,    /* リモートで送信コピーを回避する    */
          rem_rcvavoid;   /* リモートで受信コピーを回避する    */
      3. 変更を保存して終了するには、Esc を押し、:wq を入力してから Enter を押します。

    4. 次のコマンドを実行して Netperf をコンパイルし、インストールします。

      cd netperf
      sudo ./configure
      sudo make && sudo make install
  4. テストインスタンスで、次のスクリプトを実行して 64 個の netserver サービスを起動します。

    #!/bin/bash
    for j in `seq 64`; do
        netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1  &
    done
  5. テストインスタンスで、次のコマンドを実行してプライベート IP アドレスを確認します。

    ifconfig || ip addr

    image.png

  6. 補助テストインスタンスで、次のスクリプトを実行してテストインスタンスにトラフィックを送信します。

    #!/bin/bash
    server_ip=<test_instance_private_ip_address>
    for j in `seq 64`; do
        port=$[16000+j]
        netperf -H ${server_ip} -l ${run_time:-300} -t UDP_STREAM  -p $port  -- -m 1 -D > /dev/null 2>&1 &
    done

    <test_instance_private_ip_address> を、前の手順で取得したテストインスタンスのプライベート IP アドレスに置き換えます。

    image.png

  7. テストインスタンスで、次のコマンドを実行してパケット転送レートをテストします。

    sar -n DEV 1

    テスト結果で、rxpck/s 列の値を確認します。rxpck/s の値は、テストインスタンスが 1 秒あたりに受信したパケットの総数を示します。次の図に示す例では、テストインスタンスが 1 秒あたりに受信したパケットの平均数は約 940,000 です。

    image.png

6,000,000~20,000,000 PPS

  1. テストインスタンスと補助テストインスタンスに接続します。

    詳細については、「Workbench を使用して Linux インスタンスにログインする」をご参照ください。

  2. テストインスタンスと 3 台の補助テストインスタンスで、次のコマンドを実行して sockperf をインストールします。

    sudo yum install -y autoconf automake libtool gcc-c++
    cd /opt
    sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
    sudo tar -zxf 3.8.tar.gz
    cd sockperf-3.8/
    sudo ./autogen.sh
    sudo ./configure
    sudo make -j `cat /proc/cpuinfo| grep process | wc -l`
    sudo make install
  3. テストインスタンスで、次のコマンドを実行してプライベート IP アドレスを確認します。

    ifconfig || ip addr

    image.png

  4. 3 台の補助テストインスタンスそれぞれで、次のスクリプトを実行してテストインスタンスにトラフィックを送信します。

    server_ip="<test_instance_private_ip_address>"
    threads=64
    msg_size=14
    run_time=60
    
    basePort=6666
    for((i=0;i<$threads;++i));do
        nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 &
    done

    スクリプト内の <test_instance_private_ip_address> はテストインスタンスのプライベート IP アドレス、run_time はテスト時間です。必要に応じて値を変更してください。

  5. テストインスタンスと 3 台の補助テストインスタンスで、次のコマンドを実行してパケット転送レートをテストします。

    sar -n DEV 1

    テストインスタンスで、rxpck/s 列の値を確認します。rxpck/s の値は、テストインスタンスが 1 秒あたりに受信したパケット数を示します。たとえば、テストインスタンスは 1 秒あたり約 1,200 万個のパケットを受信しています。接收数据包

20,000,000 PPS 超

  1. テストインスタンスと補助テストインスタンスに接続します。

    詳細については、「Workbench を使用して Linux インスタンスにログインする」をご参照ください。

  2. テストインスタンスと 3 台の補助テストインスタンスで、次のコマンドを実行して sockperf をインストールします。

    sudo yum install -y autoconf automake libtool gcc-c++
    cd /opt
    sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
    sudo tar -zxf 3.8.tar.gz
    cd sockperf-3.8/
    sudo ./autogen.sh
    sudo ./configure
    sudo make -j `cat /proc/cpuinfo| grep process | wc -l`
    sudo make install
  3. テストインスタンスで、次のスクリプトを実行して割り込み要求 (IRQ) をバインドします。

    高 PPS シナリオでは、割り込み要求 (IRQ) を特定の CPU コアにバインドすることで、IRQ の処理をそれらのコアで行えます。これにより、コンテキストスイッチが減り、処理効率が向上します。

    a=$(cat /proc/interrupts | grep virtio2-input | awk -F ':' '{print $1}')
    cpu=0
    for irq in $a; do
        echo $cpu >/proc/irq/$irq/smp_affinity_list
        let cpu+=2
    done
  4. テストインスタンスで、次のコマンドを実行してプライベート IP アドレスを確認します。

    ifconfig || ip addr

    image.png

  5. 3 台の補助テストインスタンスそれぞれで、次のスクリプトを実行してテストインスタンスにトラフィックを送信します。

    server_ip="<test_instance_private_ip_address>"
    threads=64
    msg_size=14
    run_time=60
    
    basePort=6666
    for((i=0;i<$threads;++i));do
        nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 &
    done

    スクリプト内の <test_instance_private_ip_address> はテストインスタンスのプライベート IP アドレス、run_time はテスト時間です。必要に応じて値を変更してください。

  6. テストインスタンスと 3 台の補助テストインスタンスで、次のコマンドを実行してパケット転送レートをテストします。

    sar -n DEV 1

    テストインスタンスで、rxpck/s 列の値を確認します。rxpck/s の値は、テストインスタンスが 1 秒あたりに受信したパケット数を示します。次の図に示す例では、1 秒あたりに受信するパケット数は約 2,000 万です。2400万PPS

ネットワーク帯域幅のテスト

Linux インスタンス

  1. テストインスタンスと補助テストインスタンスに接続します。

    詳細については、「Workbench を使用して Linux インスタンスにログインする」をご参照ください。

  2. テストインスタンスと補助テストインスタンスの両方で、次のコマンドを実行して Netperf をダウンロードします。

    wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz
  3. テストインスタンスと補助テストインスタンスの両方で、Netperf と sar 監視ツールをインストールします。

    1. 次のコマンドを実行して依存関係をインストールし、Netperf パッケージを展開します。

      sudo yum install -y gcc autoconf automake libtool sysstat
      tar -zxvf netperf-2.7.0.tar.gz
    2. 次のコマンドを実行して gcc のバージョンを確認します。

      gcc -v 2>&1
    3. テストインスタンスまたは補助テストインスタンスの gcc のバージョンが 10 より新しい場合は、次の手順を実行して gcc が正しくコンパイルできるようにします。それ以外の場合は、この手順をスキップします。

      1. 次のコマンドを実行して nettest_omni.c ファイルを編集します。

        cd netperf
        vim src/nettest_omni.c
      2. i を押して挿入モードに入り、nettest_omni.c ファイルから宣言済み変数を手動で削除します。

        次の変数宣言を削除します:

        /* ソケット用のさまざまなオプション        */
        
        int
          loc_nodelay,    /* ローカルで NODELAY を使用する/しない    */
          rem_nodelay,    /* リモートで NODELAY を使用する/しない  */
          loc_sndavoid,    /* ローカルで送信コピーを回避する    */
          loc_rcvavoid,    /* ローカルで受信コピーを回避する    */
          rem_sndavoid,    /* リモートで送信コピーを回避する    */
          rem_rcvavoid;   /* リモートで受信コピーを回避する    */
      3. 変更を保存して終了するには、Esc を押し、:wq を入力してから Enter を押します。

    4. 次のコマンドを実行して Netperf をコンパイルし、インストールします。

      cd netperf
      sudo ./configure
      sudo make && sudo make install
  4. テストインスタンスで、次のスクリプトを実行して 64 個の netserver サービスを起動します。

    #!/bin/bash
    for j in `seq 64`; do
        netserver -p $[16000+j] > server_$[16000+j].netperf 2>&1 &
    done
  5. テストインスタンスで、次のコマンドを実行してプライベート IP アドレスを確認します。

    ifconfig || ip addr

    image.png

  6. 補助テストインスタンスで、次のスクリプトを実行してテストインスタンスにトラフィックを送信します。

    #!/bin/bash
    server_ip=<test_instance_private_ip_address>
    for j in `seq 64`; do
        port=$[16000+j]
        netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 & 
    done

    <test_instance_private_ip_address> を、前の手順で取得したテストインスタンスのプライベート IP アドレスに置き換えます。

    image.png

  7. テストインスタンスで、次のコマンドを実行してネットワーク帯域幅をテストします。

    sar -n DEV 1

    テスト結果の rxkB/s 列には、KB/s 単位で受信したデータ量が表示されます。Kbps 単位の帯域幅を算出するには、この値に 8 を掛けます (1 バイト = 8 ビットのため)。

    例を次の図に示します。image.png

Windows インスタンス

  1. テストインスタンスと補助テストインスタンスに接続します。

    詳細については、「Workbench を使用して Windows インスタンスにログインする」をご参照ください。

  2. テストインスタンスと補助テストインスタンスの両方で、テストツールをインストールし、ファイアウォールを設定します。

    1. ntttcp.exe ツールをダウンロードし、保存パスを控えます。

    2. [ファイル名を指定して実行] ダイアログボックスを開き、powershell を入力して Enter を押し、PowerShell を開きます。

    3. 次のコマンドを実行してファイアウォールを無効化します。これにより、ファイアウォールによって 2 つのインスタンス間の接続がブロックされるのを防ぎます。

      Set-NetFirewallProfile -Profile * -Enabled:false

      または、インバウンドルールを追加して、ntttcp.exe のパケットがファイアウォールを通過できるようにします。

      $ntttcpPath = "<path_to_ntttcp_exe>"
      New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPath
      説明

      お使いの環境に合わせて、<path_to_ntttcp_exe> を ntttcp.exe ファイルの実際のパスに置き換える必要があります。

  3. テストインスタンスで、次のコマンドを実行してネットワークアダプターの受信側スケーリング (RSS) 機能を設定します。

    受信側スケーリング (RSS) は、マルチプロセッサシステムにおいてネットワーク受信処理を複数の CPU コアに効率よく分散するネットワークドライバー技術です。次のコマンドでは、次の処理を実行します:

    • テストインスタンスの CPU コア数が 16 以下の場合、RSS の受信キュー数を CPU コア数と同じに設定します。これにより、各 CPU コアが専用の受信キューを持ち、ネットワークトラフィックを処理できます。

    • テストインスタンスの CPU コア数が 16 を超える場合、RSS 機能を無効化します。これは、多くのネットワークアダプターでは RSS キューの最大数が 16 に制限されるためです。この場合に RSS を継続して使用すると、リソース割り当ての偏りや管理の複雑化につながる可能性があります。

    $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors
    if ($cpuNum -le 16) {
      Set-NetAdapterRss -Name <name_of_the_network_adapter> -NumberOfReceiveQueues $cpuNum
    } else {
      Disable-NetAdapterRss -Name <name_of_the_network_adapter>
    }
    説明
    • お使いの環境に合わせて、<name_of_the_network_adapter> をテストインスタンス上のネットワークアダプター名に置き換える必要があります。 Get-NetAdapter | Select-Object Name コマンドを実行して名前を取得できます。

    • RSS 設定の変更にはアダプターの再起動が必要であり、ネットワーク接続が一時的に中断される場合があります。接続が復旧してから続行してください。

  4. テストインスタンスで、次のコマンドを実行してデータ受信の準備を行います。

    $serverIp = (Get-NetIPConfiguration -InterfaceAlias <name_of_the_network_adapter>).IPv4Address.IPAddress
    $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors
    $threadNum = $cpuNum
    & <path_to_ntttcp_exe_on_test_instance> -r -m $threadNum,0,$serverIp -t 300
    説明

    お使いの環境に合わせて、<name_of_the_network_adapter><path_to_ntttcp_exe_on_test_instance> を置き換える必要があります。

  5. 補助テストインスタンスで、次のコマンドを実行してデータを送信します。

    $serverIp = "<test_instance_private_ip_address>"
    $threadNum = "<thread_num_of_test_instance>"
    <path_to_ntttcp_exe_on_auxiliary_instance> -s -m $threadNum,*,$serverIp -t 100
    説明

    お使いの環境に合わせて、<test_instance_private_ip_address><thread_num_of_test_instance><path_to_ntttcp_exe_on_auxiliary_instance> を置き換える必要があります。 ipconfig コマンドを実行してテストインスタンスのプライベート IP アドレスを取得できます。また、$cpuNum 変数の値からテストインスタンスのスレッド数を確認できます。

  6. テスト結果のネットワーク帯域幅を確認します。

    テスト結果の Throughput(MB/s) の値がネットワーク帯域幅を示します。

    image

ネットワーク遅延のテスト

Linux インスタンス

  1. テストインスタンスと補助テストインスタンスに接続します。

    詳細については、「Workbench を使用して Linux インスタンスにログインする」をご参照ください。

  2. テストインスタンスと補助テストインスタンスの両方で、次のコマンドを実行して sockperf をインストールします。

    sudo yum install -y autoconf automake libtool gcc-c++
    cd /opt
    sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
    sudo tar -zxf 3.8.tar.gz
    cd sockperf-3.8/
    sudo ./autogen.sh
    sudo ./configure
    sudo make -j `cat /proc/cpuinfo| grep process | wc -l`
    sudo make install
  3. テストインスタンスで、次のコマンドを実行してプライベート IP アドレスを確認します。

    ifconfig || ip addr

    image.png

  4. テストインスタンスで、次のコマンドを実行してサービスを起動します。

    sockperf sr --tcp --daemonize
  5. 補助テストインスタンスで、次のコマンドを実行してテストインスタンスにトラフィックを送信します。

    sockperf pp -i <test_instance_private_ip_address> --tcp -t 30 -m 14 --full-log=result.json

    <test_instance_private_ip_address> を、前の手順で取得したテストインスタンスのプライベート IP アドレスに置き換えます。

  6. テスト結果のネットワーク遅延を確認します。

    テスト結果の例を次の図に示します:

    • avg-latency で始まる行は、マイクロ秒 (μs) 単位の平均レイテンシーを示します。

    • percentile 99.000 で始まる行は、マイクロ秒 (μs) 単位の 99 パーセンタイルレイテンシーを示します。

    image.png

Windows インスタンス

  1. テストインスタンスと補助テストインスタンスに接続します。

    詳細については、「Workbench を使用して Windows インスタンスにログインする」をご参照ください。

  2. テストインスタンスと補助テストインスタンスの両方で、テストツールをインストールし、ファイアウォールを設定します。

    1. latte.exe ツールをダウンロードし、保存パスを控えます。

    2. [ファイル名を指定して実行] ダイアログボックスを開き、powershell を入力して Enter を押し、PowerShell を開きます。

    3. 次のコマンドを実行してファイアウォールを無効化します。これにより、ファイアウォールによって 2 つのインスタンス間の接続がブロックされるのを防ぎます。

      Set-NetFirewallProfile -Profile * -Enabled:false

      または、インバウンドルールを追加して、latte.exe のパケットがファイアウォールを通過できるようにします。

      $lattePath = "<path_to_latte_exe>"
      New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePath
      説明

      お使いの環境に合わせて、<path_to_latte_exe> をテストインスタンス上の latte.exe ファイルの実際のパスに置き換える必要があります。

  3. テストインスタンスで、次のコマンドを実行してデータ受信の準備を行います。

    $serverIp = (Get-NetIPConfiguration | Where-Object {$_.InterfaceAlias -eq '<name_of_the_network_adapter>'} | Select-Object -ExpandProperty IPv4Address).IPAddress
    $port = <communication_port>
    & "<path_to_latte_exe_on_test_instance>" -a "$serverIp`:$port" -i 65535
    説明
    • お使いの環境に合わせて、<name_of_the_network_adapter><path_to_latte_exe_on_test_instance> を置き換える必要があります。 Get-NetAdapter | Select-Object Name コマンドを実行してネットワークアダプター名を取得できます。

    • <communication_port> パラメーターはユーザーが定義します。テストインスタンスと補助テストインスタンスの両方で、同じポート番号を使用する必要があります。

  4. 補助テストインスタンスで、次のコマンドを実行してデータを送信します。

    $serverIp = "<test_instance_private_ip_address>"
    $port = <communication_port>
    & "<path_to_latte_exe_on_auxiliary_instance>" -c -a "${serverIp}:$port" -i 65535
    説明
    • お使いの環境に合わせて、<test_instance_private_ip_address><path_to_latte_exe_on_auxiliary_instance> を置き換える必要があります。 ipconfig コマンドを実行してテストインスタンスのプライベート IP アドレスを取得できます。

    • <communication_port> パラメーターはユーザーが定義します。テストインスタンスと補助テストインスタンスの両方で、同じポート番号を使用する必要があります。

  5. テスト結果のネットワーク遅延を確認します。

    テスト結果の Latency(usec) の値は、マイクロ秒 (μs) 単位の平均データ伝送レイテンシーを示します。

    image