文件系统性能测试:
dd 和 iozone,前者用于顺序性能测试,后者更全面一些,包括了一些随机性能测试。
#!/system/bin/sh
# 删除上一次测试数据,文件路径指向你要测试的文件系统下任意目录,sync是为了触发回写,避免测试
过程中回写影响性能一致性
rm -f /data/local/2g
sync
# 在启用discard的文件系统下,删除会触发discard,休眠是为了避免discard对性能的影响
sleep 30s
# 写性能测试:写的总数据量不能太小,不然都会在内存中,不会触发回写
busybox dd if=/dev/zero of=/data/local/2g bs=4K count=512K
# 触发回写,清cache,防止影响后续测试,在对比写性能的时候不要忽略这次sync的时间,因为有可能vm回写参数配置有差异(前面有介绍),导致这里sync的数据量有差异,下面命令可以打出sync的数据量
=Dirty+Writeback
cat /proc/meminfo | grep 'Dirty' -A 1
time sync
echo 3 > /proc/sys/vm/drop_caches
# 读性能测试:
busybox dd if=/data/local/2g of=/dev/null bs=4K count=512K
在排查性能问题的时候,还可以用 dd 测试存储设备本身的性能,正常情况下,二者的性能差距很
小,如果文件系统的测试结果比存储节点明显慢,那就要查一下文件系统。测试的时候只要把文件路
径,换成存储设备的节点就可以了,下面是例子:
#!/system/bin/sh
sync
echo 3 > /proc/sys/vm/drop_caches
# 先通过df命令,找到文件系统对应的设备节点,这里假设节点是/dev/block/dm-0
# 读性能测试:
busybox dd if=/dev/block/dm-0 of=/dev/null bs=4K count=512K
# 写性能测试:注意,这个测试会破坏文件系统,要慎重
busybox dd if=/dev/zero of=/dev/block/dm-0 bs=4K count=512K
# 触发回写,清cache,防止影响后续测试
time sync
iozone 是开源的文件系统性能测试套件,支持 direct 和 buffer 两套接口
一般称为 buffer io
./iozone -a -s 1g -q 256 -S 512 -L 64 -f /data/iozone.dat -R -b ./iozone.xls
另外一种文件接口叫做 direct io,顾名思义是直接绕过内核的 page cache,直接读写存储设备,一般
用在应用程序自己管理文件的缓存,自己控制回写时间的场景,比如数据库,具体测试命令可以参考如下:
./iozone -a -I -s 1g -q 256 -S 512 -L 64 -f /data/iozone.dat -R -b ./iozone.xls