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使用。
原文標題:基于Intel?以太網800系列網絡適配器的FDIR功能及原理介紹
文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
以太網
+關注
關注
40文章
5459瀏覽量
172346 -
intel
+關注
關注
19文章
3483瀏覽量
186263
原文標題:基于Intel?以太網800系列網絡適配器的FDIR功能及原理介紹
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論