FDIR簡介
在CPU單核時代,數據包經由網卡接收后均被送往唯一的CPU進行處理。隨著多核時代到來,出現了負載均衡問題(某些core過載,而另一些core空載的情況)。為解決該問題,RSS(Receive Side Scaling)技術先通過hash操作將數據包發送到不同的core上進行中斷處理,然后再經由core間轉發將數據包發送到運行目的應用所在的core上。雖然負載看似在多core上均衡了,但由于hash的抗碰撞特性,大量數據包會被送到了不匹配的core上,因而數據包的core間轉發成為性能瓶頸。
Intel 以太網Flow Director技術(Intel Ethernet Flow Director,簡稱FDIR)將數據包定向發送到對應應用所在core上,從而彌補了RSS的不足,可用來加速數據包到目的應用處理的過程。在新一代Intel 以太網800系列網絡適配器中,FDIR有了更多的規則空間硬件資源和更靈活的配置機制。
如同Linux提供了純軟件實現的RSS版本一樣,Linux也提供了純軟件實現的ATR(Application Targeting Routing)模式的Flow Director,稱為RFS(Receive Flow Steering)。盡管功能上等效,但是RFS無法達到FDIR對網絡性能的提升效果,因為它必須通過某個core來執行調度數據包,而且該core大概率不是目的應用所在的core。因此,ATR模式的FDIR可被看作RFS的智能卸載硬件加速方案。
FDIR工作原理
在網絡適配器硬件接收到數據包時,硬件Parser會通過Parse Graph狀態機對數據包進行解析提取出一些重要信息(如數據包類型)并填充在該數據包的descriptor中;
硬件Profile Chooser根據數據包的PTYPE、Flag位、所屬VSI等信息生成Profile ID;硬件Field Extractor根據該Profile ID提取出對應的Field Vector;根據mask寄存器中的信息,對Field Vector中有效字段(word)進行mask操作;根據Input Set寄存器中Field Vector到Input Set的映射關系,生成FDIR的Input Set。
基于數據包提取出的Input Set,FDIR會查表進行精確匹配和優先級判斷,從而確定出對應的action。常見的action包括:1)Drop:根據FDIR表中對應規則的DROP Flag位決定是否drop該數據包。2)To Queue:將數據包發送至目的Queue,或在進行hash操作后發送至Queue Group(也叫Queue Region)中的某個Queue。3)Counter:對匹配的數據包進行統計計數,計數的方式有:基于個數、基于byte數據量、基于個數和byte數據量。
其中,FDIR匹配準則依據包括:1)Input Set向量域;2)數據包所屬的VSI;3)數據包所匹配的Profile。
FDIR使能機制
Intel 以太網800系列網絡適配器最多可支持16k條FDIR規則,這些規則空間資源在硬件中是以 “獨占( guaranteed )” + “共享( best effort )” 的形式進行分配的。其中,每個PF享有固定大小的獨占資源,該獨占資源又可被各PF下的VF分配使用;除去所有PF享有的獨占資源,其余的FDIR空間資源都作為共享資源,被所有PF及其VF所共享使用。例如,在4端口25G E810中,每個PF獨占資源有512,共享資源有14k(16k-512*4=14k)。獨占和共享資源的配置,是通過寫寄存器實現的。
對FDIR Queue的初始化同樣是通過寫寄存器完成的,包括:分配FDIR VSI硬件資源;映射TC LAN Queue到VSI;初始化FDIR哈希表;初始化FDIR統計計數器;分配并初始化TX/RX LAN Queue;綁定中斷到VSI Queue;分配并初始化Ring Buffer;分配FDIR Profile資源等。
在DPDK中,FDIR規則可以通過rte_flow的組織形式runtime進行配置。每條規則中包含了必要的 Pattern和Action信息。
緊接著基于rte_flow規則中解析出的Input Set,分配Profile ID;注冊HW Profile;創建PTYPE Group的映射關系;在TCAM中添加對應的Field Vector。再之后driver根據解析出的Input Set的值分配Queue的Descriptor并對LAN+FDIR Descriptor進行填充,然后構建相應的FDIR Dummy Packet。
通過FDIR TX Queue將規則實體以特定的格式發送給網卡的firmware,并返回處理的狀態結果。
其中,每個FDIR規則實體的內容是由64 bytes數據構成,由以下參數組成:1)從數據包中提取的參數:48 bytes的Input Set;數據包所匹配的Profile等。2)從軟件Descriptor中接收到的參數:目的Queue;FDIR ID;數據包所屬的VSI;統計計數器;控制相關的Flag位等。3)自維護的存儲管理參數:PF/VF/VSI標志位;有效Flag位等。
FDIR應用場景舉例
OVS Partial Offload:在HW中設置帶有mark ID的FDIR規則,匹配的數據包會在對應的descriptor中記錄對應的mark ID,上層的OVS可以基于此mark ID直接對該數據包的SKB進行相應的處理,從而省去了大量的解析查詢等操作并大大提升了性能。
結語
當前VMware或Microsoft并不支持FDIR功能。FDIR更適合在純“裸機(bare metal)” 上的Linux應用程序中提升網絡性能,特別是那些網絡通信量極大、處理小數據包極多的應用程序。在那些看重網絡性能的應用程序(例如Memcached)中,FIDR為以太網領域在高帶寬、低延遲等方向提供了顯著的性能增強。伴隨的好處也包括降低CPU占有率、節省功耗等,因而更適合配合intel的高性能CPU使用。
1. Columbia Park Ethernet IP Hardware Architecture Specification, Ethernet Products Group (EPG).
2. Introduction to intel Ethernet Flow Director and Memcached Performance, intel White Paper.
3. CVL Packet Processing, Qi Zhang.
4. DPDK Ethdev Foundation, Jingjing Wu, Beilei Xing.
5. Advanced AVF RSS & FDIR, Yahui Cao.
審核編輯 :李倩
-
以太網
+關注
關注
40文章
5476瀏覽量
173002 -
Linux
+關注
關注
87文章
11357瀏覽量
210845
原文標題:基于Intel?以太網800系列網絡適配器的FDIR功能及原理介紹
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論