内存管理-45-zram-3-writeback

一、简介

zram 是一个基于内存的块设备, 通常用作压缩swap分区。页面被换出时不写到磁盘, 而是压缩后存在内存中,节省1/O并加速swap。
进程页面换出 --> zram压缩存储(在RAM中) --> 进程缺页时解压换回。

但是 zram 在内存压力下是有困境的,zram 本质还是占内存。当系统内存极度紧张时,越来越多的页被换到 zram,zram本身占用的内存也越来越大,系统没有多余内存, 但 zram 压缩后的内容占用着内存又无处可去。CONFIG_ZRAM_WRITEBACK 就是为了解决这个问题。

内核代码位置:

drivers/block/zram/
zram_drv.c  //主逻辑, writeback_store()是写出入口
zram_drv.h
zcomp.c     //压缩引擎(1z4/zstd/lzo)

只要使能 CONFIG_ZRAM 就会编译住这些文件,使能 CONFIG_ZRAM_WRITEBACK 才具有完整功能。writeback 核心函数: zram_writeback_page() --> submit_bio()写到后备存储。

1. zram writeback 的功能

允许 zram 把冷页(long-lived/idlepages)从 zram 内存空间二次写出到一个真实的后备块设备(backing device), 通常是eMMC、UFS、SSD。

进程页面换出 --> zram压缩存储(RAM) --> 如果该页长期不被访问(冷页) --> zram writeback 写到 backing_dev(真实磁盘/flash) --> 释放zram槽位内存.

本质是: zram自己也有了一层 swap-out 能力。

2.关键接口(sysfs)

激活 zram writeback 需要手动配置:

echo /dev/sdX > /sys/block/zram0/backing_dev //1.指定后备设备(如 /dev/sda1 或 loop 设备)
echo all > /sys/block/zram0/idle //2.触发idle页标记(标记一段时间没被访问的页)
echo idle > /sys/block/zram0/writeback //3.触发writeback(把idle页写到 backing_dev)
echo huge > /sys/block/zram0/writeback //4.也可以writeback被huge压缩的页(压缩没有收益的页直接写(出)
cat /sys/block/zram0/bd_stat //查看writeback统计

3. writeback的对象

-----------------------------------------------------------------------
类型       触发条件                说明
-----------------------------------------------------------------------
idle 页    标记为idle后writeback   长期未访问的冷页,节省内存更有价值
huge 页    压缩后体积反而更大的页  不压缩直接写出到磁盘更合算
-----------------------------------------------------------------------

4. 读回路径

当进程再次访问已 writeback 的页时: 缺页异常 --> zram发现该槽位已writeback -->从backing dev读回 --> 重新压缩存入zram(或直接加载到内存) --> 进程恢复访问

5. 与传统swap区别

---------------------------------------------------------------
维度       传统swap     zram          zram + writeback
---------------------------------------------------------------
存储介质   磁盘/flash   RAM(压缩)     RAM压缩+磁盘溢出
速度       慢(磁盘I/O)  快(内存访问)  热页快,冷页慢
内存占用   不占RAM      占RAM         冷页卸载到磁盘后释放RAM
适合场景   通用         内存受限设备  极度内存受限+有磁盘
---------------------------------------------------------------

 

posted on 2026-04-22 09:50  Hello-World3  阅读(4)  评论(0)    收藏  举报

导航