public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Jan Beulich <JBeulich@novell.com>
Cc: Jack Steiner <steiner@sgi.com>, Borislav Petkov <bp@amd64.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Nick Piggin <npiggin@kernel.dk>,
	"x86@kernel.org" <x86@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Ingo Molnar <mingo@redhat.com>,
	tee@sgi.com, Nikanth Karthikesan <knikanth@suse.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH RFC] x86: avoid atomic operation in test_and_set_bit_lock if possible
Date: Fri, 25 Mar 2011 12:10:13 +0100	[thread overview]
Message-ID: <20110325111013.GA29521@elte.hu> (raw)
In-Reply-To: <4D8C772202000078000384E1@vpn.id2.novell.com>


* Jan Beulich <JBeulich@novell.com> wrote:

> >>> On 24.03.11 at 18:19, Ingo Molnar <mingo@elte.hu> wrote:
> > * Jan Beulich <JBeulich@novell.com> wrote:
> >> Are you certain? Iirc the lock prefix implies minimally a read-for-
> >> ownership (if CPUs are really smart enough to optimize away the
> >> write - I wonder whether that would be correct at all when it
> >> comes to locked operations), which means a cacheline can still be
> >> bouncing heavily.
> > 
> > Yeah. On what workload was this?
> > 
> > Generally you use test_and_set_bit() if you expect it to be 'owned' by 
> > whoever calls it, and released by someone else.
> > 
> > It would be really useful to run perf top on an affected box and see which 
> > kernel function causes this. It might be better to add a test_bit() to the 
> > affected codepath - instead of bloating all test_and_set_bit() users.
> 
> Indeed, I agree with you and Linus in this aspect.
> 
> > Note that the patch can also cause overhead: the test_bit() can miss the 
> > cache, it will bring in the cacheline shared, and the subsequent test_and_set() 
> > call will then dirty the cacheline - so the CPU might miss again and has to wait 
> > for other CPUs to first flush this cacheline.
> > 
> > So we really need more details here.
> 
> The problem was observed with __lock_page() (in a variant not
> upstream for reasons not known to me), and prefixing e.g.
> trylock_page() with an extra PageLocked() check yielded the
> below quoted improvements.

The page lock flag is indeed one of those (rather rare) exceptions to typical 
object locking patterns. So in that particular case adding the PageLocked() 
test to trylock_page() would be the right approach to improving performance.

In the common case this change actively hurts for various reasons:

 - can turn a cache miss into two cache misses
 - adds an often unnecessary branch instruction
 - adds often unnecessary bloat
 - leaks a barrier

Thanks,

	Ingo

  reply	other threads:[~2011-03-25 11:10 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-24  4:56 [PATCH RFC] x86: avoid atomic operation in test_and_set_bit_lock if possible Nikanth Karthikesan
2011-03-24  8:52 ` Jan Beulich
2011-03-24  8:56 ` Ingo Molnar
2011-03-24 14:52   ` Borislav Petkov
2011-03-24 16:48     ` Jan Beulich
2011-03-24 17:19       ` Ingo Molnar
2011-03-25 10:06         ` Jan Beulich
2011-03-25 11:10           ` Ingo Molnar [this message]
2011-03-25 12:04             ` Nikanth Karthikesan
2011-03-25 13:12           ` Jack Steiner
2011-03-25 16:29           ` Linus Torvalds
2011-03-25 16:47             ` Jan Beulich
2011-03-25 16:49             ` Jack Steiner
2011-03-24 17:30       ` Jack Steiner
2011-03-24 20:00         ` Ingo Molnar
2011-03-24 20:40           ` Andi Kleen
2011-03-24 20:50             ` Ingo Molnar
2011-03-24 21:37               ` Andi Kleen
2011-03-24 20:48           ` Eric Dumazet
2011-03-24 20:54             ` Ingo Molnar
2011-03-24 21:02               ` Eric Dumazet
2011-03-24 21:42                 ` Andi Kleen
2011-03-24 23:26                   ` Linus Torvalds
2011-03-24 23:56                     ` Andi Kleen
2011-03-25  5:47                       ` Eric Dumazet
2011-03-25  9:32                         ` Ingo Molnar
2011-03-25  9:44                           ` Eric Dumazet
2011-03-25  9:59                             ` Ingo Molnar
2011-03-25 10:50                               ` Borislav Petkov
2011-03-25 11:10                               ` Peter Zijlstra
2011-03-25 11:11                                 ` Ingo Molnar
2011-03-25 16:16                           ` Robert Richter
2011-03-25 17:22                           ` Andi Kleen
2011-03-25 19:26                             ` Ingo Molnar
2011-03-25  9:38                         ` Eric Dumazet
2011-03-25 20:29                           ` Peter Zijlstra
2011-03-26  8:15                             ` Eric Dumazet
2011-03-26  9:44                               ` Peter Zijlstra
2011-03-26  9:57                               ` Ingo Molnar
2011-03-25  9:22                       ` Ingo Molnar
2011-03-25 10:21                         ` Peter Zijlstra
2011-03-25 16:08                           ` Robert Richter
2011-03-25 19:31                             ` Ingo Molnar
2011-03-25 17:15                           ` Andi Kleen
2011-03-25 19:21                             ` Ingo Molnar
2011-03-25  9:35                     ` Ingo Molnar
2011-03-24 17:01 ` Linus Torvalds
2011-03-24 17:13 ` Jack Steiner
2011-03-24 18:38 ` Andi Kleen

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=20110325111013.GA29521@elte.hu \
    --to=mingo@elte.hu \
    --cc=JBeulich@novell.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=bp@amd64.org \
    --cc=hpa@zytor.com \
    --cc=knikanth@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=npiggin@kernel.dk \
    --cc=steiner@sgi.com \
    --cc=tee@sgi.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox