OpenHarmony全局資源調度管控子系統之內存管理部件

OpenHarmony之內存管理部件

  • 內存管理部件
    • 簡介
    • 目錄
    • 框架
      • 進程回收優先級列表
        • 補充
      • 回收策略/查殺策略
    • 使用說明
    • 參數配置說明
      • availbufferSize
      • ZswapdParam
      • killConfig
      • nandlife
    • 相關倉

簡介

內存管理部件位于全局資源調度管控子系統中,基于應用的生命周期狀態,更新進程回收優先級列表,通過內存回收、查殺等手段管理系統內存,保障內存供給。

目錄

/foundation/resourceschedule/memmgr
├── common           						# 部件通用工具類
│   ├── include
│   │   ├── kernel_interface.h				# 封裝了與Kernel交互的接口
│   │   ├── memmgr_log.h					# 封裝了hilog,用于日志打印
│   │   └── single_instance.h				# 封裝了單例模式的類模板
│   └── src
│       └── kernel_interface.cpp
│
|
├── sa_profile       						# 組件服務配置
|
├── services         						# 組件服務實現
|   └── memmgrservice    					# 對內接口目錄
|       ├── include
|       |   ├── event						# 事件注冊中心目錄
|       |   ├── reclaim_priority_manager	# 進程回收優先級管理目錄
|       |   ├── reclaim_strategy			# 回收策略目錄
|       |   └── kill_strategy				# 查殺策略目錄
|       └── src
|           ├── event
|           ├── reclaim_priority_manager
|           ├── reclaim_strategy
|           └── kill_strategry
|
└── test 									# 自測試用例目錄

框架

內存管理部件主要基于事件觸發回收優先級更新,并基于回收優先級管理內存回收和查殺,其框架如下所示(下圖虛線右側為本部件),主要分為如下幾個模塊:

1、事件管理模塊:統籌管理本部件所要對外響應的事件。主要功能為調用其他子系統提供的接口注冊事件監聽,并將事件通知到回收優先級管理模塊、回收策略模塊和查殺策略模塊。

2、回收優先級管理模塊:基于事件管理模塊的應用和用戶的事件通知,給出進程的回收和查殺的先后順序列表,并向回收策略和查殺策略提供查詢此列表的接口。

3、回收策略模塊:根據回收優先級列表,調整回收內存水線、文件頁/匿名頁回收比例、壓縮/換出比例等回收參數,以及協調不同回收機制協同工作,保障內存中低負載下的供給性能。

4、查殺策略模塊:作為回收的邏輯末端,根據回收優先級列表,保障內存重負載下的內存供給。

5、Kernel接口管控模塊:負責將回收參數、查殺等管控命令下發到Kernel。

6、內存特性配置:讀取回收策略模塊、查殺策略模塊等需要的配置文件。

7、磁盤壽命管控(規劃中):控制磁盤寫入量,以保障磁盤壽命。

OpenHarmony全局資源調度管控子系統之內存管理部件

進程回收優先級列表

進程回收優先級列表,提供了進程間回收和查殺的先后順序列表。本部件定義的進程回收優先級及其對應的描述如下表所示:

優先級描述
-1000系統進程,屬于該優先級的進程不會被查殺策略查殺,支持白名單配置
-800常駐進程,屬于該優先級的進程可以被查殺,但優先級較低,且被殺后可以再被拉起,支持白名單配置
0前臺應用。
100正在進行后臺短時任務的應用; 或者有被進程關聯的extension進程
200后臺可感知應用,如正在執行導航、播放音樂等長時任務的應用
260連接著分布式設備的后臺應用
400普通后臺應用及無被任何進程關聯的extension進程
補充
  1. extension進程的優先級根據其關聯進程組進行更新,其值在關聯進程組最小優先級基礎上增加100

回收策略/查殺策略

