本文主要讲述使用iozone
、dd/cp/rm
命令、fio
、flashbench
进行eMMC读写性能和稳定性测试。读写性能主要是通过iozone
测试,稳定性主要是通过长时间随机读写进行测试。
iozone进行读写性能测试
在之前的文章中,我们介绍了iozone
的使用,以及进行简单的读写测试。使用如下命令循环进行长时间读写测试:
1 | while true; do /var/iozone -azecI -+n -L64 -S32 -r2m -s128m -i0 -i2 -+b 400000,30000 -w -f testfile; sleep 5; done |
输出结果类似如下:
1 | #while true; do /var/iozone -azecI -+n -L64 -S32 -r2m -s128m -i0 -i2 -+b 400000,30000 -w -f testfile; sleep 10; done |
上述测试可以放置测试,看看emmc或者文件系统有没有报错。然后我们可以将测试过程中的log保存为一个文件,通过python去解析读写速度并将其输出到excel表格中。再通过图表的形式,看读写速度是不是稳定持续,有没有出现突变的情况。比如我测试的读写速度输出如下,当然,这里面的格式可以稍微整理一下。
1 | #!/usr/bin/python |
dd/cp命令进行读写压力测试
关于dd
命令的详细使用,可以参照:https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html
在下面的脚本中,测试dd
多次读写100M的文件,当然,可以将dd
命令替换成cp
命令测试。
1 | !/bin/bash |
上面的是带文件系统的读写,如果要测试直接IO读写,需要给dd
命令加上iflag=direct,nonblock
或oflag=direct,nonblock
的参数。关于这两个参数的解释,详见:
http://blog.sina.com.cn/s/blog_5d9051c00100g4aj.html
https://blog.csdn.net/menogen/article/details/38059671
但是我这边使用的dd
命令版本不支持这两个参数,可下载dd
源码自行交叉编译:
https://www.gnu.org/software/coreutils/coreutils.html
https://unix.stackexchange.com/questions/189804/how-can-i-cross-compile-the-dd-linux-tool-for-arm
fio性能测试工具
fio
为flexible I/O tester
,是一个工具,它将生成许多线程或进程,执行用户指定的特定类型的IO操作。fio
的典型用法是编写与想要模拟的IO负载匹配的作业文件。fio
是一个专业的测试IO性能的工具,不太适用于我们的测试场景,以下内容只是作为简单的了解使用。
从 https://github.com/axboe/fio clone一个source code下来,然后交叉编译生成fio
,测试命令为:
1 | ./fio -filename=/dev/block/mmcblk0 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -numjobs=30 -runtime=60 -group_reporting -name="IORTest" |
得到的结果为:
1 | IORTest: (g=0): rw=read, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=psync, iodepth=1 |
关于参数的说明可以参照:
https://linux.die.net/man/1/fio
https://github.com/axboe/fio/blob/master/HOWTO
关于输出结果的解释说明,可以参照:
https://tobert.github.io/post/2014-04-17-fio-output-explained.html
用法的例子可以参照:
https://blog.csdn.net/jiecxy/article/details/58197387?utm_source=blogxgwz10
https://blog.csdn.net/m0_37972390/article/details/80019762
https://www.jianshu.com/p/9d823b353f22
flashbench
flashbench
是用于识别linaro闪存调查的SD卡和其他媒体属性的工具。
参考资料:
https://github.com/bradfa/flashbench
https://lwn.net/Articles/428584/
https://blog.csdn.net/luckywang1103/article/details/53175368?locationNum=10&fps=1
https://wiki.linaro.org/WorkingGroups/KernelArchived/Projects/FlashCardSurvey