白皮書

構建 BittWare 的數據包解析器,HLS 與 P4 實現

概述

BittWare的SmartNIC Shell和BittWare的Loopback示例的功能之一是數據包解析器/分類器,它從數據包中提取協定欄位。通過本白皮書,我們不僅想描述我們的解析器,還想解釋如何使用HLS來構建和配置它,從而比使用P4語言實現得更好。解析器代碼可在 BittWare 開發者網站上免費提供給 Xilinx UltraScale+ 擁有者,作為我們的環回示例的一部分(2020 年 1 月可用)

超越 P4,對智慧網卡進行程式設計

如今,BittWare 的 SmartNIC Shell 的解析器元件是使用 Xilinx HLS C++開發環境構建的。但是BittWare的SmartNIC Shell的早期版本通過Xilinx SDNet工具使用了P4語言。

使用P4的一個原因是,它是一種新興標準,在商用英特爾伺服器上採用軟體定義網路(SDN)的人群中很受歡迎。然而,Xilinx後來限制了SDNet的可用性。我們使用P4是專門針對SmartNIC Shell的最終使用者的,因此這一限制促使我們尋找更開放的解決方案。在使用 HLS 成功實施 RSS 之後,我們被激勵使用相同的 HLS 方法(特別是 Xilinx HLS C++環境)重新實現 SmartNIC Shell 解析器。

本白皮書的 PDF 版本

什麼是數據包解析器?

通過乙太網使用的協議對於硬體來說很難利用。之所以存在此挑戰,是因為協定具有許多可選欄位。例如,這些選項使得查找IP標頭的開頭變得複雜。為什麼?在IP標頭情況下,其前面可以有零個、一個或兩個VLAN標記。也可以有 MPLS 標記。因此,硬體需要了解協定,以找到IP標頭。硬體需要IP標頭才能查找經常在硬體篩選器和表中使用的IP位址。下一級也存在類似的問題,因為IP標頭本身具有可選欄位。

BittWare的HLS C++數據包解析器可以處理:

  • 0 到 2 個 VLAN 標記(舊的 SDNet 代碼允許 0 或 1)
  • 0到5個MPLS標籤(BittWare的舊SDNet代碼無法識別MPLS)
  • IP 片段
  • IPv4 標頭(不是 IPv6)

它假定埠ID位於以下IP協定中:TCP、UDP、DCCP和 STCP

在基本上創建了數據包解析器的兩個版本之後,我們注意到使用P4與HLS C++之間存在一些差異。總體而言,HLS流程不如P4抽象,但該工具要成熟得多。

資源使用方式的詳細資訊在表中:

特徵P4/SDNetHLS C++
斷續器3,1853,391
布拉姆220
寄存 器10,3615,975
代碼行2061,154

您可以看到,在所有 FPGA 資源中,HLS 要麼相似,要麼更好。雖然原始碼確實需要更多的行,但其中一部分受到註釋和格式的影響。但是,HLS C++實現確實總是需要比P4更多的代碼行。不過,這是針對數據包解析器/分類器的,它屬於P4可以描述的範圍 - HLS C++可以做更多的事情。HLS是非常通用的,幾乎可以做任何事情。P4非常專業。

更好的是,既然HLS實現已經存在,任何修改它以消化乙太網協定變體的後續工作都與在P4語言中進行修改大致相同。這是因為我們的 HLS C++實現的結構是對我們創建的低級解析器函數的一系列調用。此方法類似於直接操作位於 P4 下的運行時。

如前所述,Loopback 示例的原始程式碼(包括其解析器塊)可通過 BittWare Developer 網站免費提供給 Ultrascale++ 擁有者。它很好地說明瞭如何在 HLS C++代碼中使用 AXI 介面。想看一看,但沒有 BittWare FPGA 卡?請與我們聯繫,瞭解在哪裡購買。

什麼是元組?

