パケット転送速度、ネットワーク帯域幅、ネットワーク遅延は、Elastic Compute Service (ECS) インスタンスのネットワークパフォーマンスを測定するための重要なメトリックです。1 秒あたりのパケット数 (pps) で測定されるパケット転送速度は、1 秒間に転送できるパケット数を示すメトリックです。ネットワーク帯域幅は、ネットワークのデータ転送速度を示すメトリックです。ネットワーク遅延は、データパケットが送信者から受信者に到達するまでにかかる時間を示すメトリックです。ネットワークパフォーマンスをテストすることで、ネットワークの安定性とスループットを向上させ、ネットワーク遅延を削減し、ユーザーエクスペリエンスとアプリケーションパフォーマンスを向上させることができます。このトピックでは、Netperf や sockperf などのツールを使用して、ECS インスタンスのパケット転送速度、ネットワーク帯域幅、ネットワーク遅延をテストする方法について説明します。テスト結果に基づいて、インスタンスのネットワークパフォーマンスを評価できます。
データ損失を防ぐため、データを含まない新しい ECS インスタンスのネットワークパフォーマンスをテストすることを推奨します。
インスタンスタイプのメトリックはすべて、テスト環境内で検証および取得されたものです。実際のシナリオでは、インスタンスのパフォーマンスは、インスタンスの負荷やネットワークモデルなどの他の要因によって異なる場合があります。
テスト環境の準備
前提条件
パケット転送速度、ネットワーク帯域幅、ネットワーク遅延など、さまざまなネットワークパフォーマンスメトリックをテストするために使用できる ECS インスタンスを作成します。ECS インスタンスの作成方法の詳細については、「「カスタム起動」タブでのインスタンスの作成」をご参照ください。
重要テスト結果の正確性と比較可能性を確保し、インスタンス仕様の違いなどの他の要因がテスト結果に与える影響を排除するために、ネットワークパフォーマンステストでは同じインスタンスタイプの ECS インスタンスを使用することを推奨します。
同じテスト環境内のすべての ECS インスタンスが同じ Virtual Private Cloud (VPC) にデプロイされ、同じ vSwitch に接続され、同じセキュリティグループに属していることを確認してください。
環境の例
以下は、このトピックのネットワークパフォーマンステストで使用されるプライマリおよび補助テスト ECS インスタンスのインスタンスタイプと数量です。ご自身のテストでは、実際の環境に基づいて 2 つのインスタンスを選択できます。
ECS インスタンスのパケット転送速度のテスト (このテストは Linux インスタンスでのみ実行可能)
説明Windows インスタンスのパケット転送速度をテストするためのツールはありません。このトピックでは、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 アドレスを割り当てます
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 アドレスを割り当てます
ネットワークパフォーマンスのテスト
パケット転送速度のテスト (Linux インスタンスのみ)
Windows インスタンスのパケット転送速度をテストするためのツールはありません。このセクションでは、Windows インスタンスのパケット転送速度のテスト方法については説明しません。
パケット転送速度が 6,000,000 pps 未満の場合
テストマシンと 1 台以上の補助テストマシンに接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
テストマシンと補助テストマシンで次のコマンドを実行して、Netperf インストールパッケージをダウンロードします。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gzテストマシンと補助テストマシンで次のコマンドを実行して、Netperf と sar をインストールします。
次のコマンドを実行して、Netperf インストールパッケージを解凍します。
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz次のコマンドを実行して、
gccのバージョン番号を照会します。gcc -v 2>&1テストマシンと補助テストマシンにインストールされている
gccのバージョンが 10 より後の場合は、次の操作を実行してgccがコードを正しくコンパイルできるようにします。それ以外の場合は、このステップをスキップできます。次のコマンドを実行して、
nettest_omni.cファイルを修正します。cd netperf vim src/nettest_omni.ci キーを押して編集モードに入り、
nettest_omni.cファイルから次の変数宣言を手動で削除します。変数は次のように宣言されています。
/* different options for the sockets */ int loc_nodelay, /* don't/do use NODELAY locally */ rem_nodelay, /* don't/do use NODELAY remotely */ loc_sndavoid, /* avoid send copies locally */ loc_rcvavoid, /* avoid recv copies locally */ rem_sndavoid, /* avoid send copies remotely */ rem_rcvavoid; /* avoid recv_copies remotely */ファイルを修正した後、Esc キーを押し、
:wqと入力してから Enter キーを押してファイルを保存し、終了します。
次のコマンドを実行して、Netperf と sar をインストールします。
cd netperf sudo ./configure sudo make && sudo make install
テストマシンで次のコマンドを実行して、64 個の netserver サービスを開始します。
#!/bin/bash for j in `seq 64`; do netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1 & doneテストマシンで次のコマンドを実行して、テストマシンのプライベート IP アドレスを照会します。
ifconfig || ip addr
補助テストマシンで次のコマンドを実行して、テストマシンにトラフィックを送信します。
#!/bin/bash server_ip=<Private IP address of the test machine> 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<Private IP address of the test machine>を、前の手順で取得したテストマシンのプライベート IP アドレスに置き換えます。次の図は例を示しています。
テストマシンで次のコマンドを実行して、テストマシンのパケット転送速度をテストします。
sar -n DEV 1テスト結果で、
rxpck/s列の値を確認します。rxpck/sは、テストマシンが 1 秒あたりに受信するパケットの総数を示します。次の図の例では、テストマシンが 1 秒あたりに受信する平均パケット数は約 940,000 です。
パケット転送速度が 6,000,000 pps を超え、20,000,000 pps 未満の場合
テストマシンと 1 台以上の補助テストマシンに接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
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テストマシンで次のコマンドを実行して、テストマシンのプライベート IP アドレスを照会します。
ifconfig || ip addr
3 台の補助テストマシンのそれぞれで次のコマンドを実行して、テストマシンにトラフィックを送信します。
server_ip="<private IP address of the test machine>" 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<private IP address of the test machine>をテストマシンのプライベート IP アドレスに置き換えます。run_timeはトラフィックを送信する期間を指定します。必要に応じて値を変更できます。3 台の補助テストマシンと 1 台のテストマシンで次のコマンドを実行して、パケット転送速度をテストします。
sar -n DEV 1テストマシンで、
rxpck/s列の値を確認します。rxpck/sは、テストマシンが 1 秒あたりに受信するパケット数を示します。次の図の例では、テストマシンが 1 秒あたりに受信するパケット数は約 1,200 万です。
パケット転送速度が 20,000,000 pps を超える場合
テストマシンと 1 台以上の補助テストマシンに接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
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テストマシンで次のコマンドを実行して、割り込みリクエスト (IRQ) をバインドします。
1 秒あたりに大量のパケットが転送されるシナリオでは、IRQ を CPU コアにバインドして、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テストマシンで次のコマンドを実行して、テストマシンのプライベート IP アドレスを照会します。
ifconfig || ip addr
3 台の補助テストマシンのそれぞれで次のコマンドを実行して、テストマシンにトラフィックを送信します。
server_ip="<private IP address of the test machine>" 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<private IP address of the test machine>をテストマシンのプライベート IP アドレスに置き換えます。run_timeはトラフィックを送信する期間を指定します。必要に応じて値を変更できます。3 台の補助テストマシンと 1 台のテストマシンで次のコマンドを実行して、パケット転送速度をテストします。
sar -n DEV 1テストマシンで、
rxpck/s列の値を確認します。rxpck/sは、テストマシンが 1 秒あたりに受信するパケット数を示します。次の図の例では、テストマシンが 1 秒あたりに受信するパケット数は約 2,000 万です。
ネットワーク帯域幅のテスト
Linux インスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
テストマシンと補助テストマシンで次のコマンドを実行して、Netperf インストールパッケージをダウンロードします。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gzテストマシンと補助テストマシンで次のコマンドを実行して、Netperf と sar をインストールします。
次のコマンドを実行して、Netperf インストールパッケージを解凍します。
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz次のコマンドを実行して、
gccのバージョン番号を照会します。gcc -v 2>&1テストマシンと補助テストマシンにインストールされている
gccのバージョンが 10 より後の場合は、次の操作を実行してgccがコードを正しくコンパイルできるようにします。それ以外の場合は、このステップをスキップできます。次のコマンドを実行して、
nettest_omni.cファイルを修正します。cd netperf vim src/nettest_omni.ci キーを押して編集モードに入り、
nettest_omni.cファイルから次の変数宣言を手動で削除します。変数宣言は次のとおりです。
/* different options for the sockets */ int loc_nodelay, /* don't/do use NODELAY locally */ rem_nodelay, /* don't/do use NODELAY remotely */ loc_sndavoid, /* avoid send copies locally */ loc_rcvavoid, /* avoid recv copies locally */ rem_sndavoid, /* avoid send copies remotely */ rem_rcvavoid; /* avoid recv_copies remotely */ファイルを修正した後、Esc キーを押し、
:wqと入力してから Enter キーを押してファイルを保存し、終了します。
次のコマンドを実行して、Netperf と sar をインストールします。
cd netperf sudo ./configure sudo make && sudo make install
テストマシンで次のコマンドを実行して、64 個の netserver サービスを開始します。
#!/bin/bash for j in `seq 64`; do netserver -p $[16000+j] > server_$[16000+j].netperf 2>&1 & doneテストマシンで次のコマンドを実行して、テストマシンのプライベート IP アドレスを照会します。
ifconfig || ip addr
補助テストマシンで次のコマンドを実行して、テストマシンにトラフィックを送信します。
#!/bin/bash server_ip=<Private IP address of the test machine> 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<Private IP address of the test machine>を、前の手順で取得したテストマシンのプライベート IP アドレスに置き換えます。次の図は例を示しています。
テストマシンで次のコマンドを実行して、ネットワーク帯域幅をテストします。
sar -n DEV 1次の図に示すように、テスト結果の
rxkB/s列の値を確認します。rxkB/s列には、テストマシンが 1 秒あたりに受信したパケットのサイズが表示されます。単位:KB/s。1 バイトは 8 ビットに相当します。rxkB/s 列のパケットサイズに 8 を掛けると、Kbit/s 単位のネットワーク帯域幅の値が得られます。次の図は一例です。