查殺作為回收的邏輯末端,與回收策略一脈相承,因此兩者使用相同的進程回收優先級列表,同時也要協同管控,協調兩者觸發時機,共同保障不同內存負載下的內存供給功能和性能。

  • 回收策略:回收策略是垂直內存管理的重中之重。回收策略管控了多種不同的內存回收機制,需要協調好不同機制,例如Purgeable/Speculative內存(規劃中)的回收要先于其他內存,再例如回收觸發時機要先于低內存查殺。

    在內存低負載時,可以將熱點文件cache在內存中以提升性能(規劃中)。

    內存中負載時,配置kswapd/zswapd等回收進程的內存水線(閾值)以及相應的回收參數,指導kswapd/zswapd工作。

    對于如下單點關鍵事件,例如大內存需求的相機場景,可以通過“場景處理”模塊單點配置,根據業務需求預回收(規劃中);再例如查殺場景,要停止kswapd/zswapd的基本動作,避免無效回收。

  • 查殺策略:查殺主要負責內存重負載場景。由內存壓力事件( Pressure Stall Information )觸發,根據查殺內存水線,從進程回收優先級列表中選擇低優先級進程進行清理。

    默認的查殺內存水線與可殺進程回收優先級對應關系如下表所示。未來,系統開發者和產品開發者可以根據內存RAM(Random Access Memory)規格、屏幕尺寸等需求通過修改xml配置修改該對應關系(xml配置暫不支持,規劃中)。

    查殺內存水線進程回收優先級
    500 MB400
    400 MB300
    300 MB200
    200 MB100
    100 MB0

使用說明

系統開發者可以通過配置productdefine/common/products下的產品定義json文件,增加或移除本部件,來啟用或停用本部件。

"resourceschedule:memmgr":{}

參數配置說明

產品可通過memmgr_config.xml來配置本模塊相關參數,路徑為/etc/memmgr/memmgr_config.xml

xml樣例:

<?xml version="1.0" encoding="UTF-8"?>
<Memmgr><reclaimConfig><availbufferSize><availBuffer>800</availBuffer><minAvailBuffer>750</minAvailBuffer><highAvailBuffer>850</highAvailBuffer><swapReserve>200</swapReserve></availbufferiSize><ZswapdParam id="1"><minScore>0</minScore><maxScore>500</maxScore><mem2zramRatio>60</mem2zramRatio><zran2ufsRation>10</zran2ufsRation><refaultThreshold>50</refaultThreshold></ZswapdParam><ZswapdParam id="2"><minScore>501</minScore><maxScore>1000</maxScore><mem2zramRatio>70</mem2zramRatio><zran2ufsRation>20</zran2ufsRation><refaultThreshold>60</refaultThreshold></ZswapdParam></reclaimConfig><killConfig><killLevel id="1"><memoryMB>500</memoryMB><minPriority>400</minPriority></killLevel><killLevel id="2"><memoryMB>400</memoryMB><minPriority>300</minPriority></killLevel></killConfig><nandlife><dailySwapOutQuotaMB>50</dailySwapOutQuotaMB><totalSwapOutQuotaMB>199</totalSwapOutQuotaMB></nandlife>
</Memmgr>

功能參考: 詳見Enhanced SWAP特性介紹

availbufferSize

節點名功能說明默認值
availBuffer期望的內存正常狀態buffer值800
minAvailBuffer檢測到當前的buffer低于min_avail_buffers時則會喚醒zswapd進行匿名頁回收750
highAvailBuffer期望的回收量為high_avail_buffers與當前系統buffer值的差值850
swapReserve交換分區空閑容量的閾值200

限制:

  • 0 <= minAvailBuffer <= availBuffer <= highAvailBuffer <= memTotal
  • 0 <=swapReserve <=memTotal

ZswapdParam

節點名功能說明默認值
minScore期望的內存正常狀態buffer值0
maxScore檢測到當前的buffer低于min_avail_buffers時則會喚醒zswapd進行匿名頁回收1000
mem2zramRatio內存壓縮到ZRAM的比率60
zran2ufsRationZRAM換出到ESwap的比率10
refaultThresholdrefault的閾值50

限制:

  • 0<=minScore<=1000
  • 0<=maxScore<=1000
  • 0<=ub_mem2zram_ratio<=100
  • 0<=ub_zram2ufs_ratio<=100
  • 0<=refault_threshold<=100

killConfig

內存查殺相關配置

