干貨 | 如何使用FPGA來(lái)設(shè)計(jì)智能網(wǎng)卡(SmartNIC)
時(shí)間:2025-11-16 22:20:11
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
智能服務(wù)器適配器或智能網(wǎng)卡(SmartNIC)通過(guò)從服務(wù)器的CPU上卸載網(wǎng)絡(luò)處理工作負(fù)載和任務(wù),提高云端和私有數(shù)據(jù)中心中的服務(wù)器性能。將網(wǎng)絡(luò)處理卸載到智能網(wǎng)卡并不是一個(gè)新的概念,例如有些網(wǎng)卡(NIC)可以卸載諸如校驗(yàn)和計(jì)算與分段等一些網(wǎng)絡(luò)處理功能。
智能網(wǎng)卡為數(shù)據(jù)中心網(wǎng)絡(luò)提供了幾項(xiàng)重要優(yōu)勢(shì),包括:
1. 通過(guò)直接在網(wǎng)絡(luò)接口卡上執(zhí)行任務(wù)來(lái)加速網(wǎng)絡(luò)、存儲(chǔ)和計(jì)算任務(wù),消除了在服務(wù)器上運(yùn)行這些工作負(fù)載的需要,并釋放了CPU周期,從而顯著提高服務(wù)器性能并降低總體功耗,進(jìn)而降低系統(tǒng)級(jí)的總體擁有成本。
2. 卸載日益復(fù)雜的網(wǎng)絡(luò)任務(wù),包括諸如VxLAN等覆蓋隧道協(xié)議和來(lái)自服務(wù)器處理器的復(fù)雜虛擬交換,使服務(wù)器處理器能夠執(zhí)行實(shí)際的創(chuàng)收性任務(wù)。
3. 通過(guò)在更快速的硬件而不是較慢的軟件中去執(zhí)行卸載功能,從而提高有效網(wǎng)絡(luò)帶寬和吞吐量。
提供附加的、靈活的功能,它們都易于適應(yīng)新的和不斷變化的網(wǎng)絡(luò)和存儲(chǔ)協(xié)議。
目前,智能網(wǎng)卡設(shè)計(jì)采用以下三種形式之一:
1. 多核智能網(wǎng)卡,基于包含多個(gè)CPU內(nèi)核的ASIC2. 基于現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)的智能網(wǎng)卡3. FPGA增強(qiáng)型智能網(wǎng)卡,它將硬件可編程FPGA與ASIC網(wǎng)絡(luò)控制器相結(jié)合
一個(gè)多核智能網(wǎng)卡設(shè)計(jì)可能包括一個(gè)集成了許多軟件可編程微處理器內(nèi)核的ASIC。這些內(nèi)核通常是性能更高的Arm處理器,它們處理數(shù)據(jù)包并從主服務(wù)器CPU(昂貴)上卸載任務(wù)。多核智能網(wǎng)卡ASIC還可以集成固定功能硬件引擎,它們可以卸載定義明確的任務(wù),如標(biāo)準(zhǔn)化的安全和存儲(chǔ)協(xié)議。
然而,多核智能網(wǎng)卡至少受到兩個(gè)制約因素的限制:
1. 這些智能網(wǎng)卡基于軟件可編程處理器,由于缺乏處理器并行性,它們?cè)诒挥糜诰W(wǎng)絡(luò)處理時(shí)速度較慢。
2. 這些多核ASIC中的固定功能硬件引擎缺乏智能網(wǎng)卡卸載功能越來(lái)越需要的數(shù)據(jù)平面可編程性和靈活性。
基于處理器的多核智能網(wǎng)卡設(shè)計(jì)在10G這一代網(wǎng)卡中得到了廣泛的應(yīng)用。然而,隨著數(shù)據(jù)中心中的以太網(wǎng)數(shù)據(jù)速率從10G上升到25G、40G、50G、100G甚至更高,這些以軟件為中心的多核智能網(wǎng)卡就已經(jīng)難以跟上了。這些多核智能網(wǎng)卡在這些較高的數(shù)據(jù)速率下無(wú)法達(dá)到所需的峰值帶寬。同時(shí),多核智能網(wǎng)卡ASIC中的固定功能引擎無(wú)法擴(kuò)展去處理新的加密或安全算法,這是因?yàn)樗鼈內(nèi)狈ψ銐虻目删幊绦?,只能適應(yīng)算法的細(xì)微改變。
基于FPGA的智能網(wǎng)卡
與單純基于軟件的實(shí)現(xiàn)相比,基于FPGA的智能網(wǎng)卡設(shè)計(jì)可以將網(wǎng)絡(luò)功能提速幾個(gè)數(shù)量級(jí)。在智能網(wǎng)卡設(shè)計(jì)中使用FPGA可提供定制硬件的線(xiàn)速性能和功率效率,并能夠創(chuàng)建支持復(fù)雜卸載任務(wù)和提高單數(shù)據(jù)流網(wǎng)絡(luò)性能的深度數(shù)據(jù)包/網(wǎng)絡(luò)處理流水線(xiàn)。通過(guò)利用FPGA中固有的大量硬件并行性來(lái)復(fù)制這些流水線(xiàn),可以提高巨大數(shù)據(jù)性能,足以滿(mǎn)足基于更快的以太網(wǎng)網(wǎng)絡(luò)的下一代數(shù)據(jù)中心架構(gòu)的高性能、高帶寬、高吞吐量需求。
FPGA增強(qiáng)型智能網(wǎng)卡
有三種方法可以開(kāi)發(fā)FPGA增強(qiáng)型智能網(wǎng)卡設(shè)計(jì)。第一種方法是簡(jiǎn)單地將FPGA連接到現(xiàn)有的網(wǎng)卡。另一種方法是設(shè)計(jì)下一代智能網(wǎng)卡ASIC,并在該芯片上集成了一個(gè)FPGA陣列。第三種方法是在智能網(wǎng)卡ASIC的設(shè)計(jì)中增加一個(gè)高速的芯片到芯片互連,并開(kāi)發(fā)一個(gè)連接到智能網(wǎng)卡ASIC的FPGA chiplet合封芯片。這三種設(shè)計(jì)方法各有優(yōu)缺點(diǎn)。
在現(xiàn)有網(wǎng)卡上基于FPGA增強(qiáng)型智能網(wǎng)卡設(shè)計(jì)可帶來(lái)確保兼容性的優(yōu)勢(shì)?,F(xiàn)有驅(qū)動(dòng)程序、API和接口協(xié)議對(duì)于現(xiàn)有功能將保持不變,因?yàn)樗鼈兪窃诂F(xiàn)有網(wǎng)卡上實(shí)現(xiàn)的?,F(xiàn)有API和驅(qū)動(dòng)程序的擴(kuò)展只需要在附加的FPGA中去實(shí)現(xiàn)功能擴(kuò)展而已。
這種方法的缺點(diǎn)來(lái)自一定程度的結(jié)構(gòu)性。首先,如果現(xiàn)有的設(shè)計(jì)缺少為包括FPGA在內(nèi)的擴(kuò)展芯片提供的任何接口,那么FPGA將需要直接連接到主機(jī)接口總線(xiàn)和與網(wǎng)卡并行的以太網(wǎng)端口。如果設(shè)計(jì)中確實(shí)具有一個(gè)用于外部加速器的接口,那么該接口可能會(huì)對(duì)FPGA必須處理的大量以太網(wǎng)數(shù)據(jù)包流量造成帶寬瓶頸。
為了獲得最佳性能,網(wǎng)卡組件和FPGA應(yīng)該位于同一塊芯片上。這種方法需要嵌入式FPGA(eFPGA)。將eFPGA集成到網(wǎng)卡中可以最大限度地提高FPGA功能域與網(wǎng)卡其余部分之間的可用帶寬,從而加快從直接的、芯片上的連接到eFPGA的傳輸速率。
一種中間設(shè)計(jì)方法涉及到對(duì)智能網(wǎng)卡ASIC的重新定義。在這種設(shè)計(jì)中,增加了一個(gè)高速的芯片到芯片接口,從而將ASIC連接到FPGA芯片上;然后將這種組合解決方案合并到多芯片合封模塊(MCM)中。這種方法的優(yōu)點(diǎn)是只需要對(duì)智能網(wǎng)卡ASIC進(jìn)行最小的更改,從而降低設(shè)計(jì)風(fēng)險(xiǎn)。
這種基于多芯片合封組合的設(shè)計(jì)方法還為智能網(wǎng)卡的設(shè)計(jì)引入了刪除選項(xiàng)的可能性,該選項(xiàng)可以以芯片或電路板形態(tài)提供,也可以加上或者不加不同價(jià)位的FPGA。這種方法的缺點(diǎn)是MCM內(nèi)的芯片到芯片互連可能提供的帶寬比片上互連更少。
智能網(wǎng)卡被用于不同的部署中,包括存儲(chǔ)、安全和網(wǎng)絡(luò)處理。如下圖所示,最終目標(biāo)是實(shí)現(xiàn)消耗更少處理器內(nèi)核的解決方案,同時(shí)以更低的成本提供更高的性能。
圖1:智能網(wǎng)卡釋放處理器內(nèi)核智能網(wǎng)卡的定義是廣泛的,包括一個(gè)大型的功能層級(jí)結(jié)構(gòu),所有這些功能都建立在一個(gè)基本的網(wǎng)卡基礎(chǔ)之上。示例1到13說(shuō)明了可以添加到網(wǎng)卡的處理元素,以創(chuàng)建功能更加強(qiáng)大的智能網(wǎng)卡。當(dāng)使用某種形式的FPGA來(lái)實(shí)現(xiàn)智能網(wǎng)卡時(shí),可以根據(jù)需要輕松添加或刪除這些功能。基于FPGA的智能網(wǎng)卡和FPGA增強(qiáng)型智能網(wǎng)卡的實(shí)現(xiàn)還允許對(duì)每種任務(wù)加速功能進(jìn)行簡(jiǎn)便的遠(yuǎn)程修改或改進(jìn),即使智能網(wǎng)卡已經(jīng)安裝在數(shù)據(jù)中心服務(wù)器上之后也可以進(jìn)行。
示例1展示了一個(gè)基本型網(wǎng)卡的基礎(chǔ),它采用多個(gè)以太網(wǎng)MAC和一個(gè)用于主處理器接口的PCIe塊。主處理器隨后必須處理所有以太網(wǎng)通信。
圖2:示例1 –基本型網(wǎng)卡的基礎(chǔ)示例2將DMA引擎添加到基本型網(wǎng)卡中,通過(guò)允許網(wǎng)卡在以太網(wǎng)MAC和服務(wù)器內(nèi)存之間移動(dòng)以太網(wǎng)通信,而無(wú)需服務(wù)器CPU的大量干預(yù),從而減少了主處理器的工作負(fù)載。
圖3:示例2 –將DMA引擎添加到基本型網(wǎng)卡中示例3添加一個(gè)過(guò)濾引擎,它通過(guò)阻止無(wú)需處理器注意的數(shù)據(jù)包,進(jìn)一步減少主處理器的任務(wù)負(fù)載。
圖4:示例3 –添加一個(gè)過(guò)濾引擎示例4將外部DRAM添加到過(guò)濾引擎,這顯著增加了智能網(wǎng)卡上可用于過(guò)濾的規(guī)則數(shù)量。有了足夠的外部?jī)?nèi)存,智能網(wǎng)卡可以管理數(shù)百萬(wàn)條規(guī)則。
圖5:示例4 –將外部DRAM添加到過(guò)濾引擎示例5添加了L2/L3卸載引擎,該引擎可以通過(guò)處理智能網(wǎng)卡的以太網(wǎng)端口之間的低層交換和路由,進(jìn)一步減少主處理器的工作負(fù)載。為了有效,L2/L3卸載引擎將需要大量外部DRAM來(lái)緩沖網(wǎng)絡(luò)數(shù)據(jù)包。
注意,智能網(wǎng)卡FPGA或ASIC與外部DRAM之間的接口必須滿(mǎn)足正被交換的以太網(wǎng)通信帶寬要求。
圖6:示例5 –添加一個(gè)L2/L3卸載引擎示例6添加了一個(gè)隧道引擎,以允許智能網(wǎng)卡卸載各種隧道封包,并進(jìn)一步減輕處理器的周期密集型隧道性需求。
圖7:示例6 –添加一個(gè)隧道引擎示例7添加快速外部存儲(chǔ),以允許智能網(wǎng)卡對(duì)傳入的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行深度緩沖,從而實(shí)現(xiàn)了線(xiàn)速數(shù)據(jù)包交換和具有多個(gè)隊(duì)列的分層QoS調(diào)度。
圖8:示例7 –添加深度數(shù)據(jù)包緩沖示例8添加一個(gè)具有自己的DRAM緩沖的流引擎,以使智能網(wǎng)卡的路由引擎能夠處理數(shù)百萬(wàn)個(gè)路由表?xiàng)l目。流引擎有助于卸載網(wǎng)絡(luò)地址轉(zhuǎn)換/協(xié)議地址轉(zhuǎn)換(NAT / PAT)操作的負(fù)擔(dān)。
圖9:示例8 –帶有流引擎的智能網(wǎng)卡示例9添加一個(gè)TCP卸載引擎來(lái)處理TCP堆棧的全部/部分工作,這樣可以在不消耗更多CPU周期的情況下提高智能網(wǎng)卡性能。
圖10:示例9 – TCP卸載引擎示例10將部分/全部安全引擎添加到智能網(wǎng)卡中,以每個(gè)流為基礎(chǔ)從主處理器卸載加密和解密任務(wù)。
圖11:示例10 –添加安全引擎以卸載加密和解密任務(wù)示例11添加了一個(gè)單獨(dú)的QoS引擎,以允許智能網(wǎng)卡管理服務(wù)等級(jí)協(xié)議(SLA),而無(wú)需服務(wù)器CPU的干預(yù)。
圖12:示例11 –添加單獨(dú)的QoS引擎以管理SLA示例12添加一個(gè)可編程的數(shù)據(jù)包解碼器,該解碼器將類(lèi)似P4的可編程性集成到智能網(wǎng)卡中。P4是一種標(biāo)準(zhǔn)的網(wǎng)絡(luò)編程語(yǔ)言,專(zhuān)門(mén)用于描述和編程分組數(shù)據(jù)包轉(zhuǎn)發(fā)面的操作。
圖13:例12 –添加可編程分組數(shù)據(jù)包解碼器示例13添加一個(gè)或多個(gè)板載處理器,它們?yōu)橹悄芫W(wǎng)卡提供了完整的軟件可編程性(用于諸如OAM等任務(wù)),進(jìn)一步實(shí)現(xiàn)服務(wù)器處理器的任務(wù)卸載。
圖14:示例13 –帶有板載處理器的智能網(wǎng)卡在數(shù)據(jù)中心引入帶有FPGA的智能網(wǎng)卡設(shè)計(jì)的最大障礙之一是基于軟件的多核智能網(wǎng)卡在10G時(shí)代獲得的巨大成功所帶來(lái)的工程慣性。網(wǎng)絡(luò)卸載和加速技術(shù)已經(jīng)在API和接口協(xié)議采用并標(biāo)準(zhǔn)化,這些API和接口協(xié)議允許服務(wù)器任務(wù)與某些多核智能網(wǎng)卡交互。
每個(gè)服務(wù)器軟件棧都以幾個(gè)特定的網(wǎng)卡和智能網(wǎng)卡為目標(biāo)。為現(xiàn)有網(wǎng)卡和智能網(wǎng)卡開(kāi)發(fā)的API和驅(qū)動(dòng)程序被硬編碼到在服務(wù)器CPU上運(yùn)行的軟件棧中。除非使用FPGA設(shè)計(jì)的智能網(wǎng)卡可以支持這些現(xiàn)有API并模擬現(xiàn)有接口協(xié)議,否則將這些智能網(wǎng)卡在投入使用時(shí)需要修改軟件棧。





