FDIR簡介
在CPU單核時代,數(shù)據(jù)包經(jīng)由網(wǎng)卡接收后均被送往唯一的CPU進行處理。隨著多核時代到來,出現(xiàn)了負載均衡問題(某些core過載,而另一些core空載的情況)。為解決該問題,RSS(Receive Side Scaling)技術(shù)先通過hash操作將數(shù)據(jù)包發(fā)送到不同的core上進行中斷處理,然后再經(jīng)由core間轉(zhuǎn)發(fā)將數(shù)據(jù)包發(fā)送到運行目的應用所在的core上。雖然負載看似在多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ā)送到對應應用所在core上,從而彌補了RSS的不足,可用來加速數(shù)據(jù)包到目的應用處理的過程。在新一代Intel 以太網(wǎng)800系列網(wǎng)絡適配器中,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)絡性能的提升效果,因為它必須通過某個core來執(zhí)行調(diào)度數(shù)據(jù)包,而且該core大概率不是目的應用所在的core。因此,ATR模式的FDIR可被看作RFS的智能卸載硬件加速方案。
FDIR工作原理
在網(wǎng)絡適配器硬件接收到數(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提取出對應的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)先級判斷,從而確定出對應的action。常見的action包括:1)Drop:根據(jù)FDIR表中對應規(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匹配準則依據(jù)包括:1)Input Set向量域;2)數(shù)據(jù)包所屬的VSI;3)數(shù)據(jù)包所匹配的Profile。
FDIR使能機制
Intel 以太網(wǎng)800系列網(wǎng)絡適配器最多可支持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中添加對應的Field Vector。再之后driver根據(jù)解析出的Input Set的值分配Queue的Descriptor并對LAN+FDIR Descriptor進行填充,然后構(gòu)建相應的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標志位;有效Flag位等。
FDIR應用場景舉例
OVS Partial Offload:在HW中設(shè)置帶有mark ID的FDIR規(guī)則,匹配的數(shù)據(jù)包會在對應的descriptor中記錄對應的mark ID,上層的OVS可以基于此mark ID直接對該數(shù)據(jù)包的SKB進行相應的處理,從而省去了大量的解析查詢等操作并大大提升了性能。
結(jié)語
當前VMware或Microsoft并不支持FDIR功能。FDIR更適合在純“裸機(bare metal)” 上的Linux應用程序中提升網(wǎng)絡性能,特別是那些網(wǎng)絡通信量極大、處理小數(shù)據(jù)包極多的應用程序。在那些看重網(wǎng)絡性能的應用程序(例如Memcached)中,F(xiàn)IDR為以太網(wǎng)領(lǐng)域在高帶寬、低延遲等方向提供了顯著的性能增強。伴隨的好處也包括降低CPU占有率、節(jié)省功耗等,因而更適合配合intel的高性能CPU使用。
原文標題:基于Intel?以太網(wǎng)800系列網(wǎng)絡適配器的FDIR功能及原理介紹
文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
5635瀏覽量
176010 -
intel
+關(guān)注
關(guān)注
19文章
3496瀏覽量
188490
原文標題:基于Intel?以太網(wǎng)800系列網(wǎng)絡適配器的FDIR功能及原理介紹
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論