如何在Linux上使用ioping监视工具查找磁盘I/O延迟

时间:2020-01-09 10:41:35  来源:igfitidea点击:

如何在Linux,FreeBSD,OpenBSD和MacOS操作系统上实时监视磁盘I/O延迟?
您可以使用" ioping工具"实时监控I/O延迟。
它显示磁盘延迟的方式与ping命令显示Linux或类似Unix的系统的网络延迟的方式相同。

安装ioping工具

根据您的操作系统进行安装。

在Debian/Ubuntu/Mint Linux上安装ioping

执行以下apt-get命令/apt命令:

$ sudo apt-get install ioping

在Arch Linux上安装ioping

输入以下pacman命令:

$ sudo pacman -S ioping

在Fedora Linux上安装ioping

执行以下dnf命令:

$ sudo dnf install ioping

在macOS上安装ioping

执行以下brew命令:

$ brew install ioping

在FreeBSD上安装ioping

输入以下pkg命令:

# pkg install ioping

在OpenBSD上安装ioping

输入以下pkg_add命令:

# pkg_add ioping

输出示例:

quirks-2.304 signed on 2016-04-02T15:01:33Z
ioping-1.0: ok

如何使用ioping?

警告:小心使用ioping命令。
错误的选项会破坏您的数据。

语法为:

ioping /tmp/
ioping /dev/sda1
ioping [options] device/dir/file

使用默认值和当前目录查看磁盘I/O延迟

$ ioping .

要在12个计数后停止,请传递-c选项:

$ ioping -c 12 .

输出示例:

4 KiB <<< . (ffs /dev/sd0k): request=11 time=38.2 us
4 KiB <<< . (ffs /dev/sd0k): request=12 time=30.8 us
 
--- . (ffs /dev/sd0k) ioping statistics --
11 requests completed in 338.3 us, 44 KiB read, 32.5 k iops, 127.0 MiB/s
generated 12 requests in 11.0 s, 48 KiB, 1 iops, 4.36 KiB/s
min/avg/max/mdev = 19.9 us / 30.8 us / 85.5 us / 18.0 u

查看磁盘寻道率

$ sudo ioping -R /dev/sda

查看磁盘顺序速度(MiB/s)

查找磁盘查找率和磁盘顺序速度

$ sudo ioping -RL /dev/rdisk1

如何设置请求间隔

默认值为1秒。
要更改,请通过-i {interval}选项。
设置3秒:

$ ioping -i 3 .
$ ioping -i 3 /dev/sdb

如何使用异步I/O?

传递-A选项:

# ioping -c 6 -A /dev/vda1

输出示例:

4 KiB from /dev/vda1 (block device 20.0 GiB): request=1 time=458 us
4 KiB from /dev/vda1 (block device 20.0 GiB): request=2 time=226 us
4 KiB from /dev/vda1 (block device 20.0 GiB): request=3 time=477 us
4 KiB from /dev/vda1 (block device 20.0 GiB): request=4 time=412 us
4 KiB from /dev/vda1 (block device 20.0 GiB): request=5 time=381 us
4 KiB from /dev/vda1 (block device 20.0 GiB): request=6 time=356 us

--- /dev/vda1 (block device 20.0 GiB) ioping statistics --
6 requests completed in 5.00 s, 2.60 k iops, 10.1 MiB/s
min/avg/max/mdev = 226 us / 385 us / 477 us / 82 us

如何使用缓存的I/O(无缓存刷新/删除)

传递-C选项:

$ ioping -c 6 -C /dev/sdb1
# ioping -c 6 -C .

示例输出:

4 KiB <<< . (zfs zroot/ROOT/default): request=1 time=30.8 us (warmup)
4 KiB <<< . (zfs zroot/ROOT/default): request=2 time=45.3 us
4 KiB <<< . (zfs zroot/ROOT/default): request=3 time=40.9 us
4 KiB <<< . (zfs zroot/ROOT/default): request=4 time=57.1 us
4 KiB <<< . (zfs zroot/ROOT/default): request=5 time=47.5 us
4 KiB <<< . (zfs zroot/ROOT/default): request=6 time=52.8 us
 
--- . (zfs zroot/ROOT/default) ioping statistics --
5 requests completed in 243.6 us, 20 KiB read, 20.5 k iops, 80.2 MiB/s
generated 6 requests in 5.06 s, 24 KiB, 1 iops, 4.74 KiB/s
min/avg/max/mdev = 40.9 us / 48.7 us / 57.1 us / 5.65 us

如何使用直接I/O(O_DIRECT)

传递-D选项:

# ioping -c 6 -D /tmp

来自基于FreeBSD + ZFS的fs的示例输出:

4 KiB <<< /tmp (zfs zroot/tmp): request=1 time=19.9 us (warmup)
4 KiB <<< /tmp (zfs zroot/tmp): request=2 time=46.9 us
4 KiB <<< /tmp (zfs zroot/tmp): request=3 time=87.4 us

 
--- /tmp (zfs zroot/tmp) ioping statistics --
5 requests completed in 294.6 us, 20 KiB read, 17.0 k iops, 66.3 MiB/s
generated 6 requests in 5.06 s, 24 KiB, 1 iops, 4.74 KiB/s
min/avg/max/mdev = 46.9 us / 58.9 us / 87.4 us / 14.9 us

如何使用写入I/O

传递-W选项。

对目录目标而言是安全的。
对于非高速缓存的读取或在某种程度上高速缓存的系统,写入I/O可提供更可靠的结果。
对于文件/设备可能是"危险"的:它将粉碎您的数据。
在这种情况下,应重复树时间(-WWW)。

$ ioping -c 6 -W /tmp

如何使用读写ping-pong模式

传递-G选项:

# ioping -c 10 -G /tmp

如何使用使用同步I/O(O_SYNC)

传递-Y选项:

# ioping -c 10 -Y /dev/sdb

如何使用使用数据同步I/O(O_DSYNC)

传递-y选项:

$ ioping -c 10 -y .

获得帮助

阅读手册页:

$ man ioping

或者

$ ioping -h

输出示例:

-c <count>      stop after <count> requests
      -i <interval>   interval between requests (1s)
      -l <speed>      speed limit in bytes per second
      -t <time>       minimal valid request time (0us)
      -T <time>       maximum valid request time
      -s <size>       request size (4k)
      -S <wsize>      working set size (1m)
      -o <offset>     working set offset (0)
      -w <deadline>   stop after <deadline> time passed
      -p <period>     print raw statistics for every <period> requests
      -P <period>     print raw statistics for every <period> in time
      -A              use asynchronous I/O
      -C              use cached I/O (no cache flush/drop)
      -B              print final statistics in raw format
      -D              use direct I/O (O_DIRECT)
      -R              seek rate test
      -L              use sequential operations
      -W              use write I/O (please read manpage)
      -G              read-write ping-pong mode
      -Y              use sync I/O (O_SYNC)
      -y              use data sync I/O (O_DSYNC)
      -k              keep and reuse temporary file (ioping.tmp)
      -q              suppress human-readable output
      -h              display this message and exit
      -v              display version and exit

有关更多信息,请参见ioping主页。