Linux多隊列網(wǎng)卡的硬件的實現(xiàn)詳解

6.多隊列網(wǎng)卡識別
#lspci -vvv
Ethernet controller的條目內(nèi)容,如果有MSI-X && Enable+ && TabSize > 1,則該網(wǎng)卡是多隊列網(wǎng)卡,如圖4.4所示。
圖4.4 lspci內(nèi)容
Message Signaled Interrupts(MSI)是PCI規(guī)范的一個實現(xiàn),可以突破CPU 256條interrupt的限制,使每個設(shè)備具有多個中斷線變成可能,多隊列網(wǎng)卡驅(qū)動給每個queue申請了MSI。MSI-X是MSI數(shù)組,Enable+指使能,TabSize是數(shù)組大小。
# 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
相關(guān)文章
- Linux多個網(wǎng)卡怎么添加永久路由?當(dāng)Linux系統(tǒng)中有多個網(wǎng)卡的時候,我們需要為另外的一些網(wǎng)卡添加路由,才能發(fā)揮網(wǎng)卡的實際作用,下面我們就來看看詳細的教程,需要的朋友可2016-08-30
Linux系統(tǒng)基礎(chǔ)筆記之網(wǎng)卡安裝一般步驟簡介
這篇文章主要介紹了Linux系統(tǒng)基礎(chǔ)筆記之網(wǎng)卡安裝一般步驟簡介,需要的朋友可以參考下2016-05-17Linux系統(tǒng)中配置和獲取無線網(wǎng)卡信息的命令用法
這篇文章主要介紹了Linux系統(tǒng)中配置和獲取無線網(wǎng)卡信息的命令用法,分別介紹了iwpriv和iwlist的使用,需要的朋友可以參考下2016-01-18Linux系統(tǒng)復(fù)制vmware 虛擬機后網(wǎng)卡不能啟動該怎么辦?
Linux系統(tǒng)復(fù)制vmware 虛擬機后網(wǎng)卡不能啟動該怎么辦?Linux系統(tǒng)復(fù)制虛擬機后發(fā)現(xiàn)Linux系統(tǒng)中的網(wǎng)卡不能啟動了,沒辦法上網(wǎng),出現(xiàn)這個問題是因為網(wǎng)卡配置文件中的mac地址變2015-12-14- 這篇文章主要介紹了linux下安裝編譯網(wǎng)卡驅(qū)動的方法,需要的朋友可以參考下2015-09-03
linux系統(tǒng)怎么重啟網(wǎng)卡?linux重啟網(wǎng)卡的三種教程
linux系統(tǒng)怎么重啟網(wǎng)卡?在實際工作中,經(jīng)常會遇到Linux系統(tǒng)進行重啟網(wǎng)卡的操作。在這里整理一下,進行多種方法的網(wǎng)卡重啟,需要的朋友可以參考下2015-07-10在Linux系統(tǒng)下實現(xiàn)雙網(wǎng)卡綁定的教程
這篇文章主要介紹了在Linux系統(tǒng)下實現(xiàn)雙網(wǎng)卡綁定的教程,本文以CentOS系統(tǒng)為環(huán)境進行演示,需要的朋友可以參考下2015-06-10新裝Linux系統(tǒng)沒有網(wǎng)卡驅(qū)動的解決辦法和步驟
這篇文章主要介紹了新裝Linux系統(tǒng)沒有網(wǎng)卡驅(qū)動的解決辦法和步驟,本文先是補充了幾個需要用到的命令相關(guān)知識,然后給出了詳解解決步驟,需要的朋友可以參考下2015-05-08- 這篇文章主要介紹了Linux下配置vlan網(wǎng)卡教程,本文使用7步完成vlan網(wǎng)卡設(shè)置,需要的朋友可以參考下2015-02-09
Linux下簡單限制網(wǎng)卡帶寬的設(shè)置方法
Linux下限制網(wǎng)卡的帶寬,可用來模擬服務(wù)器帶寬耗盡,從而測試服務(wù)器在此時的訪問效果2013-02-13