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