Home | History | Annotate | Download | only in uvm
History log of /src/sys/uvm/uvm_pdpolicy_clockpro.c
RevisionDateAuthorComments
 1.27  12-Apr-2022  andvar s/stablize/stabilize/
 1.26  17-May-2020  ad Start trying to reduce cache misses on vm_page during fault processing.

- Make PGO_LOCKED getpages imply PGO_NOBUSY and remove the latter. Mark
pages busy only when there's actually I/O to do.

- When doing COW on a uvm_object, don't mess with neighbouring pages. In
all likelyhood they're already entered.

- Don't mess with neighbouring VAs that have existing mappings as replacing
those mappings with same can be quite costly.

- Don't enqueue pages for neighbour faults unless not enqueued already, and
don't activate centre pages unless uvmpdpol says its useful.

Also:

- Make PGO_LOCKED getpages on UAOs work more like vnodes: do gang lookup in
the radix tree, and don't allocate new pages.

- Fix many assertion failures around faults/loans with tmpfs.
 1.25  10-Apr-2020  tsutsui Update a link to "CLOCK-Pro" paper.
 1.24  14-Mar-2020  ad branches: 1.24.2;
uvm_pdpolicy: Require a write lock on the object only for dequeue.
No sense in requiring that for enqueue/activate/deactivate.
 1.23  30-Jan-2020  ad uvmpdpol_estimatepageable(): Don't take any locks here. This can be called
from DDB, and in any case the numbers are stale the instant the lock is
dropped, so it just doesn't matter.
 1.22  31-Dec-2019  ad branches: 1.22.2;
- 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.
 1.21  31-Dec-2019  ad Rename uvm_page_locked_p() -> uvm_page_owner_locked_p()
 1.20  30-Dec-2019  ad pagedaemon:

- Use marker pages to keep place in the queue when scanning, rather than
relying on assumptions.

- In uvmpdpol_balancequeue(), lock the object once instead of twice.

- When draining pools, the situation is getting desperate, but try to avoid
saturating the system with xcall, lock and interrupt activity by sleeping
for 1 clock tick if being continually awoken and all pools have been
cycled through at least once.

- Pause & resume the freelist cache during pool draining.

PR kern/54209: NetBSD 8 large memory performance extremely low
PR kern/54210: NetBSD-8 processes presumably not exiting
PR kern/54727: writing a large file causes unreasonable system behaviour
 1.19  27-Dec-2019  ad vm_page: Now that listq is gone, give the pagedaemon its own private
TAILQ_ENTRY, so that update of page replacement state can be made
asynchronous/lazy. No functional change.
 1.18  13-Dec-2019  ad Break the global uvm_pageqlock into a per-page identity lock and a private
lock for use of the pagedaemon policy code. Discussed on tech-kern.

PR kern/54209: NetBSD 8 large memory performance extremely low
PR kern/54210: NetBSD-8 processes presumably not exiting
PR kern/54727: writing a large file causes unreasonable system behaviour
 1.17  20-Jun-2011  yamt branches: 1.17.54;
band-aid fix after the merge of rmind-uvmplock branch.
 1.16  05-Feb-2011  yamt branches: 1.16.2;
pageobj: remove a wrong assertion.
 1.15  04-Jun-2008  ad branches: 1.15.16; 1.15.20; 1.15.26; 1.15.28;
vm_page: put TAILQ_ENTRY into a union with LIST_ENTRY, so we can use both.
 1.14  22-Mar-2008  bjs branches: 1.14.2; 1.14.4; 1.14.6;
Allow this to compile if LISTQ is undefined:

- Put '#ifdef LISTQ' ... '#endif' pairs around pageq_insert_head()
and clockpro_insert_head().

- Add missing argument to printf statement.
 1.13  07-Feb-2008  yamt branches: 1.13.6;
nonresident_rotate: avoid too long loops which can happen on some workloads.
 1.12  18-Jan-2008  yamt push pmap_clear_reference calls into pdpolicy code, where reference bits
actually matter.
 1.11  13-Jan-2008  yamt nonresident_rotate: micro optimization
 1.10  02-Jan-2008  ad Merge vmlocking2 to head.
 1.9  01-Aug-2007  yamt branches: 1.9.4; 1.9.10; 1.9.12; 1.9.16; 1.9.20;
use separate nreslookup evcnt for obj and anon pages.
 1.8  22-Feb-2007  thorpej branches: 1.8.4; 1.8.12;
TRUE -> true, FALSE -> false
 1.7  21-Feb-2007  thorpej Replace the Mach-derived boolean_t type with the C99 bool type. A
future commit will replace use of TRUE and FALSE with true and false.
 1.6  28-Nov-2006  yamt branches: 1.6.4; 1.6.6;
