]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Illumos 5161 - add tunable for number of metaslabs per vdev
authorMatthew Ahrens <mahrens@delphix.com>
Sat, 13 Sep 2014 14:13:00 +0000 (16:13 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 23 Sep 2014 17:00:02 +0000 (10:00 -0700)
5161 add tunable for number of metaslabs per vdev
Reviewed by: Alex Reece <alex.reece@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Paul Dagnelie <paul.dagnelie@delphix.com>
Reviewed by: Saso Kiselkov <skiselkov.ml@gmail.com>
Reviewed by: Richard Elling <richard.elling@gmail.com>
Approved by: Richard Lowe <richlowe@richlowe.net>

References:
  https://www.illumos.org/issues/5161
  https://github.com/illumos/illumos-gate/commit/bf3e216

Ported by: Turbo Fredriksson <turbo@bayour.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2698

man/man5/zfs-module-parameters.5
module/zfs/vdev.c

index eff5344ebd1868c85011bc6fd84fa1903ab6719a..9c5d70de8be858652b763951478ff187892d8306 100644 (file)
@@ -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
index 7c689b3c882d5e3c9a47d889968fa1eea4269228..45315d3a148ccec274714c70005ad1429f91e26f 100644 (file)
 #include <sys/dsl_scan.h>
 #include <sys/zvol.h>
 
+/*
+ * 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