Index | Thread | Search

From:
Martin Pieuchot <mpi@grenadille.net>
Subject:
uvm_swapout_threads() & freed pages
To:
tech@openbsd.org
Date:
Sun, 20 Oct 2024 11:25:41 +0200

Download raw body.

Thread
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);