summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2019-08-15 21:04:34 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2019-08-15 21:04:34 +0000
commitadf665b5e735d87cf7d6b4e8932fb7dce88e42ad (patch)
treee65c5347c0c0e56004b4812a74ca46897e8127e6 /usr/src
parent347d48002595b630e29ac3081e3427710c2d0bd4 (diff)
downloadillumos-joyent-adf665b5e735d87cf7d6b4e8932fb7dce88e42ad.tar.gz
OS-7917 excessive zil_commit latency
Reviewed by: Kody Kantor <kody.kantor@joyent.com> Approved by: Kody Kantor <kody.kantor@joyent.com>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/fs/zfs/zil.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/usr/src/uts/common/fs/zfs/zil.c b/usr/src/uts/common/fs/zfs/zil.c
index fb8b62936a..c0b90b6a13 100644
--- a/usr/src/uts/common/fs/zfs/zil.c
+++ b/usr/src/uts/common/fs/zfs/zil.c
@@ -107,8 +107,23 @@ boolean_t zil_nocacheflush = B_FALSE;
* Limit SLOG write size per commit executed with synchronous priority.
* Any writes above that will be executed with lower (asynchronous) priority
* to limit potential SLOG device abuse by single active ZIL writer.
+ *
+ * The default upstream value for zil_slog_bulk is:
+ * uint64_t zil_slog_bulk = 768 * 1024;
+ * For SmartOS, we default to using a high value to essentially disable this
+ * behavior.
+ *
+ * Because the default value of this tunable forces some zil_commit writes down
+ * to io_priority ZIO_PRIORITY_ASYNC_WRITE, those zio's would be in the same
+ * zio pipeline queue as all of the async spa_sync zio's. This can lead to
+ * serious latency problems for the user-level application code because it is
+ * blocked on completion of the zil_commit. We see this when a spa_sync zio is
+ * running slow (e.g. when metaslab loading takes a long time in the
+ * zio_dva_allocate pipeline stage), thus delaying all zio's backed up in the
+ * ZIO_PRIORITY_ASYNC_WRITE queue. For SmartOS, we choose to keep all
+ * zil_commmit zio's at ZIO_PRIORITY_SYNC_WRITE.
*/
-uint64_t zil_slog_bulk = 768 * 1024;
+uint64_t zil_slog_bulk = 0x100000000ULL;
static kmem_cache_t *zil_lwb_cache;
static kmem_cache_t *zil_zcw_cache;