我说的是4.3如何也能给所有Nexus设备带来TRIM支持
上周,Android 4.3的发布获得了巨大的成功。为什么是“差不多?”嗯,除了一些复制/粘贴的问题,大部分用户似乎对最新版本的果冻豆非常满意。达到这样的用户满意度是可以期待的,因为最新版本的Jelly Bean带来了增强的性能、改进的API支持、附加的功能和其他功能。然而,对于那些经常向我们的设备传输大量数据(例如媒体内容和其他大文件)的人来说,这些“其他功能”中的一个非常重要。
当然,正如你所料,我正在谈论4.3如何也能为所有Nexus设备带来TRIM支持。用NAND设备传输大量数据后经历过大量设备速度下降的人都知道我在说什么。举个很实际的例子,看看谷歌最初的Nexus7就知道了。刚出来的时候,对这款热门设备的评论几乎一致称赞其性能优异。然而,随着时间的推移,大多数用户似乎会注意到I/O性能的急剧下降。在使用这款设备的时候,会导致整体的迟滞感,让曾经很快的平板对于某些人来说几乎慢了下来。相比使用32 GB的机型,这个问题似乎对那些容量更小的机型影响更大或更短。如你所料,这主要是因为在以前的版本中没有启用TRIM。然后,这阻止了NAND块的垃圾收集调度,从而大大降低了对这些块的数据重写速度。(注:在Nexus 7 4 . 1 . 2版本中重新加入了TRIM的痕迹,但目前的共识是直到4.3才真正启用。)
看看Android Git,你很容易发现Android的volume daemon (VOLD)启用fstrim的修改。下一步是确定何时准确运行fstrim。正如来自Anandtech的Brian Klug的一些侦探工作所揭示的:
我了解了更多关于Android 4.3修剪文件系统时的潜在条件,因为之前并不清楚。Android框架会发出一个“启动空闲维护窗口”事件,MountService会监听这个事件,然后在满足某些条件时调用vold到fstrim文件系统——设备超过一个小时没有被触碰,24小时内没有空闲维护窗口的事件已经发出,设备是电池电量为80%的封闭式充电器或者电池电量为30%的开放式充电器。如果你习惯于每天晚上插上设备充电,目标是让fstrim大约每24小时运行一次。
当调用FsTRIM时,它向所有可写文件系统发送FITRIM ioctl()命令,这将丢弃文件系统未使用的eMMC上的(TRIM)块。如果没有TRIM,控制器会跟踪文件系统中删除了数据的块,但控制器仍然认为有必要跟踪数据。TRIM是文件系统和操作系统可以告诉控制器,它现在可以考虑将那些未使用的块和信号路径用于垃圾收集-不同的控制器会有不同的行为,因为决定接下来会发生什么是它们的特权。
换句话说,如果您的设备空闲并接通电源超过一个小时,它将运行“启动空闲维护窗口”事件。但是,只有在过去24小时内没有发送“启动空闲维护窗口”事件,并且电池电量超过80%或插上电源且电池电量超过30%时,才会出现这种情况。另一种调用trim的方法是使用fstrim实用程序的前端,强制应用如XDA资深会员AuxLV的Lagfix应用执行TRIM。
如果没有明显的性能提升,这些都不重要。那么,在I/O性能方面,你对4.3有什么期望呢?接下来的几天,我开始寻找两种日常使用的装备。在我个人的Nexus 7(8 GB)和Nexus 10(16 GB)上,从官方JDQ39(4.2.2)升级到官方JWR66V(4.3)前后,我会使用Androbench存储基准进行测试。两个设备的利用率都很高,相互之间传输的数据很多,删除操作也差不多。在运行“After”测试之后,我将对设备进行根测试,并使用LagFix fstrim的前端手动执行调整,然后重新运行基准测试。
标签: