作者:樊成陽、陳杰
OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)是面向全場景泛終端裝置的作業系統,終端裝置記憶體效能的強弱會直接影響使用者的體驗。終端裝置的記憶體差異很大,對於記憶體比較小的終端裝置,記憶體優化方案無疑是增強記憶體效能、提升使用者體驗的關鍵。針對傳統記憶體方案及管理機制的不足,OpenHarmony 構建了一套完善的記憶體解決方案——ESWAP。
1.傳統記憶體方案及管理機制
在傳統的 Linux 記憶體優化方案中,終端裝置通常採用 SWAP 及 ZRAM 記憶體方案。
1.1 SWAP
SWAP 即記憶體交換技術或虛擬記憶體技術,如圖 1 所示,在系統的實體記憶體不足時,把記憶體中的一部分不常用的記憶體空間釋放出來,以增大系統可用記憶體供當前執行的程式使用。這些被釋放的資料被臨時儲存到 SWAP 分割槽中,等到需要使用時,再從 SWAP 分割槽中恢復到記憶體中。
$$ 圖1 SWAP虛擬記憶體技術 $$
從圖 1 中不難看出,SWAP 記憶體交換技術增大了裝置內用記憶體,但是,SWAP 記憶體換入/換出時會遭遇 IO 效能瓶頸,嚴重時甚至會影響使用者的使用體驗,並且 flash 儲存器件的頻繁讀寫也會縮減其壽命。
1.2 ZRAM
ZRAM 即記憶體壓縮技術,如圖 2 所示,在系統的實體記憶體不足時,將系統實體記憶體的一部分劃分出來作為 ZRAM 分割槽,然後把不常用的匿名頁壓縮後放到 ZRAM 分割槽裡,相當於犧牲了一些 CPU 效率,以增大系統可用記憶體供當前執行的程式使用。等到需要使用時,再從 ZRAM 分割槽中將資料解壓出來。
$$ 圖2 ZRAM記憶體壓縮技術 $$
雖然 ZRAM 在一定程度上增大了裝置內用記憶體,但是如果沒有合適的方式來對記憶體進行管理,負面影響也會非常明顯,將會造成記憶體頁頻繁的壓縮/解壓縮,從而搶佔正常業務的 CPU 時間,增加系統的功耗。並且,如果壓縮/解壓速度不夠快的話,會直接影響使用者的使用體驗。
1.3 記憶體管理機制
除了記憶體方案不足,傳統的記憶體分配及管理方式,無法感知業務特性及資料的重要性。如果終端裝置多個程式或業務共用一塊記憶體,當記憶體負載越來越重,進行記憶體資料回收時,會頻繁出現資料搬移,以及記憶體震盪的現象。這些現象會加重核心管理記憶體的開銷,並導致系統 CPU 負載長期處於高負載的狀態,從而增加系統功耗。
2.OpenHarmony記憶體解決方案
針對原有記憶體方案的不足,OpenHarmony 構建了一套完善的記憶體解決方案 ESWAP,打通了上層系統到核心的呼叫棧,讓核心能在上層配置的指導下,對每一塊記憶體資料進行合理的管理。
下面我們將為大家介紹 ESWAP 解決方案以及其關鍵技術的解析。
2.1 ESWAP方案介紹
ESWAP(Enhanced SWAP)是 OpenHarmony 針對記憶體優化問題提供的一套完善的記憶體解決方案,結合記憶體壓縮和記憶體交換技術,定製了一套合理高效的排程管理策略,使壓縮和交換兩者的工作能夠高效且平衡。ESWAP 基於關聯性的資料聚合技術及上層指導策略,將記憶體劃分為不同的分組進行管理,通過回收優先順序來區分不同分組下記憶體的活躍程度,優先壓縮、換出較不活躍的記憶體資料,以提升資料交換效能,減少壽命衝擊。
ESWAP 解決方案的整體框架如圖3所示:
$$ 圖3 ESWAP解決方案 $$
ESWAP 解決方案在全域性資源排程子系統中增加了一個系統資源排程模組,通過向賬戶子系統訂閱本地賬戶的變化來感知當前的賬戶狀態和記憶體狀態,然後根據賬戶狀態給各個賬戶設定不同的回收優先順序、設定目標可用記憶體量、設定壓縮和換出的比例等引數,並將這些引數下發給 ZSWAPD。ZSWAPD 會依據回收優先順序判斷回收的先後順序;依據目標可用記憶體量和當前可用記憶體量的差值決定回收的量;依據壓縮和換出的比例來決定壓縮和換出的量,從而實現在達成記憶體擴充套件效果前提下的效能和功耗平衡。
2.2 關鍵技術解析
ESWAP 記憶體解決方案都用到了哪些關鍵技術呢?下面為你一一道來。
2.2.1 定製的ZRAM和交換分割槽
ESWAP 結合記憶體壓縮和記憶體交換技術,提供了自定義新增儲存分割槽作為記憶體交換分割槽的能力,並在核心中建立了一個常駐程式 ZSWAPD,用於將 ZRAM 壓縮後的匿名頁加密換出到 ESWAP 儲存分割槽中,從而能完全地空出一塊可用記憶體,以此來達到維持 Memavailable 水線的目標,如圖 4 所示。
$$ 圖4 ESWAP技術 $$
同時,ESWAP 模組還可以記錄每個匿名頁的冷熱特徵資訊,並將這些資料通過關聯性、冷熱順序進行相應的存放,使 ESWAP 交換區中連續存放的匿名頁具有時間和空間區域性性。因此在匿名頁換入時,可以將交換區中的相鄰匿名頁一併讀入 ZRAM,以此來保證資料的存取速度,提升 IO 效能。
2.2.2 動態的記憶體回收機制
OpenHarmony 提供了一種額外的記憶體回收機制 ZSWAPD,並建立了“buffer”來作為衡量當前系統記憶體能力的指標。buffer 指的是當前系統能提供的最大可用記憶體。ZSWAPD 會根據 buffer 量以及上文所述的各種策略,來對匿名頁進行壓縮換出以回收。同時,ZSWAPD 還能根據記憶體冷熱分離的合理性以及記憶體回收狀態, 動態地控制 ZRAM 和 ESWAP 之間的平衡,從而獲得更高的能效比。
2.2.3 靈活的記憶體回收策略
OpenHarmony 基於 Memcg 分組進行了回收策略的增強,使用回收優先順序來指導 ZSWAPD 回收的先後順序。回收策略將既定的 buffer 相關配置下發給 ZSWAPD,來指導其回收適當數量的記憶體。此外,由於匿名頁可能儲存在 RAM、ZRAM、ESWAP 三個模組中, 上層可以根據需要,通過靈活地配置交換策略,控制這三個模組中儲存的比例,避免頻繁換入換出帶來的負面影響。
至此,ESWAP 的三項關鍵技術就介紹完了,我們來總結一下:
● 定製的 ZRAM 和交換分割槽:將資料通過關聯性、冷熱順序進行存放,保證了資料的存取速度,提升了 IO 效能。
● 動態的記憶體回收機制:從回收優先順序、可用記憶體量、壓縮和交換比例三個維度動態地控制資料回收,從而獲得更高的能效比。
● 靈活的記憶體回收策略:靈活地控制 RAM、ZRAM、ESWAP 三個模組資料儲存的比例,保證了各個模組的平衡。
2.3 ESWAP相關介面
ESWAP 解決方案支援系統開發者定製自己的回收策略,並在 /dev/memcg 下提供了僅對上層回收策略可見的介面。系統開發者可以通過這些介面來定製自己的上層策略,具體介面如下所示:
以上就是本文全部內容,ESWAP 解決方案仍在不斷建設中,期待廣大開發者加入我們,共同見證全場景智慧時代的無限可能!感興趣的小夥伴可以通過下面連結獲取ESWAP原始碼進行深入瞭解:
https://gitee.com/openharmony...