cisco trexを使用したトカゲのnetwork打またはネットワーク負荷テスト





ネットワーク機器の負荷テストのトピックを何とかバイパスすることは慣習的であり、通常、非常に高価な特殊な鉄の文脈でさりげなく言及されます。 このオープンソース製品に関する情報をロシア語で見つけられなかったので、少しでも人気を得ることができます。 この記事では、ソフトウェアトラフィックジェネレーターを紹介するための小さなHOWTOについて説明します。



Cisco TREXは、高性能なトラフィックジェネレーターです。 その作業にはdpdkを使用します。 ハードウェア要件-64ビットアーキテクチャ、互換性のあるネットワークカード、* Fedora 18-20、64ビットカーネル(32ビットではない)* Ubuntu 14.04.1 LTS、64ビットカーネル(32ビットではない)でサポート 必要なドライバーを洗い流し、githubのリポジトリーにあるファイルからバージョンをコンパイルして、別のLinuxで実行できます。ここではすべてが標準です。



DPDK



データプレーン開発キット(DPDK)。当初はIntelによって開発され、オープンコミュニティに移行されました。

DPDKは、Intelアーキテクチャで実行されているアプリケーションでのパケット処理を高速化するライブラリとドライバーのセットを提供するフレームワークです。 DPDKは、AtomからXeonまでのIntelプロセッサーで、コアとプロセッサーの数を制限することなく、あらゆる容量でサポートされます。 現在、DPDKはx86以外のアーキテクチャ(IBM Power 8、ARMなど)にも移植されています。

技術的な詳細に入ることなく、DPDKはパケット処理からLinuxネットワークスタックを完全に排除します。 ユーザースペースで実行されているアプリケーションは、ハードウェアと直接通信します。

物理カードのサポートに加えて、準仮想化VMwareカード(VMXNET /

VMXNET3、VMware vSwitchを使用して接続)およびE1000(VMware / KVM / VirtualBox)。



展開する



trexをダウンロード、解凍、収集します。

WEB_URL=http://trex-tgn.cisco.com/trex #  csi-wiki-01:8181/trex (Cisco internal) mkdir trex cd trex wget --no-cache $WEB_URL/release/v2.05.tar.gz tar -xzvf v2.05.tar.gz cd v2.05 cd ko/src make make install cd -
      
      







テストを実行するインターフェイスをLinuxから引き出してdpdkの制御に転送する必要があります。そのためには、すべてのインターフェイスのPCI IDを表示するコマンドを実行する必要があります。

  $>sudo ./dpdk_setup_ports.py --s Network devices using DPDK-compatible driver ============================================ Network devices using kernel driver =================================== 0000:02:00.0 '82545EM Gigabit Ethernet Controller (Copper)' if=eth2 drv=e1000 unused=igb_uio *Active* 0000:03:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #1 0000:03:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #2 0000:13:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #3 0000:13:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #4 Other network devices =====================
      
      





次に、それらを構成ファイルに追加します。コピーすることをお勧めします。トレックスは、起動するたびに手動パスを指定する必要なく、自動的にそれを取得するためです。

 cp cfg/simple_cfg.yaml /etc/trex_cfg.yaml
      
      





ご覧のとおり、設定は現在人気のあるYAML形式で保存されており、今後はテスト設定ファイルも保存されます。 ポピーアドレスを設定することもお勧めします。

念のため、ファイルの外観の例:

  - port_limit : 2 version : 2 interfaces : ["03:00.0","03:00.1"] 2 port_info : # set eh mac addr - dest_mac : [0x1,0x0,0x0,0x1,0x0,0x00] # port 0 src_mac : [0x2,0x0,0x0,0x2,0x0,0x00] 1 - dest_mac : [0x2,0x0,0x0,0x2,0x0,0x00] # port 1 1 src_mac : [0x1,0x0,0x0,0x1,0x0,0x00
      
      





ポート0-src

ポート1-dst



すでに何かをロードしましょう



物理インターフェイスは、入出力スキームに従ってどこかに接続する必要があります。 1つのインターフェイスが別のインターフェイスにパケットを送信して受信します(実際、ジェネレーターは完全な正直なtcpセッションをエミュレートできますが、今ではそうではありません)



次のコマンドは、同じ方向に100秒間、DNS Ironにリクエストをロードするテストを実行します。ちなみに、テンプレートをすべてのインターフェイスで動作させる場合(このパッケージは両方向に行きます)、-pスイッチを追加できます

 sudo ./t-rex-64 -f cap2/dns.yaml -c 4 -m 1 -d 100 -l 1000
      
      





-cはプロセッサコアの数です。

-mは、各パケットテンプレートのcps乗数です。

-dはテスト時間です。

-l-待ち時間パケットの頻度(Hz)。多くのパラメーターは考慮されずに考慮されます。



この場合、出力にはこのようなものが含まれます(わずかに刺すような、最も興味深いものを選択する)

  -Global stats enabled Cpu Utilization : 0.0 % 29.7 Gb/core Platform_factor : 1.0 Total-Tx : 867.89 Kbps Total-Rx : 867.86 Kbps Total-PPS : 1.64 Kpps Total-CPS : 0.50 cps Expected-PPS : 2.00 pps 9 Expected-CPS : 1.00 cps 10 Expected-BPS : 1.36 Kbps 11 Active-flows : 0 6 Clients : 510 Socket-util : 0.0000 % Open-flows : 1 7 Servers : 254 Socket : 1 Socket/Clients : 0.0 drop-rate : 0.00 bps current time : 5.3 sec test duration : 94.7 sec
      
      





CPU使用率-スレッドの送信によるCPU負荷の平均値。 最高のパフォーマンスを得るには、80%未満に抑えることをお勧めします。

