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

:Pktgenを使用したECSインスタンスのネットワークパフォーマンスのテスト

最終更新日:Jan 23, 2025

説明

免責事項: この記事には、サードパーティ製品に関する情報が含まれている場合があります。 そのような情報は参照だけのためです。 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: ソフトウェアのインストール

ジェネレータとレシーバの両方で次の操作を実行します。

  1. Linuxインスタンスにログインします。 Linuxインスタンスへのログイン方法の詳細については、「ユーザー名とパスワードを使用したLinuxインスタンスへの接続」をご参照ください。
  2. 次のコマンドを実行して、pktgenディレクトリを作成します。
    mkdir pktgen
  3. 次のコマンドを実行してpktgenディレクトリに移動します。
    cd pktgen
  4. 次のコマンドを実行して、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のバージョンは、互いに互換性がある必要があります。 そうしないと、コンパイルエラーが発生する可能性があります。 このトピックでは、上記のコマンドのバージョンを使用します。 他のバージョンのインストールパッケージを使用する前に、バージョンが互いに互換性があることを確認してください。

  5. 次のコマンドを順番に実行して、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 
  6. コンパイルプロセス中にいくつかの依存関係が見つからない場合は、次のコマンドを実行して対応するインストールパッケージをインストールします。
    • 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
      をインストールする
  7. 次のコマンドを順番に実行して、Pktgenをコンパイルしてインストールします。
    dpdk-stable-18.11.11
    make config T=x86_64-native-linuxapp-gcc
    make all -j32 
  8. 次のコマンドを順番に実行して、Luaをコンパイルしてインストールします。
    cd lua-5.4.3
    作る
    インストールする 
  9. 次のコマンドを順番に実行して、DPDKをコンパイルしてインストールします。
    cd pktgen-dpdk-pktgen-3.6.5 /
     エクスポートRTE_SDK=/root/pktgen/dpdk-stable-18.11.11 /
    エクスポートRTE_TARGET=build
    make -j32 

ステップ3: ドライバをVFIOにバインド

ジェネレータとレシーバの両方で次の操作を実行します。

  1. /proc/cmdlineファイルを表示し、BOOT_IMAGEで始まる行にintel_iommu=onパラメーターが含まれているかどうかを確認します。 行にintel_iommu=onパラメーターが含まれていない場合は、/etc/default/grubファイルを編集し、intel_iommu=onパラメーターをGRUB_CMDLINE_LINUXで始まる行に追加してから、ECSインスタンスを再起動します。
  2. 次のコマンドを順番に実行して、仮想ファンクションI/O (VFIO) およびVFIO-PCIドライバーをインストールします:
    modprobe vfio
    
    modprobe vfio-pci 
  3. 次のコマンドを実行してnoniommu_modeを設定します。
    echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
  4. 次のコマンドを実行して、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 
  5. 次のコマンドを実行して、eth1からvirtioドライバーのバインドを解除します。
    echo "[$Bus-info]" > /sys/bus/pci/drivers/virtio-pci/unbind
    説明

    注: [$Bus-info] は、前の手順で取得したNICのbus-info値です。

  6. 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

ジェネレータとレシーバの両方で次の操作を実行します。

  1. 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"
    説明

    注:

    • 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のために停止するかもしれません。

    以下のものと同様のコマンド出力は、Pktgenが開始されたことを示す。Copyright (c) <2010 − 2019> 、Intel Corporation。
     全著作権所有。 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:/> 
  2. 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アドレスです。

  3. 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) ------------ 
  4. ジェネレータで次のコマンドを実行して、送信プロセスを停止します。
    stop 0

適用範囲

  • ECS