"); //-->
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
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。