パケット転送速度、ネットワーク帯域幅、およびネットワーク遅延は、Elastic Compute Service (ECS) インスタンスのネットワークパフォーマンスを測定するための重要な指標です。 パケット転送レートは、1秒あたりのパケット数 (pps) で測定され、1秒あたりに転送できるパケット数を示すメトリックです。 ネットワーク帯域幅は、ネットワークのデータ転送速度を示すメトリックです。 ネットワーク待ち時間は、データパケットが送信側から受信側に移動するのに必要な時間量を示すメトリックです。 ネットワークパフォーマンスのテストは、ネットワークの安定性とスループットの向上、ネットワーク遅延の削減、ユーザーエクスペリエンスとアプリケーションパフォーマンスの向上に役立ちます。 このトピックでは、Netperfやsockperfなどのツールを使用して、ECSインスタンスのパケット転送速度、ネットワーク帯域幅、およびネットワークレイテンシをテストする方法について説明します。 テスト結果に基づいて、インスタンスのネットワークパフォーマンスを推定できます。
データの損失を防ぐために、データを含まない新しいECSインスタンスのネットワークパフォーマンスをテストするツールを使用することを推奨します。
インスタンスタイプメトリックはすべて、テスト環境内で検証および取得されます。 実際のシナリオでは、インスタンスのパフォーマンスは、インスタンスの負荷やネットワークモデルなどの他の要因によって異なる場合があります。
テスト環境の準備
準備
パケット転送速度、ネットワーク帯域幅、ネットワーク遅延など、さまざまなネットワークパフォーマンス指標をテストするために使用できるECSインスタンスを作成します。 ECSインスタンスの作成方法については、「カスタム起動タブでインスタンスを作成する」をご参照ください。
重要テスト結果の正確性と比較可能性を確保し、異なるインスタンス仕様などの他の要因がテスト結果に与える影響を排除するために、ネットワークパフォーマンステストでは同じインスタンスタイプのECSインスタンスを使用することを推奨します。
同じテスト環境内のすべてのECSインスタンスが同じ仮想プライベートクラウド (VPC) にデプロイされ、同じvSwitchに接続され、同じセキュリティグループに属していることを確認します。
環境の例
ECSインスタンスは、テストマシンおよび補助テストマシンとして使用されます。 ECSインスタンスのパケット転送速度、ネットワーク帯域幅、およびネットワークレイテンシがテストされます。 次の表は、さまざまなテスト環境でのテストマシンまたは補助テストマシンのテスト項目と推奨数量を示しています。 テストマシンまたは補助テストマシンは、ネットワークパフォーマンステストのクライアントまたはサーバーとして使用されます。 実際の環境に基づいて、サーバーまたはクライアントとして使用するマシンを選択します。
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台以上の補助テストマシンに接続します。
詳細については、「パスワードまたはキーを使用した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
次のコマンドを実行して、GNUコンパイラコレクション (
GCC
) のバージョン番号を照会します。gcc -v 2>&1
テストマシンと補助テストマシンの
GCC
のバージョンがV10より後の場合は、次の操作を実行して、GCC
がコードを適切にコンパイルできるようにします。 テストマシンと補助テストマシンのGCCのバージョンがV10以降でない場合は、この手順を無視してください。次のコマンドを実行して、
nettest_omni.c
ファイルを開きます。cd netperf vim src/nettest_omni.c
iキーを押してInsertモードに入り、
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 スド /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 DEV1
テスト結果の
rxpck/s
列の値を表示します。rxpck/s
列には、テストマシンが1秒あたりに受信したパケットの総数が表示されます。 この例では、次の図に示すように、1秒あたりにテストマシンが受信するパケットの平均数は約940,000です。
パケット転送レートより高いより6,000,000 ppsと低いより20,000,000 pps
テストマシンと1台以上の補助テストマシンに接続します。
詳細については、「パスワードまたはキーを使用した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秒あたりに受信するパケット数は約12,000,000です。
パケット転送レートより高い20,000,000 pps
テストマシンと1台以上の補助テストマシンに接続します。
詳細については、「パスワードまたはキーを使用した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秒あたりに受信するパケット数は約20,000,000です。
テストネットワーク帯域幅
Linuxインスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「パスワードまたはキーを使用した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
のバージョンがV10より後の場合は、次の操作を実行して、GCC
がコードを適切にコンパイルできるようにします。 テストマシンと補助テストマシンのGCCのバージョンがV10以降でない場合は、この手順を無視してください。次のコマンドを実行して、
nettest_omni.c
ファイルを開きます。cd netperf vim src/nettest_omni.c
iキーを押してInsertモードに入り、
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 TCP_STREAM -p $port -- -D > /dev/null 2>&1 & done
次の図に示すように、
<Private IP address of the test machine>
を前の手順で取得したテストマシンのプライベートIPアドレスに置き換えます。テストマシンで次のコマンドを実行して、ネットワーク帯域幅をテストします。
sar -n DEV1
次の図に示すように、テスト結果の
rxkB/s
列の値を確認します。rxkB/s
の列には、テストマシンが1秒あたりに受信したパケットのサイズが表示されます。 (単位:KB) パケットサイズは、次の式を使用して帯域幅に変換できます。帯域幅 (Kbit/s) =パケットサイズ (KB/s) × 8。####
Windowsインスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「パスワードまたはキーを使用したWindowsインスタンスへの接続」をご参照ください。
テストツールをインストールし、テストマシンと補助テストマシンのファイアウォールを無効にします。
ntttcp.exeツールをダウンロードし、ツールが保存されているパスを取得します。
[実行] ダイアログボックスを開きます。 powershellと入力し、[OK] をクリックしてPowerShellを起動します。
ファイアウォールがテストマシンと補助テストマシンへの接続をブロックしないようにするには、マシンで次のコマンドを実行してファイアウォールを無効にします。
Set-NetFirewallProfile -Profile * -Enabled:false
または、テストマシンと補助テストマシンで次のコマンドを実行して、NTTTTCP (ntttcp.exe) パケットを許可する受信ファイアウォールルールを作成します。
$ntttcpPath = "<Path of ntttcp.exe>" New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPath
説明<Path of ntttcp.exe>
を実際の値に置き換えます。
テストマシンで次のコマンドを実行して、ネットワークアダプター (ネットワークインターフェイスコントローラーとも呼ばれます) の受信側スケーリング (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 & <Path of ntttcp.exe on the test machine> -r -m $threadNum,*,$serverIp -t 300
説明<テストマシンのネットワークアダプタの名前>
と<テストマシンのntttcp.exeのパス>
を実際の値に置き換えます。補助テストマシンで次のコマンドを実行して、データを送信します。
$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
説明<テストマシンのプライベートIPアドレス>
、<テストマシンのスレッド番号>
、および<<テストマシンのntttcp.exeのパス>
を実際の値に置き換えます。ipconfig
コマンドを実行してテストマシンのプライベートIPアドレスを取得し、$cpuNum
コマンドを実行してテストマシンのスレッド番号を取得します。テストマシンでテストされたネットワーク帯域幅を表示します。
次の図はテスト結果を示しています。
Throughput(MB/s)
の値はネットワーク帯域幅を示しています。
Test network latency
Linuxインスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「パスワードまたはキーを使用した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を起動します。
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
で始まる返されたデータは、マイクロ秒単位の平均レイテンシを示します。パーセンタイル99.000
で始まる返されたデータは、99パーセンタイルの待ち時間をマイクロ秒単位で示します。
Windows インスタンス
テストマシンと補助テストマシンに接続します。
詳細については、「パスワードまたはキーを使用したWindowsインスタンスへの接続」をご参照ください。
テストツールをインストールし、テストマシンと補助テストマシンのファイアウォールを無効にします。
latte.exeツールをダウンロードし、ツールが保存されているパスを取得します。
[実行] ダイアログボックスを開きます。 powershellと入力し、[OK] をクリックしてPowerShellを起動します。
ファイアウォールがテストマシンと補助テストマシンへの接続をブロックしないようにするには、マシンで次のコマンドを実行してファイアウォールを無効にします。
Set-NetFirewallProfile -Profile * -Enabled:false
または、テストマシンと補助テストマシンで次のコマンドを実行して、Latte (latte.exe) パケットを許可する受信ファイアウォールルールを作成します。
$lattePath = "<Path of latte.exe>" New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePath
説明<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
説明<テストマシンのネットワークアダプタの名前>
と<テストマシンのlatte.exeのパス>
を実際の値に置き換えます。Get-NetAdapter | Select-Object Name
コマンドを実行して、テストマシン上のネットワークアダプターの名前を取得できます。<通信ポート>
の代わりにポート番号を指定し、テストマシンと補助テストマシンで指定されたポート番号が同じであることを確認します。
補助テストマシンで次のコマンドを実行して、データを送信します。
$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
説明<テストマシンのプライベートIPアドレス>
と<補助テストマシンのlatte.exeのパス>
を実際の値に置き換えます。ipconfig
コマンドを実行して、テストマシンのプライベートIPアドレスを取得します。<通信ポート>
の代わりにポート番号を指定し、テストマシンと補助テストマシンで指定されたポート番号が同じであることを確認します。
テストマシンでテストされたネットワーク遅延を表示します。
以下の図にテスト結果を示します。
レイテンシ (usec)
値は、平均ネットワークレイテンシをマイクロ秒単位で示します。