提问:
问题:
手机eMMC内存,我用Android Bench/安兔兔/鲁大师测出来的速度很快,而自己写Android Tool测试的速度确很慢,这是为什么呢?
主要信息:
同样是Sequence Write操作,Android Bench测出来的速度为150MB/S,而我的Tool最高只能跑130MB/S,
我的Tool采用的是Direct IO的方式去写入数据,修改的是Android Native层部分
3)在抓取的eMMC指令中,AndroidBench的CMD13几乎不花费时间,而我的Tool每次都会花费大概2ms左右
如下图:图一为Android Bench的Write操作
图二为我写的Tool的Write操作,两者时间差异在CMD13消耗的时间上
我的IO方式(Android Native层),C代码:
1)申请内存 -- 只申请一次 requestSpace = posix_memalign((void**)&jbArray,4096,jbArraySize);//Size为1024*1024 = 1MB 2)创建文件,获取对应句柄 -- 只调用一次 fileHandle = open(filePath, O_WRONLY | O_CREAT | O_NOCTTY | O_DIRECT | O_APPEND |O_TRUNC, S_IRUSR | S_IWUSR); 3)写入数据 -- 循环调用512次,写入51MB数据,只会记录该循环写入的时间 for(int i = 0; i<512; i++) { writeLength = write(fileHandle,jbArray,length); //length长度为1024*1024 = 1MB,单次Write1MB }
结果:
我的Tool执行时间 计算出来的速度 比AndroidBench计算出来的速度慢,使用UFS内存的设备上差距更加明显
尝试过的方法:
1) IO方式中,试过mmap和Java IO的方式,都比Direct IO慢
2)修改过单次写入的数据大小,1MB和4KB没有什么差距,4KB速度反而稍慢
我想要的结果:
我想知道为什么会造成这种速度差异,我该如何修改,我目前只能做Native层的优化。
解答:
对于这个问题,你可以尝试一些优化:
1.使用预先缓存的数据进行写入,这可以提高写入速度。
2.使用更快的eMMC驱动,这可以提高读写速度。
3.使用其他的缓存技术,例如mmap,来提高读写速度。
4.使用用户空间的缓存来提高读写速度。
5.在底层优化写入的硬件驱动。