内存分配(大小)如何适用于ZRAM?

时间:2017-08-21 13:40:10

标签: performance linux-kernel kernel swap ram

我创建了具有2GB RAM的VM,我还创建了一个磁盘大小为1GB的ZRAM设备,并将其配置为交换设备。

# sudo modprobe zram num_devices=1
# zramctl --find --size 1024M
# mkswap /dev/zram0
# swapon /dev/zram0

所以我的新VM中有1 GB RAM和1 GB交换空间(压缩RAM)。

现在我的问题是,当我发出以下命令时会发生什么?

zramctl --find --size 1024M

它如何告诉内核它只有1GB的总2GB用于正常的papge分配而其余用于ZRAM(RAM块设备)?此时它没有为ZRAM块设备分配1GB RAM内存,对吗?

我看了ZRAM内核驱动程序的实现。什么时候尝试将页面添加到ZRAM设备。它使用alloc_pages(gfp_mask,0)分配内存(0顺序页面)并链接它们以创建所谓的zspage。 并使用此zspage存储压缩页面。

所以这意味着ZRAM在驱动程序初始化期间没有分配1GB ram,对吗?但是根据需要动态分配。

我的问题是当我生成一个需要超过1 GB内存的进程时。它应首先使用所有可用的1GB,然后使用ZRAM交换内存。 ZRAM如何告诉内核它只能使用1GB而其余的RAM(1GB)属于它?

亲切的问候,

1 个答案:

答案 0 :(得分:1)

我花了一段时间才找到有关zRam实际行为和功能的信息,但我终于找到了答案。

初始化zRam设备(/ dev / zramX)时,实际上没有分配ram,并且系统将正常使用物理ram直到进行交换。发生这种情况时,zRam设备开始使用物理内存来存储压缩页面,最多可达到等于初始化大小的未压缩数据量,这意味着zRam使用的空间小于命令{{ 1}}。

zramctl --find --size 1024M/proc中有明显的钩子来查询zRam磁盘的当前状态,但由于我本周刚开始测试/玩它,所以我也不是熟悉它。

来源:some guy's personal wiki?