Windows インスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「Workbench を使用して Windows インスタンスにログイン」をご参照ください。
テストマシンと補助テストマシンにテストツールをインストールし、ファイアウォールを無効にします。
ntttcp.exe ツールをダウンロードし、ツールが保存されているパスを取得します。
「ファイル名を指定して実行」ダイアログボックスを開きます。powershell と入力し、[OK] をクリックして PowerShell を起動します。
次のコマンドを実行して、ファイアウォールを無効にします。これにより、ファイアウォールが 2 台のマシン間の接続をブロックするのを防ぎます。
Set-NetFirewallProfile -Profile * -Enabled:falseまたは、インバウンドルールを追加して、ntttcp.exe からのパケットがファイアウォールを通過できるようにすることもできます。
$ntttcpPath = "<Path of ntttcp.exe>" New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPath説明<actual path of ntttcp.exe>をテストマシン上の実際のパスに置き換えてください。
テストマシンで次のコマンドを実行して、ネットワークアダプター (ネットワークインターフェイスコントローラーとも呼ばれる) の Receive Side Scaling (RSS) を設定します。
RSS は、複数の CPU コア上の受信キューにパケットを効率的に分散させてネットワークパフォーマンスを向上させ、同時ネットワーク処理を可能にするネットワークドライバーテクノロジーです。コマンドでは:
テストマシンに最大 16 個の CPU コアがある場合、RSS 受信キューの数を CPU コアの数に設定して、各 CPU コアがネットワークトラフィックを処理するための独立した RSS 受信キューを持つようにします。
テストマシンに 16 個を超える CPU コアがある場合、RSS を無効にします。多くのネットワークアダプターは最大 16 個の RSS キューをサポートしています。16 個を超える CPU コアを持つテストマシンで RSS を使用すると、リソースが均等に割り当てられないか、管理の複雑さが増す可能性があります。
$cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors if ($cpuNum -le 16) { Set-NetAdapterRss -Name <Name of the network adapter on the test machine> -NumberOfReceiveQueues $cpuNum } else { Disable-NetAdapterRss -Name <Name of the network adapter on the test machine> }説明<name of the network adapter on the test machine>を必要に応じて置き換えます。Get-NetAdapter | Select-Object Nameコマンドを実行して名前を取得できます。ネットワークアダプターの RSS 設定を変更した後、ネットワークアダプターサービスを再起動する必要があります。これにより、ネットワークアダプター上のネットワーク接続が中断される可能性があります。ネットワーク接続が再確立されるまで待ってから、後続の操作を実行してください。
テストマシンで次のコマンドを実行して、データ受信の準備をします。
$serverIp = (Get-NetIPConfiguration -InterfaceAlias <name of the network adapter on the test machine>).IPv4Address.IPAddress $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors $threadNum = $cpuNum & <actual path of ntttcp.exe on the test machine> -r -m $threadNum,0,$serverIp -t 300説明<name of the network adapter on the test machine>と<actual path of ntttcp.exe on the test machine>を適宜置き換えてください。補助テストマシンで次のコマンドを実行して、データを送信します。
$serverIp = "<Private IP address of the test machine>" $threadNum = "<Thread number of the test machine>" <Path of ntttcp.exe on the auxiliary test machine> -s -m $threadNum,*,$serverIp -t 100説明<private IP address of the test machine>(ipconfigコマンドを実行して取得可能)、<threadNum of the test machine>($cpuNumコマンドを実行して取得可能)、および<actual path of ntttcp.exe on the auxiliary test machine>を必要に応じて置き換えてください。テストマシンでテストされたネットワーク帯域幅を確認します。
次の図はテスト例を示しています。
Throughput(MB/s)の値はネットワーク帯域幅を示します。
ネットワーク遅延のテスト
Linux インスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
テストマシンと補助テストマシンで、次のコマンドを実行して
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テストマシンで次のコマンドを実行して、テストマシンのプライベート IP アドレスを照会します。
ifconfig || ip addr
テストマシンで次のコマンドを実行して、サービスを開始します。
sockperf sr --tcp --daemonize補助テストマシンで次のコマンドを実行して、テストマシンにトラフィックを送信します。
sockperf pp -i <Private IP address of the test machine> --tcp -t 30 -m 14 --full-log=result.json<private IP address of the test machine>を、前の手順で取得したテストマシンのプライベート IP アドレスに置き換えます。テストマシンでテストされたネットワーク遅延を確認します。
次の図はテストの例です。
avg-latencyで始まる値は、マイクロ秒 (μs) 単位の平均遅延を示します。percentile 99.000で始まる値は、μs 単位の 99 パーセンタイルの遅延を示します。

