Up to [cvs.NetBSD.org] / src / sys / uvm
Request diff between arbitrary revisions
Default branch: MAIN
Current tag: ad-namecache-base
Revision 1.218 / (download) - annotate - [select for diffs], Tue Dec 31 22:42:51 2019 UTC (4 years, 2 months ago) by ad
Branch: MAIN
CVS Tags: ad-namecache-base
Branch point for: ad-namecache
Changes since 1.217: +2 -1
lines
Diff to previous 1.217 (colored)
- Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar. - Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.