Limits on jumbo mbuf cluster allocation

Andre Oppermann andre at freebsd.org
Sun Mar 10 22:22:30 UTC 2013


On 10.03.2013 07:04, Garrett Wollman wrote:
> <<On Fri, 8 Mar 2013 12:13:28 -0800, Jack Vogel <jfvogel at gmail.com> said:
>
>> Yes, in the past the code was in this form, it should work fine Garrett,
>> just make sure
>> the 4K pool is large enough.
>
> [Andre Oppermann's patch:]
>>> if (adapter->max_frame_size <= 2048)
> adapter-> rx_mbuf_sz = MCLBYTES;
>>> -       else if (adapter->max_frame_size <= 4096)
>>> +       else
> adapter-> rx_mbuf_sz = MJUMPAGESIZE;
>>> -       else if (adapter->max_frame_size <= 9216)
>>> -               adapter->rx_mbuf_sz = MJUM9BYTES;
>>> -       else
>>> -               adapter->rx_mbuf_sz = MJUM16BYTES;
>
> So I tried exactly this, and it certainly worked insofar as only 4k
> clusters were allocated, but NFS performance went down precipitously
> (to fewer than 100 ops/s where normally it would be doing 2000
> ops/s).  I took a tcpdump while it was in this state, which I will try
> to make some sense of when I get back to the office.  (It wasn't
> livelocked; in fact, the server was mostly idle, but responses would
> take seconds rather than milliseconds -- assuming the client could
> even successfully mount the server at all, which the Debian
> automounter frequently refused to do.)

This is very weird and unlikely to come from the 4k mbufs by itself
considering they are in heavy use in the write() path.  Such a high
delay smells like an issue in either the driver dealing with multiple
mbufs per packet or nfs having a problem with it.

> I ended up reverting back to the old kernel (which I managed to lose
> the sources for), and once I get my second server up, I will try to do
> some more testing to see if I can identify the source of the problem.

-- 
Andre



More information about the freebsd-net mailing list