您的位置:首页 > 运维架构 > Linux

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

2013-10-31 17:53 357 查看



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: