Команда «ss» в пакете iproute; зачем запрашивать таблицу slab для сокетов timewait?

15

Простите, если это не лучший форум для этого вопроса, но он кажется более актуальным для ядра, чем для самого программирования.

Я пишу скрипт, который запрашивает у системы открытые порты, чтобы мы могли отслеживать и отслеживать статистику. Для этого я использую команду "ss" из пакета iproute. Если вы выполните, ss -s|grep estabвы получите вывод, похожий на этот:

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

Мой вопрос связан с переменной timewait, которая показывает вычисленные сокеты в состоянии TIME_WAIT. Когда я попытался выяснить, на какое число ссылались после косой черты, это превратилось в бурное приключение поиска исходного кода, которое в конечном итоге привело меня к поиску следующего фрагмента:

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

Я должен признать, что мой поиск того, что должен был означать «slabstat», в конечном итоге привел к тому, что я узнал о кешах slab и их интерфейсе отчетов в / proc / slabinfo.

Вопрос: какое отношение имеет slabtable к вычислениям сокетов TIME_WAIT? Я не могу понять, почему сообщается об этом числе, так как каждый раз, когда я запускаю команду на каждом сервере, на котором я его пробовал, число всегда было равно нулю.

Питер Грейс
источник
Честно говоря, вы, вероятно, получите лучшие ответы, разместив это в одном из соответствующих списков рассылки ядра, см. Tux.org/lkml/#related-lists
jeremiahd
Код просто показывает, сколько ожидающих сокетов выделено в слэбе. ИМО это просто помогает определить использование памяти
Ульрих Дангел

Ответы:

0

Похоже, tcp_tw_bucketsчто это в конечном итоге опрос, который является структурой, удаленной с Linux 2.6.12

Таким образом, последнее число, вероятно, всегда будет 0, если оно не на 7-летних ядрах.

Что касается запросов к плите, насколько я могу судить, это смехотворно быстрее, чем другие доступные методы.

Джоди С
источник
Если он находится в ядре до 2.6.12, будет ли значение slabstat.tcp_tws равным s.tcp_tws ? Есть ли разница между этими двумя значениями? (один из / proc / net / sockstat, а другой из / proc / slabinfo)
ruanhao