NFS behavior on a ZFS dataset with no quota remaining

Garrett Wollman wollman at bimajority.org
Thu Apr 17 04:01:21 UTC 2014


Recently one of our users managed to constipate one of our NFS servers
in an odd way.  They hit the quota on their dataset, and rather than
having all of their writes error out as they should have, the NFS
server instead stopped responding to all requests.  While this was
happening, sysctl vfs.nfsd reported:

vfs.nfsd.disable_checkutf8: 0
vfs.nfsd.server_max_nfsvers: 4
vfs.nfsd.server_min_nfsvers: 2
vfs.nfsd.nfs_privport: 0
vfs.nfsd.async: 0
vfs.nfsd.enable_locallocks: 0
vfs.nfsd.issue_delegations: 0
vfs.nfsd.commit_miss: 0
vfs.nfsd.commit_blks: 0
vfs.nfsd.mirrormnt: 1
vfs.nfsd.cachetcp: 1
vfs.nfsd.tcpcachetimeo: 300
vfs.nfsd.udphighwater: 500
vfs.nfsd.tcphighwater: 150000
vfs.nfsd.minthreads: 16
vfs.nfsd.maxthreads: 64
vfs.nfsd.threads: 18
vfs.nfsd.request_space_used: 36520872
vfs.nfsd.request_space_used_highest: 47536420
vfs.nfsd.request_space_high: 47185920
vfs.nfsd.request_space_low: 31457280
vfs.nfsd.request_space_throttled: 1
vfs.nfsd.request_space_throttle_count: 8451
vfs.nfsd.fha.enable: 1
vfs.nfsd.fha.bin_shift: 22
vfs.nfsd.fha.max_nfsds_per_fh: 8
vfs.nfsd.fha.max_reqs_per_nfsd: 0
vfs.nfsd.fha.fhe_stats: fhe 0xfffffe103fcab6c0: {
    fh: 32922711030235146
    num_rw: 457
    num_exclusive: 7
    num_threads: 2
    thread 0xfffffe0112f72a00 offset 26738688 (count 457)
    thread 0xfffffe04b0751080 offset 4390912 (count 7)
}, fhe 0xfffffe02fe8acd80: {
    fh: 32922925778599946
    num_rw: 90
    num_exclusive: 0
    num_threads: 2
    thread 0xfffffe0e77ee2c80 offset 6946816 (count 17)
    thread 0xfffffe0d25c1f280 offset 2752512 (count 73)
}

I increased their quota by a terabyte, and NFS immediately started
working again, for all clients.  But this seems, um, very bad.  Can
anyone explain what's going on in either NFS or ZFS that could cause
this?  I must emphasize that the zpool was by no means out of space;
it was merely one client dataset (out of many) that hit its quota.

A few seconds after increasing the quota, the sysctl tree looks like
this:

vfs.nfsd.disable_checkutf8: 0
vfs.nfsd.server_max_nfsvers: 4
vfs.nfsd.server_min_nfsvers: 2
vfs.nfsd.nfs_privport: 0
vfs.nfsd.async: 0
vfs.nfsd.enable_locallocks: 0
vfs.nfsd.issue_delegations: 0
vfs.nfsd.commit_miss: 0
vfs.nfsd.commit_blks: 0
vfs.nfsd.mirrormnt: 1
vfs.nfsd.cachetcp: 1
vfs.nfsd.tcpcachetimeo: 300
vfs.nfsd.udphighwater: 500
vfs.nfsd.tcphighwater: 150000
vfs.nfsd.minthreads: 16
vfs.nfsd.maxthreads: 64
vfs.nfsd.threads: 36
vfs.nfsd.request_space_used: 71688
vfs.nfsd.request_space_used_highest: 47536420
vfs.nfsd.request_space_high: 47185920
vfs.nfsd.request_space_low: 31457280
vfs.nfsd.request_space_throttled: 0
vfs.nfsd.request_space_throttle_count: 8455
vfs.nfsd.fha.enable: 1
vfs.nfsd.fha.bin_shift: 22
vfs.nfsd.fha.max_nfsds_per_fh: 8
vfs.nfsd.fha.max_reqs_per_nfsd: 0
vfs.nfsd.fha.fhe_stats: fhe 0xfffffe10807ad540: {
    fh: 32896773722738482
    num_rw: 9
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0035dc6380 offset 131072 (count 9)
}, fhe 0xfffffe14197de7c0: {
    fh: 32757316134636194
    num_rw: 8
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe02c3290800 offset 131072 (count 8)
}, fhe 0xfffffe06f2280cc0: {
    fh: 32869182852828802
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe038b3a8200 offset 0 (count 2)
}, fhe 0xfffffe0c90f5f400: {
    fh: 32493416164103072
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0ea55e4d00 offset 0 (count 2)
}, fhe 0xfffffe0ca9bd3d40: {
    fh: 32896984176135987
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe038b41ee00 offset 0 (count 2)
}, fhe 0xfffffe07c47884c0: {
    fh: 32897044305678131
    num_rw: 4
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe03aff63300 offset 131072 (count 4)
}, fhe 0xfffffe0aa9b151c0: {
    fh: 32892809467924243
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0f928e3780 offset 0 (count 2)
}, fhe 0xfffffe0762c91300: {
    fh: 32609079633383714
    num_rw: 1
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0a44496700 offset 0 (count 1)
}, fhe 0xfffffe11b0bf43c0: {
    fh: 32869363241455234
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0d550b4900 offset 0 (count 2)
}, fhe 0xfffffe1771ebd740: {
    fh: 32753381944593018
    num_rw: 6
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe1342368700 offset 131072 (count 6)
}, fhe 0xfffffe0ba23a52c0: {
    fh: 32679023175800193
    num_rw: 1
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe07460a8280 offset 0 (count 1)
}, fhe 0xfffffe092bd460c0: {
    fh: 32770347065412426
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0446182400 offset 0 (count 2)
}, fhe 0xfffffe07d65df600: {
    fh: 32416961451261960
    num_rw: 1
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe1596ead400 offset 0 (count 1)
}, fhe 0xfffffe036487ab40: {
    fh: 32746333903260256
    num_rw: 1
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0955989380 offset 0 (count 1)
}, fhe 0xfffffe12db02e640: {
    fh: 32803607292153112
    num_rw: 0
    num_exclusive: 1
    num_threads: 1
    thread 0xfffffe0a88c8b780 offset 0 (count 1)
}, fhe 0xfffffe0c50823a00: {
    fh: 32696404908442640
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe04e4a7fc00 offset 1305526272 (count 2)
}, fhe 0xfffffe1193fd7000: {
    fh: 32623167126115560
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe0551cb4280 offset 0 (count 2)
}, fhe 0xfffffe0eeacd33c0: {
    fh: 32809096260357425
    num_rw: 2
    num_exclusive: 0
    num_threads: 1
    thread 0xfffffe1516ecdc80 offset 0 (count 2)
}

Unfortunately, I did not think to take a procstat -kk of the nfsd
threads.

-GAWollman


More information about the freebsd-fs mailing list