]> git.proxmox.com Git - mirror_zfs.git/commit - module/zfs/spa.c
zfs initialize performance enhancements
authorGeorge Wilson <george.wilson@delphix.com>
Wed, 19 Dec 2018 16:20:39 +0000 (09:20 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 7 Jan 2019 19:03:08 +0000 (11:03 -0800)
commitc10d37dd9f5d56e19330add732f1a713250d24f7
treea43f6b7c1592612fe4277bcaf5d99c02543523b8
parent619f09769393d4e0cbaa5f662362138e1c699159
zfs initialize performance enhancements

PROBLEM
========

When invoking "zpool initialize" on a pool the command will
create a thread to initialize each disk. Unfortunately, it does
this serially across many transaction groups which can result
in commands taking a long time to return to the user and may
appear hung. The same thing is true when trying to suspend/cancel
the operation.

SOLUTION
=========

This change refactors the way we invoke the initialize interface
to ensure we can start or stop the intialization in just a few
transaction groups.

When stopping or cancelling a vdev initialization perform it
in two phases.  First signal each vdev initialization thread
that it should exit, then after all threads have been signaled
wait for them to exit.

On a pool with 40 leaf vdevs this reduces the vdev initialize
stop/cancel time from ~10 minutes to under a second.  The reason
for this is spa_vdev_initialize() no longer needs to wait on
multiple full TXGs per leaf vdev being stopped.

This commit additionally adds some missing checks for the passed
"initialize_vdevs" input nvlist.  The contents of the user provided
input "initialize_vdevs" nvlist must be validated to ensure all
values are uint64s.  This is done in zfs_ioc_pool_initialize() in
order to keep all of these checks in a single location.

Updated the innvl and outnvl comments to match the formatting used
for all other new sytle ioctls.

Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Reviewed-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: George Wilson <george.wilson@delphix.com>
Closes #8230
cmd/ztest/ztest.c
include/sys/spa.h
include/sys/vdev_impl.h
include/sys/vdev_initialize.h
module/zfs/spa.c
module/zfs/spa_misc.c
module/zfs/vdev.c
module/zfs/vdev_initialize.c
module/zfs/vdev_removal.c
module/zfs/zfs_ioctl.c