我正在尝试了解x86的KVM内存分配器。我正在做这个实验——在新启动的虚拟机上使用mmap(并触摸它(分配16GB的内存,这样主机系统的内存使用量就会增加16GB(当客户开始触摸mmaped区域时,主机开始将内存分配给qemu(。在VM上分配内存时,我还使用perf-stat计算了qemu系统进程在分配过程中产生的页面错误。我观察到qemu进程生成的页面错误数量非常低(在0-300之间(,我预计它会生成4194304个页面错误。(16GB/4KB,注-我已完全禁用拥抱(。我在这里错过了什么??
- 您是否已触摸所有页面
Linux内核使用物理页面的延迟(按需(分配,将分配推迟到必要时,并避免分配永远不会实际使用的物理页面。内存映射通常是在没有附加物理页面的情况下开始的。
- 您可能启用了巨大的页面支持
cat /proc/sys/vm/nr_hugepages