節點名功能說明默認值
killLevel查殺級別
memoryMB查殺目標內存閾值
minPriority可被查殺的adj最小值

nandlife

壽命管控相關配置

節點名功能說明默認值
dailySwapOutQuotaMB每日換出量限制(單位MB),應為正數0
totalSwapOutQuotaMB總換出量限制(單位MB),應為正數0

相關倉

全局資源調度子系統

resource_schedule_service

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79005.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

姜老師的MBTI課程筆記小結(1)ENFJ人格

課程文稿&#xff1a; 好&#xff0c;今天我們的重點其實并不在ENTJ&#xff0c;而是在于如果一個人其他都很像&#xff0c;只是在思考和感受這兩端選擇的時候&#xff0c;他缺了思考而更尊重感受&#xff0c;它會是什么樣的一個人格特質呢&#xff1f;這就是ENFG在16人格的學派…

Node.js 應用場景

Node.js 應用場景 引言 Node.js 是一個基于 Chrome V8 JavaScript 引擎的開源、跨平臺 JavaScript 運行環境。它主要用于服務器端開發&#xff0c;通過非阻塞 I/O 模型實現了高并發處理能力。本文將詳細介紹 Node.js 的應用場景&#xff0c;幫助你了解其在實際項目中的應用。…

Qt/C++面試【速通筆記六】—Qt 中的線程同步

在多線程編程中&#xff0c;多個線程同時訪問共享資源時&#xff0c;可能會出現數據不一致或者錯誤的情況。這時&#xff0c;我們需要線程同步機制來保證程序的正確性。Qt 提供了多種線程同步方式&#xff0c;每種方式適用于不同的場景。 1. 互斥鎖&#xff08;QMutex&#xff…

JDK-17 保姆級安裝教程(附安裝包)

文章目錄 一、下載二、安裝三、驗證是否安裝成功1、看 java 和 javac 是否可用2、看 java 和 javac 的版本號是否無問題 一、下載 JDK-17_windows-x64_bin.exe 二、安裝 三、驗證是否安裝成功 java&#xff1a;執行工具 javac&#xff1a;編譯工具 1、看 java 和 javac 是否…

【LeetCode Hot100】回溯篇

前言 本文用于整理LeetCode Hot100中題目解答&#xff0c;因題目比較簡單且更多是為了面試快速寫出正確思路&#xff0c;只做簡單題意解讀和一句話題解方便記憶。但代碼會全部給出&#xff0c;方便大家整理代碼思路。 46. 全排列 一句話題意 給定一個無重復數字的序列&#xf…

pytest-前后置及fixture運用

1.pytest中的xunit風格前后置處理 pytest中用例的前后置可以直接使用類似于unittest中的前后置處理&#xff0c;但是pytest中的前后置處理方式更 加豐富&#xff0c;分為模塊級、類級、方法級、函數級等不同等級的前后置處理&#xff0c;具體見下面的代碼&#xff1a; test_…

使用scipy求解優化問題

一、求解二次規劃問題 min(X.T * P * X C.T * X) s.t. Xi > 0 ∑Xi 1 1.定義目標函數 def objective(x):return 0.5 * np.dot(x, np.dot(P, x)) np.dot(c, x)2. 定義等式約束 def equality_constraint(x):return np.sum(x) - 1 3.定義邊界約束&#xff1a;x # …

C++初階-STL簡介

目錄 1.什么是STL 2.STL的版本 3.STL的六大組件 4.STL的重要性 4.1在筆試中 4.2在面試中 4.3.在公司中 5.如何學習STL 6.總結和之后的規劃 1.什么是STL STL&#xff08;standard template library-標準模板庫&#xff09;&#xff1b;是C標準庫的重要組成部分&#xf…

kivy android打包buildozer.spec GUI配置

這個適合剛剛學習kivyd的道友使用&#xff0c;后面看情況更新 代碼 import tkinter as tk from tkinter import ttk, filedialog, messagebox, simpledialog import configparser import os import json # 新增導入class BuildozerConfigTool:def __init__(self, master):se…

MOOS-ivp使用(一)——水下機器人系統的入門與使用

