diff --git a/zh-cn/device-dev/kernel/kernel-standard-mm-eswap.md b/zh-cn/device-dev/kernel/kernel-standard-mm-eswap.md index 86dd9b65fd9e24e34a9e3d1a4886714b3b0146e6..620ae2bbcbf112726e42ee32ffd6485465422e1a 100644 --- a/zh-cn/device-dev/kernel/kernel-standard-mm-eswap.md +++ b/zh-cn/device-dev/kernel/kernel-standard-mm-eswap.md @@ -8,24 +8,27 @@ ESwap(Enhanced Swap)提供了自定义新增存储分区作为内存交换分区 ## ZRAM与ESwap配置指导 +> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** +> 使能ESwap需要在使能ZRAM之前,不需要使用ESwap时, 也可以仅使能ZRAM。如部分设备不包括用于换出的存储设备,也没有新建相应的存储分区,那么可以仅使能ZRAM来通过zswapd进行内存回收。 + ### 使能ESwap 1. 打开相关配置项及依赖 启用ESwap,需要通过编译内核时打开相应的配置项及依赖,ESwap相关CONFIG如下: ``` - CONFIG_HYPERHOLD=y - CONFIG_HYPERHOLD_DEBUG=y - CONFIG_HYPERHOLD_ZSWAPD=y - CONFIG_HYPERHOLD_FILE_LRU=y - CONFIG_HYPERHOLD_MEMCG=y - CONFIG_ZRAM_GROUP=y - CONFIG_ZRAM_GROUP_DEBUG=y - CONFIG_ZLIST_DEBUG=y - CONFIG_ZRAM_GROUP_WRITEBACK=y + CONFIG_HYPERHOLD=y // Enable HyperHold + CONFIG_HYPERHOLD_DEBUG=y // Enable HyperHold Debug + CONFIG_HYPERHOLD_ZSWAPD=y // Enable zswapd thread to reclaim anon pages in background + CONFIG_HYPERHOLD_FILE_LRU=y // Enable HyperHold FILE LRU + CONFIG_HYPERHOLD_MEMCG=y // Enable Memcg Management in HyperHold + CONFIG_ZRAM_GROUP=y // Enable Manage Zram objs with mem_cgroup + CONFIG_ZRAM_GROUP_DEBUG=y // Enable Manage Zram objs with mem_cgroup Debug + CONFIG_ZLIST_DEBUG=y // Enable Debug info for zram group list + CONFIG_ZRAM_GROUP_WRITEBACK=y // Enable Write back grouped zram objs to Hyperhold driver ``` - 另有部分CONFIG被依赖: + 同时,开启ESwap需依赖以下CONFIG: ``` CONFIG_MEMCG=y @@ -72,9 +75,6 @@ ESwap(Enhanced Swap)提供了自定义新增存储分区作为内存交换分区 ``` -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 使能ESwap需要在使能ZRAM之前,不需要使用ESwap时, 也可以仅使能ZRAM。如部分设备不包括用于换出的存储设备,也没有新建相应的存储分区,那么可以仅使能ZRAM来通过zswapd进行内存回收。 - ### 使能ZRAM 1. 初始化ZRAM @@ -91,7 +91,7 @@ ESwap(Enhanced Swap)提供了自定义新增存储分区作为内存交换分区 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > /sys/block/zram0/group可接受参数及作用为: > - > - disable:表示disable; + > - disable:表示禁用; > - readonly:表示只记录数据的cgroup信息,并不换出; > - readwrite:表示打开ZRAM到eswap的换入换出功能。 @@ -134,34 +134,33 @@ ESwap(Enhanced Swap)提供了自定义新增存储分区作为内存交换分区 ESwap提供了一些接口用于控制换入换出策略以及记录当前状态,这些接口位于memcg所挂载的目录当中,如`/dev/memcg/`。 -| 功能分类 | 接口名 | 描述 | -| -------- | -------- | -------- | -| 控制接口 | [avail_buffers](#avail_buffers) | 设置buffer区间 | -| | [zswapd_single_memcg_param](#zswapd_single_memcg_param) | 设置当前memcg相关配置 | -| | [zram_wm_ratio](#zram_wm_ratio) | 设置zram换出水线 | -| 状态接口 | [zswapd_pressure_show](#zswapd_pressure_show) | 记录当前buffer以及refault | -| | [stat](#stat) | 检测ESwap实时情况 | -| | [zswapd_vmstat_show](#zswapd_vmstat_show) | 记录zswapd运行过程中各种事件 | +| 功能分类 | 接口名 | 描述 | 参考值 | +| -------- | -------- | -------- | -------- | +| 控制接口 | [avail_buffers](#avail_buffers) | 设置buffer区间 | 300 250 350 200 | +| | [zswapd_single_memcg_param](#zswapd_single_memcg_param) | 设置当前memcg相关配置 | 300 40 0 0 | +| | [zram_wm_ratio](#zram_wm_ratio) | 设置zram换出水线 | 0 | +| 状态接口 | [zswapd_pressure_show](#zswapd_pressure_show) | 记录当前buffer以及refault | NA | +| | [stat](#stat) | 检测ESwap实时情况 | NA | +| | [zswapd_vmstat_show](#zswapd_vmstat_show) | 记录zswapd运行过程中各种事件 | NA | > ![icon-caution.gif](public_sys-resources/icon-caution.gif) **注意:** > 除avail_buffers会因为调整了buffer水线而会主动去唤醒zswapd外,其余控制接口并不会主动唤醒zswapd,只是其配置需在zswapd所被唤醒后方可生效。 -各接口的具体描述如下: ### avail_buffers -avail_buffers接口用于设置buffer区间[min_avail_buffers, high_avail_buffers],当检测到当前的buffer低于min_avail_buffers时则会唤醒zswapd进行匿名页回收,期望的回收量为high_avail_buffers与当前系统buffer值的差值,实际可能会因为无法回收等原因而未回收那么多内存。avail_buffers为期望的内存正常状态buffer值,free_swap_threshold则是设置交换分区空闲容量的阈值,当zswapd唤醒并进行内存回收之后,会根据当前系统情况以及两者的设置记录当前内存压力事件,如medium press,critical press等。可主动调整来触发zswapd回收,如`echo 1000 950 1050 0 > /dev/memcg/memory.avail_buffers`。 +avail_buffers接口用于设置buffer区间[min_avail_buffers, high_avail_buffers],当检测到当前的buffer低于min_avail_buffers时则会唤醒zswapd进行匿名页回收,期望的回收量为high_avail_buffers与当前系统buffer值的差值,实际可能会因为无法回收等原因而未回收足够多内存。avail_buffers为期望的内存正常状态buffer值,free_swap_threshold则是设置交换分区空闲容量的阈值,当zswapd唤醒并进行内存回收之后,会根据当前系统情况以及两者的设置记录当前内存压力事件,如medium press,critical press等。可主动调整来触发zswapd回收,如`echo 1000 950 1050 0 > /dev/memcg/memory.avail_buffers`。 -默认值: +**默认值:** ``` - avail_buffers: 0 - min_avail_buffers: 0 - high_avail_buffers: 0 - free_swap_threshold: 0 +avail_buffers: 0 +min_avail_buffers: 0 +high_avail_buffers: 0 +free_swap_threshold: 0 ``` -限制: +**限制:** 0<=min_avail_buffers<=avail_buffers<=high_avail_buffers @@ -176,10 +175,10 @@ avail_buffers接口用于设置buffer区间[min_avail_buffers, high_avail_buffer 默认值: ``` - memcg score: 300 - memcg ub_mem2zram_ratio: 60 - memcg ub_zram2ufs_ratio: 10 - memcg refault_threshold: 50 +memcg score: 300 +memcg ub_mem2zram_ratio: 60 +memcg ub_zram2ufs_ratio: 10 +memcg refault_threshold: 50 ``` 限制: @@ -196,13 +195,13 @@ avail_buffers接口用于设置buffer区间[min_avail_buffers, high_avail_buffer 设置ZRAM换出水线,即当当前ZRAM中压缩的匿名页大于ZRAM总大小*zram_wm_ratio时,会开始向ESwap进行换出,但是具体换出时间为zswapd因buffer水线而唤醒之后。设置为0时系统默认为37,可进行调整,如`echo 30 > /dev/memcg/memory.zram_wm_ratio`。 -默认值: +**默认值:** ``` - zram_wm_ratio: 0 +zram_wm_ratio: 0 ``` -限制: +**限制:** 0<=zram_wm_ratio<=100 @@ -225,7 +224,7 @@ avail_buffers接口用于设置buffer区间[min_avail_buffers, high_avail_buffer ## 触发zswapd回收 -可先通过`cat /dev/memcg/memory.zswapd_pressure_show`查看当前buffer值,比如当前为1200,那么便可通过主动调整buffer区间,来主动唤醒zswapd。 +可先通过`cat /dev/memcg/memory.zswapd_pressure_show`查看当前buffer值,比如当前为1200,那么可通过主动调整buffer区间大于1200,来主动唤醒zswapd。 ```Bash echo 1300 1250 1350 0 > /dev/memcg/memory.avail_buffers @@ -234,7 +233,4 @@ echo 1300 1250 1350 0 > /dev/memcg/memory.avail_buffers ## ESwap配置大小示例 -ZRAM与ESwap的大小配置需根据实际使用场景以及产品硬件特点进行适配。目前在rk3568板子上使用时,其ram为2G,因此设置的ZRAM与ESwap大小均为512MB。 - - - +ZRAM与ESwap的大小配置需根据实际使用场景以及产品硬件特点进行适配。目前在rk3568板子上使用时,其ram为2G,因此设置的ZRAM与ESwap大小均为512MB。 \ No newline at end of file