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

在某些情况下,我们想知道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是以块为单位读、以页为单位写,页是块的构成单元,操作的对象颗粒度不同,自然速度也不同。

本文没有什么深度,只是简单描述,在各位网友面前献丑了!

谢谢阅读!

你可能感兴趣的:(嵌入式Linux开发,linux,嵌入式,system,NAND,FLASH)