web-dev-qa-db-fra.com

Comment dépanner la latence entre 2 hôtes Linux

La latence entre 2 hôtes Linux est d'environ 0,23 ms. Ils sont connectés par un interrupteur. Ping et Wireshark confirment le numéro de latence. Mais, je n'ai aucune visibilité sur ce qui cause cette latence. Comment savoir si la latence est due à NIC sur l'hôte A ou B ou le commutateur ou les câbles?

MISE À JOUR: La latence de 0,23 ms est mauvaise pour mon application existante, qui envoie des messages à très haute fréquence et j'essaie de voir si elle peut être réduite à 0,1 ms

15
Jimm

De manière générique, vous pouvez utiliser certains des commutateurs avancés vers tilitaire iperf pour obtenir une vue des performances du réseau entre les systèmes, en particulier la latence et la gigue ...

S'agit-il d'un flux de messages basé sur UDP ou TCP?

J'ai commenté ci-dessus avoir besoin de plus d'informations sur votre configuration. S'il s'agit d'une application de messagerie à faible latence, il existe tout un monde de techniques de réglage et d'optimisation qui couvrent le matériel, le pilote et le réglage du système d'exploitation. Mais vraiment, nous avons besoin de plus d'informations.

Éditer:

D'accord, c'est donc TCP messagerie. Avez-vous modifié un /etc/sysctl.conf paramètres? À quoi ressemblent vos tampons d'envoi/réception? L'utilisation d'un noyau en temps réel seul ne fera pas grand-chose, mais si vous passez au point où vous liez des interruptions aux CPU, changer la priorité en temps réel de l'application de messagerie (chrt) et éventuellement modifier le tuned-adm le profil du système peut aider ...

Cela semble être un système EL6 générique, donc un moyen facile de définir une ligne de base d'optimisation des performances implique de changer le profil de performances du système en un autre disponible dans le framework optimisé . Construisez ensuite à partir de là.

Dans ton cas:

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

Une matrice rapide montrant les différences:

Pouvez-vous nous parler du matériel? Types de CPU, NIC, mémoire?

Donc, il peut être intéressant de tester votre lien ... Essayez ce test iperf ...

Sur un système, démarrez un écouteur iperf UDP. De l'autre, ouvrez une connexion avec le premier ... Un test rapide de qualité de ligne.

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

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

Dans mon cas, faible gigue et temps de ping faible:

------------------------------------------------------------
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

Je vérifierais le matériel et les interfaces pour les erreurs. Si vous le souhaitez, supprimez le basculement entre les systèmes et voyez à quoi ressemble une connexion directe. Vous ne voulez pas de gigue élevée (variance), alors vérifiez cela.

Mais honnêtement, même avec les temps de ping que vous obtenez sur votre configuration actuelle, cela ne devrait pas être suffisant pour tuer votre application. Je choisirais de régler vos tampons d'envoi/réception. Voir: net.core.rmem_max, net.core.wmem_max et leurs valeurs par défaut ...

Quelque chose comme ce qui suit dans /etc/sysctl.conf (veuillez régler au goût):

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