android性能之emmc速率分析

1.分析起因:

在开发过程中,在打算更换一个emmc(16G的容量储存)物料时候,发现该物料烧录固件的时候速度十分慢。后来通过android bench的性能测试工具发现两者存在明显的速度差异。
(1)烧写固件速度正常的emmc测试速度如下图:
在这里插入图片描述

(1)烧写固件速度异常的emmc测试速度如下图:
在这里插入图片描述

从上面看出明显,在软件相同的情况下,在顺序写(SEQ_WR)的时候,烧写固件速度异常的emmc的写速度比烧写固件速度正常的emmc慢了四倍。
因此可以得出结论:烧写固件速度异常的emmc有问题,应该是该物料不合格,后来询问物料来源,发现是一块旧料的emmc导致了读写性能下降。后来用了新的物料,测试的读写都正常。

本以为这样就这样给出答案完结了,但是突然一个同事的疑问引起了一下的事情,同事的疑问是"为何这个速度差别那么大,这明显有问题,是不是跟cpu的性能有关系?"(指的的是读写的速度为何只有52m/s,而读的速度却有120m/s)。

2.查看硬件规格参数

看到上面的的提问,通常都知道,读写速度的差异比较大很正常,而且读写速度一般很少牵涉到cpu,除非cpu爆满并且cpu主频很低。
当然上面的理由并不能让别人信服,所以想要拿出证据说话就要从主控以及emmc本身支持的带宽是多少?以及emmc普遍对应的读写速度是多少来说服疑问者。这些都需要一些硬件规格书来获取。

1.emmc规格书
在这里插入图片描述
在这里插入图片描述
结论:
从emmc规格书中看到,该emmc支持的emm5.0,模式有HS200,HS400双通道,其带宽最大能支持200MHZ。

2.主控支持的速度
(1)查看rk3326 cpu参数规格
在这里插入图片描述

(2)以及dts设备树的配置支持:
在这里插入图片描述

结论:
主控这边支持emm4.51,HS200模式,最大带宽为150MHZ.

3.普遍的emmc模式以及emmc版本对应读写速度

emmc模式对应的读写速度:
在这里插入图片描述

emmc各个版本一般的速度对比:
在这里插入图片描述
总结:emmc这边支持的emmc5.0,HS400双通道能让emmc芯片的速度理论上达到400Mbp/s,根据图但是芯片主控支持emm4.5,HS00模式理论上最大速度能支持200M/S,而且主控芯片这边在dts配置了最大带宽150MHZ,那也就是说一开始所说我们的板子上理论上支持的速度最大为150Mbp/s。而且根据上面的图emmc4.5,HS200对应的实际速度普遍都是如下图所示
在这里插入图片描述
从图中可知,emmc4.5,HS200模式的emmc实际读速度一般为140m/s,写速度为50m/s。这与一开始的我们板子上的读速度为120m/s,写为52m/s几乎相差甚少,我们测试出来的emmc读写速度是正常的,因此这个emmc的读写速度暂时跟cpu没有关系。

4.利用linux命令DD分析
除了上面的android bench的性能分析工具外,还有linux自带的dd命令可以大概的看下emmc的读写速度,但是dd测试速度跟写block大小以及count等都有关系,具体参考博客https://blog.csdn.net/benkaoya/article/details/70112094。

这里我们可以简单测试一下
1.首先查看各个分区对应block节点,

rk3326_mid:/ # ls -al /dev/block/platform/ff390000.dwmmc/by-name
total 0
drwxr-xr-x 2 root root 440 2017-08-05 17:00 .
drwxr-xr-x 3 root root 540 2017-08-05 17:00 ..
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 backup -> /dev/block/mmcblk1p9
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 boot -> /dev/block/mmcblk1p7
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 cache -> /dev/block/mmcblk1p11
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 dtb -> /dev/block/mmcblk1p4
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 dtbo -> /dev/block/mmcblk1p5
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 frp -> /dev/block/mmcblk1p16
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 ipmacro -> /dev/block/mmcblk1p17
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 metadata -> /dev/block/mmcblk1p13
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 misc -> /dev/block/mmcblk1p3
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 oem -> /dev/block/mmcblk1p15
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 recovery -> /dev/block/mmcblk1p8
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 security -> /dev/block/mmcblk1p10
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 system -> /dev/block/mmcblk1p12
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 trust -> /dev/block/mmcblk1p2
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 ttspack -> /dev/block/mmcblk1p18
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 uboot -> /dev/block/mmcblk1p1
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 ubuntu -> /dev/block/mmcblk1p19
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 userdata -> /dev/block/mmcblk1p20
lrwxrwxrwx 1 root root  20 2017-08-05 17:00 vbmeta -> /dev/block/mmcblk1p6
lrwxrwxrwx 1 root root  21 2017-08-05 17:00 vendor -> /dev/block/mmcblk1p14

我们可以测试一下userdata分区,对应节点为/dev/block/mmcblk1p20.
测试写入200m的结果如下:

rk3326_mid:/ # busybox dd bs=400k count=512 conv=fsync if=/dev/zero of=/dev/block/mmcblk1p20
512+0 records in
512+0 records out
209715200 bytes (200.0MB) copied, 5.681968 seconds, 35.2MB/s

测试读入200m的结果如下

rk3326_mid:/ # busybox dd bs=400k count=512 if=/dev/block/mmcblk1p20 of=/dev/null
512+0 records in
512+0 records out
209715200 bytes (200.0MB) copied, 1.655000 seconds, 120.8MB/s

注意:在多次读入的时候,每次读取前可以先通过命令sync; echo 3 > /proc/sys/vm/drop_caches清除之前缓存,否则除了第一次读取速度,后买你的读取速度会很高,那是因为缓存的问题。

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值