430 Star 1.6K Fork 1.7K

GVPopenEuler/kernel

【OLK-5.10】内存扩展特性中添加指定内存页面换出、swapcache回收等功能

已完成
任务
创建于  
2022-06-21 14:29

【特性描述】
etmem内存扩展特性,新增swapcache内存回收、指定内存回收、kernel swap主动换出开关功能

【指定内存回收功能】
现有内存扩展默认换出进程所有可换出页面,除非页面添加lock标记。
添加指定页面可换出功能,进程针对需要换出的页面添加标记,etmem仅针对这部分页面进行换出操作

【swapcache内存回收功能】
用户态etmem发起内存淘汰回收操作,通过write procfs接口与内核态的内存回收模块交互,内存回收模块解析用户态下发的虚拟地址,获取地址对应的page页面,并调用内核原生接口将该page对应内存进行换出回收,在内存换出过程中,swapcache会占用部分系统内存,为进一步节约内存,添加swapcache内存回收功能。

针对swapcache内存回收功能,可以在配置文件中添加swapcache_high_wmark、swapcache_low_wmark参数。
swapcache_high_wmark: swapcache可以占用系统内存的高位水线;
swapcache_low_wmark: swapcache可以占用系统内存的低位水线;
在etmem进行一轮内存换出后,会进行swapcache占用系统内存比例的检查,当占用比例超过高位水线后,会通过swap_pages下发ioctl命令,触发swapcache内存回收,并回收到低位水线停止。

【kernel swap主动换出功能】
针对swap换出到磁盘场景,当etmem用于内存扩展时,用户可以选择是否同时开启内核swap功能。用户可以通过关闭内核原生swap机制,以免原生swap机制换出不应被换出的内存,导致用户态进程出现问题。
通过提供sys接口实现上述控制,在/sys/kernel/mm/swap目录下创建kobj对象,对象名称为kernel_swap_enable,默认为true,用于控制kernel swap的启动与关闭。

评论 (2)

刘波 创建了任务 3年前
openeuler-ci-bot 添加了
 
sig/Kernel
标签
3年前

功能测试结果:
指定内存换出测试:
测试用例
指定内存换出测试结果;正常换出测试结果:

输入图片说明

带有进程阈值换出测试:
配置业务进程,在业务中申请4G内存,在etmem配置文件中添加swap_threshold参数,改参数高于业务所实际占用内存;启动业务进程并启动etmem,观察业务进程换出情况,无内存换出。
带有进程限制阈值的换出结果:
输入图片说明

带有系统阈值换出测试:
配置业务进程,在业务中申请4G内存,在etmem配置文件中添加sysmem_threshold参数,不限制系统,系统内存在500G左右,配置sysmem_threshold为50,启动业务进程,启动etmem换入换出,观察业务进程内存换出情况。
带有系统限制阈值的换出结果:
输入图片说明

Swapcache内存回收测试:
为进行swapcache内存回收测试,构造测试用例,在用例中申请8G内存并进行初始化,之后不再进行访问(目的是换出可以占用swapcache空间)。
限制系统内存为50G,在etmem配置文件配置如下:

输入图片说明
配置swapcache_high_wmark为8,swapcache_low_wmark为4,因此,swapcache内存占用在2-4G内存之间,超过4G内存会主动触发swapcache内存回收。
输入图片说明
Swapcache内存占用趋势图如下,在swapcache内存占用超过高位水线时,会主动进行回收,并回收到低位水线以内。
输入图片说明

kernel_swap_enable测试:
在系统中向/sys/kernel/mm/swap目录下kernel_swap_enbale接口写入false,并重新启动etmem换入换出,通过etmem仍然可以正常进行业务内存的换入换出操作。

输入图片说明
输入图片说明

登录 后才可以发表评论

状态
负责人
项目
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
5329419 openeuler ci bot 1632792936 刘波-liubo254
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助