-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Am Mon, 22 Oct 2018 17:04:05 +0000 (UTC) Mark Johnston <ma...@freebsd.org> schrieb:
> Author: markj > Date: Mon Oct 22 17:04:04 2018 > New Revision: 339601 > URL: https://svnweb.freebsd.org/changeset/base/339601 > > Log: > Swap in processes unless there's a global memory shortage. > > On NUMA systems, we would not swap in processes unless all domains > had some free pages. This is too conservative in general. Instead, > permit swapins so long as at least one domain has free pages, and add > a kernel stack NUMA policy which ensures that we will try to allocate > kernel stack pages from any domain. > > Reported and tested by: pho, Jan Bramkamp <cr...@bultmann.eu> > Reviewed by: alc, kib > Discussed with: jeff > MFC after: 3 days > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D17304 > > Modified: > head/sys/vm/vm_glue.c > head/sys/vm/vm_swapout.c > > Modified: head/sys/vm/vm_glue.c > ============================================================================== > --- head/sys/vm/vm_glue.c Mon Oct 22 16:21:50 2018 (r339600) > +++ head/sys/vm/vm_glue.c Mon Oct 22 17:04:04 2018 (r339601) > @@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$"); > > #include <sys/param.h> > #include <sys/systm.h> > +#include <sys/domainset.h> > #include <sys/limits.h> > #include <sys/lock.h> > #include <sys/malloc.h> > @@ -298,7 +299,7 @@ vm_sync_icache(vm_map_t map, vm_offset_t va, vm_offset > > struct kstack_cache_entry *kstack_cache; > static int kstack_cache_size = 128; > -static int kstacks; > +static int kstacks, kstack_domain_iter; > static struct mtx kstack_cache_mtx; > MTX_SYSINIT(kstack_cache, &kstack_cache_mtx, "kstkch", MTX_DEF); > > @@ -367,6 +368,17 @@ vm_thread_new(struct thread *td, int pages) > printf("vm_thread_new: kstack allocation failed\n"); > vm_object_deallocate(ksobj); > return (0); > + } > + > + /* > + * Ensure that kstack objects can draw pages from any memory > + * domain. Otherwise a local memory shortage can block a process > + * swap-in. > + */ > + if (vm_ndomains > 1) { > + ksobj->domain.dr_policy = DOMAINSET_RR(); > + ksobj->domain.dr_iter = atomic_fetchadd_int(&kstack_domain_iter, > + 1); > } > > atomic_add_int(&kstacks, 1); > > Modified: head/sys/vm/vm_swapout.c > ============================================================================== > --- head/sys/vm/vm_swapout.c Mon Oct 22 16:21:50 2018 (r339600) > +++ head/sys/vm/vm_swapout.c Mon Oct 22 17:04:04 2018 (r339601) > @@ -742,7 +742,8 @@ swapper_selector(bool wkilled_only) > /* > * Limit swapper to swap in one non-WKILLED process in MAXSLP/2 > * interval, assuming that there is: > - * - no memory shortage; > + * - there exists at least one domain that is not suffering from a shortage > of > + * free memory; > * - no parallel swap-ins; > * - no other swap-ins in the current SWAPIN_INTERVAL. > */ > @@ -750,7 +751,7 @@ static bool > swapper_wkilled_only(void) > { > > - return (vm_page_count_min() || swap_inprogress > 0 || > + return (vm_page_count_min_set(&all_domains) || swap_inprogress > 0 || > (u_int)(ticks - last_swapin) < SWAPIN_INTERVAL); > } > > _______________________________________________ > svn-src-h...@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org" This commit breaks CURRENT buildkernel: [...] - --- vm_glue.o --- /usr/src/sys/vm/vm_glue.c:380:17: error: no member named 'dr_iter' in 'struct domainset_ref' Kind regards, oh - -- O. Hartmann Ich widerspreche der Nutzung oder Übermittlung meiner Daten für Werbezwecke oder für die Markt- oder Meinungsforschung (§ 28 Abs. 4 BDSG). -----BEGIN PGP SIGNATURE----- iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCW84FwwAKCRDS528fyFhY lMYGAf9h+vf8AI9JLGVUhUwwblt8GjAvrqRAcDw1Q6NG/I5xX8npX4OrXmrlzmpf 8VZ7n9fnnlZAD7e3/6MvgkfNMjPGAf96XTFAiTMSXTpQ84N5g2G03L5kAZaMaRKS 0mViZJlgQnjQaoV7089M0httbwXhz3oqGW+L0ZoZL5O5Rg9mDK/Y =0PHK -----END PGP SIGNATURE----- _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"