Date: Thu, 30 Nov 2017 09:42:40 -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: Re: small patch for pageout. Comments? Message-ID: <20171130174240.GB811@mcvoy.com> In-Reply-To: <20171130173424.GA811@mcvoy.com> References: <20171130173424.GA811@mcvoy.com>
next in thread | previous in thread | raw e-mail | index | archive | help
https://reviews.freebsd.org/D13308 On Thu, Nov 30, 2017 at 09:34:24AM -0800, Larry McVoy wrote: > 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 { > /* -- --- Larry McVoy lm at mcvoy.com http://www.mcvoy.com/lm
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171130174240.GB811>
