CPU作為計算機的“大腦”扮演著重要的作用,網絡、存儲、計算……各種處理都需要CPU“親歷親為”,導致其負荷過重,極大地影響了效率。為了解決這個問題,人們先后嘗試了多種方法:擴充計算機容量、采用分布式處理、或提高其性能……
十多年前,軟件定義網絡提出將控制平面與數據平面分離開來。如今,規模日益增大的數據對CPU提出了越來越大的挑戰,對于數據,是否有更創新性的處理方法呢?本文將系統介紹SDN中的硬件卸載,包括硬件卸載概念、背景、方式、實踐模擬等。
什么是硬件卸載?
硬件卸載是指將某些任務或計算從計算機的主處理器 (CPU) 轉移到專用硬件組件(例如網絡接口卡 (NIC) 或圖形處理單元 (GPU))的過程,以提高系統性能和效率。這可以通過不同的方式、使用不同的技術和設備來完成。本文重點討論軟件定義網絡中的硬件卸載情況。
什么是軟件定義網絡?
隨著網絡中設備數量和數據包處理量的不斷增加,需要一種新的方法來管理網絡。主流的解決方案是從傳統的包含專用硬件與控制平面相結合并提供選定的功能的交換機等單個設備,轉移到軟件定義網絡抽象出的控制平面、數據平面、管理平面三個不同的層。如下圖所示:
| 軟件定義網絡的演進
第一層是管理層或管理平面。這就像OpenStack這類應用所在的位置,可以將一些配置應用于網絡并將其用于虛擬化等領域。下一層是控制平面。最下面是數據平面。它由硬件(例如白盒交換機)和軟件(軟件數據平面)組成,數據平面就是硬件卸載所在的地方。
軟件數據平面是一個常用的術語,用來描述處理網絡數據包中用戶數據的應用程序。它包括了各種功能,例如轉發應用程序(就像虛擬交換機一樣)或是更專門的應用程序(比如作為虛擬網絡防火墻)。最常用的情況下軟件數據平面可以實現SDN的網絡虛擬化功能,并將數據包傳遞給在虛擬化主機上運行的虛擬機。簡而言之,軟件數據平面讓網絡應用程序能夠高效地處理和轉發數據,以滿足各種網絡需求。
軟件定義網絡的挑戰
軟件數據平面在虛擬化主機上使用通用的CPU來運行數據包的轉發和處理。盡管它可以將數據包分發給不同的虛擬機,但也存在一定的成本。
然而,使用軟件進行數據包轉發可能不夠高效,無論是延遲還是數據包吞吐量方面。此外,為了實際運行數據轉發平面,需要從主機操作系統中分配資源。這包括CPU資源(如時間和內存),而且性能的可靠性可能會受到挑戰。特定的數據包流量特征或高負載工作可能會對軟件數據平面的性能產生影響。
在接下來的部分,我們將展示如何利用硬件卸載來避免這些問題。通過硬件卸載,可以將一些數據包處理任務轉移到專門的硬件中,從而提高性能和效率。這樣可以減輕主機CPU的負擔,并減少延遲,同時提高數據包的吞吐量。硬件卸載提供了一種更可靠和高效的方式來處理數據包轉發,尤其是對于具有特定需求或高負載的情況。
硬件卸載如何提供幫助?
有一些純粹的軟件技術或方法可以緩解這些問題。與其依賴中斷來獲取數據包,我們可以在網絡設備上使用硬件輪詢。與在用戶空間和內核空間之間復制內存或數據包不同,我們可以使用直接內存訪問技術。然而,這往往會導致需要更多的資源。
運行軟件數據平面往往伴隨著高成本,這也表明了,也許使用硬件才是更好的選擇。
SDN 中的硬件卸載
硬件卸載分為部分卸載和完全卸載兩種方式。在部分卸載中,處理簡單的網絡任務(如匹配數據包頭中的字段或替換某些頭部)被委托給硬件,但數據包仍然必須進入軟件中通過某個虛擬交換機進行處理,并轉發到適當的目的地。
在完全硬件卸載中,數據包轉發的責任被委托給硬件。硬件不僅匹配字段或替換頭部,還將數據包轉發到適當的端口,通常是卡的虛擬功能。
這兩種解決方案都有利弊。部分硬件卸載具有軟件交換的所有優點,因為數據包仍然進入軟件進行處理,但性能較低。完全卸載中,網絡性能更好,因為硬件完全處理數據包,但失去了靈活性。例如,由于虛擬機直接連接到硬件,遷移虛擬機更加困難。
使用網卡進行硬件卸載
在硬件卸載中,最好的解決方案是使用傳統的網卡,也稱為網絡接口卡或網絡接口控制器。這是一種流行的設備,您可能已經在您的軟件定義網絡中部署過。市場上大多數網卡都支持硬件卸載,并提供諸如VLAN或VXLAN封裝和解封裝、按數據包頭進行匹配等功能。這種設備被認為成本和功耗較低,并且相對快速。另一個優點還包括供應商提供可靠的資源,例如設備的整個生命周期內的文檔和支持。
然而,傳統網卡也有一些缺點。供應商不僅選擇功能,還選擇使用這些功能的API 。因此,如果網卡不具備您正在尋找的功能,可能就需要換另一個設備。
下一步 - SmartNIC
SmartNIC 是可以繞過傳統網卡限制的一種方法。SmartNIC 與網卡類似,但添加了可編程部分,通常是 FPGA 或 ASIC。用戶可以自行對 FPGA 進行編程,從而實現所需的功能。
由于 FPGA 是完全可編程的硬件,我們甚至可以用它來實現更復雜的程序,例如一個 L3 路由器。這樣,你就可以在硬件中完成所有路由。但即使在這種情況下,軟件和硬件之間仍然存在連接。在這個 L3 路由器的例子中,仍然需要將路由表和路由條目插到卡中,軟件仍然負責這部分工作。
DPU/IPU - 下一代智能網卡
要完全從軟件過渡到硬件,還需要另一個設備,也就是SmartNIC的下一個演進階段,稱為DPU、IPU 或下一代 SmartNIC。這相當于是一個添加了CPU的智能網卡。
| 下一代 SmartNIC
當你使用 DPU/IPU時,硬件擁有自己的 CPU。你甚至可以在卡上運行一個獨立的操作系統,并運行負責在路由器中插入規則的軟件應用程序,以實現與軟件的完全隔離,這樣一來,主機上的所有資源都可用于工作負載。
硬件卸載 - 現實生活中的例子
在了解了硬件卸載的基本概念之后,我們來具體看一下軟件定義網絡中的用例。下面通過一個現實生活中的例子來展示硬件卸載的可能性。該解決方案旨在通過OpenvSwitch進行VXLAN隧道卸載。
| SDN環境
首先,讓我們了解SDN環境的概況。在這個復雜的軟件定義網絡環境中,我們有OpenStack作為虛擬化編排器,并且有OpenDaylight作為控制平面,管理著Open vSwitch實例和硬件路由器。對于Open vSwitch實例,我們使用OpenFlow和OVSDB協議,在硬件路由器方面我們使用NETCONF協議。通過這個基礎架構,我們能夠為虛擬機提供從一個獨立位置的數據中心到另一個獨立位置的數據中心的VXLAN隧道。
| 問題隔離
這個例子其實不需要這么復雜的環境。由于采用了 SDN 的方法,我們只需要一個 Open vSwitch 實例。需要進行一些配置來創建VXLAN端口,這將通過 OVSDB 協議完成。在實際的數據包處理和轉發中,我們需要將數據包分發到適當的隧道和虛擬機。
| 解決方案架構
在這張圖中可以看到解決方案的高級架構以及所有重要部分。有一個由 OvS 實例管理的虛擬機。它通過 VXLAN 隧道與其余的overlay網絡連接。在此設置中,我們使用 OvS 的 DPDK 版本,并使用了Netronome Agilio 作為一個SmartNIC,使用 P4 語言編寫的固件進行編程。值得注意的是,我們使用的是OVS的默認版本,沒有進行任何定制。唯一需要的定制是在 DPDK 中進行的。
數據包可以采用兩條路徑。我們稱之為慢路徑和快路徑。慢路徑由黑色箭頭表示。數據包從虛擬機經過Netronome Agilio到達OvS實例,并封裝在 VXLAN 隧道中,隨后通過物理端口發送到網絡。返回的數據包沿著相同的路徑并由 OvS 解封裝。
由于SmartNIC可以完全獨立地處理數據包。因此快路徑就是數據包從虛擬機發送出去,然后由 Netronome Agilio 處理和封裝,并直接發送到物理端口。返回的數據包也可以由網卡解封裝并直接轉發到虛擬機。這條路徑要短得多,所以數據包傳輸得更快。這個案例是完全卸載的一個例子。
最后,有人可能會問,為什么我們需要慢路徑呢?這是因為OvS使用了一種反應式流插入機制。OvS需要看到一個數據包來創建相應的流。因此,第一個數據包必須進入OvS,創建相應的流規則,然后再將其卸載到Netronome Agilio。后續的數據包可以由Agilio處理,并采用快路徑進行處理。
部署流程
首先,我們需要了解 OvS 隧道和卸載機制。然后在P4固件中實現慢路徑部分,并在DPDK中實現慢路徑驅動程序。完成這一步操作后,我們在 P4 固件中實現快路徑部分,并實現了將流規則插入到Netronome Agilio的機制。
硬件卸載演示的結果
為了測試解決方案,我們使用了TRex流量生成器和分析器。由于我們的設置限制,我們運行了L2轉發而不是VXLAN,并使用了一個具有內核橋接的Open vSwitch作為參考。如圖所示,延遲顯著改善。
| 延遲對比
不僅延遲更好。通過快路徑的數據包幾乎沒有任何抖動。這意味著所有數據包都通過硬件在相同的時間內進行處理。
| 抖動對比
另一方面,在參考案例中存在明顯的抖動。這展示了來自網卡處理中斷以及內核中運行的其他軟件的中斷處理相關的問題。
結 論
硬件卸載對控制平面軟件的影響較小。在SDN的架構下,控制平面軟件通常不需要參與其中,因此對于該軟件來說,實際上沒有提供輸入的必要性。然而,在數據平面軟件方面,硬件卸載得到了廣泛的支持。Open vSwitch和其他項目都提供了對硬件卸載的支持,Tungsten Fabric或VPP只是其中的兩個例子。這種支持意味著數據平面軟件能夠與硬件配合,從而提高性能和效率。
在軟件層面,有不同的策略可供選擇。各種軟件方案可以與硬件配套使用,以實現數據平面的優化。同時,在硬件方面,存在著成熟的解決方案,如傳統的網絡接口卡(NIC)或者是新一代SmartNIC/DPU 等,這些網卡提供了與軟件配套使用的硬件功能,以提供更高的吞吐量和更低的延遲。
此外,對于特定領域的應用,還可以自行開發定制的硬件解決方案。這種情況下,可以根據特定需求和應用場景設計和構建專用硬件,以滿足個性化的要求。
審核編輯:劉清
評論
查看更多