svn commit: r331753 - user/jeff/numa/sys/vm

Jeff Roberson jeff at FreeBSD.org
Fri Mar 30 01:31:07 UTC 2018


Author: jeff
Date: Fri Mar 30 01:31:06 2018
New Revision: 331753
URL: https://svnweb.freebsd.org/changeset/base/331753

Log:
  Fix a couple of pageout control issues.  Reset pass after we meet our target.  Don't sleep if we
  met the target.
  
  Don't touch unnecessary pages in vm_pageout_free_pages().  Cache misses to page structures are
  the biggest cost of the pageout daemon.

Modified:
  user/jeff/numa/sys/vm/vm_pageout.c

Modified: user/jeff/numa/sys/vm/vm_pageout.c
==============================================================================
--- user/jeff/numa/sys/vm/vm_pageout.c	Fri Mar 30 01:22:47 2018	(r331752)
+++ user/jeff/numa/sys/vm/vm_pageout.c	Fri Mar 30 01:31:06 2018	(r331753)
@@ -1108,9 +1108,12 @@ vm_pageout_free_pages(vm_object_t object, vm_page_t m,
 		p = vm_page_next(m);
 	vm_page_free(m);
 	/* Iterate through the block range and free compatible pages. */
-	/* XXX Fix cache miss on last page. */
-	for (m = p; m != NULL && m->pindex < start + pcount; m = p) {
-		p = TAILQ_NEXT(m, listq);
+	for (m = p; m != NULL; m = p) {
+		/* Don't cache miss for the next page after the tail. */
+		if (m->pindex < start + pcount)
+			p = TAILQ_NEXT(m, listq);
+		else
+			p = NULL;
 		vm_page_change_lock(m, mtxp);
 		if (vm_page_held(m) || vm_page_busied(m) ||
 		    m->queue != PQ_INACTIVE)
@@ -1869,7 +1872,7 @@ vm_pageout_worker(void *arg)
 			 * scan, then sleep a bit and try again.
 			 */
 			vm_domain_pageout_unlock(vmd);
-			if (pass > 1)
+			if (pass > 1 && !target_met)
 				pause("pwait", hz / VM_INACT_SCAN_RATE);
 		} else {
 			/*
@@ -1899,6 +1902,8 @@ vm_pageout_worker(void *arg)
 		 */
 		if (!target_met)
 			pass++;
+		else if (shortage)
+			pass = 1;
 	}
 }
 


More information about the svn-src-user mailing list