当前位置: 首页 > news >正文

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.xdnf.cn/news/241993.html

相关文章:

  • 【STM32单片机】#12 SPI通信(软件读写)
  • IRF2.0IRF3.1
  • 小白dockerfile
  • Linux安全清理删除目录bash脚本
  • 使用scipy求解优化问题
  • Three.js在vue中的使用(一)-基础
  • 报错:函数或变量 ‘calcmie‘ 无法识别。
  • 【网络服务器】——回声服务器(echo)
  • 【C++】类和对象【中下】
  • 【中间件】bthread_基础_TaskControl
  • PyTorch 与 TensorFlow:深度学习框架的深度剖析与实战对比
  • 怎么查看数据库容量
  • REST API、FastAPI与Flask API的对比分析
  • cdn服务器连接异常怎么办?cdn连接失败解决方法有哪些?
  • 深入解析 Python 应用日志监控:ELK、Graylog 的实战指南
  • WPF采集欧姆龙PLC、基恩士PLC、西门子PLC、汇川PLC、台达PLC数据
  • 从请求到响应:初探spring web
  • PCA主成分分析法(最大投影方差,最小重构距离,SVD角度)
  • AI数字人系统开发:技术架构、应用场景与未来趋势
  • 【进阶】--函数栈帧的创建和销毁详解
  • TDA4VM SDK J721E (RTOS/Linux) bootloaders梳理笔记
  • RDMA高性能网络通信实践
  • 航空客户价值分析阶段性测验
  • Python数据分析课程实验-1
  • 使用DCI和RTIT技术进行精准调优--看录像
  • C++之特殊类设计及类型转换
  • 【kafka系列】消费者组
  • 系统架构设计师:设计模式——创建型设计模式
  • 解锁 C++26 的未来:从语言标准演进到实战突破
  • Nginx核心功能——nginx代理