Pomiar opóźnienia sieci (Linux)


8

Chciałbym zmierzyć opóźnienie sieci dla żądania SNMP GET. Istnieje bezpłatne narzędzie wiersza poleceń, timektórego można użyć do znalezienia statystyk czasowych dla różnych poleceń. Na przykład można go używać snmpgetw następujący sposób:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

Zgodnie z instrukcją statystyki obejmują:

  • upływ czasu rzeczywistego między wezwaniem a rozwiązaniem umowy,

  • czas procesora użytkownika (suma wartości
    tms_utime i tms_cutime w struct tms zwracana przez
    times (2)),

  • czas procesora systemu (suma wartości
    tms_stime i tms_cstime w struct tms zwracana przez
    times (2)).

Jak widać, żadna z tych opcji nie pozwala zmierzyć rzeczywistego czasu opóźnienia sieci (z wyłączeniem innych statystyk czasu wykonania programu). Czy jest na to jakiś sposób? Może nie używasz narzędzia czasu, ale raczej hacków do jądra?

Chciałem zapytać, zanim zacznę pisać własny program.

Dzięki, Piotr

Odpowiedzi:


5

Flaga tcpdump(8)programu -tttmoże być dokładnie tym, czego potrzebujesz:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

Znacznik czasu na początku wiersza pokazuje czas w mikrosekundach od poprzedniego pakietu. Podając inną liczbę w -twierszu poleceń, możesz uzyskać albo czasy bezwzględne, czasy względne od pierwszego pakietu, albo czasy względne między pakietami.

Właśnie pokazałem losowe mdns i ruch internetowy, ponieważ to jest łatwe do znalezienia w moim systemie; możesz łatwo filtrować ruch SNMP, tcpdump(8)aby uzyskać tylko te pakiety, które Cię interesują. (Byłby to dobry pomysł, ponieważ zrzucanie całego ruchu z zajętych systemów może generować ogromne obciążenie).


-tttttmoże być również przydatny - zamiast pokazywać mikrosekundy od ostatniego pakietu, pokazuje mikrosekundy od początku śledzenia.
Alex D

8

Spróbuj ping:

$ ping -U 192.168.1.3

Z instrukcji ping:

-U Wydrukuj pełne opóźnienie między użytkownikami (stare zachowanie). Zwykle ping drukuje czas podróży w obie strony do sieci, który może być inny, z powodu awarii DNS.


Dzięki za odpowiedź, ale chciałbym zmierzyć opóźnienie właściwe dla żądania pobierania SNMP.

5

Uruchom program, a tymczasem przechwytuj ruch sieciowy za pomocą tcpdumplub wireshark. Sprawdź czas żądania i odpowiedzi i wykonaj proste odejmowanie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.