
在一個API中高效共用FPGA資源:BittWare的Crossbar白皮書
在一個API中高效共用FPGA資源 構建蝶形橫桿開關,解決FPGA中的資源分享問題 FPGA卡通常
BittWare的SmartNIC Shell和BittWare的Loopback Example的功能之一是數據包解析器/分類器,它從數據包中提取協定字段。在這份白皮書中,我們不僅想描述我們的解析器,還想解釋使用 HLS 構建和配置它如何比使用 P4 語言實現得更好。解析器代碼在BittWare開發者網站上免費提供給AMD UltraScale+使用者,作為我們的環回示例(2020年1月可用)的一部分
今天,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 解析器。
通過乙太網使用的協議對硬體來說具有挑戰性。存在此挑戰是因為協定具有許多可選欄位。例如,這些選項使查找IP標頭的開頭變得複雜。為什麼?在IP報頭情況下,它前面可以有零個、一個或兩個 VLAN 標記。也可以有 MPLS 標籤。因此,硬體需要瞭解協議,剛好可以找到IP報頭。硬體需要IP標頭才能查找硬體篩選器和表中經常使用的IP位址。下一級也存在類似的問題,因為IP標頭本身具有可選欄位。
BittWare的HLS C++數據包解析器可以處理:
它假定埠ID位於以下IP協定中:TCP、UDP、DCCP和 STCP。
在基本上創建了兩個版本的數據包解析器之後,我們注意到使用 P4 與 HLS C++之間的一些差異。總體而言,HLS流程沒有P4那麼抽象,但該工具要成熟得多。
資源使用方式的詳細資訊如下表所示:
特徵 | P4/SDNet | HLS C++ |
---|---|---|
負載均衡 | 3,185 | 3,391 |
布拉姆 | 22 | 0 |
寄存 器 | 10,361 | 5,975 |
代碼行數 | 206 | 1,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++數據包解析器可以處理:
它假定埠ID位於以下IP協定中:TCP、UDP、DCCP和 STCP。
創建 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++可以做得更多,也更成熟。
我們希望對 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子集。該子集包括我們的解析器庫。
您在此頁面上看到的是解析器的基本概述,它是SmartNIC Shell的一部分。SmartNIC 外殼的完整應用說明中有更多細節,最重要的是可以免費下載!填寫表格以請求訪問完整應用筆記的PDF版本。
“*”表示必填欄位
在一個API中高效共用FPGA資源 構建蝶形橫桿開關,解決FPGA中的資源分享問題 FPGA卡通常
BittWare合作夥伴IP TimeServo IP核心高性能系統定時器IP 原子規則的TimeServo IP內核是一個RTL IP內核,用於
BittWare 網路研討會採用下一代英特爾 ® Agilex™ FPGA 的高性能計算,採用巴塞羅那超級計算中心的示例應用程式,現已按需提供(包括錄製
BittWare網路研討會介紹VectorPath S7t-VG6加速卡 現在可按需提供:在本次網路研討會中,Achronix®和Bittware將討論使用PCIe的增長趨勢