MOOS-ivp使用&#xff08;一&#xff09;——水下機器人系統的入門與使用 MOOS-ivp&#xff08;Marine Operational Oceanographic System for Intelligent Vehicle Planning&#xff09;是專為水下機器人&#xff08;如AUV&#xff09;設計的開源框架。類似于ROS&#xff0c;…

電子病歷高質量語料庫構建方法與架構項目(智能質控體系建設篇)

引言 隨著人工智能技術的迅猛發展,醫療信息化建設正經歷著前所未有的變革。電子病歷作為醫療機構的核心數據資產,其質量直接關系到臨床決策的準確性和醫療安全。傳統的病歷質控工作主要依賴人工審核,存在效率低下、主觀性強、覆蓋面有限等問題。近年來,基于人工智能技術的…

react學習筆記4——React UI組件庫與redux

流行的開源React UI組件庫 material-ui(國外) 官網: http://www.material-ui.com/#/github: GitHub - mui/material-ui: Material UI: Comprehensive React component library that implements Googles Material Design. Free forever. ant-design(國內螞蟻金服) 官網: Ant…

GPU集群搭建

1. 硬件規劃與采購 GPU 服務器&#xff1a;挑選契合需求的 GPU 服務器&#xff0c;像 NVIDIA DGX 系列就不錯&#xff0c;它集成了多個高性能 GPU。網絡設備&#xff1a;高速網絡設備不可或缺&#xff0c;例如萬兆以太網交換機或者 InfiniBand 交換機&#xff0c;以此保證節點…

ZYNQ 純PL端邏輯資源程序固化流程

ZYNQ 純PL端邏輯資源程序固化 ZYNQ的程序固化流程比傳統的FPGA固化流程復雜很多&#xff0c;Vivado生成的bit文件無法直接固化在ZYNQ芯片中。因為ZYNQ 非易失性存儲器的引腳&#xff08;如 SD 卡、QSPI Flash&#xff09;是 ZYNQ PS 部分的專用引腳。這些非易失性存儲器由 PS …

[計算機科學#6]:從鎖存器到內存,計算機存儲的構建與原理

【核知坊】&#xff1a;釋放青春想象&#xff0c;碼動全新視野。 我們希望使用精簡的信息傳達知識的骨架&#xff0c;啟發創造者開啟創造之路&#xff01;&#xff01;&#xff01; 內容摘要&#xff1a;在上一篇文章中&#xff0c;我們深入了解了計算機如…

如何刪除Google Chrome中的所有歷史記錄【一鍵清除】

谷歌瀏覽器記錄了用戶訪問過的網站。這方便了查找&#xff0c;但有時也需要清理。刪除所有歷史記錄很簡單&#xff0c;只要按照以下步驟操作。 1. 打開谷歌瀏覽器 首先要啟動谷歌瀏覽器。點擊右上角的三個點&#xff0c;進入主菜單。 2. 進入歷史記錄界面 在菜單中找到“歷史…

關于瀏覽器對于HTML實體編碼,urlencode,Unicode解析

目錄 HTML實體編碼 URL編碼 Unicode編碼 解析層次邏輯 為什么<script></script>不可以編碼符號 為什么不能編碼JavaScript:協議 為什么RCDATA標簽中的都會被解析成文本 為什么HTML編碼了<>無法執行 HTML實體編碼 通過特殊語法&#xff08;<、>…

【數據分享】2020年中國高精度森林覆蓋數據集(免費獲取)

森林作為全球陸地生態系統的主體&#xff0c;分布面積廣、結構復雜&#xff0c;承擔著調節氣候、維護生態安全、改善環境等方面的重要作用。我國的森林資源豐富&#xff0c;據《中國森林資源報告&#xff1a;2014—2018》統計&#xff0c;我國森林覆蓋率已經達到23.04%。森林覆…

C語言學習之動態內存的管理

學完前面的C語言內容后&#xff0c;我們之前給內存開辟空間的方式是這樣的。 int val20; char arr[10]{0}; 我們發現這個方式有兩個弊端&#xff1a;空間是固定的&#xff1b;同時在聲明的時候必須指定數組的長度&#xff0c;一旦確定了大小就不能調整的。 而實際應用的過程中…