Index: sys/vm/uma_core.c =================================================================== --- sys/vm/uma_core.c +++ sys/vm/uma_core.c @@ -361,6 +361,12 @@ SYSCTL_INT(_vm, OID_AUTO, zone_warnings, CTLFLAG_RWTUN, &zone_warnings, 0, "Warn when UMA zones becomes full"); +static int multipage_slabs = 1; +TUNABLE_INT("vm.multipage_slabs", &multipage_slabs); +SYSCTL_INT(_vm, OID_AUTO, multipage_slabs, + CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &multipage_slabs, 0, + "UMA may choose larger slab sizes for better efficiency"); + /* * Select the slab zone for an offpage slab with the given maximum item count. */ @@ -1989,7 +1995,7 @@ break; } - if (kl.eff >= UMA_MIN_EFF || + if (kl.eff >= UMA_MIN_EFF || !multipage_slabs || slabsize >= SLAB_MAX_SETSIZE * rsize || (keg->uk_flags & (UMA_ZONE_PCPU | UMA_ZONE_CONTIG)) != 0) break;