From mboxrd@z Thu Jan 1 00:00:00 1970 From: ehrhardt@linux.vnet.ibm.com Date: Tue, 16 Sep 2008 06:27:49 +0000 Subject: [PATCH 0/6][RFC] kvmppc: paravirtualization interface - host part v3 Message-Id: <1221546475-15818-1-git-send-email-ehrhardt@linux.vnet.ibm.com> List-Id: References: <1216802207-32675-1-git-send-email-ehrhardt@linux.vnet.ibm.com> In-Reply-To: <1216802207-32675-1-git-send-email-ehrhardt@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: kvm-ppc@vger.kernel.org From: Christian Ehrhardt 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 m= ore exits on non cooperating guests and for now rmeoving the need for guest c= oop 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 tho= ugh): 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 interfa= ce using: - the device tree mechanism to pass hypervisor informations to the guest (kvm-userspace)=20 - 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 d= ata - flags for features like the example "feature,pv-magicpage" setting 1 =3D available, everything else =3D 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 =3D> 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 sa= ving 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(-)