Joseph Galbraith wrote:
If an app is going to send one byte at a time, disabling
the nagle algorithm is _exactly_ the _wrong_ thing to do!
The nagle algorithm exists precisely so that applications can
send one byte at a time and not have sucky performance.
No, it exists to prevent such applications from flooding the network
with a storm of small packets and causing congestion due to the
increased overhead. The loopback interface is not going to run into
this problem so if you insist on sending small blocks of data and want
them to go through fast, you want to turn off nagle.
But any app that does:
send();
send();
.
.
.
send();
recv();
Should not disable the nagel algorithm except in rare (I can't
think of any) circumstances.
This is exactly one such case. The app makes several sends but the
total amount of data is less than one MSS, so nagle will cause delays.
These delays hurt performance, and do not do any good when you are using
the loopback interface.
If the app is sending a lot of data, just broken up into numerous small
sends, then nagle will tend to increase the total throughput by lowering
the overhead of sending numerous packets and should be left on, but in
this case, the app is sending small amounts of data, but needs it to get
there quickly, so it should be turned off.