介绍

在我们测试存储路径切换、软Raid切换时,我们想知道切换过程中IO到底hang了多久,这时就可以使用此工具。此工具的原理是每隔一段时间,向某一个测试的块设备或文件发送一个读IO(或写IO,可以参数控制),然后看这个IO的响应时间是多少,然后每一秒打印一行,打印出最慢的那个IO的时间。如果IOhang住了,每秒打印的IO时间是会不断的增加,最后增加到多长时间就表示hang了多久。

使用方法

使用的一个示例如下:

root@ubuntu03:~[sleep_ms_per_io][O_SYNC|O_DIRECT|O_NOATIME]iotypecanbecombineflags:O_SYNC,O_DIRECT,O_NOATIMEmode:0-onlyreadtestmode:1-onlywritetestExample:_DIRECT|O_NOATIMEAuthor: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为

192.168.122.11192.168.122.12

把iSCSI设备挂过来的命令为:

::s02-l

我们使用iSCSI-m3-p3可以看出挂过来的设备为/dev/sda和/dev/sdb,则建软Raid的过程为:

root@ubuntu03:/usr/biniomaxtime18k/dev/md/mdtest100StarttowritedatatestLargefileissupported,file/dev/md/mdtestsizeis20479Mbytes,:39:27:iotime:3.5172ms2013-07-0305:39:28:iotime:1.8339ms2013-07-0305:39:29:iotime:3.7432ms2013-07-0305:39:30:iotime:3.0489ms2013-07-0305:39:31:iotime:2.6898ms2013-07-0305:39:32:iotime:3.9141ms..

从上面可以看到,最慢IO的响应时间是比较均衡的。

我们在另外的一个窗口中使用下面的命令把到192.168.122.12机器的路由改到127.0.0.1,这样就会导致到192.168.122.12的网络中断,这时192.168.122.12提供的iSCSI设备将不能访问:

这时我们再切换回我们刚才运行工具的窗口,看响应时间:

2013-07-0305:41:54:iotime:538.1021ms2013-07-0305:41:55:iotime:1538.2941ms2013-07-0305:41:56:iotime:2538.4941ms2013-07-0305:41:57:iotime:3538.6691ms2013-07-0305:41:58:iotime:4538.9061ms2013-07-0305:41:59:iotime:5539.0761ms2013-07-0305:42:00:iotime:6539.2680ms2013-07-0305:42:01:iotime:7539.4850ms2013-07-0305:42:02:iotime:8539.8691ms2013-07-0305:42:03:iotime:9540.0560ms2013-07-0305:42:04:iotime:10540.2629ms2013-07-0305:42:05:iotime:11540.4880ms..

从上面可以看到最慢IO的响应时间一直在增加,说明有IOhang了,一直没有返回,所以每次统计的时候,这个时间就一直增加。直到大约两分钟后:

..2013-07-0305:44:03:iotime:129609.0541ms2013-07-0305:44:04:iotime:130609.2231ms2013-07-0305:44:05:iotime:130623.7381ms2013-07-0305:44:06:iotime:1.5011ms2013-07-0305:44:07:iotime:1.1470ms2013-07-0305:44:08:iotime:1.2071ms..

我们从上面可以看出来,这种情况将导致软Raidhang:130623.7381ms也就是将近130秒。这时再检测软Raid的状态,可以看到软Raid已显示出降级了。

root@ubuntu03:~#cat/proc/mdstatPersonalities:[linear][multipath][raid0][raid1][raid6][raid5][raid4][raid10]md127:activeraid1sdb[1]sda[2](F)20971456blocks[2/1][_U]

从上面的例子可以看出使用这个工具可以方便探测出IOhang的情况,以及IOhang了多长时间。

下载路径

下载路径为: