Default to zfs_dmu_offset_next_sync=1
Strict hole reporting was previously disabled by default as a performance optimization. However, this has lead to confusion over the expected behavior and a variety of workarounds being adopted by consumers of ZFS. Change the default behavior to always report holes and force the TXG sync. Reviewed-by: Matthew Ahrens <mahrens@delphix.com> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #12746
This commit is contained in:
parent
5dc6fc2b73
commit
05b3eb6d23
|
@ -1591,12 +1591,12 @@ Allow no-operation writes.
|
||||||
The occurrence of nopwrites will further depend on other pool properties
|
The occurrence of nopwrites will further depend on other pool properties
|
||||||
.Pq i.a. the checksumming and compression algorithms .
|
.Pq i.a. the checksumming and compression algorithms .
|
||||||
.
|
.
|
||||||
.It Sy zfs_dmu_offset_next_sync Ns = Ns Sy 0 Ns | Ns 1 Pq int
|
.It Sy zfs_dmu_offset_next_sync Ns = Ns Sy 1 Ns | Ns 0 Pq int
|
||||||
Enable forcing TXG sync to find holes.
|
Enable forcing TXG sync to find holes.
|
||||||
When enabled forces ZFS to act like prior versions when
|
When enabled forces ZFS to sync data when
|
||||||
.Sy SEEK_HOLE No or Sy SEEK_DATA
|
.Sy SEEK_HOLE No or Sy SEEK_DATA
|
||||||
flags are used, which, when a dnode is dirty,
|
flags are used allowing holes in a file to be accurately reported.
|
||||||
causes TXGs to be synced so that this data can be found.
|
When disabled holes will not be reported in recently dirtied files.
|
||||||
.
|
.
|
||||||
.It Sy zfs_pd_bytes_max Ns = Ns Sy 52428800 Ns B Po 50MB Pc Pq int
|
.It Sy zfs_pd_bytes_max Ns = Ns Sy 52428800 Ns B Po 50MB Pc Pq int
|
||||||
The number of bytes which should be prefetched during a pool traversal, like
|
The number of bytes which should be prefetched during a pool traversal, like
|
||||||
|
|
|
@ -73,9 +73,13 @@ int zfs_nopwrite_enabled = 1;
|
||||||
unsigned long zfs_per_txg_dirty_frees_percent = 5;
|
unsigned long zfs_per_txg_dirty_frees_percent = 5;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enable/disable forcing txg sync when dirty in dmu_offset_next.
|
* Enable/disable forcing txg sync when dirty checking for holes with lseek().
|
||||||
|
* By default this is enabled to ensure accurate hole reporting, it can result
|
||||||
|
* in a significant performance penalty for lseek(SEEK_HOLE) heavy workloads.
|
||||||
|
* Disabling this option will result in holes never being reported in dirty
|
||||||
|
* files which is always safe.
|
||||||
*/
|
*/
|
||||||
int zfs_dmu_offset_next_sync = 0;
|
int zfs_dmu_offset_next_sync = 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Limit the amount we can prefetch with one call to this amount. This
|
* Limit the amount we can prefetch with one call to this amount. This
|
||||||
|
@ -2107,8 +2111,8 @@ restart:
|
||||||
* If the zfs_dmu_offset_next_sync module option is enabled
|
* If the zfs_dmu_offset_next_sync module option is enabled
|
||||||
* then strict hole reporting has been requested. Dirty
|
* then strict hole reporting has been requested. Dirty
|
||||||
* dnodes must be synced to disk to accurately report all
|
* dnodes must be synced to disk to accurately report all
|
||||||
* holes. When disabled (the default) dirty dnodes are
|
* holes. When disabled dirty dnodes are reported to not
|
||||||
* reported to not have any holes which is always safe.
|
* have any holes which is always safe.
|
||||||
*
|
*
|
||||||
* When called by zfs_holey_common() the zp->z_rangelock
|
* When called by zfs_holey_common() the zp->z_rangelock
|
||||||
* is held to prevent zfs_write() and mmap writeback from
|
* is held to prevent zfs_write() and mmap writeback from
|
||||||
|
|
Loading…
Reference in New Issue