diff options
author | Alexander Motin <[email protected]> | 2022-05-04 14:33:42 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2022-05-04 11:33:42 -0700 |
commit | c55b2932878c444e1bc627a7071787a0e5023d63 (patch) | |
tree | 4c430e8ec7023f8062fd3175ec21156a8cc608b0 /module | |
parent | 34dbc618f50cfcd392f90af80c140398c38cbcd1 (diff) |
Improve mg_aliquot math
When calculating mg_aliquot alike to #12046 use number of unique data
disks in the vdev, not the total number of children vdev. Increase
default value of the tunable from 512KB to 1MB to compensate.
Before this change each disk in striped pool was getting 512KB of
sequential data, in 2-wide mirror -- 1MB, in 3-wide RAIDZ1 -- 768KB.
After this change in all the cases each disk should get 1MB.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Ryan Moeller <[email protected]>
Signed-off-by: Alexander Motin <[email protected]>
Sponsored-By: iXsystems, Inc.
Closes #13388
Diffstat (limited to 'module')
-rw-r--r-- | module/zfs/metaslab.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c index f9c16f00d..ab32bfec1 100644 --- a/module/zfs/metaslab.c +++ b/module/zfs/metaslab.c @@ -48,10 +48,10 @@ /* * Metaslab granularity, in bytes. This is roughly similar to what would be * referred to as the "stripe size" in traditional RAID arrays. In normal - * operation, we will try to write this amount of data to a top-level vdev - * before moving on to the next one. + * operation, we will try to write this amount of data to each disk before + * moving on to the next top-level vdev. */ -static unsigned long metaslab_aliquot = 512 << 10; +static unsigned long metaslab_aliquot = 1024 * 1024; /* * For testing, make some blocks above a certain size be gang blocks. @@ -899,7 +899,8 @@ metaslab_group_activate(metaslab_group_t *mg) if (++mg->mg_activation_count <= 0) return; - mg->mg_aliquot = metaslab_aliquot * MAX(1, mg->mg_vd->vdev_children); + mg->mg_aliquot = metaslab_aliquot * MAX(1, + vdev_get_ndisks(mg->mg_vd) - vdev_get_nparity(mg->mg_vd)); metaslab_group_alloc_update(mg); if ((mgprev = mc->mc_allocator[0].mca_rotor) == NULL) { |