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

Elastic Compute Service:インスタンスのネットワークパフォーマンスのテスト

最終更新日:Aug 21, 2026

Netperf と sockperf を使用して、Elastic Compute Service (ECS) インスタンスのパケット転送レート (pps)、ネットワーク帯域幅、およびネットワークレイテンシーをテストします。

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

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

前提条件

事前準備

  • テスト用の ECS インスタンスを作成します。詳細については、「ECS インスタンスのカスタム起動」をご参照ください。

    重要

    正確で比較可能なテスト結果を得るために、同じインスタンスタイプのインスタンスを使用してください。

  • すべてのテストインスタンスが同じ Virtual Private Cloud (VPC) 内にあり、同じ vSwitch に接続され、同じセキュリティグループに属していることを確認してください。

環境の例

次の表に、テストマシンと補助テストマシンに推奨されるインスタンスタイプと数量を示します。テストシナリオに基づいて、サーバーまたはクライアントとしてマシンを選択してください。

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

    説明

    Windows インスタンスのパケット転送レートをテストするためのツールはありません。

    6,000,000 pps 未満のパケット転送レート

    テスト項目

    テストマシン

    補助テストマシン

    インスタンスタイプ

    ecs.g7.large

    ecs.g7.large

    イメージ

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    インスタンス数

    1

    1

    ネットワーク

    パブリック IP アドレスが割り当てられます。

    6,000,000 pps を超え 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 アドレスが割り当てられます。

  • ネットワーク帯域幅とネットワークレイテンシーのテスト

    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 アドレスが割り当てられます。

操作手順

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

説明

Windows インスタンスのパケット転送レートをテストするためのツールはありません。

6,000,000 pps 未満のパケット転送レート

  1. テストマシンと補助テストマシンに接続します。詳細については、「ワークベンチを使用して 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. GNU Compiler Collection (GCC) のバージョン番号を確認します。

      gcc -v 2>&1
    3. どちらかのマシンで GCC が V10 より新しい場合は、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 と sar をインストールします。

      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=<テストマシンのプライベート IP アドレス>
    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

    <テストマシンのプライベート IP アドレス> を、前の手順で取得した実際のプライベート IP アドレスに置き換えてください。

    image.png

  7. テストマシンで、パケット転送レートをテストします:

    sar -n DEV 1

    rxpck/s 列を確認してください。rxpck/s の値は、1 秒あたりに受信したパケット数を示します。この例では、値は約 940,000 です。

    image.png

6,000,000 pps を超え 20,000,000 pps 未満のパケット転送レート

  1. テストマシンと補助テストマシンに接続します。詳細については、「ワークベンチを使用して Linux インスタンスにログオン」をご参照ください。

  2. 4 台すべてのマシン (補助マシン 3 台とテストマシン 1 台) に 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. 各補助テストマシンで、テストマシンにトラフィックを送信します:

    server_ip="<テストマシンのプライベート IP アドレス>"
    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

    <テストマシンのプライベート IP アドレス> を実際の値に置き換えてください。run_time はトラフィックの期間を指定します。

  5. 4 台すべてのマシンで、パケット転送レートをテストします:

    sar -n DEV 1

    テストマシンの rxpck/s 列を確認してください。rxpck/s の値は、1 秒あたりに受信したパケット数を示します。この例では、値は約 12,000,000 pps です。Received packets

20,000,000 pps を超えるパケット転送レート

  1. テストマシンと補助テストマシンに接続します。詳細については、「ワークベンチを使用して Linux インスタンスにログオン」をご参照ください。

  2. 4 台すべてのマシン (補助マシン 3 台とテストマシン 1 台) に 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) を CPU コアにバインドします。

    IRQ を特定の CPU コアにバインドすると、コンテキストスイッチが減り、高 pps でのパケット処理効率が向上します。

    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. 各補助テストマシンで、テストマシンにトラフィックを送信します:

    server_ip="<テストマシンのプライベート IP アドレス>"
    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

    <テストマシンのプライベート IP アドレス> を実際の値に置き換えてください。run_time はトラフィックの期間を指定します。

  6. 4 台すべてのマシンで、パケット転送レートをテストします:

    sar -n DEV 1

    テストマシンの rxpck/s 列を確認してください。rxpck/s の値は、1 秒あたりに受信したパケット数を示します。この例では、値は約 20,000,000 pps です。24 million PPS

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

