摘要:P4語(yǔ)言極大地改變了網(wǎng)絡(luò)領(lǐng)域,因?yàn)樗梢钥焖倜枋龊蛯?shí)現(xiàn)新的網(wǎng)絡(luò)應(yīng)用程序。盡管可以使用P4語(yǔ)言描述各種各樣的應(yīng)用程序,但是當(dāng)前的可編程開(kāi)關(guān)體系結(jié)構(gòu)對(duì)P4程序施加了很大的限制。為了解決這個(gè)缺點(diǎn),人們已經(jīng)探索了將FPGA作為P4應(yīng)用的潛在目標(biāo)。P4應(yīng)用程序使用三種抽象來(lái)描述:數(shù)據(jù)包解析器,匹配操作表和數(shù)據(jù)包逆解析器,后者使用匹配操作表的結(jié)果重新組合輸出數(shù)據(jù)包。盡管FPGA上的數(shù)據(jù)包解析器和匹配表的實(shí)現(xiàn)已在文獻(xiàn)中得到了廣泛報(bào)道,但對(duì)于數(shù)據(jù)包逆解析器并沒(méi)有提出一般的設(shè)計(jì)原理。
?
實(shí)際上,在FPGA上實(shí)現(xiàn)高速高效的逆解析器仍然是一個(gè)懸而未決的問(wèn)題,因?yàn)樗枰罅康幕ミB,并且必須針對(duì)P4程序量身定制該體系結(jié)構(gòu)。 ?
因此,在一些在FPGA上實(shí)現(xiàn)P4應(yīng)用程序的工作中,逆解析器消耗了大量的芯片資源。因此,在本文中,我們通過(guò)介紹FPGA上高效和快速的逆解析器的設(shè)計(jì)原理來(lái)解決這個(gè)問(wèn)題。 ?
作為一個(gè)神器,我們將介紹一種可通過(guò)P4程序生成高效的,可診斷的逆解析器架構(gòu)的工具。我們的設(shè)計(jì)已通過(guò)基于cocotb的框架進(jìn)行了驗(yàn)證和仿真。最終的架構(gòu)在Xilinx Ultrascale + FPGA上實(shí)現(xiàn),并支持200 Gbps以上的吞吐量,同時(shí)與其他解決方案相比將資源使用量減少了近10倍。 ?
CCS概念:
? 硬件→可重新配置的邏輯應(yīng)用程序;?
? 計(jì)算機(jī)系統(tǒng)組織→可重構(gòu)計(jì)算;高級(jí)語(yǔ)言架構(gòu);
? 網(wǎng)絡(luò)→編程接口。 ?
?
01
INTRODUCTION
P4域特定語(yǔ)言(DSL)[6]重塑了網(wǎng)絡(luò)域,因?yàn)樗试S描述具有很大靈活性的自定義數(shù)據(jù)包轉(zhuǎn)發(fā)應(yīng)用程序。使用FPGA卸載網(wǎng)絡(luò)任務(wù)的興趣日益濃厚。例如,微軟已經(jīng)在其數(shù)據(jù)中心部署了FPGA,以實(shí)現(xiàn)Azure服務(wù)器的數(shù)據(jù)平面[8]。網(wǎng)絡(luò)內(nèi)計(jì)算是最近考慮使用FPGA的另一種途徑[20]。 ?
另外,最近的一些工作利用FPGA可重配置性來(lái)創(chuàng)建可編程數(shù)據(jù)平面并實(shí)現(xiàn)P4應(yīng)用[5、13、21]。 ? 如圖1所示,P4應(yīng)用程序包含三個(gè)抽象:數(shù)據(jù)包解析器,處理階段(匹配動(dòng)作表)和數(shù)據(jù)包逆解析器(第2.2節(jié))。盡管已經(jīng)廣泛探索了FPGA上高效數(shù)據(jù)包解析器的設(shè)計(jì)[3、5、19],但很少有精力致力于高效數(shù)據(jù)包逆解析器的實(shí)現(xiàn)。首先,據(jù)我們所知,僅一篇論文涵蓋了該主題[7]。然而,Cabal等人[7]僅報(bào)告了100 Gbps數(shù)據(jù)包逆解析器的FPGA資源消耗,而未涵蓋設(shè)計(jì)原理和微體系結(jié)構(gòu)細(xì)節(jié)。 ?
第二,如Luinaud等[16]觀察到,數(shù)據(jù)包逆分解器可能會(huì)消耗超過(guò)80%的資源來(lái)實(shí)現(xiàn)一個(gè)完整的流水線,這會(huì)危害FPGA來(lái)實(shí)現(xiàn)更復(fù)雜的P4應(yīng)用程序的能力。 ?
本文介紹了一種開(kāi)源代碼解決方案,可在FPGA上生成高效且高速的數(shù)據(jù)包逆解析器。它為FPGA數(shù)據(jù)包逆解析器的設(shè)計(jì)原理奠定了基礎(chǔ)。它包括一個(gè)體系結(jié)構(gòu)和一個(gè)編譯器,可從P4程序生成一個(gè)逆解析器。 ?
用Python描述了逆解析器編譯器(第4節(jié)),并為提出的逆解析器體系結(jié)構(gòu)生成了可綜合的VHDL代碼。 ?
生成的架構(gòu)利用了FPGA固有的可配置性,從而避免了無(wú)法在FPGA上有效實(shí)現(xiàn)的硬件構(gòu)造,例如交叉開(kāi)關(guān)或桶形移位器[1,25]。
仿真環(huán)境基于cocotb [11],它允許使用幾個(gè)現(xiàn)成的Python包(例如Scapy)來(lái)生成測(cè)試用例。另外,可以將測(cè)試中的設(shè)計(jì)與虛擬網(wǎng)絡(luò)接口[12]連接起來(lái)。結(jié)果,可以使用P4行為參考模型來(lái)進(jìn)行行為驗(yàn)證[17]。 ?
已針對(duì)各種數(shù)據(jù)包頭評(píng)估了生成的體系結(jié)構(gòu)。評(píng)估顯示,與最新解決方案(第5節(jié))相比,生成的逆解析器支持200 Gbps以上的數(shù)據(jù)包吞吐量,同時(shí)將資源使用量減少10倍以上。 ?
本文的貢獻(xiàn)如下:
? 利用FPGA可配置性(§3)的逆解析器架構(gòu);
? 開(kāi)源P4-to-VHDL數(shù)據(jù)包逆解析器編譯器(第4節(jié));
? 基于cocotb的仿真環(huán)境,可簡(jiǎn)化逆解析器驗(yàn)證(第5節(jié))。 ?
02
數(shù)據(jù)包處理
? 本節(jié)介紹P4語(yǔ)言以及如何組織P4程序組件來(lái)描述數(shù)據(jù)包處理。
>2.1 P4語(yǔ)言
P4 [6]是命令性DSL,用于描述可編程數(shù)據(jù)平面上的自定義數(shù)據(jù)包處理。
· 2.1.1 P4程序概述
構(gòu)成P4程序的組件有四個(gè):標(biāo)頭,解析器,控制和switch。報(bào)頭是由特定寬度的字段和有效位組成的結(jié)構(gòu)。標(biāo)頭的結(jié)構(gòu)用于定義可以由P4程序處理的標(biāo)頭集。解析器塊表示順序和提取包頭的方式??刂茐K描述了對(duì)標(biāo)頭執(zhí)行的操作。
·2.1.2?控制操作
在控制塊中,可以執(zhí)行多種操作類型來(lái)修改標(biāo)頭。逆解析器需要關(guān)注兩個(gè)特定的操作setValid和setInvalid,這兩個(gè)操作可分別用于將標(biāo)頭有效性位設(shè)置為有效或無(wú)效。 ? ?
在P4中,控制塊還實(shí)現(xiàn)了解析邏輯。這些塊由一系列的emit語(yǔ)句組成。首先,這些語(yǔ)句的順序決定了標(biāo)題的發(fā)出順序。 ?
其次,僅在設(shè)置了有效位的情況下才發(fā)送頭。
由于發(fā)出語(yǔ)句的順序決定了報(bào)頭的發(fā)出順序,并且由于可以由先前的控制塊更改有效性位,因此逆解析器必須能夠在運(yùn)行時(shí)插入或刪除報(bào)頭。
>2.2 P4程序組件
本文考慮了Bená?ek等人提出的交換結(jié)構(gòu)[5]由三部分組成:解析器,處理部分和逆解析器,如圖1所示。 ?
解析器。
解析器將數(shù)據(jù)包作為輸入,并生成數(shù)據(jù)包頭矢量(PHV)和數(shù)據(jù)包有效負(fù)載。在我們的設(shè)計(jì)中,我們假設(shè)PHV由兩部分組成:包含標(biāo)頭數(shù)據(jù)的PHV_data總線和指示每個(gè)標(biāo)頭組件有效性位的位圖矢量PHV_valid總線。我們還假設(shè)數(shù)據(jù)包有效負(fù)載是通過(guò)流總線發(fā)送的,第一個(gè)字節(jié)位于位置0。 ?
處理過(guò)程。
處理部分從解析器中獲取PHV作為輸入,并輸出修改后的PHV,并將其轉(zhuǎn)發(fā)給逆解析器。PHV上的操作可以是標(biāo)頭數(shù)據(jù)修改或標(biāo)頭有效性位更改。 ?
逆解析器。
逆解析器模塊將來(lái)自處理部分的PHV和來(lái)自解析器的有效負(fù)載作為輸入。它輸出要在流式總線上發(fā)送的數(shù)據(jù)包。 ?
03
Deparser架構(gòu)原則
在本節(jié)中,我們介紹Deparser架構(gòu)原則。首先,我們介紹一個(gè)Deparser抽象機(jī)。其次,我們介紹了Deparser I / O信號(hào)。第三,我們介紹了擬議的Deparser的微體系結(jié)構(gòu)。我們所有的設(shè)計(jì)選擇都使用FPGA固有的可配置性,并為Deparser編譯器提供可配置的模塊。
>3.1 Deparser抽象機(jī)
Deparser抽象機(jī)如圖2所示。在此體系結(jié)構(gòu)中,我們假設(shè)PHV已緩沖并與PHV有效向量一起到達(dá)了Deparser。 ?
算法1展示了PHV移位器模塊的偽代碼,而算法2展示了有效載荷移位器。 ?
在FPGA上實(shí)現(xiàn)逆解析器的主要限制因素是頭插入所需的大量互連和桶形移位器。為了限制這些塊的使用,我們基于標(biāo)頭和有效載荷構(gòu)造了一個(gè)新數(shù)據(jù)包。因此,由于可以在編譯時(shí)完全推斷出P4解析邏輯,并且由于FPGA是可重新配置的,因此我們?yōu)橹付ǖ腜4程序定制了逆解析器架構(gòu),以減輕這些限制因素。 ?
現(xiàn)在,我們介紹了Deparser的輸入和輸出。
>3.2?輸入和輸出
該逆解析器具有3個(gè)輸入和1個(gè)輸出。輸出Pkt_out和輸入有效負(fù)載是AXI4流總線[2]。這兩個(gè)總線的數(shù)據(jù)寬度是一個(gè)編譯時(shí)間參數(shù)。兩個(gè)輸入PHV_data和PHV_valid分別包含標(biāo)題數(shù)據(jù)和要解析的有效性位。在編譯P4應(yīng)用程序時(shí),將確定PHV_data和PHV_valid的寬度。
>3.3?微體系結(jié)構(gòu)細(xì)節(jié)
在內(nèi)部,逆解析器是圍繞三個(gè)塊構(gòu)建的:PHV移位器,有效負(fù)載移位器和選擇器。PHV移位器獲取PHV_data和PHV_valid作為輸入,并輸出要發(fā)送的頭幀。 ?
有效載荷移位器接收有效載荷和PHV_valid作為輸入,并生成有效載荷數(shù)據(jù)幀。有效負(fù)載移位器和PHV移位器都輸入到選擇器。選擇器根據(jù)有效負(fù)載移位器和PHV移位器接收到的狀態(tài)生成Pkt_out幀。 ·
3.3.1 PHV移位器
PHV移位器將PHV位移位以構(gòu)建數(shù)據(jù)包。它由圖3所示的標(biāo)頭移位器組成。標(biāo)頭移位器的最大數(shù)量等于Pkt_out總線寬度。 ?
標(biāo)頭移位器具有三個(gè)輸入:PHV_data,PHV_valid和啟動(dòng)信號(hào)。它輸出:標(biāo)頭數(shù)據(jù),有效的標(biāo)頭和最后的標(biāo)頭。PHV_valid和啟動(dòng)輸入連接到狀態(tài)機(jī)模塊。狀態(tài)機(jī)模塊驅(qū)動(dòng)標(biāo)題有效和標(biāo)題最后輸出。PHV_data輸入連接到驅(qū)動(dòng)頭數(shù)據(jù)輸出的多路復(fù)用器。多路復(fù)用器根據(jù)狀態(tài)機(jī)模塊的一個(gè)輸出選擇PHV_data的位之一。狀態(tài)機(jī)是從逆解析器圖(§4)以及多路復(fù)用器的輸入數(shù)量中得出的。
·?3.3.2有效負(fù)載轉(zhuǎn)換器
有效負(fù)載移位器將有效負(fù)載與發(fā)出的標(biāo)題對(duì)齊。有效負(fù)載移位器的基本模塊如圖4所示。它以數(shù)據(jù),Ctrl和Keep作為輸入,并輸出有效負(fù)載數(shù)據(jù)和有效負(fù)載保持信號(hào)。數(shù)據(jù)總線和Keep總線分別連接到Deparser的有效負(fù)載輸入總線的AXI tdata和tkeep信號(hào)。該總線的每個(gè)字節(jié)都連接到圖4中多路復(fù)用器1的一個(gè)輸入。
Keep信號(hào)的每個(gè)位都連接到多路復(fù)用器3的一個(gè)輸入。Ctrl信號(hào)確定應(yīng)選擇多路復(fù)用器1和3的哪個(gè)輸入。最后,可以注冊(cè)多路復(fù)用器1和3的輸出,以將數(shù)據(jù)輸出延遲一個(gè)周期。多路復(fù)用器2和4選擇當(dāng)前值或延遲值。Ctrl總線的值由在編譯時(shí)生成的較小且恒定的關(guān)聯(lián)內(nèi)存設(shè)置。
· 3.3.3 選擇器
該模塊在有效負(fù)載移位器和PHV移位器之間選擇正確的輸出數(shù)據(jù),并生成AXI4流輸出信號(hào)數(shù)據(jù)包數(shù)據(jù),數(shù)據(jù)包保留和數(shù)據(jù)包最后。選擇器將有效負(fù)載移位器的輸出和PHV移位器的輸出作為輸入,如圖5所示。 ?
分組數(shù)據(jù)和分組保持信號(hào)由塊數(shù)據(jù)選擇分配。該塊被復(fù)制以分配所有分組數(shù)據(jù)位。 ?
根據(jù)輸入信號(hào)“具有有效負(fù)載”指示的有效負(fù)載的存在,“最后一個(gè)包”信號(hào)是“ PHV最后”或“有效負(fù)載最后”。
· 3.3.4 FPGA上的多路復(fù)用器
所呈現(xiàn)的不同構(gòu)造塊高度依賴于FPGA上的多路復(fù)用器實(shí)現(xiàn)。我們選擇使用多路復(fù)用器,因?yàn)樗鼈円言贔PGA上有效實(shí)現(xiàn)。實(shí)際上,一個(gè)16:1的多路復(fù)用器在Xilinx FPGA上消耗了一個(gè)切片[23]。雖然擁有一個(gè)非常大的多路復(fù)用器會(huì)變得很昂貴,但我們知道每個(gè)多路復(fù)用器的輸入數(shù)量將由編譯器減少到最少(第4.2.2節(jié))。
04
生成逆解析器
逆解析器可以表示為有向無(wú)環(huán)圖(DAG)。為了生成Deparser DAG,使用p4c-bm2-ss編譯器將P4程序編譯為JSON文件[18]。生成的JSON文件然后用于生成一個(gè)Deparser DAG??梢詢?yōu)化此DAG,但是此優(yōu)化留給以后的工作。本節(jié)的其余部分介紹了從Deparser DAG生成不同的Deparser模塊的過(guò)程。
>4.1 Deparser DAG
用于以太網(wǎng),IPv4,IPv6,TCP和UDP數(shù)據(jù)包的Deparser DAG的示例如圖6所示。DAG的每個(gè)節(jié)點(diǎn)(不包括開(kāi)頭和結(jié)尾)均表示一個(gè)報(bào)頭。DAG的每個(gè)箭頭表示可能要發(fā)出的下一個(gè)報(bào)頭。起始和結(jié)束之間的每個(gè)路徑代表可能發(fā)出的一組報(bào)頭。 ?
表1列出了所有可能的路徑。 ?
為了從DAG獲得逆解析器,有兩個(gè)部分。第一部分對(duì)deparser圖進(jìn)行變換,以生成PHV移位器。第二部分使用deparser圖生成凈荷移位器。
>4.2 PHV移位器的生成
為了生成PHV移位器的標(biāo)題移位器,我們構(gòu)建了deparser圖的sub-DAG。每個(gè)子DAG代表一個(gè)報(bào)頭移位器塊(第3.3.1節(jié))。由于大多數(shù)網(wǎng)絡(luò)協(xié)議都是按字節(jié)對(duì)齊的[5],因此我們?yōu)槊總€(gè)輸出字節(jié)構(gòu)建一個(gè)sub-DAG。這允許合并PHV移位器狀態(tài)機(jī),因此降低了逆解析器的體系結(jié)構(gòu)復(fù)雜性。
· 4.2.1子DAG的生成
在子DAG中,每個(gè)節(jié)點(diǎn)都包含標(biāo)題和要提取的字節(jié)。每個(gè)邊緣都指示要到達(dá)相應(yīng)下一節(jié)點(diǎn)的報(bào)頭有效性條件。我們提出了算法3來(lái)生成子DAG。
所提出的算法通過(guò)遍歷De
parser圖來(lái)遍歷所有可能的標(biāo)頭發(fā)射序列。我們將序列的每個(gè)字節(jié)分配給一個(gè)子DAG。當(dāng)子DAG第一次處理來(lái)自特定標(biāo)頭的字節(jié)時(shí),我們將邊緣條件設(shè)置為此標(biāo)頭。圖7顯示了使用算法3使用圖6的deparserDAG和128位輸出總線生成的子DAG。
· 4.2.2 Sub-DAG轉(zhuǎn)換
子DAG轉(zhuǎn)換分為兩個(gè)部分:標(biāo)頭移位器多路復(fù)用器生成和狀態(tài)機(jī)生成。生成的多路復(fù)用器的輸入數(shù)量等于子DAG中的節(jié)點(diǎn)數(shù)量。狀態(tài)機(jī)是從子DAG派生的,其中每個(gè)節(jié)點(diǎn)代表一個(gè)狀態(tài),每個(gè)邊沿代表一個(gè)過(guò)渡。頭字節(jié)位置被轉(zhuǎn)換為多路復(fù)用器的輸入位置。
>4.3有效載荷移位器關(guān)聯(lián)內(nèi)存的創(chuàng)建
有效載荷移位器體系結(jié)構(gòu)在第3.3.2節(jié)中介紹。我們使用該圖生成驅(qū)動(dòng)Ctrl信號(hào)的關(guān)聯(lián)內(nèi)存。使用deparser圖可以分兩步生成此內(nèi)存。首先,我們通過(guò)查看Deparser圖表中開(kāi)始和結(jié)束之間的所有可能路徑來(lái)確定可能的有效標(biāo)頭的設(shè)置PH。集合PH中的每個(gè)元素ph由PHV_valid總線值和所有標(biāo)頭寬度的總和組成。
?
建立集合PH后,對(duì)于每個(gè)可能的元素ph∈PH,我們?yōu)镃trl分配一個(gè)值。對(duì)于每個(gè)可能的PHV_valid值,我們計(jì)算有效負(fù)載的偏移量。使用等式Offset = phw(mod w)獲得偏移,其中w是總線寬度,而phw表示發(fā)出的標(biāo)頭的總位數(shù)。最后,我們?yōu)槲挥谄浦狄韵碌拿總€(gè)有效負(fù)載移位器設(shè)置連接到圖4的多路復(fù)用器2和4的Ctrl位的值。 ?
05
結(jié)果
本節(jié)介紹了這項(xiàng)工作的結(jié)果。首先,我們描述實(shí)驗(yàn)設(shè)置。然后,我們介紹了編譯器參數(shù)對(duì)生成的體系結(jié)構(gòu)的影響。最后,我們將實(shí)現(xiàn)結(jié)果與以前的工作進(jìn)行比較。
>5.1實(shí)驗(yàn)設(shè)置
我們?yōu)橐韵氯齻€(gè)協(xié)議棧生成了逆解析器:
?T1:以太網(wǎng),IPv4 / IPv6,TCP / UDP
?T2:以太網(wǎng),IPv4 / IPv6,TCP / UDP,ICMP / ICMPv6
?T3:以太網(wǎng),2×VLAN,2×MPLS,IPv4 / IPv6, ?TCP / UDP,ICMP / ICMPv6
為了驗(yàn)證我們的工作,我們基于cocotb框架[11]開(kāi)發(fā)了一個(gè)仿真平臺(tái)。我們?yōu)锳XI4-stream總線開(kāi)發(fā)了cocotb驅(qū)動(dòng)程序和監(jiān)視器,從而使我們能夠快速評(píng)估不同的Deparser配置。Xilinx Vivado 2019.1用于合成和布局布線。為了實(shí)現(xiàn)可重復(fù)性,我們的代碼是開(kāi)放的1。?
>5.2編譯器參數(shù)的影響
為了評(píng)估圖形復(fù)雜度的影響,我們從非優(yōu)化的deparserDAG和逆解析器DAG(被視為優(yōu)化的逆解析器DAG)生成并合成了逆解析器。使用解析器DAG作為逆解析器DAG是在P4 14 [9]中提出的實(shí)現(xiàn)。表2列出了針對(duì)Xilinx xcvu3p-3 FPGA時(shí),每個(gè)綜合運(yùn)行的Block RAM(BRAM),查找表(LUT)和觸發(fā)器(FF)的使用情況。結(jié)果表明,兩個(gè)因素主導(dǎo)著資源的使用:復(fù)雜度和數(shù)據(jù)總線寬度。
? 圖的復(fù)雜度。
圖形的復(fù)雜性受逆解析器代碼和圖形簡(jiǎn)化程度的影響。由于簡(jiǎn)化的Deparser DAG具有較少的邊,因此可減少其PHV_shifter的狀態(tài)機(jī)和有效負(fù)載移位器的關(guān)聯(lián)內(nèi)存的大小。另外,每個(gè)子DAG需要更少的節(jié)點(diǎn)。結(jié)果,減少了PHV移位器復(fù)用器的輸入數(shù)量。例如,在T1中,有5個(gè)標(biāo)頭。對(duì)于未優(yōu)化的解析器DAG,這將導(dǎo)致總共32條路徑,而簡(jiǎn)化的逆解析器圖僅包含7條路徑。
總線寬度。除了圖形復(fù)雜度之外,總線寬度還會(huì)影響資源消耗。提出的設(shè)計(jì)具有6個(gè)時(shí)鐘周期的延遲。而且,輸出數(shù)據(jù)包的等待時(shí)間是要發(fā)射的總報(bào)頭長(zhǎng)度和總線寬度的函數(shù)。如表2所示,對(duì)于大型公交車,與較小型公交車相比,最壞情況的等待時(shí)間減少了。標(biāo)頭發(fā)射的最壞情況延遲可以通過(guò)以上公式計(jì)算。 ?
同樣,增加總線寬度會(huì)增加LUT和FF的使用率。對(duì)于64位至256位不等的數(shù)據(jù)總線,資源使用量會(huì)略有增加,但是對(duì)于512位總線而言,這種增加變得非常重要。有兩個(gè)因素可以解釋這種較高的復(fù)雜性。首先,多路復(fù)用器的最小數(shù)量以每個(gè)輸出位1個(gè)多路復(fù)用器的速率增加。其次,對(duì)于較大的總線,由于標(biāo)頭對(duì)齊,因此對(duì)于每個(gè)輸出幀,可以將更多標(biāo)頭附加到總線上。 ?
因此,PHV移位器的可能輸入的重用較少。
>5.3實(shí)現(xiàn)結(jié)果
我們還為三個(gè)協(xié)議棧(具有512位數(shù)據(jù)總線)實(shí)現(xiàn)了非優(yōu)化的Deparser DAG。我們將Deparser實(shí)施結(jié)果與Xilinx SDNet 2017.4 [24]和Bená?ek等人生成的Deparser進(jìn)行了比較[5]。這些實(shí)現(xiàn)的結(jié)果顯示在表3中。我們的Deparser支持的吞吐量比Bená?ek等人提出的Deparser大20 Gpbs[5],同時(shí)將資源使用量減少5倍。 ?
與Xilinx SDNet [24]生成的逆解析器相比,在最壞的情況下,我們的逆解析器支持的吞吐量低60 Gbps,但我們的逆解析器使用的資源卻少了近10倍。 ?
比較實(shí)施和綜合結(jié)果時(shí),資源消耗保持穩(wěn)定。在T1和T2的情況下,布局布線后的性能幾乎相同。但是,可以通過(guò)對(duì)多路復(fù)用器進(jìn)行流水線化來(lái)提高最大時(shí)鐘頻率,而不會(huì)顯著影響資源消耗。實(shí)際上,生成的體系結(jié)構(gòu)每個(gè)切片消耗少于一個(gè)FF,而典型的切片則具有八個(gè)FF。結(jié)果,未使用的FF可以用于流水線復(fù)用器,因?yàn)樗鼈儾惶赡苡善渌K驅(qū)動(dòng)。
06
相關(guān)工作
Wang等提出了P4FPGA [22]。P4FPGA是面向中等性能FPGA(10 Gbps)的開(kāi)源且與供應(yīng)商無(wú)關(guān)的P4-to-FPGA編譯器。Ibanez等[14]建議將Xilinx SDNet P4編譯器[24]集成到現(xiàn)成的NetFPGA板[15]中。 ?
這項(xiàng)工作暴露了SDNet在實(shí)現(xiàn)逆解析器邏輯方面的局限性,事實(shí)證明這是所生成管道中資源消耗最大的模塊[16]。確實(shí),根據(jù)我們的實(shí)驗(yàn),我們觀察到Xilinx SDNet無(wú)法優(yōu)化分解圖中的不可達(dá)路徑。 ?
Bená?ek等?[5]提出了自動(dòng)生成基于P4的數(shù)據(jù)包解析器和VHDL的逆解析器。這項(xiàng)工作擴(kuò)展到了逆解析器之前對(duì)數(shù)據(jù)包解析器的研究[4]。但是,由于優(yōu)化是從數(shù)據(jù)包解析器的設(shè)計(jì)中得出的,因此沒(méi)有涵蓋該逆解析器的體系結(jié)構(gòu)和設(shè)計(jì)原理。其他數(shù)據(jù)包解析器研究包括[3,10,19]。. Gibb等 [10]介紹了數(shù)據(jù)包解析器的一般設(shè)計(jì)原理,但未涵蓋數(shù)據(jù)包逆解析器的情況。另外,Attig和Brebner [3]提出了一種語(yǔ)言來(lái)代表解析器,并帶有架構(gòu)和編譯器,以在FPGA上實(shí)現(xiàn)它們。另外,圣地亞哥·達(dá)席爾瓦(Santiago da Silva)等人。[19]提議使用圖優(yōu)化,類似于我們的工作,以簡(jiǎn)化解析器管道。 ?
07
結(jié)論
P4改變了網(wǎng)絡(luò)格局,因?yàn)樗试S表達(dá)自定義數(shù)據(jù)包處理。近年來(lái),有幾篇著作將P4程序映射到FPGA。但是,這些工作大部分都集中在實(shí)現(xiàn)數(shù)據(jù)包解析器或match action階段。迄今為止,尚未提出關(guān)于FPGA的通用數(shù)據(jù)包逆解析原理。
確實(shí),先前關(guān)于生成解析邏輯的工作的幼稚方法已經(jīng)使該模塊的硬件實(shí)現(xiàn)在FPGA上非常昂貴。在這項(xiàng)工作中,我們通過(guò)介紹一套在FPGA上實(shí)現(xiàn)數(shù)據(jù)包逆解析器的設(shè)計(jì)原則來(lái)解決這個(gè)問(wèn)題。在我們的工作中,我們提出了一種與FPGA微體系結(jié)構(gòu)緊密耦合的體系結(jié)構(gòu),以利用FPGA固有的可配置性。 ?
我們還演示了簡(jiǎn)化逆解析器圖以減少資源消耗的重要性。我們的結(jié)果表明,我們提出的去解析器體系結(jié)構(gòu)跨越了100 Gbps的吞吐量邊界,同時(shí)將資源消耗減少了一個(gè)數(shù)量級(jí)。最后,為了實(shí)現(xiàn)可復(fù)制性,我們開(kāi)源了我們的框架和基于cocotb的集成仿真環(huán)境。??
審核編輯:劉清
評(píng)論
查看更多