Skip to content

Commit

Permalink
Improve mg_aliquot mah
Browse files Browse the repository at this point in the history
When calculating mg_aliquot alike to openzfs#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 <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored-By: iXsystems, Inc.
Closes openzfs#13388
  • Loading branch information
amotin authored and andrewc12 committed Sep 23, 2022
1 parent 1f47b0b commit 9419563
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
6 changes: 3 additions & 3 deletions man/man4/zfs.4
Original file line number Diff line number Diff line change
Expand Up @@ -218,12 +218,12 @@ For L2ARC devices less than 1GB, the amount of data
evicts is significant compared to the amount of restored L2ARC data.
In this case, do not write log blocks in L2ARC in order not to waste space.
.
.It Sy metaslab_aliquot Ns = Ns Sy 524288 Ns B Po 512kB Pc Pq ulong
.It Sy metaslab_aliquot Ns = Ns Sy 1048576 Ns B Po 1MB Pc Pq ulong
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, ZFS will try to write this amount of data
to a top-level vdev before moving on to the next one.
In normal operation, ZFS will try to write this amount of data to each disk
before moving on to the next top-level vdev.
.
.It Sy metaslab_bias_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
Enable metaslab group biasing based on their vdevs' over- or under-utilization
Expand Down
9 changes: 5 additions & 4 deletions module/zfs/metaslab.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 ZFS_MODULE_ULONG metaslab_aliquot = 512 << 10;
static unsigned long metaslab_aliquot = 1024 * 1024;

/*
* For testing, make some blocks above a certain size be gang blocks.
Expand Down Expand Up @@ -900,7 +900,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) {
Expand Down

0 comments on commit 9419563

Please sign in to comment.