Total-Tx-送信インターフェースの合計速度(この場合はポート0)

Total-Rx-受信インターフェイス(この場合はポート1)の合計速度

Total-PPS-1秒あたりのパケット数、インターフェイス上のパケット数

Total-CPS-1秒あたりの接続数は、本質的に、このパラメーターは1秒あたりの構成ファイルで指定されているテンプレートの起動数を意味します。



Expected-PPS-1秒あたりの予想パケット数は、理論的にはcps *テンプレート内のパケット数になりがちです。

Expected-CPS-yamlテストファイルで指定されたcps。

Expected-BPS-総トラフィック、テンプレートサイズ* cps。



Active-flows-内部t-rexスレッドの数。 基本的に、このパラメーターはt-rexがフォローしているセッションの数です。 たとえば、30秒のセッション期間でpcapを使用してテストを実行する場合、このインジケーターは30 * Expected-CPSを目指す必要があります。



ネットワークを本当に「ロード」したい場合は、パターン係数を増やして-pを追加できます。

 sudo ./t-rex-64 -f cap2/dns.yaml -c 4 -m 9000 -d 100 -l 1000 -p
      
      





トラフィック(送信元アドレス)の多様性が重要な場合、同じIPを持つフローの数が増加します。その場合、構成ファイルのCPSを増やす必要があります。



テスト構成



cap2 / dns.yamlを検討してください。

 - duration : 10.0 generator : distribution : "seq" clients_start : "16.0.0.1" clients_end : "16.0.1.255" clients_end : "48.0.0.1" servers_end : "48.0.0.255" clients_per_gb : 201 min_clients : 101 dual_port_mask : "1.0.0.0" tcp_aging : 1 udp_aging : 1 mac : [0x00,0x00,0x00,0x01,0x00,0x00] #vlan : { enable : 1 , vlan0 : 100 , vlan1 : 200 } #mac_override_by_ip : true cap_info : - name: cap2/dns.pcap cps : 1.0 ipg : 10000 rtt : 10000 w : 1
      
      





clients_start-clients_end-rscアドレスの範囲。

clients_start-clients_end-dstアドレスの範囲。



-name:cap2 / dns.pcap -pcapファイルをshablonとして使用するように設定します。

cps-1秒あたりの接続数。テンプレートから同時に実行されているスレッドの数に本質的に等しくなります。 つまり テストでアドレスが増加し、cps:10の場合、異なるアドレスを持つ10個のスレッドが同時に起動されます。

ipg-rttと同じである必要があります。



一般に、tirexのロジックは次のようになります。IPアドレスの全範囲を通過し、各反復でdstアドレスとsrcアドレスを変更し、それらが終了すると、サイクルはポートの増分で64k回繰り返されます。



NATのテスト



深刻なtsiskaの人たちは非常に重要な機能を実装し、ジェネレーターが正直なtcpセッションを作成して監視できるようにしました。 たとえば、インターフェイス間にNATがある場合、「we have nat」と言うことができ、ブロードキャスト検出でトラフィックが考慮されます。

合計で3つのモードがあります。

モード1このモードはTCPでのみ機能します。 最初のSYNに付属するACKを見て、学習します。 これは誠実な体制です。

モード2 IPオプションで動作します。

モード3モード1として機能しますが、サーバー上のシーケンス番号をクライアント側に教えません。 最初のモードに比べてcpsが増加する場合があります。



 sudo ./t-rex-64 -f cap2/http_simple.yaml -c 4 -l 1000 -d 100000 -m 30 --learn-mode 1 -Global stats enabled Cpu Utilization : 0.1 % 13.4 Gb/core Platform_factor : 1.0 Total-Tx : 24.12 Mbps Nat_time_out : 0 Total-Rx : 24.09 Mbps Nat_no_fid : 0 Total-PPS : 5.08 Kpps Total_nat_active: 1 Total-CPS : 83.31 cps Total_nat_open : 1508 Expected-PPS : 3.08 Kpps Expected-CPS : 83.28 cps Expected-BPS : 22.94 Mbps Active-flows : 11 Clients : 252 Socket-util : 0.0001 % Open-flows : 1508 Servers : 65532 Socket : 11 Socket/Clients : 0.0 drop-rate : 0.00 bps current time : 18.7 sec test duration : 99981.3 sec
      
      





Nat_time_out-ゼロが必要です。これは、何らかの理由でtirexが追跡できなかったスレッドの数で、通常はパケットがどこかでドロップした場合に発生します。

Nat_no_fid-ゼロである必要があります。通常、テスト対象の機器内でタ​​イムアウトが長すぎる場合に発生します。

Total_nat_active:アクティブなスレッドの数は、rttを低くして低くする必要があります。

Total_nat_open:スレッドの総数は、単方向パターンで異なる場合があります。



実際、指定しなかった別の重要なパラメーターがあります-l-pkt-modeは、レイテンシーを測定するパケットのタイプを示すためにこのことを必要とします。- lスイッチは、それを参照します。レイテンシー open-flowsタイプのパラメーターは影響を受けません。

0 (デフォルト)SCTPパケット。

両側に1 ICMP。

2ステートフル、一方でICMPを送信し、他方でそれらを照合します。 このオプションは、機器が外部からパッケージを落とす場合に意味があります。

3は常に0のシーケンス番号でICMPパケットを送信します。



終わり。



次回興味がある場合は、バージョン2.06の変更について説明します。

プロジェクトをテストするためにこのジェネレーターを検討することを強くお勧めします。これは気取らず、手頃な価格で、最も重要なのはオープンソースです。



ソース



trex-tgn.cisco.com/trex/doc

sdnblog.ru/what-is-intel-dpdk

github.com/cisco-system-traffic-generator/trex-core



All Articles