标签: huge-pages

了解主内存碎片和大页面

我有一台用于一般用途的机器,我也用来运行 QEMU 虚拟机。因为虚拟机应该尽可能提高性能,所以我想用大页面来支持 VM 内存,最好是 1GB 大页面。这台机器有 32GB 的内存,我想为 VM 提供 16GB。问题是,在我正常使用机器的过程中,我可能需要使用所有 32GB,因此在启动时分配 16G 的大页面不是一种选择。

为了解决这个问题,我有一个钩子脚本,它在 VM 启动时分配 16G 的大页面。正如您可能预期的那样,对于 1GB 大页面,如果主机已经使用了任何时间,这将失败(它似乎可以可靠地处理 2M 大页面,尽管这并不理想)。

我不明白的是为什么会发生这种情况。例如,我可以打开多个应用程序(浏览器窗口、代码编辑器等,只是为了强制进行一些碎片化测试),然后关闭它们以便只有我的桌面处于打开状态。在这种情况下,我的内存使用量约为 2.5G/32G。

内核真的没有办法在剩余的 30G RAM 中找到 16 个 1G 页的连续对齐内存,这似乎是非常高的碎片。此外,我可以运行

$ sudo tee /proc/sys/vm/compact_memory <<<1
Run Code Online (Sandbox Code Playgroud)

尝试对 RAM 进行碎片整理,但即便如此,我也从未成功为 VM 分配 16 个 1G 大页面。这对我来说尤其令人震惊,因为在仅对 2.5G 的 RAM 进行碎片整理后,剩余的 30G仍然不连续或对齐。

我对这个过程有什么误解?这看起来像预期的行为吗?另外,有没有办法检查是否compact_memory真的做了什么?dmesg运行该命令后,我没有看到任何输出或类似的输出。

memory qemu defragmentation huge-pages

6
推荐指数
1
解决办法
1392
查看次数

标签 统计

defragmentation ×1

huge-pages ×1

memory ×1

qemu ×1