- 手机越用越慢,全怪 CPU 和垃圾软件 - 还真不是

图片:Yestone 邑石网正版图库 - 手机越用越慢,全怪 CPU 和垃圾软件
- 还真不是

在你的专业里,有什么基础知识是和普通人的认识不相符的?

老狼,UEFI固件、服务器、嵌入式产品、开源硬件从业者

手机越用越慢并不是 CPU 老化了,也并不一定是垃圾 app 安装多了。

也许你和我有一样的感受,手机刚买时运行还比较流畅,可是过了一段时间(大概一两年)却越用却卡。这在很多中低端手机尤其明显。你也许会怀疑是不是垃圾应用安装多了,可你会发现很多时候甚至重刷系统都不能解决问题,还是难以回复初始的畅快感。这是不是手机厂商的阴谋,逼迫我们升级手机呢?还是 CPU 老化了,运行速度越来越慢了呢?

其实 CPU 并不会因为老化而变慢,我在这篇专栏文章中有详细解释:

老狼:CPU 能用多久?会不会因为老化而变慢?

简单来说就是 CPU 的速度是恒定的,都是一个基频乘以一个比例(Ratio)出来的。基频现在 Intel CPU 一般是 100MHz,我们用的 3G CPU,Ratio 就是 30,下来刚好 3GHz。ARM 的也类似。而基频和 Ratio 在整个生命期是不变的,从而 CPU 运算速度是不变的。手机里面其他的子系统也类似。

其实这除了和我们安装的应用软件越来越多,而国产 app 经常不请自来在后台偷偷运行有关外。重刷系统都不能解决速度问题和手机的存储介质——闪存关系很大。

写放大(Write Amplification)

我在专栏文章介绍 FTL

老狼:杂谈闪存三:FTL

时,介绍了闪存的存储特性。我们知道了闪存写入是以 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 的使用注意事项。

  1. 首先必须保证手机剩余存贮空间在 25%以上。至于如何做到,就是删删删呗。
  2. 删除流氓软件、自启动软件。必要时分别设置 app 权限。
  3. 未有改善就只有重刷系统了。注意保留有价值的信息,如通讯录、照片等等。
  4. 重刷系统,一般都会有改善。Trim 在 Android 4.3 的手机上自动会打开,无需操作。
  5. 重刷系统还未改善,如果是 Android 4.3 的系统,很有可能就是坏块太多了,你会发现可用空间变少了很多。有些软件可以重置 FTL 表,但有风险。建议凑合用或者购买新机,毕竟现在低端手机可以看作快消品了。
  6. 坏块不会死而复生,坏了就是坏了,节哀顺变吧。至于坏了的原因见我下面的系列文章。

日常使用时注意不要把存贮空间使用到高于 75%,会加速写放大,加速坏块的产生。

本文出自我的专栏 UEFI 和 BIOS 探秘

老狼:杂说闪存番外:手机为什么越用越卡和闪存写放大

其他闪存相关文章:

老狼:神秘消失的固态硬盘空间去哪了?老狼:杂说闪存一:关公战秦琼之 UFS VS NVMe老狼:杂谈闪存二:NOR 和 NAND Flash老狼:杂谈闪存三:FTL老狼:杂说闪存四:闪存硬盘接口大比拼老狼:杂说闪存番外:SSD 硬盘如何进行日常维护和 Trim老狼:杂说闪存番外:傲腾 Optane 与 NAND 闪存老狼:杂说闪存番外:我们的数据存在固态硬盘上安全吗?老狼:杂说闪存番外:手机为什么越用越卡和闪存写放大老狼:128G 的固态硬盘为什么有的标 120G,有的标 100G?固态硬盘容量背后的秘密

硬盘相关文章:

老狼:硬盘忽然掉电会损坏硬盘和数据吗?老狼:机械硬盘里面是真空吗?

欢迎大家关注 UEFI 专栏

欢迎关注微信公众号:UEFIBlog