Source-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: src/sys
Module Name: src
Committed By: ad
Date: Tue Dec 31 22:42:51 UTC 2019
Modified Files:
src/sys/kern: kern_idle.c
src/sys/miscfs/genfs: genfs_io.c
src/sys/ufs/lfs: lfs_pages.c lfs_vfsops.c ulfs_inode.c
src/sys/ufs/ufs: ufs_inode.c
src/sys/uvm: uvm.h uvm_anon.c uvm_aobj.c uvm_bio.c uvm_extern.h
uvm_fault.c uvm_glue.c uvm_loan.c uvm_map.c uvm_object.c uvm_page.c
uvm_page.h uvm_pager.c uvm_pdaemon.c uvm_pdpolicy.h
uvm_pdpolicy_clock.c uvm_pdpolicy_clockpro.c
Log Message:
- 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.
To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/kern/kern_idle.c
cvs rdiff -u -r1.82 -r1.83 src/sys/miscfs/genfs/genfs_io.c
cvs rdiff -u -r1.18 -r1.19 src/sys/ufs/lfs/lfs_pages.c
cvs rdiff -u -r1.366 -r1.367 src/sys/ufs/lfs/lfs_vfsops.c
cvs rdiff -u -r1.22 -r1.23 src/sys/ufs/lfs/ulfs_inode.c
cvs rdiff -u -r1.106 -r1.107 src/sys/ufs/ufs/ufs_inode.c
cvs rdiff -u -r1.72 -r1.73 src/sys/uvm/uvm.h
cvs rdiff -u -r1.69 -r1.70 src/sys/uvm/uvm_anon.c
cvs rdiff -u -r1.132 -r1.133 src/sys/uvm/uvm_aobj.c
cvs rdiff -u -r1.101 -r1.102 src/sys/uvm/uvm_bio.c
cvs rdiff -u -r1.217 -r1.218 src/sys/uvm/uvm_extern.h
cvs rdiff -u -r1.213 -r1.214 src/sys/uvm/uvm_fault.c
cvs rdiff -u -r1.174 -r1.175 src/sys/uvm/uvm_glue.c
cvs rdiff -u -r1.92 -r1.93 src/sys/uvm/uvm_loan.c src/sys/uvm/uvm_page.h
cvs rdiff -u -r1.368 -r1.369 src/sys/uvm/uvm_map.c
cvs rdiff -u -r1.18 -r1.19 src/sys/uvm/uvm_object.c
cvs rdiff -u -r1.219 -r1.220 src/sys/uvm/uvm_page.c
cvs rdiff -u -r1.118 -r1.119 src/sys/uvm/uvm_pager.c
cvs rdiff -u -r1.121 -r1.122 src/sys/uvm/uvm_pdaemon.c
cvs rdiff -u -r1.5 -r1.6 src/sys/uvm/uvm_pdpolicy.h
cvs rdiff -u -r1.27 -r1.28 src/sys/uvm/uvm_pdpolicy_clock.c
cvs rdiff -u -r1.21 -r1.22 src/sys/uvm/uvm_pdpolicy_clockpro.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Home |
Main Index |
Thread Index |
Old Index