Bosko Milekic writes:
 > 
 > [ -current trimmed ]
 > 
 > On Fri, Jul 05, 2002 at 08:08:47AM -0400, Andrew Gallatin wrote:
 > > Would this be easier or harder than simple, physically contiguous
 > > buffers?  I think that its only worth doing if its easier to manage at
 > > the system level, otherwise you might as well use physically
 > > contiguous mbufs.  My main goal is to see the per-driver cache's of
 > > physical memory disappear ;)
 > 
 >  It would be much easier.  The problem with getting physically
 >  contiguous memory is that shortly after the system gets going, memory
 >  becomes fragmented.  So, from a system's perspective, it's very hard to
 >  get physically contiguous pages.  This is why you see most drivers that
 >  actually do this sort of thing pre-allocate a pool of such beasts early
 >  on during boot up.  Unfortunately, this means that they'll be eating up
 >  a lot of memory (some may stay unused forever) at a very early stage.

What's worse, you might have 2 drivers, and have one driver
with buffers but no load, and another with load but no buffers.

And contigmalloc fails often for loadable modules. 

 >  As for the guarantee that the data region will start at a page
 >  boundary, yes I can ensure that as long as you don't tamper with
 >  offsetting the m_data field of the mbuf after the allocator hands it to
 >  you.  That is, I can guarantee this:
 > 
 >  [ mbuf    ]
 >  [ <stuff> ]
 >  [ m_data -]--->[ jumbo buf ]
 >                 [ (page 1)  ]
 >                 [-----------]
 >                 [ (page 2)  ]
 >                 [-----------]
 >                 [ (page 3)  ]        
 > 
 >  So, as you see, it is deffinately do-able to have all the jumbo bufs
 >  start at a page boundary; however, it may be more worthwhile to have
 >  some of them start later.  We would have to implement it first and we
 >  would have to do some measurements to see what really works best.
 > 
 >  What I hate about jumbo bufs is that there's a lot of wastage in the
 >  last (3rd page).  I can't exactly use the last half of that last page
 >  for, say, a 2K cluster, because then I wouldn't be respecting the
 >  bucket "infrastructure" in mb_alloc that allows easy implementation of
 >  page freeing.  Pretty much the only "realistic" thing I could do is
 >  allocate jumbo bufs in groups of 3 or 4; this would ensure much less
 >  wastage but would mean that not all of them would start at page
 >  boundaries.

I think this would be fine, But we'd need to know more about the
hardware limitations of the popular GiGE boards out there.  We know
Tigon-II can handle 4 scatters, but are there any that can handle 3
but not four?

Drew

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to