Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2015-09-10 14:44:19

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Częstotliwość zegara i stała HZ

Próbuje właśnie sobie zrozumieć zasadę działania retransmisji pakietów w sieci. Na necie jest pełno sprzecznych ze sobą informacji i w sumie nie mam pojęcia komu wierzyć. Dokumentacja ssie ale w paru textach było odwołanie do źródeł kernela w poszukiwaniu stałej TCP_RTO_MIN — to ma odpowiadać za minimalny czas oczekiwania na retransmisje pakietu w przypadku gdy nie nadchodzi ACK za jakiś przesłany wcześniej segment TCP.

W źródłach są zdefiniowane dwie wartości (w pliku include/net/tcp.h):

Kod:

#define TCP_RTO_MAX     ((unsigned)(120*HZ))
#define TCP_RTO_MIN     ((unsigned)(HZ/5))

Zatem jest do określenia maxymalny czas i minimalny czas na retransmisje. Oba z nich są zależne od HZ i teraz pytanie co to jest to HZ i ile wynosi?

Na necie ludzie piszą, że to HZ to jest częstotliwość zegara i podają, że ta częstotliwość zmienia się w zależności od architektury systemu. Zatem przeszukałem źródła w poszukiwaniu tego HZ i faktycznie znalazłem kilka wpisów. Jest tam kilka odwołań do różnych architektur ale nigdzie nie ma amd64. Z reguły są podawane 3 wartości: 100, 1000, 1024.

Jeśli podejrzeć konfigurację kernela w systemie, to tam jest coś takiego:

Kod:

# cat /boot/config-4.1.0-2-amd64| grep -i hz
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ_FULL is not set
# CONFIG_NO_HZ is not set
CONFIG_RCU_FAST_NO_HZ=y
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_MACHZ_WDT=m

Czy to jest ten sam parametr? A jeśli tak, to wtedy minimalny czas oczekiwania na retransmisję wyniósłby jakieś 50ms (250/5). Tylko jeśli spojrzeć w wiresharku na to jak się odbywa retransmisja, to można zobaczyć coś poniższego:
http://i.imgur.com/5JKRNqh.png

Zatem pierwsza retransmisja jest po upływie około 1sekundu, kolejne mają odstęp czasu zwiększony dwukrotnie względem poprzedniej. Czy ta pierwsza retransmisja nie powinna się dokonać po upływnie 50ms zamiast 1sekundy? Zakładając, że to są te same HZ. Czy może to zależy od czegoś innego?

Offline

 

#2  2015-09-10 15:06:22

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Częstotliwość zegara i stała HZ

HZ to częstotliwość przełączania tasków dla systemu wielozadaniowego. Nie ma nic wspólnego z częstotliwością zegara.
Owszem, ma wpływ na responsywność.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#3  2015-09-10 15:25:36

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Częstotliwość zegara i stała HZ

Mi chodzi o ten zegar w TCP, który jest odpalany w momencie wysyłania pakietów i odlicza jakiś czas na otrzymanie pakietu ACK. W momencie gdy zegar wybije 0 i nie zostanie dostarczone potwierdzenie odebrania pakietu, to ten pakiet jest uznawany za zaginiony i przy tym jest retransmitowany. Z tego co czytam, to chodzi o "ziarnistość zegara", czyli o precyzję, która ma wynosić w linuxach 1000/s, czyli 1ms. Tam w źródłach jest wypisane ile to HZ wynosi, jest podawane 100, 1000, 1024, w zależności od architektury. Nie ma tam jednak podanego HZ w przypadku amd64, stąd moje pytanie jak dokładny jest ten zegar, czyli ile wynosi HZ i czy to HZ z configu zlokalizowanego w /boot/ to ten sam parametr.

Offline

 

#4  2015-09-10 15:32:50

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: Częstotliwość zegara i stała HZ

2209

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:23:41)

Offline

 

#5  2015-09-10 15:37:05

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Częstotliwość zegara i stała HZ

HZ zależy od tego co sobie w kernela wkompilujesz a nie od architektury.
Kiedyś było to na sztywno 100, potem dodano możliwość zmiany, potem zmieniono default na 1000.
W AmigaOS była to częstotliwość pionu.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#6  2015-09-10 15:44:07

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Częstotliwość zegara i stała HZ

HZ zależy od tego co sobie w kernela wkompilujesz a nie od architektury.

Nigdzie nie piszę, że zależy od architektury, tylko, że według plików w źródłach kernela, wartość HZ zmienia się w zależności od architektury.

Kiedyś było to na sztywno 100, potem dodano możliwość zmiany, potem zmieniono default na 1000.

To czemu ja mam 250? xD

Nie ma specyficznego dla amd64 pliku, ale jest ogólny: include/asm-generic/param.h

Ok, zatem te pliki w asm-generic/ to taki fallback?

Czyli jeśli to HZ=250, to teraz pytanie, czemu retransmisja dokonała się po 1s a nie po 50ms. xD

Offline

 

#7  2015-09-10 15:51:48

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: Częstotliwość zegara i stała HZ

2210

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:23:42)

Offline

 

#8  2015-09-10 15:52:02

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Częstotliwość zegara i stała HZ

czekaj bo czegoś nie kumam. nie zależy od architektury ale zmienia się w zależności od architektury... nie widzisz drobnej sprzeczności w tym stwierdzeniu?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#9  2015-09-10 15:58:34

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Częstotliwość zegara i stała HZ

Może pogrubię:

