mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 19:28:53 +03:00
OpenZFS 9617 - too-frequent TXG sync causes excessive write inflation
Porting notes: * Renamed zfs_dirty_data_sync_pct to zfs_dirty_data_sync_percent and changed the type to be consistent with the other dirty module params. * Updated zfs-module-parameters.5 accordingly. Authored by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com> Reviewed by: Brad Lewis <brad.lewis@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Andrew Stormont <andyjstormont@gmail.com> Reviewed-by: George Melikov <mail@gmelikov.ru> Approved by: Robert Mustacchi <rm@joyent.com> Ported-by: Brian Behlendorf <behlendorf1@llnl.gov> OpenZFS-issue: https://illumos.org/issues/9617 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/7928f4ba Closes #7976
This commit is contained in:
committed by
Brian Behlendorf
parent
58c0f374f1
commit
dfbe267503
@@ -106,9 +106,11 @@ int zfs_dirty_data_max_percent = 10;
|
||||
int zfs_dirty_data_max_max_percent = 25;
|
||||
|
||||
/*
|
||||
* If there is at least this much dirty data, push out a txg.
|
||||
* If there's at least this much dirty data (as a percentage of
|
||||
* zfs_dirty_data_max), push out a txg. This should be less than
|
||||
* zfs_vdev_async_write_active_min_dirty_percent.
|
||||
*/
|
||||
unsigned long zfs_dirty_data_sync = 64 * 1024 * 1024;
|
||||
int zfs_dirty_data_sync_percent = 20;
|
||||
|
||||
/*
|
||||
* Once there is this amount of dirty data, the dmu_tx_delay() will kick in
|
||||
@@ -879,10 +881,12 @@ dsl_pool_need_dirty_delay(dsl_pool_t *dp)
|
||||
{
|
||||
uint64_t delay_min_bytes =
|
||||
zfs_dirty_data_max * zfs_delay_min_dirty_percent / 100;
|
||||
uint64_t dirty_min_bytes =
|
||||
zfs_dirty_data_max * zfs_dirty_data_sync_percent / 100;
|
||||
boolean_t rv;
|
||||
|
||||
mutex_enter(&dp->dp_lock);
|
||||
if (dp->dp_dirty_total > zfs_dirty_data_sync)
|
||||
if (dp->dp_dirty_total > dirty_min_bytes)
|
||||
txg_kick(dp);
|
||||
rv = (dp->dp_dirty_total > delay_min_bytes);
|
||||
mutex_exit(&dp->dp_lock);
|
||||
@@ -1345,7 +1349,7 @@ module_param(zfs_dirty_data_max_max, ulong, 0444);
|
||||
MODULE_PARM_DESC(zfs_dirty_data_max_max,
|
||||
"zfs_dirty_data_max upper bound in bytes");
|
||||
|
||||
module_param(zfs_dirty_data_sync, ulong, 0644);
|
||||
module_param(zfs_dirty_data_sync_percent, int, 0644);
|
||||
MODULE_PARM_DESC(zfs_dirty_data_sync, "sync txg when this much dirty data");
|
||||
|
||||
module_param(zfs_delay_scale, ulong, 0644);
|
||||
|
||||
Reference in New Issue
Block a user