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