Projects/auto-ballooning: Difference between revisions

From KVM
No edit summary
No edit summary
Line 3: Line 3:
== Introduction ==
== Introduction ==


When a Linux host is running out of memory, the kernel will take action to ''reclaim'' memory. This action may be detrimental to kvm guests performace (eg. swapping) or even extreme to the point where the kernel kills user-space processes (which could be a kvm guest itself or a virt stack component).
When a Linux host is running out of memory, the kernel will take action to ''reclaim'' memory. This action may be detrimental to kvm guests performace (eg. swapping) or even extreme to the point where the kernel may kill a VM or an important virt stack component.


To help avoiding this situation, a kvm guest could automatically inflate its balloon (thus returning memory to the host) when the host is facing memory pressure. Likewise, a kvm guest could automatically deflate its balloon when the guest itself is facing memory pressure (maybe due to automatic inflate).
To help avoiding this situation, a kvm guest could automatically return memory to the host when the host is facing memory pressure. By doing so the guest may also get into memory pressure so we also need a way to allow the guest to automatically get memory back.


=== status ===
That's what the automatic ballooning project is about. The next section will dive into ways of implementing it. The following section will provide instructions on how to try current patches.


'''FIXME''': add tree.
== Design ==


=== testing ===
=== Automatic Inflate ===


'''FIXME''': describe.
Automatic inflate is done by QEMU, that is the KVM host. There are two ways I'm playing with automatic inflate, in both of them QEMU registers for [http://lwn.net/Articles/544652/ memory pressure] events to learn when the host is under memory pressure:
 
* QEMU registers for VMPRESSURE_MEDIUM and inflates the balloon by an user specified amount, which could default to 16MB or 32MB. This is what the current patchset does
 
* QEMU registers for the three memory pressure events and inflates the balloon accordingly, say it inflates the balloon by 1MB on VMPRESSURE_LOW; 16MB on VMPRESSURE_MEDIUM and 128MB on VMPRESSURE_CRITICAL. This is not done yet because there's a small limitation on the vmpressure code which doesn't allow this. I'll fix it

Revision as of 16:49, 13 June 2013

Automatic Ballooning

Introduction

When a Linux host is running out of memory, the kernel will take action to reclaim memory. This action may be detrimental to kvm guests performace (eg. swapping) or even extreme to the point where the kernel may kill a VM or an important virt stack component.

To help avoiding this situation, a kvm guest could automatically return memory to the host when the host is facing memory pressure. By doing so the guest may also get into memory pressure so we also need a way to allow the guest to automatically get memory back.

That's what the automatic ballooning project is about. The next section will dive into ways of implementing it. The following section will provide instructions on how to try current patches.

Design

Automatic Inflate

Automatic inflate is done by QEMU, that is the KVM host. There are two ways I'm playing with automatic inflate, in both of them QEMU registers for memory pressure events to learn when the host is under memory pressure:

  • QEMU registers for VMPRESSURE_MEDIUM and inflates the balloon by an user specified amount, which could default to 16MB or 32MB. This is what the current patchset does
  • QEMU registers for the three memory pressure events and inflates the balloon accordingly, say it inflates the balloon by 1MB on VMPRESSURE_LOW; 16MB on VMPRESSURE_MEDIUM and 128MB on VMPRESSURE_CRITICAL. This is not done yet because there's a small limitation on the vmpressure code which doesn't allow this. I'll fix it