通過乙太網使用的協議對於硬體來說很難利用。之所以存在此挑戰,是因為協定具有許多可選欄位。例如,這些選項使得查找IP標頭的開頭變得複雜。為什麼?在IP標頭情況下,其前面可以有零個、一個或兩個VLAN標記。也可以有 MPLS 標記。因此,硬體需要了解協定,以找到IP標頭。硬體需要IP標頭才能查找經常在硬體篩選器和表中使用的IP位址。下一級也存在類似的問題,因為IP標頭本身具有可選欄位。

BittWare的HLS C++數據包解析器可以處理:

  • 0 到 2 個 VLAN 標記(舊的 SDNet 代碼允許 0 或 1)
  • 0到5個MPLS標籤(BittWare的舊SDNet代碼無法識別MPLS)
  • IP 片段
  • IPv4 標頭(不是 IPv6)

它假定埠ID位於以下IP協定中:TCP、UDP、DCCP和 STCP

P4會在FPGA硬體中變得普遍嗎?

創建P4語言是為了使用軟體定義「數據包轉發數據平面」(或網路交換機)。該語言與硬體供應商Barefoot Networks特別相關。P4語言與Google幫助推廣的“P4運行時”不同。P4 運行時提供了一個標準的運行時 API,該 API 允許操作由 P4 編譯的解決方案的控制平面。

P4 確實可以輕鬆為新協定定義數據包分類器/解析器。P4 還指定了一組完整的表查找函數,並且可以重寫流經的數據包,例如消除 VLAN 標記。

這是否意味著P4的靈活性將導致FPGA的採用?我們看到反對這種情況發生的原因有幾個。

在FPGA硬體上提供P4子集的商業選擇存在,但它們目前範圍有限。此外,如前所述,商業條款使BittWare難以利用這些條款來創建我們可以隨產品免費提供的示例程式。

需要注意的是,沒有實際的FPGA應用程式可以專門用P4編寫。例如,在某些範例中,我們的解析器後面的接收器端縮放 (RSS) 塊無法在 P4 中創作。但是,HLS C++可用於創作塊,甚至是組合這兩個函數的單個塊。

此外,P4 表查找函數基本上是用 RTL 或 HLS C++編寫的特定於硬體的運行時庫的包裝器。程式師可以直接從HLS調用這樣的運行時C++而不會受到任何懲罰。

底線是,在使用P4和HLS C++實現解析器之後,我們實際上更喜歡HLS C++方法。目前尚不清楚FPGA對P4的需求是否會增長到足以支援成熟工具的程度。HLS C++可以做得更多,也更成熟。

HLS 的可移植性和結論

空標題

我們希望對 FPGA 上數據包解析器的兩種實現(一種是 P4 語言,另一種是使用 HLS C++)的解釋有助於您評估正確的方法。

最後一點是關於我們的FPGA卡之間的便攜性。在我們基於 Xilinx FPGA 的卡之間,HLS 提供了一種簡單的方法,幾乎不需要進行任何更改。要遷移到基於英特爾的卡,例如我們的520N-MX,則需要更改原始程式碼,特別是在編譯器編譯指示方面。但是,基本概念是相同的。在這兩種情況下,我們都根據我們對FPGA翻譯挑戰的了解來構建C++。任意C++代碼在FPGA中的運行速度非常差。但是,C++代碼重組並用編譯指示進行塗膏,效果非常好。Xilinx 或 Intel 所需的更改非常相似,只是表達略有不同。

作為BittWare的SmartNIC Shell的一部分,我們的解析器可以幫助團隊快速掌握在我們的FPGA卡上構建網路數據包處理應用程式的速度。瞭解更多關於SmartNIC的卡或與我們聯繫,討論您的應用需求。

BittWare的Loopback示例重新部署了SmartNIC shell的一個子集,我們可以免費提供。該子集包括我們的解析器庫。

還有更多內容可讀:獲取應用說明

請求下載

您在此頁面上看到的是解析器的基本概述,解析器是 SmartNIC Shell 的一部分。在SmartNIC Shell的完整應用程式說明中還有更多詳細資訊,最重要的是,它可以免費下載!填寫表單以請求訪問完整 App Note 的 PDF 版本。

*”表示必填欄位

姓名*
請檢查這是一封有效的電子郵件,因為PDF將使用此地址發送。
位址和城市*