这里主要介绍下自己的操作步骤以及在操作过程中遇到的问题,以对新学者作个借鉴。
假定,一切操作均在root权限下。
1.在实施之前,首先要确保debugfs被挂载到/sys/kernel/debug
默认挂载到的目录是/dev/kernel/debug,也可以设置自己的目录,但在blktrace命令中要通过-r参数指定新选择的路径。一般情况下,选择默认即可。
检查方法:
$ grep debug /proc/mounts
如果debugfs已挂载,应该看到这样的输出:
none /sys/kernel/debug debugfs rw 0 0
否则的话,要自己挂载:
$mount -t debugfs none /sys/kernel/debug
这是因为,blktrace要用到debugfs的trace输出,从它的输出中进行分析,必须依赖于它。
2.在终端#1,启动blktrace,准备记录设备的访问模式
$blktrace /dev/sdb
在终端#2,运行应用程序。这里,简单用dd做测试。
$dd if=/dev/zero of=/dev/sdb bs=4k count=100 oflag=direct
3.回到终端#1,按CTRL+C终止blktrace的运行,由ls命令可看到,在当前目录下出现了新的文件,它的名字与设备名相关,文件个数与CPU个数相同。
对我来说,只有一个CPU,出现的文件名为sdb.blktrace.0
转化成二进制文件,作为fio的读写日志,即Fio的读写的数据来源。
$blkparse sdb -d sdb.bin > /dev/null
操作完成后,在当前目录下会生成sdb.bin二进制文件。
如果想生成结果文件以查看,可以将/dev/null改为文件名,如file1,则输出结果会保存到file1中,如
$blkparse sdb -d sdb.bin > file1
4.利用fio重放日志
fio --name=replay --filename=/dev/sdb --direct=1 --read_iolog=sdb.bin
就可以看到结果了。
要注意的,fio要采用最近的版本,否则在重放的时候可能会出现问题。
我原先采用了apt-get方式安装,默认1.38版本,结果老是报错,纠结了很久。。。。。。
后来,采用源码编译安装的方式,更换为更高的1.58版本,立马通过。在编译过程中,可能会报错,要注意libaio的库已安装,即libaio-dev。通过这两步,应该就没什么问题了。(Ubuntu下不同源好像版本不同,有较高版本的,如果需要,可仔细看下。不过,编译也很简单,几分钟的事。。。。)