Размер буфера для захвата пакетов в пространстве ядра? - PullRequest
5 голосов
/ 08 августа 2011

Просмотр справочной страницы tcpdump здесь Кажется, ядро ​​может отбросить пакеты, если буфер заполнен.Мне было интересно, если

1) этот размер настраивается и / или 2) где я могу увидеть размер моего дистрибутива?

Со страницы руководства (для удобства):

пакетов `` отброшенных ядром '' (это количество пакетов, которые были отброшены из-за недостатка места в буфере механизмом захвата пакетов в ОС, в которой работает tcpdump, если ОС сообщает эту информациюдля приложений, если нет, то будет сообщено как 0).

Ответы [ 2 ]

10 голосов
/ 11 августа 2011

Есть несколько областей, которые вы можете проверить, чтобы уменьшить количество пакетов , отброшенных ядром :

  • Посмотрите на настройку /proc/sys/net/core/netdev_max_backlog и /proc/sys/net/core/netdev_budget.Значение по умолчанию, вероятно, довольно низкое;попробуйте установить для каждого что-то вроде 2000.
  • Запись на экран устройства вывода может блокировать / замедлять процесс tcpdump достаточно долго, чтобы заполнить буфер recv
    • Используйте -nn для выключенияПоиск DNS и присвоение имен портов
    • Запись в файл вместо экрана
    • Попробуйте использовать такой инструмент, как gulp
  • Если выпосмотрите на многопроцессорную машину, используя taskset
  • Используйте nice для установки приоритета процесса

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

1 голос
/ 09 августа 2011

1) Это настраивается, но не точно, так как он определит правильный размер из вашего запроса.

2) Используйте setsockopt / getsockopt с SO_RCVBUF / SO_SNDBUF

Я не знаком с Linuxно, похоже, эта ссылка объясняет это хорошо.http://linux.die.net/man/7/socket

...