Команда "ss" в пакеті iproute; Чому запитуємо таблицю плит для розеток 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", в кінцевому рахунку призвело до того, що я дізнався про кеші платів та інтерфейс їх звітування в / proc / slabinfo.

Питання: Яке відношення має до пластових обчислень TIME_WAIT? Я не можу з’ясувати, чому повідомляється про це число, тому що кожного разу, коли я запускаю команду на кожному сервері, на якому я пробував, число завжди було нульовим.


Чесно кажучи, ви, ймовірно , отримати кращі відповіді, відправляючи це до одного з відповідних списків розсилки ядра, см tux.org/lkml/#related-lists
jeremiahd

Код просто показує, скільки розеток для очікування виділено в плиті. IMO, це просто допомагає визначити використання пам'яті
Ульріх Дангель

Відповіді:


0

Схоже, tcp_tw_bucketsце те, що в кінцевому підсумку опитується, що є структурою, видаленою в Linux 2.6.12

Отже, останнє число, ймовірно, завжди буде 0, якщо це не на ядрах 7 років.

Що стосується запитів на плиті, наскільки я можу сказати, це смішно швидше, ніж інші доступні методи.


Якщо він знаходиться на ядрі до 2.6.12, чи буде значення platestat.tcp_tws рівним s.tcp_tws ? Чи є різниця між цими двома значеннями? (один - з / proc / net / sockstat, а один - / proc / slabinfo)
ruanhao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.