編 者 按
之前看一篇論文《A Fast Approach for Generating Efficient Parsers on FPGAs》,里面主要講的是如何將P4的報(bào)文解析通過(guò)流水線技術(shù)映射到FPGA上實(shí)現(xiàn)。我本身不研究P4,但這篇文章里面所提到的在構(gòu)造報(bào)文解析流水線部分倒頗有意思,故作總結(jié),感興趣的小伙伴可以去翻看原文。
報(bào)文解析規(guī)則定義
這里采用原文中定義的報(bào)文頭規(guī)則定義:
這里面定義了七種報(bào)文頭規(guī)則(編號(hào)為A~G):
A:Ethernet—>MPLS—>MPLS—>EoMPLS—>Ethernet
B:Ethernet—>IPV4
C:Ethernet—>IPV6
D:Ethernet—>MPLS—>IPV4
E:Ethernet—>MPLS—>MPLS—>IPV4
F:Ethernet—>MPLS—>IPV6
G:Ethernet—>MPLS—>MPLS—>IPV6
流水線設(shè)計(jì)所需要盡可能的避免Stall,在真實(shí)的業(yè)務(wù)里,可能面臨的是遠(yuǎn)比這些更復(fù)雜的協(xié)議。這里我們可以定義。
流水線劃分提取
在網(wǎng)絡(luò)報(bào)文解析里,只有當(dāng)前一層報(bào)文頭解析完后才能解析下一層報(bào)文規(guī)則,故而在流水線設(shè)計(jì)里,每一級(jí)流水線一般只解析一層報(bào)文頭。以上面的流水線為例,首先找出最長(zhǎng)路徑:
這里同時(shí)為各個(gè)報(bào)文頭子規(guī)則進(jìn)行編號(hào)??梢钥吹?,最長(zhǎng)規(guī)則包含了五個(gè)報(bào)文頭規(guī)則,也就意味著流水線最長(zhǎng)級(jí)數(shù)為5級(jí)。
接下來(lái)就是處理沒(méi)有在最長(zhǎng)路徑上的節(jié)點(diǎn)。以IPV6為例。這里從(1)、(2)、(3)均有可能跳轉(zhuǎn)至IPV6(7)。取其離根節(jié)(1)點(diǎn)最遠(yuǎn)的父節(jié)點(diǎn)并掛載在其下面,刪除其他對(duì)應(yīng)的跳轉(zhuǎn)關(guān)系:
最終IPV6節(jié)點(diǎn)被放置在EoMPLS同一級(jí)節(jié)點(diǎn)處。處于流水線的第四級(jí)。這時(shí)針對(duì)IPV6報(bào)文頭的解析,將被放置在流水線第四級(jí)進(jìn)行處理:
Ethernet—>IPV6:第一級(jí)流水解析Ethernet,第二三級(jí)不做處理,第四級(jí)解析IPV6。
Ethernet—>MPLS—>IPV6:第一級(jí)解析Ethernet,第二級(jí)解析MPLS,第三級(jí)不做處理,第四級(jí)解析IPV6。
Ethernet—>MPLS—>MPLS—>IPV6:第一級(jí)解析Ethernet,第二級(jí)解析MPLS,第三級(jí)解析MPLS,第四級(jí)解析IPV6。 同樣,按照相同的規(guī)則,我們可以來(lái)處理IPV4報(bào)文頭:
至此,整個(gè)流水線設(shè)計(jì)調(diào)度完成。流水線共分為五級(jí)。
針對(duì)上面的七種報(bào)文規(guī)則,我們可以一次編號(hào)為
在流水線設(shè)計(jì)中,每一級(jí)報(bào)文解析完成后攜帶當(dāng)前已成功解析的標(biāo)志頭headerType以及EthType。這里的流水線主要在于第四級(jí)的設(shè)計(jì),其他級(jí)都較為簡(jiǎn)單,為單一的匹配。在第四級(jí)里,定義了7種可能的組合:
headerType=1,流水匹配中IPV4(6),則headerType=6,報(bào)文命中規(guī)則B
headerType=2,流水匹配中IPV4(6),則headerType=6,報(bào)文命中規(guī)則D
headerType=3,流水匹配中IPV4(6),則headerType=6,報(bào)文命中規(guī)則E
headerType=1,流水匹配中IPV6(7),則headerType=7,報(bào)文命中規(guī)則C
headerType=2,流水匹配中IPV6(7),則headerType=7,報(bào)文命中規(guī)則F
headerType=3,流水匹配中IPV6(7),則headerType=7,報(bào)文命中規(guī)則G
headerType=3,流水匹配中EoMPLS(4),則headerType=4,可能命中報(bào)文命中規(guī)則A(到第五級(jí)進(jìn)一步判斷)。
如此,經(jīng)過(guò)五級(jí)流水線處理,我們可以判斷出在報(bào)文是否命中定義的規(guī)則。
個(gè)人思考
論文中這種流水線的設(shè)計(jì)思想確實(shí)值得借鑒。然而真實(shí)的業(yè)務(wù)模型里面的報(bào)文規(guī)則遠(yuǎn)遠(yuǎn)比上面的復(fù)雜許多,所造成的流水線級(jí)數(shù)勢(shì)必會(huì)更深更長(zhǎng)。且考慮到報(bào)文頭不定長(zhǎng)度的存在,在每一級(jí)流水里都不可避免的出現(xiàn)數(shù)據(jù)位移。這種不定長(zhǎng)度的數(shù)據(jù)位移在FPGA里面像現(xiàn)在普遍的512比特位寬情況下還是很消耗資源的(部分級(jí)流水可能只需要常數(shù)移位)。
作者的初衷在于建立P4到FPGA的通用映射,然而這里面所設(shè)計(jì)的帶寬可能是遠(yuǎn)大于真實(shí)業(yè)務(wù)設(shè)計(jì)所需求的帶寬的。如果想精簡(jiǎn)資源個(gè)人倒覺(jué)得可以借鑒這種報(bào)文解析調(diào)度方式采用狀態(tài)機(jī)的形式來(lái)進(jìn)行處理,畢竟在真實(shí)的業(yè)務(wù)場(chǎng)景里還是很少出現(xiàn)每拍處理一個(gè)報(bào)文頭的場(chǎng)景。可以根據(jù)不同報(bào)文規(guī)則的長(zhǎng)度,需要的帶寬以及狀態(tài)機(jī)的最大跳轉(zhuǎn)次數(shù)(對(duì)應(yīng)這里的流水線級(jí)數(shù))放置相應(yīng)數(shù)量的狀態(tài)機(jī)個(gè)數(shù),并通過(guò)RR調(diào)度保序輸出來(lái)確保真實(shí)需要帶寬。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603421 -
流水線
+關(guān)注
關(guān)注
0文章
120瀏覽量
25739 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7565瀏覽量
88794 -
報(bào)文
+關(guān)注
關(guān)注
0文章
38瀏覽量
4029
原文標(biāo)題:Efficient Parsers on FPGA
文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論