linux/Documentation/filesystems
Shaohua Li 09223371de rcu: Use softirq to address performance regression
Commit a26ac2455ffcf3(rcu: move TREE_RCU from softirq to kthread)
introduced performance regression. In an AIM7 test, this commit degraded
performance by about 40%.

The commit runs rcu callbacks in a kthread instead of softirq. We observed
high rate of context switch which is caused by this. Out test system has
64 CPUs and HZ is 1000, so we saw more than 64k context switch per second
which is caused by RCU's per-CPU kthread.  A trace showed that most of
the time the RCU per-CPU kthread doesn't actually handle any callbacks,
but instead just does a very small amount of work handling grace periods.
This means that RCU's per-CPU kthreads are making the scheduler do quite
a bit of work in order to allow a very small amount of RCU-related
processing to be done.

Alex Shi's analysis determined that this slowdown is due to lock
contention within the scheduler.  Unfortunately, as Peter Zijlstra points
out, the scheduler's real-time semantics require global action, which
means that this contention is inherent in real-time scheduling.  (Yes,
perhaps someone will come up with a workaround -- otherwise, -rt is not
going to do well on large SMP systems -- but this patch will work around
this issue in the meantime.  And "the meantime" might well be forever.)

This patch therefore re-introduces softirq processing to RCU, but only
for core RCU work.  RCU callbacks are still executed in kthread context,
so that only a small amount of RCU work runs in softirq context in the
common case.  This should minimize ksoftirqd execution, allowing us to
skip boosting of ksoftirqd for CONFIG_RCU_BOOST=y kernels.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Tested-by: "Alex,Shi" <alex.shi@intel.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
2011-06-14 15:25:39 -07:00
..
caching Fix common misspellings 2011-03-31 11:26:23 -03:00
configfs Documentation: configfs examples crash fix 2011-05-26 17:12:34 -07:00
nfs Create Documentation/security/, 2011-05-19 15:59:38 -07:00
pohmelfs Fix common misspellings 2011-03-31 11:26:23 -03:00
9p.txt 9p: update Documentation pointers 2011-05-25 09:33:05 -05:00
00-INDEX smbfs: move to drivers/staging 2010-10-05 09:08:21 -07:00
adfs.txt adfs: add hexadecimal filetype suffix option 2011-03-22 17:44:17 -07:00
affs.txt Documentation: update broken web addresses. 2010-08-04 15:21:40 +02:00
afs.txt AFS: Documentation updates 2009-08-19 10:40:13 -07:00
autofs4-mount-control.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
automount-support.txt
befs.txt Documentation: update broken web addresses. 2010-08-04 15:21:40 +02:00
bfs.txt remove mention of CONFIG_KMOD from documentation 2008-07-22 19:24:29 +10:00
btrfs.txt Btrfs: Add Documentation/filesystem/btrfs.txt, remove old COPYING 2009-01-07 09:54:24 -05:00
ceph.txt Documentation/: it's -> its where appropriate 2010-04-23 02:09:52 +02:00
cifs.txt
coda.txt
cramfs.txt
debugfs.txt Document the debugfs API 2009-06-06 10:28:14 -06:00
devpts.txt Document usage of multiple-instances of devpts 2009-01-02 10:19:36 -08:00
directory-locking Documentation: Fix up docs still talking about i_sem 2007-05-24 10:16:17 -07:00
dlmfs.txt Documentation/: it's -> its where appropriate 2010-04-23 02:09:52 +02:00
dnotify_test.c Documentation/fs/: split txt and source files 2010-03-12 15:52:35 -08:00
dnotify.txt Documentation/fs/: split txt and source files 2010-03-12 15:52:35 -08:00
ecryptfs.txt eCryptfs: Move ecryptfs docs into Documentation/filesystems/ 2007-07-17 10:23:08 -07:00
exofs.txt exofs: Add option to mount by osdname 2011-03-15 15:02:51 +02:00
ext2.txt Doc fix: ext2 can only have 32,000 subdirs, not 32,768 2009-06-18 13:03:44 -07:00
ext3.txt ext3: make barrier options consistent with ext4 2010-05-21 19:30:41 +02:00
ext4.txt ext4: remove obsolete mount options from ext4's documentation 2011-05-01 18:14:26 -04:00
fiemap.txt Documentation/: it's -> its where appropriate 2010-04-23 02:09:52 +02:00
files.txt fix f_count description in Documentation/filesystems/files.txt 2008-12-31 18:07:42 -05:00
fuse.txt Documentation/: it's -> its where appropriate 2010-04-23 02:09:52 +02:00
gfs2-glocks.txt GFS2: Update docs 2009-05-19 10:23:23 +01:00
gfs2-uevents.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
gfs2.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
hfs.txt
hfsplus.txt Documentation: document HFSPlus 2007-07-31 15:39:38 -07:00
hpfs.txt Documentation/: it's -> its where appropriate 2010-04-23 02:09:52 +02:00
inotify.txt
isofs.txt Documentation: update broken web addresses. 2010-08-04 15:21:40 +02:00
jfs.txt JFS: document uid, gid, and umask mount options in jfs.txt 2007-03-09 10:27:31 -06:00
Locking fs: pass exact type of data dirties to ->dirty_inode 2011-05-27 07:04:40 -04:00
locks.txt Documentation: move locks.txt in filesystems/ 2007-10-09 18:32:45 -04:00
logfs.txt fix "seperate" typos in comments 2010-05-10 11:56:30 +02:00
Makefile Documentation/fs/: split txt and source files 2010-03-12 15:52:35 -08:00
mandatory-locking.txt locks: add warning about mandatory locking races 2007-10-09 18:32:45 -04:00
ncpfs.txt ncpfs: remove dead URL from documentation 2009-09-23 07:39:42 -07:00
nilfs2.txt nilfs2: add nodiscard mount option 2010-07-23 10:02:12 +09:00
ntfs.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
ocfs2.txt ocfs2: clean up mount option about atime in ocfs2.txt 2011-05-23 23:37:12 -07:00
omfs.txt omfs: add filesystem documentation 2008-07-26 12:00:05 -07:00
path-lookup.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
porting fs: remove inode_lock from iput_final and prune_icache 2011-03-24 21:16:32 -04:00
proc.txt rcu: Use softirq to address performance regression 2011-06-14 15:25:39 -07:00
quota.txt quota: documentation for sending "below quota" messages via netlink and tiny doc update 2008-08-12 16:07:27 -07:00
ramfs-rootfs-initramfs.txt Trivial Documentation/filesystems/ramfs-rootfs-initramfs.txt fix 2008-11-30 11:40:56 -08:00
relay.txt relay: add buffer-only channels; useful for early logging 2008-07-26 12:00:04 -07:00
romfs.txt Documentation/filesystems/romfs.txt: fixing link to genromfs 2011-02-17 22:04:46 +01:00
seq_file.txt seq_file: use proc_create() in documentation 2009-12-16 07:20:07 -08:00
sharedsubtree.txt Documentation: Fix trivial typo in filesystems/sharedsubtree.txt 2010-10-25 21:18:21 -04:00
spufs.txt Fix typos in /Documentation : 'U-Z' 2006-11-30 04:58:40 +01:00
squashfs.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
sysfs-pci.txt PCI: Allow read/write access to sysfs I/O port resources 2010-07-30 09:32:08 -07:00
sysfs-tagging.txt sysfs-namespaces: add a high-level Documentation file 2010-05-21 09:37:31 -07:00
sysfs.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
sysv-fs.txt [PATCH] fs/sysv/: doc cleanup 2006-12-07 08:39:44 -08:00
tmpfs.txt mempolicy: document cpuset interaction with tmpfs mpol mount option 2010-05-25 08:06:57 -07:00
ubifs.txt UBIFS: switch to dynamic printks 2011-05-23 08:22:20 +03:00
udf.txt udf: implement mode and dmode mounting options 2009-04-02 12:29:50 +02:00
ufs.txt [PATCH] ufs2 write: mount as rw 2007-02-12 09:48:40 -08:00
vfat.txt Documentation: update broken web addresses. 2010-08-04 15:21:40 +02:00
vfs.txt fs: pass exact type of data dirties to ->dirty_inode 2011-05-27 07:04:40 -04:00
xfs-delayed-logging-design.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
xfs.txt xfs: add online discard support 2011-05-24 11:17:13 -05:00
xip.txt DOC: update xip method info 2008-11-12 17:17:17 -08:00