Linux 查看网卡接收报文信息命令ethtool
2013-10-31 17:53
357 查看
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 查看系统信息命令 cpu、内存、进程、硬盘、网卡
- Linux 查看系统信息命令 cpu、内存、进程、硬盘、网卡
- linux 操作系统中ifconfig查看和设置网卡信息命令的使用
- linux查看网卡信息的几种方法(命令)
- linux下查看网卡信息的命令
- linux下如何用命令配置网卡、dns、网关、如何查看网卡状态、如何查看网卡信息。
- linux下查看网卡信息的命令
- linux下查看网卡信息的命令
- linux系统中查看网卡的信息命令小汇
- Linux 环境下查看网卡的信息的命令
- linux下如何用命令配置网卡、dns、网关、如何查看网卡状态、如何查看网卡信息。
- linux 网卡流量查看信息
- Linux系统信息查看命令大全
- linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)
- linux下查看内存硬件信息命令dmidecode
- Linux中常用的查看系统信息的命令
- Linux系统信息查看命令大全
- 转:Linux查看系统信息的一些命令及查看已安装软件包的命令
- Linux环境下查看服务器硬件配置信息以及服务占用资源命令
- linux查看系统信息命令