uvmpdpol_pagedequeue: clear PQ_INITIALREF.
otherwise, dequeue/enqueue cycles (eg. page loaning) can cause
an assertion failure in clockpro_pageenqueue.
 1.5  16-Nov-2006  christos __unused removal on arguments; approved by core.
 1.4  12-Oct-2006  yamt remove unnecessary #include of vnode.h.
 1.3  09-Oct-2006  yamt fix some warnings in the case of PDSIM.
 1.2  15-Sep-2006  yamt branches: 1.2.2;
merge yamt-pdpolicy branch.
- separate page replacement policy from the rest of kernel
- implement an alternative replacement policy
 1.1  06-Mar-2006  yamt branches: 1.1.2; 1.1.6;
file uvm_pdpolicy_clockpro.c was initially added on branch yamt-pdpolicy.
 1.1.6.2  12-Jan-2007  ad Sync with head.
 1.1.6.1  18-Nov-2006  ad Sync with head.
 1.1.2.11  15-Sep-2006  yamt make UVM_KICK_PDAEMON() a real function and stop including
uvm_pdpolicy.h from uvm.h. this also fixes build of pmap(1).
 1.1.2.10  24-Mar-2006  yamt get rid of bootstrap code from frequently called path.
 1.1.2.9  24-Mar-2006  yamt separate "nresrecord" statistics for obj and anon.
 1.1.2.8  21-Mar-2006  yamt add a sysctl knob to adjust cold target.
 1.1.2.7  18-Mar-2006  yamt reduce BUCKETSIZE to make sizeof(struct bucket) a power of two.
 1.1.2.6  10-Mar-2006  yamt reduce unnecessary c99'ism.
 1.1.2.5  08-Mar-2006  yamt some comments.
 1.1.2.4  08-Mar-2006  yamt add a statistic.
 1.1.2.3  08-Mar-2006  yamt remove unnecessary ";".
 1.1.2.2  07-Mar-2006  yamt simplify #ifdef a little.
 1.1.2.1  06-Mar-2006  yamt an experimental implementation of CLOCK-Pro.
 1.2.2.2  10-Dec-2006  yamt sync with head.
 1.2.2.1  22-Oct-2006  yamt sync with head
 1.6.6.1  27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.6.4.7  24-Mar-2008  yamt sync with head.
 1.6.4.6  11-Feb-2008  yamt sync with head.
 1.6.4.5  21-Jan-2008  yamt sync with head
 1.6.4.4  03-Sep-2007  yamt sync with head.
 1.6.4.3  26-Feb-2007  yamt sync with head.
 1.6.4.2  30-Dec-2006  yamt sync with head.
 1.6.4.1  28-Nov-2006  yamt file uvm_pdpolicy_clockpro.c was added on branch yamt-lazymbuf on 2006-12-30 20:51:05 +0000
 1.8.12.1  15-Aug-2007  skrll Sync with HEAD.
 1.8.4.2  20-Aug-2007  ad Sync with HEAD.
 1.8.4.1  13-Mar-2007  ad Pull in the initial set of changes for the vmlocking branch.
 1.9.20.2  01-Aug-2007  yamt use separate nreslookup evcnt for obj and anon pages.
 1.9.20.1  01-Aug-2007  yamt file uvm_pdpolicy_clockpro.c was added on branch matt-mips64 on 2007-08-01 14:49:56 +0000
 1.9.16.2  19-Jan-2008  bouyer Sync with HEAD
 1.9.16.1  02-Jan-2008  bouyer Sync with HEAD
 1.9.12.1  04-Dec-2007  ad Pull the vmlocking changes into a new branch.
 1.9.10.1  18-Feb-2008  mjf Sync with HEAD.
 1.9.4.2  23-Mar-2008  matt sync with HEAD
 1.9.4.1  09-Jan-2008  matt sync with HEAD
 1.13.6.2  05-Jun-2008  mjf Sync with HEAD.

Also fix build.
 1.13.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.14.6.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.14.4.1  04-May-2009  yamt sync with head.
 1.14.2.1  17-Jun-2008  yamt sync with head.
 1.15.28.1  08-Feb-2011  bouyer Sync with HEAD
 1.15.26.1  06-Jun-2011  jruoho Sync with HEAD.
 1.15.20.1  05-Mar-2011  rmind sync with head
 1.15.16.1  09-Feb-2012  matt Major changes to uvm.
Support multiple collections (groups) of free pages and run the page
reclaimation algorithm on each group independently.
 1.16.2.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.17.54.2  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.17.54.1  08-Apr-2020  martin Merge changes from current as of 20200406
 1.22.2.1  29-Feb-2020  ad Sync with head.
 1.24.2.1  20-Apr-2020  bouyer Sync with HEAD

RSS XML Feed