svn commit: r248196 - head/sys/nfs

John Baldwin jhb at freebsd.org
Tue Mar 12 21:12:06 UTC 2013


On Tuesday, March 12, 2013 12:33:04 pm Andre Oppermann wrote:
> On 12.03.2013 16:50, Gleb Smirnoff wrote:
> > On Tue, Mar 12, 2013 at 04:31:05PM +0100, Andre Oppermann wrote:
> > A> > If you are concerned about using jumbos that are > PAGE_SIZE, then I can
> > A> > extend API in my patch.  ... done.
> > A> >
> > A> > Patch attached.
> > A> >
> > A> > The NFS code itself guarantees that it won't request > than MCLBYTES,
> > A> > so using bare m_get2() here is safe. I can add flag there later for
> > A> > clarity.
> > A>
> > A> Using PAGE_SIZE clusters is perfectly fine and no flag to prevent that
> > A> is necessary.  In fact we're doing it for years on socket writes without
> > A> complaints (through m_getm2()).
> >
> > mbuf usage isn't limited to sockets. There is some code that right now utilizes
> > only mbufs and standard clusters, netipsec for example.
> 
> Yes, I understand that.
> 
> > I'd like to remove a lot of handmade mbuf allocating, in different places in
> > kernel and this can be done with M_NOJUMBO flag. I don't have time to dig more
> > deep into large chunks of code trying to understand whether it is possible to
> > convert them into using PAGE_SIZE clusters or not, I just want to reduce
> > amount of pasted hand allocating.
> 
> Reducing the amount of hand allocation is very good.
> 
> > We have very common case when we allocate either mbuf or mbuf + cluster,
> > depending on size. Everywhere this is made by hand, but can be substituted
> > with m_get2(len, ..., M_NOJUMBO);
> 
> I guess what I'm trying to say is that not wanting jumbo > PAGE_SIZE is
> normal and shouldn't be specified all the time.
> 
> This makes the API look like this:
> 
>   m_get2(len, ..., 0);	/* w/o flags I get at most MJUMPAGESIZE */
> 
> If someone really, really, really knows what he is doing he can say
> he wants jumbo > PAGE_SIZE returned with M_JUMBOOK or such.  However
> IMHO even that shouldn't be offered and m_getm2() should be used for
> a chain.

I agree, large clusters should require opting-in, they should not be
provided by default (if at all as Andre suggests).

-- 
John Baldwin


More information about the svn-src-all mailing list