From Fedora Project Wiki

< Features

Revision as of 17:24, 5 August 2009 by Markmc (talk | contribs) (update status)

KVM Huge Page Backed Memory

Summary

Enable KVM guests to use huge page backed memory in order to reduce memory consumption and improve performance by reducing CPU cache pressure.

Owner

Current status

  • Targeted release: Fedora 12
  • Last updated: 2009-08-05
  • Percentage of completion: 90%

The completion of this feature was temporarily blocked by a previously unknown SELinux issue in the kernel. Now that the issue is understood, the plan is to implement the libvirt support upstream, backport it to F-12 and fix the kernel issue.

TODO

  1. Get the libvirt patch committed to libvirt.git
  2. Backport the libvirt patch to 0.7.0 in F-12

Completed

  1. KVM support for huge pages
  2. libvirt patch posted for running guests with -mem-path /dev/hugepages
  3. libvirt patch-v2 posted which detects the host's hugetlbfs mount point automatically.
  4. Identify SELinux issue in the kernel

Detailed Description

x86 CPUs usually address memory in 4kB pages, but they also have the ability to use huge pages (4MB on x86_32, 2MB on x86_64 and x86_32 PAE).

By using huge pages for a KVM guest's memory, less memory is used for page tables and TLB misses are reduced, thereby increasing performance.

Using huge pages for guest memory does have a downside, however - you can no longer swap nor balloon guest memory.

In order to use huge pages with KVM, one must do the following:

  1. Mount hugetlbfs to /dev/hugepages - mount -t hugetlbfs hugetlbfs /dev/hugepages
  2. Reserve some memory for huge pages - sysctl vm.nr_hugepages=516
  3. Pass the hugetlbfs path to qemu-kvm - qemu-kvm -mem-path /dev/hugepages

This feature aims to improve allow huge pages to be used with libvirt managed guests.

Benefit to Fedora

Enables Fedora KVM hosts to achieve better performance.

Scope

Huge pages support in KVM already exists, so the remaining work is confined to libvirt.

How To Test

  1. mount -t hugetlbfs hugetlbfs /dev/hugepages
  2. Reserve some memory for huge pages - sysctl vm.nr_hugepages=516
  3. Run an existing KVM guest with libvirt
  4. Confirm the guest has booted correctly
  5. Confirm the guest is using hugepages by checking HugePages_Free in /proc/meminfo

User Experience

Users of KVM guests using huge page backed memory should experience improved performance with some savings in host memory consumption. The performance benefit is workload dependent. But we have measured benefits on the order of 20% performance improvement (esp. useful when the guest's workload includes an application which itself is using hugepages).

Dependencies

None, the work is confined to libvirt.

Contingency Plan

None needed.

Documentation

Release Notes

KVM guests running on Fedora can now take advantage of huge page backed memory and benefit from improved performance and reduced memory usage.

Comments and Discussion