git: kernel - Improve TCP socket handling at high speeds
Matthew Dillon
dillon at crater.dragonflybsd.org
Tue Jul 15 20:36:55 PDT 2014
commit 11b81f5d7090a4c01df8c0e17a07b3a3d89b32be
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Tue Jul 15 20:27:51 2014 -0700
kernel - Improve TCP socket handling at high speeds
* Add M_SOLOCKED to mbuf->m_flags. This flag prevents sbcompress()
from collapsing more data into a mbuf.
* Rewrite sorecvtcp() (NOTE: soreceive() could use similar treatment).
Use M_SOLOCKED to freeze mbufs in the sockbuf with the rcvtok held,
then do the uiomove() loop WITHOUT the rcvtok held, then finalize
the disposal of the mbufs with rcvtok held.
This greatly reduces contention on rcvtok against the netisr threads
when reading large amounts of data at once and reduces cpu overhead
for netisr and user network threads.
* Change the default transmit ssb_lowat from ssb_hiwat / 2 to ssb_hiwat / 4.
The (previous) default maximum socket buffer size was 256KB. The default
lowat reduced the effective TCP transmit window to ~100KB. This can cause
severe buffering issues on GiGE links when multiple TCP streams are being
routed to the same cpu.
With this change the default max send buffer is ~180KB or so.
* Change the default kern.ipc.maxsockbuf from 256KB to 512KB. This
primarily effects auto-sizing of tcp buffers which in turn effects
most TCP connections.
This coupled with the hiwat fix greatly improves transmit throughput.
* Add more debugging info to the tcp inflight code.
Summary of changes:
sys/kern/uipc_sockbuf.c | 9 ++-
sys/kern/uipc_socket.c | 175 ++++++++++++++++++++++++++++++++++--------------
sys/kern/uipc_socket2.c | 2 +-
sys/netinet/tcp_subr.c | 11 +--
sys/sys/mbuf.h | 1 +
sys/sys/sockbuf.h | 2 +-
6 files changed, 142 insertions(+), 58 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/11b81f5d7090a4c01df8c0e17a07b3a3d89b32be
--
DragonFly BSD source repository
More information about the Commits
mailing list