All of lore.kernel.org
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Dave Chinner <david@fromorbit.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Waiman Long <Waiman.Long@hp.com>, Ingo Molnar <mingo@kernel.org>
Subject: Re: [4.2, Regression] Queued spinlocks cause major XFS performance regression
Date: Thu, 3 Sep 2015 23:39:21 -0700	[thread overview]
Message-ID: <CA+55aFyuob5iOOptzdD1W7gsxcrUGkgU50UoLA+Aq29-jO0KSw@mail.gmail.com> (raw)
In-Reply-To: <20150904054820.GY3902@dastard>

On Thu, Sep 3, 2015 at 10:48 PM, Dave Chinner <david@fromorbit.com> wrote:
>
> When I turned spinlock debugging off on 4.2 to get some perf numbers
> a request from Linus, I got this:

[ ugly numbers deleted ]

> And then a quick call graph sample to find the lock:
>
>    37.19%    37.19%  [kernel]         [k] queued_spin_lock_slowpath
>    - queued_spin_lock_slowpath
>       - 99.98% _raw_spin_lock
>          - 89.16% xfs_log_commit_cil
[ snip ]
>
> This shows that we have catastrophic spinlock contention in the
> transaction commit path. The cil->xc_cil_lock spin lock as it's the
> only spinlock in that path. And while it's the hot lock in the
> commit path, turning spinlock debugging back on (and no other
> changes) shows that it shouldn't be contended:
>
>    8.92%  [kernel]  [k] _xfs_buf_find
[ snip ]

So you basically have almost no spinlock overhead at all even when
debugging is on.

That's unusual, as usually the debug code makes the contention much much worse.

> To confirm that this is indeed caused by the queued spinlocks, I
> removed the the spinlock debugging and did this to arch/x86/Kconfig:
>
> -       select ARCH_USE_QUEUED_SPINLOCK
>
> And the results are:

Ok, that's pretty conclusive. It doesn't seem to make much _sense_,
but numbers talk, BS walks.

If I read things right, the actual spinlock is the "cil->xc_cil_lock"
that is taken in xlog_cil_insert_items(), and it justr shows up in
xfs_log_commit_cil() in the call graph due to inlining. Correct?

There doesn't seem to be anything even remotely strange going on in that area.

Is this a PARAVIRT configuration? There were issues with PV
interaction at some point. If it is PV, and you don't actually use PV,
can you test with PV support disabled?

Also, if you look at the instruction-level profile for
queued_spin_lock_slowpath itself, does anything stand out? For
example, I note that the for-loop with the atomic_cmpxchg() call in it
doesn't ever do a cpu_relax(). It doesn't look like that should
normally loop, but obviously that function also shouldn't normally use
2/3rds of the cpu, so.. Maybe some part of queued_spin_lock_slowpath()
stands out as "it's spending 99% of the time in _that_ particular
part, and it gives some clue what goes wrong.

Ugh. Added Ingo to the cc. I *hate* locking problems, to the point
where I think we need to seriously consider undoing the queued
spinlocks if they have these kinds of odd issues..

Anybody have any ideas?

                         Linus

  reply	other threads:[~2015-09-04  6:39 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-04  5:48 [4.2, Regression] Queued spinlocks cause major XFS performance regression Dave Chinner
2015-09-04  6:39 ` Linus Torvalds [this message]
2015-09-04  7:11   ` Dave Chinner
2015-09-04  7:31     ` Juergen Gross
2015-09-04  7:55     ` Peter Zijlstra
2015-09-04  8:29     ` Dave Chinner
2015-09-04 15:05       ` Linus Torvalds
2015-09-04 15:14         ` Peter Zijlstra
2015-09-04 15:21           ` Linus Torvalds
2015-09-04 15:30             ` Peter Zijlstra
2015-09-04 15:54               ` Peter Zijlstra
2015-09-10  2:06                 ` Waiman Long
2015-09-04 15:58               ` Linus Torvalds
2015-09-05 17:45                 ` Peter Zijlstra
2015-09-04 15:25           ` Peter Zijlstra
2015-09-06 23:32             ` Dave Chinner
2015-09-07  0:05             ` Davidlohr Bueso
2015-09-07  6:57               ` Peter Zijlstra
2015-09-07 20:45                 ` Linus Torvalds
2015-09-08  6:37                   ` Davidlohr Bueso
2015-09-08 10:05                   ` Peter Zijlstra
2015-09-08 17:45                     ` Linus Torvalds
2015-09-13 10:55             ` [tip:locking/core] locking/qspinlock/x86: Fix performance regression under unaccelerated VMs tip-bot for Peter Zijlstra
2015-09-04  7:39   ` [4.2, Regression] Queued spinlocks cause major XFS performance regression Peter Zijlstra
2015-09-04  8:12     ` Dave Chinner
2015-09-04 11:32       ` Peter Zijlstra
2015-09-04 22:03         ` Dave Chinner
2015-09-06 23:47         ` Dave Chinner
2015-09-10  2:09           ` Waiman Long
     [not found]         ` <CAC=cRTOraeOeu3Z8C1qx6w=GMSzD_4VevrEzn0mMhrqy=7n3wQ@mail.gmail.com>
     [not found]           ` <56094F05.4090809@hpe.com>
2015-09-29  0:47             ` huang ying
2015-09-29  2:57               ` Waiman Long
2015-09-10  2:01 ` Waiman Long

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=CA+55aFyuob5iOOptzdD1W7gsxcrUGkgU50UoLA+Aq29-jO0KSw@mail.gmail.com \
    --to=torvalds@linux-foundation.org \
    --cc=Waiman.Long@hp.com \
    --cc=david@fromorbit.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.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 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.