From: Waiman Long <waiman.long@hpe.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>, <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Ding Tianhong <dingtianhong@huawei.com>,
Jason Low <jason.low2@hpe.com>,
Davidlohr Bueso <dave@stgolabs.net>,
"Paul E. McKenney" <paulmck@us.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Will Deacon <Will.Deacon@arm.com>,
Tim Chen <tim.c.chen@linux.intel.com>,
Imre Deak <imre.deak@intel.com>, Waiman Long <Waiman.Long@hp.com>
Subject: Re: [PATCH v4 1/3] locking/mutex: Add waiter parameter to mutex_optimistic_spin()
Date: Tue, 9 Aug 2016 13:36:19 -0400 [thread overview]
Message-ID: <57AA1493.6090200@hpe.com> (raw)
In-Reply-To: <20160808172659.GX6862@twins.programming.kicks-ass.net>
On 08/08/2016 01:26 PM, Peter Zijlstra wrote:
> On Mon, Jul 18, 2016 at 04:39:24PM -0400, Waiman Long wrote:
>> @@ -302,22 +306,42 @@ static inline bool mutex_try_to_acquire(struct mutex *lock)
>> *
>> * Returns true when the lock was taken, otherwise false, indicating
>> * that we need to jump to the slowpath and sleep.
>> + *
>> + * The waiter flag is set to true if the spinner is a waiter in the wait
>> + * queue. As the waiter has slept for a while, it should have priority to
>> + * get the lock over the regular spinners. So going to wait at the end of
>> + * the OSQ isn't fair to the waiter.
> If the OSQ lock were a full FIFO it would in fact be fair, but its not
> and things can drop out the middle and go (back) to sleep.
>
> This has nothing to do with the end or not.
Yes, the OSQ is not strictly FIFO, but the wait queue is. There is a
much higher chance of lock starvation if the waiter is put at the end of
the OSQ instead of in front of it. I will change the wordings to
illustrate this fact.
>> Instead, it will spin on the lock
>> + * directly and concurrently with the spinner at the head of the OSQ, if
>> + * present.
> Note that this isn't starvation proof in any way.
Patch 1 by itself isn't starvation-proof. Coupled with patch 3 that put
the waiter-spinner in front of OSQ, we will have a much higher chance to
avoid lock starvation. We can also completely block optimistic spinning
if the waiter can't get the lock after a certain number of wakeup-sleep
cycles, if the goal is to make it starvation proof.
>
>> There may be a bit more cacheline contention in this case.
> This is relevant how ?
It is just that there will be one more CPU contending on the lock cacheline.
>
>> + * The waiter also needs to set the lock to -1 instead of 0 on lock
>> + * acquisition.
> This is unrelated to the previous bits and thus should not be in the
> same paragraph. Also, a 'why' would be more helpful.
Will explain a bit more in the comments.
Regards,
Longman
next prev parent reply other threads:[~2016-08-09 17:37 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-18 20:39 [PATCH v4 0/3] locking/mutex: Enable optimistic spinning of lock waiter Waiman Long
2016-07-18 20:39 ` [PATCH v4 1/3] locking/mutex: Add waiter parameter to mutex_optimistic_spin() Waiman Long
2016-08-08 17:26 ` Peter Zijlstra
2016-08-09 17:36 ` Waiman Long [this message]
2016-07-18 20:39 ` [PATCH v4 2/3] locking/mutex: Enable optimistic spinning of woken task in wait queue Waiman Long
2016-08-08 17:29 ` Peter Zijlstra
2016-08-09 17:49 ` Waiman Long
2016-07-18 20:39 ` [PATCH v4 3/3] locking/mutex: Ensure forward progress of waiter-spinner Waiman Long
2016-08-08 17:37 ` Peter Zijlstra
2016-08-09 18:00 ` Waiman Long
2016-08-10 9:29 ` Peter Zijlstra
2016-08-10 17:51 ` 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=57AA1493.6090200@hpe.com \
--to=waiman.long@hpe.com \
--cc=Waiman.Long@hp.com \
--cc=Will.Deacon@arm.com \
--cc=dave@stgolabs.net \
--cc=dingtianhong@huawei.com \
--cc=imre.deak@intel.com \
--cc=jason.low2@hpe.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 \
/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.