首页
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品
文档
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源

介绍

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

使用方法

使用的一个示例如下:

  1. root@ubuntu03:~# iomaxtime 1 8k /dev/md/mdtest 100
  2. Start to write data test...
  3. Large file is supported,file /dev/md/mdtest size is 20479 Mbytes,blocksize is 8192.
  4. 2013-07-03 05:39:27: io time : 3.5172 ms
  5. 2013-07-03 05:39:28: io time : 1.8339 ms
  6. 2013-07-03 05:39:29: io time : 3.7432 ms
  7. 2013-07-03 05:39:30: io time : 3.0489 ms
  8. 2013-07-03 05:39:31: io time : 2.6898 ms
  9. 2013-07-03 05:39:32: io time : 3.9141 ms

从上面可以看出,上面IO没有hang,原因是最慢的IO的响应时间没有一直增加。如果打印出的时间是下面这种,说明IO hang了:

  1. 2013-07-03 05:41:54: io time : 538.1021 ms
  2. 2013-07-03 05:41:55: io time : 1538.2941 ms
  3. 2013-07-03 05:41:56: io time : 2538.4941 ms
  4. 2013-07-03 05:41:57: io time : 3538.6691 ms

不带任何参数运行这个工具,显示出这个工具的帮助:

  1. root@ubuntu03:~# iomaxtime
  2. iomaxtime v0.1
  3. iomaxtime <mode> <blocksize> <filename> [sleep_ms_per_io] [O_SYNC|O_DIRECT|O_NOATIME]
  4. iotype can be combine flags: O_SYNC,O_DIRECT,O_NOATIME
  5. mode:0 - only read test
  6. mode:1 - only write test
  7. Example: iomaxtime 0 8k test.dat 100 O_DIRECT|O_NOATIME
  8. Author: TangCheng

各个参数说明:

使用场景的一个例子: 如果我们有一个做镜像的软Raid,底层的两个设备是由远程的两台机器上输出的iSCSI设备组成,如果这台机器与其中一台提供硬盘的机器网络中断,那么会导致软Raid降级,但降级是有一个过程的,软Raid检测降级的方法是发送到这个底层的IO出错时。如果IO一直没有返回,则软Raid还认为是正常的,这时发到这个软Raid的IO一直会hang,直到软Raid检测到此故障,IO才能恢复正常 。如果我们想获得这个hang的时间是多少,则可以使用我写的这个工具来完成。 测试过程为先建一个从其它两台机器上输过来的iSCSI设备。提供iSCSI设备的两台机器的IP为

  1. 192.168.122.11
  2. 192.168.122.12

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

  1. iscsiadm -m discovery -t st -p 192.168.122.11
  2. iscsiadm -m discovery -t st -p 192.168.122.12
  3. iscsiadm -m node -T iqn.2001-04.com.ubuntu02:s02 -l
  4. iscsiadm -m node -T iqn.2001-04.com.ubuntu02:s02 -l

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

  1. root@ubuntu03:/usr/bin# mdadm --create /dev/md/mdtest --metadata=0.9 --level=1 --raid-devices=2 --assume-clean /dev/sda /dev/sdb
  2. mdadm: /dev/sda appears to be part of a raid array:
  3. level=raid0 devices=0 ctime=Wed Dec 31 19:00:00 1969
  4. mdadm: /dev/sdb appears to be part of a raid array:
  5. level=raid0 devices=0 ctime=Wed Dec 31 19:00:00 1969
  6. Continue creating array? y
  7. mdadm: array /dev/md/mdtest started.

这时运行这个工具,探测IO情况:

  1. root@ubuntu03:~# iomaxtime 1 8k /dev/md/mdtest 100
  2. Start to write data test...
  3. Large file is supported,file /dev/md/mdtest size is 20479 Mbytes,blocksize is 8192.
  4. 2013-07-03 05:39:27: io time : 3.5172 ms
  5. 2013-07-03 05:39:28: io time : 1.8339 ms
  6. 2013-07-03 05:39:29: io time : 3.7432 ms
  7. 2013-07-03 05:39:30: io time : 3.0489 ms
  8. 2013-07-03 05:39:31: io time : 2.6898 ms
  9. 2013-07-03 05:39:32: io time : 3.9141 ms
  10. ....
  11. ....

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

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

  1. route add -host 192.168.122.11 gw 127.0.0.1

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

  1. 2013-07-03 05:41:54: io time : 538.1021 ms
  2. 2013-07-03 05:41:55: io time : 1538.2941 ms
  3. 2013-07-03 05:41:56: io time : 2538.4941 ms
  4. 2013-07-03 05:41:57: io time : 3538.6691 ms
  5. 2013-07-03 05:41:58: io time : 4538.9061 ms
  6. 2013-07-03 05:41:59: io time : 5539.0761 ms
  7. 2013-07-03 05:42:00: io time : 6539.2680 ms
  8. 2013-07-03 05:42:01: io time : 7539.4850 ms
  9. 2013-07-03 05:42:02: io time : 8539.8691 ms
  10. 2013-07-03 05:42:03: io time : 9540.0560 ms
  11. 2013-07-03 05:42:04: io time : 10540.2629 ms
  12. 2013-07-03 05:42:05: io time : 11540.4880 ms
  13. ....
  14. ....

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

  1. ....
  2. ....
  3. 2013-07-03 05:44:03: io time : 129609.0541 ms
  4. 2013-07-03 05:44:04: io time : 130609.2231 ms
  5. 2013-07-03 05:44:05: io time : 130623.7381 ms
  6. 2013-07-03 05:44:06: io time : 1.5011 ms
  7. 2013-07-03 05:44:07: io time : 1.1470 ms
  8. 2013-07-03 05:44:08: io time : 1.2071 ms
  9. ....
  10. ....

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

  1. root@ubuntu03:~# cat /proc/mdstat
  2. Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
  3. md127 : active raid1 sdb[1] sda[2](F)
  4. 20971456 blocks [2/1] [_U]

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

下载路径

下载路径为: