在某些情况下,我们想知道NAND Flash的大概读写速度,这些情况可能包括:
1.打算更换一颗型号不同但存储类型、存储容量、页大小都相同的NAND
2.打算更换一颗存储类型不同的NAND,例如从SLC NAND FLASH更换成MLC NAND FLASH
3.打算更换一颗不同接口的NAND,例如从8位数据总线更换成SPI NAND
4.打算调整并更换不同的文件系统,例如从ext4更换为ubifs
以上情况,我们都可能想知道更换前后,对NAND读写速度带来的影响,下面是具体的测试方法
测试写速度主要使用的命令是:time dd
例如,测试写NAND的速度
time dd if=/dev/zero of=/path/to/fileinnand bs=1024 count=10000
注意,这里bs后面1024的单位是字节,生成的fileinnand大小为约9.8M(10000KB)
上述命令意思是从zero设备中抽取字符写入到NAND,控制台输出内容大致如下(新塘N32926/Linux2.6.35/FAT文件系统/并行8位128M容量SLC NAND):
real 0m 3.39s
user 0m 0.09s
sys 0m 2.05s
其中,sys是指该组命令在内核空间耗费的时间,user是指在用户空间耗费的时间,real是指总时间,总时间real与user和sys的关系如下:
real = user + sys + 调度器切换任务的时间
所以,我们看到的是real总是大于等于user+sys之和
那么,NAND写入速度VW的算法为:
VW= (bs*count)/real = (10000KB/3.39s) = 2949.85KB/s = 2.88M/s (实际速度会比这个值略微偏大,因为real=sys+user+调度时间)
注意,bs 尽量不要大于NAND的页大小(PageSize), count越大测试效果越明显
而测试NAND读出速度的命令为:cat,例如:
time cat /path/to/fileinnand > /dev/null
控制台输出内容大致如下(新塘N32926/Linux2.6.35/FAT文件系统/并行8位128M容量SLC NAND):
real 0m 0.01s
user 0m 0.00s
sys 0m 0.01s
那么,NAND读出速度VR的算法为:
VR= (bs*count)/real = (10000KB/0.01s) = 1000000KB/s = 976.6M/s
这看起来有点不可思议,是自己测试错了么?
首先,误差肯定有,可以通过增大count大小使得fileinnand文件变大来缩小上述误差
其次,在执行上述读速度命令前,建议先执行sync命令,以便同步缓存,或者使用其他清空文件系统缓存工具
最后,读速度一般会远远高于写入速度,因为NAND是以块为单位读、以页为单位写,页是块的构成单元,操作的对象颗粒度不同,自然速度也不同。
本文没有什么深度,只是简单描述,在各位网友面前献丑了!
谢谢阅读!