-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature request: Detect and warn slow disk performance #6885
Comments
It seems tuning
|
Interesting. Appears I have yet another problem, out of date manpages. If I understand that correctly, there are two timers: zfs_deadman_checktime and zfs_deadman_synctime. I can understand not wanting to flood logs but synctime defaults to 16 minutes(!??) before entering the more serious hung IO. Not really sure what checktime does or the difference, it defaults to 5 seconds? Guessing they are different types of requests. |
AFAIK:
@h1z1 does this existing functionality address your use case? |
Observer effect aside, one would think if synctime kicked off, it also checked for some condition first :) "zfs_deadman_checktime_ms" is also a fairly recent addition. It almost does, the cases I've run into aren't necessarily purely response time though. The power management in particular wouldn't likely ever hit that unless the drain rate to the disk hit zero. At least ioping had no indication. Had there not been an actual data error I don't know if scrub would have picked it up. Does it have any concept of a performance baseline? This is absolutely the kind of thing SMART monitoring should be altering on if vendors didn't lie. I can also see something like it being useful for virtual disks (ISCSI luns, luks backed devices, etc) |
@h1z1 as of the 0.7 release you can use the There's also the Most of the functionality needed to implement this automatic replacement feature is now in place and it should be pretty straight forward to implement if someone has the time. This can be handled by the ZED in the same way as IO and checksum events. Specifically, when a leaf vdev generates a sufficient number of these events within a given time span the ZED degrades the leaf vdev if there is sufficient redundancy and conditionally kicks in a hot spare. We might want to add a new property to control this behavior since depending on how the pool is being used you may not want this action to be taken automatically. |
@behlendorf - Thank you! That little variable is awesome. I'm less concerned with automatically replacing volumes has having no visibility at all, I can kind of understand why the default time was chosen based on larger arrays with massive amounts of memory but 30 seconds for IO completion is quite high. Dropping it down to 1 second already yielded results. Still not quite sure what the difference between those timers is given despite dropping zfs_deadman_synctime_ms to 2seconds last week, it has not turned up any alerts.
Just to clarify, even zio_delay_max appears to be strictly a latency based metric. Still very handy but it would not have caught the case above where the disks almost went into low RPM or something. |
Right, it was originally choosen to be much much longer than any reasonable IO time in order to avoid false positives.
Correct. |
@h1z1 also consider looking at
|
@tonyhutter Not on the 0.6.x series...
|
I've got a PR to print the IO delays in a separate |
Something to keep in mind #4713 |
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new delays (-d) column to zpool status to show the number of VDEV IO delays. This is the number of IOs that didn't complete in zio_delay_max milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM DELAY testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new slow I/Os (-s) column to zpool status to show the number of VDEV slow I/Os. This is the number of I/Os that didn't complete in zio_slow_io_ms milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM SLOW testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Signed-off-by: Tony Hutter <[email protected]> Closes: openzfs#6885
This patch adds a new slow I/Os (-s) column to zpool status to show the number of VDEV slow I/Os. This is the number of I/Os that didn't complete in zio_slow_io_ms milliseconds. It also adds a new parsable (-p) flag to display exact values. NAME STATE READ WRITE CKSUM SLOW testpool ONLINE 0 0 0 - mirror-0 ONLINE 0 0 0 - loop0 ONLINE 0 0 0 20 loop1 ONLINE 0 0 0 0 Reviewed-by: Brian Behlendorf <[email protected]> Reviewed by: Matthew Ahrens <[email protected]> Signed-off-by: Tony Hutter <[email protected]> Closes openzfs#7756 Closes openzfs#6885
Wasn't really sure how to bring this up. Short version : assuming it's not already possible, it would be quite helpful if ZFS detected when a disk or vdev fell below a consistent metric like access time.
Slightly longer version and why this came up is I have run into cases where individual disks silently fail, both soft and hard. Vendors of course have their "NAS" versions however I've run into this WITH THOSE DISKS. I've also run into this where Samsung SSD's (the 840 and 850 for example), will start to crawl due to well known firmware bugs especially on the 840s. However regardless of firmware or power management bugs, the underlining issue is vendor neutral.
This really came to light last week when I had two 10TB Segate Ironwolf pro drives in a three-way mirror go bad in 4 hours. There were no SMART errors and certainly no errors bubbling up to the kernel. Users didn't really notice anything as most of their data is hot in either cache or L2 . Despite the number of systems that should have caught it, ZFS only did through checksums (something I'll be forever thankful for). Yet testing those disks with a simple dd, would have shown they were operating at under 10M/s.
Is any of this already in place outside individual implementations? I'm not really looking to replace vendors analytic engines for example as they serve a different purpose.
The text was updated successfully, but these errors were encountered: