From: Davidlohr Bueso <dave@stgolabs.net>
To: Waiman Long <waiman.long@hpe.com>
Cc: Ding Tianhong <dingtianhong@huawei.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
"Paul E. McKenney" <paulmck@us.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Will Deacon <Will.Deacon@arm.com>, Jason Low <jason.low2@hp.com>,
Tim Chen <tim.c.chen@linux.intel.com>,
Waiman Long <Waiman.Long@hp.com>
Subject: Re: [PATCH RFC] locking/mutexes: don't spin on owner when wait list is not NULL.
Date: Thu, 21 Jan 2016 22:09:44 -0800 [thread overview]
Message-ID: <20160122060944.GA28537@linux-uzut.site> (raw)
In-Reply-To: <56A1638A.7050202@hpe.com>
On Thu, 21 Jan 2016, Waiman Long wrote:
>On 01/21/2016 04:29 AM, Ding Tianhong wrote:
>>I got the vmcore and found that the ifconfig is already in the wait_list of the
>>rtnl_lock for 120 second, but my process could get and release the rtnl_lock
>>normally several times in one second, so it means that my process jump the
>>queue and the ifconfig couldn't get the rtnl all the time, I check the mutex lock
>>slow path and found that the mutex may spin on owner ignore whether the wait list
>>is empty, it will cause the task in the wait list always be cut in line, so add
>>test for wait list in the mutex_can_spin_on_owner and avoid this problem.
So this has been somewhat always known, at least in theory, until now. It's the cost
of spinning without going through the wait-queue, unlike other locks.
>> [...]
>From: Waiman Long <Waiman.Long@hpe.com>
>Date: Thu, 21 Jan 2016 17:53:14 -0500
>Subject: [PATCH] locking/mutex: Enable optimistic spinning of woken task in wait list
>
>Ding Tianhong reported a live-lock situation where a constant stream
>of incoming optimistic spinners blocked a task in the wait list from
>getting the mutex.
>
>This patch attempts to fix this live-lock condition by enabling the
>a woken task in the wait list to enter optimistic spinning loop itself
>with precedence over the ones in the OSQ. This should prevent the
>live-lock
>condition from happening.
And one of the reasons why we never bothered 'fixing' things was the additional
branching out in the slowpath (and lack of real issue, although this one being so
damn pathological). I fear that your approach is one of those scenarios where the
code ends up being bloated, albeit most of it is actually duplicated and can be
refactored *sigh*. So now we'd spin, then sleep, then try spinning then sleep again...
phew. Not to mention the performance implications, ie loosing the benefits of osq
over waiter spinning in scenarios that would otherwise have more osq spinners as
opposed to waiter spinners, or in setups where it is actually best to block instead
of spinning.
Thanks,
Davidlohr
next prev parent reply other threads:[~2016-01-22 6:10 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-21 9:29 [PATCH RFC] locking/mutexes: don't spin on owner when wait list is not NULL Ding Tianhong
2016-01-21 21:23 ` Tim Chen
2016-01-22 2:41 ` Paul E. McKenney
2016-01-22 2:48 ` Davidlohr Bueso
2016-01-22 3:13 ` Paul E. McKenney
2016-01-21 23:02 ` Waiman Long
2016-01-22 6:09 ` Davidlohr Bueso [this message]
2016-01-22 13:38 ` Waiman Long
2016-01-22 16:46 ` Davidlohr Bueso
2016-01-25 2:23 ` [PATCH] locking/mutex: Allow next waiter lockless wakeup Davidlohr Bueso
2016-01-25 23:02 ` Waiman Long
2016-02-29 11:21 ` [tip:locking/core] " tip-bot for Davidlohr Bueso
2016-01-22 8:54 ` [PATCH RFC] locking/mutexes: don't spin on owner when wait list is not NULL Peter Zijlstra
2016-01-22 10:20 ` Jason Low
2016-01-22 10:53 ` Peter Zijlstra
2016-01-22 10:56 ` Peter Zijlstra
2016-01-22 11:06 ` Peter Zijlstra
2016-01-22 13:59 ` Waiman Long
2016-01-24 8:03 ` Ding Tianhong
2016-01-29 9:53 ` Peter Zijlstra
2016-01-30 1:18 ` Ding Tianhong
2016-02-01 3:29 ` huang ying
2016-02-01 3:35 ` Huang, Ying
2016-02-01 10:08 ` [PATCH] locking/mutex: Avoid spinner vs waiter starvation Peter Zijlstra
2016-02-02 21:19 ` Davidlohr Bueso
2016-02-03 7:10 ` Ding Tianhong
2016-02-03 19:24 ` Davidlohr Bueso
2016-02-04 1:20 ` Ding Tianhong
2016-02-12 18:33 ` Waiman Long
2016-02-03 22:07 ` Waiman Long
2016-02-04 1:35 ` Jason Low
2016-02-04 8:55 ` huang ying
2016-02-04 22:49 ` Jason Low
2016-01-22 13:41 ` [PATCH RFC] locking/mutexes: don't spin on owner when wait list is not NULL Waiman Long
-- strict thread matches above, loose matches on Subject: below --
2016-01-21 6:53 [PATCH RFC ] " Ding Tianhong
2016-01-21 7:29 ` Ingo Molnar
2016-01-21 9:04 ` Ding Tianhong
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=20160122060944.GA28537@linux-uzut.site \
--to=dave@stgolabs.net \
--cc=Waiman.Long@hp.com \
--cc=Will.Deacon@arm.com \
--cc=dingtianhong@huawei.com \
--cc=jason.low2@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=paulmck@us.ibm.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
--cc=torvalds@linux-foundation.org \
--cc=waiman.long@hpe.com \
/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;
as well as URLs for NNTP newsgroup(s).