From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753117AbbBQVwj (ORCPT ); Tue, 17 Feb 2015 16:52:39 -0500 Received: from e34.co.us.ibm.com ([32.97.110.152]:45206 "EHLO e34.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752206AbbBQVwh (ORCPT ); Tue, 17 Feb 2015 16:52:37 -0500 Date: Tue, 17 Feb 2015 13:52:31 -0800 From: "Paul E. McKenney" To: Peter Zijlstra Cc: Kirill Tkhai , linux-kernel@vger.kernel.org, Ingo Molnar , Josh Poimboeuf , oleg@redhat.com Subject: Re: [PATCH 2/2] [PATCH] sched: Add smp_rmb() in task rq locking cycles Message-ID: <20150217215231.GK4166@linux.vnet.ibm.com> Reply-To: paulmck@linux.vnet.ibm.com References: <20150217104516.12144.85911.stgit@tkhai> <1424170021.5749.22.camel@tkhai> <20150217121258.GM5029@twins.programming.kicks-ass.net> <20150217130523.GV24151@twins.programming.kicks-ass.net> <20150217160532.GW4166@linux.vnet.ibm.com> <20150217183636.GR5029@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150217183636.GR5029@twins.programming.kicks-ass.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15021721-0017-0000-0000-000008CF0AFE Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 17, 2015 at 07:36:36PM +0100, Peter Zijlstra wrote: > On Tue, Feb 17, 2015 at 08:05:32AM -0800, Paul E. McKenney wrote: > > > FWIW, we should probably update that table to include control > > > dependencies too; we didn't (formally) have those back then I think. > > > > > > The blob under SMP BARRIER PAIRING does not mention pairing with control > > > dependencies; and I'm rather sure I've done so. > > > > Yep, they should pair as well, though the pairing is limited. > > No transitivity, of course. > > > > So the straightforward approach requires eighteen bits per cell, though > > some of them are a bit, ummm, "unusual". > > Right, I think the idea was to not mark with 'X' when very unusual, > otherwise you do indeed obtain the below 'trivial' matrix. > > > Sixteen of these are given by > > Scenarios 0-15 in http://lwn.net/Articles/573436/, with the barrier on > > the side corresponding to the first column and the barrier on the top > > corresponding to the second column. The seventeenth bit says whether > > you get transitivity chaining after the top access, assuming that it > > happens later. The eighteenth bit says whether you get transitivity > > chaining before the side access, assuming that it happens earlier. > > > > The following is a rough first guess, filling in only the diagonal. > > Some of the entries are no doubt wrong, and getting them right requires > > something like 7*7*18 test cases, which will take some time. So, is > > something like this really helpful? > > > > | mb | wmb | rmb | rbd | acq | rel | ctl | > > -----+-------+-------+-------+-------+-------+-------+-------+ > > mb | 3ffff | X | X | X | X | X | X + > > -----+-------+-------+-------+-------+-------+-------+-------+ > > wmb | X | 01000 | X | X | X | X | X + > > -----+-------+-------+-------+-------+-------+-------+-------+ > > rmb | X | X | 00000 | X | X | X | X + > > -----+-------+-------+-------+-------+-------+-------+-------+ > > rbd | X | X | X | 00000 | X | X | X + > > -----+-------+-------+-------+-------+-------+-------+-------+ > > acq | X | X | X | X | 00020 | X | X + > > -----+-------+-------+-------+-------+-------+-------+-------+ > > rel | X | X | X | X | X | 0cc00 | X + > > -----+-------+-------+-------+-------+-------+-------+-------+ > > ctl | X | X | X | X | X | X | 00020 + > > -----+-------+-------+-------+-------+-------+-------+-------+ > > So maybe make two tables; one with 'obvious' pairings, which would > include things like mb - {mb,rmb,wmb}; rmb-wmb; acq-rel; ctl-mb; etc. > > That table is for people to quickly check 'easy'; like yes wmb-rbd makes > sense and rmb-rbd doesn't appear to make sense, I need more reading up. > > After that do the 'funny' table, which will explain further possible > pairings in more detail, like the rmb-rbd pairing. > > I'm not entirely sure we want to do the 7*7*18 state table, that's a lot > of work to exhaustively generate. We should be lazy and demand fill when > people come to us. I could do a table per communication style. For example, message passing looks like this (give or take likely errors in the table): Side CPU Top CPU -------- ------- X = 1; r1 = Y; Y = 1; r2 = X; assert(r1 == 0 || r2 == 1); | mb | wmb | rmb | rbd | acq | rel | ctl | -----+-------+-------+-------+-------+-------+-------+-------+ mb | Y | | Y | y | Y | | Y + -----+-------+-------+-------+-------+-------+-------+-------+ wmb | Y | | Y | y | Y | | Y + -----+-------+-------+-------+-------+-------+-------+-------+ rmb | | | | | | | + -----+-------+-------+-------+-------+-------+-------+-------+ rbd | | | | | | | + -----+-------+-------+-------+-------+-------+-------+-------+ acq | | | | | | | + -----+-------+-------+-------+-------+-------+-------+-------+ rel | Y | | Y | y | Y | | Y + -----+-------+-------+-------+-------+-------+-------+-------+ ctl | | | | | | | + -----+-------+-------+-------+-------+-------+-------+-------+ Here "Y" says that the barrier pair works, "y" says that it can work but requires an artificial dependency, and " " says that it does not work. Thanx, Paul