Spliced TCP sockets become faster when the output part is running
authorbluhm <bluhm@openbsd.org>
Thu, 25 Aug 2016 14:13:19 +0000 (14:13 +0000)
committerbluhm <bluhm@openbsd.org>
Thu, 25 Aug 2016 14:13:19 +0000 (14:13 +0000)
commit1c3052b558828d42be01abfa06eb39d0c7586dff
tree6fbda5ca9c4501840f7454e99365eedc9106a300
parent5f0bfc4311544d6042e3fc34335e653cef9ba414
Spliced TCP sockets become faster when the output part is running
as its own task thread.  This is inspired by userland copy where a
process also has to go through the scheduler.  This gives the socket
buffer a chance to be filled up and tcp_output() is called less
often and with bigger chunks.
When two kernel tasks share all the workload, the current scheduler
implementation will hang userland processes on single cpu machines.
As a workaround put a yield() into the splicing thread after each
task execution.  This reduces the number of calls of tcp_output()
even more.
OK tedu@ mpi@
sys/kern/uipc_socket.c
sys/sys/socketvar.h