嵌入式Linux磁盘(硬盘、SD卡)读写性能测试

前言

    SD卡的读写速度,受限制于SD卡本身固有的性能之外,还跟读卡器,主CPU性能等有一定的关系。所以,同一张SD卡,想要知道其在嵌入式设备中实际的读写性能,还需要在嵌入式环境中实际测试下才准确,linux下命令dd使用指定的输入和输出块大小来拷贝文件,它每次从输入读取指定大小的一个块写到独立的输出块去,通过这种方法来测试读写速度。

测试环境

硬件:嵌入式ARM

系统:Linux version 3.10.0

内存:512M


一、内核缓存

    在开始测试之前,必须先弄明白“内核缓存”的概念,否则很容易测出错误的数据。向文件中写入数据时,数据会先缓存在Page Cache中,内存中的这部分数据被标注为Dirty Page,linux系统上的pdflush守护进程会跟进系统设置将将这部分Dirty Page刷到磁盘上,也可以通过fsync系统调用在数据写入后强制刷到磁盘上。将写入的数据刷入磁盘时,是以Buffer Cache为单位,每次回写若干个Buffer Cache。

    读取文件内容时,系统会一次性连续读取包括所请求页面在内的多个页面(如预读页面个数为n)。如果请求的页面在page cache中命中的话,会从缓存中返回页面内容,增加读取的页面数量,异步读取2n个页面;如果请求的页面没有在page cache中命中,也会增加读取页面数量,同步读取2n个页面。

为了避免内核缓存对测试带来影响,在每条测试语句之前,都要先清除linux内核缓存,命令如下:

# sync; echo 3 > /proc/sys/vm/drop_caches

二、测试磁盘写能力

1、正确的命令

# sync; echo 3 > /proc/sys/vm/drop_caches
# dd bs=1M count=500 if=/dev/zero of=/mnt/sdcard/outfile 
500+0 records in
500+0 records out
524288000 bytes (500.0MB) copied, 122.160615 seconds, 4.1MB/s


# sync; echo 3 > /proc/sys/vm/drop_caches
# dd bs=20k count=25600 if=/dev/zero of=/mnt/sdcard/outfile
25600+0 records in
25600+0 records out
524288000 bytes (500.0MB) copied, 12
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProYuan28

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值