Windows インスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「Workbench を使用して Windows インスタンスにログイン」をご参照ください。
テストマシンと補助テストマシンにテストツールをインストールし、ファイアウォールを無効にします。
latte.exe ツールをダウンロードし、ツールが保存されているパスを取得します。
「ファイル名を指定して実行」ダイアログボックスを開きます。powershell と入力し、[OK] をクリックして PowerShell を起動します。
ファイアウォールがテストマシンと補助テストマシンへの接続をブロックするのを防ぐために、マシンで次のコマンドを実行してファイアウォールを無効にします。
Set-NetFirewallProfile -Profile * -Enabled:falseまたは、インバウンドルールを追加して、latte.exe パケットがファイアウォールを通過できるようにすることもできます。
$lattePath = "<Path of latte.exe>" New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePath説明<actual path of latte.exe>をテストマシン上の latte.exe へのパスに置き換えてください。
テストマシンで次のコマンドを実行して、データ受信の準備をします。
$serverIp = (Get-NetIPConfiguration | Where-Object {$_.InterfaceAlias -eq '<Name of the network adapter on the test machine>'} | Select-Object -ExpandProperty IPv4Address).IPAddress $port = <Communication port> & "<Path of latte.exe on the test machine>" -a "$serverIp`:$port" -i 65535説明<name of the network adapter on the test machine>(Get-NetAdapter | Select-Object Nameコマンドを実行して取得可能) と<actual path of latte.exe on the test machine>を必要に応じて置き換えてください。<communication port>の値を定義します。ポート番号は、テストマシンと補助テストマシンで同じである必要があります。
補助テストマシンで次のコマンドを実行して、データを送信します。
$serverIp = "<Private IP address of the test machine>" $port = <Communication port> & "<Path of latte.exe on the auxiliary test machine>" -c -a "${serverIp}:$port" -i 65535説明<private IP address of the test machine>(ipconfigコマンドを実行して取得可能) と<actual path of latte.exe on the auxiliary test machine>を正しい値に置き換えてください。<communication port>の値を指定します。ポート番号は、テストマシンと補助テストマシンで同じである必要があります。
テストマシンでテストされたネットワーク遅延を確認します。
次の図はテスト例を示しています。
Latency(usec)の値は、マイクロ秒 (μs) 単位の平均データ転送遅延を示します。