So beheben Sie die Latenz zwischen zwei Linux-Hosts

16

Die Latenz zwischen zwei Linux-Hosts beträgt ca. 0,23 ms. Sie sind durch einen Schalter verbunden. Ping & Wireshark bestätigen die Latenzzahl. Aber ich habe keine Einsicht, was diese Latenz verursacht. Woher weiß ich, ob die Latenzzeit auf die Netzwerkkarte auf Host A oder B oder den Switch oder die Kabel zurückzuführen ist?

UPDATE: Die Latenz von .23 ms ist schlecht für meine vorhandene Anwendung, die Nachrichten mit sehr hoher Frequenz sendet, und ich versuche zu sehen, ob es auf .1ms gesenkt werden kann

Jimm
quelle
2
Warum denkst du .23ms ist schlechte Latenz? Das ist eine unglaubliche Latenz.
SpacemanSpiff
6
Verbinden Sie sie direkt mit einem Crossover-Kabel. Wenn Sie dieselbe Latenz haben, ist die Ursache einer der Hosts. Wenn Sie nicht die gleiche Latenz haben, ist die Ursache der Switch oder die Verkabelung.
Joeqwerty
1
Einverstanden, was ist das Problem? Die Latenz von 0,23 ms ist geringer als bei zwei nebeneinander sitzenden Computern.
Michael Hampton
@ joeqwerty Wenn zwei Systeme über ein Crossover-Kabel verbunden sind, wie lokalisieren sie sich? Funktioniert ARP noch? Funktioniert TCP noch?
Jimm
1
Sie funktionieren genauso, als wären beide mit demselben Switch verbunden. Das Kabel ist lediglich das physische Medium, über das sie kommunizieren. Alle 7 Schichten des OSI-Modells (oder die 4 Schichten des DARPA-Modells, wenn Sie es vorziehen) funktionieren genauso wie jetzt.
Joeqwerty

Antworten:

15

Im Allgemeinen können Sie einige der erweiterten Optionen des Dienstprogramms iperf verwenden , um einen Überblick über die Netzwerkleistung zwischen Systemen zu erhalten, insbesondere über Latenz und Jitter.

Handelt es sich um einen UDP- oder TCP-basierten Nachrichtenstrom?

Ich habe oben darauf hingewiesen, dass Sie weitere Informationen zu Ihrem Setup benötigen. Wenn es sich um eine Messaging-Anwendung mit geringer Latenz handelt, gibt es eine ganze Welt von Optimierungs- und Optimierungstechniken, die sich auf die Optimierung von Hardware, Treibern und Betriebssystemen erstrecken. Aber wir brauchen wirklich mehr Informationen.

Bearbeiten:

Okay, das ist TCP-Messaging. Haben Sie irgendwelche /etc/sysctl.confParameter geändert ? Wie sehen Ihre Sende- / Empfangspuffer aus? Die Verwendung eines Echtzeit-Kernels allein kann nicht viel bewirken. Wenn Sie sich jedoch an den Punkt begeben, an dem Sie Interrupts an die CPU binden , kann es hilfreich sein, die Echtzeitpriorität der Messaging-App ( chrt) zu ändern und möglicherweise das tuned-admProfil des Systems zu ändern.

Dies scheint ein generisches EL6-System zu sein. Eine einfache Möglichkeit, eine Leistungsoptimierungsbasis festzulegen, besteht darin, das Leistungsprofil des Systems in ein anderes zu ändern, das im optimierten Framework verfügbar ist . Dann bauen Sie von dort aus.

In deinem Fall:

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

Eine kurze Matrix mit den Unterschieden:

Können Sie uns etwas über die Hardware erzählen? Arten von CPU, NIC, Speicher?

Es könnte also interessant sein, Ihren Link zu testen ... Probieren Sie diesen iperf-Test aus ...

Starten Sie auf einem System einen iperf UDP-Listener. Öffnen Sie andererseits eine Verbindung zum ersten ... Ein schneller Test der Leitungsqualität.

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

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

In meinem Fall niedriger Jitter und niedrige Ping-Zeit:

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

Ich würde die Hardware und Schnittstellen auf Fehler überprüfen. Wenn Sie möchten, müssen Sie den Systemwechsel aufheben und sehen, wie eine direkte Verbindung aussieht. Sie möchten keinen hohen Jitter (Varianz), überprüfen Sie dies.

Aber ehrlich gesagt, sollte dies trotz der Ping-Zeiten, die Sie für Ihr aktuelles Setup benötigen, nicht ausreichen, um Ihre Anwendung zu beenden. Ich würde den Weg der Optimierung Ihrer Sende- / Empfangspuffer beschreiten. Siehe auch : net.core.rmem_max, net.core.wmem_maxund die Standardwerte ...

Sowas in etwa /etc/sysctl.conf(bitte nach Geschmack abstimmen):

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
ewwhite
quelle
Es ist eine latenzempfindliche Messaging-Anwendung. Das typische Betriebssystem wäre kernel-2.6.32-279.11.1.el6.x86_64, obwohl ich Hosts mit kernel 3.2.23-rt37.56.el6rt.x86_64 geladen habe, um zu sehen, ob dies einen Unterschied macht. Aber es war so ziemlich dasselbe. Die Nachrichtengrößen variieren zwischen 1 KB und 3 KB. Die gesamte Kommunikation erfolgt über TCP.
Jimm
Ist das Betriebssystem Red Hat MRG?
ewwhite
Im Moment ist es einfach Redhat 6.3, aber MRG ist auch eine Möglichkeit. Wie oben erwähnt, habe ich beide ausprobiert, aber die Latenz war die gleiche. Mit welcher Art von Tunables sollte ich mich befassen?
Jimm
Ich möchte die Hardware und das NIC-Setup kennen. Schaltermodell hilft. Für Tunables ist der naheliegende Bereich in 6.3 Ihr tuned-admProfil.
ewwhite
Dual-Ethernet-Controller: Emulex Corporation OneConnect 10-Gbit-NIC (Version 02) und 16 10-Stunden-Prozessoren der AMD-Familie mit jeweils 2400 MHz.
Jimm