[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1317395577-14091-1-git-send-email-matt@console-pimps.org>
Date: Fri, 30 Sep 2011 16:12:52 +0100
From: Matt Fleming <matt@...sole-pimps.org>
To: Oleg Nesterov <oleg@...hat.com>, Tejun Heo <tj@...nel.org>
Cc: linux-kernel@...r.kernel.org, Tony Luck <tony.luck@...el.com>,
Matt Fleming <matt.fleming@...el.com>
Subject: [RFC][PATCH 0/5] Signal scalability series
From: Matt Fleming <matt.fleming@...el.com>
Here's another attempt at improving signal scalability in the
kernel. It's not as drastic as my first attempt and consequently the
speedups aren't as impressive. However, it's a good first step and
hopefully by keeping it relatively simple it'll make it easier to
review.
Basically it's the same idea as last time - introduce more locks to
reduce contention on the per-process siglock, sighand->siglock. This
lock becomes highly contended in applications with multiple threads,
and I know the -rt guys have had scenarios where the per-process lock
has caused performance problems.
With this series I saw a ~%120 improvement in the number of
signals/per second that can be handled in the Will It Scale signal1
benchmark on a dual-socket machine.
There are two remaining scalability problems,
1. lock_task_sighand() still grabs sighand->siglock
2. signal->ctrl_lock must be taken in recalc_sigpending()
fixing these problems will be left to future patches.
And just like last time, these patches break ia64 because it
implements rt_sigprocmask() in assembly. I'll work on the ia64 stuff
while these patches are being reviewed.
Matt Fleming (5):
signal: Document signal locking rules
signal: Add rwlock to protect sighand->action
signal: Reduce sighand->siglock hold time in get_signal_to_deliver()
signal: Add signal->ctrl_lock for job control
signal: Split siglock into shared_siglock and per-thread siglock
arch/ia64/kernel/signal.c | 4 +-
drivers/block/nbd.c | 2 +-
drivers/usb/gadget/f_mass_storage.c | 2 +-
drivers/usb/gadget/file_storage.c | 2 +-
fs/autofs4/waitq.c | 5 +-
fs/exec.c | 17 +-
fs/jffs2/background.c | 2 +-
fs/ncpfs/sock.c | 2 +
fs/proc/array.c | 2 +
fs/signalfd.c | 11 +-
include/linux/init_task.h | 4 +
include/linux/sched.h | 23 +-
kernel/exit.c | 29 +-
kernel/fork.c | 4 +
kernel/freezer.c | 10 +-
kernel/kmod.c | 8 +-
kernel/posix-timers.c | 5 +-
kernel/ptrace.c | 68 ++--
kernel/signal.c | 737 +++++++++++++++++++++++++++--------
net/9p/client.c | 6 +-
net/sunrpc/svc.c | 3 -
security/selinux/hooks.c | 11 +-
22 files changed, 677 insertions(+), 280 deletions(-)
--
1.7.4.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists