[OpenAFS-devel] .35 sec rx delay bug?

Rainer Toebbicke rtb@pclella.cern.ch
Mon, 06 Nov 2006 18:09:03 +0100


Tom Keiser wrote:

> Ok.  Looking at your patch I see we're talking about two different rx
> subsystems.  I was referring to the Rx packet _allocator_ being
> lockless.  I see you're referring to a call->lock fairness problem
> caused by a transmitter holding the lock for too long.  Well,
> actually, that's not really true, either.  If you dig far enough down
> into the stack, you'll see that we drop call->lock around the
> rxi_SendPacketList()/rxi_SendPacket() call at the bottom of
> rxi_SendList().  On SMPs this should be enough, but on uniprocessor

No, actually it isn't: if you're grabbing, say, 64 KB (is that 
anexotic buffer size) of packets you're holding the lock for 40 or so 
packets, even across the malloc() which may eventually happen. It's 
only released once the packets are all queued for transmission. That's 
eons later, particularly if ever malloc goes through garbage 
collection and the like which I have seen, baffled. If I calculate 
this correctly, at 100 MB/s we're talking some 70000 packets per 
second! Shouldn't waste milliseconds too often.

In order to keep the network interface busy the window must stay open, 
which means every ACK has to be processed as soon as possible. Parts 
of this patch are to ensure this, i.e. give more priority to ACK 
processing on the assumption that there is always spare time later to 
queue more of the user's packets. This would also have the effect of 
freeing up packets for reuse earlier, and keep the queue smaller. A 
"useless" mutex drop/reacquire costs some 2-3us BTW on a modest Xeon.

As to Chas William's remark: gettimeofday() resp. clock_GetTime is 
called like hell. I only worried about switching to itimer() when I 
saw that the call itself already is that slow.

-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Rainer Toebbicke
European Laboratory for Particle Physics(CERN) - Geneva, Switzerland
Phone: +41 22 767 8985       Fax: +41 22 767 7155