On Wed, Dec 20, 2023 at 9:30 PM Andrew Jones <ajones@xxxxxxxxxxxxxxxx> 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 >