From: Thomas Gleixner <tglx@linutronix.de>
To: Darren Hart <dvhart@infradead.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Linus Torvalds <torvalds@linux-foundation.org>,
Darren Hart <darren@dvhart.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
Michael Kerrisk <mtk.manpages@googlemail.com>,
Davidlohr Bueso <dave@stgolabs.net>, Chris Mason <clm@fb.com>,
"Carlos O'Donell" <carlos@redhat.com>,
Torvald Riegel <triegel@redhat.com>,
Eric Dumazet <edumazet@google.com>
Subject: Re: [patch V2 2/7] futex: Hash private futexes per process
Date: Sat, 7 May 2016 10:44:39 +0200 (CEST) [thread overview]
Message-ID: <alpine.DEB.2.11.1605071034090.3540@nanos> (raw)
In-Reply-To: <20160506180933.GE48432@f23x64.localdomain>
On Fri, 6 May 2016, Darren Hart wrote:
> On Thu, May 05, 2016 at 08:44:04PM -0000, Thomas Gleixner wrote:
> > --- /dev/null
> > +++ b/include/linux/futex_types.h
> > @@ -0,0 +1,12 @@
> > +#ifndef _LINUX_FUTEX_TYPES_H
> > +#define _LINUX_FUTEX_TYPES_H
> > +
> > +struct futex_hash_bucket;
> > +
> > +struct futex_hash {
> > + struct raw_spinlock lock;
>
> As it isn't always obvious to everone, it would be good to add a single line
> comment stating why a *raw* spinlock is necessary.
Well. Necessary. It protects the hash pointer and the hash bits. So the scope
is very limited and really does not need the heavy weight version of a
sleeping spinlock in RT.
> In this case... I suppose this could lead to some nasty scenarios setting up IPC
> mechanisms between threads if they weren't strictly serialized? Something else?
Sure, we need to serialize attempts to populate the hash. Especially in the
non preallocated case. The thing with raw vs. non raw spinlocks is that the
latter are expensive on RT and if there are just 5 instructions to protect it
does not make any sense to chose the heavy version.
> > +config FUTEX_PRIVATE_HASH
> > + bool
> > + default FUTEX && SMP
> > +
>
> So no prompt, not user selectable. If you have SMP, you get this? I think
> automatic is a good call... but is SMP the right criteria, or would NUMA be more
> appropriate since I thought it was keeping the hash local to the NUMA node that
> was the big win?
Yes, we can make it depend on NUMA. I even thought about making a run time
decision for non preallocated ones when the machine is not numa. But for test
coverage I wanted to have it as widely used as possible.
> > + /*
> > + * Futexes which use the per process hash have the lower bits cleared
> > + */
> > + if (key->both.offset & (FUT_OFF_INODE | FUT_OFF_MMSHARED))
> > + return hash_global_futex(key);
> > +
> > + slot = hash_long(key->private.address, mm->futex_hash.hash_bits);
> > + return &mm->futex_hash.hash[slot];
>
> Don't we also need to check if the private hash exists? Per the commit
> description, if we fail to allocate the private hash, we fall back to using the
> global hash...
If we fall back to the global hash, then the lower bits in offset are not
0. So the hash is guaranteed to be available.
Thanks,
tglx
next prev parent reply other threads:[~2016-05-07 8:46 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-05 20:44 [patch V2 0/7] futex: Add support for process private hashing Thomas Gleixner
2016-05-05 20:44 ` [patch V2 1/7] futex: Add some more function commentry Thomas Gleixner
2016-05-06 17:37 ` Darren Hart
2016-05-05 20:44 ` [patch V2 2/7] futex: Hash private futexes per process Thomas Gleixner
2016-05-06 18:09 ` Darren Hart
2016-05-06 21:56 ` Darren Hart
2016-05-07 8:45 ` Thomas Gleixner
2016-05-11 21:08 ` Darren Hart
2016-05-07 8:44 ` Thomas Gleixner [this message]
2016-05-11 21:07 ` Darren Hart
2016-05-27 16:36 ` Sebastian Andrzej Siewior
2016-05-19 12:21 ` Peter Zijlstra
2016-05-27 16:52 ` Sebastian Andrzej Siewior
2016-05-30 8:43 ` Peter Zijlstra
2016-05-19 12:24 ` Peter Zijlstra
2016-05-27 17:10 ` Sebastian Andrzej Siewior
2016-05-30 8:58 ` Peter Zijlstra
2016-05-30 11:08 ` Sebastian Andrzej Siewior
2016-05-30 12:06 ` Peter Zijlstra
2016-05-30 13:37 ` Sebastian Andrzej Siewior
2016-05-30 13:49 ` Peter Zijlstra
2016-05-30 13:59 ` Sebastian Andrzej Siewior
2016-05-30 14:02 ` Peter Zijlstra
2016-05-05 20:44 ` [patch V2 3/7] futex: Add op for hash preallocation Thomas Gleixner
2016-05-06 18:18 ` Darren Hart
2016-05-07 8:47 ` Thomas Gleixner
2016-05-07 11:40 ` Thomas Gleixner
2016-05-19 12:28 ` Peter Zijlstra
2016-05-19 19:36 ` Darren Hart
2016-05-19 12:24 ` Peter Zijlstra
2016-05-19 19:38 ` Darren Hart
2016-05-20 4:50 ` Peter Zijlstra
2016-05-19 12:25 ` Peter Zijlstra
2016-05-27 17:27 ` Sebastian Andrzej Siewior
2016-05-30 8:59 ` Peter Zijlstra
2016-05-05 20:44 ` [patch V2 4/7] futex: Add sysctl knobs for process private hash Thomas Gleixner
2016-05-06 18:22 ` Darren Hart
2016-05-27 17:33 ` Sebastian Andrzej Siewior
2016-05-05 20:44 ` [patch V2 5/7] perf/bench/futex-hash: Support NUMA Thomas Gleixner
2016-05-05 20:44 ` [patch V2 6/7] perf/bench/futex-hash: Support preallocate hash table Thomas Gleixner
2016-05-05 20:44 ` [patch V2 7/7] futex.2: Document hash preallocation opcode Thomas Gleixner
-- strict thread matches above, loose matches on Subject: below --
2016-05-05 19:03 [patch V2 0/7] Sebastian Andrzej Siewior <bigeasy@linutronix.de>, Linus Torvalds <torvalds@linux-foundation.org>, Darren Hart <darren@dvhart.com>, Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@kernel.org>, Michael Kerrisk <mtk.manpages@googlemail.com>, Davidlohr Bueso <dave@stgolabs.net>, Chris Mason <clm@fb.com>, Carlos O'Donell <carlos@redhat.com>, Torvald Riegel <triegel@redhat.com>, Eric Dumazet <edumazet@google.com> Thomas Gleixner
2016-05-05 19:03 ` [patch V2 2/7] futex: Hash private futexes per process Thomas Gleixner
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=alpine.DEB.2.11.1605071034090.3540@nanos \
--to=tglx@linutronix.de \
--cc=bigeasy@linutronix.de \
--cc=carlos@redhat.com \
--cc=clm@fb.com \
--cc=darren@dvhart.com \
--cc=dave@stgolabs.net \
--cc=dvhart@infradead.org \
--cc=edumazet@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mtk.manpages@googlemail.com \
--cc=peterz@infradead.org \
--cc=torvalds@linux-foundation.org \
--cc=triegel@redhat.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
all inboxes | Powered by JetHome®