【N32926】简单测试ARM Linux嵌入式系Nand存储读写速度

2019-07-13 06:06发布

在某些情况下,我们想知道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是以块为单位读、以页为单位写,页是块的构成单元,操作的对象颗粒度不同,自然速度也不同。 本文没有什么深度,只是简单描述,在各位网友面前献丑了!
谢谢阅读!