Set the default for UDPRcvBuf and UDPSndBuf to 1M.
authorEtienne Dechamps <etienne@edechamps.fr>
Sun, 15 Mar 2015 17:50:53 +0000 (17:50 +0000)
committerEtienne Dechamps <etienne@edechamps.fr>
Sun, 15 Mar 2015 18:04:55 +0000 (18:04 +0000)
commit94f49a163aa570ea272bf3bbd7734187098d88b7
treec91434ff6f9ac4c74992d19fde6c58b95a75b44a
parent6568cffd52d4803effaf52a9bb9c98d69cf7922a
Set the default for UDPRcvBuf and UDPSndBuf to 1M.

It may not be obvious, but due to the way tinc operates (single-threaded
control loop with no intermediate packet buffer), UDP send and receive
buffers can have a massive impact on performance. It is therefore of
paramount importance that the buffers be large enough to prevent packet
drops that could occur while tinc is processing a packet.

Leaving that value to the OS default could be reasonable if we weren't
relying on it so much. Instead, this makes performance somewhat
unpredictable.

In practice, the worst case scenario occurs on Windows, where Microsoft
had the brillant idea of making the buffers 8K in size by default, no
matter what the link speed is. Considering that 8K flies past in a
matter of microseconds on >1G links, this is extremely inappropriate. On
these systems, changing the buffer size to 1M results in *obscene*
raw throughput improvements; I have observed a 10X jump from 40 Mbit/s
to 400 Mbit/s on my system.

In this commit, we stop trusting the OS to get this right and we use a
fixed 1M value instead, which should be enough for <=1G links.
doc/tinc.conf.5.in
doc/tinc.texi
src/net_setup.c
src/net_socket.c