aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs
diff options
context:
space:
mode:
authorTony Nguyen <[email protected]>2019-08-28 15:56:54 -0600
committerBrian Behlendorf <[email protected]>2019-08-28 14:56:54 -0700
commit8d042842815f33d2e4ab919a695139b11b7ed0c2 (patch)
tree556fe0036452cb823a06856bab1a7bfd61f0bc8d /module/zfs
parent07a328dde4937a49aa975e8dffea2e6f8754a097 (diff)
Use smaller default slack/delta value for schedule_hrtimeout_range()
For interrupt coalescing, cv_timedwait_hires() uses a 100us slack/delta for calls to schedule_hrtimeout_range(). This 100us slack can be costly for small writes. This change improves small write performance by passing resolution `res` parameter to schedule_hrtimeout_range() to be used as delta/slack. A new tunable `spl_schedule_hrtimeout_slack_us` is added to preserve old behavior when desired. Performance observations on 8K recordsize filesystem: - 8K random writes at 1-64 threads, up to 60% improvement for one thread and smaller gains as thread count increases. At >64 threads, 2-5% decrease in performance was observed. - 8K sequential writes, similar 60% improvement for one thread and leveling out around 64 threads. At >64 threads, 5-10% decrease in performance was observed. - 128K sequential write sees 1-5 for the 128K. No observed regression at high thread count. Testing done on Ubuntu 18.04 with 4.15 kernel, 8vCPUs and SSD storage on VMware ESX. Reviewed-by: Richard Elling <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Matt Ahrens <[email protected]> Signed-off-by: Tony Nguyen <[email protected]> Closes #9217
Diffstat (limited to 'module/zfs')
-rw-r--r--module/zfs/mmp.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/module/zfs/mmp.c b/module/zfs/mmp.c
index cd5603a1a..1ffd862da 100644
--- a/module/zfs/mmp.c
+++ b/module/zfs/mmp.c
@@ -672,7 +672,7 @@ mmp_thread(void *arg)
CALLB_CPR_SAFE_BEGIN(&cpr);
(void) cv_timedwait_sig_hires(&mmp->mmp_thread_cv,
- &mmp->mmp_thread_lock, next_time, USEC2NSEC(1),
+ &mmp->mmp_thread_lock, next_time, USEC2NSEC(100),
CALLOUT_FLAG_ABSOLUTE);
CALLB_CPR_SAFE_END(&cpr, &mmp->mmp_thread_lock);
}