Linux インスタンス

  1. テストマシンと補助テストマシンに接続します。詳細については、「ワークベンチを使用して 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 が V10 より新しい場合は、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 と sar をインストールします。

      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
    [ecs-user@izxxx ecZ ~]$ ifconfig || ip addr
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 17.xxx.xxx.15  netmask 25xxx.0  broadcast 17.xxx.55
            inet6 fexxx38:c158  prefixlen 64  scopeid 0x20<link>
            ether 00:xxx:xxx  txqueuelen 1000  (Ethernet)
            RX packets 178595  bytes 106030163 (101.1 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 116902  bytes 70189540 (66.9 MiB)
            TX errors 0  dropped 0  overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 2  bytes 140 (140.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2  bytes 140 (140.0 B)
            TX errors 0  dropped 0  overruns 0  carrier 0  collisions 0
  6. 補助テストマシンで、テストマシンにトラフィックを送信します:

    #!/bin/bash
    server_ip=<テストマシンのプライベート IP アドレス>
    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

    <テストマシンのプライベート IP アドレス> を、前の手順で取得した実際のプライベート IP アドレスに置き換えてください。

    #!/bin/bash
    server_ip=<テストマシンのプライベート IP アドレス>
    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
    [1] 5100
    [2] 5101
    [3] 5102
    [4] 5103
  7. テストマシンで、ネットワーク帯域幅をテストします:

    sar -n DEV 1

    rxkB/s 列を確認してください。rxkB/s の値は、受信したパケットサイズを KB/s で示します。8 を掛けて Kbit/s に変換すると、ネットワーク帯域幅の値になります。

    image.png

Windows インスタンス

  1. テストマシンと補助テストマシンに接続します。詳細については、「パスワードまたはキーを使用して Windows インスタンスに接続」をご参照ください。

  2. 両方のマシンにテストツールをインストールし、ファイアウォールを無効にします。

    1. ntttcp.exe ツールをダウンロードし、ツールが保存されているパスを取得します。

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

    3. 接続がブロックされるのを防ぐために、両方のマシンでファイアウォールを無効にします:

      Set-NetFirewallProfile -Profile * -Enabled:false

      または、両方のマシンで ntttcp.exe を許可する受信ファイアウォールルールを作成します:

      $ntttcpPath = "<ntttcp.exe のパス>"
      New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPath
      説明

      <ntttcp.exe のパス> を実際の値に置き換えてください。

  3. テストマシンで、ネットワークアダプターの受信側スケーリング (RSS) を設定します。

    RSS は、受信したパケットを複数の CPU コアに分散させて、ネットワークパフォーマンスを向上させます。CPU 数に基づいて RSS キューを設定します:

    • マシンの CPU コアが 16 個までの場合、RSS 受信キューの数を CPU コア数に設定します。

    • マシンの CPU コアが 16 個を超える場合は、RSS を無効にします。ほとんどのネットワークアダプターは最大 16 個の RSS キューをサポートしているため、この制限を超えるとリソース割り当てが不均一になる可能性があります。

    $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors
    if ($cpuNum -le 16) {
      Set-NetAdapterRss -Name <テストマシンのネットワークアダプターの名前> -NumberOfReceiveQueues $cpuNum
    } else {
      Disable-NetAdapterRss -Name <テストマシンのネットワークアダプターの名前>
    }
    説明
    • <テストマシンのネットワークアダプターの名前> を実際の値に置き換えてください。Get-NetAdapter | Select-Object Name を実行してアダプター名を取得できます。

    • RSS 設定を変更すると、ネットワークアダプターサービスが再起動され、接続が中断される場合があります。続行する前に、再接続を待ってください。

  4. テストマシンで、データを受信する準備をします:

    $serverIp = (Get-NetIPConfiguration -InterfaceAlias <テストマシンのネットワークアダプターの名前>).IPv4Address.IPAddress
    $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors
    $threadNum = $cpuNum
    & <テストマシン上の ntttcp.exe のパス> -r -m $threadNum,0,$serverIp -t 300
    説明

    <テストマシンのネットワークアダプターの名前><テストマシン上の ntttcp.exe のパス> を実際の値に置き換えてください。

  5. 補助テストマシンで、データを送信します:

    $serverIp = "<テストマシンのプライベート IP アドレス>"
    $threadNum = "<テストマシンのスレッド数>"
    <補助テストマシン上の ntttcp.exe のパス> -s -m $threadNum,*,$serverIp -t 100
    説明

    <テストマシンのプライベート IP アドレス><テストマシンのスレッド数>、および <補助テストマシン上の ntttcp.exe のパス> を実際の値に置き換えてください。ipconfig を実行してプライベート IP アドレスを取得し、$cpuNum を実行してスレッド数を取得します。

  6. テストマシンでネットワーク帯域幅を確認します。

    Throughput (MB/s) の値は、ネットワーク帯域幅を示します。

    image

ネットワークレイテンシーのテスト

Linux インスタンス

  1. テストマシンと補助テストマシンに接続します。詳細については、「ワークベンチを使用して 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

    コマンド出力では、eth0 インターフェイスの inet アドレスがインスタンスのプライベート IP アドレスです。

    [ecs-user@izxxx ecZ ~]$ ifconfig || ip addr
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 17.xxx.xxx.15  netmask 25xxx.0  broadcast 17.xxx.55
            inet6 fexxx38:c158  prefixlen 64  scopeid 0x20<link>
            ether 00:xxx:xxx  txqueuelen 1000  (Ethernet)
            RX packets 178595  bytes 106030163 (101.1 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 116902  bytes 70189540 (66.9 MiB)
            TX errors 0  dropped 0  overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 2  bytes 140 (140.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2  bytes 140 (140.0 B)
            TX errors 0  dropped 0  overruns 0  carrier 0  collisions 0
  4. テストマシンで、sockperf を起動します:

    sockperf sr --tcp --daemonize
  5. 補助テストマシンで、テストマシンにトラフィックを送信します:

    sockperf pp -i <テストマシンのプライベート IP アドレス> --tcp -t 30 -m 14 --full-log=result.json

    <テストマシンのプライベート IP アドレス> を、前の手順の実際の値に置き換えてください。

  6. ネットワークレイテンシーの結果を確認します。

    結果の各項目は次のとおりです:

    • avg-latency:マイクロ秒単位の平均レイテンシー。

    • percentile 99.000:マイクロ秒単位の 99 パーセンタイルのレイテンシー。

    image.png

Windows インスタンス

  1. テストマシンと補助テストマシンに接続します。詳細については、「パスワードまたはキーを使用して Windows インスタンスに接続」をご参照ください。

  2. 両方のマシンにテストツールをインストールし、ファイアウォールを無効にします。

    1. latte.exe ツールをダウンロードし、ツールが保存されているパスを取得します。

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

    3. 接続がブロックされるのを防ぐために、両方のマシンでファイアウォールを無効にします:

      Set-NetFirewallProfile -Profile * -Enabled:false

      または、両方のマシンで latte.exe を許可する受信ファイアウォールルールを作成します:

      $lattePath = "<latte.exe のパス>"
      New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePath
      説明

      <latte.exe のパス> を実際の値に置き換えてください。

  3. テストマシンで、データを受信する準備をします:

    $serverIp = (Get-NetIPConfiguration | Where-Object {$_.InterfaceAlias -eq '<テストマシンのネットワークアダプターの名前>'} | Select-Object -ExpandProperty IPv4Address).IPAddress
    $port = <通信ポート>
    & "<テストマシン上の latte.exe のパス>" -a "$serverIp`:$port" -i 65535
    説明
    • <テストマシンのネットワークアダプターの名前><テストマシン上の latte.exe のパス> を実際の値に置き換えてください。Get-NetAdapter | Select-Object Name を実行してアダプター名を取得できます。

    • <通信ポート> にポート番号を指定してください。両方のマシンで同じポートを使用してください。

  4. 補助テストマシンで、データを送信します:

    $serverIp = "<テストマシンのプライベート IP アドレス>"
    $port = <通信ポート>
    & "<補助テストマシン上の latte.exe のパス>" -c -a "${serverIp}:$port" -i 65535
    説明
    • <テストマシンのプライベート IP アドレス><補助テストマシン上の latte.exe のパス> を実際の値に置き換えてください。ipconfig を実行してプライベート IP アドレスを取得します。

    • <通信ポート> にポート番号を指定してください。両方のマシンで同じポートを使用してください。

  5. ネットワークレイテンシーの結果を確認します。

    Latency (usec) の値は、マイクロ秒単位の平均ネットワークレイテンシーを示します。

    image