樊成阳
华为技术有限公司内核专家

陈杰
华为技术有限公司内核专家

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

搜索

复制

OpenHarmony3.1 Release版本关键特性解析——Enhanced SWAP内存管理的更多相关文章

  1. OpenHarmony 3.1 Beta版本关键特性解析——HiStreamer框架大揭秘

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 陈国栋 数字多媒体技术在过去的数十年里得到了飞速的发展,多媒体终端设备如智能音箱.智能门锁.智能手表广泛应用于人们 ...

  2. OpenHarmony 3.1 Beta版本关键特性解析——OpenHarmony图形框架

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 李煜 华为技术有限公司 崔坤华为技术有限公司 众所周知,动画是系统和应用与用户交互的重要环节.动画效果的好坏会直接影响 ...

  3. OpenHarmony 3.1 Beta版本关键特性解析——HAP包安装实现剖析

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 石磊 随着社会的不断发展,人们逐渐注重更加高效.舒适.便捷.有趣的生活和工作体验. OpenAtom OpenHa ...

  4. OpenHarmony 3.1 Beta 版本关键特性解析——ArkUI canvas组件

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 江英杰 华为技术有限公司 canvas 是 ArkUI 开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活. ...

  5. OpenHarmony 3.1 Beta版本关键特性解析——探秘隐式查询

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 徐浩 隐式查询是 OpenAtom OpenHarmony(以下简称"OpenHarmony" ...

  6. OpenHarmony 3.1 Beta版本关键特性解析——ArkUI容器类API介绍

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 刘鑫 容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法.在 ArkUI 开发框 ...

  7. OpenHarmony 3.1 Beta版本关键特性解析——分布式DeviceProfile

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 成翔 OpenAtom OpenHarmony(以下简称"OpenHarmony")作为分布式操作 ...

  8. OpenHarmony3.1 Release版本特性解析——硬件资源池化架构介绍

    李刚 OpenHarmony 分布式硬件管理 SIG 成员 华为技术有限公司分布式硬件专家 OpenHarmony 作为面向全场景.全连接.全智能时代的分布式操作系统,通过将各类不同终端设备的能力进行 ...

  9. Apache NiFi 核心概念和关键特性

    本文来源于官方文档翻译 NiFi 的核心概念 NiFi 最早是美国国家安全局内部使用的工具,用来投递海量的传感器数据.后来由 apache 基金会开源.天生就具备强大的基因.NiFi基本设计理念与 F ...

随机推荐

  1. Effective Java —— try-with-resources 优先于 try-finally

    本文参考 本篇文章参考自<Effective Java>第三版第九条"Prefer try-with-resources to try-finally" The cod ...

  2. 攻防世界NewsCenter

    NewsCenter 打开题目是一个搜索框我们首先尝试一下sql注入 判断了一下是使用''进行包裹的字符型sql注入 然后我们需要判断数据库列数 1' order by 3# 回显正常但by4的时候回 ...

  3. SpringCloudAlibaba 微服务讲解(四)Sentinel--服务容错(二)

    4.7 Sentinel 规则 4.7.1 流控规则 流量控制,其原理是监控应用流量的QPS(每秒查询率)或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的榴莲高峰冲垮,从而保障应用 ...

  4. Altium Designer 原理图的绘制前导

    元件库.封装库设计 部分元器件厂商或者经销商不提供元件库和封装库,只给了元器件尺寸图,所以需要自行设计元件库文件或是封装库文件 元件库设计: 新建  .SchLib 文件:File  ->  N ...

  5. 转载:介绍AD另外一种奇葩的多通道复用的方法

    原文链接:http://www.eda365.com/forum.php?_dsign=74fe4957&mod=viewthread&page=1&tid=110710 在设 ...

  6. 创建TypeScript代码模板(NVS+Yarn+ESLint+Prettier+Husky)

    创建TypeScript代码模板(NVS+Yarn+ESLint+Prettier+Husky) Cui, Richard Chikun 本文笔者将带你在Github代码仓库创建TypeScript代 ...

  7. React中Ref 的使用 React-踩坑记_05

    React中Ref 的使用 React v16.6.3 在典型的React数据流中,props是父组件与其子组件交互的唯一方式.要修改子项,请使用new props 重新呈现它.但是,在某些情况下,需 ...

  8. MongoDB从bson文件中恢复数据

    首先需要到mangodb的安装目录的bin下面找到mongorestore.exe WIN10系统MongoDB安装目录bin文件夹下没有mongorestore.exe 先下载工具  https:/ ...

  9. java的内存泄露是如何发生的,如何避免和发现

    java的垃圾回收与内存泄露的关系:[新手可忽略不影响继续学习] 马克-to-win:上一节讲了,(i)对象被置成null.(ii)局部对象(无需置成null)当程序运行到右大括号.(iii)匿名对象 ...

  10. CCF201812-1小明上学

    题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校.为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间.他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿 ...