[PATCH 0/3] riscv: Add PARAVIRT_SPINLOCKS support

Anup Patel anup at brainfault.org
Mon Dec 23 00:14:50 PST 2024


On Sun, Dec 22, 2024 at 9:09 AM <guoren at kernel.org> wrote:
>
> From: Guo Ren <guoren at linux.alibaba.com>
>
> Paravirtualized spinlocks allow a unfair qspinlock to replace the
> ticket-lock or native fair qspinlock implementation with something
> virtualization-friendly, for example, halt the virtual CPU rather
> than spinning.
>
> You could observe the paravirt qspinlock internal work situation with
> /sys/kernel/debug/tracing/trace:
>
> ls /sys/kernel/debug/tracing/events/paravirt/
>  enable   filter   pv_kick  pv_wait
>
> echo 1 > /sys/kernel/debug/tracing/events/paravirt/enable
> cat /sys/kernel/debug/tracing/trace
>  entries-in-buffer/entries-written: 33927/33927   #P:12
>
>                                 _-----=> irqs-off/BH-disabled
>                                / _----=> need-resched
>                               | / _---=> hardirq/softirq
>                               || / _--=> preempt-depth
>                               ||| / _-=> migrate-disable
>                               |||| /     delay
>            TASK-PID     CPU#  |||||  TIMESTAMP  FUNCTION
>               | |         |   |||||     |         |
>              sh-100     [001] d..2.    28.312294: pv_wait: cpu 1 out of wfi
>          <idle>-0       [000] d.h4.    28.322030: pv_kick: cpu 0 kick target cpu 1
>              sh-100     [001] d..2.    30.982631: pv_wait: cpu 1 out of wfi
>          <idle>-0       [000] d.h4.    30.993289: pv_kick: cpu 0 kick target cpu 1
>              sh-100     [002] d..2.    44.987573: pv_wait: cpu 2 out of wfi
>          <idle>-0       [000] d.h4.    44.989000: pv_kick: cpu 0 kick target cpu 2
>          <idle>-0       [003] d.s3.    51.593978: pv_kick: cpu 3 kick target cpu 4
>       rcu_sched-15      [004] d..2.    51.595192: pv_wait: cpu 4 out of wfi
> lock_torture_wr-115     [004] ...2.    52.656482: pv_kick: cpu 4 kick target cpu 2
> lock_torture_wr-113     [002] d..2.    52.659146: pv_wait: cpu 2 out of wfi
> lock_torture_wr-114     [008] d..2.    52.659507: pv_wait: cpu 8 out of wfi
> lock_torture_wr-114     [008] d..2.    52.663503: pv_wait: cpu 8 out of wfi
> lock_torture_wr-113     [002] ...2.    52.666128: pv_kick: cpu 2 kick target cpu 8
> lock_torture_wr-114     [008] d..2.    52.667261: pv_wait: cpu 8 out of wfi
> lock_torture_wr-114     [009] .n.2.    53.141515: pv_kick: cpu 9 kick target cpu 11
> lock_torture_wr-113     [002] d..2.    53.143339: pv_wait: cpu 2 out of wfi
> lock_torture_wr-116     [007] d..2.    53.143412: pv_wait: cpu 7 out of wfi
> lock_torture_wr-118     [000] d..2.    53.143457: pv_wait: cpu 0 out of wfi
> lock_torture_wr-115     [008] d..2.    53.143481: pv_wait: cpu 8 out of wfi
> lock_torture_wr-117     [011] d..2.    53.143522: pv_wait: cpu 11 out of wfi
> lock_torture_wr-117     [011] ...2.    53.143987: pv_kick: cpu 11 kick target cpu 8
> lock_torture_wr-115     [008] ...2.    53.144269: pv_kick: cpu 8 kick target cpu 7
>
> This series is split from [1].
>
> [1]: https://lore.kernel.org/linux-riscv/20231225125847.2778638-1-guoren@kernel.org/
>
> Guo Ren (3):
>   RISC-V: paravirt: Add pvqspinlock KVM backend
>   RISC-V: paravirt: Add pvqspinlock frontend
>   RISC-V: paravirt: pvqspinlock: Add trace point for pv_kick/wait

This should be an RFC series until the corresponding SBI extension
is frozen. AFAIK, no one has posted any SBI extension in this context
on any of the RVI mailing lists.

Please work with the PRS TG and Hypervisors SIG for the proposed
SBI extension.

Regards,
Anup


>
>  arch/riscv/Kconfig                            | 12 +++
>  arch/riscv/include/asm/Kbuild                 |  1 -
>  arch/riscv/include/asm/kvm_vcpu_sbi.h         |  1 +
>  arch/riscv/include/asm/qspinlock.h            | 35 +++++++++
>  arch/riscv/include/asm/qspinlock_paravirt.h   | 28 +++++++
>  arch/riscv/include/asm/sbi.h                  |  5 ++
>  arch/riscv/include/uapi/asm/kvm.h             |  1 +
>  arch/riscv/kernel/Makefile                    |  1 +
>  arch/riscv/kernel/qspinlock_paravirt.c        | 74 +++++++++++++++++++
>  arch/riscv/kernel/setup.c                     |  4 +
>  .../kernel/trace_events_filter_paravirt.h     | 60 +++++++++++++++
>  arch/riscv/kvm/Makefile                       |  1 +
>  arch/riscv/kvm/vcpu_sbi.c                     |  4 +
>  arch/riscv/kvm/vcpu_sbi_pvlock.c              | 57 ++++++++++++++
>  14 files changed, 283 insertions(+), 1 deletion(-)
>  create mode 100644 arch/riscv/include/asm/qspinlock.h
>  create mode 100644 arch/riscv/include/asm/qspinlock_paravirt.h
>  create mode 100644 arch/riscv/kernel/qspinlock_paravirt.c
>  create mode 100644 arch/riscv/kernel/trace_events_filter_paravirt.h
>  create mode 100644 arch/riscv/kvm/vcpu_sbi_pvlock.c
>
> --
> 2.40.1
>
>



More information about the linux-riscv mailing list