也许你和我有一样的感受,手机刚买时运行还比较流畅,可是过了一段时间(大概一两年)却越用却卡。这在很多中低端手机尤其明显。你也许会怀疑是不是垃圾应用安装多了,可你会发现很多时候甚至重刷系统都不能解决问题,还是难以恢复初始的畅快感。这是不是手机厂商的阴谋,逼迫我们升级手机呢?还是CPU老化了,运行速度越来越慢了呢?
其实CPU并不会因为老化而变慢,我在这篇专栏文章中有详细解释:
简单来说就是CPU的速度是恒定的,都是一个基频乘以一个比例(Ratio)出来的。基频现在Intel CPU一般是100MHz,我们用的3G CPU,Ratio就是30,下来刚好3GHz。ARM的也类似。而基频和Ratio在整个生命期是不变的,从而CPU运算速度是不变的。手机里面其他的子系统也类似。
其实这除了和我们安装的应用软件越来越多,而国产App经常不请自来在后台偷偷运行有关外。重刷系统都不能解决速度问题和手机的存储介质——闪存关系很大。
我在专栏文章介绍FTL时,介绍了闪存的存储特性。我们知道一个典型的Flash芯片由Package, die, plane, block和page组成,如下图:
Package: 也就是chip即Flash芯片,就是我们经常在M.2的SSD上看到的NAND flash颗粒:
Die: 一个NAND颗粒是由一颗或者多颗Die封装在一起而成,这种封装可是平排的,也可以是层叠的。die内部可以通过3D 堆叠技术扩展容量,譬如三星的V-NAND每层容量都有128Gb(16GB),通过3D堆叠技术可以实现最多24层堆叠,这意味着24层堆叠的总容量将达到384GB!就像盖楼房一样:
Die也是可以单独执行命令和返回状态的最小单位。
Plane: 一个die可以包含几个Plane.
Block: 重要的概念,它是擦除操作的最小单位。
Page:也很重要,它是写入动作的最小单位。
闪存写入是以page为单位,而擦除是以block为单位,在写之前必须擦除。我们也知道了为了延长闪存的生命周期和寿命均衡(Wear Levelling),FTL用LBA/PBA表来映射逻辑和物理操作单位,而一般的消费级SSD和闪存系统有至少7%的空闲块——OP(Over Provisioning)。OP空间就是闪存主控保留的自有空间,用来负责负载均衡和防止写放大。一个形象的例子就像我们玩数字华容道:
我们要把方块1挪到右下角,一定好充分利用唯一的空格位置,将它移来移去,十分的困难。我们想象一下,如果在最下面忽然多出一整排空闲位置,这样相信就是小学生也可以轻松完成这个简单版华容道,而不需要很多步骤。我们的OP就是这个空闲块,多了后就会显著减少挪动的步数,而步数就可以看作写放大,对闪存寿命和速度有显著影响。
因为这个原因,所以SSD和手机厂商必定会空出部分空间来给OP,一般至少7%。高端的SSD和手机的OP空间能够达到20%到30%以上。OP的大小对性能影响很大,我们今天来看看OP和写放大对flash性能的影响。
我们假设要写入一个4KB的数据,可是一个块里已经没有干净空间了,但是有失效的数据可以擦除,所以主控就把所有的数据搬到缓存或者OP空间,然后擦除块,再加上这个4KB新数据写回去,这个操作就造成了写入放大,即本来是写4K的数据,却造成了整个块(512KB)的写入操作,也就是128倍放大。当然我们前文提到LBA/PBA并不是简单的block,而垃圾收集和Trim对写放大都有所减缓。但随着闪存空闲空间越来越少,主控的腾挪空间也越来越少。IBM Zurich Research Laboratory做的研究证明写放大和空闲净块关系极大,如下图:
可以看出,在空闲块少后,写放大可以达到3到4倍。
我们新买的SSD和手机,空空如也的数据块让写性能达到最大,而随着程序和数据越来越多,写入性能也逐渐下降。那究竟空闲块少到多少才会性能下降,降到什么程度呢?
根据Anandtech做的实验数据,我们la如下图:
横轴是时间,纵轴是写入IOPS。随着时间写入越来越多的随机4KB数据,开始100000的IOPS在某时刻剧烈下降,最后随着空闲干净块慢慢减少,稳定到了10000IOPS,效能下降到原来的10%!
当然最终用户使用情况没有这么恶劣,但数据说明写放大对效能的影响巨大。这也是为什么高端企业级SSD的op空间巨大的原因,Intel的SSD DC3700的op空间达到32%,这让它有了巨大的腾挪空间,它的曲线异常平滑:
这对服务器市场非常重要。
数据表明,我们对手机存储空间或SSD使用大于75%后,写入性能就会因为写放大而大大下降。中低端手机Flash空间本来就小,OP又小,很容易造成写放大,大大减低了Flash的寿命。而寿命降低,会出现更多坏块,反过来又加剧写放大,形成恶性循环。速度会越来越慢,这个靠重刷系统是不能解决问题的。
现在你是不是要考虑买个大容量的手机了?iphone手机为了提升用户体验,op留的很大,所以快满了后差距并不是很厉害,可以类比Intel那款SSD。
有很多朋友留言问解决办法,这里简单说一下,稍后会写一篇专栏文章详细介绍步骤和手机Flash与SSD的使用注意事项。
日常使用时注意不要把存贮空间使用到高于75%,会加速写放大,加速坏块的产生。