From: Kirill Tkhai <ktkhai@virtuozzo.com>
To: linux-ia64@vger.kernel.org, avagin@virtuozzo.com,
peterz@infradead.org, heiko.carstens@de.ibm.com, hpa@zytor.com,
gorcunov@virtuozzo.com, linux-arch@vger.kernel.org,
linux-s390@vger.kernel.org, x86@kernel.org, mingo@redhat.com,
mattst88@gmail.com, fenghua.yu@intel.com, arnd@arndb.de,
ktkhai@virtuozzo.com, ink@jurassic.park.msu.ru,
tglx@linutronix.de, rth@twiddle.net, tony.luck@intel.com,
linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
schwidefsky@de.ibm.com, davem@davemloft.net
Subject: [PATCH 0/7] rwsem: Implement down_read_killable()
Date: Mon, 19 Jun 2017 21:02:00 +0300 [thread overview]
Message-ID: <149789463636.9059.16943955939303454611.stgit@localhost.localdomain> (raw)
This series implements killable version of down_read()
similar to already existing down_write_killable() function.
Patches [1-2/7] add arch-independent low-level primitives
for the both rwsem types.
Patches [3-6/7] add arch-dependent primitives for
the architectures, that use rwsem-xadd implementation.
The assembly code was modified in x86 case only, the rest
of architectures does not need such change.
I tested the series in x86 (which uses RWSEM_XCHGADD_ALGORITHM
config option), and also the RWSEM_GENERIC_SPINLOCK case,
which were manually written in Kconfig. alpha, ia64 and s390
are compile-tested only, but I believe, their changes are
pretty easy. Please, people, who work with them, take your
look at the corresponding patches.
***
Where this came from. Cycle of creation/destroying net
namespace is slow at the moment as it's made under net_mutex.
During cleanup_net(), the mutex is held the whole time,
while RCU is synchronizing. This takes a lot of time,
especially when RCU is preemptible, and at this time
the creation of new net namespaces is blocked. But
this moment may be optimized by using small locks
in pernet callbacks, where they are need, and by
converting net_mutex into rw semaphore. In cleanup_net()
it's only need to prevent from registration/unregistration
of pernet_subsys and pernet_devices, which actions
can't be missed by unhashed dead net namespace.
down_read guarantees that, and it's lite-weight.
Using the rwsem improves the create/destroy cycle performance
on my development kernel much:
$time for i in {1..10000}; do unshare -n -- bash -c exit; done
MUTEX:
real 1m13,372s
user 0m9,278s
sys 0m17.181s
RWSEM:
real 0m17,482s
user 0m3,791s
sys 0m13,723s
Of course, it's just an example, and it's a generic use
function. It may be used in other places.
---
Kirill Tkhai (7):
rwsem-spinlock: Add killable versions of __down_read()
rwsem-spinlock: Add killable versions of rwsem_down_read_failed()
alpha: Add __down_read_killable()
ia64: Add __down_read_killable()
s390: Add __down_read_killable()
x86: Add __down_read_killable()
rwsem: Add down_read_killable()
arch/alpha/include/asm/rwsem.h | 18 ++++++++++++++++--
arch/ia64/include/asm/rwsem.h | 22 +++++++++++++++++++---
arch/s390/include/asm/rwsem.h | 18 ++++++++++++++++--
arch/x86/include/asm/rwsem.h | 37 +++++++++++++++++++++++++++----------
arch/x86/lib/rwsem.S | 12 ++++++++++++
include/asm-generic/rwsem.h | 8 ++++++++
include/linux/rwsem-spinlock.h | 1 +
include/linux/rwsem.h | 2 ++
kernel/locking/rwsem-spinlock.c | 37 ++++++++++++++++++++++++++++---------
kernel/locking/rwsem-xadd.c | 33 ++++++++++++++++++++++++++++++---
kernel/locking/rwsem.c | 16 ++++++++++++++++
11 files changed, 175 insertions(+), 29 deletions(-)
next reply other threads:[~2017-06-19 18:02 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-19 18:02 Kirill Tkhai [this message]
2017-06-19 18:02 ` [PATCH 1/7] rwsem-spinlock: Add killable versions of __down_read() Kirill Tkhai
2017-06-19 18:02 ` [PATCH 2/7] rwsem-spinlock: Add killable versions of rwsem_down_read_failed() Kirill Tkhai
2017-07-06 8:04 ` Peter Zijlstra
2017-07-06 9:45 ` Kirill Tkhai
2017-06-19 18:02 ` [PATCH 3/7] alpha: Add __down_read_killable() Kirill Tkhai
2017-06-19 18:02 ` [PATCH 4/7] ia64: " Kirill Tkhai
2017-06-19 18:03 ` [PATCH 5/7] s390: " Kirill Tkhai
2017-06-19 18:03 ` [PATCH 6/7] x86: " Kirill Tkhai
2017-06-19 18:03 ` [PATCH 7/7] rwsem: Add down_read_killable() Kirill Tkhai
2017-06-19 20:27 ` [PATCH 0/7] rwsem: Implement down_read_killable() David Rientjes
2017-06-20 8:30 ` David Howells
2017-06-20 10:36 ` Kirill Tkhai
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=149789463636.9059.16943955939303454611.stgit@localhost.localdomain \
--to=ktkhai@virtuozzo.com \
--cc=arnd@arndb.de \
--cc=avagin@virtuozzo.com \
--cc=davem@davemloft.net \
--cc=fenghua.yu@intel.com \
--cc=gorcunov@virtuozzo.com \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=ink@jurassic.park.msu.ru \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mattst88@gmail.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rth@twiddle.net \
--cc=schwidefsky@de.ibm.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--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