mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 13:30:55 +07:00
doc: Add mid-boot operation to expedited grace periods
This commit adds a description of how expedited grace periods operate during the mid-boot "dead zone", which starts when the scheduler spawns the first kthread and ends when all of RCU's kthreads have been spawned. In short, before mid-boot, synchronous grace periods can be a no-op. After the end of mid-boot, workqueues may be used. During mid-boot, the requesting task drivees the expedited grace period. For more detail, see https://lwn.net/Articles/716148/. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
f1387d7705
commit
b4553f0cfe
@ -284,6 +284,7 @@ Expedited Grace Period Refinements</a></h2>
|
|||||||
Funnel locking and wait/wakeup</a>.
|
Funnel locking and wait/wakeup</a>.
|
||||||
<li> <a href="#Use of Workqueues">Use of Workqueues</a>.
|
<li> <a href="#Use of Workqueues">Use of Workqueues</a>.
|
||||||
<li> <a href="#Stall Warnings">Stall warnings</a>.
|
<li> <a href="#Stall Warnings">Stall warnings</a>.
|
||||||
|
<li> <a href="#Mid-Boot Operation">Mid-boot operation</a>.
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<h3><a name="Idle-CPU Checks">Idle-CPU Checks</a></h3>
|
<h3><a name="Idle-CPU Checks">Idle-CPU Checks</a></h3>
|
||||||
@ -524,7 +525,7 @@ their grace periods and carrying out their wakeups.
|
|||||||
In earlier implementations, the task requesting the expedited
|
In earlier implementations, the task requesting the expedited
|
||||||
grace period also drove it to completion.
|
grace period also drove it to completion.
|
||||||
This straightforward approach had the disadvantage of needing to
|
This straightforward approach had the disadvantage of needing to
|
||||||
account for signals sent to user tasks,
|
account for POSIX signals sent to user tasks,
|
||||||
so more recent implemementations use the Linux kernel's
|
so more recent implemementations use the Linux kernel's
|
||||||
<a href="https://www.kernel.org/doc/Documentation/workqueue.txt">workqueues</a>.
|
<a href="https://www.kernel.org/doc/Documentation/workqueue.txt">workqueues</a>.
|
||||||
|
|
||||||
@ -533,8 +534,8 @@ The requesting task still does counter snapshotting and funnel-lock
|
|||||||
processing, but the task reaching the top of the funnel lock
|
processing, but the task reaching the top of the funnel lock
|
||||||
does a <tt>schedule_work()</tt> (from <tt>_synchronize_rcu_expedited()</tt>
|
does a <tt>schedule_work()</tt> (from <tt>_synchronize_rcu_expedited()</tt>
|
||||||
so that a workqueue kthread does the actual grace-period processing.
|
so that a workqueue kthread does the actual grace-period processing.
|
||||||
Because workqueue kthreads do not accept signals, grace-period-wait
|
Because workqueue kthreads do not accept POSIX signals, grace-period-wait
|
||||||
processing need not allow for signals.
|
processing need not allow for POSIX signals.
|
||||||
|
|
||||||
In addition, this approach allows wakeups for the previous expedited
|
In addition, this approach allows wakeups for the previous expedited
|
||||||
grace period to be overlapped with processing for the next expedited
|
grace period to be overlapped with processing for the next expedited
|
||||||
@ -586,6 +587,46 @@ blocking the current grace period are printed.
|
|||||||
Each stall warning results in another pass through the loop, but the
|
Each stall warning results in another pass through the loop, but the
|
||||||
second and subsequent passes use longer stall times.
|
second and subsequent passes use longer stall times.
|
||||||
|
|
||||||
|
<h3><a name="Mid-Boot Operation">Mid-boot operation</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The use of workqueues has the advantage that the expedited
|
||||||
|
grace-period code need not worry about POSIX signals.
|
||||||
|
Unfortunately, it has the
|
||||||
|
corresponding disadvantage that workqueues cannot be used until
|
||||||
|
they are initialized, which does not happen until some time after
|
||||||
|
the scheduler spawns the first task.
|
||||||
|
Given that there are parts of the kernel that really do want to
|
||||||
|
execute grace periods during this mid-boot “dead zone”,
|
||||||
|
expedited grace periods must do something else during thie time.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
What they do is to fall back to the old practice of requiring that the
|
||||||
|
requesting task drive the expedited grace period, as was the case
|
||||||
|
before the use of workqueues.
|
||||||
|
However, the requesting task is only required to drive the grace period
|
||||||
|
during the mid-boot dead zone.
|
||||||
|
Before mid-boot, a synchronous grace period is a no-op.
|
||||||
|
Some time after mid-boot, workqueues are used.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Non-expedited non-SRCU synchronous grace periods must also operate
|
||||||
|
normally during mid-boot.
|
||||||
|
This is handled by causing non-expedited grace periods to take the
|
||||||
|
expedited code path during mid-boot.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The current code assumes that there are no POSIX signals during
|
||||||
|
the mid-boot dead zone.
|
||||||
|
However, if an overwhelming need for POSIX signals somehow arises,
|
||||||
|
appropriate adjustments can be made to the expedited stall-warning code.
|
||||||
|
One such adjustment would reinstate the pre-workqueue stall-warning
|
||||||
|
checks, but only during the mid-boot dead zone.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With this refinement, synchronous grace periods can now be used from
|
||||||
|
task context pretty much any time during the life of the kernel.
|
||||||
|
|
||||||
<h3><a name="Summary">
|
<h3><a name="Summary">
|
||||||
Summary</a></h3>
|
Summary</a></h3>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user