Vaibhav Jain <vaibhav@xxxxxxxxxxxxx> writes: > This reverts commit 180c6b072bf3 ("KVM: PPC: Book3S HV nestedv2: Do not > cancel pending decrementer exception") [1] which prevented canceling a > pending HDEC exception for nestedv2 KVM guests. It was done to avoid > overhead of a H_GUEST_GET_STATE hcall to read the 'DEC expiry TB' register > which was higher compared to handling extra decrementer exceptions. > > However recent benchmarks indicate that overhead of not handling 'DECR' > expiry for Nested KVM Guest(L2) is higher and results in much larger exits > to Pseries Host(L1) as indicated by the Unixbench-arithoh bench[2] Any reason you chose that benchmark? At least on my system it seems to compile to an infinite loop incrementing a single register. Presumably the change is still good, but a more well known benchmark would be good, even if it's just stress-ng, at least that's a bit more standard. cheers > Metric | Current upstream | Revert [1] | Difference % > ======================================================================== > arithoh-count (10) | 3244831634 | 3403089673 | +04.88% > kvm_hv:kvm_guest_exit | 513558 | 152441 | -70.32% > probe:kvmppc_gsb_recv | 28060 | 28110 | +00.18% > > N=1 > > As indicated by the data above that reverting [1] results in substantial > reduction in number of L2->L1 exits with only slight increase in number of > H_GUEST_GET_STATE hcalls to read the value of 'DEC expiry TB'. This results > in an overall ~4% improvement of arithoh[2] throughput. > > [1] commit 180c6b072bf3 ("KVM: PPC: Book3S HV nestedv2: Do not cancel pending decrementer exception") > [2] https://github.com/kdlucas/byte-unixbench/ > > Fixes: 180c6b072bf3 ("KVM: PPC: Book3S HV nestedv2: Do not cancel pending decrementer exception") > Signed-off-by: Vaibhav Jain <vaibhav@xxxxxxxxxxxxx> > > --- > Changelog: > Since v1: https://lore.kernel.org/all/20240313072625.76804-1-vaibhav@xxxxxxxxxxxxx > * Updated/Corrected patch title and description > * Included data on test benchmark results for Unixbench-arithoh bench. > --- > arch/powerpc/kvm/book3s_hv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index 8e86eb577eb8..692a7c6f5fd9 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -4857,7 +4857,7 @@ int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 time_limit, > * entering a nested guest in which case the decrementer is now owned > * by L2 and the L1 decrementer is provided in hdec_expires > */ > - if (!kvmhv_is_nestedv2() && kvmppc_core_pending_dec(vcpu) && > + if (kvmppc_core_pending_dec(vcpu) && > ((tb < kvmppc_dec_expires_host_tb(vcpu)) || > (trap == BOOK3S_INTERRUPT_SYSCALL && > kvmppc_get_gpr(vcpu, 3) == H_ENTER_NESTED))) > -- > 2.44.0