Linux多队列网卡的硬件的实现详解
6.多队列网卡识别
#lspci -vvv
Ethernet controller的条目内容,如果有MSI-X && Enable+ && TabSize > 1,则该网卡是多队列网卡,如图4.4所示。

图4.4 lspci内容
Message Signaled Interrupts(MSI)是PCI规范的一个实现,可以突破CPU 256条interrupt的限制,使每个设备具有多个中断线变成可能,多队列网卡驱动给每个queue申请了MSI。MSI-X是MSI数组,Enable+指使能,TabSize是数组大小。
# setting up irq affinity according to /proc/interrupts
# 2008-11-25 Robert Olsson
# 2009-02-19 updated by Jesse Brandeburg
#
# > Dave Miller:
# (To get consistent naming in /proc/interrups)
# I would suggest that people use something like:
# char buf[IFNAMSIZ+6];
#
# sprintf(buf, "%s-%s-%d",
# netdev->name,
# (RX_INTERRUPT ? "rx" : "tx"),
# queue->index);
#
# Assuming a device with two RX and TX queues.
# This script will assign:
#
# eth0-rx-0 CPU0
# eth0-rx-1 CPU1
# eth0-tx-0 CPU0
# eth0-tx-1 CPU1
#
set_affinity()
{
MASK=$((1<<$VEC))
printf "%s mask=%X for /proc/irq/%d/smp_affinity\n" $DEV $MASK $IRQ
printf "%X" $MASK > /proc/irq/$IRQ/smp_affinity
#echo $DEV mask=$MASK for /proc/irq/$IRQ/smp_affinity
#echo $MASK > /proc/irq/$IRQ/smp_affinity
}
if [ "$1" = "" ] ; then
echo "Description:"
echo " This script attempts to bind each queue of a multi-queue NIC"
echo " to the same numbered core, ie tx0|rx0 --> cpu0, tx1|rx1 --> cpu1"
echo "usage:"
echo " $0 eth0 [eth1 eth2 eth3]"
fi
# check for irqbalance running
IRQBALANCE_ON=`ps ax | grep -v grep | grep -q irqbalance; echo $?`
if [ "$IRQBALANCE_ON" == "0" ] ; then
echo " WARNING: irqbalance is running and will"
echo " likely override this script's affinitization."
echo " Please stop the irqbalance service and/or execute"
echo " 'killall irqbalance'"
fi
#
# Set up the desired devices.
#
for DEV in $*
do
for DIR in rx tx TxRx
do
MAX=`grep $DEV-$DIR /proc/interrupts | wc -l`
if [ "$MAX" == "0" ] ; then
MAX=`egrep -i "$DEV:.*$DIR" /proc/interrupts | wc -l`
fi
if [ "$MAX" == "0" ] ; then
echo no $DIR vectors found on $DEV
continue
#exit 1
fi
for VEC in `seq 0 1 $MAX`
do
IRQ=`cat /proc/interrupts | grep -i $DEV-$DIR-$VEC"$" | cut -d: -f1 | sed "s/ //g"`
if [ -n "$IRQ" ]; then
set_affinity
else
IRQ=`cat /proc/interrupts | egrep -i $DEV:v$VEC-$DIR"$" | cut -d: -f1 | sed "s/ //g"`
if [ -n "$IRQ" ]; then
set_affinity
fi
fi
done
done
done
相关文章
- Linux多个网卡怎么添加永久路由?当Linux系统中有多个网卡的时候,我们需要为另外的一些网卡添加路由,才能发挥网卡的实际作用,下面我们就来看看详细的教程,需要的朋友可2016-08-30
- 这篇文章主要介绍了Linux系统基础笔记之网卡安装一般步骤简介,需要的朋友可以参考下2016-05-17
- 这篇文章主要介绍了Linux系统中配置和获取无线网卡信息的命令用法,分别介绍了iwpriv和iwlist的使用,需要的朋友可以参考下2016-01-18
Linux系统复制vmware 虚拟机后网卡不能启动该怎么办?
Linux系统复制vmware 虚拟机后网卡不能启动该怎么办?Linux系统复制虚拟机后发现Linux系统中的网卡不能启动了,没办法上网,出现这个问题是因为网卡配置文件中的mac地址变2015-12-14- 这篇文章主要介绍了linux下安装编译网卡驱动的方法,需要的朋友可以参考下2015-09-03
- linux系统怎么重启网卡?在实际工作中,经常会遇到Linux系统进行重启网卡的操作。在这里整理一下,进行多种方法的网卡重启,需要的朋友可以参考下2015-07-10
- 这篇文章主要介绍了在Linux系统下实现双网卡绑定的教程,本文以CentOS系统为环境进行演示,需要的朋友可以参考下2015-06-10
- 这篇文章主要介绍了新装Linux系统没有网卡驱动的解决办法和步骤,本文先是补充了几个需要用到的命令相关知识,然后给出了详解解决步骤,需要的朋友可以参考下2015-05-08
- 这篇文章主要介绍了Linux下配置vlan网卡教程,本文使用7步完成vlan网卡设置,需要的朋友可以参考下2015-02-09
- Linux下限制网卡的带宽,可用来模拟服务器带宽耗尽,从而测试服务器在此时的访问效果2013-02-13


最新评论