标题:[并发网卡]linux ethtool 查看网卡状态,lspci下是否支持多队列网卡的简介. 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Fri, 16 Dec 2016 11:56:24 +0000 作者:jackxiang 地址:http://jackxiang.com/post/9116/ 内容: 背景:网卡流量80,如果是100M的网卡可能是瓶颈,而如何知道这个网卡是100M还是1000M的?用命令查询一下。阿里云的虚拟机好像看不到,用另一个命令看,这块涉及到网卡是否支持多队列网卡识别,Capabilities: [70] MSI-X: Enable+Masked-TabSize=10,阿里的是:Capabilities: [40] MSI-X: Enable+ Count=3 Masked-,参考链接:http://blog.sina.com.cn/s/blog_aed82f6f0102vwjx.html ,http://blog.csdn.net/wyaibyn/article/details/14109325。 lspci -vvv|grep network -B 1 -A 15 [root@iZ88bkcgbr3Z ~]# lspci -vvv|grep network -B 1 -A 15 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device Subsystem: Red Hat, Inc Device 0001 Physical Slot: 3 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- 1,则该网卡是多队列网卡。 2.如何打开网卡多队列 cat /etc/modprobe.conf查看网卡驱动。 broadcom网卡的驱动为e1000,默认打开网卡多队列 修改完驱动后需要重启。查看是否打开了网卡多队列,以broadcom网卡为例。cat /proc/interrupt | grep eth。产生了8个网卡队列,并且对应着不同的中断。 3.设置中断CPU亲和性方法 将中断52-59分别绑定到CPU0-7上。 echo "1" > /proc/irq/52/smp_affinity echo "2" > /proc/irq/53/smp_affinity echo "4" > /proc/irq/54/smp_affinity echo "8" > /proc/irq/55/smp_affinity echo "10" > /proc/irq/56/smp_affinity echo "20" > /proc/irq/57/smp_affinity echo "40" > /proc/irq/58/smp_affinity echo "80" > /proc/irq/59/smp_affinity /proc/irq/${IRQ_NUM}/smp_affinity为中断号为IRQ_NUM的中断绑定的CPU核的情况。以十六进制表示,每一位代表一个CPU核。 1(00000001)代表CPU0 2(00000010)代表CPU1 3(00000011)代表CPU0和CPU1 阿里私有云虚拟的网卡有些简单: ethtool eth0 Settings for eth0: Link detected: yes ethtool 工具关于网络协商功能介绍; ethtool - Display or change ethernet card settings(ethtool 是用来显示和更改网卡设置的工具);这个工具比较复杂,功能也特别多。由于洋文比较难懂。所以我们还是把网络设备协商方式的设置方法说一说。 2.1 ethtool 显示网络端口设置功能; 这个功能比较好办。就是ethtool 后面直接接网絽接口就行;比如下面的例子; [root@localhost ~]# ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised auto-negotiation: No 注:自动协商关闭 Speed: 100Mb/s 注:速度 100Mb Duplex: Full 注:全双工 Port: MII PHYAD: 32 Transceiver: internal Auto-negotiation: off Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) Link detected: yes 注:eth0已经激活; 摘自:https://my.oschina.net/u/1986074/blog/517033 ====================================================================== 现象 Redis 进程 cpu 跑满 原因 没有开启网卡多队列,导致只有一个cpu被使用 网卡在同一时刻只能产生一个中断,CPU在同一时刻只能响应一个中断,由于配置的原因,只有一颗cpu去响应中断(这个是可调的),所以所有的流量都压在了一个CPU上 ,把CPU跑满了。 为什么只有一颗cpu去响应中断? 这个是历史设计的问题,一开始CPU都是一核的,只能由唯一的CPU去响应,后来逐步发展出了多核的CPU,才有了可调整的参数去调整到底由几个CPU去处理。 处理方法 修改方案 1. 修改/etc/modprobe.d/modprobe.conf 在文件最后追加三行 alias eth0 igb alias eth1 igb options igb RSS=8,8 image001.png 2. 修改完之后就需要重启网络才能生效 只需要重新加载内核模块和重启网络服务就可以了,实际测试需要20s时间 操作命令 nohup rmmod igb && modprobe igb && /etc/init.d/network restart && /etc/rc3.d/S27route 来自:http://blog.csdn.net/fjq5a/article/details/53747444 Generated by Jackxiang's Bo-blog 2.1.1 Release