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

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

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. visual studio 2019工具里添加开发中命令提示符的方法

    最新新装了visual studio 2019,发现默认的没有开发者命令提示符 现将添加步骤描述如下: 从VS2019菜单选择"Tools",然后选择"外部工具" ...

  2. 激光雷达 LOAM 论文 解析

    转自:https://blog.csdn.net/hltt3838/article/details/109261334 固态激光雷达的一段视频:https://v.qq.com/x/page/a078 ...

  3. Vuet.js规则详解,它是你不知道的强大功能?

    Vuet.js是什么? Vuet.js是给Vue.js提供状态管理的一个工具,与vuex不同,它是一种崇尚规则定制的状态管理模式.事先将状态更新的规则写好,然后将规则注入到组件中,然后状态按照预订的规 ...

  4. Py的A+B

    程序会读入两行,每行都是一个数字,输出这两个数字的和 输入格式: 两行文字,每行都是一个数字 输出格式: 一行数字 输入样例: 18 21 输出样例: 39 代码: a = input() b = i ...

  5. Android修改app图标

    1.按照路径找到AndroidManifest.xml中的icon 2.在drawable添加一个png图片 3.然后在AndroidManifest.xml中的icon,修改其中的值 android ...

  6. idea怎么创建python项目

    前言 python是一种功能强大和适用面很广的开发语言,在大数据应用和机器学习日益流行的年代,python凭借其简洁.易用和可扩展性获得很多用户的支持,近年来使用率高速增长.python环境下,集成了 ...

  7. Spring Boot-@Value获取值和@ConfigurationProperties获取值的比较

    @Value和@ConfigurationProperties都是用于属性的注入(相当于spring中<bean id=" " class=" "> ...

  8. Struts2-值栈的定义

    1.值栈的概念:在Struts2里面提供本身的一种储存机制,类似于域对象,可以存值和取值(可以类比Servlet中的域对象->request,session,application) 2.具体操 ...

  9. oracle 11g手工建数据库过程

    创建需求和目的 1.需要把11机器上的oracle库中的表导入到12机器oracle库 2.11机器上的数据库fp在12机器上不存在,需要创建新库,以便导入.3.我们只需导入业务库shp即可,不需要把 ...

  10. Spring Boot 使用 Redis 共享 Session 代码示例

    参考资料 博客:spring boot + redis 实现session共享 1. 新建 Maven 工程 我新建 spring-boot-session-redis maven 工程 2. 引入 ...