Danilo Poccia - Tecnologia et al.
La latenza del TCP/IP e l'algoritmo di Nagle
Le applicazioni che effettuano tante piccole chiamate sincrone via rete (di tipo request/reply) possono generare un traffico composto a sua volta da piccoli pacchetti. Le performance di tali applicazioni dipendono quindi più dalla latenza introdotta nel processare tali pacchetti che dal massimo throughput gestibile dall'architettura fisica utilizzata.
Nell'effettuare un tuning dello stack TCP/IP è importante in questi casi considerare le implicazioni dell'algoritmo di Nagle (dal nome di John Nagle, autore della RFC 896 dove tale algoritmo è definito).
L'utilizzo di piccoli pacchetti è solitamente ritenuto inefficiente dal punto di vista di chi ottimizza una rete. Ciò è particolarmente vero nei punti di raccordo del traffico IP (es. un Internet backbone) e l'algoritmo di Nagle cerca proprio di scoraggiarne l'uso quando il trasporto è TCP.
Gli stack TCP/IP solitamente implementano in modo parametrico la dimensione massima per cui un pacchetto è ritenuto "piccolo" ed è applicato questo algoritmo: ad esempio impostare tale parametro a 1 equivale a disabilitarne l'uso.
L'algoritmo di Nagle indica che lo stack di chi invia non deve trasmettere il prossimo piccolo pacchetto (come definito in precedenza) se è ancora in attesa di ricevere l'ACK di un piccolo pacchetto già inviato.
Di conseguenza chi invia deve accumulare i dati in spedizione fino a che sia soddisfatta una delle due seguenti condizioni:
- la dimensione dei dati pronti per l'invio ha superato l'MTU
- è stato ricevuto l'ACK per tutti i piccoli pacchetti in sospeso
Un effetto non gradito di questa ottimizzazione è che le applicazioni che inviano continuamente piccoli pacchetti possono osservare una latenza maggiore di quelle che utilizzano pacchetti con dimensione dell'ordine dell'MTU. In tali casi è possibile testare le performance disabilitando l'uso dell'algoritmo (nelle modalità offerta dalle singole piattaforme) e confrontare i risultati ottenuti con la configurazione precedente per verificare se si ricade in una delle casistiche in cui l'algoritmo peggiori le performance complessive.
Posted at 12:13PM mar 31, 2006 by danilop in Internet | Comments[0]


