OpenHarmony3.1 Release版本關鍵特性解析——Enhanced SWAP記憶體管理

来源:https://www.cnblogs.com/openharmony/archive/2022/05/17/16281788.html
-Advertisement-
Play Games

針對傳統記憶體方案及管理機制的不足,OpenHarmony 構建了一套完善的記憶體解決方案——ESWAP。 ...


樊成陽 華為技術有限公司內核專家
陳傑 華為技術有限公司內核專家

 

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/kernel_linux_5.10/pulls/43

 

 

搜索

複製


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. mysql排序問題 一直以為mysql是按照主鍵排序的,實則排序和主鍵沒有關係(不使用 order by 子句)。 然後從 stackoverflow 上查了一下,找到了以下的回答: 沒有預設的排序順序。即使表具有聚集索引,也不能保證按該順序獲得結果。如果需要特定的順序,則必須使用ORDER ...
  • 一、概述 Presto是Facebook開源的MPP(Massively Parallel Processing:大規模並行處理)架構的OLAP(on-line transaction processing:聯機事務處理),完全基於記憶體的並⾏計算,可針對不同數據源,執行大容量數據集的一款分散式SQL ...
  • 書名《MySQL是怎樣運行的:從根兒上理解MySQL》。 這本書講得真的很好,建議大家想學習的去看看😊 本文是基於我的認識上將InnoDB的結構進行的回想,查缺補漏。 InnoDB記錄結構 InnoDB是以頁來存儲數據的,一個頁的大小為16KB。 InnoDB行格式有COMPACT行格式和Redu ...
  • 書名《MySQL是怎樣運行的:從根兒上理解MySQL》可自行百度 以下是知識點總結 重新認識Mysql MySQL是一個C/S架構的軟體。 在Windows安裝後首先註冊成服務,然後會在開機後自啟動。 啟動MySQL服務端。 直接在bin目錄下執行mysqld 或者在配置文件my.ini中設置一些默 ...
  • 導讀: 電商場景的搜索排序演算法根據用戶搜索請求,經過召回、粗排、精排、重排與混排等模塊將最終的結果呈現給用戶,演算法的優化目標是提升用戶轉化。傳統的有監督訓練方式,每一步迭代的過程中優化當前排序結果的即時反饋收益。但是,實際上用戶和搜索系統之間不斷交互,用戶狀態也在不斷變化,每一次交互後排序結果和用戶 ...
  • 查看PostgreSQL鎖表信息 一、查詢PG_STAT_ACTIVITY的信息 SELECT * FROM pg_stat_activity where datname='bms' and wait_event_type='Lock' 二、通過pid解鎖死鎖信息 select pg_cancel_ ...
  • 本文介紹什麼是 SQL INNER JOIN 聯結,為什麼使用聯結,如何編寫使用聯結的 SELECT 語句。並講述了一些關係資料庫設計的基本知識,包括等值聯結(也稱為內聯結)這種最常用的聯結。 一、聯結 SQL 最強大的功能之一就是能在數據查詢的執行中聯結(join)表。聯結是利用 SQL 的 SE ...
  • HMS Core 3D Engine是一款高性能、高畫質、高可靠的實時3D引擎,旨在幫助開發者製作高品質的3D應用。3D Engine將為您提供可編程渲染管線,多維粒子系統,3D角色與動畫,超大地形地貌,智能尋路導航等諸多實用功能,以及便捷高效的可視化開發工具。 3D Engine渲染效果 千萬級面 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文將以 C# 語言來實現一個簡單的布隆過濾器,為簡化說明,設計得很簡單,僅供學習使用。 感謝@時總百忙之中的指導。 布隆過濾器簡介 布隆過濾器(Bloom filter)是一種特殊的 Hash Table,能夠以較小的存儲空間較快地判斷出數據是否存在。常用於允許一定誤判率的數據過濾及防止緩存 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 「簡單有價值的事情長期堅持做」 這是成功最簡單,但也最難學的秘訣。不經過訓練,人很難意識到時間複利的威力。 仙劍奇俠傳的「十里坡劍神」和金庸群俠傳的「十級野球拳」,就是簡單的事情持之以恆反覆做,最後就有巨大的威力 唐家三少成為網文收入第一,最重要的一步是十四年從未斷日更 這樣的案例很多,一開始可能成 ...
  • 迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“我愛加班”。 面試開始,直入正題。 面試官: 看你簡歷上面寫著精通MySQL,我先問你事務的特性是什麼? 老生常談,這個還有誰不會背的嗎? 我: ...
  • 基礎知識 python是一門腳本語言,它是解釋執行的。 python使用縮進做為語法,而且python2環境下同一個py文件中不能同時存在tab和空格縮進,否則會出錯,建議在IDE中顯示縮進符。 python在聲明變數時不寫數據類型,可以type(xx)來獲取欄位的類型,然後可以int(),list ...
  • 為什麼要多線程下載 俗話說要以終為始,那麼我們首先要明確多線程下載的目標是什麼,不外乎是為了更快的下載文件。那麼問題來了,多線程下載文件相比於單線程是不是更快? 對於這個問題可以看下圖。 橫坐標是線程數,縱坐標是使用對應線程數下載對應文件時花費的時間,藍橙綠代表下載文件的大小,每個線程下載對應文件2 ...
  • 詳細講解python爬蟲代碼,爬微博搜索結果的博文數據。 爬取欄位: 頁碼、微博id、微博bid、微博作者、發佈時間、微博內容、轉發數、評論數、點贊數。 爬蟲技術: 1、requests 發送請求 2、datetime 時間格式轉換 3、jsonpath 快速解析json數據 4、re 正則表達式提... ...
  • 背景: 一般我們可以用HashMap做本地緩存,但是HashMap功能比較弱,不支持Key過期,不支持數據範圍查找等。故在此實現了一個簡易的本地緩存,取名叫fastmap。 功能: 1.支持數據過期 2.支持等值查找 3.支持範圍查找 4.支持key排序 實現思路: 1.等值查找採用HashMap2 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 本章是系列文章的第八章,用著色演算法進行寄存器的分配過程。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 寄存器分配 寄存器分配是為程式處理的值找到存儲位置的問題 這些值可以存放到寄存器,也可以存放在記憶體中 寄存器更快,但數量有限 記憶體很多,但 ...