http://www.oenhan.com/block-dump-linux-io
使用步骤:
1、停掉syslog功能
因为具体IO数据要通过printk输出,如果syslog存在,则会往message产生大量IO,干扰正常结果。
[root@CentOS ~]# service syslog stop
2、启动block_dump
[root@CentOS ~]# echo 1 > /proc/sys/vm/block_dump
3、通过dmesg观察IO情况
通过dmesg信息可以看到IO正在写那些文件,有进程号,inode号,文件名和磁盘设备名;但每个文件写了多少呢,仅仅通过dirtied inode就看不出来了,还需要分析WRITE block,后面的数字并不是真正的块号,而是内核IO层获取的扇区号,除以8即为块号,然后根据debugfs工具的icheck和ncheck选项,就可以获取该文件系统块属于哪个具体文件,具体请google之。
通常测试的时候,可以使用脚本的方式将dmesg命令的信息重定向到一个文件中(如result),以便后续统计相关信息:
[root@CentOS ~]# cat dmesg_result
for((i=1;i<=10000;i++))
do
sleep 1
dmesg -c >> result_20150210
done
#此脚本的作用是将dmesg的信息追加写到文件result_20150210中。
4、需注意的地方
在测试磁盘的IO相关信息的时候(如通过swingbench测试oracle相关IO信息),若之前缓存中有相关信息的话,则会影响到后续的IO统计,后续IO中可能读IO会较少,因此,在执行此测试之前,建议先清缓存:
[root@CentOS ~]# echo 1 > /proc/sys/vm/drop_caches
或
[root@CentOS ~]# echo 3 > /proc/sys/vm/drop_caches # 此命令会清得干净些,这个有几个不同的等级,具体可以百度之