By Robison, Clayne B (Intel)
簡(jiǎn)介
無(wú)論是應(yīng)用、容器還是微服務(wù),Intel® Ethernet Flow Director (Intel® Ethernet FD) 技術(shù)都可將以太報(bào)文精準(zhǔn)送達(dá)使用它的進(jìn)程所在的CPU核,。這比RSS(Receive Side Scaling)更進(jìn)一步,RSS只是將包送到相應(yīng)的核做中斷處理,然后轉(zhuǎn)發(fā)給需要它的進(jìn)程。
Intel Ethernet Flow Director技術(shù)支持定制化的過(guò)濾器,以便將收到的包分發(fā)給不同的隊(duì)列,并且也支持非常精準(zhǔn)的流控。它能將包流與CPU核心對(duì)應(yīng)起來(lái),并且支持多個(gè)彈性的流分類以及負(fù)載均衡的參數(shù)。在ATR (Application Targeting Routing)的模式下,如果需要利用硬件來(lái)做Linux的RFS (Receive Flow Steering) 的Offloading,F(xiàn)D是必須的,同時(shí)RPS (Receive Packet Steering) 和RFS需要被關(guān)閉。
它可以對(duì)物理機(jī)的Linux做非常好的優(yōu)化,尤其是包很小并且吞吐量很大的時(shí)候。因?yàn)榘幚硪呀?jīng)offloading到了網(wǎng)卡硬件,同時(shí)Intel FD技術(shù)也可以用來(lái)防止DoS攻擊。
支持的設(shè)備
Intel 以太網(wǎng)FD技術(shù)支持在使用ixgbe驅(qū)動(dòng)的設(shè)備,包括:
• 英特爾® 以太網(wǎng)聚合網(wǎng)絡(luò)適配器X520
• 英特爾® 以太網(wǎng)聚合網(wǎng)絡(luò)適配器X540
• 英特爾® 以太網(wǎng)控制器82599家族
也支持使用i40e驅(qū)動(dòng)程序的設(shè)備上
• 英特爾® 以太網(wǎng)控制器X710家族
• 英特爾® 以太網(wǎng)控制器XL710家族
同時(shí),Data Plane Development Kit (DPDK) 對(duì)上述設(shè)備也有支持,關(guān)于如何使用 DPDK 啟用FD請(qǐng)參見(jiàn) DPDK文檔 。
要判斷你的設(shè)備是否支持FD技術(shù),使用ethtool命令來(lái)檢查:
# ethtool --show-features <interface name> | grep ntuple
如果ntuple-filters功能旁顯示了off或者on,就表示你的網(wǎng)卡支持FD技術(shù)。如果ntuple-filters旁邊顯示的 [fixed],表示你的網(wǎng)卡設(shè)備不支持FD。
啟用Intel® Ethernet Flow Director
ixgbe支持的驅(qū)動(dòng)程序參數(shù)
在ixgbe驅(qū)動(dòng)支持的設(shè)備上,有兩個(gè)FD相關(guān)的參數(shù)可以在加載階段被傳遞到Linux Kernel
• FdirPballoc
• AtrSampleRate
> FdirPballoc
這個(gè)參數(shù)規(guī)定了分配給FD的包緩存大小,可以選擇1-3, “1”表示緩存使用64k,“2”表示128k,“3”表示256k。如果參數(shù)沒(méi)有被顯式指定,默認(rèn)就是1,即64k。
> AtrSampleRate
AtrSampleRate參數(shù)指定了規(guī)則被創(chuàng)建之前需要忽略多少個(gè)網(wǎng)絡(luò)包,可變范圍是0~255。如果沒(méi)有顯式指定該參數(shù),默認(rèn)值為20,意味著如果要?jiǎng)?chuàng)建一條新的報(bào)文流規(guī)則,每次第20個(gè)新的包會(huì)被做一次判斷。如果該參數(shù)指定為0,表示關(guān)閉ATR模式,并且發(fā)送隊(duì)列里面也不會(huì)拿任何包作為包流規(guī)則的樣本。
注:上述兩個(gè)驅(qū)動(dòng)參數(shù)在i40e的驅(qū)動(dòng)上不需要被用到,驅(qū)動(dòng)自己會(huì)做調(diào)整。
要啟用這些參數(shù),首先移除驅(qū)動(dòng)。(注意,如果你是通過(guò)SSH連接服務(wù)器,這可能會(huì)讓你斷網(wǎng))
# rmmod ixgbe
然后重新加載ixgbe驅(qū)動(dòng)并且給相應(yīng)的參數(shù):
# modprobe ixgbe FdirPballoc=3,2,2,3
AtrSampleRate=31,63,127,255
可以看到上面的命令中每個(gè)參數(shù)有四個(gè)值。這是因?yàn)槲业臏y(cè)試系統(tǒng)中有兩張卡,82599與X540,每張卡有兩個(gè)網(wǎng)口。這會(huì)按照PCI設(shè)備的BDF (Bus/Device/Function) 排序來(lái)應(yīng)用到不同的網(wǎng)口。用下面的命令可以看到系統(tǒng)的BDF順序。
# lshw -c network -businfo
基于這樣的系統(tǒng)配置,用上面的modprobe命令會(huì)給X540-AT2 (3:00.0) 分配FdirPballoc和AtrSampleRate的值分別是3和31,相應(yīng)的,82599 (81:00.1) 的一個(gè)端口能拿到3和255的參數(shù)
一旦確定你的Intel品牌的服務(wù)器網(wǎng)卡支持FD技術(shù),并且你已經(jīng)給驅(qū)動(dòng)相應(yīng)的參數(shù),執(zhí)行下面的命令去啟用FD:
# ethtool --features enp4s0f0 ntuple on
因?yàn)檫@個(gè)命令只指示了哪個(gè)Rx隊(duì)列應(yīng)該被送到,理論上接下來(lái)應(yīng)該將Rx隊(duì)列和進(jìn)程、應(yīng)用或者容器去做綁定。這已經(jīng)超出了本文檔的討論范圍,但這個(gè)可以用taskset命令來(lái)完成。綁定IRQ與CPU可以用set_irq_affinity腳本(已經(jīng)包含在i40e和ixgbe的驅(qū)動(dòng)中)來(lái)做,在這里可以找到最新版本的驅(qū)動(dòng) Intel Support: Drivers and Software 。
IRQ Affinity設(shè)置可以在這個(gè)tuning guide文檔的IRQ Affinity的段落找到 。
使用Intel Ethernet Flow Director技術(shù)
FD技術(shù)有兩種運(yùn)行模式:外部編程(EP)模式與ATR模式。只要我們通過(guò)上面的步驟啟用了FD,默認(rèn)就啟動(dòng)了ATR模式,讓驅(qū)動(dòng)進(jìn)入多發(fā)送隊(duì)列模式。如果運(yùn)行在EP模式,用戶或者管理編排軟件可以手動(dòng)的設(shè)置包的走向。
應(yīng)用導(dǎo)向路由 (Application Targeting Routing)
在ATR模式中, FD從Tx隊(duì)列里拿到外發(fā)包的字段去填充8K的完美匹配過(guò)濾(Perfect-Match Filter)表。選擇哪些包的字段取決于包的類型,比如過(guò)濾TCP的字段會(huì)和UDP的不同。FD會(huì)用完美匹配過(guò)濾表去智能路由收包到不同的Rx隊(duì)列。
如果要禁用ATR模式切換到EP模式,簡(jiǎn)單的用ethtool命令添加一條過(guò)濾規(guī)則 (下方Adding Filters章節(jié)),驅(qū)動(dòng)會(huì)自動(dòng)的切換進(jìn)入EP模式。如果要切換回到ATR模式,使用ethtool命令清空規(guī)則即可(下方Removing Filters 章節(jié))。
外部編程模式(Externally Programmed Mode)
當(dāng)FD運(yùn)行在EP(External Programmed)模式,包流可以被手動(dòng)的管理,可以是管理員輸入的規(guī)則,也可以是外部的編排管理軟件(比如OpenFlow)。像上面說(shuō)過(guò)的一樣,只要通過(guò)ethtool命令手動(dòng)輸入一條流的規(guī)則,F(xiàn)D就會(huì)自動(dòng)進(jìn)入EP模式。
> Adding Filters
下面的命令展示了如何增加過(guò)濾表,使用ethtool的-U, -N or –config-ntuple等等參數(shù)
指定從10.23.4.6到10.23.4.18的包使用4號(hào)隊(duì)列,用下面的命令:
# ethtool --config-ntuple flow-type tcp4 src-ip 10.23.4.6 dst-ip 10.23.4.18 action 4
注意:不用’loc’參數(shù),這個(gè)規(guī)則會(huì)放在完美匹配過(guò)濾表的1號(hào)位置,如果1號(hào)位置已經(jīng)有規(guī)則,就會(huì)被覆蓋掉
轉(zhuǎn)發(fā)2號(hào)隊(duì)列所有來(lái)自192.168.10.1:2000的ipv4 TCP包到192.168.10.2:2001,這條規(guī)則放在33號(hào)位置(會(huì)覆蓋原來(lái)在33號(hào)的規(guī)則,如果有的話)
# ethtool --config-ntuple <interface name> flow-type tcp4 src-ip 192.168.10.1 dst-ip 192.168.10.2 src-port 2000 dst-port 2001 action 2 loc 33
Drops all UDP packets from 10.4.83.2:
丟棄所有來(lái)自10.4.83.2的所有UDP報(bào)文:
# ethtool --config-ntuple flow-type udp4 src-ip 10.4.82.2 action -1
注意:VLAN字段在i40e的驅(qū)動(dòng)中不支持(XL710 & X710)
參看ethtool的手冊(cè)看看-U, -N 或者—config-ntuple選項(xiàng)的更多用法
注意:Intel的XL710和X710網(wǎng)卡可以提供擴(kuò)展的云過(guò)濾規(guī)則給復(fù)雜的云網(wǎng)絡(luò)環(huán)境,詳細(xì)內(nèi)容請(qǐng)點(diǎn)擊文章末尾“引用文檔”中i40e文檔鏈接。
> Removing Filters
在EP模式下,可以用下面的命令移除已經(jīng)保存的規(guī)則:
# ethtool --config-ntuple <interface name> delete N
> Listing Filters
EP模式下羅列相應(yīng)網(wǎng)口已經(jīng)采用的規(guī)則,使用下面的命令
# ethtool --show-ntuple <interface name>
關(guān)閉FD技術(shù)
關(guān)閉Intel FD可以使用這條命令,這同時(shí)也會(huì)清除所有已有的規(guī)則:
# ethtool --features enp4s0f0 ntuple off
結(jié)論
Intel的以太網(wǎng)FD技術(shù)能將以太網(wǎng)報(bào)文精準(zhǔn)送達(dá)使用它的進(jìn)程所在的CPU核心,無(wú)論該進(jìn)程是應(yīng)用、容器還是微服務(wù)。這比RSS更進(jìn)一步,RSS只是將包送到相應(yīng)的核做中斷處理,然后轉(zhuǎn)發(fā)給需要它的進(jìn)程。FD可以被管理員或者控制面的軟件顯式的管理,或者智能自動(dòng)的創(chuàng)建過(guò)濾規(guī)則表,通過(guò)對(duì)發(fā)包的取樣來(lái)決定收包的規(guī)則。當(dāng)處于ATR自動(dòng)模式時(shí),Intel以太網(wǎng)FD技術(shù)對(duì)于硬件Offload RFS是必須的。
Intel以太網(wǎng)FD可以帶來(lái)性能提升,特別是當(dāng)數(shù)據(jù)包很小并且吞吐量很大的時(shí)候(比如在電信運(yùn)營(yíng)商的環(huán)境中)。并且在網(wǎng)卡層面就能過(guò)濾并且丟棄報(bào)文,也可以被用來(lái)避免DoS攻擊。
引用文檔
DPDK文檔(http://dpdk.org/doc/guides/howto/flow_bifurcation.html#using-flow-bifurcation-on-ixgbe-in-linux)
IRQ Affinity調(diào)整
(https://www.intel.com/content/dam/www/public/us/en/documents/reference-guides/xl710-x710-performance-tuning-linux-guide.pdf)
How to Set Up Intel® Ethernet Flow Director(https://software.intel.com/en-us/articles/setting-up-intel-ethernet-flow-director)
Intel® 82599 10 GbE Controller Datasheet(https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/82599-10-gbe-controller-datasheet.pdf)
ixgbe Linux* Base Driver for Intel(R) Ethernet Network Connection(ixgbe Linux* Base Driver for Intel(R) Ethernet Network Connection)
i40e Linux* Base Driver for the Intel(R) XL710 Ethernet Controller Family(https://downloadmirror.intel.com/26713/eng/Readme.txt)
Linux* Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Familyof Adapters(https://downloadmirror.intel.com/22919/eng/README.txt)
文章摘自英特爾精英匯
歡迎聯(lián)系寶通集團(tuán)咨詢英特爾產(chǎn)品信息
寶通集團(tuán)聯(lián)系方式
咨詢熱線:13510526731
寶通官網(wǎng):m.bjshst.cn
客戶垂詢郵箱:cuifang.mo@ex-channel.com
客戶垂詢QQ:1627678462
地址:深圳市福田區(qū)深南大道1006號(hào)國(guó)際創(chuàng)新中心C座11樓
郵編:518026