Illumos 5161 - add tunable for number of metaslabs per vdev

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
This commit is contained in:
Matthew Ahrens 2014-09-13 16:13:00 +02:00 committed by Brian Behlendorf
parent ebcf49365a
commit b8bcca18f7
2 changed files with 24 additions and 2 deletions

View 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. Use \fB1\fR for yes (default) and \fB0\fR for no.
.RE .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 .sp
.ne 2 .ne 2
.na .na

View File

@ -45,6 +45,12 @@
#include <sys/dsl_scan.h> #include <sys/dsl_scan.h>
#include <sys/zvol.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. * Virtual device management.
*/ */
@ -1582,9 +1588,9 @@ void
vdev_metaslab_set_size(vdev_t *vd) 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); 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_online);
EXPORT_SYMBOL(vdev_offline); EXPORT_SYMBOL(vdev_offline);
EXPORT_SYMBOL(vdev_clear); 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 #endif