【发布时间】: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