Avoiding OS jitter from rcu_barrier() for CPU-bound processes
Publication Date: 2014-Feb-25
The IP.com Prior Art Database
A method for avoiding operating system (OS) jitter from rcu_barrier() for CPU-bound processes is disclosed.
Page 01 of 1
Avoiding OS jitter from rcu _barrier() for CPU-bound processes
Disclosed is a method for avoiding operating system (OS) jitter from rcu_barrier() for CPU-bound processes.
The rcu_barrier() primitive (and by extension, rcu_barrier_bh() and rcu_barrier_sched() as well) have been called out for contributing to OS jitter [*]. OS jitter is due to random short bursts of CPU usage by the kernel on a CPU that is executing user-mode code for an extended period, OS jitter is a serious performance problem on High Performance Computing (HPC) workloads with short, closely spaced iterations.
The disclosed method leverages the ability of read-copy-update (RCU) to drain callbacks when entering idle, which then is used to drain callbacks when switching to user mode execution in cases where there is only one runnable thread on the CPU in question and where the upcoming usermode-NO_HZ mode has been selected.
Rcu_barrier() and related code sequences are modified to avoid issuing inter-processor interrupts (IPIing) and enqueuing callbacks on CPUs that have no callbacks. Because the CPUs where OS jitter is of concern are those in usermode-NO_HZ mode, and because RCU has had a chance to attempt to drain callbacks, there is a good chance that usermode-NO_HZ CPUs have no RCU callbacks.
There are a few complications with this approach:
rcu_do_batch() can momentarily remove callbacks, then requeue them. This means that
simply testing the rdp->nxtlist pointer against NULL will fail.