答复: [PATCH][v2] KVM: use cpu_relax when halt polling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----邮件原件-----
> 发件人: Pankaj Gupta <pankaj.gupta.linux@xxxxxxxxx>
> 发送时间: 2021年7月28日 2:16
> 收件人: Li,Rongqing <lirongqing@xxxxxxxxx>
> 抄送: kvm@xxxxxxxxxxxxxxx; Paolo Bonzini <pbonzini@xxxxxxxxxx>;
> seanjc@xxxxxxxxxx
> 主题: Re: [PATCH][v2] KVM: use cpu_relax when halt polling
> 
> > SMT siblings share caches and other hardware, and busy halt polling
> > will degrade its sibling performance if its sibling is working
> >
> > Sean Christopherson suggested as below:
> >
> > "Rather than disallowing halt-polling entirely, on x86 it should be
> > sufficient to simply have the hardware thread yield to its sibling(s)
> > via PAUSE.  It probably won't get back all performance, but I would
> > expect it to be close.
> > This compiles on all KVM architectures, and AFAICT the intended usage
> > of cpu_relax() is identical for all architectures."
> 
> For sure change to cpu_relax() is better.
> Was just curious to know if you got descent performance improvement
> compared to previously reported with Unixbench.
> 
> Thanks,
> Pankaj

The test as below:

1. run unixbench dhry2reg:  ./Run -c 1 dhry2reg -i 1
without SMT disturbance, the score is 3172
with a  {while(1)i++} SMT disturbance,  the score is 1583
with a  {while(1)(rep nop/pause)} SMT disturbance,  the score is 1729.4

seems cpu_relax can not get back all performance , what wrong?


2. back to haltpoll
run unixbench dhry2reg ./Run -c 1 dhry2reg -i 1
without SMT disturbance, the score is 3172

with redis-benchmark SMT disturbance, redis-benchmark takes 90%cpu:
without patch, the score is 1776.9
with my first patch, the score is 1782.3
with cpu_relax patch, the score is 1778

with redis-benchmark SMT disturbance, redis-benchmark takes 33%cpu:
without patch, the score is 1929.9
with my first patch, the score is 2294.6
with cpu_relax patch, the score is 2005.3


cpu_relax give less than stop halt polling, but it should have little effect for redis-benchmark which get benefit from halt polling 


-Li

> >
> > Suggested-by: Sean Christopherson <seanjc@xxxxxxxxxx>
> > Signed-off-by: Li RongQing <lirongqing@xxxxxxxxx>
> > ---
> > diff v1: using cpu_relax, rather that stop halt-polling
> >
> >  virt/kvm/kvm_main.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index
> > 7d95126..1679728 100644
> > --- a/virt/kvm/kvm_main.c
> > +++ b/virt/kvm/kvm_main.c
> > @@ -3110,6 +3110,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
> >
> ++vcpu->stat.generic.halt_poll_invalid;
> >                                 goto out;
> >                         }
> > +                       cpu_relax();
> >                         poll_end = cur = ktime_get();
> >                 } while (kvm_vcpu_can_poll(cur, stop));
> >         }
> > --
> > 2.9.4
> >




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux