合 探测磁盘IO hang多久的工具iomaxtime
介绍
在我们测试存储路径切换、软Raid切换时,我们想知道切换过程中IO到底hang了多久,这时就可以使用此工具。此工具的原理是每隔一段时间,向某一个测试的块设备或文件发送一个读IO(或写IO,可以参数控制),然后看这个IO的响应时间是多少,然后每一秒打印一行,打印出最慢的那个IO的时间。如果IO hang住了,每秒打印的IO 时间是会不断的增加,最后增加到多长时间就表示hang了多久。
工具下载:https://gitee.com/osdba/iomaxtime
使用方法
使用的一个示例如下:
1 2 3 4 5 6 7 8 9 | root@ubuntu03:~# iomaxtime 1 8k /dev/md/mdtest 100 Start to write data test... Large file is supported,file /dev/md/mdtest size is 20479 Mbytes,blocksize is 8192. 2013-07-03 05:39:27: io time : 3.5172 ms 2013-07-03 05:39:28: io time : 1.8339 ms 2013-07-03 05:39:29: io time : 3.7432 ms 2013-07-03 05:39:30: io time : 3.0489 ms 2013-07-03 05:39:31: io time : 2.6898 ms 2013-07-03 05:39:32: io time : 3.9141 ms |
从上面可以看出,上面IO没有hang,原因是最慢的IO的响应时间没有一直增加。如果打印出的时间是下面这种,说明IO hang了:
1 2 3 4 | 2013-07-03 05:41:54: io time : 538.1021 ms 2013-07-03 05:41:55: io time : 1538.2941 ms 2013-07-03 05:41:56: io time : 2538.4941 ms 2013-07-03 05:41:57: io time : 3538.6691 ms |
不带任何参数运行这个工具,显示出这个工具的帮助:
1 2 3 4 5 6 7 8 | root@ubuntu03:~# iomaxtime iomaxtime v0.1 iomaxtime <mode> <blocksize> <filename> [sleep_ms_per_io] [O_SYNC|O_DIRECT|O_NOATIME] iotype can be combine flags: O_SYNC,O_DIRECT,O_NOATIME mode:0 - only read test mode:1 - only write test Example: iomaxtime 0 8k test.dat 100 O_DIRECT|O_NOATIME Author: TangCheng |
各个参数说明:
- mode: 可为0或1,0表示发送的探测IO为读IO,1表示发送的探测IO为写IO,注意如果设置为1,则会写一些数据到测试块设备或文件去,会破坏原有的数据。
- blocksize: 指定发送的IO大小,可以带单位,如“8k”表示发送8K的IO大小。
- filename: 指定要探测的块设备名或文件名
- sleep_ms_per_io: 探测发IO时,每发一个IO,则sleep一段时间,单位为毫秒。如果不指定,则默认为100ms。
- 最后一个参数指定IO的类型,不指定默认为O_DIRECT,对于文件还可以指定O_NOATIME。
使用场景的一个例子: 如果我们有一个做镜像的软Raid,底层的两个设备是由远程的两台机器上输出的iSCSI设备组成,如果这台机器与其中一台提供硬盘的机器网络中断,那么会导致软Raid降级,但降级是有一个过程的,软Raid检测降级的方法是发送到这个底层的IO出错时。如果IO一直没有返回,则软Raid还认为是正常的,这时发到这个软Raid的IO一直会hang,直到软Raid检测到此故障,IO才能恢复正常 。如果我们想获得这个hang的时间是多少,则可以使用我写的这个工具来完成。 测试过程为先建一个从其它两台机器上输过来的iSCSI设备。提供iSCSI设备的两台机器的IP为
1 2 | 192.168.122.11 192.168.122.12 |
把iSCSI设备挂过来的命令为:
1 2 3 4 | iscsiadm -m discovery -t st -p 192.168.122.11 iscsiadm -m discovery -t st -p 192.168.122.12 iscsiadm -m node -T iqn.2001-04.com.ubuntu02:s02 -l iscsiadm -m node -T iqn.2001-04.com.ubuntu02:s02 -l |
我们使用iSCSI -m 3 -p 3可以看出挂过来的设备为/dev/sda和/dev/sdb,则建软Raid的过程为: