Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Nov 2017 09:34:24 -0800
From:      Larry McVoy <lm@mcvoy.com>
To:        "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org>, scottl@netflix.com, kbowling@llnw.com, gallatin@netflix.com
Subject:   small patch for pageout. Comments?
Message-ID:  <20171130173424.GA811@mcvoy.com>

next in thread | raw e-mail | index | archive | help
In a recent numa meeting that Scott called, Jeff suggested a small
patch to the pageout daemon (included below).

It's rather dramatic the difference it makes for me.  If I arrange to
thrash the crap out of memory, without this patch the kernel is so 
borked with all the processes in disk wait that I can't kill them,
I can't reboot, my only option is to power off.

With the patch there is still some borkage, the kernel is randomly 
killing processes because of out of mem, it should kill one of my
processes that is causing the problem but it doesn't, it killed 
random stuff like dhclient, getty (logged me out), etc.

But the system is responsive.

What the patch does is say "if we have more than one core, don't sleep
in pageout, just keep running until we freed enough mem".  

Comments?

--lm

diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 4ecae5ad5fd..f59a09e96e2 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -1815,10 +1815,18 @@ vm_pageout_worker(void *arg)
 			 * (page reclamation) scan, then increase the level
 			 * and scan again now.  Otherwise, sleep a bit and
 			 * try again later.
+			 * LM: per discussions with the numa team, don't
+			 * sleep if we have at least 2 cpus, just keep
+			 * scanning.  This makes a HUGE difference when
+			 * the system is thrashing on memory, it's the 
+			 * difference between usable and borked.
 			 */
 			mtx_unlock(&vm_page_queue_free_mtx);
-			if (pass >= 1)
-				pause("psleep", hz / VM_INACT_SCAN_RATE);
+			if (pass >= 1) {
+				if (mp_ncpus < 2) {
+					pause("psleep", hz /VM_INACT_SCAN_RATE);
+				}
+			}
 			pass++;
 		} else {
 			/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171130173424.GA811>