netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* workaround large MTU and N-order allocation failures
@ 2005-09-18 14:35 Dan Aloni
  2005-09-18 23:08 ` Francois Romieu
  2005-09-19  6:31 ` Nick Piggin
  0 siblings, 2 replies; 8+ messages in thread
From: Dan Aloni @ 2005-09-18 14:35 UTC (permalink / raw)
  To: Linux Kernel List, netdev; +Cc: Nick Piggin

Hello,

Is there currently a workaround available for handling large MTU 
(larger than 1 page, even 2-order) in the Linux network stack?

The problem with large MTU is external memory fragmentation in
the buddy system following high workload, causing alloc_skb() to 
fail.

I'm interested in patches for both 2.4 and 2.6 kernels.

Thanks,

-- 
Dan Aloni
da-x@monatomic.org, da-x@colinux.org, da-x@gmx.net

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: workaround large MTU and N-order allocation failures
  2005-09-18 14:35 workaround large MTU and N-order allocation failures Dan Aloni
@ 2005-09-18 23:08 ` Francois Romieu
  2005-09-19  7:13   ` Dan Aloni
  2005-09-19  6:31 ` Nick Piggin
  1 sibling, 1 reply; 8+ messages in thread
From: Francois Romieu @ 2005-09-18 23:08 UTC (permalink / raw)
  To: Dan Aloni; +Cc: Linux Kernel List, netdev, Nick Piggin

Dan Aloni <da-x@monatomic.org> :
[...]
> The problem with large MTU is external memory fragmentation in
> the buddy system following high workload, causing alloc_skb() to 
> fail.

If the issue hits the Rx path, it is probably the responsibility of
the device driver. Which kind of hardware do you use ?

--
Ueimor

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: workaround large MTU and N-order allocation failures
  2005-09-18 14:35 workaround large MTU and N-order allocation failures Dan Aloni
  2005-09-18 23:08 ` Francois Romieu
@ 2005-09-19  6:31 ` Nick Piggin
  2005-09-19 13:38   ` Al Boldi
  2005-09-20 14:34   ` Dan Aloni
  1 sibling, 2 replies; 8+ messages in thread
From: Nick Piggin @ 2005-09-19  6:31 UTC (permalink / raw)
  To: Dan Aloni; +Cc: lkml, netdev

On Sun, 2005-09-18 at 17:35 +0300, Dan Aloni wrote:
> Hello,
> 
> Is there currently a workaround available for handling large MTU 
> (larger than 1 page, even 2-order) in the Linux network stack?
> 
> The problem with large MTU is external memory fragmentation in
> the buddy system following high workload, causing alloc_skb() to 
> fail.
> 
> I'm interested in patches for both 2.4 and 2.6 kernels.
> 

Yes there is currently a workaround. That is to keep increasing
/proc/sys/vm/min_free_kbytes until your allocation failures stop.

Nick

-- 
SUSE Labs, Novell Inc.



Send instant messages to your online friends http://au.messenger.yahoo.com 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: workaround large MTU and N-order allocation failures
  2005-09-18 23:08 ` Francois Romieu
@ 2005-09-19  7:13   ` Dan Aloni
  2005-09-19 17:25     ` Ganesh Venkatesan
  0 siblings, 1 reply; 8+ messages in thread
From: Dan Aloni @ 2005-09-19  7:13 UTC (permalink / raw)
  To: Francois Romieu; +Cc: Linux Kernel List, netdev, Nick Piggin

On Mon, Sep 19, 2005 at 01:08:22AM +0200, Francois Romieu wrote:
> Dan Aloni <da-x@monatomic.org> :
> [...]
> > The problem with large MTU is external memory fragmentation in
> > the buddy system following high workload, causing alloc_skb() to 
> > fail.
> 
> If the issue hits the Rx path, it is probably the responsibility of
> the device driver. Which kind of hardware do you use ?

We are using a SuperMicro board and the network driver is e1000. The
revision of the chipset is 82546GB-copper (maps to e1000_82546_rev_3).

This particular chipset does not support packet splitting, so we
are looking for a hack on the skb layer.

-- 
Dan Aloni
da-x@monatomic.org, da-x@colinux.org, da-x@gmx.net

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: workaround large MTU and N-order allocation failures
  2005-09-19  6:31 ` Nick Piggin
@ 2005-09-19 13:38   ` Al Boldi
  2005-09-20 14:34   ` Dan Aloni
  1 sibling, 0 replies; 8+ messages in thread
From: Al Boldi @ 2005-09-19 13:38 UTC (permalink / raw)
  To: netdev; +Cc: lkml

Nick Piggin wrote:
> On Sun, 2005-09-18 at 17:35 +0300, Dan Aloni wrote:
> > Hello,
> >
> > Is there currently a workaround available for handling large MTU
> > (larger than 1 page, even 2-order) in the Linux network stack?
> >
> > The problem with large MTU is external memory fragmentation in
> > the buddy system following high workload, causing alloc_skb() to
> > fail.
> >
> > I'm interested in patches for both 2.4 and 2.6 kernels.
>
> Yes there is currently a workaround. That is to keep increasing
> /proc/sys/vm/min_free_kbytes until your allocation failures stop.

How do you do it in 2.4?

--
Al

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: workaround large MTU and N-order allocation failures
  2005-09-19  7:13   ` Dan Aloni
