1

Использование ethtool (версия 6) дает, например, следующий вывод:

$ ethtool -S eth0
NIC statistics:
     early_rx: 0
     tx_buf_mapped: 0
     tx_timeouts: 142
     rx_lost_in_ring: 0

Что означает значение для tx_timeouts? Что значит число 142?

2 ответа2

2

Из раздела «Драйверы устройств Linux O'reilly « Тайм-ауты передачи »:

Большинство драйверов, которые имеют дело с реальным оборудованием, должны быть готовы к тому, что это оборудование иногда не реагирует. Интерфейсы могут забыть, что они делают, или система может потерять прерывание. Такая проблема характерна для некоторых устройств, предназначенных для работы на персональных компьютерах.

Многие драйверы решают эту проблему, устанавливая таймеры; если операция не завершена к моменту истечения таймера, значит что-то не так. Как оказалось, сетевая система представляет собой сложную совокупность конечных автоматов, управляемых массой таймеров. Таким образом, сетевой код находится в хорошем положении для автоматического определения таймаутов передачи.

Таким образом, сетевые драйверы не должны беспокоиться об обнаружении таких проблем сами. Вместо этого им нужно только установить период ожидания, который указывается в поле watchdog_timeo структуры net_device. Этот период, который находится в затруднительном положении, должен быть достаточным для учета обычных задержек передачи (таких как коллизии, вызванные перегрузкой на сетевых средах).

Если текущее системное время превышает время trans_start устройства, по крайней мере, на период ожидания, сетевой уровень в конечном итоге вызовет метод драйвера tx_timeout. Работа этого метода состоит в том, чтобы делать все необходимое для устранения проблемы и обеспечения надлежащего завершения любых передач, которые уже выполнялись. В частности, важно, чтобы драйвер не потерял ни одного буфера сокета, который был доверен ему сетевым кодом.

Таким образом, кажется, что структура tx_timeout предназначена для того, чтобы система не блокировалась, когда что-то не работает в оборудовании. Я понятия не имею, почему у вас не 0, но это может быть связано с драйвером NIC.

2

Строго говоря, tx_timeout - это число раз, когда вызывается процедура драйвера устройства для обработки таймаутов.

Тайм-аут передачи происходит всякий раз, когда оборудование передачи не отвечает. Это происходит в реальной жизни, потому что, например, прерывание потеряно или потому что ваша сетевая карта forgotten что делает. Это отнюдь не редкое явление, особенно на шт.

Драйверы устройств предназначены для борьбы с этими событиями с помощью таймера: он отмечает время, в течение которого должна происходить передача; если это не так, управление передается в процедуру tx_timeout, которая предпримет соответствующие действия для решения проблемы и выполнения задания передачи. Он также будет отмечать возникновение тайм-аута в статистике драйвера и восстанавливать его в работоспособное, нетронутое состояние, так что может иметь место как завершение текущего задания, так и возобновление обработки очереди.

Количество отмеченных вами событий невелико и ни в коем случае не вызывает беспокойства. Если проблема не устранена, вы можете изучить наличие дополнительных сообщений об ошибках в dmesg и различных файлов журналов. Как оказалось, этого простого числа недостаточно для правильного диагноза.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .