Understanding the vfs.nfsd.request_space* sysctls

Alan Somers asomers at freebsd.org
Wed Mar 17 01:32:29 UTC 2021


On Tue, Mar 16, 2021 at 6:06 PM Rick Macklem <rmacklem at uoguelph.ca> wrote:

> Alan Somers wrote:
> >Could somebody help me understand the meaning of the various
> >vfs.nfsd.request_space* sysctls, and what implication they have for tuning
> >NFS?
> >
> >I have several NFS servers.  Most are performing well, but one with a
> >metadata-heavy workload (NFS 4.1, no delegations, lots of Sequence,
> GetAttr
> >and Lookup ops) is not.  Total throughput is a not-unreasonable several
> >hundred MB/s, but some clients are limited to very slow speeds, sometimes
> >writing at < 10 MB/s.
> >
> >The request_space sysctls show some pretty stark divergence between the
> >well-performing and poor-performing servers:
> >
> >sysctl                       well-performing poor-performing
> >request_space_used                  < 6 M                  varies, but
> >currently 40 M
> >request_space_used_highest     < 39 M                24 G
> >request_space_throttle_count  0                         35
> >
> >So what does request_space_used measure, anyway?
> It's the number of bytes of request message(s) received,
> but not yet being processed by nfsd threads.
> (They're actually in sys/rpc/svc.c, although named for the
>  nfs server.)
>
> Anytime used > high, it throttles, which means it leaves
> the RPC messages on the socket receive queue.
> This indicates the server is not keeping up with requests.
> (ie Overloaded or ???)
>

That all makes sense.  So having a high request_space_used basically just
means that my storage is too slow.


>
> >  And how can I either
> >increase the available space or decrease the stuff that's using it?
> Increasing vfs.nfsd.request_space_high avoids the throttling,
> but it is hard to say that is a good idea, since there won't be
> backpressure applied to the clients via TCP windows, etc.
>
> Fixing the server so that it isn't overloaded would be better,
> I think?
> --> I'm the last guy to take ZFS advice from, but I think there
>       is a tunable w.r.t. how much arc is used for metadata.
>       Getattrs will need cached (metadata) to reply quickly.
>       Lookups also depend on cached attributes for good
>       perf. as well.
>

I've added an L2ARC since I sent that original email.  We'll see how well
it works.  I expect it to take 48 hours before results are apparent.


> --> Make sure you have lots of nfsd threads. They are
>       just kernel threads, so they don't use a lot of resources
>       and having too many is much better than not enough.
>       -->I can't remember what the upper limit is these days,
>            but I'd set it to that for a busy nfs server.
>            For NFSv4.1, each client can send a maximum of
>            session_slot_table_size concurrent RPCs. FreeBSD
>            uses a single 64slot table for each mount. I think
>            Linux uses a 32slot table, but supports trunking.
>            I don't know if the Linux client uses a separate
>            session table for each trunk or not?
>            --> Something like #clients * 32 (or 64) nfsd
>                  threads running on the server.
>

Experimentally, I determined that 768 threads is sufficient.  But your
formula would suggest > 2500, which is a lot of threads!  I'll keep it in
mind if I ever reach 768, though.


>
> rick
>
> -Alan
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"
>
>


More information about the freebsd-fs mailing list