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.