]> git.proxmox.com Git - mirror_zfs.git/commit
MMP writes rotate over leaves
authorOlaf Faaland <faaland1@llnl.gov>
Tue, 12 Mar 2019 17:37:06 +0000 (10:37 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 12 Mar 2019 17:37:06 +0000 (10:37 -0700)
commit3d31aad83e6420d7a2f661ca077afdac13f50b77
tree7eb5fc97bdc07188d2d415464ad9c39176bd3fd4
parentb1b94e9644ee6af27ce71d127618b7d5323561c6
MMP writes rotate over leaves

Instead of choosing a leaf vdev quasi-randomly, by starting at the root
vdev and randomly choosing children, rotate over leaves to issue MMP
writes.  This fixes an issue in a pool whose top-level vdevs have
different numbers of leaves.

The issue is that the frequency at which individual leaves are chosen
for MMP writes is based not on the total number of leaves but based on
how many siblings the leaves have.

For example, in a pool like this:

       root-vdev
   +------+---------------+
vdev1                   vdev2
  |                       |
  |                +------+-----+-----+----+
disk1             disk2 disk3 disk4 disk5 disk6

vdev1 and vdev2 will each be chosen 50% of the time.  Every time vdev1
is chosen, disk1 will be chosen.  However, every time vdev2 is chosen,
disk2 is chosen 20% of the time.  As a result, disk1 will be sent 5x as
many MMP writes as disk2.

This may create wear issues in the case of SSDs.  It also reduces the
effectiveness of MMP as it depends on the writes being evenly
distributed for the case where some devices fail or are partitioned.

The new code maintains a list of leaf vdevs in the pool.  MMP records
the last leaf used for an MMP write in mmp->mmp_last_leaf.  To choose
the next leaf, MMP starts at mmp->mmp_last_leaf and traverses the list,
continuing from the head if the tail is reached.  It stops when a
suitable leaf is found or all leaves have been examined.

Added a test to verify MMP write distribution is even.

Reviewed-by: Tom Caputi <tcaputi@datto.com>
Reviewed-by: Kash Pande <kash@tripleback.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
Closes #7953
include/sys/mmp.h
include/sys/spa_impl.h
include/sys/vdev_impl.h
module/zfs/mmp.c
module/zfs/spa_misc.c
module/zfs/vdev.c
tests/runfiles/linux.run
tests/zfs-tests/tests/functional/mmp/Makefile.am
tests/zfs-tests/tests/functional/mmp/mmp_write_distribution.ksh [new file with mode: 0755]