【问题标题】:How does the memory allocation (size) works for ZRAM?ZRAM 的内存分配(大小)如何工作?
【发布时间】:2018-01-29 14:49:20
【问题描述】:

我创建了具有 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 用于正常的页面分配,其余的用于 ZRAM(RAM 块设备)?此时它不会为 ZRAM 块设备分配 1GB RAM 内存,对吗?

我查看了 ZRAM 内核驱动程序的实现。每当它尝试向 ZRAM 设备添加页面时。它使用alloc_pages(gfp_mask,0) 分配内存(0 阶页面)并将它们链接以创建所谓的zspage。 并使用这个 zspage 来存储压缩页面。

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

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

亲切的问候,

【问题讨论】:

    标签: performance linux-kernel kernel swap ram


    【解决方案1】:

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

    当您初始化 zRam 设备 (/dev/zramX) 时,实际上并没有分配内存,您的系统将照常使用物理内存,直到发生交换。发生这种情况时,zRam 设备开始使用物理内存来存储压缩页面,最大未压缩数据的总数量等于初始化大小,这意味着 zRam 使用的空间小于您的命令 @987654322 指定的数量@。

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

    来源:some guy's personal wiki?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2014-02-28
      • 2015-04-28
      • 2017-04-07
      • 2012-03-05
      相关资源
      最近更新 更多