Android4.3中的TRIM優化是什么?
要了解Android 4.3 TRIM支持對性能的提升,首先要了解的是TRIM。
TRIM 是什么?
Trim-一個ATA指令,由操作系統發送給SSD主控制器,告訴它哪些數據占的地址是“無效”的。當你在電腦里刪除一個文件的時候,操作系統并不 會真正的去刪除它。操作系統只是把這個文件的地址標記為“空”,讓它可以被再次使用,這表示這個文件所占的地址已經“無效”。但這會帶來一個問題,硬盤并 不知道操作系統已把這個地址標記為“空”了,機械盤的話是無所謂,因為下次系統讓它在這個地址上面寫入數據的時候,可以直接在上面重新覆蓋寫入,但是到了 SSD上就出問題了。閃存需要先擦除才能再次寫入數據,要得到空閑的閃存空間,SSD必須復制所有的“有效”頁到新的“空白塊”里,并擦除舊塊(垃圾回收)。如果沒有Trim,那意味著SSD主控制器不會知道這個頁是“無效”的,除非等到再次被操作系統要求覆蓋數據進去。這樣就無法在最適當的時機做出最 好的優化,既影響垃圾回收的效率(間接影響性能),又影響SSD的耐久度(就是很多人都相當關心的壽命)。這里要強調下,Trim只是條指令,讓操作系統 告訴SSD主控制器這個頁已經“無效”就算完了,并沒有任何其它多余的操作。
工作在Android 中的 TRIM
Linux 內核在 2.6.33 年代已經引入 TRIM,但不是所有 Linux 文件系統都原生支持 TRIM,在 Android 廣泛使用的 ext4 是原生支持 TRIM 的。而 Android 2.3 就已經設置 ext4 為默認的文件系統,之前升級上來的 Android 可能還是使用 YAFFS2。預裝 Android 4.0 或以上版本的手機或平板大多都是使用 ext4 了。
調用 TRIM 整理 NAND 上的碎片有兩種方法,一是掛載 ext4 分區時加上 discard 選項,二是使用 fstrim 命令。Android 4.3 中的 TRIM 是用 fstrim 實現的,但一般 Linux 發行版并不建議使用 fstrim 的方法,而是使用 mount ext4 分區時加上 discard 選項的辦法。因為 discard 選項會在每一個磁盤操作時同時執行 TRIM 指令,所以可能會影響到刪除文件時的性能。
據介紹 Android 4.3 需要滿足下述條件,才會執行 fstrim。設備未使用超過一個小時、過往24小時沒有空閑維護窗口事件、電池剩余電量不低于80%、設備正在充電且電量不低于30%。如果你習慣每天 晚上插上充電,fstrim會大概每24小時執行一次。Google 的做法是在各種傳感器達到條件后才出發 TRIM 指令。
對于非 Android 4.3 用戶,Google Play 商店上的一款 Lagfix 的軟件就可以讓非 Android 4.3 的設備使用 TRIM,需要 Root。已經 Root 的手機,其實也可以直接修改 Android 的文件系統掛載表,加上 discard 參數后重新開機即可,修改方法大致和 Linux 系統相同。
在ADB中執行以下命令就可以驗證fstrim是否工作了:
adb logcat -d | grep -i fstrim