[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