rx_packets
намного больше, чем rx_pkts_nic
. Почему это так?
Есть ли где-нибудь документ с объяснением всех полей статистики NIC?
Выход ethtool -S
зависит от драйвера. Похоже, вы используете какой-то Intel NIC.
Вероятно, вы включили некоторую разгрузку (GRO
- Общая разгрузка приема, LRO
- Большая разгрузка приема). Вы можете проверить вывод ethtool -k <iface>
.
В этом случае несколько полученных пакетов (с учетом rx_pkts_nic
) объединяются в один больший пакет (подсчитывается rx_packets
). И только тогда этот большой единичный пакет передается в системный сетевой стек.
К сожалению, я не знаю полной документации с подробным описанием различных счетчиков сетевых карт. У большинства из них есть интуитивно понятные названия, но не у всех. Некоторые из них вы можете попытаться понять с помощью сообщений списка рассылки ядра Linux. Также вы можете попробовать написать в списки рассылки, чтобы спросить значения.
Я просмотрел исходный код драйвера и нашел кое-что интересное.
В rx_packets
значение счетчика получается из статистики сетевого устройства в системе, а не от оборудования. Это значение считается как сумма пакетов из всех очередей сетевых адаптеров. Это значение также включает плохие пакеты.
В rx_pkts_nic
поступает от оборудования, но и уменьшается на rx_missed
стоимость. Похоже, это значение включает только хорошие пакеты (настоящее имя этого счетчика gprc
, это значит good packets received count
).
Итак, если у вас есть разница между rx_packets
и rx_pkts_nic
, проверьте счетчики ошибок.
Для исследования счетчиков статистики сетевых адаптеров хорошо ethtool --register-dump <iface>
команда.