Come risolvere i problemi di latenza tra 2 host Linux


16

La latenza tra 2 host Linux è di circa .23ms. Sono collegati da un interruttore. Ping & Wireshark confermano il numero di latenza. Ma non ho alcuna visibilità su ciò che sta causando questa latenza. Come posso sapere se la latenza è dovuta alla scheda NIC sull'host A o B o sullo switch o sui cavi?

AGGIORNAMENTO: La latenza di 0,03 ms è dannosa per la mia applicazione esistente, che invia messaggi ad altissima frequenza e sto cercando di vedere se può essere ridotta a .1ms


2
Perché pensi che .23ms sia una cattiva latenza? È una latenza fantastica.
SpacemanSpiff

6
Collegali direttamente con un cavo incrociato. Se hai la stessa latenza, la causa è uno degli host. Se non si ha la stessa latenza, la causa è l'interruttore o il cablaggio.
joeqwerty,

1
D'accordo, qual è il problema? La latenza di 0,23 ms è inferiore a quella che ottengo con due macchine sedute una accanto all'altra.
Michael Hampton

@joeqwerty Se due sistemi sono collegati tramite cavo crossover, come si localizzano? L'ARP funziona ancora? TCP funziona ancora?
Jimm,

1
Funzioneranno esattamente come se fossero entrambi collegati allo stesso switch. Il cavo è semplicemente il mezzo fisico su cui comunicheranno. Tutti e 7 i livelli del modello OSI (o i 4 livelli del modello DARPA, se preferisci) funzioneranno esattamente come fanno ora.
joeqwerty,

Risposte:


15

In generale, è possibile utilizzare alcuni degli switch avanzati dell'utilità iperf per ottenere una visione delle prestazioni di rete tra i sistemi, in particolare latenza e jitter ...

Si tratta di un flusso di messaggi basato su UDP o TCP?

Ho commentato sopra sulla necessità di ulteriori informazioni sulla tua configurazione. Se si tratta di un'applicazione di messaggistica a bassa latenza, esiste un intero mondo di tecniche di ottimizzazione e ottimizzazione che vanno dall'ottimizzazione dell'hardware, del driver e del sistema operativo. Ma davvero, abbiamo bisogno di maggiori informazioni.

Modificare:

Va bene, quindi questa è la messaggistica TCP. Hai modificato qualche /etc/sysctl.confparametro? Che aspetto hanno i buffer di invio / ricezione? L'uso da solo di un kernel in tempo reale non farà molto, ma se si passa al punto in cui si vincolano gli interrupt alla CPU, cambiare la priorità in tempo reale dell'app di messaggistica ( chrt) e possibilmente modificare il tuned-admprofilo del sistema può aiutare ...

Questo sembra essere un sistema EL6 generico, quindi un modo semplice per impostare una linea di base di ottimizzazione delle prestazioni prevede la modifica del profilo delle prestazioni del sistema con un altro disponibile all'interno del framework ottimizzato . Quindi costruire da lì.

Nel tuo caso:

yum install tuned tuned-utils
tuned-adm profile latency-performance

Una matrice rapida che mostra le differenze:

Puoi parlarci dell'hardware? Tipi di CPU, NIC, memoria?

Quindi, potrebbe essere interessante testare il tuo link ... Prova questo test iperf ...

Su un sistema, avviare un listener UDP iperf. Dall'altro, apri una connessione al primo ... Un rapido test di qualità della linea.

# Server2
[root@server2 ~]# iperf -su   

# Server1
[root@server1 ~]# iperf -t 60 -u -c server2

Nel mio caso, jitter basso e tempo di ping basso:

------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  224 KByte (default)
------------------------------------------------------------
[  3] local 192.168.15.3 port 5001 connected with 172.16.2.152 port 36312
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-20.0 sec  2.50 MBytes  1.05 Mbits/sec   0.012 ms    0/ 1785 (0%)

PING server1 (172.16.2.152) 56(84) bytes of data.
64 bytes from server1 (172.16.2.152): icmp_seq=1 ttl=63 time=0.158 ms
64 bytes from server1 (172.16.2.152): icmp_seq=2 ttl=63 time=0.144 ms

Verificherei errori hardware e interfacce. Se lo desideri, elimina il passaggio tra i sistemi e osserva l'aspetto di una connessione diretta. Non vuoi un jitter elevato (varianza), quindi controlla quello.

Ma onestamente, anche con i tempi di ping che stai ottenendo sulla tua configurazione attuale, questo non dovrebbe essere sufficiente per uccidere l'applicazione. Vorrei seguire il percorso di ottimizzazione dei buffer di invio / ricezione. Vedere: net.core.rmem_max, net.core.wmem_maxed i loro valori di default ...

Qualcosa di simile al seguente in /etc/sysctl.conf(sintonizzarsi a piacere):

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

È un'applicazione di messaggistica sensibile alla latenza. Il sistema operativo tipico sarebbe kernel-2.6.32-279.11.1.el6.x86_64, anche se ho caricato host con kernel 3.2.23-rt37.56.el6rt.x86_64 per vedere se questo avrebbe fatto qualche differenza. Ma era praticamente lo stesso. Le dimensioni dei messaggi variano tra 1 KB e 3 KB. Tutte le comunicazioni avvengono tramite TCP.
Jimm,

Il sistema operativo Red Hat MRG è?
ewwhite,

In questo momento il suo semplice Redhat 6.3, ma MRG è anche una possibilità. Come ho detto sopra, ho provato entrambi, ma la latenza era la stessa. Che tipo di sintonizzabili dovrei preoccuparmi?
Jimm,

Vorrei sapere l'hardware e la configurazione della scheda di rete. Cambia modello aiuta. Per i parametri sintonizzabili, l'area ovvia da guardare in 6.3 è il tuo tuned-admprofilo.
ewwhite,

Doppi controller Ethernet: Emulex Corporation OneConnect 10Gb NIC (rev 02) e 16 processori AMD della famiglia 10h Processori, ciascuno da 2400 MHz.
Jimm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.