Android存储系统如何优化?
答案是我也不知道…
那为什么会想到要写这篇文章哪?主要是因为有天晚上和以前一个同事讨论到Android手机存储系统的优化问题,我想把我知道的写下来。用过Android手机的人可能都会有这么个感觉,就是手机用久了之后系统会越来越慢。慢,其中很重要的一点就是和Android的存储系统有关。我们现在主流手机的内置存储芯片一般都是EMMC,一些旗舰级的Android手机已经在使用UFS接口的存储芯片,而iphone 6S开始更是用上了NVME接口的存储芯片。同事是做linux kernel相关工作的,他在想,是不是可以在kernel层面优化下Android的存储系统,改善下EMMC的坏块管理、磨损均衡等内容。
接触过一年的SSD固件开发,没有接触过EMMC。但是根据我的理解,EMMC其实就是一个弱化版或者叫精简版的SSD,核心原理和思想是一样的。所以我得出的答案是:同事想做的那些事,kernel什么也做不了。首先来一张大图,我们可以看到,磨损均衡、垃圾回收、坏块管理,这些事情已经全部被SSD、EMMC做掉了,主机端在这些事情上可以说是完全透明的。同事的想法其实还停留在若干年前嵌入式系统使用裸的FLASH芯片,需要自己管理这些繁杂事情的年代。
作为一篇科普贴,这篇文章的阅读对象是对当今的FLASH和SSD不甚了解的朋友们,而并不是那些存储界的老鸟们^_^
首先说下nand flash的种类,当今的nand flash主要分为三种:slc、mlc和tlc。slc每个cell存储一个bit,可以表示0或者1。mlc每个cell存储两个bit,可以表示0-3。tlc每个cell存储三个bit,可以表示0-7。
先说说最简单的slc,它是怎么实现一个bit的存储的。看下图,四个黑点是可以加压的地方。floating gate周围包围着一层绝缘层,在初始状态下(也就是擦除状态下),floating gate里没有电子,表示逻辑1。
对这个cell编程就是把