From: Yaroslav Brustinov Date: Tue, 11 Oct 2016 03:28:37 +0000 (+0300) Subject: stl 40G bench X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=2441faec09013a9b222a9b1c5d3e4f858e15817b;p=trex.git stl 40G bench --- diff --git a/images/128_nodrop.png b/images/128_nodrop.png new file mode 100755 index 00000000..e2a4c59a Binary files /dev/null and b/images/128_nodrop.png differ diff --git a/images/128_util.png b/images/128_util.png new file mode 100755 index 00000000..7dd7627e Binary files /dev/null and b/images/128_util.png differ diff --git a/images/1514_nodrop.png b/images/1514_nodrop.png new file mode 100755 index 00000000..34902725 Binary files /dev/null and b/images/1514_nodrop.png differ diff --git a/images/1514_util.png b/images/1514_util.png new file mode 100755 index 00000000..7ad7d4da Binary files /dev/null and b/images/1514_util.png differ diff --git a/images/590_nodrop.png b/images/590_nodrop.png new file mode 100755 index 00000000..569bb9e7 Binary files /dev/null and b/images/590_nodrop.png differ diff --git a/images/590_util.png b/images/590_util.png new file mode 100755 index 00000000..892caf0b Binary files /dev/null and b/images/590_util.png differ diff --git a/images/64_nodrop.png b/images/64_nodrop.png new file mode 100755 index 00000000..7dd7627e Binary files /dev/null and b/images/64_nodrop.png differ diff --git a/images/64_util.png b/images/64_util.png new file mode 100755 index 00000000..d3b6807e Binary files /dev/null and b/images/64_util.png differ diff --git a/images/icons/callouts/1.png b/images/icons/callouts/1.png index 7d473430..054ea07a 100755 Binary files a/images/icons/callouts/1.png and b/images/icons/callouts/1.png differ diff --git a/images/icons/callouts/10.png b/images/icons/callouts/10.png index 997bbc82..8833bd59 100755 Binary files a/images/icons/callouts/10.png and b/images/icons/callouts/10.png differ diff --git a/images/icons/callouts/11.png b/images/icons/callouts/11.png index ce47dac3..d77914d8 100755 Binary files a/images/icons/callouts/11.png and b/images/icons/callouts/11.png differ diff --git a/images/icons/callouts/12.png b/images/icons/callouts/12.png index 31daf4e2..ac9f8af7 100755 Binary files a/images/icons/callouts/12.png and b/images/icons/callouts/12.png differ diff --git a/images/icons/callouts/13.png b/images/icons/callouts/13.png index 14021a89..e5e62a1f 100755 Binary files a/images/icons/callouts/13.png and b/images/icons/callouts/13.png differ diff --git a/images/icons/callouts/14.png b/images/icons/callouts/14.png index 64014b75..f55ef966 100755 Binary files a/images/icons/callouts/14.png and b/images/icons/callouts/14.png differ diff --git a/images/icons/callouts/15.png b/images/icons/callouts/15.png index 0d65765f..fee9beda 100755 Binary files a/images/icons/callouts/15.png and b/images/icons/callouts/15.png differ diff --git a/images/icons/callouts/2.png b/images/icons/callouts/2.png index 5d09341b..b05ad9c7 100755 Binary files a/images/icons/callouts/2.png and b/images/icons/callouts/2.png differ diff --git a/images/icons/callouts/3.png b/images/icons/callouts/3.png index ef7b7004..9ce22b7d 100755 Binary files a/images/icons/callouts/3.png and b/images/icons/callouts/3.png differ diff --git a/images/icons/callouts/4.png b/images/icons/callouts/4.png index adb8364e..03d55928 100755 Binary files a/images/icons/callouts/4.png and b/images/icons/callouts/4.png differ diff --git a/images/icons/callouts/5.png b/images/icons/callouts/5.png index 4d7eb460..710b57cc 100755 Binary files a/images/icons/callouts/5.png and b/images/icons/callouts/5.png differ diff --git a/images/icons/callouts/6.png b/images/icons/callouts/6.png index 0ba694af..65ce9b91 100755 Binary files a/images/icons/callouts/6.png and b/images/icons/callouts/6.png differ diff --git a/images/icons/callouts/7.png b/images/icons/callouts/7.png index 472e96f8..07bc7f1c 100755 Binary files a/images/icons/callouts/7.png and b/images/icons/callouts/7.png differ diff --git a/images/icons/callouts/8.png b/images/icons/callouts/8.png index 5e60973c..fc640cab 100755 Binary files a/images/icons/callouts/8.png and b/images/icons/callouts/8.png differ diff --git a/images/icons/callouts/9.png b/images/icons/callouts/9.png index a0676d26..5bbc0ad9 100755 Binary files a/images/icons/callouts/9.png and b/images/icons/callouts/9.png differ diff --git a/trex_stateless.asciidoc b/trex_stateless.asciidoc index 0b6ad8f7..f3ae85b3 100755 --- a/trex_stateless.asciidoc +++ b/trex_stateless.asciidoc @@ -5,7 +5,7 @@ TRex Stateless support :revnumber: 2.01 :quotes.++: :numbered: -:web_server_url: http://trex-tgn.cisco.com/trex +:web_server_url: https://trex-tgn.cisco.com/trex :local_web_server_url: csi-wiki-01:8181/trex :github_stl_path: https://github.com/cisco-system-traffic-generator/trex-core/tree/master/scripts/stl :github_stl_examples_path: https://github.com/cisco-system-traffic-generator/trex-core/tree/master/scripts/automation/trex_control_plane/stl/examples @@ -4054,6 +4054,10 @@ The followig keyboard commands operate in the TUI window: + c - Clear all counters + d, s, l - change display between dashboard (d), streams (s) and l (latency) info. + +=== Benchmarks of 40G NICs + +link:trex_stateless_bench.html[TRex stateless benchmarks] + === Appendix ==== Scapy packet examples diff --git a/trex_stateless_bench.asciidoc b/trex_stateless_bench.asciidoc new file mode 100755 index 00000000..0ddcb35d --- /dev/null +++ b/trex_stateless_bench.asciidoc @@ -0,0 +1,149 @@ +TRex Stateless support +====================== +:email: trex.tgen@gmail.com +:quotes.++: +:numbered: +:web_server_url: https://trex-tgn.cisco.com/trex +:local_web_server_url: csi-wiki-01:8181/trex +:toclevels: 6 +:tabledef-default.subs: normal,callouts + +include::trex_ga.asciidoc[] + +// PDF version - image width variable +ifdef::backend-docbook[] +:p_width: 450 +endif::backend-docbook[] + +// HTML version - image width variable +ifdef::backend-xhtml11[] +:p_width: 800 +endif::backend-xhtml11[] + + +== TRex stateless L2 benchmarks using XL710 40G NICs + +=== Setup details + +[cols="1,5"] +|================= +| Server: | UCSC-C240-M4SX +| CPU: | 2 x Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz +| RAM: | 65536 @ 2133 MHz +| NICs: | 2 x Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 01) +| QSFP: | Cisco QSFP-H40G-AOC1M +| OS: | Fedora 18 +| Switch: | Cisco Nexus 3172 Chassis, System version: 6.0(2)U5(2). +| TRex: | v2.09 using 7 cores per dual interface. +|================= + +=== Topology + +TRex port 1 ↔ Switch port Eth1/50 (vlan 1005) ↔ Switch port Eth1/52 (vlan 1005) ↔ TRex port 2 + +=== Results + +.Cached VM +[cols="2,2^,2^,2^,2^,2^,2^,2^,3", options="header"] +|================= +| Packet size | Line Utilization (%) | Total L1 (Gb/s) | Total L2 (Gb/s) | CPU Util (%) | Total MPPS | BW per core (Gb/s) <1> | MPPS per core <2> | Multiplier +| Imix | 100.04 | 80.03 | 76.03 | 2.7 | 25.03 | 89.74 | 28.07 | 100% +| 1514 | 100.12 | 80.1 | 79.05 | 1.33 | 6.53 | 430.18 | 35.07 | 100% +| 590 | 99.36 | 79.49 | 76.89 | 3.2 | 16.29 | 177.43 | 36.36 | 99.5% +| 128 | 99.56 | 79.65 | 68.89 | 15.4 | 67.27 | 36.94 | 31.2 | 99.5% +| 64 | 52.8 | 42.3 | 32.23 | 14.1 | 62.95 | 21.43 | 31.89 | 31.5mpps +|================= + +.VM with 1 variable +[cols="2,2^,2^,2^,2^,2^,2^,2^,3", options="header"] +|================= +| Packet size | Line Utilization (%) | Total L1 (Gb/s) | Total L2 (Gb/s) | CPU Util (%) | Total MPPS | BW per core (Gb/s) <1> | MPPS per core <2> | Multiplier +| Imix | 100.04 | 80.03 | 76.03 | 12.6 | 25.03 | 45.37 | 14.19 | 100% +| 1514 | 100.12 | 80.1 | 79.05 | 2.6 | 6.53 | 220.05 | 17.94 | 100% +| 590 | 99.36 | 79.49 | 76.89 | 5.6 | 16.29 | 101.39 | 20.78 | 99.5% +| 128 | 99.56 | 79.65 | 68.89 | 33.1 | 67.27 | 17.19 | 14.52 | 99.5% +| 64 | 52.8 | 42.3 | 32.23 | 31.3 | 63.06 | 9.65 | 14.37 | 31.5mpps +|================= + +<1> Extrapolated L1 bandwidth per 1 core @ 100% CPU utilization. +<2> Extrapolated amount of MPPS per 1 core @ 100% CPU utilization. + +== Appendix + +=== Preparing setup and running the tests. + +==== Hardware preparations + +Order the UCS with HW described above. + +* There are several NICs with this chipset. + +Bare Intel NICs don't work with Cisco QSFP+ optics, for such case you will need Silicom NICs. +* Use NICs with 2x40G ports in each. +* Put the NICs at different NUMAs (first on the left side, second on the right side). + +==== Software preparations + +* Install the OS (Bare metal Linux, *not* VM!) +* Obtain the latest TRex package: wget https://trex-tgn.cisco.com/trex/release/latest +* Untar the package: tar -xzf latest +* Change dir to unzipped TRex +* Create config file using command: sudo python dpdk_setup_ports.py -i +** In case of Ubuntu 16 need python3 +** The script by default produces config for loopback or L2 Switch as DUT (ports connection 1↔2, 3↔4 etc.). + +If you have router or L3 switch, change the destination MACs of TRex interfaces to match the DUT one's. + +==== The tests + +* Run the TRex server: sudo ./t-rex-64 -i -c 7 +* In another shell run TRex console: trex-console +** The console can be run from another computer with -s argument, --help for more info. +** Other options for TRex client are automation or GUI +* In the console, run "tui" command, and then send the traffic with commands like: +** start -f stl/bench.py -m 50% --port 0 3 -t size=590,vm=var1 +** stop +** clear +** start -f stl/bench.py -m 30mpps --port 0 -t size=64,vm=cached +** start -f stl/bench.py -m 100% -t size=1514,vm=random --force + +=== Some of screenshots of console with commands + +==== 64 bytes + +Utilization: + +image:images/64_util.png[title="64 bytes util",align="left",width={p_width}, link="images/64_util.png"] + +No drops: + +image:images/64_nodrop.png[title="64 bytes no drops",align="left",width={p_width}, link="images/64_nodrop.png"] + +==== 128 bytes + +Utilization: + +image:images/128_util.png[title="128 bytes util",align="left",width={p_width}, link="images/128_util.png"] + +No drops: + +image:images/128_nodrop.png[title="128 bytes no drops",align="left",width={p_width}, link="images/128_nodrop.png"] + +==== 590 bytes + +Utilization: + +image:images/590_util.png[title="128 bytes util",align="left",width={p_width}, link="images/590_util.png"] + +No drops: + +image:images/590_nodrop.png[title="590 bytes no drops",align="left",width={p_width}, link="images/590_nodrop.png"] + +==== 1514 bytes + +Utilization: + +image:images/1514_util.png[title="128 bytes util",align="left",width={p_width}, link="images/1514_util.png"] + +No drops: + +image:images/1514_nodrop.png[title="1514 bytes no drops",align="left",width={p_width}, link="images/1514_nodrop.png"] + diff --git a/ws_main.py b/ws_main.py index 8b2f99b6..762bb7b2 100755 --- a/ws_main.py +++ b/ws_main.py @@ -908,6 +908,9 @@ def build(bld): bld(rule=convert_to_html_toc_book, source='trex_stateless.asciidoc waf.css', target='trex_stateless.html',scan=ascii_doc_scan); + bld(rule=convert_to_html_toc_book, + source='trex_stateless_bench.asciidoc waf.css', target='trex_stateless_bench.html',scan=ascii_doc_scan); + bld(rule=convert_to_html_toc_book, source='trex_book.asciidoc waf.css', target='trex_manual.html',scan=ascii_doc_scan);