Reviewed by: Paul Dagnelie <[email protected]>
Reviewed by: Matthew Ahrens <[email protected]>
Reviewed by: George Wilson <[email protected]>
This patch hijacks the existing 'zinject -D MSECS -d GUID' command,
slightly modifying it's interface and behavior to allow a user to
set per disk target latencies for IO requests. This is useful when
trying to run performance tests, and/or make performance critical
changes, but need to rule out the normal variance of hard drives. Using
this facility, the user can configure a disk to complete each IO request
in a configurable amount of time while also configuring the number of
'lanes' of the device (i.e. the number concurrent IO requests possible).
For example, the following will configure the disk to complete each IO
request in 10ms while only allowing a single IO request to be processed
at a time:
$ sudo zinject -D 10:1 -d c2t1d0 tank
Added handler 22 with the following properties:
pool: tank
vdev: 6c6fab9bf550c844
If using a pool made up of file vdevs (perhaps on ramfs), the same
command applies:
$ sudo zinject -D 10:1 -d /tmp/file-vdev-1 files-tank
Added handler 1 with the following properties:
pool: files-tank
vdev: eed48fc47ba4edfd
To allow multiple IO requests to be processed concurrently, simply
use a value greater than 1 for the number of lanes. For example, the
following will configure the device to have a 10ms latency for each IO
but allow for up to 1024 IO requests to be processed concurrently:
$ sudo zinject -D 10:1024 -d c2t1d0 tank
Added handler 33 with the following properties:
pool: tank
vdev: 6c6fab9bf550c844
The command was also updated to print more information about each
delay registered when run without any parameters:
$ sudo zinject
ID POOL DELAY (ms) LANES GUID
--- --------------- --------------- --------------- ----------------
2 tank 10 1 5e9b9483b76405bd
3 tank 11 1 5e9b9483b76405bd
4 tank 12 1 5e9b9483b76405bd
5 tank 13 3 5e9b9483b76405bd
6 tank 17 7 5e9b9483b76405bd
7 tank 21 11 5e9b9483b76405bd
8 tank 21 113 5e9b9483b76405bd
Just as before, the delay can be removed using 'zinject -c ID', or even
'zinject -c all'.
You can view, comment on, or merge this pull request online at:
https://github.com/openzfs/openzfs/pull/39
-- Commit Summary --
* DLPX-34122 Provide mechanism to artificially limit disk performance
-- File Changes --
M usr/src/cmd/zinject/zinject.c (111)
M usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h (1)
M usr/src/uts/common/fs/zfs/sys/zio.h (5)
M usr/src/uts/common/fs/zfs/vdev_disk.c (6)
M usr/src/uts/common/fs/zfs/vdev_file.c (6)
M usr/src/uts/common/fs/zfs/vdev_queue.c (3)
M usr/src/uts/common/fs/zfs/zio.c (52)
M usr/src/uts/common/fs/zfs/zio_inject.c (257)
-- Patch Links --
https://github.com/openzfs/openzfs/pull/39.patch
https://github.com/openzfs/openzfs/pull/39.diff
---
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/39
_______________________________________________
developer mailing list
[email protected]
http://lists.open-zfs.org/mailman/listinfo/developer