OpenHarmony是面向全場景泛終端設(shè)備的操作系統(tǒng),終端設(shè)備內(nèi)存性能的強(qiáng)弱會直接影響用戶的體驗。終端設(shè)備的內(nèi)存差異很大,對于內(nèi)存比較小的終端設(shè)備,內(nèi)存優(yōu)化方案無疑是增強(qiáng)內(nèi)存性能、提升用戶體驗的關(guān)鍵。針對傳統(tǒng)內(nèi)存方案及管理機(jī)制的不足,OpenHarmony構(gòu)建了一套完善的內(nèi)存解決方案——ESWAP。
1.傳統(tǒng)內(nèi)存方案及管理機(jī)制
在傳統(tǒng)的Linux內(nèi)存優(yōu)化方案中,終端設(shè)備通常采用SWAP及ZRAM內(nèi)存方案。
1.1 SWAP
SWAP即內(nèi)存交換技術(shù)或虛擬內(nèi)存技術(shù),如圖1所示,在系統(tǒng)的物理內(nèi)存不足時,把內(nèi)存中的一部分不常用的內(nèi)存空間釋放出來,以增大系統(tǒng)可用內(nèi)存供當(dāng)前運(yùn)行的程序使用。這些被釋放的數(shù)據(jù)被臨時保存到SWAP分區(qū)中,等到需要使用時,再從SWAP分區(qū)中恢復(fù)到內(nèi)存中。
圖1 SWAP虛擬內(nèi)存技術(shù)
從圖1中不難看出,SWAP內(nèi)存交換技術(shù)增大了設(shè)備內(nèi)用內(nèi)存,但是,SWAP內(nèi)存換入/換出時會遭遇IO性能瓶頸,嚴(yán)重時甚至?xí)绊懹脩舻氖褂皿w驗,并且flash存儲器件的頻繁讀寫也會縮減其壽命。
1.2 ZRAM
ZRAM即內(nèi)存壓縮技術(shù),如圖2所示,在系統(tǒng)的物理內(nèi)存不足時,將系統(tǒng)物理內(nèi)存的一部分劃分出來作為ZRAM分區(qū),然后把不常用的匿名頁壓縮后放到ZRAM分區(qū)里,相當(dāng)于犧牲了一些CPU效率,以增大系統(tǒng)可用內(nèi)存供當(dāng)前運(yùn)行的程序使用。等到需要使用時,再從ZRAM分區(qū)中將數(shù)據(jù)解壓出來。
圖2 ZRAM內(nèi)存壓縮技術(shù)
雖然ZRAM在一定程度上增大了設(shè)備內(nèi)用內(nèi)存,但是如果沒有合適的方式來對內(nèi)存進(jìn)行管理,負(fù)面影響也會非常明顯,將會造成內(nèi)存頁頻繁的壓縮/解壓縮,從而搶占正常業(yè)務(wù)的CPU時間,增加系統(tǒng)的功耗。并且,如果壓縮/解壓速度不夠快的話,會直接影響用戶的使用體驗。
1.3 內(nèi)存管理機(jī)制
除了內(nèi)存方案不足,傳統(tǒng)的內(nèi)存分配及管理方式,無法感知業(yè)務(wù)特性及數(shù)據(jù)的重要性。如果終端設(shè)備多個進(jìn)程或業(yè)務(wù)共用一塊內(nèi)存,當(dāng)內(nèi)存負(fù)載越來越重,進(jìn)行內(nèi)存數(shù)據(jù)回收時,會頻繁出現(xiàn)數(shù)據(jù)搬移,以及內(nèi)存震蕩的現(xiàn)象。這些現(xiàn)象會加重內(nèi)核管理內(nèi)存的開銷,并導(dǎo)致系統(tǒng)CPU負(fù)載長期處于高負(fù)載的狀態(tài),從而增加系統(tǒng)功耗。
2.OpenHarmony內(nèi)存解決方案
針對原有內(nèi)存方案的不足,OpenHarmony構(gòu)建了一套完善的內(nèi)存解決方案ESWAP,打通了上層系統(tǒng)到內(nèi)核的調(diào)用棧,讓內(nèi)核能在上層配置的指導(dǎo)下,對每一塊內(nèi)存數(shù)據(jù)進(jìn)行合理的管理。
下面我們將為大家介紹ESWAP解決方案以及其關(guān)鍵技術(shù)的解析。
2.1 ESWAP方案介紹
ESWAP(Enhanced SWAP)是OpenHarmony針對內(nèi)存優(yōu)化問題提供的一套完善的內(nèi)存解決方案,結(jié)合內(nèi)存壓縮和內(nèi)存交換技術(shù),定制了一套合理高效的調(diào)度管理策略,使壓縮和交換兩者的工作能夠高效且平衡。ESWAP基于關(guān)聯(lián)性的數(shù)據(jù)聚合技術(shù)及上層指導(dǎo)策略,將內(nèi)存劃分為不同的分組進(jìn)行管理,通過回收優(yōu)先級來區(qū)分不同分組下內(nèi)存的活躍程度,優(yōu)先壓縮、換出較不活躍的內(nèi)存數(shù)據(jù),以提升數(shù)據(jù)交換性能,減少壽命沖擊。
ESWAP解決方案的整體框架如圖3所示:
圖3 ESWAP解決方案
ESWAP解決方案在全局資源調(diào)度子系統(tǒng)中增加了一個系統(tǒng)資源調(diào)度模塊,通過向賬戶子系統(tǒng)訂閱本地賬戶的變化來感知當(dāng)前的賬戶狀態(tài)和內(nèi)存狀態(tài),然后根據(jù)賬戶狀態(tài)給各個賬戶設(shè)置不同的回收優(yōu)先級、設(shè)置目標(biāo)可用內(nèi)存量、設(shè)置壓縮和換出的比例等參數(shù),并將這些參數(shù)下發(fā)給ZSWAPD。ZSWAPD會依據(jù)回收優(yōu)先級判斷回收的先后順序;依據(jù)目標(biāo)可用內(nèi)存量和當(dāng)前可用內(nèi)存量的差值決定回收的量;依據(jù)壓縮和換出的比例來決定壓縮和換出的量,從而實(shí)現(xiàn)在達(dá)成內(nèi)存擴(kuò)展效果前提下的性能和功耗平衡。
2.2 關(guān)鍵技術(shù)解析
ESWAP內(nèi)存解決方案都用到了哪些關(guān)鍵技術(shù)呢?下面為你一一道來。
2.2.1 定制的ZRAM和交換分區(qū)
ESWAP結(jié)合內(nèi)存壓縮和內(nèi)存交換技術(shù),提供了自定義新增存儲分區(qū)作為內(nèi)存交換分區(qū)的能力,并在內(nèi)核中創(chuàng)建了一個常駐進(jìn)程ZSWAPD,用于將ZRAM壓縮后的匿名頁加密換出到ESWAP存儲分區(qū)中,從而能完全地空出一塊可用內(nèi)存,以此來達(dá)到維持Memavailable水線的目標(biāo),如圖4所示。
圖4 ESWAP技術(shù)
同時,ESWAP模塊還可以記錄每個匿名頁的冷熱特征信息,并將這些數(shù)據(jù)通過關(guān)聯(lián)性、冷熱順序進(jìn)行相應(yīng)的存放,使ESWAP交換區(qū)中連續(xù)存放的匿名頁具有時間和空間局部性。因此在匿名頁換入時,可以將交換區(qū)中的相鄰匿名頁一并讀入ZRAM,以此來保證數(shù)據(jù)的存取速度,提升IO性能。
2.2.2 動態(tài)的內(nèi)存回收機(jī)制
OpenHarmony提供了一種額外的內(nèi)存回收機(jī)制ZSWAPD,并創(chuàng)建了“buffer”來作為衡量當(dāng)前系統(tǒng)內(nèi)存能力的指標(biāo)。buffer指的是當(dāng)前系統(tǒng)能提供的最大可用內(nèi)存。ZSWAPD會根據(jù)buffer量以及上文所述的各種策略,來對匿名頁進(jìn)行壓縮換出以回收。同時,ZSWAPD還能根據(jù)內(nèi)存冷熱分離的合理性以及內(nèi)存回收狀態(tài), 動態(tài)地控制ZRAM和ESWAP之間的平衡,從而獲得更高的能效比。
2.2.3 靈活的內(nèi)存回收策略
OpenHarmony基于Memcg分組進(jìn)行了回收策略的增強(qiáng),使用回收優(yōu)先級來指導(dǎo)ZSWAPD回收的先后順序?;厥詹呗詫⒓榷ǖ腷uffer相關(guān)配置下發(fā)給ZSWAPD,來指導(dǎo)其回收適當(dāng)數(shù)量的內(nèi)存。此外,由于匿名頁可能存儲在RAM、ZRAM、ESWAP三個模塊中, 上層可以根據(jù)需要,通過靈活地配置交換策略,控制這三個模塊中存儲的比例,避免頻繁換入換出帶來的負(fù)面影響。
至此,ESWAP的三項關(guān)鍵技術(shù)就介紹完了,我們來總結(jié)一下:
● 定制的ZRAM和交換分區(qū):將數(shù)據(jù)通過關(guān)聯(lián)性、冷熱順序進(jìn)行存放,保證了數(shù)據(jù)的存取速度,提升了IO性能。
● 動態(tài)的內(nèi)存回收機(jī)制:從回收優(yōu)先級、可用內(nèi)存量、壓縮和交換比例三個維度動態(tài)地控制數(shù)據(jù)回收,從而獲得更高的能效比。
● 靈活的內(nèi)存回收策略:靈活地控制RAM、ZRAM、ESWAP三個模塊數(shù)據(jù)存儲的比例,保證了各個模塊的平衡。
2.3 ESWAP相關(guān)接口
ESWAP解決方案支持系統(tǒng)開發(fā)者定制自己的回收策略,并在/dev/memcg下提供了僅對上層回收策略可見的接口。系統(tǒng)開發(fā)者可以通過這些接口來定制自己的上層策略,具體接口如下所示:
以上就是本文全部內(nèi)容,ESWAP解決方案仍在不斷建設(shè)中,期待廣大開發(fā)者加入我們,共同見證全場景智能時代的無限可能!
感興趣的小伙伴可以通過下面鏈接獲取ESWAP源碼進(jìn)行深入了解:
https://gitee.com/openharmony/kernel_linux_5.10/pulls/43
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )