Nehalem network performance
Kelvin Ku
kelvin at telemetry-investments.com
Wed Jan 27 15:49:53 UTC 2010
On Wed, Jan 27, 2010 at 09:01:53AM +0200, Gilboa Davara wrote:
> On Tue, 2010-01-26 at 19:07 -0500, Kelvin Ku wrote:
> > We recently purchased our first Nehalem-based system with a single Xeon E5530
> > CPU. We were unable to boot FC6 on it and are trying to upgrade our network to
> > F11/F12 anyway, so we installed F11 on it.
> >
> > Our existing hardware includes Xeon 5100- and 5400-series CPUs running mainly
> > FC6 (2.6.22), except for a single Xeon 5150 system running F11. Our target
> > application consumes multicast data during business hours and has been dropping
> > packets more frequently on the new hardware/OS combination than on our older
> > systems. I've tried using the on-board Intel 82574L dual-port NIC (e1000e
> > driver) and a discrete Intel 82576 dual-port NIC (igb driver). Counters for the
> > NIC, socket layer, and switch don't show any dropped packets.
> >
> > My question is this: has anyone experienced performance degradation running a
> > UDP-consuming application after moving to a Nehalem-based system? We have yet
> > to identify whether the culprit is the hardware, the OS, or the combination of
> > the two. However, note that our app works fine on the 5150 system running F11
> > that I mentioned above.
> >
> > Likewise, if you've migrated such an app to a Nehalem system and had to make
> > adjustments to get it to work as before, I'd like to hear from you too.
> >
> > Thanks,
> > Kelvin Ku
>
> Please post the output of:
> $ cat /proc/interrupts | grep eth
We rename our interfaces to lan:
$ grep lan /proc/interrupts
61: 1 0 0 0 PCI-MSI-edge lan0
62: 7194004 0 0 0 PCI-MSI-edge lan0-TxRx-0
63: 0 1 0 0 PCI-MSI-edge lan1
64: 0 0 49842410 0 PCI-MSI-edge lan1-TxRx-0
$ pgrep irqbalance
$
Note that irqbalance is disabled. I found that it wasn't balancing IRQs like on
our older machines. I note that the irqbalance docs say that NIC interrupts
should not be balanced, which is what we're seeing whether irqbalance is running or not.
> $ ethtool -S ethX
lan0 (LAN interface):
NIC statistics:
rx_packets: 7429553
tx_packets: 85327
rx_bytes: 9752917197
tx_bytes: 66766666
rx_broadcast: 7386732
tx_broadcast: 8610
rx_multicast: 0
tx_multicast: 42
rx_errors: 0
tx_errors: 0
tx_dropped: 0
multicast: 0
collisions: 0
rx_length_errors: 0
rx_over_errors: 0
rx_crc_errors: 0
rx_frame_errors: 0
rx_no_buffer_count: 0
rx_missed_errors: 0
tx_aborted_errors: 0
tx_carrier_errors: 0
tx_fifo_errors: 0
tx_heartbeat_errors: 0
tx_window_errors: 0
tx_abort_late_coll: 0
tx_deferred_ok: 0
tx_single_coll_ok: 0
tx_multi_coll_ok: 0
tx_timeout_count: 0
tx_restart_queue: 0
rx_long_length_errors: 0
rx_short_length_errors: 0
rx_align_errors: 0
tx_tcp_seg_good: 6893
tx_tcp_seg_failed: 0
rx_flow_control_xon: 0
rx_flow_control_xoff: 0
tx_flow_control_xon: 0
tx_flow_control_xoff: 0
rx_long_byte_count: 9752917197
rx_csum_offload_good: 7429553
rx_csum_offload_errors: 0
tx_dma_out_of_sync: 0
alloc_rx_buff_failed: 1487
tx_smbus: 0
rx_smbus: 0
dropped_smbus: 0
tx_queue_0_packets: 85327
tx_queue_0_bytes: 65978674
rx_queue_0_packets: 7429553
rx_queue_0_bytes: 9693480773
lan1 (multicast interface) is below. Note that rx_missed_errors is non-zero. I
previously encountered this with the e1000e NIC after disabling cpuspeed, which
was throttling the CPUs to 1.6 GHz (from a maximum of 2.4 GHz). I attempted to
remedy this by setting InterruptThrottleRate=0,0 in the e1000e driver, after
which we had one full day of testing with zero rx_missed_errors, but the
application still reported packet loss.
Today is the first day of testing with the igb NIC since I disabled cpuspeed. The igb driver is also running with InterruptThrottleRate=0,0.
NIC statistics:
rx_packets: 54874782
tx_packets: 161
rx_bytes: 35581821239
tx_bytes: 18479
rx_broadcast: 10
tx_broadcast: 25
rx_multicast: 54874635
tx_multicast: 16
rx_errors: 0
tx_errors: 0
tx_dropped: 0
multicast: 54874635
collisions: 0
rx_length_errors: 0
rx_over_errors: 0
rx_crc_errors: 0
rx_frame_errors: 0
rx_no_buffer_count: 1
rx_missed_errors: 22192
tx_aborted_errors: 0
tx_carrier_errors: 0
tx_fifo_errors: 0
tx_heartbeat_errors: 0
tx_window_errors: 0
tx_abort_late_coll: 0
tx_deferred_ok: 0
tx_single_coll_ok: 0
tx_multi_coll_ok: 0
tx_timeout_count: 0
tx_restart_queue: 0
rx_long_length_errors: 0
rx_short_length_errors: 0
rx_align_errors: 0
tx_tcp_seg_good: 0
tx_tcp_seg_failed: 0
rx_flow_control_xon: 0
rx_flow_control_xoff: 0
tx_flow_control_xon: 0
tx_flow_control_xoff: 0
rx_long_byte_count: 35581821239
rx_csum_offload_good: 54874782
rx_csum_offload_errors: 0
tx_dma_out_of_sync: 0
alloc_rx_buff_failed: 9598
tx_smbus: 0
rx_smbus: 0
dropped_smbus: 0
tx_queue_0_packets: 161
tx_queue_0_bytes: 17013
rx_queue_0_packets: 54874783
rx_queue_0_bytes: 35362322772
>
> Which board are you using?
Supermicro X8DTL-iF
> Have you enabled hyper-threading?
It is currently disabled.
> Have you disabled IO vt-d?
This is disabled by default in the BIOS. I'll double-check the setting later
today.
> In which slot did you installed the igb card?
The slot is PCIe x16. The NIC itself is x4.
> Have you tried enabling pci=msi in your kernel's command line?
No. Do I need to do this? MSI seems to be enabled:
$ dmesg | grep -i msi
pcieport-driver 0000:00:01.0: irq 48 for MSI/MSI-X
pcieport-driver 0000:00:03.0: irq 49 for MSI/MSI-X
pcieport-driver 0000:00:07.0: irq 50 for MSI/MSI-X
pcieport-driver 0000:00:09.0: irq 51 for MSI/MSI-X
pcieport-driver 0000:00:1c.0: irq 52 for MSI/MSI-X
pcieport-driver 0000:00:1c.4: irq 53 for MSI/MSI-X
pcieport-driver 0000:00:1c.5: irq 54 for MSI/MSI-X
e1000e 0000:06:00.0: irq 55 for MSI/MSI-X
e1000e 0000:06:00.0: irq 56 for MSI/MSI-X
e1000e 0000:06:00.0: irq 57 for MSI/MSI-X
e1000e 0000:07:00.0: irq 58 for MSI/MSI-X
e1000e 0000:07:00.0: irq 59 for MSI/MSI-X
e1000e 0000:07:00.0: irq 60 for MSI/MSI-X
igb 0000:03:00.0: irq 61 for MSI/MSI-X
igb 0000:03:00.0: irq 62 for MSI/MSI-X
igb: eth2: igb_probe: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s)
igb 0000:03:00.1: irq 63 for MSI/MSI-X
igb 0000:03:00.1: irq 64 for MSI/MSI-X
igb: eth3: igb_probe: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s)
>
> Per your question, at least when dealing with packets from within the
> kernel, a Nehalem box is fully capable of handling >20Gbps (depending on
> the packet size) - so I doubt that this is a hardware issue.
Agreed. I ran a local netperf test and was seeing about 8 Gbps of throughput on a single core, so this should be adequate for 1 Gbps traffic.
>
> - Gilboa
>
Thanks,
Kelvin
More information about the users
mailing list