В FreeBSD какая разница между Drop и Idrop в выводе netstat?
$ netstat -di
Name Mtu Network Address Ipkts Ierrs Idrop Opkts Oerrs Coll Drop
bge0* 1500 <Link#1> 00:16:d4:e3:49:31 0 0 0 0 0 0 0
wpi0 2290 <Link#2> 00:1b:77:86:2d:fa 0 53068 0 179587 3 0 0
Кроме того, получает ли netstat счетчик сбросов с сетевой карты или из буфера ядра? Например, если сетевая карта не может принимать больше пакетов из-за отсутствия дескрипторов, будут ли потеряны пакеты сообщаться как одно из значений отбрасывания в netstat?
Я спрашиваю, потому что в Linux ifconfig читает из / proc / net / dev и, насколько я знаю, он отключается только тогда, когда буфер ядра заполнен. Так что, если сетевая карта не будет принимать пакеты из-за отсутствия дескрипторов, вы не узнаете об этом, т.е. она не попала в память ядра.
Это и netstat во FreeBSD имеют параметр -B для статистики буфера BPF, так что сейчас имеет смысл, что netstat -di сообщает счетчик отбрасывания от самого сетевого адаптера / драйвера.
Правильно Неправильно?
Любая помощь приветствуется, спасибо
Отсутствие программных дексрипторов (то есть кластеров mbuf) можно наблюдать через:
# vmstat -z
смотреть на FAIL
столбец.
Отсутствие аппаратных дескрипторов можно наблюдать только через интерфейс конкретного драйвера, например, для карт Intel e1000 через:
# sysctl dev.em.0.debug=1 && dmesg | tail
...
em0: Tx Descriptors avail failure = 0
em0: RX discarded packets = 0
...
Также количество дескрипторов можно настроить с помощью loader.conf
в некоторых сетевых адаптерах
Что касается вашего вопроса "idrops vs. drops", вам следует поискать источники
if_data.ifi_iqdrops
if_snd.ifq_drops
Если я правильно понял, один предназначен для сброса ввода, другой - для сброса вывода (т.е. ALTQ
).
PS. Дополнительную информацию см. В разделе 3.3 "ifnet
структура "TCP / IP Illustrated Volume 2, Stevens & Wright. Или исходный код вашей ОС.