精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

報文解析規則定義 流水線劃分提取方案

Spinal FPGA ? 來源:Spinal FPGA ? 2023-04-08 14:15 ? 次閱讀

編 者 按

之前看一篇論文《A Fast Approach for Generating Efficient Parsers on FPGAs》,里面主要講的是如何將P4的報文解析通過流水線技術映射到FPGA上實現。我本身不研究P4,但這篇文章里面所提到的在構造報文解析流水線部分倒頗有意思,故作總結,感興趣的小伙伴可以去翻看原文。

報文解析規則定義

這里采用原文中定義的報文頭規則定義:

1dd53e2a-d5bc-11ed-bfe3-dac502259ad0.jpg

這里面定義了七種報文頭規則(編號為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

流水線設計所需要盡可能的避免Stall,在真實的業務里,可能面臨的是遠比這些更復雜的協議。這里我們可以定義。

流水線劃分提取

網絡報文解析里,只有當前一層報文頭解析完后才能解析下一層報文規則,故而在流水線設計里,每一級流水線一般只解析一層報文頭。以上面的流水線為例,首先找出最長路徑:

1df24b32-d5bc-11ed-bfe3-dac502259ad0.jpg

這里同時為各個報文頭子規則進行編號。可以看到,最長規則包含了五個報文頭規則,也就意味著流水線最長級數為5級。

接下來就是處理沒有在最長路徑上的節點。以IPV6為例。這里從(1)、(2)、(3)均有可能跳轉至IPV6(7)。取其離根節(1)點最遠的父節點并掛載在其下面,刪除其他對應的跳轉關系:

1e129cd4-d5bc-11ed-bfe3-dac502259ad0.jpg

最終IPV6節點被放置在EoMPLS同一級節點處。處于流水線的第四級。這時針對IPV6報文頭的解析,將被放置在流水線第四級進行處理:

Ethernet—>IPV6:第一級流水解析Ethernet,第二三級不做處理,第四級解析IPV6。

Ethernet—>MPLS—>IPV6:第一級解析Ethernet,第二級解析MPLS,第三級不做處理,第四級解析IPV6。

Ethernet—>MPLS—>MPLS—>IPV6:第一級解析Ethernet,第二級解析MPLS,第三級解析MPLS,第四級解析IPV6。 同樣,按照相同的規則,我們可以來處理IPV4報文頭:

1e248048-d5bc-11ed-bfe3-dac502259ad0.jpg

至此,整個流水線設計調度完成。流水線共分為五級。

針對上面的七種報文規則,我們可以一次編號為

在流水線設計中,每一級報文解析完成后攜帶當前已成功解析的標志頭headerType以及EthType。這里的流水線主要在于第四級的設計,其他級都較為簡單,為單一的匹配。在第四級里,定義了7種可能的組合:

headerType=1,流水匹配中IPV4(6),則headerType=6,報文命中規則B

headerType=2,流水匹配中IPV4(6),則headerType=6,報文命中規則D

headerType=3,流水匹配中IPV4(6),則headerType=6,報文命中規則E

headerType=1,流水匹配中IPV6(7),則headerType=7,報文命中規則C

headerType=2,流水匹配中IPV6(7),則headerType=7,報文命中規則F

headerType=3,流水匹配中IPV6(7),則headerType=7,報文命中規則G

headerType=3,流水匹配中EoMPLS(4),則headerType=4,可能命中報文命中規則A(到第五級進一步判斷)。

如此,經過五級流水線處理,我們可以判斷出在報文是否命中定義的規則。

個人思考

論文中這種流水線的設計思想確實值得借鑒。然而真實的業務模型里面的報文規則遠遠比上面的復雜許多,所造成的流水線級數勢必會更深更長。且考慮到報文頭不定長度的存在,在每一級流水里都不可避免的出現數據位移。這種不定長度的數據位移在FPGA里面像現在普遍的512比特位寬情況下還是很消耗資源的(部分級流水可能只需要常數移位)。

作者的初衷在于建立P4到FPGA的通用映射,然而這里面所設計的帶寬可能是遠大于真實業務設計所需求的帶寬的。如果想精簡資源個人倒覺得可以借鑒這種報文解析調度方式采用狀態機的形式來進行處理,畢竟在真實的業務場景里還是很少出現每拍處理一個報文頭的場景。可以根據不同報文規則的長度,需要的帶寬以及狀態機的最大跳轉次數(對應這里的流水線級數)放置相應數量的狀態機個數,并通過RR調度保序輸出來確保真實需要帶寬。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1626

    文章

    21678

    瀏覽量

    602034
  • 流水線
    +關注

    關注

    0

    文章

    120

    瀏覽量

    25629
  • 網絡
    +關注

    關注

    14

    文章

    7523

    瀏覽量

    88653
  • 報文
    +關注

    關注

    0

    文章

    38

    瀏覽量

    4017

原文標題:Efficient Parsers on FPGA

文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA中的流水線設計

    ,但是和獲得的巨大性能提升相比,可以忽略不計。2) I/O 瓶頸,比如某個運算需要輸入 8 個數據,而 memroy 只能同時提供 2 個數據,如果通過適當劃分運算步驟,使用流水線反而會減少面積。3
    發表于 10-26 14:38

    周期精確的流水線仿真模型

    使用軟件仿真硬件流水線是很耗時又復雜的工作,仿真過程中由于流水線的沖突而導致運行速度緩慢。本文通過對嵌入式處理器的流水線, 指令集, 設備控制器等內部結構的分析和
    發表于 12-31 11:30 ?9次下載

    什么是流水線技術

    什么是流水線技術 流水線技術
    發表于 02-04 10:21 ?3917次閱讀

    流水線中的相關培訓教程[1]

    流水線中的相關培訓教程[1]  學習目標     理解流水線中相關的分類及定義
    發表于 04-13 15:56 ?1035次閱讀

    流水線中的相關培訓教程[3]

    流水線中的相關培訓教程[3] (1) 寫后讀相關(RAW:Read After Write) (命名規則) :j 的執行要用到 i 的計算結果,當它們在流水線中重疊執行時,j 可
    發表于 04-13 16:02 ?840次閱讀

    CPU流水線定義

    cpu流水線技術是一種將指令分解為多步,并讓不同指令的各步操作重疊,從而實現幾條指令并行處理,以加速程序運行過程的技術。
    發表于 12-14 15:29 ?4674次閱讀

    電鍍流水線的PLC控制

    電鍍流水線的PLC控制電鍍流水線的PLC控制電鍍流水線的PLC控制
    發表于 02-17 17:13 ?36次下載

    FPGA之為什么要進行流水線的設計

    流水線又稱為裝配線,一種工業上的生產方式,指每一個生產單位只專注處理某一個片段的工作。以提高工作效率及產量;按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網帶線、懸掛線及滾筒
    的頭像 發表于 11-28 07:04 ?3588次閱讀

    各種流水線特點及常見流水線設計方式

    按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網帶線、懸掛線及滾筒流水線這七類流水線
    的頭像 發表于 07-05 11:12 ?7260次閱讀
    各種<b class='flag-5'>流水線</b>特點及常見<b class='flag-5'>流水線</b>設計方式

    如何選擇合適的LED生產流水線輸送方式

    LED生產流水線輸送形式分為平面直線傳輸流水線、各種角度平面轉彎傳輸流水線、斜面上傳流水線、斜面下傳流水線這四種輸送方式,企業也是可以根據L
    發表于 08-06 11:53 ?1007次閱讀

    嵌入式_流水線

    流水線一、定義流水線是指在程序執行時多條指令重疊進行操作的一種準并行處理實現技術。各種部件同時處理是針對不同指令而言的,他們可同時為多條指令的不同部分進行工作。? 把一個重復的過程分解為若干個子過程
    發表于 10-20 20:51 ?6次下載
    嵌入式_<b class='flag-5'>流水線</b>

    CPU流水線的問題

    1989 年推出的 i486 處理器引入了五級流水線。這時,在 CPU 中不再僅運行一條指令,每一級流水線在同一時刻都運行著不同的指令。這個設計使得 i486 比同頻率的 386 處理器性能提升了不止一倍。
    的頭像 發表于 09-22 10:04 ?1942次閱讀

    新版本Jenkins推薦使用聲明式流水線

    stage:和聲明式的含義一致,定義流水線的階段。Stage 塊在腳本化流水線語法中是可選的,然而在腳本化流水線中實現 stage 塊,可以清楚地在 Jenkins UI 界面中顯示每
    的頭像 發表于 01-13 15:34 ?975次閱讀

    什么是流水線 Jenkins的流水線詳解

    jenkins 有 2 種流水線分為聲明式流水線與腳本化流水線,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkin
    發表于 05-17 16:57 ?1056次閱讀

    新版本Jenkins推薦使用聲明式流水線

    stage:和聲明式的含義一致,定義流水線的階段。Stage 塊在腳本化流水線語法中是可選的,然而在腳本化流水線中實現 stage 塊,可以清楚地在 Jenkins UI 界面中顯示每
    的頭像 發表于 07-20 16:43 ?671次閱讀