Polecenie „ss” w pakiecie iproute; po co wysyłać zapytania do tabeli płyt dla gniazd czasu oczekiwania?

15

Wybacz mi, jeśli nie jest to najlepsze forum dla tego pytania, ale wydaje się bardziej odpowiednie dla jądra niż dla samego programowania.

Piszę skrypt, który odpytuje system o otwarte porty, abyśmy mogli tworzyć wykresy i monitorować statystyki. W tym celu używam polecenia „ss” z pakietu iproute. Jeśli wykonasz ss -s|grep estab, otrzymasz wynik podobny do tego:

TCP:   296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0

Moje pytanie dotyczy zmiennej timewait, która pokazuje obliczone gniazda w stanie TIME_WAIT. Kiedy próbowałem dowiedzieć się, do jakiego numeru został użyty po ukośniku, stało się to wirującą przygodą w poszukiwaniu kodu źródłowego, co ostatecznie doprowadziło mnie do znalezienia następującego fragmentu:

printf("TCP:   %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
       s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
       sn.tcp_estab,
       s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
       s.tcp_orphans,
       slabstat.tcp_syns,
       s.tcp_tws, slabstat.tcp_tws,
       slabstat.tcp_ports
       );

Muszę przyznać, że moje wyszukiwanie tego, co miał oznaczać „slabstat”, ostatecznie doprowadziło do mojej wiedzy na temat pamięci podręcznych slab i ich interfejsu raportowania w / proc / slabinfo.

Pytanie: Co tabela slabt ma wspólnego z obliczeniami gniazd TIME_WAIT? Nie rozumiem, dlaczego ta liczba jest zgłaszana, ponieważ za każdym razem, gdy uruchamiam polecenie na każdym serwerze, na którym próbowałem, liczba ta zawsze wynosiła zero.

Peter Grace
źródło
Szczerze mówiąc
jeremiahd,
Kod pokazuje tylko, ile gniazd oczekujących jest przydzielonych na płycie. IMO pomaga tylko określić wykorzystanie pamięci
Ulrich Dangel

Odpowiedzi:

0

Wygląda na tcp_tw_bucketsto, że jest ostatecznie odpytywany, co jest strukturą usuniętą z Linuksa 2.6.12

Zatem ostatnia liczba prawdopodobnie zawsze wynosiłaby 0, chyba że dotyczy 7-letnich jąder.

Jeśli chodzi o zapytania do płyty, o ile mogę stwierdzić, jest ona absurdalnie szybsza niż inne dostępne metody.

Jodie C.
źródło
Jeśli wartość znajduje się w jądrze przed wersją 2.6.12, czy wartość slabstat.tcp_tws będzie równa s.tcp_tws ? Czy jest jakaś różnica między tymi dwiema wartościami? (jeden pochodzi z / proc / net / sockstat, a drugi pochodzi z / proc / slabinfo)
ruanhao 30.03.2015