网卡问题总结

网卡问题总结

写作目的: 总结下工作中遇到的问题,整理下收集的资料

包括下面三个方面:

    1:Linux网卡中断使单个CPU过载
    2:网卡绑定
    3:常用的网卡操作
Linux网卡中断使单个CPU过载

       在工作中遇到过UDP大量丢包的情况,在持续调查中发现某个CPU的使用率高达100%时(在终端中输入top,然后在输入1,可以看到各个CPU的使用情况),顿时感觉有问题,然后
沿着这个方向一调查,结果确实有很多人已经遇到过类似的情况,原因主要是网卡的大量中断中断使单个CPU过载

解决方法如下:

1:IRQBALANC/CPU亲和度(内核版本小于2.6.13可行)

从2.6.13起,内核去除了irqbalance 和 cpu亲和度的支持,
因为cpu cache失效和tcp包乱序问题

详细信息:

       Linux 多核下绑定硬件中断到不同 CPU

       大量小包的CPU密集型系统调优案例一则

2:RPS/RFS(内核版本大于等于2.6.35版本)

       RPS 全称是 Receive Packet Steering, 这是Google工程师 Tom Herbert ([email protected] )提交的内核补丁, 在2.6.35进入Linux内核. 这个patch采用软件模拟的方式,实现了多队列网卡所提供的功能,分散了在多CPU系统上数据接收时的负载, 把软中断分到各个CPU处理,而不需要硬件支持,大大提高了网络性能。

       RFS 全称是 Receive Flow Steering, 这也是Tom提交的内核补丁,它是用来配合RPS补丁使用的,是RPS补丁的扩展补丁,它把接收的数据包送达应用所在的CPU上,提高cache的命中率。
这两个补丁往往都是一起设置,来达到最好的优化效果, 主要是针对单队列网卡多CPU环境(多队列多重中断的网卡也可以使用该补丁的功能,但多队列多重中断网卡有更好的选择:SMP IRQ affinity)原理

详细信息

       Linux内核 RPS/RFS功能分析

网卡绑定

       网卡绑定一共有7中方式,bond0~bond6,常用的有bond0,bond1,bond6

  • bond0:round robin

    特点:
    (1)所有链路处于负载均衡状态,轮询方式往每条链路发送报文,基于per packet方式发送。服务上ping 一个相同地址:1.1.1.1 双网卡的两个网卡都有流量发出。负载到两条链路上,说明是基于per packet方式 ,进行轮询发送。

    (2)这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。

    注意:

    1:接线方式如下,两个网线需要接同一个交换机

    在此输入图片描述

    2:由于包是以轮询的方式发出,容易出现out of order的情况

  • bond1:active-backup

    特点:一个端口处于主状态 ,一个处于从状态,所有流量都在主链路上处理,从不会有任何流量。当主端口down掉时,从端口接手主状态。

  • bond6:adaptive load balancing

    特定:当一个网卡流量跑完后,另外一个网卡才工作
    注意:

    1:接线方式如下,两个网线需要接不同交换机
    在此输入图片描述

网卡绑定模式的七种方式详细介绍:网卡绑定的7种模式详细介绍

常用的网卡操作

1:cat /proc/net/bonding/bond0 查看绑定的模式

2:ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等
3: network service restart // 重启网卡

[详细资料]

       Linux网卡攻略

       Linux 查看网卡全双工还是半双工以及设置网卡为半双工

                                                        有错误在所难免,希望大家都多多指正,谢谢

                                                                                    frank2020 2014年12月7日

你可能感兴趣的:(网卡问题总结)