From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH RFC V6 0/11] Paravirtualized ticketlocks Date: Sun, 01 Apr 2012 16:53:19 +0300 Message-ID: <4F785DCF.7020809@redhat.com> References: <20120321102041.473.61069.sendpatchset@codeblue.in.ibm.com> <4F707C5F.1000905@redhat.com> <4F716E31.3000803@linux.vnet.ibm.com> <4F73568D.7000703@linux.vnet.ibm.com> <4F743247.5080407@redhat.com> <4F74A405.2040609@linux.vnet.ibm.com> <4F7585EE.7060203@linux.vnet.ibm.com> <4F7855A1.80107@redhat.com> <4F785CC9.7070204@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <4F785CC9.7070204@linux.vnet.ibm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Raghavendra K T Cc: KVM , Alan Meadows , Peter Zijlstra , Stefano Stabellini , the arch/x86 maintainers , LKML , Konrad Rzeszutek Wilk , Andi Kleen , Srivatsa Vaddagiri , Jeremy Fitzhardinge , "H. Peter Anvin" , Attilio Rao , Ingo Molnar , Virtualization , Linus Torvalds , Xen Devel , Stephan Diestelhorst List-Id: virtualization@lists.linuxfoundation.org On 04/01/2012 04:48 PM, Raghavendra K T wrote: >>> I have patch something like below in mind to try: >>> >>> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c >>> index d3b98b1..5127668 100644 >>> --- a/virt/kvm/kvm_main.c >>> +++ b/virt/kvm/kvm_main.c >>> @@ -1608,15 +1608,18 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me) >>> * else and called schedule in __vcpu_run. Hopefully that >>> * VCPU is holding the lock that we need and will release it. >>> * We approximate round-robin by starting at the last boosted >>> VCPU. >>> + * Priority is given to vcpu that are unhalted. >>> */ >>> - for (pass = 0; pass< 2&& !yielded; pass++) { >>> + for (pass = 0; pass< 3&& !yielded; pass++) { >>> kvm_for_each_vcpu(i, vcpu, kvm) { >>> struct task_struct *task = NULL; >>> struct pid *pid; >>> - if (!pass&& i< last_boosted_vcpu) { >>> + if (!pass&& !vcpu->pv_unhalted) >>> + continue; >>> + else if (pass == 1&& i< last_boosted_vcpu) { >>> i = last_boosted_vcpu; >>> continue; >>> - } else if (pass&& i> last_boosted_vcpu) >>> + } else if (pass == 2&& i> last_boosted_vcpu) >>> break; >>> if (vcpu == me) >>> continue; >>> >> >> Actually I think this is unneeded. The loops tries to find vcpus that >> are runnable but not running (vcpu_active(vcpu->wq)), and halted vcpus >> don't match this condition. >> > > > I almost agree. But at corner of my thought, > > Suppose there are 8 vcpus runnable out of which 4 of them are kicked > but not running, making yield_to those 4 vcpus would result in better > lock progress. no? That's what the code does. > I still have little problem getting PLE setup, here (instead > rebasing patches). > Once I get PLE to get that running, and numbers prove no improvement, > I will drop this idea. > I'm interested in how PLE does vs. your patches, both with PLE enabled and disabled. -- error compiling committee.c: too many arguments to function