From b8bcca18f709abd3d1b7649ebdcb4aeab1e2eb61 Mon Sep 17 00:00:00 2001 From: Matthew Ahrens Date: Sat, 13 Sep 2014 16:13:00 +0200 Subject: [PATCH] Illumos 5161 - add tunable for number of metaslabs per vdev 5161 add tunable for number of metaslabs per vdev Reviewed by: Alex Reece Reviewed by: Christopher Siden Reviewed by: George Wilson Reviewed by: Paul Dagnelie Reviewed by: Saso Kiselkov Reviewed by: Richard Elling Approved by: Richard Lowe References: https://www.illumos.org/issues/5161 https://github.com/illumos/illumos-gate/commit/bf3e216 Ported by: Turbo Fredriksson Signed-off-by: Brian Behlendorf Closes #2698 --- man/man5/zfs-module-parameters.5 | 11 +++++++++++ module/zfs/vdev.c | 15 +++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/man/man5/zfs-module-parameters.5 b/man/man5/zfs-module-parameters.5 index eff5344eb..9c5d70de8 100644 --- a/man/man5/zfs-module-parameters.5 +++ b/man/man5/zfs-module-parameters.5 @@ -179,6 +179,17 @@ Enable use of the fragmentation metric in computing metaslab weights. Use \fB1\fR for yes (default) and \fB0\fR for no. .RE +.sp +.ne 2 +.na +\fBmetaslabs_per_vdev\fR (int) +.ad +.RS 12n +When a vdev is added, it will be divided into approximately (but no more than) this number of metaslabs. +.sp +Default value: \fB200\fR. +.RE + .sp .ne 2 .na diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c index 7c689b3c8..45315d3a1 100644 --- a/module/zfs/vdev.c +++ b/module/zfs/vdev.c @@ -45,6 +45,12 @@ #include #include +/* + * When a vdev is added, it will be divided into approximately (but no + * more than) this number of metaslabs. + */ +int metaslabs_per_vdev = 200; + /* * Virtual device management. */ @@ -1582,9 +1588,9 @@ void vdev_metaslab_set_size(vdev_t *vd) { /* - * Aim for roughly 200 metaslabs per vdev. + * Aim for roughly metaslabs_per_vdev (default 200) metaslabs per vdev. */ - vd->vdev_ms_shift = highbit64(vd->vdev_asize / 200); + vd->vdev_ms_shift = highbit64(vd->vdev_asize / metaslabs_per_vdev); vd->vdev_ms_shift = MAX(vd->vdev_ms_shift, SPA_MAXBLOCKSHIFT); } @@ -3387,4 +3393,9 @@ EXPORT_SYMBOL(vdev_degrade); EXPORT_SYMBOL(vdev_online); EXPORT_SYMBOL(vdev_offline); EXPORT_SYMBOL(vdev_clear); + +module_param(metaslabs_per_vdev, int, 0644); +MODULE_PARM_DESC(metaslabs_per_vdev, + "Divide added vdev into approximately (but no more than) this number " + "of metaslabs"); #endif