All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 00/43] KVM: PPC: Book3S HV P9: entry/exit optimisations round 1
@ 2021-06-22 10:56 ` Nicholas Piggin
  0 siblings, 0 replies; 133+ messages in thread
From: Nicholas Piggin @ 2021-06-22 10:56 UTC (permalink / raw)
  To: kvm-ppc; +Cc: linuxppc-dev, Nicholas Piggin

This series applies to powerpc topic/ppc-kvm branch (KVM Cify
series in particular), plus "KVM: PPC: Book3S HV Nested: Reflect L2 PMU
in-use to L0 when L2 SPRs are live" posted to kvm-ppc.

This reduces radix guest full entry/exit latency on POWER9 and POWER10
by almost 2x (hash is similar but it's still significantly slower than
the P7/8 real mode handler). Nested HV guests should see speedups with
some smaller improvements in the L1, plus the L0 switching sees many
of the same speedups as a direct guest.

It does this in several main ways:

- Rearrange code to optimise SPR accesses. Mainly, avoid scoreboard
  stalls.

- Test SPR values to avoid mtSPRs where possible. mtSPRs are expensive.

- Reduce mftb. mftb is expensive.

- Demand fault certain facilities to avoid saving and/or restoring them
  (at the cost of fault when they are used, but this is mitigated over
  a number of entries, like the facilities when context switching 
  processes). PM, TM, and EBB so far.

- Defer some sequences that are made just in case a guest is interrupted
  in the middle of a critical section to the case where the guest is
  scheduled on a different CPU, rather than every time (at the cost of
  an extra IPI in this case). Namely the tlbsync sequence for radix with
  GTSE, which is very expensive.

Some of the numbers quoted in changelogs may have changed a bit with
patches being updated, reordered, etc. They give a bit of a guide, but
I might remove them from the final submission because they're too much
to maintain.

Thanks,
Nick

Nicholas Piggin (43):
  powerpc/64s: Remove WORT SPR from POWER9/10
  KMV: PPC: Book3S HV P9: Use set_dec to set decrementer to host
  KVM: PPC: Book3S HV P9: Use host timer accounting to avoid decrementer
    read
  KVM: PPC: Book3S HV P9: Use large decrementer for HDEC
  KVM: PPC: Book3S HV P9: Reduce mftb per guest entry/exit
  powerpc/time: add API for KVM to re-arm the host timer/decrementer
  KVM: PPC: Book3S HV: POWER10 enable HAIL when running radix guests
  powerpc/64s: Keep AMOR SPR a constant ~0 at runtime
  KVM: PPC: Book3S HV: Don't always save PMU for guest capable of
    nesting
  powerpc/64s: Always set PMU control registers to frozen/disabled when
    not in use
  KVM: PPC: Book3S HV P9: Implement PMU save/restore in C
  KVM: PPC: Book3S HV P9: Factor out yield_count increment
  KVM: PPC: Book3S HV P9: Factor PMU save/load into context switch
    functions
  KVM: PPC: Book3S HV P9: Demand fault PMU SPRs when marked not inuse
  KVM: PPC: Book3S HV: CTRL SPR does not require read-modify-write
  KVM: PPC: Book3S HV P9: Move SPRG restore to restore_p9_host_os_sprs
  KVM: PPC: Book3S HV P9: Reduce mtmsrd instructions required to save
    host SPRs
  KVM: PPC: Book3S HV P9: Improve mtmsrd scheduling by delaying MSR[EE]
    disable
  KVM: PPC: Book3S HV P9: Add kvmppc_stop_thread to match
    kvmppc_start_thread
  KVM: PPC: Book3S HV: Change dec_expires to be relative to guest
    timebase
  KVM: PPC: Book3S HV P9: Move TB updates
  KVM: PPC: Book3S HV P9: Optimise timebase reads
  KVM: PPC: Book3S HV P9: Avoid SPR scoreboard stalls
  KVM: PPC: Book3S HV P9: Only execute mtSPR if the value changed
  KVM: PPC: Book3S HV P9: Juggle SPR switching around
  KVM: PPC: Book3S HV P9: Move vcpu register save/restore into functions
  KVM: PPC: Book3S HV P9: Move host OS save/restore functions to
    built-in
  KVM: PPC: Book3S HV P9: Move nested guest entry into its own function
  KVM: PPC: Book3S HV P9: Move remaining SPR and MSR access into low
    level entry
  KVM: PPC: Book3S HV P9: Implement TM fastpath for guest entry/exit
  KVM: PPC: Book3S HV P9: Switch PMU to guest as late as possible
  KVM: PPC: Book3S HV P9: Restrict DSISR canary workaround to processors
    that require it
  KVM: PPC: Book3S HV P9: More SPR speed improvements
  KVM: PPC: Book3S HV P9: Demand fault EBB facility registers
  KVM: PPC: Book3S HV P9: Demand fault TM facility registers
  KVM: PPC: Book3S HV P9: Use Linux SPR save/restore to manage some host
    SPRs
  KVM: PPC: Book3S HV P9: Comment and fix MMU context switching code
  KVM: PPC: Book3S HV P9: Test dawr_enabled() before saving host DAWR
    SPRs
  KVM: PPC: Book3S HV P9: Don't restore PSSCR if not needed
  KVM: PPC: Book3S HV P9: Avoid tlbsync sequence on radix guest exit
  KVM: PPC: Book3S HV Nested: Avoid extra mftb() in nested entry
  KVM: PPC: Book3S HV P9: Improve mfmsr performance on entry
  KVM: PPC: Book3S HV P9: Optimise hash guest SLB saving

 arch/powerpc/include/asm/asm-prototypes.h |   5 -
 arch/powerpc/include/asm/kvm_asm.h        |   1 +
 arch/powerpc/include/asm/kvm_book3s.h     |   6 +
 arch/powerpc/include/asm/kvm_book3s_64.h  |   4 +-
 arch/powerpc/include/asm/kvm_host.h       |   5 +-
 arch/powerpc/include/asm/switch_to.h      |   2 +
 arch/powerpc/include/asm/time.h           |  19 +-
 arch/powerpc/kernel/cpu_setup_power.c     |  12 +-
 arch/powerpc/kernel/dt_cpu_ftrs.c         |   8 +-
 arch/powerpc/kernel/process.c             |  30 +
 arch/powerpc/kernel/time.c                |  54 +-
 arch/powerpc/kvm/book3s_64_mmu_radix.c    |   4 +
 arch/powerpc/kvm/book3s_hv.c              | 628 +++++++++----------
 arch/powerpc/kvm/book3s_hv.h              |  36 ++
 arch/powerpc/kvm/book3s_hv_interrupts.S   |  13 +-
 arch/powerpc/kvm/book3s_hv_nested.c       |  21 +-
 arch/powerpc/kvm/book3s_hv_p9_entry.c     | 725 +++++++++++++++++++---
 arch/powerpc/kvm/book3s_hv_rmhandlers.S   |  74 +--
 arch/powerpc/mm/book3s64/radix_pgtable.c  |  15 -
 arch/powerpc/perf/core-book3s.c           |   7 +
 arch/powerpc/platforms/powernv/idle.c     |  10 +-
 21 files changed, 1143 insertions(+), 536 deletions(-)
 create mode 100644 arch/powerpc/kvm/book3s_hv.h

-- 
2.23.0


^ permalink raw reply	[flat|nested] 133+ messages in thread

end of thread, other threads:[~2021-07-16  3:55 UTC | newest]

Thread overview: 133+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-22 10:56 [RFC PATCH 00/43] KVM: PPC: Book3S HV P9: entry/exit optimisations round 1 Nicholas Piggin
2021-06-22 10:56 ` Nicholas Piggin
2021-06-22 10:56 ` [RFC PATCH 01/43] powerpc/64s: Remove WORT SPR from POWER9/10 Nicholas Piggin
2021-06-22 10:56   ` Nicholas Piggin
2021-06-30 17:29   ` Fabiano Rosas
2021-06-30 17:29     ` Fabiano Rosas
2021-06-22 10:56 ` [RFC PATCH 02/43] KMV: PPC: Book3S HV P9: Use set_dec to set decrementer to host Nicholas Piggin
2021-06-22 10:56   ` Nicholas Piggin
2021-06-22 10:56 ` [RFC PATCH 03/43] KVM: PPC: Book3S HV P9: Use host timer accounting to avoid decrementer read Nicholas Piggin
2021-06-22 10:56   ` Nicholas Piggin
2021-06-22 10:56 ` [RFC PATCH 04/43] KVM: PPC: Book3S HV P9: Use large decrementer for HDEC Nicholas Piggin
2021-06-22 10:56   ` Nicholas Piggin
2021-06-22 10:56 ` [RFC PATCH 05/43] KVM: PPC: Book3S HV P9: Reduce mftb per guest entry/exit Nicholas Piggin
2021-06-22 10:56   ` Nicholas Piggin
2021-06-22 10:56 ` [RFC PATCH 06/43] powerpc/time: add API for KVM to re-arm the host timer/decrementer Nicholas Piggin
2021-06-22 10:56   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 07/43] KVM: PPC: Book3S HV: POWER10 enable HAIL when running radix guests Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-30 19:41   ` Fabiano Rosas
2021-06-30 19:41     ` Fabiano Rosas
2021-06-22 10:57 ` [RFC PATCH 08/43] powerpc/64s: Keep AMOR SPR a constant ~0 at runtime Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-30 19:17   ` Fabiano Rosas
2021-06-30 19:17     ` Fabiano Rosas
2021-06-22 10:57 ` [RFC PATCH 09/43] KVM: PPC: Book3S HV: Don't always save PMU for guest capable of nesting Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-07-01 13:17   ` Madhavan Srinivasan
2021-07-01 13:29     ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Madhavan Srinivasan
2021-07-02  0:27     ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Nicholas Piggin
2021-07-02  0:27       ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Nicholas Piggin
2021-07-08 12:45       ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Nicholas Piggin
2021-07-08 12:45         ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Nicholas Piggin
2021-07-12  3:42       ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Madhavan Srinivasan
2021-07-12  3:54         ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Madhavan Srinivasan
2021-07-10  2:50   ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Athira Rajeev
2021-07-10  2:50     ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Athira Rajeev
2021-07-12  2:41     ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Nicholas Piggin
2021-07-12  2:41       ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Nicholas Piggin
2021-07-12  3:17       ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Athira Rajeev
2021-07-14 12:39       ` Nicholas Piggin
2021-07-14 12:39         ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Nicholas Piggin
2021-07-16  3:43         ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in use Madhavan Srinivasan
2021-07-16  3:55           ` [RFC PATCH 10/43] powerpc/64s: Always set PMU control registers to frozen/disabled when not in u Madhavan Srinivasan
2021-06-22 10:57 ` [RFC PATCH 11/43] KVM: PPC: Book3S HV P9: Implement PMU save/restore in C Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-07-10  2:47   ` Athira Rajeev
2021-07-10  2:59     ` Athira Rajeev
2021-07-12  2:49     ` Nicholas Piggin
2021-07-12  2:49       ` Nicholas Piggin
2021-07-12 14:07       ` Athira Rajeev
2021-07-12 14:19         ` Athira Rajeev
2021-06-22 10:57 ` [RFC PATCH 12/43] KVM: PPC: Book3S HV P9: Factor out yield_count increment Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-07-08 17:56   ` Fabiano Rosas
2021-07-08 17:56     ` Fabiano Rosas
2021-06-22 10:57 ` [RFC PATCH 13/43] KVM: PPC: Book3S HV P9: Factor PMU save/load into context switch functions Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 14/43] KVM: PPC: Book3S HV P9: Demand fault PMU SPRs when marked not inuse Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 15/43] KVM: PPC: Book3S HV: CTRL SPR does not require read-modify-write Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 16/43] KVM: PPC: Book3S HV P9: Move SPRG restore to restore_p9_host_os_sprs Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 17/43] KVM: PPC: Book3S HV P9: Reduce mtmsrd instructions required to save host SPRs Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 18/43] KVM: PPC: Book3S HV P9: Improve mtmsrd scheduling by delaying MSR[EE] disable Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 19/43] KVM: PPC: Book3S HV P9: Add kvmppc_stop_thread to match kvmppc_start_thread Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-30 20:18   ` Fabiano Rosas
2021-06-30 20:18     ` Fabiano Rosas
2021-06-22 10:57 ` [RFC PATCH 20/43] KVM: PPC: Book3S HV: Change dec_expires to be relative to guest timebase Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 21/43] KVM: PPC: Book3S HV P9: Move TB updates Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 22/43] KVM: PPC: Book3S HV P9: Optimise timebase reads Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 23/43] KVM: PPC: Book3S HV P9: Avoid SPR scoreboard stalls Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 24/43] KVM: PPC: Book3S HV P9: Only execute mtSPR if the value changed Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 25/43] KVM: PPC: Book3S HV P9: Juggle SPR switching around Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 26/43] KVM: PPC: Book3S HV P9: Move vcpu register save/restore into functions Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 27/43] KVM: PPC: Book3S HV P9: Move host OS save/restore functions to built-in Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-07-08  5:32   ` Athira Rajeev
2021-07-08  5:44     ` Athira Rajeev
2021-07-12  2:50     ` Nicholas Piggin
2021-07-12  2:50       ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 28/43] KVM: PPC: Book3S HV P9: Move nested guest entry into its own function Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 29/43] KVM: PPC: Book3S HV P9: Move remaining SPR and MSR access into low level entry Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 30/43] KVM: PPC: Book3S HV P9: Implement TM fastpath for guest entry/exit Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 31/43] KVM: PPC: Book3S HV P9: Switch PMU to guest as late as possible Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 32/43] KVM: PPC: Book3S HV P9: Restrict DSISR canary workaround to processors that require it Nicholas Piggin
2021-06-22 10:57   ` [RFC PATCH 32/43] KVM: PPC: Book3S HV P9: Restrict DSISR canary workaround to processors that requir Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 33/43] KVM: PPC: Book3S HV P9: More SPR speed improvements Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 34/43] KVM: PPC: Book3S HV P9: Demand fault EBB facility registers Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-07-08 17:46   ` Fabiano Rosas
2021-07-08 17:46     ` Fabiano Rosas
2021-06-22 10:57 ` [RFC PATCH 35/43] KVM: PPC: Book3S HV P9: Demand fault TM " Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-07-08 17:46   ` Fabiano Rosas
2021-07-08 17:46     ` Fabiano Rosas
2021-06-22 10:57 ` [RFC PATCH 36/43] KVM: PPC: Book3S HV P9: Use Linux SPR save/restore to manage some host SPRs Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 37/43] KVM: PPC: Book3S HV P9: Comment and fix MMU context switching code Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 38/43] KVM: PPC: Book3S HV P9: Test dawr_enabled() before saving host DAWR SPRs Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-30 17:51   ` Fabiano Rosas
2021-06-30 17:51     ` Fabiano Rosas
2021-07-01  8:04     ` Nicholas Piggin
2021-07-01  8:04       ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 39/43] KVM: PPC: Book3S HV P9: Don't restore PSSCR if not needed Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 40/43] KVM: PPC: Book3S HV P9: Avoid tlbsync sequence on radix guest exit Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 41/43] KVM: PPC: Book3S HV Nested: Avoid extra mftb() in nested entry Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 42/43] KVM: PPC: Book3S HV P9: Improve mfmsr performance on entry Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin
2021-06-22 10:57 ` [RFC PATCH 43/43] KVM: PPC: Book3S HV P9: Optimise hash guest SLB saving Nicholas Piggin
2021-06-22 10:57   ` Nicholas Piggin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.