User Tools

Site Tools


documentation:examples:forwarding_performance_lab_of_an_ibm_system_x3550_m3_with_10-gigabit_intel_x540-at2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

documentation:examples:forwarding_performance_lab_of_an_ibm_system_x3550_m3_with_10-gigabit_intel_x540-at2 [2015/07/03 22:20] (current)
Line 1: Line 1:
 +====== Forwarding performance lab of an IBM System x3550 M3 with 10-Gigabit Intel X540-AT2 ======
 +{{description>Forwarding performance lab of a quad cores Xeon 2.13GHz and dual-port 10-Gigabit Intel X540-AT2}}
  
 +===== Hardware detail =====
 +
 +This lab will test an [[IBM System x3550 M3]] with **quad** cores (Intel Xeon L5630 2.13GHz, hyper-threading disabled) and a dual port Intel 10-Gigabit X540-AT2 connected to the PCI-Express Bus.
 +
 +===== Lab set-up =====
 +
 +The lab is detailed here: [[documentation:examples:Setting up a forwarding performance benchmark lab]].
 +
 +BSDRP-amd64 v1.51 (FreeBSD 10.0-BETA2 with autotune mbuf patch) is used on the DUT.
 +==== Diagram ====
 +
 +<code>
 ++-----------------------------------+      +----------------------------------+
 +|   Packet generator and receiver        |         Device under Test        |
 +|                                        |                                  |
 +| ix0: 8.8.8.1 (a0:36:9f:1e:1e:d8)  |=====>| ix0: 8.8.8.2 (a0:36:9f:1e:28:14) |
 +|      2001:db8:8::               |      |      2001:db8:8::              |
 +|                                        |                                  |
 +| ix1: 9.9.9.1 (a0:36:9f:1e:1e:da)  |<=====| ix1: 9.9.9.2 (a0:36:9f:1e:28:16) |
 +|      2001:db8:9::               |      |      2001:db8:9::              |
 +|                                        |                                  |
 +|                                        |        static routes             |
 +|                                        |      8.0.0.0/8 => 8.8.8.1        |
 +|                                        |      9.0.0.0/8 => 9.9.9.1        |
 +|                                        | 2001:db8:8:://48 =>2001:db8:8::1 |
 +|                                        | 2001:db8:9:://48 =>2001:db8:9::1 |
 ++-----------------------------------+      +----------------------------------+
 +</code>
 +
 +The generator **MUST** generate lot's of smallest IP flows (multiple source/destination IP¬†addresses and/or UDP src/dst port).
 +
 +Here is an example for generating 2000 flows (100 different source IP * 20 different destination IP):
 +<code>
 +pkt-gen -i ix0 -f tx -n 1000000000 -l 60 -d 9.1.1.1:2000-9.1.1.100 -D a0:36:9f:1e:28:14 -s 8.1.1.1:2000-8.1.1.20 -w 4
 +</code>
 +
 +<note warning>
 +Netmap disable hardware checksum on Intel NIC, you need to use a FreeBSD -head with svn revision of 257758 minimum with the[[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=187149|pkt-gen software-checksum patch]] for using multiple src/dst IP or port with netmap's pkt-gen.
 +</note>
 +Receiver will use this command:
 +<code>
 +pkt-gen -i ix1 -f rx -w 4
 +</code>
 +===== Basic configuration =====
 +
 +==== Disabling Ethernet flow-control ===
 +
 +First, disable Ethernet flow-control on both servers:
 +<code>
 +echo "dev.ix.0.fc=0" >> /etc/sysctl.conf
 +echo "dev.ix.1.fc=0" >> /etc/sysctl.conf
 +</code>
 +
 +==== Disabling LRO and TSO ====
 +
 +A router [[Documentation:Technical docs:Performance|should not use LRO and TSO]]. BSDRP disable by default using a RC script (disablelrotso_enable="YES" in /etc/rc.conf.misc).
 +
 +But on a standard FreeBSD:
 +<code>
 +ifconfig ix0 -tso4 -tso6 -lro
 +ifconfig ix1 -tso4 -tso6 -lro
 +</code>
 +==== Static routes and ARP entries on R2 ==== 
 +
 +Configure static routes:
 +<code>
 +sysrc static_routes="generator receiver"
 +sysrc route_generator="-net 8.0.0.0/8 8.8.8.1"
 +sysrc route_receiver="-net 9.0.0.0/8 9.9.9.1"
 +sysrc ipv6_static_routes="generator6 receiver6"
 +sysrc ipv6_route_generator6="2001:db8:8:: -prefixlen 48 2001:db8:8::1"
 +sysrc ipv6_route_receiver6="2001:db8:9:: -prefixlen 48 2001:db8:9::1"
 +</code>
 +
 +And configure IP and static ARP:
 +<code>
 +sysrc ifconfig_ix0="inet 8.8.8.2/24"
 +sysrc ifconfig_ix0_ipv6: inet6 2001:db8:8::2/64"
 +sysrc ifconfig_ix1="inet 9.9.9.2/24"
 +sysrc ifconfig_ix1_ipv6="inet6 2001:db8:9::2/64"
 +sysrc static_arp_pairs="receiver generator"
 +sysrc static_arp_generator="8.8.8.1 a0:36:9f:1e:1e:d8"
 +sysrc static_arp_receiver="9.9.9.1 a0:36:9f:1e:1e:da"
 +</code>
 +
 +===== Default fast-forwarding speed =====
 +
 +With the default parameters, on multi-flow traffic generated at 11.2Mpps (Still not the maximum rate for TenGigaEthernet), only 1.9Mpps are correctly fastforwarded (net.inet.ip.fastforwarding=1) :
 +
 +<code>
 +[root@BSDRP]~# netstat -i -w 1
 +            input        (Total)           output
 +   packets  errs idrops      bytes    packets  errs      bytes colls
 +   1931633     0 9558401  735323650    1971679      126647094     0
 +   2049258     0 9516754  740226434    1965107      125766966     0
 +   1946547     0 9692656  744907458    1965995      124906742     0
 +   1913194     0 9440293  726623426    1970761      127045814     0
 +   1924563     0 9592938  737119810    1934317      123369462     0
 +   2001106     0 9424437  731234754    1996780      127781814     0
 +   1896250     0 9379690  721660098    1924252      123591286     0
 +   2038251     0 9705660  751610370    2019568      129251638     0
 +   1982645     0 9534029  737066690    1935758      123888758     0
 +   1974464     0 9391036  727392450    1934258      123793014     0
 +   2056212     0 9616053  747024962    2008803      128251766     0
 +   1884989     0 9545113  731526594    1961394      125841590     0
 +</code>
 +
 +The traffic is correctly load-balanced between NIC-queue/CPU binding:
 +
 +<code>
 +[root@BSDRP]~# vmstat -i | grep ix
 +irq258: ix0:que 0                9046464       3558
 +irq259: ix0:que 1                1923385        756
 +irq260: ix0:que 2                2926703       1151
 +irq261: ix0:que 3                2911272       1145
 +irq262: ix0:link                      80          0
 +irq263: ix1:que 0               16871267       6637
 +irq264: ix1:que 1               16992617       6684
 +irq265: ix1:que 2               16634663       6543
 +irq266: ix1:que 3               18708007       7359
 +irq267: ix1:link                    4618          1
 +
 +[root@BSDRP]~# top -nCHSIzs1
 +last pid:  3483;  load averages:  7.77,  7.75,  6.52  up 0+00:42:45    16:33:41
 +156 processes: 13 running, 97 sleeping, 46 waiting
 +
 +Mem: 14M Active, 10M Inact, 553M Wired, 9856K Buf, 15G Free
 +Swap:
 +
 +
 +  PID USERNAME PRI NICE   SIZE    RES STATE     TIME     CPU COMMAND
 +   11 root     -92    -     0K   816K WAIT    0  12:32  50.20% intr{irq258: ix0:que }
 +   11 root     -92    -     0K   816K CPU3    3  12:01  48.29% intr{irq261: ix0:que }
 +   11 root     -92    -     0K   816K WAIT    2  11:33  47.46% intr{irq260: ix0:que }
 +    0 root     -92    0     0K   560K CPU1    1  11:27  46.97% kernel{ix0 que}
 +   11 root     -92    -     0K   816K CPU1    1  11:23  46.88% intr{irq259: ix0:que }
 +    0 root     -92    0     0K   560K CPU0    0  11:15  46.58% kernel{ix0 que}
 +    0 root     -92    0     0K   560K CPU2    2  11:19  45.26% kernel{ix0 que}
 +    0 root     -92    0     0K   560K -        10:12  41.80% kernel{ix0 que}
 +   11 root     -92    -     0K   816K RUN       1:05   4.49% intr{irq263: ix1:que }
 +   11 root     -92    -     0K   816K WAIT    2   1:06   4.05% intr{irq265: ix1:que }
 +   11 root     -92    -     0K   816K RUN       1:07   3.76% intr{irq266: ix1:que }
 +   11 root     -92    -     0K   816K RUN       1:04   3.76% intr{irq264: ix1:que }
 +
 +</code>
 +
 +===== ixgbe(4) tunning ====
 +
 +=== rx_process_limit and tx_process_limit ===
 +
 +What are the impact of modifying these limit on PPS?
 +
 +<code>
 +x [r|t]x_process_limit=256(default)
 ++ [r|t]x_process_limit=512
 +* [r|t]x_process_limit=-1(nolimit)
 ++--------------------------------------------------------------------------------+
 +|*   ++ * x+                x                          *    * *               *|
 +||______M__A_________|                                                           |
 +|  |__A___|                                                                      |
 +|                                                      |______M__A________|      |
 ++--------------------------------------------------------------------------------+
 +    N           Min           Max        Median           Avg        Stddev
 +x         1656772       1786725       1690620     1704710.4     48677.407
 ++         1657620       1703418       1679787     1681153.8     17459.489
 +No difference proven at 95.0% confidence
 +*         1918159       2036665       1950208       1963257     44988.621
 +Difference at 95.0% confidence
 +        258547 +/- 68356.2
 +        15.1666% +/- 4.00984%
 +        (Student's t, pooled s = 46869.3)
 +</code>
 +
 +=== hw.ix.rxd and hw.ix.txd ===
 +
 +What are the impact of modifying these limit on PPS?
 +
 +<code>
 +x hw.ix.[r|t]xd=1024
 ++ hw.ix.[r|t]xd=2048
 +* hw.ix.[r|t]xd=4096
 ++--------------------------------------------------------------------------------+
 +|+  *                          *        +x     ** *              x      x  |
 +|                                      |____________________A________M__________||
 +|         |______________________M__A__________________________|                 |
 +|                    |_____________________A______M_______________|              |
 ++--------------------------------------------------------------------------------+
 +    N           Min           Max        Median           Avg        Stddev
 +x         1937832       2018222       2002526     1985231.6     35961.532
 ++         1881470       2011917       1937898     1943572.2     46782.722
 +No difference proven at 95.0% confidence
 +*         1886620       1989850       1968491       1956497     40190.155
 +No difference proven at 95.0% confidence
 +</code>
 +
 +=> No difference
 +
 +===== Firewall impact =====
 +
 +One rule for each firewall and 2000 UDP "sessions", more information on the [[documentation:examples:forwarding_performance_lab_of_an_ibm_system_x3550_m3_with_intel_82580#firewall_impact|GigaEthernet performance lab]].
 +==== Graphs ====
 +
 +{{documentation:examples:bench.impact.of.ipfw-pf.tengig.png|Impact of ipfw and pf on 4 cores Xeon 2.13GHz with 10-Gigabit Intel X540-AT2}}
 +
 +Some translation of pps to throughput using [[https://en.wikipedia.org/wiki/Internet_Mix|IMIX distribution]]:
 +| pps | Estimated Ethernet IMIX throughput |
 +| 1817242 | 5 Gb/s |
 +| 1228265 | 3,48 Gb/s |
 +Formula used: PPS * ( 7*(40+14) + 4*(576+14) + (1500+14) )/12*8
 +==== Ministat ====
 +
 +<code>
 +x pps.fastforwarding
 ++ pps.ipfw-statefull
 +* pps.ipfw-stateless
 +% pps.pf-statefull
 +# pps.pf-stateless
 ++--------------------------------------------------------------------------------------------------+
 +|#       %#      #     ##%+  %%  +++    +         ** **                             x x      xx   x|
 +|                                                                                    |_____A_M___| |
 +|                            |____A____|                                                           |
 +|                                                 |MA_|                                            |
 +|              |_______A_M______|                                                                  |
 +|     |________A_M_______|                                                                         |
 ++--------------------------------------------------------------------------------------------------+
 +    N           Min           Max        Median           Avg        Stddev
 +x         1757512       1878484       1831427     1817242.2     50508.309
 ++         1252803       1375092       1317166     1317730.8     43593.803
 +Difference at 95.0% confidence
 +        -499511 +/- 68806.3
 +        -27.4873% +/- 3.7863%
 +        (Student's t, pooled s = 47177.9)
 +*         1459371       1499079       1472287       1475569     15847.379
 +Difference at 95.0% confidence
 +        -341673 +/- 54591.6
 +        -18.8017% +/- 3.00409%
 +        (Student's t, pooled s = 37431.5)
 +%         1102319       1287297       1243125     1228264.6     74117.825
 +Difference at 95.0% confidence
 +        -588978 +/- 92496.4
 +        -32.4105% +/- 5.08993%
 +        (Student's t, pooled s = 63421.4)
 +#         1033602       1237700       1177189     1158090.8      84687.18
 +Difference at 95.0% confidence
 +        -659151 +/- 101689
 +        -36.2721% +/- 5.5958%
 +        (Student's t, pooled s = 69724.5)
 +</code>
documentation/examples/forwarding_performance_lab_of_an_ibm_system_x3550_m3_with_10-gigabit_intel_x540-at2.txt · Last modified: 2015/07/03 22:20 (external edit)