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