[prev in list] [next in list] [prev in thread] [next in thread]
List: kvm-ppc
Subject: [PATCH 0/6][RFC] kvmppc: paravirtualization interface - host part v3
From: ehrhardt () linux ! vnet ! ibm ! com
Date: 2008-09-16 6:27:49
Message-ID: 1221546475-15818-1-git-send-email-ehrhardt () linux ! vnet ! ibm ! com
[Download RAW message or body]
From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
Version 3 updates:
- fixed adress release at a kunmap_atomic call
- removed style issues (whitespace/indent)
- all checks to test if pvmem is currently available now use the wrappers
kvmppc_has_pvmem or kvmppc_is_pvmem
- folded some changes in a better order to prevent multiple trivial patches
for the same code sections
- the hypercall ABI is now implemented in beat style
- the rewrite of wrtee is dropped, instead mfmsr is rewritten. This saves more
exits on non cooperating guests and for now rmeoving the need for guest coop
patches (less invasive).
- separated and removed some changes unrelated to paravirtualization to
streamline this series
- changed mapping of guest memory to call gfn_to_page without mm locks held
(upstream code just changed)
- instruction rewriting is now done after emulation guarded by an unlikely()
which should save a lot of runtime complexity (adding some extra code though):
a) in non pv case this is now just an if (unlikely(x)) that is never true
b) in pv case the rewrite function does not need to be called for every
emulation - only for those that are rewritable (which additionally don't
occur anymore after being rewritten once).
This patch series implements the host part of an paravirtualization interface
using:
- the device tree mechanism to pass hypervisor informations to the guest
(kvm-userspace)
- hypercalls backend for guest->host calls
- an example exploiter of that interface (magic page) that uses that for
binary rewriting saving guest exits by avoiding privileged instructions
The device tree format used here (=base for the discussions on
embedded-hypervisor) is the following.
- A node "hypervisor" to show the general availability of some hypervisor data
- flags for features like the example "feature,pv-magicpage"
setting 1 = available, everything else = unavailable
- Some features might need to pass more data and can use an entry in the
device tree like the example of "data,pv-magicpage-size"
If the guest wants that pv support it has to allocate the requested size of
memory (aligned to the tlb entry size rounded up => e.g. 4000 bytes 4k
aligned, 4096 bytes 4k aligned, 4097 bytes 16k aligned and so on).
The speedup with both patch queues applied is around 40% dependent on what the
guest is doing (measured with boot times and some simple tasks). The raw saving
of exits about ~50-60% as you can see in the kvm stat exit counters.
[patches in series]
[PATCH 1/6] kvmppc: add hypercall infrastructure - host part
[PATCH 2/6] kvmppc: magic page hypercall - host part
[PATCH 3/6] kvmppc: rewrite guest code - sprg0-3
[PATCH 4/6] kvmppc: rewrite guest code - dear, esr, srr0, srr1
[PATCH 5/6] kvmppc: rewrite guest code - mfmsr
[PATCH 6/6] kvmppc: kvm-userspace: device tree modification for magic page
---
[diffstat]
kernel:
arch/powerpc/kvm/booke_guest.c | 70 ++++-
arch/powerpc/kvm/emulate.c | 415 ++++++++++++++++++++++++++++++++--
b/arch/powerpc/kvm/booke_guest.c | 11
b/arch/powerpc/kvm/booke_interrupts.S | 9
b/arch/powerpc/kvm/emulate.c | 16 +
b/arch/powerpc/kvm/powerpc.c | 20 +
b/include/asm-powerpc/kvm_host.h | 1
b/include/asm-powerpc/kvm_para.h | 4
b/include/asm-powerpc/kvm_ppc.h | 3
b/include/linux/kvm.h | 5
include/asm-powerpc/kvm_host.h | 5
include/asm-powerpc/kvm_para.h | 54 ++++
kvm-userspace:
b/libkvm/libkvm-powerpc.c | 6
b/libkvm/libkvm.h | 4
b/qemu/hw/device_tree.c | 10
b/qemu/hw/device_tree.h | 1
b/qemu/hw/ppc440_bamboo.c | 18 +
b/qemu/qemu-kvm-powerpc.c | 5
b/qemu/qemu-kvm.h | 1
19 files changed, 625 insertions(+), 33 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic