Re: [PATCH 00/27] KVM PPC PV framework

MJ embd
2010-07-09T04:57:30Z

On Thu, Jul 1, 2010 at 4:12 PM, Alexander Graf <agraf-l3A5Bk7waGM@public.gmane.org> wrote:
> On PPC we run PR=0 (kernel mode) code in PR=1 (user mode) and don't use the
> hypervisor extensions.
>
> While that is all great to show that virtualization is possible, there are
> quite some cases where the emulation overhead of privileged instructions is
> killing performance.
>
> This patchset tackles exactly that issue. It introduces a paravirtual framework
> using which KVM and Linux share a page to exchange register state with. That

KVM and Linux or KVM and GuestOS ?

> way we don't have to switch to the hypervisor just to change a value of a
> privileged register.
>
> To prove my point, I ran the same test I did for the MMU optimizations against
> the PV framework. Here are the results:
>
> [without]
>
> debian-powerpc:~# time for i in {1..1000}; do /bin/echo hello > /dev/null; done
>
> real    0m14.659s
> user    0m8.967s
> sys     0m5.688s
>
> [with]
>
> debian-powerpc:~# time for i in {1..1000}; do /bin/echo hello > /dev/null; done
>
> real    0m7.557s
> user    0m4.121s
> sys     0m3.426s
>
>
> So this is a significant performance improvement! I'm quite happy how fast this
> whole thing becomes :)
>
> I tried to take all comments I've heard from people so far about such a PV
> framework into account. In case you told me something before that is a no-go
> and I still did it, please just tell me again.
>
> Now go and have fun with fast VMs on PPC! Get yourself a G5 on ebay and start
> experiencing the power yourself. - heh
>
> v1 -> v2:
>
>  - change hypervisor calls to use r0 and r3
>  - make crit detection only trigger in supervisor mode
>  - RMO -> PAM
>  - introduce kvm_patch_ins
>  - only flush icache when patching
>  - introduce kvm_patch_ins_b
>  - update documentation
>
> Alexander Graf (27):
>  KVM: PPC: Introduce shared page
>  KVM: PPC: Convert MSR to shared page
>  KVM: PPC: Convert DSISR to shared page
>  KVM: PPC: Convert DAR to shared page.
>  KVM: PPC: Convert SRR0 and SRR1 to shared page
>  KVM: PPC: Convert SPRG[0-4] to shared page
>  KVM: PPC: Implement hypervisor interface
>  KVM: PPC: Add PV guest critical sections
>  KVM: PPC: Add PV guest scratch registers
>  KVM: PPC: Tell guest about pending interrupts
>  KVM: PPC: Make RMO a define
>  KVM: PPC: First magic page steps
>  KVM: PPC: Magic Page Book3s support
>  KVM: PPC: Magic Page BookE support
>  KVM: PPC: Expose magic page support to guest
>  KVM: Move kvm_guest_init out of generic code
>  KVM: PPC: Generic KVM PV guest support
>  KVM: PPC: KVM PV guest stubs
>  KVM: PPC: PV instructions to loads and stores
>  KVM: PPC: PV tlbsync to nop
>  KVM: PPC: Introduce kvm_tmp framework
>  KVM: PPC: Introduce branch patching helper
>  KVM: PPC: PV assembler helpers
>  KVM: PPC: PV mtmsrd L=1
>  KVM: PPC: PV mtmsrd L=0 and mtmsr
>  KVM: PPC: PV wrteei
>  KVM: PPC: Add Documentation about PV interface
>
>  Documentation/kvm/ppc-pv.txt             |  185 ++++++++++++++
>  arch/powerpc/include/asm/kvm_book3s.h    |    1 -
>  arch/powerpc/include/asm/kvm_host.h      |   15 +-
>  arch/powerpc/include/asm/kvm_para.h      |  121 +++++++++-
>  arch/powerpc/include/asm/kvm_ppc.h       |    1 +
>  arch/powerpc/kernel/Makefile             |    2 +
>  arch/powerpc/kernel/asm-offsets.c        |   18 ++-
>  arch/powerpc/kernel/kvm.c                |  408 ++++++++++++++++++++++++++++++
>  arch/powerpc/kernel/kvm_emul.S           |  237 +++++++++++++++++
>  arch/powerpc/kvm/44x.c                   |    7 +
>  arch/powerpc/kvm/44x_tlb.c               |    8 +-
>  arch/powerpc/kvm/book3s.c                |  165 ++++++++-----
>  arch/powerpc/kvm/book3s_32_mmu.c         |   28 ++-
>  arch/powerpc/kvm/book3s_32_mmu_host.c    |   16 +-
>  arch/powerpc/kvm/book3s_64_mmu.c         |   42 +++-
>  arch/powerpc/kvm/book3s_64_mmu_host.c    |   16 +-
>  arch/powerpc/kvm/book3s_emulate.c        |   25 +-
>  arch/powerpc/kvm/book3s_paired_singles.c |   11 +-
>  arch/powerpc/kvm/booke.c                 |  113 +++++++--
>  arch/powerpc/kvm/booke.h                 |    6 +-
>  arch/powerpc/kvm/booke_emulate.c         |   14 +-
>  arch/powerpc/kvm/booke_interrupts.S      |    3 +-
>  arch/powerpc/kvm/e500.c                  |    7 +
>  arch/powerpc/kvm/e500_tlb.c              |   31 ++-
>  arch/powerpc/kvm/e500_tlb.h              |    2 +-
>  arch/powerpc/kvm/emulate.c               |   47 +++-
>  arch/powerpc/kvm/powerpc.c               |   42 +++-
>  arch/powerpc/platforms/Kconfig           |   10 +
>  arch/x86/include/asm/kvm_para.h          |    6 +
>  include/linux/kvm_para.h                 |    7 +-
>  30 files changed, 1420 insertions(+), 174 deletions(-)
>  create mode 100644 Documentation/kvm/ppc-pv.txt
>  create mode 100644 arch/powerpc/kernel/kvm.c
>  create mode 100644 arch/powerpc/kernel/kvm_emul.S
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>