From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ingo Molnar Subject: Re: [PATCH 4/6] kvm tools: Add rwlock wrapper Date: Sun, 29 May 2011 21:33:27 +0200 Message-ID: <20110529193327.GE9835@elte.hu> References: <4DE13AF0.2080001@redhat.com> <20110528183259.GA15019@elte.hu> <4DE1EA93.6040401@redhat.com> <20110529073550.GA21254@elte.hu> <4DE1FBA5.6080905@redhat.com> <20110529123755.GC26627@elte.hu> <4DE2409D.1050701@redhat.com> <20110529142747.GA15441@elte.hu> <4DE25F70.5080700@redhat.com> <20110529153854.GH2668@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Avi Kivity , Mathieu Desnoyers , Pekka Enberg , Sasha Levin , john@jfloren.net, kvm@vger.kernel.org, asias.hejun@gmail.com, gorcunov@gmail.com, prasadjoshi124@gmail.com To: "Paul E. McKenney" Return-path: Received: from mx2.mail.elte.hu ([157.181.151.9]:34231 "EHLO mx2.mail.elte.hu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753351Ab1E2Tdu (ORCPT ); Sun, 29 May 2011 15:33:50 -0400 Content-Disposition: inline In-Reply-To: <20110529153854.GH2668@linux.vnet.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: * Paul E. McKenney wrote: > On Sun, May 29, 2011 at 06:00:00PM +0300, Avi Kivity wrote: > > On 05/29/2011 05:27 PM, Ingo Molnar wrote: > > >* Avi Kivity wrote: > > > > > >> I don't understand how you expect per_cpu to work in userspace. As > > >> soon as you calculate the per-cpu address, it can be invalidated. > > >> It doesn't help that you get a signal; you've already calculated > > >> the address. > > > > > >I was thinking of some sort of transactional mechanism, a tightly > > >controlled set of assembly instructions updating the percpu fields, > > >where the migration event would be able to 'unroll' incomplete > > >modifications done to the 'wrong' percpu data structure. (It would be > > >rather complex and every percpu op would have to be an atomic because > > >there's always the chance that it's executed on the wrong CPU.) > > > > > >But note that we do not even need any notification if there's a > > >(local) lock on the percpu fields: > > > > > >It will work because it's statistically percpu the lock will not > > >SMP-bounce between CPUs generally so it will be very fast to > > >acquire/release it, and we get the full cache benefits of percpu > > >variables. > > > > > >The migration notification would still be useful to detect grace > > >periods at natural points - but as Paul pointed out polling it via > > >SIGALRM works as well. The two (migration and SIGALRM) could be > > >combined as well. > > > > I think it's way simpler to map cpu == thread. And in fact, when > > you run a Linux kernel in a kvm guest, that's what happens, since > > each vcpu _is_ a host thread. > > I have to agree with Avi here. If a stop_machine()-like approach is > going to work, the updates have to be very rare, so any additional > cache-nonlocality from having lots of threads should not be a problem. > Especially given that in this particular case, there are exactly as > many CPUs as threads anyway. The readers should only need to touch a > constant number of cache lines either way. > > Or am I missing something here? I was talking about the (still imaginery!) user-space tree-RCU code! :-) The stop_machine_run()-alike thing is for brlocks - for which Sasha sent patches already, see these patches on the kvm@vger.kernel.org list: [PATCH 3/4] kvm tools: Add a brlock [PATCH 4/4] kvm tools: Use brlock in MMIO and IOPORT Wrt. brlocks, we'll keep them as simple as possible and indeed no involved tricks are needed AFAICS. read_lock() will be a compiler barrier(), that's as fast as it gets :-) Thanks, Ingo