Qual é o significado do valor 'tx_timeouts' do ethtool?

1

A utilização de ethtool (versão 6) dá, e. a seguinte saída:

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

Qual é o significado do valor para tx_timeouts ? O que o número 142 conta?

    
por Alex 07.08.2014 / 07:51

2 respostas

2

Na seção Drivers de dispositivos Linux do Linux 'Tempos limite de transmissão':

Most drivers that deal with real hardware have to be prepared for that hardware to fail to respond occasionally. Interfaces can forget what they are doing, or the system can lose an interrupt. This sort of problem is common with some devices designed to run on personal computers.

Many drivers handle this problem by setting timers; if the operation has not completed by the time the timer expires, something is wrong. The network system, as it happens, is essentially a complicated assembly of state machines controlled by a mass of timers. As such, the networking code is in a good position to detect transmission timeouts automatically.

Thus, network drivers need not worry about detecting such problems themselves. Instead, they need only set a timeout period, which goes in the watchdog_timeo field of the net_device structure. This period, which is in jiffies, should be long enough to account for normal transmission delays (such as collisions caused by congestion on the network media).

If the current system time exceeds the device's trans_start time by at least the timeout period, the networking layer will eventually call the driver's tx_timeout method. That method's job is to do whatever is needed to clear up the problem and to ensure the proper completion of any transmissions that were already in progress. It is important, in particular, that the driver not lose track of any socket buffers that have been entrusted to it by the networking code.

Portanto, parece que a estrutura tx_timeout está lá para garantir que o sistema não trave quando algo der errado no hardware. Eu não tenho idéia do porque o seu não é 0, mas pode ter algo a ver com o driver da NIC.

    
por 07.08.2014 / 09:38
2

tx_timeout é, estritamente falando, o número de vezes que a rotina do driver de dispositivo para tratamento de timeouts foi chamada.

Um tempo limite de transmissão ocorre sempre que o hardware de transmissão não responde. Isso ocorre na vida real porque, por exemplo, uma interrupção é perdida ou porque sua NIC tem forgotten o que estava fazendo. Não é de forma alguma uma ocorrência rara, especialmente em PCs.

Os drivers de dispositivo são projetados para lidar com essas ocorrências por meio de um timer: isso marca o tempo em que a transmissão deve ocorrer; Caso contrário, o controle é transferido para a rotina tx_timeout , que executará as ações apropriadas para resolver o problema e concluir o trabalho de transmissão. Ele também marcará a ocorrência do tempo limite nas estatísticas do driver e o restaurará para um estado saudável e primitivo, de modo que a conclusão do trabalho atual e a retomada do processamento da fila possam ocorrer.

O número de eventos que você marcou é pequeno e não é preocupante. Se o problema persistir, você pode querer investigar a presença de mensagens de erro adicionais no dmesg e os vários arquivos de log. Tal como está, este número simples não é suficiente para um diagnóstico adequado.

    
por 07.08.2014 / 09:42