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