Jak rozwiązywać problemy z opóźnieniami między 2 hostami Linux

16

Opóźnienie między 2 hostami systemu Linux wynosi około 0,23 ms. Są one połączone jednym przełącznikiem. Ping i Wireshark potwierdzają numer opóźnienia. Ale nie mam żadnego wglądu w przyczyny tego opóźnienia. Skąd mam wiedzieć, czy opóźnienie wynika z karty sieciowej na hoście A lub B, przełączniku lub kablach?

AKTUALIZACJA: Opóźnienie 0,23 ms jest złe dla mojej istniejącej aplikacji, która wysyła wiadomości z bardzo wysoką częstotliwością i próbuję sprawdzić, czy można ją obniżyć do .1ms

Jimm
źródło
2
Jak myślisz, dlaczego .23ms to złe opóźnienie? To niesamowite opóźnienie.
SpacemanSpiff
6
Połącz je bezpośrednio za pomocą kabla krosowanego. Jeśli masz takie samo opóźnienie, przyczyną jest jeden z hostów. Jeśli nie masz tego samego opóźnienia, przyczyną jest przełącznik lub okablowanie.
joeqwerty
1
Zgadzam się, w czym problem? Opóźnienie 0,23 ms jest mniejsze niż w przypadku dwóch maszyn siedzących obok siebie.
Michael Hampton
@joeqwerty Jeśli dwa systemy są połączone kablem z przeplotem, jak się wzajemnie lokalizują? Czy ARP nadal działa? Czy protokół TCP nadal działa?
Jimm
1
Będą działać tak samo, jak gdyby były podłączone do tego samego przełącznika. Kabel jest jedynie fizycznym medium, przez które będą się komunikować. Wszystkie 7 warstw modelu OSI (lub 4 warstwy modelu DARPA, jeśli wolisz) będą działać dokładnie tak, jak teraz.
joeqwerty

Odpowiedzi:

15

Zasadniczo można użyć niektórych zaawansowanych przełączników do narzędzia iperf, aby uzyskać widok wydajności sieci między systemami, w szczególności opóźnienia i fluktuacji ...

Czy jest to strumień wiadomości oparty na UDP lub TCP?

Skomentowałem powyżej, że potrzebuję więcej informacji o konfiguracji. Jeśli jest to aplikacja do przesyłania wiadomości o niskim opóźnieniu, istnieje cały świat technik dostrajania i optymalizacji, które obejmują dostosowanie sprzętu, sterowników i systemu operacyjnego. Ale tak naprawdę potrzebujemy więcej informacji.

Edytować:

Okej, więc to wiadomości TCP. Czy zmodyfikowałeś jakieś /etc/sysctl.confparametry? Jak wyglądają Twoje bufory wysyłania / odbierania? Samo korzystanie z jądra w czasie rzeczywistym niewiele zrobi, ale jeśli przejdziesz do miejsca, w którym wiążesz przerwania dla procesorów, zmiana priorytetu aplikacji do przesyłania wiadomości w czasie rzeczywistym ( chrt) i ewentualnie modyfikacja tuned-admprofilu systemu może pomóc ...

Brzmi to jak ogólny system EL6, więc łatwy sposób na ustawienie linii bazowej dostrajania wydajności polega na zmianie profilu wydajności systemu na inny dostępny w ramach tuningu . Następnie buduj stamtąd.

W Twoim przypadku:

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

Szybka matryca pokazująca różnice:

Czy możesz nam powiedzieć o sprzęcie? Rodzaje procesorów, kart sieciowych, pamięci?

Testowanie linku może być interesujące ... Wypróbuj ten test iperf ...

W jednym systemie uruchom program nasłuchujący iperf UDP. Z drugiej strony otwórz połączenie z pierwszym ... Szybki test jakości linii.

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

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

W moim przypadku niski jitter i niski czas pingowania:

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

Sprawdziłbym sprzęt i interfejsy pod kątem błędów. Jeśli chcesz, wyeliminuj przełączanie między systemami i zobacz, jak wygląda bezpośrednie połączenie. Nie chcesz wysokiego jittera (wariancji), więc sprawdź to.

Ale szczerze mówiąc, nawet przy czasach pingowania przy bieżącej konfiguracji, nie powinno to wystarczyć do zabicia twojej aplikacji. Zrobiłbym ścieżkę dostrajania buforów wysyłania / odbierania. Patrz: net.core.rmem_max, net.core.wmem_maxi ich ustawienia domyślne ...

Coś takiego jak poniżej /etc/sysctl.conf(proszę dostosować do smaku):

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
ewwhite
źródło
Jest to aplikacja do przesyłania wiadomości wrażliwych na opóźnienia. Typowy system operacyjny to jądro-2.6.32-279.11.1.el6.x86_64, chociaż załadowałem hosty jądrem 3.2.23-rt37.56.el6rt.x86_64, aby sprawdzić, czy to coś zmieni. Ale było prawie tak samo. Rozmiary wiadomości wahają się między 1 KB a 3 KB. Cała komunikacja odbywa się za pośrednictwem TCP.
Jimm
Czy system operacyjny Red Hat MRG?
ewwhite
Obecnie jest to zwykły Redhat 6.3, ale MRG jest również możliwe. Jak wspomniałem powyżej, wypróbowałem oba, ale opóźnienie było takie samo. Jakiego rodzaju przestrajania powinienem się martwić?
Jimm
Chciałbym poznać konfigurację sprzętu i karty sieciowej. Model przełączania pomaga. W przypadku tuneli oczywistym obszarem do obejrzenia w 6.3 jest twój tuned-admprofil.
ewwhite
Podwójne kontrolery Ethernet: Emulex Corporation OneConnect 10Gb NIC (rev 02) i 16 rdzeniowych procesorów AMD Family 10h, każdy 2400 MHz.
Jimm