From: Pan Xinhui <xinhui@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au,
boqun.feng@gmail.com, paulmck@linux.vnet.ibm.com,
tglx@linutronix.de
Subject: Re: [PATCH V3] powerpc: Implement {cmp}xchg for u8 and u16
Date: Mon, 25 Apr 2016 18:10:51 +0800 [thread overview]
Message-ID: <571DED2B.8060600@linux.vnet.ibm.com> (raw)
In-Reply-To: <20160421161354.GI3430@twins.programming.kicks-ass.net>
On 2016年04月22日 00:13, Peter Zijlstra wrote:
> On Thu, Apr 21, 2016 at 11:35:07PM +0800, Pan Xinhui wrote:
>> yes, you are right. more load/store will be done in C code.
>> However such xchg_u8/u16 is just used by qspinlock now. and I did not see any performance regression.
>> So just wrote in C, for simple. :)
>
> Which is fine; but worthy of a note in your Changelog.
>
will do that.
>> Of course I have done xchg tests.
>> we run code just like xchg((u8*)&v, j++); in several threads.
>> and the result is,
>> [ 768.374264] use time[1550072]ns in xchg_u8_asm
>> [ 768.377102] use time[2826802]ns in xchg_u8_c
>>
>> I think this is because there is one more load in C.
>> If possible, we can move such code in asm-generic/.
>
> So I'm not actually _that_ familiar with the PPC LL/SC implementation;
> but there are things a CPU can do to optimize these loops.
>
> For example, a CPU might choose to not release the exclusive hold of the
> line for a number of cycles, except when it passes SC or an interrupt
> happens. This way there's a smaller chance the SC fails and inhibits
> forward progress.
I am not sure if there is such hardware optimization.
>
> By doing the modification outside of the LL/SC you loose such
> advantages.
>
> And yes, doing a !exclusive load prior to the exclusive load leads to an
> even bigger window where the data can get changed out from under you.
>
you are right.
We have observed such data change during the two different loads.
next prev parent reply other threads:[~2016-04-25 10:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-19 6:29 [PATCH V2] powerpc: Implement {cmp}xchg for u8 and u16 Pan Xinhui
2016-04-19 9:18 ` Boqun Feng
2016-04-19 9:18 ` Boqun Feng
2016-04-20 3:39 ` Pan Xinhui
2016-04-20 13:24 ` [PATCH V3] " Pan Xinhui
2016-04-20 14:24 ` Peter Zijlstra
2016-04-21 15:35 ` Pan Xinhui
2016-04-21 15:52 ` Boqun Feng
2016-04-22 1:59 ` Pan Xinhui
2016-04-22 3:16 ` Boqun Feng
2016-04-21 16:13 ` Peter Zijlstra
2016-04-25 10:10 ` Pan Xinhui [this message]
2016-04-25 15:37 ` Peter Zijlstra
2016-04-26 11:35 ` Pan Xinhui
2016-04-27 9:16 ` [PATCH V4] " Pan Xinhui
2016-04-27 13:58 ` Boqun Feng
2016-04-27 14:16 ` Boqun Feng
2016-04-27 14:50 ` Boqun Feng
2016-04-27 14:59 ` Boqun Feng
2016-04-28 10:21 ` Pan Xinhui
2016-04-28 7:59 ` Peter Zijlstra
2016-04-28 10:21 ` Pan Xinhui
2016-11-25 0:04 ` [V4] " Michael Ellerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=571DED2B.8060600@linux.vnet.ibm.com \
--to=xinhui@linux.vnet.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=boqun.feng@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=paulmck@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.