多队列网卡是一种技术,最初是用来解决网络IO QoS (quality of service)问题的,后来随着网络IO的带宽的不断提升,单核CPU不能完全处满足网卡的需求,通过多队列网卡驱动的支持,将各个队列通过中断绑定到不同的核上,以满足网卡的需求。
常见的有Intel的82575、82576,Boardcom的57711等,下面以公司的服务器使用较多的Intel 82575网卡为例,分析一下多队列网卡的硬件的实现以及linux内核软件的支持。
1.多队列网卡硬件实现
图1.1是Intel 82575硬件逻辑图,有四个硬件队列。当收到报文时,通过hash包头的SIP、Sport、DIP、Dport四元组,将一条流总是收到相同的队列。同时触发与该队列绑定的中断。
图1.1 82575硬件逻辑图
2. 2.6.21以前网卡驱动实现
kernel从2.6.21之前不支持多队列特性,一个网卡只能申请一个中断号,因此同一个时刻只有一个核在处理网卡收到的包。如图2.1,协议栈通过NAPI轮询收取各个硬件queue中的报文到图2.2的net_device数据结构中,通过QDisc队列将报文发送到网卡。
图2.1 2.6.21之前内核协议栈
图2.2 2.6.21之前net_device
3. 2.6.21后网卡驱动实现
2.6.21开始支持多队列特性,当网卡驱动加载时,通过获取的网卡型号,得到网卡的硬件queue的数量,并结合CPU核的数量,最终通过Sum=Min(网卡queue,CPU core)得出所要激活的网卡queue数量(Sum),并申请Sum个中断号,分配给激活的各个queue。
如图3.1,当某个queue收到报文时,触发相应的中断,收到中断的核,将该任务加入到协议栈负责收包的该核的NET_RX_SOFTIRQ队列中(NET_RX_SOFTIRQ在每个核上都有一个实例),在NET_RX_SOFTIRQ中,调用NAPI的收包接口,将报文收到CPU中如图3.2的有多个netdev_queue的net_device数据结构中。
这样,CPU的各个核可以并发的收包,就不会应为一个核不能满足需求,导致网络IO性能下降。
图3.1 2.6.21之后内核协议栈
图3.2 2.6.21之后net_device
4.中断绑定
当CPU可以平行收包时,就会出现不同的核收取了同一个queue的报文,这就会产生报文乱序的问题,解决方法是将一个queue的中断绑定到唯一的一个核上去,从而避免了乱序问题。同时如果网络流量大的时候,可以将软中断均匀的分散到各个核上,避免CPU成为瓶颈。
图4.1 /proc/interrupts
5.中断亲合纠正
一些多队列网卡驱动实现的不是太好,在初始化后会出现图4.1中同一个队列的tx、rx中断绑定到不同核上的问题,这样数据在core0与core1之间流动,导致核间数据交互加大,cache命中率降低,降低了效率。
图5.1 不合理中断绑定
linux network子系统的负责人David Miller提供了一个脚本,首先检索/proc/interrupts文件中的信息,按照图4.1中eth0-rx-0($VEC)中的VEC得出中断MASK,并将MASK
写入中断号53对应的smp_affinity中。由于eth-rx-0与eth-tx-0的VEC相同,实现同一个queue的tx与rx中断绑定到一个核上,如图4.3所示。
图4.2 set_irq_affinity
iqoo怎么设置门禁卡 iqoo手机怎么设置门禁卡
iqoo怎么设置门禁卡,iqoo设置门禁卡的方法如下:1、首先在手机桌面上点击设置,并进入。2、然后点击更多设置,进入后找到NFC选项。3、接着开启NFC开关,同时设置付款方式为vivo钱包。4、其次进入钱包门(0)人阅读时间:2023-08-28天猫魔盒一直桌面正在启动中 天猫魔盒一直停留在开机画面
天猫魔盒一直桌面正在启动中,天猫魔盒一直桌面正在启动中的解决方法如下:1、如果天猫魔盒卡在“桌面正在启动中”,可以切断设备电源;2、之后用手机卡针顶住设备后方的recover或reset小孔,然后插上电源,等待指(0)人阅读时间:2023-08-28bigint是什么意思(big是什意思是什么)
bigint是什么意思,bigint为TransactSQL的系统数据类型,当整数值超过int数据范围时才可以使用。(0)人阅读时间:2023-08-28抖音的粉丝团牌子怎么取下(抖音粉丝牌怎么退团)
抖音的粉丝团牌子怎么取下,以抖音V12.6.0版本为例,用户想要取消抖音的粉丝团牌子时,只需在7天之内与相关用户无任何互动行为,至第八天时,粉丝勋章即可自动熄灭。抖音(Tik Tok)是由今日头条推出的一款短视频(0)人阅读时间:2023-08-28iqoo怎么设置门禁卡 iqoo手机怎么设置门禁卡
iqoo怎么设置门禁卡,iqoo设置门禁卡的方法如下:1、首先在手机桌面上点击设置,并进入。2、然后点击更多设置,进入后找到NFC选项。3、接着开启NFC开关,同时设置付款方式为vivo钱包。4、其次进入钱包门..2023-08-28天猫魔盒一直桌面正在启动中 天猫魔盒一直停留在开机画面
天猫魔盒一直桌面正在启动中,天猫魔盒一直桌面正在启动中的解决方法如下:1、如果天猫魔盒卡在“桌面正在启动中”,可以切断设备电源;2、之后用手机卡针顶住设备后方的recover或reset小孔,然后插上电源,等待指..2023-08-28bigint是什么意思(big是什意思是什么)
bigint是什么意思,bigint为TransactSQL的系统数据类型,当整数值超过int数据范围时才可以使用。..2023-08-28抖音的粉丝团牌子怎么取下(抖音粉丝牌怎么退团)
抖音的粉丝团牌子怎么取下,以抖音V12.6.0版本为例,用户想要取消抖音的粉丝团牌子时,只需在7天之内与相关用户无任何互动行为,至第八天时,粉丝勋章即可自动熄灭。抖音(Tik Tok)是由今日头条推出的一款短视频..2023-08-28