diff options
author | Alexander Motin <[email protected]> | 2023-01-24 12:20:32 -0500 |
---|---|---|
committer | GitHub <[email protected]> | 2023-01-24 09:20:32 -0800 |
commit | 0f740a4f1dd444fb961e9070a3eb5d3bc68a03b3 (patch) | |
tree | fdf545d2bab34d1d34883391e9f41e6c008ef2cf /man | |
parent | 037e4f25367aaefb68f3c3a67e4c737de420727f (diff) |
Introduce minimal ZIL block commit delay
Despite all optimizations, tests on actual hardware show that FreeBSD
kernel can't sleep for less then ~2us. Similar tests on Linux show
~50us delay at least from nanosleep() (haven't tested inside kernel).
It means that on very fast log device ZIL may not be able to satisfy
zfs_commit_timeout_pct block commit timeout, increasing log latency
more than desired.
Handle that by introduction of zil_min_commit_timeout parameter,
specifying minimal timeout value where additional delays to aggregate
writes may be skipped. Also skip delays if the LWB is more than 7/8
full, that often happens if I/O sizes are constant and match one of
LWB sizes. Both things are applied only if there were no already
outstanding log blocks, that may indicate single-threaded workload,
that by definition can not benefit from the commit delays.
While there, add short time moving average to zl_last_lwb_latency to
make it more stable.
Tests of single-threaded 4KB writes to NVDIMM SLOG on FreeBSD show IOPS
increase by 9% instead of expected 5%. For zfs_commit_timeout_pct of
1 there IOPS increase by 5.5% instead of expected 1%.
Reviewed-by: Allan Jude <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Prakash Surya <[email protected]>
Signed-off-by: Alexander Motin <[email protected]>
Sponsored by: iXsystems, Inc.
Closes #14418
Diffstat (limited to 'man')
-rw-r--r-- | man/man4/zfs.4 | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/man/man4/zfs.4 b/man/man4/zfs.4 index a3664367a..e20d60134 100644 --- a/man/man4/zfs.4 +++ b/man/man4/zfs.4 @@ -2209,6 +2209,13 @@ On very fragmented pools, lowering this .Pq typically to Sy 36 KiB can improve performance. . +.It Sy zil_min_commit_timeout Ns = Ns Sy 5000 Pq u64 +This sets the minimum delay in nanoseconds ZIL care to delay block commit, +waiting for more records. +If ZIL writes are too fast, kernel may not be able sleep for so short interval, +increasing log latency above allowed by +.Sy zfs_commit_timeout_pct . +. .It Sy zil_nocacheflush Ns = Ns Sy 0 Ns | Ns 1 Pq int Disable the cache flush commands that are normally sent to disk by the ZIL after an LWB write has completed. |