免責事項: この記事には、サードパーティ製品に関する情報が含まれている場合があります。 そのような情報は参照だけのためです。 Alibaba Cloudは、明示または黙示を問わず、サードパーティ製品のパフォーマンスと信頼性、および製品に対する操作の潜在的な影響に関して、いかなる保証も行いません。
概要
このトピックでは、Pktgenを使用してElastic Compute Service (ECS) インスタンスのネットワークパフォーマンスをテストする方法について説明します。
背景情報
以下の点にご注意ください。
- インスタンス設定やデータの変更などの危険な操作を実行する前に、データのセキュリティを確保するために、インスタンスのディザスタリカバリ機能とフォールトトレランス機能を確認することを推奨します。
- ECSおよびApsaraDB RDSインスタンスを含むインスタンスの設定とデータを変更できます。 インスタンス設定またはデータを変更する前に、スナップショットを作成するか、RDSログバックアップを有効にすることを推奨します。
- Alibaba Cloud管理コンソールでログインアカウントやパスワードなどの機密情報を承認または送信した場合は、これらの情報をタイムリーに変更することを推奨します。
次の手順では、Pktgenを使用してECSインスタンスのネットワークパフォーマンスをテストする方法について説明します。
ステップ1: 環境の準備
ECSインスタンスを2つ用意します。1つはジェネレーター用、もう1つはレシーバー用です。 ログオン用とテスト用の2つのネットワークインターフェイスコントローラー (NIC) を用意します。 2つのNICが互いに通信できることを確認してください。 次に、ifconfigコマンドを実行し、トラフィックを設定するときに必要な2つのNICのIPアドレスとメディアアクセス制御 (MAC) アドレスを記録します。
ステップ2: ソフトウェアのインストール
ジェネレータとレシーバの両方で次の操作を実行します。
- Linuxインスタンスにログインします。 Linuxインスタンスへのログイン方法の詳細については、「ユーザー名とパスワードを使用したLinuxインスタンスへの接続」をご参照ください。
- 次のコマンドを実行して、
pktgenディレクトリを作成します。mkdir pktgen - 次のコマンドを実行して
pktgenディレクトリに移動します。cd pktgen - 次のコマンドを実行して、Pktgen、Lua、およびData Plane Development Kit (DPDK) のインストールパッケージをダウンロードします。
wget https://git.dpdk.org/apps/pktgen-dpdk/snapshot/pktgen-dpdk-pktgen-3.6.5.zip https://www.lua.org/ftp/lua-5.4.3.tar.gz https://fast.dpdk.org/rel/dpdk-18.11.11.tar.xz説明注: Pktgen、Lua、およびDPDKのバージョンは、互いに互換性がある必要があります。 そうしないと、コンパイルエラーが発生する可能性があります。 このトピックでは、上記のコマンドのバージョンを使用します。 他のバージョンのインストールパッケージを使用する前に、バージョンが互いに互換性があることを確認してください。
- 次のコマンドを順番に実行して、Pktgen、Lua、およびDPDKのインストールパッケージを解凍します。
tar -Jxvf dpdk-18.11.11.tar.xz tar -zxvf lua-5.4.3.tar.gz unzip pktgen-dpdk-pktgen-3.6.5.zip - コンパイルプロセス中にいくつかの依存関係が見つからない場合は、次のコマンドを実行して対応するインストールパッケージをインストールします。
- CentOS 7
をインストールするyum -yインストールkernel-devel.x86_64 yum -yインストールnumactl-devel.x86_64 yum -y install elfutils-libelf-devel yum -y libpcap-devel - CentOS 8
説明
注: デフォルトでは、libpcap-develはCentOS 8オペレーティングシステムにインストールされていません。 次のコマンドを実行してlibpcap-develをインストールします。
をインストールするdnf config-manager -- add-repo /etc/yum.repos.d/CentOS-PowerTools.repo dnf config-manager -- set-enabled PowerTools dnf epel-releaseをインストールする dnf libpcap-devel
- CentOS 7
- 次のコマンドを順番に実行して、Pktgenをコンパイルしてインストールします。
dpdk-stable-18.11.11 make config T=x86_64-native-linuxapp-gcc make all -j32 - 次のコマンドを順番に実行して、Luaをコンパイルしてインストールします。
cd lua-5.4.3 作る インストールする - 次のコマンドを順番に実行して、DPDKをコンパイルしてインストールします。
cd pktgen-dpdk-pktgen-3.6.5 / エクスポートRTE_SDK=/root/pktgen/dpdk-stable-18.11.11 / エクスポートRTE_TARGET=build make -j32
ステップ3: ドライバをVFIOにバインド
ジェネレータとレシーバの両方で次の操作を実行します。
/proc/cmdlineファイルを表示し、BOOT_IMAGEで始まる行にintel_iommu=onパラメーターが含まれているかどうかを確認します。 行にintel_iommu=onパラメーターが含まれていない場合は、/etc/default/grubファイルを編集し、intel_iommu=onパラメーターをGRUB_CMDLINE_LINUXで始まる行に追加してから、ECSインスタンスを再起動します。- 次のコマンドを順番に実行して、仮想ファンクションI/O (VFIO) およびVFIO-PCIドライバーをインストールします:
modprobe vfio modprobe vfio-pci - 次のコマンドを実行してnoniommu_modeを設定します。
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode - 次のコマンドを実行して、NICのbus-info値を確認して記録します。
ethtool -i eth1次のようなコマンド出力が返されます。説明注: このトピックでは、eth1 NICが使用されます。 実際の操作では、eth1をNICに置き換えます。
driver: virtio_net バージョン: 1.0.0 ファームウェアバージョン: expansion-rom-version: bus-info: 0000:00:08.0 サポート-統計: いいえ supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no - 次のコマンドを実行して、eth1からvirtioドライバーのバインドを解除します。
echo "[$Bus-info]" > /sys/bus/pci/drivers/virtio-pci/unbind説明注: [$Bus-info] は、前の手順で取得したNICのbus-info値です。
- bus-infoをVFIO-PCIドライバーにバインドするには、次のコマンドを実行します。
/root/pktgen/dpdk-stable-18.11.11/usertools/dpdk-devbind.py -b vfio-pci [$Bus-info]
ステップ4: Hugepagesの設定
ジェネレータとレシーバの両方で次の操作を実行します。 ノードの数を確認し、対応するコマンドを実行します。
- デュアルノード
のエコー8000 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages エコー8000 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages - 単一ノードの
エコー8000 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
ステップ5: 開始Pktgen
ジェネレータとレシーバの両方で次の操作を実行します。
codepktgen-dpdk-pktgen-3.6.5codeディレクトリで次のコマンドを実行し、Pktgenを起動します。. /app/build/pktgen -c 0x1ffff -n 4 -- socket-mem 16000 -w [$Bus-info] -- P -m "[1-16:1-16].0"以下のものと同様のコマンド出力は、Pktgenが開始されたことを示す。Copyright (c) <2010 − 2019> 、Intel Corporation。説明注:
- 0x1ffff: スレッドによって使用されるCPUを示すマスク。 この例では、マスクの最下位セットビットはbit0であり、これは、CPU0がシェルの制御に使用され、CPU1〜CPU16がパケットの生成および受信に使用されることを示す。
- 「 [1-16:1-16].0」はCPU番号を示します。 詳細については、以下の説明をご参照ください。 CPU番号は、マスク内のパケットを生成し受信するCPU範囲を超えることはできません。
- 1-16 (コロンの前): CPU番号。 16個のCPUの1つがパケットの受信に使用されます。
- 1-16 (コロンの後): CPU番号。 16個のCPUの1つを使用してパケットを生成します
- 0は、ポート番号が0であることを示します。
- CPU範囲を変更して、世代のパフォーマンスを向上させることができます。 パケットの生成に必要なCPUが多いほど、より多くのHugepageが必要になることに注意してください。 Pktgenプロセスは不十分なHugepageのために停止するかもしれません。
全著作権所有。 DPDKを搭載 EAL: 検出された64 lcore(s) EAL: 検出された1 NUMAノード EAL: マルチプロセスソケット /var/run/dpdk/rte/mp_socket EAL: hugepages-1048576kBでは無料のhugepagesは報告されていません EAL: VFIOのサポートを調査... EAL: 初期化されたVFIOサポート EAL: PCIデバイス0000: NUMA socket -1で00:08.0 EAL: 無効なNUMAソケット、デフォルトで0 EAL: プローブドライバ: 1af4:1000 net_virtio EAL: IOMMUタイプ8を使用 (IOMMUなし) Lua 5.4.3 Copyright (C) 1994-2021 Lua.org, PUC-リオ *** 著作権 (c) <2010-2019> 、Intel Corporation。 全著作権所有。 *** Pktgenによって作成されました: Keith Wiles -- >>> Powered by DPDK <<< ポート0の初期化 -- TxQ 16、RxQ 16、Src MAC 00:16:3e:24:9b:a4 ポート0: リンクアップスピード10000 Mbps-全二重 <無差別モードを有効にする> RX/TX processing lcore: 1 rx: 1 tx: 1 RX/TX processing lcore: 2 rx: 1 tx: 1 RX/TX processing lcore: 3 rx: 1 tx: 1 RX/TX processing lcore: 4 rx: 1 tx: 1 -1のポート0-0 <メインページ> 著作権 (c) <2010-2019> 、インテル株式会社 フラグ: ポート: P-----R ---------: 0 リンク状態: <UP-10000-FD> ---- TotalRate ---- Pkts/s Max/Rx : 1/0 1/0 Max/Tx : 0/0 0/0 MBits/s Rx/Tx : 0/0 0/0 放送: 0 マルチキャスト: 0 サイズ64 : 0 65-127 : 0 128-255 : 0 256-511 : 0 512-1023 : 0 1024-1518 : 0 Runts /ジャンボ: 2/0 ARP/ICMP Pkts : 2/0 エラーRx/Tx : 0/0 合計Rx Pkts : 2 Tx Pkts : 0 Rx MB: 0 Tx MB: 0 : パターンタイプ: abcd... Txカウント /% レート: 永遠 /100% Pktサイズ /Txバースト: 64 / 64 Port Src/Dest : 1234 / 5678 ID : IPv4 / UDP:0001 Pktタイプ: VLAN 802.1p CoS/DSCP/IPP : 0/ 0/ 0 VxLAN Flg/Grp/vid : 0000/ 0/ 0 IP宛先: 192.168.X.X ソース: 192.168.X.X/24 MAC宛先: 00:00:00:00:00:00 ソース: 00:XX:XX:24:9b:a4 PCIベンダー /Addr : 1af4:1000/00:08.0 -- Pktgen Ver: 3.6.5 (DPDK 18.11.11) Powered by DPDK (pid:4873) ------------ Pktgen:/>- Pktgenで次のコマンドを順番に実行して、ジェネレータのトラフィックを設定します。
を有効にするset 0 proto udp range 0 src mac start [$MAC] range 0 src mac min [$MAC] range 0 src mac inc 00:00:00:00:00:00 範囲0 dst macスタートee:ff:ff:ff:ff:ff:ff range 0 dst mac min ee:ff:ff:ff:ff:ff range 0 dst mac inc 00:00:00:00:00:00 range 0 srcポート开始10000 range 0 src port min 10000 range 0 src port max 10000 range 0 src port inc 0 范囲0 dstポート开始2000 範囲0 dstポート分2000 范囲0 dstポート最大2255 レンジ0 dstポートinc 1 範囲0 proto udp range 0 src ip start [$Local_IP] range 0 src ip min [$Local_IP] range 0 src ip inc 0.0.0.0 範囲0サイズ開始64 範囲0サイズ分64 範囲0サイズ最大64 範囲0サイズinc 0 range 0 dst ip start [$Receive_IP] range 0 dst ip min [$Receive_IP] range 0 dst ip inc 0.0.0.0 すべての範囲説明注:
- [$MAC] はジェネレータのMACアドレスです。
- [$Local_IP] はジェネレータのIPアドレスです。
- [$Receive_IP] は、受信者のIPアドレスです。
- Pktgenで次のコマンドを実行して、ジェネレータで送信プロセスを開始します。
トラフィックデータを表示します。start 0- 生成器
-iPorts 0-0 of 1 <メインページ> 著作権 (c) <2010-2019> 、Intel Corporation フラグ: ポート: P-----R --------:0 1/0 リンク状態: <UP-10000-FD> ---- TotalRate ---- Pkts/s Max/Rx : 1/0 1/0 Max/Tx : 14906304/14904704 14906304/14904704 MBits/s Rx/Tx : 0/10015 0/10015 放送: 0 マルチキャスト: 0 サイズ64 : 0 65-127 : 0 128-255 : 0 256-511 : 0 512-1023 : 0 1024-1518 : 0 Runts /ジャンボ: 16/0 ARP/ICMP Pkts : 16/0 エラーRx/Tx : 0/0 合計Rx Pkts : 16 Tx Pkts : 1655962864 - 受信機
-ポート0-0 of 1 <メインページ> 著作権 (c) <2010-2019> 、Intel Corporation フラグ: ポート: P ----------------: 0 リンク状態: <UP-10000-FD> ---- TotalRate ---- Pkts/s Max/Rx : 14911585/14910795 14911585/14910795 Max/Tx : 0/0 0/0 MBits/s Rx/Tx : 10020/0 10020/0 放送: 0 マルチキャスト: 0 サイズ64 : 1862740038 65-127 : 0 128-255 : 0 256-511 : 0 512-1023 : 0 1024-1518 : 0 Runts /ジャンボ: 6/0 ARP/ICMP Pkts : 6/0 エラーRx/Tx : 0/0 合計Rx Pkts : 2298743466 Tx Pkts : 0 Rx MB: 1544755 Tx MB: 0 : パターンタイプ: abcd... Txカウント /% レート: 永遠 /100% Pktサイズ /Txバースト: 64 / 64 Port Src/Dest : 1234 / 5678 ID : IPv4 / TCP:0001 Pktタイプ: VLAN 802.1p CoS/DSCP/IPP : 0/ 0/ 0 VxLAN Flg/Grp/vid : 0000/ 0/ 0 IP宛先: 192.168.X.1 ソース: 192.168.X.X/24 MAC宛先: 00:00:00:00:00:00 ソース: 00:XX:XX:24:2d:55 PCIベンダー /Addr : 1af4:1000/00:08.0 -- Pktgen Ver: 3.6.5 (DPDK 18.11.11) Powered by DPDK (pid:4072) ------------
- 生成器
- ジェネレータで次のコマンドを実行して、送信プロセスを停止します。
stop 0
適用範囲
- ECS