add garbage collection of unused lists percpu cached items.
authordlg <dlg@openbsd.org>
Fri, 16 Jun 2017 01:55:45 +0000 (01:55 +0000)
committerdlg <dlg@openbsd.org>
Fri, 16 Jun 2017 01:55:45 +0000 (01:55 +0000)
commit338a5c6849299c181ddfaa0bcbb0a7cf20fcfe17
tree7fdc2628913153829869e33fbc07faedeba54606
parent7276a6834fc0308879a4100cde7a600e782f4b7c
add garbage collection of unused lists percpu cached items.

the cpu caches in pools amortise the cost of accessing global
structures by moving lists of items around instead of individual
items. excess lists of items are stored in the global pool struct,
but these idle lists never get returned back to the system for use
elsewhere.

this adds a timestamp to the global idle list, which is updated
when the idle list stops being empty. if the idle list hasn't been
empty for a while, it means the per cpu caches arent using the idle
entries and they can be recovered. timestamping the pages prevents
recovery of a lot of items that may be used again shortly. eg, rx
ring processing and replenishing from rate limited interrupts tends
to allocate and free items in large chunks, which the timestamping
smooths out.

gc'ed lists are returned to the pool pages, which in turn get gc'ed
back to uvm.

ok visa@
sys/kern/subr_pool.c
sys/sys/pool.h