• Paul E. McKenney's avatar
    rcu: Enforce expedited-GP fairness via funnel wait queue · f6a12f34
    Paul E. McKenney authored
    The current mutex-based funnel-locking approach used by expedited grace
    periods is subject to severe unfairness.  The problem arises when a
    few tasks, making a path from leaves to root, all wake up before other
    tasks do.  A new task can then follow this path all the way to the root,
    which needlessly delays tasks whose grace period is done, but who do
    not happen to acquire the lock quickly enough.
    
    This commit avoids this problem by maintaining per-rcu_node wait queues,
    along with a per-rcu_node counter that tracks the latest grace period
    sought by an earlier task to visit this node.  If that grace period
    would satisfy the current task, instead of proceeding up the tree,
    it waits on the current rcu_node structure using a pair of wait queues
    provided for that purpose.  This decouples awakening of old tasks from
    the arrival of new tasks.
    
    If the wakeups prove to be a bottleneck, additional kthreads can be
    brought to bear for that purpose.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    f6a12f34
Name
Last commit
Last update
..
9p.h Loading commit data...
asoc.h Loading commit data...
bcache.h Loading commit data...
block.h Loading commit data...
btrfs.h Loading commit data...
clk.h Loading commit data...
cma.h Loading commit data...
compaction.h Loading commit data...
context_tracking.h Loading commit data...
cpuhp.h Loading commit data...
ext4.h Loading commit data...
f2fs.h Loading commit data...
fence.h Loading commit data...
fib.h Loading commit data...
fib6.h Loading commit data...
filelock.h Loading commit data...
filemap.h Loading commit data...
gpio.h Loading commit data...
host1x.h Loading commit data...
hswadsp.h Loading commit data...
huge_memory.h Loading commit data...
i2c.h Loading commit data...
intel-sst.h Loading commit data...
iommu.h Loading commit data...
ipi.h Loading commit data...
irq.h Loading commit data...
jbd2.h Loading commit data...
kmem.h Loading commit data...
kvm.h Loading commit data...
libata.h Loading commit data...
lock.h Loading commit data...
mce.h Loading commit data...
migrate.h Loading commit data...
mmflags.h Loading commit data...
module.h Loading commit data...
napi.h Loading commit data...
net.h Loading commit data...
nilfs2.h Loading commit data...
nmi.h Loading commit data...
oom.h Loading commit data...
page_isolation.h Loading commit data...
page_ref.h Loading commit data...
pagemap.h Loading commit data...
power.h Loading commit data...
power_cpu_migrate.h Loading commit data...
printk.h Loading commit data...
random.h Loading commit data...
rcu.h Loading commit data...
regulator.h Loading commit data...
rpm.h Loading commit data...
sched.h Loading commit data...
scsi.h Loading commit data...
signal.h Loading commit data...
skb.h Loading commit data...
sock.h Loading commit data...
spi.h Loading commit data...
spmi.h Loading commit data...
sunrpc.h Loading commit data...
sunvnet.h Loading commit data...
swiotlb.h Loading commit data...
syscalls.h Loading commit data...
target.h Loading commit data...
task.h Loading commit data...
thermal.h Loading commit data...
thermal_power_allocator.h Loading commit data...
thp.h Loading commit data...
timer.h Loading commit data...
tlb.h Loading commit data...
udp.h Loading commit data...
v4l2.h Loading commit data...
vb2.h Loading commit data...
vmscan.h Loading commit data...
workqueue.h Loading commit data...
writeback.h Loading commit data...
xen.h Loading commit data...