Почему чтение /proc/net/tcp занимает много времени, хотя ss быстро возвращает те же данные о таблице соединений?

Почему чтение /proc/net/tcp занимает много времени, хотя ss быстро возвращает те же данные о таблице соединений?

В Linux 2.6.32, если вы читаете (например, cat) /proc/net/tcp, на очень загруженной системе (например, веб-сервере), вы обнаружите, что чтение 100 тыс. записей занимает более 30 секунд. Это долго.

Что происходит за кулисами? Происходит ли блокировка?

Многие говорят о скорости команды 'ss'. Что делает команда 'ss', чего не делают 'cat /proc/net/tcp' или 'netstat', что делает ее настолько быстрее?

решение1

ssиспользует AF_NETLINKуровень сокетов для общения с ядром. Это протокол более низкого уровня, но он позволяет передавать данные очень быстро и большими порциями. Быстрый взгляд straceна CentOS 7 показывает, что он устанавливает окно передачи в 1 Мб.

Связанный контент