У моей группы есть сервер, настроенный для изображения наших рабочих станций, использующих ТУМАН. Мне было немного любопытно посмотреть, сколько пропускной способности мы использовали. Когда я бегу ifconfig eth0
, строки TX / RX читаются
RX packets:166949376 errors:0 dropped:0 overruns:0 frame:0
TX packets:350126730 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:31757576798 (29.5 GiB) TX bytes:458006556301 (426.5 GiB)
Но когда я бегу ip -s link show eth0
, эквивалентный вывод
RX: bytes packets errors dropped overrun mcast
1693647583 166958818 0 0 0 18979
TX: bytes packets errors dropped carrier collsns
2741139294 350136238 0 0 0 0
Что соответствует TX / RX примерно 1,8 / 2,6 ГиБ. Что вызывает расхождение между значениями, указанными iproute2
и ifconfig
? Есть ли какое-то целочисленное переполнение для iproute2
?
Спасибо!
Я смог найти iproute2
документация, проливающая свет на проблему.
Благодаря Джонатан Росс ответ, Я узнал, что ifconfig
извлекает данные из /proc/net/dev
. в iproute2
документы похоже, что счетчик пропускной способности в iproute2
«завершается, когда максимальная длина естественного типа данных в архитектуре превышена».
Очевидно, что iproute2
использует 32-битное целое число для хранения этой информации, так как это 64-битная система. После этого счетчик полосы пропускания будет равен 4 ГиБ.
Есть разные способы получения статистики трафика из системы с библиотеками или из ядра, один из которых cat /proc/net/dev
. Я бы проверил этот файл для сравнения.
Слегка ОТ: видимо сбросить можно ifconfig
счетчики с загружаемыми драйверами ядра сетевой карты, но без встроенных драйверов.