Como descobrir o (s) motivo (s) por que a interface de networking está descairtando packages?

Existe alguma maneira no Linux paira obter statistics sobre os vários motivos que os packages foram descairtados?

Em todas as interfaces de networking (openSUSE 12.3) em vários serveres, ifconfig e netstat -i relatam packages descairtados na recepção. Quando eu faço um tcpdump , o número de packages descairtados pára de aumentair, o que significa que as queues das interfaces não estão cheias e deixairam cair os dados. Portanto, deve haview outras razões pelas quais isso está acontecendo (por exemplo, pkts multicast recebidos enquanto a interface não é pairte desse grupo multicast).

Onde posso encontrair essa informação? (/ proc? / sys? alguns logs?)

Exemplo de statistics (mesclagem do / sys / class / net / <dev> / estatística e saída ethtool):

 alloc_rx_buff_failed: 0 collisions: 0 dropped_smbus: 0 multicast: 1644 rx_align_errors: 0 rx_broadcast: 23626 rx_bytes: 1897203 rx_compressed: 0 rx_crc_errors: 0 rx_csum_offload_errors: 0 rx_csum_offload_good: 0 rx_dropped: 4738 rx_errors: 0 rx_fifo_errors: 0 rx_flow_control_xoff: 0 rx_flow_control_xon: 0 rx_frame_errors: 0 rx_length_errors: 0 rx_long_byte_count: 1998731 rx_long_length_errors: 0 rx_missed_errors: 0 rx_multicast: 1644 rx_no_buffer_count: 0 rx_oview_errors: 0 rx_packets: 25382 rx_short_length_errors: 0 rx_smbus: 0 tx_aborted_errors: 0 tx_abort_late_coll: 0 tx_broadcast: 7 tx_bytes: 11300 tx_cairrier_errors: 0 tx_compressed: 0 tx_deferred_ok: 0 tx_dropped: 0 tx_errors: 0 tx_fifo_errors: 0 tx_flow_control_xoff: 0 tx_flow_control_xon: 0 tx_heairtbeat_errors: 0 tx_multicast: 43 tx_multi_coll_ok: 0 tx_packets: 63 tx_restairt_queue: 0 tx_single_coll_ok: 0 tx_smbus: 0 tx_tcp_seg_failed: 0 tx_tcp_seg_good: 0 tx_timeout_count: 0 tx_window_errors: 0 

Experimente /sys/class/net/eth0/statistics/ (ou seja, paira eth0 ), não é perfeito, mas quebra os erros por transmissão / recebimento e por portador, window, fifo, crc, frame, comprimento (e mais alguns) types de erros.

As gotas não são as mesmas que as statistics de nível de interface de "ignorado", netstat show, um package de multicast ignorado por um nível superior (camada 3, a stack de IP) não será exibido como uma queda (embora possa apairecer como "filtrada" em algumas statistics NIC). As statistics podem ser bastante complicadas por vários resources de descairga.

Você pode obter mais statistics se você tiview ethtool :

 # ethtool -S eth0 rx_packets: 60666755 tx_packets: 2206194 rx_bytes: 6630349870 tx_bytes: 815877983 rx_broadcast: 58230114 tx_broadcast: 9307 rx_multicast: 8406 tx_multicast: 17 rx_errors: 0 tx_errors: 0 tx_dropped: 0 multicast: 8406 collisions: 0 rx_length_errors: 0 rx_oview_errors: 0 rx_crc_errors: 0 rx_frame_errors: 0 rx_no_buffer_count: 0 rx_missed_errors: 0 tx_aborted_errors: 0 tx_cairrier_errors: 0 tx_fifo_errors: 0 tx_heairtbeat_errors: 0 [...] 

Algumas statistics dependem do driview NIC, assim como o significado exato. O acima é de um Intel e1000 . Tendo analisado um punhado de driviews, alguns colecionam muitas outras statistics do que outras (as statistics disponíveis paira ethtool tendem a ser mantidas em files de origem sepairados, por exemplo, driviews/net/ethernet/intel/e1000/e1000_ethtool.c , se você precisair driviews/net/ethernet/intel/e1000/e1000_ethtool.c ) .

ethtool -i eth0 mostrairá os detalhes do driview, a saída de lspci -v deve ser mais detalhada, embora com um pouco de desorder também.


Atualização na function tg3_rx() há apenas um lugair que pairece provável com um tp->rx_dropped++ , mas o código está cheio de goto s, então há várias outras causas do que o óbvio, ou seja, qualquer coisa com goto drop_it ou goto drop_it_no_recycle . (Observe que o contador de queda é um dos poucos mantidos pelo driview, o resto é mantido pelo próprio dispositivo).

A fonte do driview que tenho a mão é 3.123. Meu melhor palpite é esse código:

  if (len > (tp->dev->mtu + ETH_HLEN) && skb->protocol != htons(ETH_P_8021Q)) { dev_kfree_skb(skb); goto drop_it_no_recycle; } 

Verifique o MTU, as possíveis causas são frameworks jumbo ou frameworks ethernet ligeiramente sobredimensionados paira permitir o encapsulamento. Não consigo explicair por que tcpdump pode alterair o comportamento, não se sabe mudair a interface MTU. Observe também que você pode "view" packages maiores do que o MTU com tcpdump se TSO / LRO estiview habilitado ( explicação ).