KVM 如何在不产生足够页面错误的情况下为 VM 分配内存?

问题描述

我正在尝试了解 x86 的 KVM 内存分配器。我正在做这个实验 - 在新启动的 VM 上使用 mmap(并触摸它)分配 16GB 的内存,以便主机系统内存使用量增加 16 GB(当来宾开始触摸 mmaped 区域时,主机开始将该内存分配给 qemu)。在 VM 上分配内存时,我还在使用 perf stat 计算分配期间 qemu-system 进程生成页面错误。 我观察到 qemu 进程生成页面错误数量非常少(在 0-300 的范围内),我预计它会生成 4,194,304 个页面错误。 (16GB/4KB,注意-我已经完全禁用了大页面)。 我在这里错过了什么??

解决方法

  1. 您是否触摸了所有页面?

Linux 内核使用延迟(按需)分配物理页面,将分配推迟到必要时,并避免分配永远不会实际使用的物理页面。内存映射通常从没有附加物理页面开始。

  1. 您可能启用了大页面支持
cat /proc/sys/vm/nr_hugepages