Download raw body.
uvm_swapout_threads() & freed pages
Return the number of freed pages in uvm_swapout_threads(). This is
part of my ongoing work to reduce accesses to global variables inside
the page deamon loop.
ok?
Index: uvm/uvm_glue.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_glue.c,v
diff -u -p -r1.85 uvm_glue.c
--- uvm/uvm_glue.c 8 Oct 2024 02:29:10 -0000 1.85
+++ uvm/uvm_glue.c 20 Oct 2024 09:20:09 -0000
@@ -339,13 +339,13 @@ int swapdebug = 0;
* are swapped... otherwise the longest-sleeping or stopped process
* is swapped, otherwise the longest resident process...
*/
-void
+int
uvm_swapout_threads(void)
{
struct process *pr;
struct proc *p, *slpp;
struct process *outpr;
- int outpri;
+ int free, outpri;
int didswap = 0;
extern int maxslp;
/* XXXCDC: should move off to uvmexp. or uvm., also in uvm_meter */
@@ -355,6 +355,8 @@ uvm_swapout_threads(void)
return;
#endif
+ free = uvmexp.free;
+
/*
* outpr/outpri : stop/sleep process whose most active thread has
* the largest sleeptime < maxslp
@@ -403,8 +405,7 @@ next_process: ;
* if we are real low on memory since we don't gain much by doing
* it.
*/
- if (didswap == 0 && uvmexp.free <= atop(round_page(USPACE)) &&
- outpr != NULL) {
+ if (didswap == 0 && free <= atop(round_page(USPACE)) && outpr != NULL) {
#ifdef DEBUG
if (swapdebug & SDB_SWAPOUT)
printf("swapout_threads: no duds, try procpr %p\n",
@@ -412,6 +413,8 @@ next_process: ;
#endif
pmap_collect(outpr->ps_vmspace->vm_map.pmap);
}
+
+ return (uvmexp.free - free);
}
#endif /* __HAVE_PMAP_COLLECT */
Index: uvm/uvm_glue.h
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_glue.h,v
diff -u -p -r1.9 uvm_glue.h
--- uvm/uvm_glue.h 11 Jul 2014 16:35:40 -0000 1.9
+++ uvm/uvm_glue.h 20 Oct 2024 09:20:09 -0000
@@ -37,7 +37,7 @@
* uvm_glue.h
*/
-void uvm_swapout_threads(void);
+int uvm_swapout_threads(void);
struct vm_page *uvm_atopg(vaddr_t);
uvm_swapout_threads() & freed pages