Nigdzie nie piszę, że zależy od architektury, tylko, że według plików w źródłach kernela, wartość HZ zmienia się w zależności od architektury.

@uzytkownikubunt , ok. xD

A jeszcze taka sprawa, na necie można się natknąć na kern.hz="1000", zadziała to na linuxie?

Ostatnio edytowany przez morfik (2015-09-10 16:00:26)

Offline

 

#10  2015-09-10 16:03:45

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Częstotliwość zegara i stała HZ

jak se wkompilujesz dynamiczną zmianę w kernela to zadziała.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#11  2015-09-10 16:16:12

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Częstotliwość zegara i stała HZ

Nie chce mi się kompilować kernela tylko po to by włączyć/przestawić jedną opcję. xD

BTW, w debianie jest jakieś jajo 4.1.0-2-rt-amd64 . Mniemam, że to rt to jest od realtime, a mimo to tam też jest 250. xD

Ostatnio edytowany przez morfik (2015-09-10 16:17:47)

Offline

 

#12  2015-09-10 16:26:38

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: Częstotliwość zegara i stała HZ

2211

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:23:44)

Offline

 

#13  2015-09-10 16:48:07

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Częstotliwość zegara i stała HZ

Ja jeszcze wieczorem postaram się zapytać na stackexchange, może tam ktoś coś podpowie jak ten czas RTO się poprawnie wylicza.

Co do tych zmiennych sysctl, to u mnie nie ma proc/sys/net/sctp/ , a te wszystkie opcje co podałeś, mają tam siedzieć. Z tego co czytam, to to jest jakiś inny protokół. xD

Ostatnio edytowany przez morfik (2015-09-10 16:49:59)

Offline

 

#14  2015-09-10 16:58:20

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: Częstotliwość zegara i stała HZ

2212

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:23:45)

Offline

 

#15  2015-09-11 12:51:52

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Częstotliwość zegara i stała HZ

Wyjaśnia się po trochu. Ten HZ to jest ten sam parametr i określa on ilość tyknięć zegara w czasie 1 sekundy.

Przy wartości 250, każde tyknięcie ma 4ms. (1000/250)
Przy wartości 1000 każde tyknięcie ma 1ms. (1000/1000)

Jeśli to podstawić do wzoru HZ/5 , to otrzumamy:

250/5=50
1000/5=200

Te powyższe wartości nie określają czasu tylko ilość tyknięć zegara. By otrzymać czas trzeba pomnożyć je przez te wartości, które otrzymaliśmy na początku i tak otrzymujemy:

50*4=200ms
200*1=200ms

I jak widać, niezależnie od ilości tyknięć ustawionych w HZ, minimalny czas na retransmisję zawsze wyniesie 200ms. Zatem jedna sprawa z głowy. xD

Jeszcze tylko trzeba ustalić czemu retransmisja dokonała się po 1s, a nie po 200ms. xD

Czytając ten post, wszystko teraz wydaje się dość proste. xD

Analizując wyjście ss -i, nie ma połączeń, które mają ustawione RTO na mniej niż 200ms, czyli wszystko się zgada jak dotąd — minimalne RTO=200ms. RTO jest wyliczane na podstawie RTT, czyli czasu jaki potrzebuje sygnał by dotrzeć w obie strony (coś jak ping), dlatego RTO w przypadku wszystkich połączeń się różni i to w paru przypadkach dość znacznie. Natomiast jeśli popatrzymy na przykład wyżej, to tam jest pakiet SYN. I generalnie z nim jest taki problem, bo on rozpoczyna połączenie i druga strona jeszcze nie udzieliła żadnej odpowiedzi, więc nie ma jak ustalić RTO dla pakietu SYN, no bo jak? xD Dopiero po ACK można to zrobić.

Przejrzałem za to ss -i pod kątem pakietów syn i co znalazłem. Wartości RTO są w tym przypadku bardzo dziwne. Mają wielokrotność 1000. Póki co tam widzę, 1000, 2000, 4000, 8000 i 16000, zatem są zwiększane dwukrotnie. Pytanie zatem co wpływa na zmianę i czy domyślna wartość RTO dla pakietu SYN wynosi 1000 a w przypadku np. nie uzyskania potwierdzenia, po 1s jest wysyłany kolejny pakiet SYN z ustawionym RTO na 2000, potem na 4000 itd. Póki co tego nie wiem ale wydaje mi że tak może być. xD

Idąc dalej za ciosem, przeszukałem wartości sysctl w stosunku do pakietu SYN:

Kod:

net.ipv4.tcp_syn_retries = 4

Zatem mój system jest w stanie wysłać 5 pakietów SYN — jeden oryginalny i 4 retransmisje w przypadku braku potwierdzenia. Zatem chyba mam rację z tymi wartościami 1000, 2000, 4000, 8000 i 16000, bo ich też jest 5. xD

Ostatnio edytowany przez morfik (2015-09-11 13:41:26)

Offline

 

#16  2015-09-11 13:50:46

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: Częstotliwość zegara i stała HZ

2217

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:23:51)

Offline

 

#17  2015-09-11 14:03:16

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Częstotliwość zegara i stała HZ

Ja w między czasie przeprowadziłem test i się potwierdziło moje przypuszczenie, tj. że pakiety SYN są traktowane inaczej i w ich przypadku jest to 1s. Potem każdy retransmitowany pakiet ma zwiększaną wartość dwukrotnie aż wybije ilość retransmisji ustawiona w net.ipv4.tcp_syn_retries , więc problem solved. xD

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)