KVM: x86: Optimize mmio spte zapping when creating/moving memslot
authorTakuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
Tue, 12 Mar 2013 08:45:30 +0000 (17:45 +0900)
committerGleb Natapov <gleb@redhat.com>
Thu, 14 Mar 2013 08:21:21 +0000 (10:21 +0200)
commit982b3394dd23eec6e5a2f7871238435a167b63cc
tree24e7cbbfdfa7500aa1e685b80aee205bf2ff17af
parent95b0430d1a53541076ffbaf453f8b49a547cceba
KVM: x86: Optimize mmio spte zapping when creating/moving memslot

When we create or move a memory slot, we need to zap mmio sptes.
Currently, zap_all() is used for this and this is causing two problems:
 - extra page faults after zapping mmu pages
 - long mmu_lock hold time during zapping mmu pages

For the latter, Marcelo reported a disastrous mmu_lock hold time during
hot-plug, which made the guest unresponsive for a long time.

This patch takes a simple way to fix these problems: do not zap mmu
pages unless they are marked mmio cached.  On our test box, this took
only 50us for the 4GB guest and we did not see ms of mmu_lock hold time
any more.

Note that we still need to do zap_all() for other cases.  So another
work is also needed: Xiao's work may be the one.

Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Takuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/mmu.c
arch/x86/kvm/x86.c