共计 2634 个字符,预计需要花费 7 分钟才能阅读完成。
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…