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