The tests below compare NAPI-enabled versions of the e1000 driver. I backported them from various versions of 2.5 linux kernels to 2.4.20. The machine tested was a 2-way Pentium IV Xeon 1.80 GHz machine, running on a SuperMicro motherboard based on the Intel e7500 Plumas chipset. Two e1000 cards were used, each in a 64-bit, 133MHz PCI slot. One card was a 82545EM, the other a 82546EB dual-port card.

The test setup used a Spirent Smartbits 2000 network device tester with two gigabit-over-copper test cards. The Smartbits works by generating traffic on one port and measuring precisely how much is received on the other card. This is done in full duplex mode, with each test card both generating and receiving traffic. The two smartbits test cards were attached via crossover cables to the two e1000 nics, which were configured as a linux ethernet bridge.

All e1000 interrupts are bound to CPU 0 in these tests. Past testing has shown this to perform best on NAPI kernels.

At high loads, 5.0.43 had lots of "NETDEV WATCHDOG: eth3: transmit timed out" messages. No other driver did this.

The axes on these graphs are measured in total packets per second for both flows.

In the first set of tests below, RxDescriptors and TxDescriptors are both set to 80, even in 5.0.43 (which defaults to 256). Flow control is turned off for all cards using "FlowControl=0,0,0,0". All other settings are left at their defaults.

  • Jason Lunz <lunz@gtf.org>

    This last graph plots all three on the same set of axes. It shows that performance is affected primarily by frame rate, and only slightly affected by packet size.


    The next set of tests compares modifications to the 5.0.43-k1 driver from linux 2.5.66. ro1 and ro2 from Robert Olsson go back to the 4.4.x method of disabling interrupts when entering poll mode. ro3 applies his e1000_pci_2.pat on top of ro2. Its goal is to minimize PCI reads/writes.

    -sf1 is a bugfix to the original 5.0.43-k1 driver. Its intent is to use the e1000's dynamic hardware interrupt throttling to limit interrupts, thus saving the pci traffic associated with enabling and disabling interrupts when switching into polling mode.

    Since these tests all use the 5.0.43 driver, they all return to using the default settings for RxDescriptors and TxDescriptors. FlowControl is still disabled.

    Notice that disabling XsumRX only gives an improvement in conjunction with the reduced-pci-traffic patch. XsumRX=0 makes sense for this test workload because it's only bridging the traffic; the IP stack isn't involved.