Why is NFSv4 so slow?

Rick Macklem rmacklem at uoguelph.ca
Sun Sep 12 15:44:41 UTC 2010

> On Wed, Sep 01, 2010 at 11:46:30AM -0400, Rick Macklem wrote:
> > >
> > > I am experiencing similar issues with newnfs:
> > >
> > > 1) I have two clients that each get around 0.5MiB/s to 2.6MiB/s
> > > reading
> > > from the NFS4-share on Gbit-Lan
> > >
> > > 2) Mounting with -t newnfs -o nfsv3 results in no performance gain
> > > whatsoever.
> > >
> > > 3) Mounting with -t nfs results in 58MiB/s ! (Netcat has similar
> > > performance) ??? not a hardware/driver issue from my pov
> >
> > Ok, so it does sound like an issue in the experimental client and
> > not NFSv4. For the most part, the read code is the same as
> > the regular client, but it hasn't been brought up-to-date
> > with recent changes.
> Do you (or will you soon) have some patches I/we could test? I'm
> willing to try anything to avoid mounting ten or so subdirectories in
> each of my mount points.
> > One thing you could try is building a kernel without SMP enabled
> > and see if that helps? (I only have single core hardware, so I won't
> > see any SMP races.) If that helps, I can compare the regular vs
> > experimental client for smp locking in the read stuff.
> I can try disabling SMP too. Should that really matter, if you're not
> even pegging one CPU? The locks shouldn't have *that* much overhead...
> -- Rick C. Petty
Just fyi, I asked folks to run read tests on the clients (over on
freebsd-fs), Sofar, I've only gotten one response, but they didn't
see the problem you are (they did see a factor of 2 slower, but it
is still 50Mbytes/sec). Maybe you can take a look at their email
and compare his client with yours? His message is:

Btw, if anyone who didn't see the posting on freebsd-fs and would
like to run a quick test, it would be appreciated.
Bascially do both kinds of mount using a FreeBSD8.1 or later client
and then read a greater than 100Mbyte file with dd.

# mount -t nfs -o nfsv3 <server>:/path /<mnt-path>
- cd anywhere in mount that has > 100Mbyte file
# dd if=<file> of=/dev/null bs=1m
# umount /<mnt-path>

Then repeat with
# mount -t newnfs -o nfsv3 <server>:/path /<mnt-path>

and post the results along with the client machine's info
(machine arch/# of cores/memory/net interface used for NFS traffic).

Thanks in advance to anyone who runs the test, rick

More information about the freebsd-stable mailing list