On 8/06/2018 10:15 am, Gleb Smirnoff wrote: > Author: glebius > Date: Fri Jun 8 00:15:08 2018 > New Revision: 334819 > URL: https://svnweb.freebsd.org/changeset/base/334819 > > Log: > UMA memory debugging enabled with INVARIANTS consists of two things: > trashing freed memory and checking that allocated memory is properly > trashed, and also of keeping a bitset of freed items. Trashing/checking > creates a lot of CPU cache poisoning, while keeping debugging bitsets > consistent creates a lot of contention on UMA zone lock(s). The performance > difference between INVARIANTS kernel and normal one is mostly attributed > to UMA debugging, rather than to all KASSERT checks in the kernel. > > Add loader tunable vm.debug.divisor that allows either to turn off UMA
Is 'sample interval' a standard/common enough term for this kind of mechanism to name the sysctl with it rather than the implementation? Or 'sample frequency' > debugging completely, or turn it on only for a fraction of allocations, > while still running all KASSERTs in kernel. That allows to run INVARIANTS > kernels in production environments without reducing load by orders of > magnitude, but still doing useful extra checks. > > Default value is 1, meaning debug every allocation. Value of 0 would > disable UMA debugging completely. Values above 1 enable debugging only > for every N-th item. It isn't possible to strictly follow the number, > but still amount of debugging is reduced roughly by (N-1)/N percent. > > Sponsored by: Netflix > Differential Revision: https://reviews.freebsd.org/D15199 > > +static u_int dbg_divisor = 1; > +SYSCTL_UINT(_vm_debug, OID_AUTO, divisor, > + CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &dbg_divisor, 0, > + "Debug & thrash every this item in memory allocator"); Might "Nth" be better (more explicit) here ---^ ? > +static counter_u64_t uma_dbg_cnt = EARLY_COUNTER; > +static counter_u64_t uma_skip_cnt = EARLY_COUNTER; > +SYSCTL_COUNTER_U64(_vm_debug, OID_AUTO, trashed, CTLFLAG_RD, > + &uma_dbg_cnt, "memory items debugged"); > +SYSCTL_COUNTER_U64(_vm_debug, OID_AUTO, skipped, CTLFLAG_RD, > + &uma_skip_cnt, "memory items skipped, not debugged"); > #endif _______________________________________________ svn-src-head@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"