Files
DragonOS/docs
LoGin c2ba5d209e refactor(rcu): segment callback queues per CPU (#2222)
* refactor(rcu): segment callback queues per CPU

Replace the globally serialized callback tracker and FIFO with cache-line-aligned per-CPU queues split into done, wait, next-ready, and next segments. Keep raw callback admission allocation-free and restrict its shared work to the local queue plus a coalesced worker kick.

Advance callback generations as whole segments, execute bounded round-robin batches outside RCU locks, and implement rcu_barrier() with per-CPU tail markers that cover queued and executing callbacks. Serialize barrier scans with CPU lifecycle migration while preserving the upstream participating-CPU state as the single hotplug authority.

Add per-CPU callback queue debugfs snapshots and extend RCU selftests for segment transitions, migration, callback requeue, multi-batch floods, all-online-CPU admission, concurrent barriers, and the upstream CPU lifecycle protocol.

Tests: make kernel

Tests: make run-nographic (2 vCPUs)

Tests: /opt/tests/dunitest/bin/normal/rcu_selftest_test (3/3 passed)
Signed-off-by: longjin <longjin@dragonos.org>

* docs(rcu): document segmented callback queues

Explain the per-CPU four-segment callback model, grace-period advancement, bounded execution, barrier markers, CPU lifecycle migration, and concurrency invariants without coupling the design to issue history or implementation details.

Add a matching English translation and register both documents in their respective RCU documentation indexes.

Signed-off-by: longjin <longjin@dragonos.org>

* docs(rcu): clarify callback lifecycle

Update the Chinese and English RCU architecture overviews with the per-CPU segmented callback lifecycle, its ordering boundaries, and the distinction between grace-period waits and callback barriers.

Keep the overview concise and link both languages to the detailed segmented callback queue design.

Signed-off-by: longjin <longjin@dragonos.org>

* style(rcu): format callback imports

Signed-off-by: longjin <longjin@dragonos.org>

* fix(rcu): hand off barriers when worker exits

Wake barrier waiters unconditionally after publishing that the callback worker has stopped. This lets a barrier that observed the old worker state recheck its predicate and take over bounded inline execution instead of sleeping forever with queued markers.

Drain a small per-CPU callback quantum before resuming round-robin selection. This avoids rescanning every possible CPU for each callback in a single-CPU backlog while preserving a strict fairness bound for other CPUs.

Tests: make fmt

Tests: make kernel

Tests: make run-nographic

Tests: dunitest normal/rcu_selftest (3/3 passed)
Signed-off-by: longjin <longjin@dragonos.org>

---------

Signed-off-by: longjin <longjin@dragonos.org>
2026-08-30 01:23:01 +08:00
..
2025-05-23 02:02:48 +08:00
2022-06-17 23:50:40 +08:00