1. 程式人生 > >華為如何打造智慧終端的有趣靈魂?(上)

華為如何打造智慧終端的有趣靈魂?(上)

“智慧終端產品的靈魂是它所依賴的軟體平臺以及與之相匹配的服務和生態”華為講師方衛慶在安卓綠色聯盟開發者大會中講到。

華為如何打造智慧終端的有趣靈魂系列分為(上)(下)兩個篇章,本篇將對華為天生快·一生快技術產生的背景和一系列技術組合拳的打法進行詳細解讀。

每⼀次體驗提升都是複雜系統⼯程

image

 

端側的使用者體驗是一項非常複雜的系統性功能整合。上圖右側是安卓原生系統架構示意圖,左側是EMUI架構圖,每一次系統側的改進都是從底層貫穿到上層的全面提升,具體架構從下往上包括:

晶片層,由CPU、GPU、DSP、NPU、基帶、感測器、多媒體器件等組成;

核心層包括驅動層、硬體抽象層。其中硬體抽象層又包括程序管理、記憶體管理、檔案系統、網路管理等元件;

中介軟體主要包括大量的C和C++庫,以及Java虛擬機器;

再往上是跟開發者息息相關的框架層,這一層提供了大量的基礎核心功能,併為上層應用提供API介面;

最上層是應用層,包括安卓的原生應用、EMUI應用、開發者第三方應用。

天生快·一生快

1.安卓系統卡頓的原因:

①安卓系統管理鬆散

應用缺少約束,應用質量參差不齊。

②系統資源不足

應用沒有優先順序,應用鏈加劇資源消耗。

③儲存空間碎片化

經常儲存、刪除檔案,導致儲存空間碎片化,存取檔案速度下降。

④資料日益龐大

圖片、聯絡人等資料量越來越大,資料庫查詢、搜尋速度緩慢。

2.一系列技術的組合

image

針對四個主要問題,通過一系列的技術組合拳,達成天生快·一生快解決方案。

F2FS新型檔案系統

F2FS是為快閃記憶體設計的檔案系統,相比原有的EXT4檔案系統,F2FS的隨機寫入優化效率提升60%,磁片碎片化的情況也大大改善。

F2FS的關鍵技術:

①資料分配管理演算法

image

上圖中,資料管理分為兩個區域,元資料區域和資料區域。

元資料區域主要寫入的是SIT、NAT等,採用的是就地寫入的方案。

資料區採用的是異地寫入的方案,節點資訊和真正的資料資訊都被寫入資料區域,同時由於在資料區域使用異地寫入,所以會引入SSR和LFS多點寫入技術。

a.SSR和LFS協同配合技術

image

傳統的SSR異地寫入方式隨機寫入效率比較低,所以引入了新的LFS技術,它把原來的資料塊標為“髒”的同時並不需要直接做垃圾回收,而是直接在“髒”的資料塊上寫資料。之所以不直接全都採用SSR技術是因為大量的使用SSR會造成磁碟碎片的密集。

所以這是一個協同技術,在空閒塊少的情況下采用SSR技術;空閒塊多,大於5%的情況下使用LFS技術,這樣可以在壽命和效能之間達成很好的平衡。

b.多點寫入技術

資料區採用多點寫入的方式,這種方式的優點是將不同型別、不同熱度的資料寫入不同的段,提高垃圾回收效率。

image

②引入NAT

image

此技術的英文全稱是Node Address Table,它是一個對映表。

傳統的LFS檔案系統會帶來一個非常有趣的現象——滾雪球效應。首先,一旦改變了任何一個數據,它便會連續不斷的遞迴到樹狀結果根部,引起間接索引點、直接索引點以及Checkpoint的改變,帶來大量資源的浪費,引起後期垃圾回收效率降低。所以引入索引表最大的目的是為了減少這些節點。

建立對映表後,只需更改資料檔案、直接節點資訊、NAT和CheckPoint就可以完成工作,而不需要佔用大量磁碟空間,大大減輕GC的負擔。但是這種二級指標的結構會造成一個問題:NAT的定址比較慢。

所以通過將NAT資訊寫到原資料區,很大程度上緩解定址效率底的問題。

③其他關鍵技術

a.垃圾回收演算法

對於F-GC直接使⽤ Greedy回收策略,選出需要回收的段 ;對於B-GC,如果空閒空間少,也會直接使用Greedy回收策略,而如果空閒空間多,則會使用CB策略。

b.異常掉電保護

使用Checkpoint機制來保證檔案系統的一致性。F2FS維護了兩份檢查點:一個是穩定的,⼀個是正在使用。在恢復過程中,使用的是穩定版本。

3.FSTRIM上的優化解決原有設計的不足

image

FSTRIM是使用者態觸發的垃圾回收方案。它的觸發機制是這樣的:凌晨3點以後,裝置充電並待機70分鐘以上,就會觸發垃圾回收的行為。

但有一個問題,比如有些中老年使用者喜歡晚上關機充電,有些人喜歡白天充電,可能無法觸發FSTRIM,磁碟碎片得不到清理,怎麼解決這個問題? EMUI工程師調整了策略,在晚上11點之後,使用者充電的同時待機半小時以上,就開始觸發FSTRIM。

另外,針對習慣白天充電的使用者,設計了另外一條機制:當手機72小時沒有進行FSTRIM時,如果使用者插上電源,待機半小時便開始FSTRIM。

而且工程師設計了實時可打斷的機制,實現方式為:在Framework 層監控使用者螢幕事件,一旦有螢幕idle結束,就會觸發Stoptrim命令到Vold,然後Vold 傳送Signal interrupt訊號給trimtask來請求結束Trim,最後在kernel 層確認pending。

更精細的TRIM優化

 image