review/test: NFS patch to use pagesize mbuf clusters
Rick Macklem
rmacklem at uoguelph.ca
Tue Mar 18 01:26:30 UTC 2014
Hi,
Several of the TSO capable network interfaces have a limit of
32 mbufs in the transmit mbuf chain (the drivers call these transmit
segments, which I admit I find confusing).
For a 64K read/readdir reply or 64K write request, NFS passes
a list of 34 mbufs down to TCP. TCP will split the list, since
it is slightly more than 64K bytes, but that split will normally
be a copy by reference of the last mbuf cluster. As such, normally
the network interface will get a list of 34 mbufs.
For TSO enabled interfaces that are limited to 32 mbufs in the
list, the usual workaround in the driver is to copy { real copy,
not copy by reference } the list to 32 mbuf clusters via m_defrag().
(A few drivers use m_collapse() which is less likely to succeed.)
As a workaround to this problem, the attached patch modifies NFS
to use larger pagesize clusters, so that the 64K RPC message is
in 18 mbufs (assuming a 4K pagesize).
Testing on my slow hardware which does not have TSO capability
shows it to be performance neutral, but I believe avoiding the
overhead of copying via m_defrag() { and possible failures
resulting in the message never being transmitted } makes this
patch worth doing.
As such, I'd like to request review and/or testing of this patch
by anyone who can do so.
Thanks in advance for your help, rick
ps: If you don't get the attachment, just email and I'll
send you a copy.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 4kmcl.patch
Type: text/x-patch
Size: 8152 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20140317/25859826/attachment.bin>
More information about the freebsd-fs
mailing list