KVM Huge Page 回收内存

Written by liangsuilong on. Posted in 快速教程

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: , ,

Trackback from your site.

Comments (4)

  • se999se

    |

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

    Reply

  • zwxie

    |

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

    Reply

  • zwxie

    |

    TO se999se:

    这个站点用的是wordpress程序

    Reply

  • Mike

    |

    能就给host OS开huge page么?

    Reply

Leave a comment