svn commit: r248196 - head/sys/nfs

Andre Oppermann andre at freebsd.org
Wed Mar 13 15:37:49 UTC 2013


On 13.03.2013 16:18, Gleb Smirnoff wrote:
>    Okay,
>
>    I will redo my patch to make default not to allow > PAGE_SIZE
> clusters.

Thanks.

> On Tue, Mar 12, 2013 at 10:19:05PM +0100, Andre Oppermann wrote:
> A> Jumbos always were physically contiguous.  That was the very reason for
> A> their existence.  They were invented to allow early NIC's with limited
> A> DMA capabilities to handle jumbo ethernet frames.  Today they should only
> A> be used for DMA challenged NIC's and nothing else.
>
> They definitely were not physically contigous prior to r174247.

I'm pretty sure they were but implemented differently.  Maybe this aspect got
lost for a moment during the UMA transition of the mbuf allocator.  Otherwise
the Tigeon and other early GigE cards wouldn't have worked with jumbo frames
on receive.  They were not capable of, or very limited, on scatter DMA.  For
this particular purpose jumbo frames were introduced at the time.

I added PAGE_SIZE jumbo frames around 2005 to make use of larger clusters but
without getting into DMA and memory fragmentation trouble.

> A> > Let me repeat: there is a lot of code, that does handmade allocation of
> A> > an mbuf chain of an arbitrary length using mbufs and common clusters. This
> A> > code can be cut and use m_getm2(), if we can restrict it to avoid page size
> A> > clusters. I don't have time to dig deeper in the code and analyze and test
> A> > whether it can support page sized clusters in chains.
> A>
> A> m_getm2() can be used in any such case and doesn't have to avoid PAGE_SIZE
> A> clusters.  PAGE_SIZE jumbo clusters are fine.  Larger than PAGE_SIZE is not.
> A>
> A> When the code is able to work with mbuf chains the exact size of each cluster
> A> isn't important anymore.  We can use the optimal size.
>
> Do you volunteer to fix if anything is broken? If not, I'd prefer to
> be conservative and make m_getm() capable to produce chains without
> clusters bigger than MCLBYTES.

There is nothing to fix.  It works just fine and in fact is in use for all
socket i/o (write) for about 6 years since r163916 and 163916.  :-)

Yes, if there is anything broken with PAGE_SIZE mbuf chains returned by m_getm2()
I'm volunteering to fix it.

-- 
Andre



More information about the svn-src-all mailing list