白皮書

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

XUP-P3R 配備先進的無源散熱片

概述

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

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

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

使用 P4 的一個原因是,它是一種新興標準,在商用英特爾伺服器上採用軟體定義網路 (SDN) 的人們中很受歡迎。但是,AMD後來限制了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 下的運行時。

如前所述,環回示例的原始程式碼,包括其解析器塊,可通過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++)的解釋有助於評估適合您的方法。

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

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

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

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

請求 PDF 下載

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

*”表示必填欄位

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