Calculate inet PCB SIP hash without table mutex.
authorbluhm <bluhm@openbsd.org>
Sat, 24 Jun 2023 20:54:46 +0000 (20:54 +0000)
committerbluhm <bluhm@openbsd.org>
Sat, 24 Jun 2023 20:54:46 +0000 (20:54 +0000)
commit8bde4b774c473788f83186e3c93d69e4b5ef7143
tree90b71876f201028cb4cfe22018e02f6557749c23
parent9c8757ead552ee991423aa4963be509fe4098e91
Calculate inet PCB SIP hash without table mutex.

Goal is to run UDP input in parallel.  Btrace kstack analysis shows
that SIP hash for PCB lookup is quite expensive.  When running in
parallel, there is also lock contention on the PCB table mutex.

It results in better performance to calculate the hash value before
taking the mutex.  The hash secret has to be constant as hash
calculation must not depend on values protected by the table mutex.
Do not reseed anymore when hash table gets resized.

Analysis also shows that asserting a rw_lock while holding a mutex
is a bit expensive.  Just remove the netlock assert.

OK dlg@ mvs@
sys/netinet/in_pcb.c
sys/netinet/in_pcb.h
sys/netinet6/in6_pcb.c