快速教程

KVM Huge Page 回收内存

Huge Page,巨页是一个很热门的话题,很多大型服务器软件都逐步开始支持使用巨页以减轻内存的开销。在 Fedora 12 之际,KVM 也引入了 Huge Page,以增强 KVM 的性能。

援引自 KVM Huage Page Backed Memory 的简介,x86 CPU 通常使用用 4KB 页面放置内存,但实际上它们有能力使用巨页完成这个任务(x86_32 可以使用 4MB 页面,x86_64 和 x86_32 PAE 可以使用 2MB 的页面)。通过把巨页应用在 KVM Guest 的内存上,页表会使用更少的内存和 TLB 损耗也会被减少,从而提升了 KVM 的性能。在 KVM Guest 的内存上使用巨页确实会有缺点,然而你不再需要交换和 Balloon Guest 的内存。

应用 Huge Page 十分简单,首先挂在 hugetlbfs 文件系统:
<blockquote>mount -t hugetlbfs hugetlbfs /dev/hugepages</blockquote>
通过 sysctl 保留内存给巨页使用,需要搞清楚的这里设定的数字并不是真正的内存容量,而是巨页数量。对应的关系是1 hugepage=2MB RAM,比如:

sysctl vm.nr_hugepages=768

此时系统会划分 1536MB 内存给巨页使用。然后启动 qemu-kvm 的时候添加 -mem-path/dev/hugepages 参数。比如:

qemu-kvm -m 1024 -drive file=test.img -mem-path /dev/hugepages

使用 libvirt 和 virt-manager 管理的 KVM 虚拟机同样可以巨页,把以下内容加入到 /etc/libvirt/qemu 虚拟机对应的 xml 配置文件即可:

<memoryBacking>
<hugepages/>
</memoryBacking>

本人简单地测试了使用巨页和不使用巨页的性能差别,在 Windows XP Guest 跑了 Super Pi 和 wPrime,性能上没有任何区别。但是测试内存的性能时每一次的数据都会跟上一次出入很大。所以没有再测试下去。

如果是打算把电脑作为 KVM 虚拟化服务器使用的话,甚至可以把 hugetlbfs 放在 /etc/fstab 挂载表上,让电脑启动的时候就直接挂载。而 sysctl 参数也可以直接添加到 /etc/sysctl.conf 上。

cat "sysctl vm.nr_hugepages=768"  &gt;&gt; /etc/sysctl.conf

当不再需要巨页的时候,卸载了 hugetlbfs 和把保留给巨页使用的内存量设置为 0 即可。

sysctl vm.nr_hugepages=0
umount hugetlbfs
Tags: , ,

4 Comments

  1. se999se 说道:

    博主博客的用的什么程序啊?

  2. zwxie 说道:

    这种方法比实际物理内存好快吗?

  3. zwxie 说道:

    TO se999se:

    这个站点用的是wordpress程序

  4. Mike 说道:

    能就给host OS开huge page么?

Leave a Comment