为什么安卓的手机越用越慢,刷机也不行,是 CPU 老化吗?


为什么安卓的手机越用越慢,刷机也不行,是 CPU 老化吗?

文章插图
 
也许你和我有一样的感受,手机刚买时运行还比较流畅,可是过了一段时间(大概一两年)却越用却卡 。这在很多中低端手机尤其明显 。你也许会怀疑是不是垃圾应用安装多了,可你会发现很多时候甚至重刷系统都不能解决问题,还是难以恢复初始的畅快感 。这是不是手机厂商的阴谋,逼迫我们升级手机呢?还是CPU老化了,运行速度越来越慢了呢?
其实CPU并不会因为老化而变慢,我在这篇专栏文章中有详细解释:
CPU能用多久?会不会因为老化而变慢?
简单来说就是CPU的速度是恒定的,都是一个基频乘以一个比例(Ratio)出来的 。基频现在Intel CPU一般是100MHz,我们用的3G CPU,Ratio就是30,下来刚好3GHz 。ARM的也类似 。而基频和Ratio在整个生命期是不变的,从而CPU运算速度是不变的 。手机里面其他的子系统也类似 。
其实这除了和我们安装的应用软件越来越多,而国产App经常不请自来在后台偷偷运行有关外 。重刷系统都不能解决速度问题和手机的存储介质——闪存关系很大 。
写放大(Write Amplification)我在专栏文章介绍FTL时,介绍了闪存的存储特性 。我们知道一个典型的Flash芯片由Package, die, plane, block和page组成,如下图:
为什么安卓的手机越用越慢,刷机也不行,是 CPU 老化吗?

文章插图
 
Package: 也就是chip即Flash芯片,就是我们经常在M.2的SSD上看到的NAND flash颗粒:
为什么安卓的手机越用越慢,刷机也不行,是 CPU 老化吗?

文章插图
 
Die: 一个NAND颗粒是由一颗或者多颗Die封装在一起而成,这种封装可是平排的,也可以是层叠的 。die内部可以通过3D 堆叠技术扩展容量,譬如三星的V-NAND每层容量都有128Gb(16GB),通过3D堆叠技术可以实现最多24层堆叠,这意味着24层堆叠的总容量将达到384GB!就像盖楼房一样:
为什么安卓的手机越用越慢,刷机也不行,是 CPU 老化吗?

文章插图
 
Die也是可以单独执行命令和返回状态的最小单位 。
Plane: 一个die可以包含几个Plane.
Block: 重要的概念,它是擦除操作的最小单位 。
Page:也很重要,它是写入动作的最小单位 。
闪存写入是以page为单位,而擦除是以block为单位,在写之前必须擦除 。我们也知道了为了延长闪存的生命周期和寿命均衡(Wear Levelling),FTL用LBA/PBA表来映射逻辑和物理操作单位,而一般的消费级SSD和闪存系统有至少7%的空闲块——OP(Over Provisioning) 。OP空间就是闪存主控保留的自有空间,用来负责负载均衡和防止写放大 。一个形象的例子就像我们玩数字华容道:
为什么安卓的手机越用越慢,刷机也不行,是 CPU 老化吗?

文章插图
 
我们要把方块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做的研究证明写放大和空闲净块关系极大,如下图:
为什么安卓的手机越用越慢,刷机也不行,是 CPU 老化吗?

文章插图
 
可以看出,在空闲块少后,写放大可以达到3到4倍 。
我们新买的SSD和手机,空空如也的数据块让写性能达到最大,而随着程序和数据越来越多,写入性能也逐渐下降 。那究竟空闲块少到多少才会性能下降,降到什么程度呢?
数据根据Anandtech做的实验数据,我们la如下图:


推荐阅读