On Fri, Aug 19, 2005 at 07:05:06PM +0200, Andi Kleen wrote:
> > Right. The other issue with jumbos frames (9000MTU) is that
> > the allocation needed is just over 2 pages for 4K page size
> > machines (common case). 3 page contig allocations tend to fail
> > once a server is heavily loaded and memory gets fragmented.
> 
> That's just a driver bug. The driver should be splitting up the
> buffers into page sized chunks. TX does that already, but
> for RX the driver needs to do it.

The problem with the e1000 driver in this regard is the following:

1. It internally rounds the Rx buffer up to the next power of 2
   So your 9k MTU request just turned into a 16k (16384) allocation

2. alloc_skb() allocates size+sizeof(struct skb_shared_info) bytes
   using kmalloc(), which bumps the size over the power-of-2 boundary

3. kmalloc() rounds this up to the next power of 2, and you end up with
   a 32k (yes, a 32768 byte) GFP_ATOMIC allocation request.

I tested the version in 2.4.26 (version 5.2.30.1-k1) and the one from
Intel's webpage (6.1.16) on 2.4.26.

Is there any plans to fix this?

Does the 2.4 kernel support chained sk_buff's along the receive path? (This
is news to me!) Is there any driver that does this, that can be read as an
instructive example?

Thanks,
Guy Thornley
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to