Subject: Re: UDP is bypassing qdisc statistics ....

From: Eric Dumazet <[email-masked]>
Date: Tue, 01 Sep 2009 17:58:05 +0200

Eric Dumazet a écrit :
> Christoph Lameter a écrit :
>> On Tue, 1 Sep 2009, Eric Dumazet wrote:
>>
>>> You should see that in /proc/interrupts, if I correctly understand bnx2.c
>> Hmmm I have 8 interrupts:
>>
>>   62:        158          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-0
>>   63:         84          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-1
>>   64:        412          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-2
>>   65:         25          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-3
>>   66:      49718          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-4
>>   67:         65          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-5
>>   68:        686          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-6
>>   69:       2582          0          0          0          0          0
>> 0          0          0          0          0          0          0
>> 0          0          0  IR-PCI-MSI-edge      eth0-7
> 
> Yes, this confirm you have 8 queues on this NIC
> 
> Strange thing is they seem to be all serviced by CPU-0, which is not good...
> 
> 
> 

Given that bnx2.c uses num_online_cpus() at init time, you could
as a workaround do the insmod/modprobe bnx2 with only one online cpu,
and you'll revert to a mono-queue NIC :)

int msix_vecs = min(cpus + 1, RX_MAX_RINGS); 
...
if ((bp->flags & BNX2_FLAG_MSIX_CAP) && !dis_msi && cpus > 1)
	bnx2_enable_msix(bp, msix_vecs);

For your multicast test anyway, only one queue should be used (one flow)