Enable pool cache on knote pool
authorvisa <visa@openbsd.org>
Wed, 2 Jun 2021 13:56:28 +0000 (13:56 +0000)
committervisa <visa@openbsd.org>
Wed, 2 Jun 2021 13:56:28 +0000 (13:56 +0000)
commit72adf922cc1b5601152b0e7ea8d9edf3884ccf71
tree44f05abfbf344ca1ca07df9c9f291092f9e7d58d
parent444013455c366a32d12e15044132e114dd0b0f14
Enable pool cache on knote pool

Use the pool cache to reduce the overhead of memory management in
function kqueue_register().

When EV_ADD is given, kqueue_register() pre-allocates a knote to avoid
potential sleeping in the middle of the critical section that spans
from knote lookup to insertion. However, the pre-allocation is useless
if the lookup finds a matching knote.

The cost of knote allocation will become significant with kqueue-based
poll(2) and select(2) because the frequency of allocation will increase.
Most of the cost appears to come from the locking inside the pool.
The pool cache amortizes it by using CPU-local caches of free knotes
as buffers.

OK dlg@ mpi@
sys/kern/init_main.c
sys/kern/kern_event.c
sys/sys/event.h