Job Snijders, sviluppatore esperto di OpenBSD, presidente di uno dei comitati dell'IETF (Internet Engineering Task Force), autore di 11 RFC relative al routing e RPKI, e creatore di IRRd (Internet Routing Registry Daemon), ha pubblicato un insieme di patch per OpenBSD che aggiungono un nuovo parametro sysctl "net.inet.tcp.nodelay" per disabilitare l'algoritmo di Nagle a livello di sistema. Questo parametro solleva gli sviluppatori di applicazioni dall'impostare il flag TCP_NODELAY per i singoli socket.
L'algoritmo di Nagle è utilizzato per aggregare piccoli messaggi con l'obiettivo di ridurre il traffico. L'algoritmo sospende l'invio di nuovi segmenti TCP fino a quando non viene ricevuta una conferma per i dati precedentemente inviati o fino al verificarsi di un timeout. Ad esempio, senza l'aggregazione, l'invio di 1 byte comporta l'invio di altri 40 byte con le intestazioni TCP e IP del pacchetto, mentre con l'algoritmo di Nagle, i messaggi inviati prima dell'arrivo della conferma da parte del lato remoto vengono accumulati e inviati in un unico pacchetto. A causa dell'ottimizzazione "delayed ACK", che ritarda l'invio dei pacchetti ACK, il segnale attraverso i pacchetti di conferma in pratica non funziona, e l'invio dei messaggi accumulati avviene al verificarsi di un timeout.
Snijders ritiene che, nelle attuali realtà, l'algoritmo di Nagle, sviluppato in un'epoca in cui diversi utenti competevano per una larghezza di banda di 1200 baud, sia obsoleto e nelle reti ad alta velocità porti più danni che benefici. Recentemente, anche Marc Brooker di Amazon Web Services (AWS) ha espresso una posizione simile. I motivi a favore della disabilitazione dell'algoritmo di Nagle per impostazione predefinita possono essere trovati in un articolo pubblicato pochi giorni fa.
Per disabilitare l'algoritmo di Nagle esiste l'opzione TCP_NODELAY, che può essere impostata per singoli socket di rete. La modalità TCP_NODELAY è stata a lungo attivata in molte applicazioni di OpenBSD, tra cui openssh, httpd, iscsid, relayd, bgpd e unwind, e, secondo Snijders, è giunto il momento di fornire la possibilità di attivarla per tutti i socket TCP a livello di sistema. Snijders propone anche di discutere l'opzione di attivare TCP_NODELAY per impostazione predefinita e di considerare l'algoritmo di Nagle come un'opzione separata attivabile.
Fonte: opennet.ru
