Linux下模拟块设备访问方式

这里主要介绍下自己的操作步骤以及在操作过程中遇到的问题,以对新学者作个借鉴。

假定,一切操作均在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下不同源好像版本不同,有较高版本的,如果需要,可仔细看下。不过,编译也很简单,几分钟的事。。。。)

fio 的详细介绍请点这里
fio 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/23093.html