La risoluzione dei problemi di una rete lenta o di perdite di pacchetti di rete può essere complicata. Oltre a una comunicazione di rete più lenta, potrebbero essere osservati altri sintomi, come :
- I tentativi di connessione a un server con ssh e/o sftp provocano timeout o una risposta ritardata.
- Quando il carico di rete aumenta, si osserva un numero elevato di ritrasmissioni di rete.
- Potrebbe esserci un numero elevato di pacchetti persi nell'output del comando "ifconfig eth[x]".
Alcuni altri sintomi includono anche:
– L'output del comando:netstat -s mostra valori crescenti per le seguenti statistiche :(esegui più volte 'netstat -s'):
13336 packets pruned from receive queue because of socket buffer overrun 516 times the listen queue of a socket overflowed 516 SYNs to LISTEN sockets ignored 2040077 packets collapsed in receive queue due to low socket buffer TCPBacklogDrop: 744165
– L'output del comando:ethtool -S eth[x] mostra valori crescenti rispetto al contatore:“rx_fw_discards”:
rx_fw_discards: 4493
Cause delle prestazioni di rete più lente
Potrebbero esserci diversi motivi per prestazioni di rete più lente. Ma alcune delle possibili cause sono:
- La rete è già molto carica, fino alla sua capacità massima e c'è congestione.
- I buffer di ricezione configurati non sono sufficienti per il carico di rete.
- Ci sono cali di pacchetti a causa di errori a livello fisico.
Risoluzione dei problemi di prestazioni di rete lente
1. Controlla il throughput della rete utilizzando lo strumento iperf e scopri se l'utilizzo della larghezza di banda della rete si sta avvicinando al throughput massimo osservato.
Come utilizzare Iperf per testare le prestazioni di rete in Linux2. Impostare i valori per i parametri di rete in modo appropriato per supportare la massima velocità di trasmissione della rete. Trova il valore del prodotto di ritardo della larghezza di banda (BDP) e imposta la dimensione del buffer di rete di conseguenza. Viene calcolato come il prodotto della larghezza di banda del collegamento e del tempo di andata e ritorno.
Ad esempio:
– Per una rete da 1 Gb/s e un tempo di viaggio di andata e ritorno di 0,1 s, il BDP=(0,1 * 10^9)/8. Su tale rete, imposta i seguenti valori di parametro nel file:/etc/sysctl.conf
# vi /etc/sysctl.conf net.core.rmem_max = 12500000 net.core.wmem_max = 12500000 net.ipv4.tcp_rmem = 4096 87380 12500000 net.ipv4.tcp_wmem = 4096 65536 12500000
E aumenta anche i seguenti parametri:
# vi /etc/sysctl.conf net.core.netdev_max_backlog = 30000 net.ipv4.tcp_max_syn_backlog = 4096
E quindi esegui il comando:
# sysctl -p
a) Per entrambe le modifiche non è necessario un riavvio del sistema.
b) Posta questa modifica, è necessario monitorare l'output del comando "netstat -s" e verificare se i seguenti contatori sono ancora in aumento:
packets pruned from receive queue because of socket buffer overrun times the listen queue of a socket overflowed SYNs to LISTEN sockets ignored packets collapsed in receive queue due to low socket buffer TCPBacklogDrop
3. Aumentare la dimensione del buffer RX Ring della scheda di rete. C'è un compromesso quando si imposta questo numero. Un valore maggiore potrebbe ritardare l'elaborazione dei pacchetti e un valore inferiore potrebbe causare la caduta dei pacchetti quando il driver corrispondente incontra un ritardo nell'elaborazione dei pacchetti in arrivo.
a) In genere, iniziare raddoppiando la dimensione dell'anello RX e monitorare l'output del comando "ethtool -S eth[x]".
# ethtool -G eth[x] rx 512
b) Per rendere permanente questa modifica, aggiungi quanto segue al file:/etc/sysconfig/network-scripts/ifcfg-eth[x] :
# vi /etc/sysconfig/network-scripts/ifcfg-eth[x] ETHTOOL_OPTS="-G rx 512"