dummynet dropping too many packets
rihad
rihad at mail.ru
Tue Oct 6 15:28:43 UTC 2009
Eugene Grosbein wrote:
> On Tue, Oct 06, 2009 at 06:14:58PM +0500, rihad wrote:
>
>>> No, generally handles much more. Please show your ipfw rule(s)
>>> containing 'tablearg'.
>> 01031 x x allow ip from any to any
>> 01040 x x skipto 1100 ip from table(127) to any out
>> recv bce0 xmit bce1
>> 01060 x x pipe tablearg ip from any to table(0) out
>> recv bce0 xmit bce1
>> 01070 x x allow ip from any to table(0) out recv bce0
>> xmit bce1
>> 01100 x x pipe tablearg ip from any to table(2) out
>> 65535 x x allow ip from any to any
>>
>> table(127) contains country-wide ISPs' netblocks (under 100 entries).
>> table(0) and table(2) contain same user IP addresses, but different pipe
>> IDs - normally around 3-4k entries each.
>>
>> Now please pay special attention to rule 1031. I've added it to bypass
>> dummynet and stop packets from being dropped for now. Normally the rule
>> isn't there.
>>
>> As I found out today after rebooting, drops only start occurring when
>> the number of entries in table(0) exceeds 2000 or so (please see my
>> previous email). Maybe it's a coincidence - I don't know. Global traffic
>> load doesn't matter - it was approximately the same before and after the
>> drops (around 450 mbit/s).
>
> It's possible that pipe lookup by its number is inefficient
> and firewall keeps its lock for too much time while searching the pipe,
> just a guess. And packets start to drop, eh?
>
> Try setting net.isr.direct to 0 and make large net.inet.ip.intr_queue_maxlen.
> This way, one of your cores may run bce's thread, enqueue incoming
> packets and return to work immediately. The rest of processing may be
> performed by another kernel thread, hopefully using another core.
> Just to see if this changes anything. top -S should help here too.
>
Since this is a remote production box, I'm really scared of toggling
such on/off flags I've never used before, particularly under heavy
traffic loads, they're way too eager to lock up the whole system. I
might try this tomorrow morning, though, first on another less critical
box. p.s.: I've just tested toggling the flag on my virtual machine, it
went fine.
I don't think net.inet.ip.intr_queue_maxlen is relevant to this problem,
as net.inet.ip.intr_queue_drops is normally zero or very close to it at
all times.
More information about the freebsd-net
mailing list