Linux 查看网卡接收报文信息命令ethtool


POS(packet over sonet)就是为了在传统SDH/SONET网络上传输IP分组。由于历史上电信的传输基本上都是基于SDH的,无法直接传输IP分组,所以需要使用PoS端口与IP分组网络互连互通。现在很多电信运营商都在计划布设纯IP的传输网络,直接放弃SDH网。(不过基本上都是“计划”而已,好像只有BT在真的做网卡
FIFO buffer
大部分的Intel千兆网卡都内置了 FIFO buffer,通过FIFO buffer 网卡将数据包传入、传出DMA,所以对于高吞吐量的应用来说,这个部件是非常重要的。 不过,Intel 的前兆网卡的差别不大,按官方资料都可支持高负责的应用。不过,集成到主板的ICH8 千兆网卡 82566DC 不知是否因为失误Gigabit adapter只设计了16K的FIFO buffer。这就意味着,默认8K 用来接收,8K 用来发送,其潜在问题,不言而喻。如果FIFO buffer过小,也会增加PCI-Express延迟,使得吞吐在100Kpps左右就到达极限。继而首先flow-control 将不能正常工作,即便不出问题也会出现丢包。
因此,足够大的"Packet buffer",或者称为FIFO 是非常必要的。intel家族的网卡,可以通过查看PBA的值确认其大小,有时候 RX 的buffer大于TX, 例如 PBS 64K, PBA 48K。通常将 RX FIFO buffer 大小定义为 PBA ,可在源码中查看:
oid e1000_reset(struct e1000_adapter *adapter) 

   u32 pba = 0, tx_space, min_tx_space, min_rx_space; 
   u16 fc_high_water_mark = E1000_FC_HIGH_DIFF; 
   bool legacy_pba_adjust = false; 


   
   switch (adapter->hw.mac_type) 
   { 
       case e1000_82542_rev2_0: 
       case e1000_82542_rev2_1: 
       case e1000_82543: 
       case e1000_82544: 
       case e1000_82540: 
       case e1000_82541: 
       
            legacy_pba_adjust = true; 
            pba = E1000_PBA_48K; 
            break; 
       case e1000_82545: 
       case e1000_82545_rev_3: 
       case e1000_82546: 
       case e1000_82546_rev_3: 
            pba = E1000_PBA_48K; 
            break; 
       case e1000_82547: 
       case e1000_82547_rev_2: 
            legacy_pba_adjust = true; 
            pba = E1000_PBA_30K; 
            break; 
       case e1000_82571: 
       case e1000_82572: 
       case e1000_80003es2lan: 
            pba = E1000_PBA_38K; 
            break; 
       case e1000_82573: 
            pba = E1000_PBA_20K; 
            break; 
       case e1000_ich8lan: 
            pba = E1000_PBA_8K;
 }
请注意,就像前面提到的,pba = E1000_PBA_8K;
网卡错误诊断
如果发现网卡丢包,可以通过ethtool查看错误原因 ethtool -S ethX.
MegaRouterXeon-KARAM ~ # ethtool -S eth0 
NIC 
statistics: 
rx_packets: 3282740738 
tx_packets: 3279620759 
rx_bytes: 1890275803477 
tx_bytes: 1885940915317 
rx_broadcast: 243768 
tx_broadcast: 26050 
rx_multicast: 1894634 
tx_multicast: 67842 
rx_errors: 0 
tx_errors: 0 
tx_dropped: 0 
multicast: 1894634 
collisions: 0 
rx_length_errors: 0 
rx_over_errors: 0 
rx_crc_errors: 0 
rx_frame_errors: 0 
rx_no_buffer_count: 113102 
rx_missed_errors: 10308 
tx_aborted_errors: 0 
tx_carrier_errors: 0 
tx_fifo_errors: 0 
tx_heartbeat_errors: 0 
tx_window_errors: 0 
tx_abort_late_coll: 0 
tx_deferred_ok: 30151971 
tx_single_coll_ok: 0 
tx_multi_coll_ok: 0 
tx_timeout_count: 0 
tx_restart_queue: 4967999 
rx_long_length_errors: 0 
rx_short_length_errors: 0 
rx_align_errors: 0 
tx_tcp_seg_good: 102 
tx_tcp_seg_failed: 0 
rx_flow_control_xon: 30545078 
rx_flow_control_xoff: 30730827 
tx_flow_control_xon: 2799 
tx_flow_control_xoff: 5653 
rx_long_byte_count: 1890275803477 
rx_csum_offload_good: 3081285221 
rx_csum_offload_errors: 140979 
rx_header_split: 0 
alloc_rx_buff_failed: 0 
tx_smbus: 0 rx_smbus: 3 dropped_smbus: 0
rx_no_buffer_count: 113102
如果出现这个类型的错误,可能原因是需要增加 "ring" 的大小。例如
MegaRouterXeon-KARAM ~ # ethtool -g eth0 
Ring parameters for eth0: 
Pre-set 
maximums: 
RX: 4096 RX 
Mini: 0 RX 
Jumbo: 0 
TX: 4096 Current hardware settings: 
RX: 1024 RX 
Mini: 0 RX 
Jumbo: 0 

> ethtool -S eth1 内核协议栈对校验和错误的报文会丢弃。

NIC statistics:
     rx_packets: 1859
     tx_packets: 178
     rx_bytes: 1063575
     tx_bytes: 9516
     rx_broadcast: 0
     tx_broadcast: 0
     rx_multicast: 0
     tx_multicast: 0
     rx_errors: 0
     tx_errors: 0
     tx_dropped: 0
     multicast: 0
     collisions: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 0
     rx_frame_errors: 0
     rx_no_buffer_count: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     tx_window_errors: 0
     tx_abort_late_coll: 0
     tx_deferred_ok: 0
     tx_single_coll_ok: 0
     tx_multi_coll_ok: 0
     tx_timeout_count: 0
     tx_restart_queue: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     tx_tcp_seg_good: 0
     tx_tcp_seg_failed: 0
     rx_flow_control_xon: 0
     rx_flow_control_xoff: 0
     tx_flow_control_xon: 0
     tx_flow_control_xoff: 0
     rx_long_byte_count: 1063575
     rx_csum_offload_good: 1740
     rx_csum_offload_errors: 119
     alloc_rx_buff_failed: 0
     tx_smbus: 0
     rx_smbus: 0
     dropped_smbus: 0

你可能感兴趣的:(Linux,Develop)