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