netdev
[Top] [All Lists]

Re: e1000 w/ NAPI + SMP = 99% CPU utilization

To: P@xxxxxxxxxxxxxx
Subject: Re: e1000 w/ NAPI + SMP = 99% CPU utilization
From: "Chris Carpinello" <chriscarpinello@xxxxxxxxxxx>
Date: Tue, 08 Jun 2004 14:14:17 -0400
Cc: netdev@xxxxxxxxxxx
Sender: netdev-bounce@xxxxxxxxxxx
Padraig wrote:
At what packet rate does it go to 100%?

I haven't narrowed down a threshold. tcpstat reports bps=202737465 on eth3. eth0 is a management interface (doesn't packet sniff). eth1 and eth2 are ifconfig'd down.

Anyway it's not much to worry about as
it's in polling mode.

I'm concerned because when I ifconfig down eth3 the kernel panics. Under high traffic loads, the box will panic as well. Here's the oops, which is hand copied from the console:

Oops: 0002 [#1]
SMP
CPU: 0
EIP: 0060:[<c0367896>] Not tainted
EFLAGS: 00010002 (2.6.5)
EIP is at net_rx_action+0x86/0x120
eax: 00200200 ebx: df22b0fc ecx: 0000009d edx: 00100100
esi: df22b000 edi: c1508840 ebp: fffe4c97 esp: dff8bf78
ds: 007b es: 007b ss: 0068
Process ksoftirqd/0 (pid: 3, threadinfo=dff8a000 task=dff90600)
Stack:
df22b000 df8bf80 000000ec 00000001 c04f1c18 0000000a 00000246 c0126a7a
c04f1c18 dff8a000 dff8a000 dff8a000 c0126f10 c0126f95 dff90600 00000013
dff8a000 dff93f74 00000000 c01367aa 00000000 00000003 00000000 fffffffc
Call Trace:
[<c0126a7a>] do_softirq+0xca/0xd0
[<c0126f10>] ksoftirqd+0x0/0xd0
[<c0126f95>] ksoftirqd+0x85/0xd0
[<c01367aa>] kthread+0xba/0xc0
[<c01366f0>] kthread+0x0/0xc0
[<c01072f5>] kernel_thread_helper+0x5/0x10
Code: 89 42 04 89 10 8d 57 1c c7 43 04 00 02 20 00 8b 42 04 89 13
<0> Kernel panic: Fatal exception in interrupt
 In interrupt handler - not syncing

One thing which should help is to share
the work across your CPUs. `cat /proc/interrupts`
will show the interrupts for your nics.

# cat /proc/interrupts CPU0 CPU1 0: 3758655 3223347 IO-APIC-edge timer 1: 2 7 IO-APIC-edge i8042 2: 0 0 XT-PIC cascade 8: 1 0 IO-APIC-edge rtc 9: 0 0 IO-APIC-level acpi 14: 22 7 IO-APIC-edge ide0 16: 11 11 IO-APIC-level eth1 17: 5471 5475 IO-APIC-level eth0 18: 1790 1794 IO-APIC-level aic7xxx 19: 15 15 IO-APIC-level aic7xxx 20: 2 1 IO-APIC-level eth2 24: 1549 1349 IO-APIC-level eth3 NMI: 0 0 LOC: 6982002 6982001 ERR: 0 MIS: 0

Then you can bind the interrupt to a particular CPU like:

echo 1 > /proc/irq/$num/smp_affinity
echo 2 > /proc/irq/$num/smp_affinity
echo 4 > /proc/irq/$num/smp_affinity
echo 8 > /proc/irq/$num/smp_affinity

Setting the mask has no noticeable effect on ksoftirqd's behavior.

- Chris



<Prev in Thread] Current Thread [Next in Thread>