Skip to content

Commit

Permalink
Make metaslab_aliquot a module parameter.
Browse files Browse the repository at this point in the history
This seems generally useful. metaslab_aliquot is the ZFS allocation
granularity, which is roughly equivalent to what is called the stripe
size in traditional RAID arrays. It seems relevant to performance
tuning.

Signed-off-by: Etienne Dechamps <etienne@edechamps.fr>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
  • Loading branch information
dechamps authored and behlendorf committed Jun 22, 2015
1 parent e8fe668 commit 99b14de
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
14 changes: 14 additions & 0 deletions man/man5/zfs-module-parameters.5
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,20 @@ Max write bytes per interval
Default value: \fB8,388,608\fR.
.RE

.sp
.ne 2
.na
\fBmetaslab_aliquot\fR (ulong)
.ad
.RS 12n

This comment has been minimized.

Copy link
@thegreatgazoo

thegreatgazoo Jun 30, 2015

This seemed inaccurate, from metaslab_group_activate():

mg->mg_aliquot = metaslab_aliquot * MAX(1, mg->mg_vd->vdev_children);

So it's multiplied by the number of children of a top-level vdev.

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.
.sp
Default value: \fB524,288\fR.
.RE

.sp
.ne 2
.na
Expand Down
5 changes: 4 additions & 1 deletion module/zfs/metaslab.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
* operation, we will try to write this amount of data to a top-level vdev
* before moving on to the next one.
*/
uint64_t metaslab_aliquot = 512ULL << 10;
unsigned long metaslab_aliquot = 512 << 10;

uint64_t metaslab_gang_bang = SPA_MAXBLOCKSIZE + 1; /* force gang blocks */

Expand Down Expand Up @@ -2707,6 +2707,7 @@ metaslab_check_free(spa_t *spa, const blkptr_t *bp)
}

#if defined(_KERNEL) && defined(HAVE_SPL)
module_param(metaslab_aliquot, ulong, 0644);
module_param(metaslab_debug_load, int, 0644);
module_param(metaslab_debug_unload, int, 0644);
module_param(metaslab_preload_enabled, int, 0644);
Expand All @@ -2717,6 +2718,8 @@ module_param(metaslab_fragmentation_factor_enabled, int, 0644);
module_param(metaslab_lba_weighting_enabled, int, 0644);
module_param(metaslab_bias_enabled, int, 0644);

MODULE_PARM_DESC(metaslab_aliquot,
"allocation granularity (a.k.a. stripe size)");
MODULE_PARM_DESC(metaslab_debug_load,
"load all metaslabs when pool is first opened");
MODULE_PARM_DESC(metaslab_debug_unload,
Expand Down

0 comments on commit 99b14de

Please sign in to comment.