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

16

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 à la carte réseau sur l'hôte A ou B ou au commutateur ou aux 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

Jimm
la source
2
Pourquoi pensez-vous que .23ms est une mauvaise latence? C'est une latence impressionnante.
SpacemanSpiff
6
Connectez-les directement avec un câble croisé. Si vous avez la même latence, la cause est l'un des hôtes. Si vous n'avez pas la même latence, la cause est le commutateur ou le câblage.
joeqwerty
1
D'accord, quel est le problème? La latence de 0,23 ms est inférieure à celle que j'obtiens avec deux machines assises côte à côte.
Michael Hampton
@joeqwerty Si deux systèmes sont connectés via un câble croisé, comment se localisent-ils? L'ARP fonctionne-t-il toujours? TCP fonctionne-t-il toujours?
Jimm
1
Ils fonctionneront de la même manière que s'ils étaient tous deux connectés au même commutateur. Le câble est simplement le support physique sur lequel ils communiqueront. Les 7 couches du modèle OSI (ou les 4 couches du modèle DARPA, si vous préférez) fonctionneront exactement comme elles le font actuellement.
joeqwerty

Réponses:

15

De manière générique, vous pouvez utiliser certains des commutateurs avancés de l' utilitaire 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, les pilotes et le réglage du système d'exploitation. Mais vraiment, nous avons besoin de plus d'informations.

Éditer:

D'accord, il s'agit donc de la messagerie TCP. Avez-vous modifié des /etc/sysctl.confparamè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-admprofil du système peut aider ...

Cela semble être un système EL6 générique, donc un moyen facile de définir une base de réglage des performances implique de changer le profil de performances du système en un autre disponible dans le cadre 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_maxet leurs valeurs par défaut ...

Quelque chose comme ce qui suit /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
ewwhite
la source
Il s'agit d'une application de messagerie sensible à la latence. L'OS typique serait kernel-2.6.32-279.11.1.el6.x86_64, bien que j'aie chargé les hôtes avec le noyau 3.2.23-rt37.56.el6rt.x86_64 pour voir si cela ferait une différence. Mais c'était à peu près la même chose. La taille des messages varie entre 1 Ko et 3 Ko. Toutes les communications se font via TCP.
Jimm
Est-ce que l'OS Red Hat MRG?
ewwhite
À l'heure actuelle, il s'agit de Redhat 6.3, mais MRG est également une possibilité. Comme je l'ai mentionné ci-dessus, j'ai essayé les deux, mais la latence était la même. De quel type de paramètres dois-je m'occuper?
Jimm
Je voudrais connaître la configuration matérielle et NIC. Changer de modèle aide. Pour les ajustables, la zone évidente à regarder sur 6.3 est votre tuned-admprofil.
ewwhite
Contrôleurs Ethernet doubles: carte réseau Emulex Corporation OneConnect 10 Gb (rév 02) et processeurs 10 cœurs de la famille AMD 10h, chacun à 2400 MHz.
Jimm