[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