Re: [RFC] Allow m_dup() to use JUMBO clusters

From: Rick Macklem <rmacklem_at_uoguelph.ca>
Date: Tue, 8 Jul 2014 16:10:07 -0400 (EDT)
John-Mark Gurney wrote:
> Hans Petter Selasky wrote this message on Mon, Jul 07, 2014 at 10:12
> +0200:
> > I'm asking for some input on the attached m_dup() patch, so that
> > existing functionality or dependencies are not broken. The
> > background
> > for the change is to allow m_dup() to defrag long mbuf chains that
> > doesn't fit into a specific hardware's scatter gather entries,
> > typically
> > when doing TSO.
> > 
> > In my case the HW limit is 16 entries of length 4K for doing a
> > 64KByte
> > TSO packet. Currently m_dup() is at best producing 32 entries of
> > each 2K
> > for a 64Kbytes TSO packet.
> > 
> > By allowing m_dup() to get JUMBO clusters when allocating mbufs, we
> > avoid creating a new function, specific to the hardware, to defrag
> > some
> > rare-occurring very long mbuf chains into a mbuf chain below 16
> > entries.
> 
> Please no... Until we get a better allocator, we should not use jumbo
> (>page sized) mbufs otherwise we will quickly fail to allocate mbufs
> after a machine has been up for a long while causing other
> failures...
> 
> Unless of course if the code fails to allocate the largest cluster it
> falls through to trying to allocate the next smaller size, that might
> be better...
> 
Unfortunately, for the "can't allocate boundary tags" case, the allocation
request with M_NOWAIT loops instead of failing.

I tried:
      m = m_getjcl(M_NOWAIT..M_JUMPAGESIZE);
      if (m == NULL)
           m = getjcl(M_WAITOK..MCLBYTES);
when I was experimenting with MJUMPAGESIZE clusters for NFS and what happened
was the thread looped in the first m_getjcl() instead of returning NULL.
It is about 12 layers of function calls deep and most fail/return NULL, but
somewhere one of them decides to "try again". I didn't locate the location
of that and don't know if it would be safe to change it so that m_getjcl()
returns NULL for this case.

rick


> --
>   John-Mark Gurney				Voice: +1 415 225 5579
> 
>      "All that I will do, has been done, All that I have, has not."
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to
> "freebsd-current-unsubscribe_at_freebsd.org"
> 
Received on Tue Jul 08 2014 - 18:10:08 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:50 UTC