From 1369195c1b1e0b2c45520ba814e5e6f7e602d8ff Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Wed, 11 May 2016 12:41:12 +0200 Subject: [PATCH 007/325] ZFS: Attempt to let the spa deadman store the last and the maximum vdev sync delay As it's useful to know when tuning the timeout. XXX: This looks like it should work, but actually doesn't. Obtained from: ElectroBSD --- .../contrib/opensolaris/uts/common/fs/zfs/vdev.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c index c91551062d3b..2b2dc374b068 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c @@ -98,6 +98,16 @@ SYSCTL_NODE(_vfs_zfs, OID_AUTO, vdev, CTLFLAG_RW, 0, "ZFS VDEV"); static uint64_t zfs_max_auto_ashift = SPA_MAXASHIFT; static uint64_t zfs_min_auto_ashift = SPA_MINASHIFT; +static uint64_t zfs_max_vdev_sync_delay = 0; +SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, vdev_sync_delay_max, CTLFLAG_RWTUN, + &zfs_max_vdev_sync_delay, 0, + "Maximum vdev sync delay seen by the spa deadman"); + +static uint64_t zfs_last_vdev_sync_delay = 0; +SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, vdev_sync_delay_last, CTLFLAG_RWTUN, + &zfs_last_vdev_sync_delay, 0, + "Last vdev sync delay seen seen by the spa deadman"); + static int sysctl_vfs_zfs_max_auto_ashift(SYSCTL_HANDLER_ARGS) { @@ -4502,6 +4512,9 @@ vdev_deadman(vdev_t *vd) */ fio = avl_first(&vq->vq_active_tree); delta = gethrtime() - fio->io_timestamp; + zfs_last_vdev_sync_delay = delta; + if (zfs_max_vdev_sync_delay < delta) + zfs_max_vdev_sync_delay = delta; if (delta > spa_deadman_synctime(spa)) { vdev_dbgmsg(vd, "SLOW IO: zio timestamp " "%lluns, delta %lluns, last io %lluns", -- 2.32.0