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