@ 2005-09-19 17:25     ` Ganesh Venkatesan
  2005-09-20 14:25       ` Dan Aloni
  0 siblings, 1 reply; 8+ messages in thread
From: Ganesh Venkatesan @ 2005-09-19 17:25 UTC (permalink / raw)
  To: Dan Aloni; +Cc: Francois Romieu, Linux Kernel List, netdev, Nick Piggin

82546GB supports an incoming Rx packet to be received in multiple rx
buffers. A driver that enables this feature is under test currently.
What version of the e1000 are you using?

ganesh.

On 9/19/05, Dan Aloni <da-x@monatomic.org> wrote:
> On Mon, Sep 19, 2005 at 01:08:22AM +0200, Francois Romieu wrote:
> > Dan Aloni <da-x@monatomic.org> :
> > [...]
> > > The problem with large MTU is external memory fragmentation in
> > > the buddy system following high workload, causing alloc_skb() to
> > > fail.
> >
> > If the issue hits the Rx path, it is probably the responsibility of
> > the device driver. Which kind of hardware do you use ?
> 
> We are using a SuperMicro board and the network driver is e1000. The
> revision of the chipset is 82546GB-copper (maps to e1000_82546_rev_3).
> 
> This particular chipset does not support packet splitting, so we
> are looking for a hack on the skb layer.
> 
> --
> Dan Aloni
> da-x@monatomic.org, da-x@colinux.org, da-x@gmx.net
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: workaround large MTU and N-order allocation failures
  2005-09-19 17:25     ` Ganesh Venkatesan
@ 2005-09-20 14:25       ` Dan Aloni
  0 siblings, 0 replies; 8+ messages in thread
From: Dan Aloni @ 2005-09-20 14:25 UTC (permalink / raw)
  To: Ganesh Venkatesan; +Cc: Francois Romieu, Linux Kernel List, netdev, Nick Piggin

On Mon, Sep 19, 2005 at 10:25:29AM -0700, Ganesh Venkatesan wrote:
> 82546GB supports an incoming Rx packet to be received in multiple rx
> buffers. A driver that enables this feature is under test currently.
> What version of the e1000 are you using?

We are currently using the lastest version of the driver from the 2.6 
tree backported to the 2.4 tree. I wasn't aware that 82546GB supports 
this - I inferred differently from the comments in the driver's source.

Is the version of the driver you mention available from CVS somewhere?

-- 
Dan Aloni
da-x@monatomic.org, da-x@colinux.org, da-x@gmx.net

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: workaround large MTU and N-order allocation failures
  2005-09-19  6:31 ` Nick Piggin
  2005-09-19 13:38   ` Al Boldi
@ 2005-09-20 14:34   ` Dan Aloni
  1 sibling, 0 replies; 8+ messages in thread
From: Dan Aloni @ 2005-09-20 14:34 UTC (permalink / raw)
  To: Nick Piggin; +Cc: lkml, netdev

On Mon, Sep 19, 2005 at 04:31:02PM +1000, Nick Piggin wrote:
> On Sun, 2005-09-18 at 17:35 +0300, Dan Aloni wrote:
> > Hello,
> > 
> > Is there currently a workaround available for handling large MTU 
> > (larger than 1 page, even 2-order) in the Linux network stack?
> > 
> > The problem with large MTU is external memory fragmentation in
> > the buddy system following high workload, causing alloc_skb() to 
> > fail.
> > 
> > I'm interested in patches for both 2.4 and 2.6 kernels.
> > 
> 
> Yes there is currently a workaround. That is to keep increasing
> /proc/sys/vm/min_free_kbytes until your allocation failures stop.

We have developed a much more reliable workaround which works on both
the 2.4 and 2.6 trees. 

Our development is called 'Pre-allocated Big Buffers', basically prebb 
provides fixed-sized pools of fixed-size blocks that are allocated during
boot time using the bootmem allocator (thus are disconnected from the 
slab cache completely). block size need not to be page aligned. It is 
possible to allocate these blocks at O(1) efficiency at any context.

Each pool has a minimum and maximum object size (where allocations 
should strive to be the maximum for memory usage efficiency). Currently 
we use prebb to ensure no fragmentation and fine-tuned memory usage.

(Of course a few changes inside net/core/skbuff.c were needed for 
skb buffers to allocate from prebb instead of slab).

-- 
Dan Aloni
da-x@monatomic.org, da-x@colinux.org, da-x@gmx.net

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2005-09-20 14:34 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-09-18 14:35 workaround large MTU and N-order allocation failures Dan Aloni
2005-09-18 23:08 ` Francois Romieu
2005-09-19  7:13   ` Dan Aloni
2005-09-19 17:25     ` Ganesh Venkatesan
2005-09-20 14:25       ` Dan Aloni
2005-09-19  6:31 ` Nick Piggin
2005-09-19 13:38   ` Al Boldi
2005-09-20 14:34   ` Dan Aloni

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).