eMMC (Embedded Multi Media Card) 为MMC协会所订立的、主要是针对手机产品为主的内嵌式存储器标准规格。
eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。
对于我们来说,eMMC就是一款硬件器件。它的使用可以提高手机对ROM、SD等的访问速度,也就是提高了它们的读写速度。从用户外在使用感受来讲,就是可以提高应用的加载、视频的读取速度等。
对其性能的评定,主要指标是:读写速度。
eMMC的评定,首先从硬件指标上可以进行评判。这方面可以通过硬件厂商信息得知。
在同样的硬件下,并确保硬件品质OK的情况下,再进行性能的分析。
目前,较为方便的一种评定方法,是通过Antutu等跑分软件,进行评分。因为没有直接针对eMMC的打分,因此,一般以IO storage的评分为评估指标(以Antutu为例)。
一般情况下,
如果遇到相关UX问题,从ftrace的log可以确认出来是系统的问题还是eMMC本身读写数据慢导致。从mobilelog可以看出io loading的情况。
问题一、Ftrace中查看eMMC相关log的具体操作方式是怎样的?
可以参考文档《Ftrace_SMP_User_Mannual.pptx》,里面会有说明怎么看ftrace,需要注意IO WIAT部分。
问题二、Mobile log查看io loading的具体操作方式是怎样的?
搜索“kenrel log workload”,可以看到当时eMMC的loading情况。log如下:
Line 2232: <6>[ 15.844484].(6)[105:mmcqd/0][BLOCK_TAG]mmcqd:105
Workload=58%,duty 292743388, period 501573100, req_cnt=339
Line 3133: <6>[ 16.345710].(2)[105:mmcqd/0][BLOCK_TAG]mmcqd:105
Workload=30%,duty 152168141, period 501210300, req_cnt=284
Line 3849: <6>[ 16.846858].(1)[105:mmcqd/0][BLOCK_TAG]mmcqd:105
Workload=19%,duty 96656541, period 501148600, req_cnt=239
Line 5093: <6>[ 17.355422].(1)[105:mmcqd/0][BLOCK_TAG]mmcqd:105
Workload=16%,duty 85583857, period 508565200, req_cnt=148
Line 5892: <6>[ 17.855788].(3)[105:mmcqd/0][BLOCK_TAG]mmcqd:105
Workload=15%,duty 75225083, period 500369100, req_cnt=267
Line 6594: <6>[ 18.356459].(5)[105:mmcqd/0][BLOCK_TAG]mmcqd:105
Workload=11%,duty 55671082, period 500681100, req_cnt=202
说明:
这里的Workload是指eMMC block i/o的繁忙程度,百分比的统计是统计在固定间隔时间内有多久是在持续做I/O request,有多久是空闲的。如果达到99%,那就说明eMMC block i/o这段时间内完全没有空闲,一直在做读写数据的操作,这时候很容易发生由于blocki/o瓶颈导致的上层APP要访问i/o时可能等待时间较久的问题。block i/o如果performance不佳,在同时有多个thread需要对i/o进行读写时,就可能发生短时间内的卡顿或等待。
由于eMMC是硬件器件,因此,如果确认是eMMC读写速度有问题,解决方式一般就是更换器件。
有任何问题,欢迎留言交流讨论!