[PATCH v4 00/13] RISC-V: Add steal-time support

Anup Patel anup at brainfault.org
Thu Dec 28 22:52:50 PST 2023


On Wed, Dec 20, 2023 at 9:30 PM Andrew Jones <ajones at ventanamicro.com> wrote:
>
> One frequently touted benefit of virtualization is the ability to
> consolidate machines, increasing resource utilization.  It may even be
> desirable to overcommit, at the risk of one or more VCPUs having to wait.
> Hypervisors which have interfaces for guests to retrieve the amount of
> time each VCPU had to wait give observers within the guests ways to
> account for less progress than would otherwise be expected. The SBI STA
> extension[1] provides a standard interface for guest VCPUs to retrieve
> the amount of time "stolen".
>
> This series has three parts:
>  1) Patches 01-03 - Add paravirt support to RISC-V and implement
>                     steal-time accounting support using the SBI STA
>                     extension.
>  2) Patches 04-09 - Implement SBI STA in KVM so KVM guests, such as
>                     Linux guests which enable the paravirt steal-time
>                     support, can be enlightened about stolen time.
>  3) Patches 10-13 - Add RISC-V support to the KVM selftests steal_time
>                     test and the SBI extension regs in the get-reg-list
>                     test.
>
> These patches are based on kvm-riscv/riscv_kvm_queue
>
> [1] https://github.com/riscv-non-isa/riscv-sbi-doc/blob/master/src/ext-steal-time.adoc
>
> This patches are also available here
> https://github.com/jones-drew/linux/commits/kvm/steal-time-v4
>
> Changes since v3:
>  - Use work "Computing" instead of "using" in pr_info [Atish]
>  - Rename KVM_REG_RISCV_SBI to KVM_REG_RISCV_SBI_STATE [Atish, Anup]
>  - Picked up r-b's from Atish and Anup
>
> Changes since v2:
>  - Always check sequence in case the SBI impl isn't writing steal
>    atomically [Anup]
>  - Create a reset function for sta and also reset last_steal [Anup]
>  - Picked up Anup's r-b's
>
> Changes since v1:
>  - sbi_sta_steal_time_set_shmem() now maps SBI errors to linux errors [Conor]
>  - Squashed v1 patch 4 into v1 patch 3 [Conor]
>  - Moved kvm_riscv_vcpu_set/get_reg_sbi() to arch/riscv/kvm/vcpu_sbi.c
>    which seems like a more appropriate file for them
>  - Rebased on kvm-riscv/riscv_kvm_queue which has all the dependencies
>
> Changes since RFC:
>  - Rebased on v6.7-rc3 (plus the patches mentioned above)
>  - Added defines for the -1's [Conor]
>  - Added a comment to the steal read sequence [Conor]
>  - Only do the steal read sequence for 32-bit and added READ_ONCE's
>  - Check for SBI v2.0 implementation
>  - Rename set_steal_time_shmem to steal_time_set_shmem
>  - Add get-reg-list support and test with get-reg-list kselftest
>  - A few other minor improvements
>  - Picked up one r-b from Conor
>
> Thanks,
> drew
>
>
> Andrew Jones (13):
>   RISC-V: paravirt: Add skeleton for pv-time support
>   RISC-V: Add SBI STA extension definitions
>   RISC-V: paravirt: Implement steal-time support
>   RISC-V: KVM: Add SBI STA extension skeleton
>   RISC-V: KVM: Add steal-update vcpu request
>   RISC-V: KVM: Add SBI STA info to vcpu_arch
>   RISC-V: KVM: Add support for SBI extension registers
>   RISC-V: KVM: Add support for SBI STA registers
>   RISC-V: KVM: Implement SBI STA extension
>   RISC-V: KVM: selftests: Move sbi_ecall to processor.c
>   RISC-V: KVM: selftests: Add guest_sbi_probe_extension
>   RISC-V: KVM: selftests: Add steal_time test support
>   RISC-V: KVM: selftests: Add get-reg-list test for STA registers

Queued this series for Linux-6.8

Thanks,
Anup

>
>  .../admin-guide/kernel-parameters.txt         |   6 +-
>  arch/riscv/Kconfig                            |  19 ++
>  arch/riscv/include/asm/kvm_host.h             |  10 +
>  arch/riscv/include/asm/kvm_vcpu_sbi.h         |  10 +
>  arch/riscv/include/asm/paravirt.h             |  28 +++
>  arch/riscv/include/asm/paravirt_api_clock.h   |   1 +
>  arch/riscv/include/asm/sbi.h                  |  17 ++
>  arch/riscv/include/uapi/asm/kvm.h             |  13 ++
>  arch/riscv/kernel/Makefile                    |   1 +
>  arch/riscv/kernel/paravirt.c                  | 134 +++++++++++
>  arch/riscv/kernel/time.c                      |   3 +
>  arch/riscv/kvm/Kconfig                        |   1 +
>  arch/riscv/kvm/Makefile                       |   1 +
>  arch/riscv/kvm/vcpu.c                         |   7 +
>  arch/riscv/kvm/vcpu_onereg.c                  |  51 ++++-
>  arch/riscv/kvm/vcpu_sbi.c                     |  67 ++++++
>  arch/riscv/kvm/vcpu_sbi_sta.c                 | 208 ++++++++++++++++++
>  tools/testing/selftests/kvm/Makefile          |   5 +-
>  .../selftests/kvm/include/riscv/processor.h   |  22 ++
>  .../selftests/kvm/lib/riscv/processor.c       |  45 ++++
>  tools/testing/selftests/kvm/lib/riscv/ucall.c |  26 ---
>  .../selftests/kvm/riscv/get-reg-list.c        |  43 ++++
>  tools/testing/selftests/kvm/steal_time.c      |  99 +++++++++
>  23 files changed, 782 insertions(+), 35 deletions(-)
>  create mode 100644 arch/riscv/include/asm/paravirt.h
>  create mode 100644 arch/riscv/include/asm/paravirt_api_clock.h
>  create mode 100644 arch/riscv/kernel/paravirt.c
>  create mode 100644 arch/riscv/kvm/vcpu_sbi_sta.c
>
> --
> 2.43.0
>



More information about the linux-riscv mailing list