]> granicus.if.org Git - zfs/commit
make zil max block size tunable
authorMatthew Ahrens <mahrens@delphix.com>
Mon, 10 Jun 2019 18:48:42 +0000 (11:48 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 10 Jun 2019 18:48:42 +0000 (11:48 -0700)
commitb8738257c2607c73c731ce8e0fd73282b266d6ef
treed73e90809b9f413b8894d8ee7fc6ad8a11bff7fe
parent5a902f5aaa1fbf6f7e459ec29f6d1d988ec78b0a
make zil max block size tunable

We've observed that on some highly fragmented pools, most metaslab
allocations are small (~2-8KB), but there are some large, 128K
allocations.  The large allocations are for ZIL blocks.  If there is a
lot of fragmentation, the large allocations can be hard to satisfy.

The most common impact of this is that we need to check (and thus load)
lots of metaslabs from the ZIL allocation code path, causing sync writes
to wait for metaslabs to load, which can take a second or more.  In the
worst case, we may not be able to satisfy the allocation, in which case
the ZIL will resort to txg_wait_synced() to ensure the change is on
disk.

To provide a workaround for this, this change adds a tunable that can
reduce the size of ZIL blocks.

External-issue: DLPX-61719
Reviewed-by: George Wilson <george.wilson@delphix.com>
Reviewed-by: Paul Dagnelie <pcd@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #8865
cmd/ztest/ztest.c
include/sys/zil.h
include/sys/zil_impl.h
man/man5/zfs-module-parameters.5
module/zfs/zfs_log.c
module/zfs/zil.c
module/zfs/zvol.c