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

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

3天內(nèi)不再提示

構建BittWare的數(shù)據(jù)包解析器

劉強 ? 來源:gdfffa ? 作者:gdfffa ? 2022-08-02 08:03 ? 次閱讀

超越P4的智能網(wǎng)卡編程技術

如今,BittWare的SmartNIC Shell的解析器組件是使用Xilinx HLS C++開發(fā)環(huán)境構建的。但BittWare的SmartNIC Shell的早期版本雖然使用Xilinx SDNet工具,但使用了P4語言。

使用P4的一個原因是,它是一種新興的標準,受到在商品英特爾服務器上擁抱軟件定義網(wǎng)絡(SDN)的人們的歡迎。然而,Xilinx后來限制了SDNet的可用性。我們對P4的使用是專門針對SmartNIC Shell的終端用戶的,所以這種限制使我們不得不尋找更開放的解決方案。在我們使用HLS成功實現(xiàn)RSS之后,我們被激勵使用同樣的HLS方法(特別是Xilinx HLS C++環(huán)境)重新實現(xiàn)SmartNIC Shell解析器。

什么是“Tuple”?

在網(wǎng)絡中,tuple是指從網(wǎng)絡數(shù)據(jù)包中提取的字段,并組合在一起。最常見的是“5-tuple”,它結合了源和目的IP地址、源和目的IP端口(如果IP協(xié)議有這些端口的話)以及IP協(xié)議號。

SmartNIC產(chǎn)品中的BittWare解析器會檢查數(shù)據(jù)包,并在可用的情況下提取最多4個數(shù)據(jù)包。它將這些數(shù)據(jù)放入添加到數(shù)據(jù)包元數(shù)據(jù)的96位字段中。該字段寬度為IPv4源和目標地址以及源和目標端口提供了足夠的位數(shù)。我們的解析器為數(shù)據(jù)包中不可用的字段提供零。如果一個數(shù)據(jù)包不包括任何IP有效載荷,那么完整的96位元組字段為零。

一個完整的5-tuple需要額外的8位來適應協(xié)議號。使用BittWare解析器的HLS用戶只需稍加修改源代碼就能輕松適應這一變化。

BittWare的RSS是一個可能在數(shù)據(jù)包流水線中跟隨解析器并消耗96位元組數(shù)據(jù)的塊的例子。在我們的應用筆記中閱讀關于該塊的內(nèi)容,比較RTL和HLS C++。

在 BittWare 的 Loopback 示例中,Parser 的使用方式有所不同。Loopback 使用了 Parser 的三個副本,而不是擴展元數(shù)據(jù)的一個副本。之所以采取這種方法,是因為Parser實際上相當小。

在基本上創(chuàng)建了兩個版本的數(shù)據(jù)包解析器后,我們注意到使用P4與HLS C++的一些差異。總的來說,HLS流的抽象性不如P4,但工具卻遠比P4成熟。

資源使用情況詳見下表。

你可以看到,在所有的FPGA資源中,HLS不是相似就是更好。雖然源代碼確實需要更多的行數(shù),但其中一部分是受注釋和格式的影響。然而,HLS的C++實現(xiàn)確實總是要比P4需要更多的代碼行數(shù)。但這是針對數(shù)據(jù)包解析器/分類器而言的,屬于 P4 所能描述的范圍,而 HLS C++ 可以做得更多。HLS是非常通用的,幾乎可以做任何事情。P4是非常專業(yè)的。

更妙的是,既然有了HLS的實現(xiàn),那么后續(xù)修改它以消化以太網(wǎng)協(xié)議的變化就和用P4語言修改差不多了。這是因為我們的HLS C++實現(xiàn)的結構是對我們創(chuàng)建的低級解析函數(shù)的調(diào)用序列。這種方法類似于直接操作位于P4語言下的運行時。

如前所述,回環(huán)實例的源代碼,包括它的解析器塊,可以通過BittWare開發(fā)者網(wǎng)站免費提供給Ultrascale++的用戶。它很好地說明了如何在HLS C++代碼中使用AXI接口。想看但沒有BittWare FPGA卡?請與我們聯(lián)系,了解哪里可以購買。

什么是數(shù)據(jù)包解析器?

在以太網(wǎng)上使用的協(xié)議對硬件來說是一個挑戰(zhàn),要利用這些協(xié)議。這種挑戰(zhàn)的存在是因為協(xié)議有許多可選字段。例如,這些選項使查找IP頭的開始變得很復雜。 為什么這么說呢?在IP頭的情況下,前面可以有零、一個或兩個VLAN標簽。 也可以有MPLS標簽。因此硬件需要了解協(xié)議,剛好可以找到IP頭。硬件需要IP頭才能找到IP地址,而IP地址經(jīng)常被用于硬件過濾器和表。類似的問題在下一級也存在,因為IP頭本身有可選的字段。

BittWare的HLS C++包解析器可以處理。

0至2個VLAN標簽(舊的SDNet代碼允許0或1)。

0到5個MPLS標簽(BittWare的舊SDNet代碼不識別MPLS)。

IP碎片

