作者:jikecheng,miaoxie,HarmonyOS內核技術專家
HarmonyOS整體框架分為四個層級,如圖1所示。從上到下,依次為:第一層是應用層,主要涵蓋系統應用、Launcher、設置,以及三方應用。第二層是框架層,提供基礎UI框架、用戶程序框架以及能力模塊框架。第三層是系統服務層,讓HarmonyOS具有分布式流轉負載的能力。大家看到的高速多設備協同能力就是由該層級提供。
而承載整個操作系統,同時發揮芯片算力的基石就沉淀在第四層——內核層。宏觀來說,內核的主要工作包含芯片資源管理、軟件任務調度,以及銜接用戶空間與系統調用能力。
圖1 HarmonyOS整體框架
本期,我們要重點給大家講一講HarmonyOS的內核層。
一、HarmonyOS內核構成
為了支撐HarmonyOS在多設備、多場景下的性能表現,內核主要由三部分組成,如下圖所示:
圖2 內核的組成
- HarmonyOS內核組件:具有智慧化資源管理能力的內核組件,包括CPU/GPU資源管理,內存管理,IO調度管理以及高效的文件系統等。
- 標准的Linux內核:兼容了LTS Linux主線版本,做好外圍生態的對接。
- 硬件平台BSP:面向各種不同芯片與硬件平台(包含1+8+N的多種設備)的BSP(board support package,板級支撐包)基礎能力。
本期要為大家介紹的就是HarmonyOS內核組件的三項核心技術:高能效CPU資源調度、Hyperhold內存管理引擎和高效的文件系統。下面為大家一一揭曉~
二、高能效CPU資源調度
業界多數的操作系統都是基於標准的Linux內核開發的。傳統的Linux內核,早期用於服務器和PC設備,與我們現在用於手機、平板等的交互式內核相比,它們的設計理念和資源管理方式有所不同。以CPU資源為例,傳統的Linux內核存在以下典型問題:
1. 同優先級的業務過多,每次調度都不一定選擇到關鍵進程。
傳統的Linux內核偏向於在多用戶的場景下公平地分配資源。比較明顯的特征是,多個用戶並發訪問,並發使用公共資源。由於同優先級的業務比較多,每次任務調度不一定能夠選擇到關鍵進程。舉個例子,當設備后台存在多個應用或者服務任務時,系統中和用戶交互最敏感的渲染任務沒法即時得到調度資源,導致設備會高概率出現使用不流暢或者點擊無響應的現象,也就是咱們平時常說的隨機卡頓。
2. 選擇最優能效的CPU資源時間過長,CPU資源選擇過度。
傳統的Linux內核選擇算力的流程,是一個慢速爬坡的過程。任務調度必須經過選擇CPU核簇、負載均衡、選擇頻點等一系列流程。其漫長的過程,極易導致任務調度錯過調度窗口,出現算力供給不足的現象。
為了解決以上問題,HarmonyOS內核提供了全棧式的調度框架,如下圖所示:
圖3 HarmonyOS調度管理框架
HarmonyOS調度管理框架有以下特點:
● 任務按優先級調度
對現有系統任務進行嚴格級別划分,在線標記與用戶的操作體驗直接相關的關鍵進程和關聯任務,優先調度關鍵任務。
● 依據CPU負載情況選擇最優任務分配
我們會動態檢測不同CPU的負載,保證當前CPU有足夠的算力提供。
● 選擇最優頻點實現高能效
我們提供了頻點與性能、功耗之間的帕累托最優模型。每次任務,我們都能夠快速選擇系統最優的頻點組合方式,實現最優能效。
經過試驗,HarmonyOS的全棧式調度框架可以幫助用戶獲得在多場景(尤其是游戲場景)下持續且穩定的高幀率體驗。
三、Hyperhold內存管理引擎
對於內存管理,由於開源生態的不限制,導致應用開發的內存使用野蠻生長。設備長時間使用后,可回收內存越來越低。產生這個問題的原因有兩個:
1. 傳統內存數據冷熱管理,無法感知業務特性
盡管Linux內核提供了很多的內存回收機制,然而每種內存回收都會有相應的系統代價。比如,回收文件頁面后,如果系統需要二次加載這部分數據,需要從底層器件Flash里面把數據讀回來,這會引起Flash隨機IO讀的現象。對IO操作來說,Flash器件速度和當前讀取任務是隨機讀還是順序讀有着很強的相關性,隨機讀容易導致系統隨機卡頓。再比如,回收匿名頁面后,如果系統需要二次加載這部分數據,會觸發ZRAM解壓,消耗CPU。
另外,由於應用的內存負載越來越重,當系統冷熱數據識別不恰當,會導致系統的CPU負載長期處於高負載狀態,最終影響前台應用的基礎性能。
2. 傳統共享式內存分配,無法感知數據重要性
從內存分配角度看,現在的操作系統基本采用統一接口的分配方式,使得手機里面多個進程或多個業務會共用一塊內存區域。數據回收時,會頻繁出現數據搬移,以及內存震盪的現象。這個現象會加重內核管理內存的開銷。
為了解決傳統Linux內核的內存問題,HarmonyOS提供了Hyperhold內存管理引擎。Hyperhold內存管理引擎打通了上層系統到內核的調用棧,讓內核完整感知到應用的整個生命周期,並結合應用生命周期以及周期內的數據訪問特征,對每一塊內存數據做合理的內存管理。同時,為了降低內核管理內存的開銷,我們提出了自研的壓縮體系,包括多線程壓縮、自研的壓縮算法。為了進一步擴大可用空間,我們在Flash器件上開出了一塊可交換區,結合自研的聚合換出和內存標記技術,充分利用Flash器件的性能。
圖4 Hyperhold內存管理引擎
經過試驗, Hyperhold內存管理引擎可以讓應用在后台的駐留能力提升50%以上,用戶可以明顯感知到后台應用的保活率有大幅提升。
四、高效的文件系統
存儲處於整個緩存體系下的最慢路徑,容易成為系統性能瓶頸。不僅如此,由於存儲器件碎片化的問題,存儲還容易出現越用越慢的難題。其次,隨着系統的發展,系統占用存儲越來越多。而在多設備流轉的場景下,分布式文件系統的高效轉存能力顯得尤為重要。
為應對上述問題,HarmonyOS提供了高效的自研文件系統體系。從第一代的eF2FS到最新的HMDFS,文件系統逐步解決了碎片化問題、容量問題與多設備流轉問題。
圖5 HarmonyOS文件系統
下面我們從第一代的eF2FS到最新的HMDFS,依次介紹HarmonyOS文件系統的技術特點。
1. 第1代數據盤eF2FS:智能感知空間管理,改善越用越慢
面對存儲越用越慢的業界難題,我們通過數據類型感知的多流算法和空間感知的分配算法,減少碎片產生。同時,通過高效、業務感知的兩層智能垃圾空間回收,實現智能感知空間管理。
下面我們通過一個動圖,更好地了解HarmonyOS的空間管理機制。
2. 系統盤EROFS:變長壓縮,支持壓縮與性能雙贏
針對系統占用存儲越來越多的問題,業界其他操作系統也采取過改進措施,比如squashfs采用“定長輸入,變長輸出”的壓縮策略,但會存在讀放大的問題。而我們的EROFS(Extendable Read-Only File System,超級文件系統)采用“變長輸入,定長輸出”的壓縮策略,盡可能地將不等長的文件塊壓縮成一個等長的存儲塊進行存儲。這樣,我們訪問任何文件塊,只需讀取一個存儲塊,減少了無效讀取。除此之外,我們在解壓性能和IO流程上也做了優化。
圖6 系統盤EROFS的變長壓縮
通過以上關鍵技術,系統盤EROFS的性能得到大幅提升:
- 隨機讀性能平均提升20%。
- 系統初始空間相比Ext4節省2GB,相當於用戶可以多存1000張照片或500首歌曲。
- 升級包大小下降約5%-10%,升級時間縮短約20%。
3. 跨設備HMDFS:“批流”結合的分布式文件系統
HarmonyOS同一套系統能力、適配多種終端形態的分布式理念,就要求我們有一套數據流轉的底座——分布式文件系統HMDFS。
圖7 HMDFS
應對多設備流轉,HMDFS提供了多種文件系統能力,包括:
- 文件類型聚合
- 高效的緩存管理
- 批處理接口
- 分布式的權限管控
- 高效傳輸
- 數據一致性管理
通過上述一系列技術的研發與集成,最終實現了現有的跨設備高效文件系統,為用戶提供流暢的分布式體驗。
五、未來演進方向
上面就是我們本期要介紹的HarmonyOS內核核心技術內容了。未來還有很多方向值得我們繼續探索,下圖列出了HarmonyOS內核的未來演進方向。
圖8 未來演進方向
相信經過我們不斷的探索,我們能打造出更好的內核,為大家提供更流暢、體驗更好的HarmonyOS!
掃碼添加開發者小助手微信
獲取更多HarmonyOS開發資源和開發者活動資訊