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.mzph.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;一旦确定了大小就不能调整的。 而实际应用的过程中…