git: kernel - Remove SMP bottlenecks on uidinfo, descriptors, and lockf
Matthew Dillon
dillon at crater.dragonflybsd.org
Sat Apr 21 17:50:38 PDT 2018
commit d629916367683a6eed53be1506f361d512724496
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sat Apr 21 17:30:42 2018 -0700
kernel - Remove SMP bottlenecks on uidinfo, descriptors, and lockf
* Use an eventcounter and the per-thread fd cache to fix
bottlenecks in checkfdclosed(). This will work well for
the vast majority of applications and test benches.
* Batch holdfp*() operations on kqueue collections when implementing
poll() and select(). This significant improves performance.
Full scaling not yet achieved, however.
* Increase copyin item batching from 8 to 32 for select() and poll().
* Give the uidinfo structure a pcpu array to hold the posixlocks
and openfiles count fields, with a rollup contained in the uidinfo
structure itself.
This removes numerous global bottlenecks related to open(),
close(), dup*(), and lockf operations (posixlocks count).
ui_openfiles will force a rollup on limit reached to be sure
that the limit was actually reached. ui_posixlocks stays fairly
loose. Each cpu rolls up generally only when the pcpu count exceeds
+32 or goes below -32.
* Give the proc structure a pcpu array for the same counts, in order
to properly support seteuid() and such.
* Replace P_ADVLOCK with a char field proc->p_advlock_flag, and
remove token operations around the field.
Summary of changes:
sys/kern/kern_descrip.c | 149 ++++++++++++++++++++++++-----------
sys/kern/kern_event.c | 198 ++++++++++++++++++++++++++++++++++++-----------
sys/kern/kern_exit.c | 3 +-
sys/kern/kern_fork.c | 2 +
sys/kern/kern_lockf.c | 44 +++++++----
sys/kern/kern_resource.c | 6 +-
sys/kern/sys_generic.c | 17 ++--
sys/sys/event.h | 3 +-
sys/sys/eventvar.h | 2 +-
sys/sys/file.h | 3 +-
sys/sys/filedesc.h | 2 +
sys/sys/proc.h | 8 +-
sys/sys/resourcevar.h | 19 ++++-
13 files changed, 334 insertions(+), 122 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/d629916367683a6eed53be1506f361d512724496
--
DragonFly BSD source repository
More information about the Commits
mailing list