Run UDP input on multiple CPU in parallel.
authorbluhm <bluhm@openbsd.org>
Fri, 26 Jul 2024 14:38:20 +0000 (14:38 +0000)
committerbluhm <bluhm@openbsd.org>
Fri, 26 Jul 2024 14:38:20 +0000 (14:38 +0000)
commit59d5251aece7b7afcd5c671d037cac5f0267c605
tree51d61ddc233dfe696aa1ce4c1f8a046a3ab88958
parent3841e2943caa064d34b385811fda774aba6468c9
Run UDP input on multiple CPU in parallel.

The socket layer of UDP has been made fully MP safe.  UDP output
is MP safe for a while.  mvs@ has fixed the missing pieces in socket
splicing recently.  This means that complete UDP stack can be
processed by multiple threads now.  Activate multi processing for
udp_input() when called with IPv4 or IPv6 packets.

Usually IP processing runs on multiple softnet threads with shared
net lock.  From there local packets are queued and processed by one
thread with exclusive net lock.  If the PR_MPINPUT flag is set,
protocol input is called directly from IP input on multiple threads,
with shared net lock and no additional queueing.

tested by Hrvoje Popovski; OK mvs@
sys/netinet/in_proto.c
sys/netinet6/in6_proto.c