Performance ZRAM的内存分配(大小)是如何工作的?

Performance ZRAM的内存分配(大小)是如何工作的?,performance,linux-kernel,kernel,swap,ram,Performance,Linux Kernel,Kernel,Swap,Ram,我已经用2GB RAM创建了VM,我还创建了一个disksize 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 它是

我已经用2GB RAM创建了VM,我还创建了一个disksize 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\u页面(gfp\u mask,0)
分配内存(0顺序页面),并将它们链接以创建所谓的
zspage
。 并使用此页面存储压缩页面

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

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


非常感谢,

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

当您初始化zRam设备(/dev/zramX)时,实际上没有分配任何ram,并且在发生交换之前,您的系统将正常使用物理ram。发生这种情况时,zRam设备开始使用物理内存来存储压缩页面,未压缩数据的总数量等于初始化的大小,这意味着zRam使用的空间小于命令指定的数量
zramctl--find--size 1024M

显然,
/proc
/sys
中都有钩子来查询zRam磁盘的当前状态,但由于我本周才开始测试/玩它,我对它不太熟悉

资料来源: