git: kernel - Refactor tty_token, fix SMP performance issues
Matthew Dillon
dillon at crater.dragonflybsd.org
Thu Oct 4 19:48:33 PDT 2018
commit 2efb75f3055c1746efc358d68dbc2bf526faaf61
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Thu Oct 4 10:22:35 2018 -0700
kernel - Refactor tty_token, fix SMP performance issues
* Remove most uses of tty_token in favor of per-tty tp->t_token.
This is particularly important for removing bottlenecks related to PTYs,
which are used all over the place. tty_token remains in a few places
managing overall registration and global list manipulation.
* tty structures are now required to be persistent. Implement a sepearate
ttyinit() function. Continue to allow ttyregister() and ttyunregister()
calls, but these no longer presume destruction of the structure.
* Refactor ttymalloc() to take a **tty pointer and interlock allocations.
Allocations are intended to be one-time. ttymalloc() only requires the
tty_token for initial allocations.
* Remove all critical section use that was combined with tty_token and
tp->t_token. Leave only the tokens. The critical sections were
hold-overs going all the way back to pre-SMP days.
* syscons now gets its own token, vga_token. The ISA VGA code and
the framebuffer code also now use this token instead of tty_token.
* The keyboard subsystem now uses kbd_token instead of tty_token.
* A few remaining serial-like devices (snp, nmdm) also get their own
tokens, as well as use the now required tp->t_token.
* Remove use of tty_token in the session management code. This fixes
a niggling performance path since sessions almost universally go
hand-in-hand with fork/exec/exit sequences. Instead we use the
already-existing per-hash session token.
Summary of changes:
sys/bus/isa/vga_isa.c | 4 +-
sys/bus/u4b/serial/usb_serial.c | 119 ++++-----
sys/dev/misc/atkbd/atkbd_isa.c | 8 +-
sys/dev/misc/atkbdc_layer/atkbdc_isa.c | 24 +-
sys/dev/misc/dcons/dcons_os.c | 79 +++---
sys/dev/misc/kbd/kbd.c | 283 +++++++++-----------
sys/dev/misc/nmdm/nmdm.c | 118 +++++----
sys/dev/misc/snp/snp.c | 131 +++++-----
sys/dev/misc/syscons/scvgarndr.c | 8 +-
sys/dev/misc/syscons/scvidctl.c | 159 ++++++------
sys/dev/misc/syscons/syscons.c | 363 ++++++++++++++------------
sys/dev/serial/sio/sio.c | 3 +-
sys/dev/video/fb/bmp/splash_bmp.c | 24 +-
sys/dev/video/fb/fb.c | 36 +--
sys/dev/video/fb/fbreg.h | 16 +-
sys/dev/video/fb/vga.c | 18 +-
sys/kern/kern_proc.c | 6 +-
sys/kern/lwkt_token.c | 2 +
sys/kern/tty.c | 404 ++++++++++++++---------------
sys/kern/tty_cons.c | 2 +
sys/kern/tty_pty.c | 348 +++++++++++++++----------
sys/kern/tty_subr.c | 113 +++-----
sys/net/sl/if_sl.c | 75 +++---
sys/netgraph/tty/ng_tty.c | 86 +++---
sys/netgraph7/bluetooth/drivers/h4/ng_h4.c | 36 +--
sys/netgraph7/tty/ng_tty.c | 101 +++-----
sys/platform/vkernel64/platform/console.c | 36 +--
sys/sys/proc.h | 2 +
sys/sys/thread.h | 2 +
sys/sys/tty.h | 7 +-
30 files changed, 1281 insertions(+), 1332 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/2efb75f3055c1746efc358d68dbc2bf526faaf61
--
DragonFly BSD source repository
More information about the Commits
mailing list