Commoditizing 10/25/40/100 Gbit with PF_RING ZC on Intel FM10K

Posted · Add Comment

As you know we’re working at 100 Gbit for a while, not just in terms of network speed, but also in terms of redesigning existing applications for being more efficient and powerful (BTW stay tuned as very soon we will introduce nProbe Cento). With the introduction of the new Intel FM10K ethernet controller family, it is now possible to support 10/25/40/100 Gbit using one single NIC (just replace QSFP+ to change network speed) on a product that is in the 1k USD range for dual port. Another major feature of this product is the embedded programmable ethernet switch that can be used to filter/load balance/tap traffic using up to 16k rules. In essence a dual port NIC has two external ethernet ports (where you plug the ethernet cables) connected to the two internal ports (those you see with ifconfig on Linux) via the programmable switch. This way you can reduce the amount of traffic that hits the internal ports and cross connect selected traffic to the external ethernet ports.

This said, we have added support for the FM10K in PF_RING ZC, the code is available on github so that you can start playing with it while we are still optimising it. We have run some experiments on a FM10420-based NIC provided courtesy of Silicom using 40 Gbit direct-attached-cables connected to an Intel XL710, using a low-end Supermicro server based on an Intel E3-1230 v3 @ 3.30GHz.

  • RX – 60-byte – 1 queue
    Actual Stats: [16’632’029 pkts rcvd][1’000.05 ms][16’631’031.13 pps][11.18 Gbps]
  • RX 1500-byte (no drop – 40G traffic generator based on XL710 is the limit) – 1 queue
    Actual Stats: [3’146’534 pkts rcvd][1’000.08 ms][3’146’272.85 pps][38.36 Gbps]
  • TX 60-byte – 1 queue
    TX rate: [current 19’076’813.77 pps/12.82 Gbps][average 18’945’661.37 pps/12.73 Gbps]
  • TX 1500-byte (E3 memory bandwidth is the limit) – 1 queue
    TX rate: [current 4’444’398.66 pps/54.19 Gbps][average 4’377’213.40 pps/53.37 Gbps]

The experiments confirmed that with one RSS queue it is possible to handle more than 10 Gbit with minimal size packets so that with 4 queues we can do 40 Gbit line rate. The embedded ethernet switch has been programmed (with a command line tool) to allow external traffic to hit the internal ports, but as you can see from results we have managed to generate ~53 Gbit of traffic that of course won’t fully hit the external ports running at 40 Gbit.

These results are preliminary (apparently the Intel drivers do not fully support all features such as jumbo frames for instance), but we’ve been used for some weeks and it is working reliably. Used at 40 Gbit this new product is better than XL710. We’re now working at integrating the ethernet switch onto PF_RING so that apps can drive it directly and thus fully benefit of this product.

If you are planning to monitor 10/25/40/100 Gbit networks, it’s definitively time to try out this new ZC driver and provide us feedback. Enjoy!

PS. If you are wondering if you can run ntopng/nprobe/n2disk/zsend/zcount at 100 Gbit, the answer is yes.