[RFC][PATCH 0/5] Signal scalability series

Matt Fleming
2011-09-30T15:13:04Z

From: Matt Fleming <matt.fleming@intel.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