IPv4頭文件(不是IPv6

它假設在這些IP協(xié)議中找到端口ID。TCP、UDP、DCCP和STCP。

P4會不會成為FPGA硬件的通用?

P4語言是為了使用軟件定義“包轉(zhuǎn)發(fā)數(shù)據(jù)平面”(或網(wǎng)絡交換機)而創(chuàng)建的。該語言尤其與硬件廠商Barefoot Networks有關。P4語言與谷歌幫助推廣的名為“P4 Runtime”的東西不同。P4 Runtime提出了一個標準的運行時API,可以操縱由P4編譯的解決方案的控制平面。

P4確實可以很容易的為一個新協(xié)議定義一個數(shù)據(jù)包分類器/解析器。P4還指定了一套完整的表查找功能,它可以重寫流過的數(shù)據(jù)包,例如消除VLAN標簽。

這是否意味著P4的靈活性將導致FPGA的采用?我們認為有幾個理由反對這種情況發(fā)生。

在FPGA硬件上提供P4子集的商業(yè)選項是存在的,但是它們目前的范圍有限。此外,如前所述,由于商業(yè)條款的限制,BittWare很難利用這些條款來創(chuàng)建一個我們可以隨產(chǎn)品免費提供的示例程序。

需要注意的是,沒有任何真實世界的FPGA應用可以完全用P4編寫。例如,在一些例子中,跟隨我們的解析器的接收端縮放(RSS)塊不能用P4編寫。然而,HLS C++可以用來編寫任何一個塊,甚至是結合兩個功能的單個塊。

另外,P4表查詢函數(shù)基本上是用RTL或HLS C++編寫的硬件專用運行庫的封裝器。程序員可以直接從HLS C++中調(diào)用這樣的運行庫,而不會受到任何懲罰。

最重要的是,在使用P4和HLS C++兩種方法實現(xiàn)解析器后,我們實際上更傾向于HLS C++的方法。目前還不清楚FPGA上對P4的需求是否會增長到足以支持一個成熟的工具。HLS C++可以做得更多,也更成熟。

HLS的便攜性和結論

我們希望對FPGA上的兩個數(shù)據(jù)包解析器的實現(xiàn)進行解釋,一個是用P4語言,另一個是用HLS C++,希望對你評估正確的方法有所幫助。

最后一點是關于我們FPGA卡之間的可移植性。在基于Xilinx FPGA的卡之間,HLS提供了一個簡單的方法,幾乎不需要任何改變。如果要移植到基于英特爾的卡上,比如我們的520N-MX,則需要修改源代碼,特別是在兼容器的實用性方面。然而,基本概念是相同的。在這兩種情況下,我們都是基于我們對FPGA翻譯挑戰(zhàn)的了解來構建C++。任意的C++代碼在FPGA內(nèi)運行效果會很差。然而,經(jīng)過結構化并涂抹了實用程序的C++代碼卻能很好地運行。Xilinx或Intel所需要的改變非常相似,只是表達方式有些不同。

作為BittWare的SmartNIC Shell的一部分,我們的Parser可以幫助團隊快速上手,在我們的FPGA卡上構建網(wǎng)絡數(shù)據(jù)包處理應用。了解更多關于我們的卡的SmartNIC的信息,或與我們聯(lián)系,討論您的應用需求。

BittWare的Loopback例子重新部署了我們可以免費提供的SmartNIC shell的一個子集。這個子集包括我們的Parser庫。

審核編輯:郭婷

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

    關注

    70

    文章

    2136

    瀏覽量

    120380
  • 服務器
    +關注

    關注

    12

    文章

    8700

    瀏覽量

    84534
  • C++
    C++
    +關注

    關注

    21

    文章

    2085

    瀏覽量

    73301
收藏 人收藏

    評論

    相關推薦

    請問DCTCP與DCUDP 的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務端是如何交互的?

    DCTCP與DCUDP的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務端是如何交互的?
    發(fā)表于 07-25 06:37

    使用AT SAVETRANSLINK時UDP數(shù)據(jù)包丟失怎么解決?

    Android 發(fā)送一個小 UDP 數(shù)據(jù)包(5 字節(jié))。這個小數(shù)據(jù)包被我的微控制在UART上接收到。微控制將更大的數(shù)據(jù)包(可變長度,約
    發(fā)表于 07-18 07:17

    在Iphone4上運行UDP接收,數(shù)據(jù)包丟失怎么解決?

    Iphone4 上運行 UDP 接收,請注意非常大的數(shù)據(jù)包丟失。其他設備(包括 Ipad)的數(shù)據(jù)包丟失率要低得多。 使用另一個對等體(同時)與 ESP 模塊并運行數(shù)據(jù)包嗅探
    發(fā)表于 07-18 06:56

    能否在ESP結束之前通過串行端口停止傳入的UDP數(shù)據(jù)包的傳輸以解析下一個UDP數(shù)據(jù)包

    丟棄在ESP完成之前不需要的數(shù)據(jù)包,以便通過串行端口發(fā)送它以接收下一個數(shù)據(jù)包, 如果沒有,我必須按順序讀取所有傳入的數(shù)據(jù)包,需要的和不需要的, 而且波特率不足,主機處理開銷大, 我
    發(fā)表于 07-16 06:18

    請問如何使用AT CIPSEND或AT CIPSENDBUF發(fā)送多個數(shù)據(jù)包?

    我可以使用 AT CIPSEND 發(fā)送單個數(shù)據(jù)包。但是我必須發(fā)送一系列二進制數(shù)據(jù)包。如何使用AT CISEND或AT CIPSENDBUF發(fā)送多個數(shù)據(jù)包,什么是正確的算法? 到目前為止,我嘗試
    發(fā)表于 07-15 07:37

    在AN65974中短數(shù)據(jù)包和零長數(shù)據(jù)包是什么意思?

    在 AN65974 中,短數(shù)據(jù)包和零長數(shù)據(jù)包是什么意思? 非常感謝!
    發(fā)表于 05-30 07:41

    如何在AIROC GUI上獲取良好數(shù)據(jù)包和總數(shù)據(jù)包?

    使用 IQxel-MW LifePoint 作為發(fā)生并發(fā)送波形BT_1DH5_00001111_Fs80M.iqvsg,但無法在 AIROC 工具中接收數(shù)據(jù)包。 以下是從 IQxel 發(fā)送
    發(fā)表于 05-22 06:39

    請問高端網(wǎng)絡芯片如何處理數(shù)據(jù)包呢?

    隨著網(wǎng)絡芯片帶寬的持續(xù)提升,其內(nèi)部數(shù)據(jù)包處理單元的工作負載也隨之增加。然而,如果處理單元無法與網(wǎng)絡接口的傳入速率相匹配,將無法及時處理數(shù)據(jù)包,這不僅會導致數(shù)據(jù)包隨機丟失,更會降低網(wǎng)絡的吞吐量。
    的頭像 發(fā)表于 04-02 16:36 ?451次閱讀
    請問高端網(wǎng)絡芯片如何處理<b class='flag-5'>數(shù)據(jù)包</b>呢?

    STM32H7接收數(shù)據(jù)包異常,一接收的數(shù)據(jù)出現(xiàn)兩發(fā)送的內(nèi)容怎么解決?

    );__HAL_UART_DISABLE_IT( huart1, DMA_IT_HT); 2、發(fā)送數(shù)據(jù)包1
    發(fā)表于 03-08 08:05

    DPDK在AI驅(qū)動的高效數(shù)據(jù)包處理應用

    傳統(tǒng)的數(shù)據(jù)包處理方式是數(shù)據(jù)包先到內(nèi)核最后再到用戶層進行處理。這種方式會增加額外的延遲和CPU開銷,嚴重影響數(shù)據(jù)包處理的性能。 DPDK 繞過內(nèi)核,在用戶空間中實現(xiàn)快速數(shù)據(jù)包處理。
    的頭像 發(fā)表于 02-25 11:28 ?713次閱讀
    DPDK在AI驅(qū)動的高效<b class='flag-5'>數(shù)據(jù)包</b>處理應用

    使用P4和Vivado工具簡化數(shù)據(jù)包處理設計

    電子發(fā)燒友網(wǎng)站提供《使用P4和Vivado工具簡化數(shù)據(jù)包處理設計.pdf》資料免費下載
    發(fā)表于 01-26 17:49 ?0次下載
    使用P4和Vivado工具簡化<b class='flag-5'>數(shù)據(jù)包</b>處理設計

    TC387 rdc(解析器)代碼不起作用的原因?

    我正在解碼解析器信號,我正在使用為 TC38x 電機控制軟件下載的 edsadc 和 rdc 庫。 當我饋送解析器信號時,我看不到任何轉(zhuǎn)換結果,因為它在 1 到 65536 值之間滑動。 正如你在
    發(fā)表于 01-22 06:17

    網(wǎng)絡丟問題解析

    什么是丟 數(shù)據(jù)在Internet上是以數(shù)據(jù)包為單位傳輸?shù)?,單位為字?jié),數(shù)據(jù)在網(wǎng)絡上傳輸,受網(wǎng)絡設備,網(wǎng)絡質(zhì)量等原因的影響,使得接收到的數(shù)據(jù)
    的頭像 發(fā)表于 11-09 15:10 ?760次閱讀
    網(wǎng)絡丟<b class='flag-5'>包</b>問題<b class='flag-5'>解析</b>

    數(shù)據(jù)包的生命周期

    電子發(fā)燒友網(wǎng)站提供《數(shù)據(jù)包的生命周期.pdf》資料免費下載
    發(fā)表于 10-13 14:44 ?0次下載

    如何使用指針數(shù)據(jù)包定義數(shù)據(jù)緩沖區(qū)

    指針數(shù)據(jù)包 相信大多數(shù)人會將定長數(shù)組換為 指針 , 每次使用時動態(tài)的開辟 CURR_LENGTH 大小的空間, 因為這樣可以避免造成 MAX_LENGTH - CURR_LENGTH 空間的浪費
    的頭像 發(fā)表于 09-27 15:01 ?396次閱讀