Performance - belaban/JGroups GitHub Wiki
TCP.tcp_nodelay
This attribute was switched between false
and true
a couple of times in 5.3.x. Currently (5.3.12
and 5.4
), it is false
(default in java.net.Socket
).
When tcp_nodelay
is false, Nagling is enabled. This means that smaller segments are sent only when corresponding ACKs have been received (or a timer goes off). When sending many (small or large) messages, performance is better with tcp_nodelay=false
.
When sending small messages (under segment size, e.g. 1472
bytes), or having only a few senders, performance is better with tcp_nodelay=true
. The best example here is a sender and receiver process in which 1 thread sends and receives requests/responses (e.g. ping-pong). Because latency is crucial, Nagling should be disabled (tcp_nodelay=true
) for better round-trip times.
Because most applications use more than 1 sender thread and send larger messages, the default of false
is warranted.