白皮書

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

XUP-P3R with advanced passive heatsink

概述

One of the features of both BittWare’s SmartNIC Shell and BittWare’s Loopback Example is a packet parser/classifier that extracts protocol fields from packets. With this white paper, we not only wanted to describe our Parser, but explain how using HLS to build and configure it has resulted in a better implementation than using the P4 language. The Parser code is available on the BittWare developer website for free to AMD UltraScale+ owners as part of our Loopback Example (January 2020 availability)

超越 P4 對智慧 NIC 進行程式設計

Today the Parser component of BittWare’s SmartNIC Shell is built using the AMD HLS C++ development environment. But an earlier revision of BittWare’s SmartNIC Shell used the P4 language though the AMD SDNet tool.

One reason to use P4 is that it’s an emerging standard popular among people embracing software-defined networking (SDN) on commodity Intel servers. However, AMD later restricted the availability of SDNet. Our use of P4 was specifically for end-users of SmartNIC Shell, so this restriction caused us to search for a more open solution. Following the success of our RSS implementation using HLS, we were motivated to re-implement the SmartNIC Shell parser using this same HLS approach (specifically the Xilinx HLS C++ environment).

本白皮書的 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 下的運行時。

如前所述,環回示例的原始程式碼,包括其解析器塊,可通過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 Runtime”。P4 運行時提供了一個標準的運行時 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++)的解釋有助於評估適合您的方法。

One final note is regarding portability between our FPGA cards. Between our AMD FPGA-based cards, HLS provides an easy method with few, if any, changes needed. For moving to an Intel-based card, such as our 520N-MX, source code changes will be required, particularly with respect to compliler pragmas. However, the basic concepts are identical. In both cases we are structuring C++ based upon our knowledge of FPGA translation challenges. Arbitrary C++ code will run very poorly inside an FPGA. However, C++ code restructured and anointed with pragmas works very well. The changes required for AMD or Intel are very similar but just expressed a little differently.

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

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

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

請求 PDF 下載

您在此頁面上看到的是解析器的基本概述,它是SmartNIC Shell的一部分。SmartNIC 外殼的完整應用說明中有更多細節,最重要的是可以免費下載!填寫表格以請求訪問完整應用筆記的PDF版本。

*”表示必填欄位

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