損網(wǎng)絡(luò):FPGA智能網(wǎng)卡如何重塑數(shù)據(jù)中心數(shù)據(jù)面)
幾個(gè)月前我調(diào)一個(gè)分布式存儲(chǔ)集群?jiǎn)慰碈PU使用率只有百分之十幾可業(yè)務(wù)就是跑不滿帶寬。抓包一看網(wǎng)卡中斷幾乎全打在一個(gè)核上軟中斷和協(xié)議棧處理直接把那個(gè)核壓垮了其他核想幫忙也插不上手。換了一塊支持多隊(duì)列的網(wǎng)卡緩解了一些可數(shù)據(jù)一上來(lái)還是扛不住。后來(lái)我們把存儲(chǔ)報(bào)文處理的核心邏輯從CPU挪到智能網(wǎng)卡上問(wèn)題才算真正解決。這篇文章不打算講太多概念層面的東西就圍繞我最近折騰的FPGA智能網(wǎng)卡、鳴鏑這類(lèi)產(chǎn)品化網(wǎng)卡以及數(shù)據(jù)中心的RDMA無(wú)損網(wǎng)絡(luò)聊聊它們到底解決了什么問(wèn)題又該怎么選型。1. 智能網(wǎng)卡到底解決了什么問(wèn)題從一次CPU被打滿的排障說(shuō)起1.1 傳統(tǒng)網(wǎng)卡的工作模式為什么開(kāi)始撐不住傳統(tǒng)網(wǎng)卡的活兒其實(shí)很單一收包的時(shí)候把數(shù)據(jù)通過(guò)DMA搬進(jìn)內(nèi)存然后發(fā)中斷通知CPU“包到了”發(fā)包的時(shí)候從內(nèi)存把數(shù)據(jù)搬出去按MAC地址發(fā)到鏈路上。看起來(lái)簡(jiǎn)單可問(wèn)題就出在收包之后的那一長(zhǎng)串流程上——校驗(yàn)和、協(xié)議解析、路由查詢、Netfilter鉤子、協(xié)議棧處理、socket隊(duì)列再到用戶態(tài)拷貝全套下來(lái)全是CPU在干活。25G時(shí)代這種模式還勉強(qiáng)能撐到了100G就徹底繃不住了。咱們可以粗略算一筆賬100Gbps線速下如果全是64字節(jié)小包大約每秒要處理1.48億個(gè)包。一顆主流服務(wù)器CPU跑到3GHz單核每秒大概有30億個(gè)時(shí)鐘周期攤到每個(gè)包上只有20個(gè)周期左右。可是一個(gè)DMA描述符處理加校驗(yàn)都不止20個(gè)周期更別提后面還有一長(zhǎng)串協(xié)議棧邏輯。換句話說(shuō)一個(gè)核早就被數(shù)據(jù)面吃干榨凈了。虛擬化場(chǎng)景更嚴(yán)重。虛擬機(jī)的網(wǎng)絡(luò)不是直接懟到物理網(wǎng)卡上的中間還隔著一層虛擬交換機(jī)。每個(gè)包從虛擬機(jī)出來(lái)要先經(jīng)虛擬交換機(jī)做轉(zhuǎn)發(fā)決策、查安全組規(guī)則、做VXLAN封裝然后才從物理口出去。這一套操作比物理機(jī)收包還重所有開(kāi)銷(xiāo)都實(shí)打?qū)崝傇谒拗鳈C(jī)CPU上。我們當(dāng)時(shí)那個(gè)存儲(chǔ)集群就是這種狀態(tài)存儲(chǔ)節(jié)點(diǎn)之間跑RDMA協(xié)議中斷處理不均勻某一個(gè)核被打滿整個(gè)集群的吞吐就卡在那一兩個(gè)核上。1.2 卸載的本質(zhì)把“數(shù)據(jù)搬運(yùn)和協(xié)議處理”從CPU手里拿走智能網(wǎng)卡的思路說(shuō)起來(lái)特別樸素既然CPU干數(shù)據(jù)面不劃算那就把這些重復(fù)性的、固定模式的活兒放到網(wǎng)卡上干。網(wǎng)卡上原本就有DMA引擎現(xiàn)在再加上硬件解析、流表匹配、封裝解封裝、擁塞控制、加密卸載這些模塊CPU只負(fù)責(zé)下發(fā)規(guī)則和收控制面消息。這就是“卸載”的核心邏輯。不過(guò)這中間有個(gè)易混淆的概念不是所有卸載都叫智能網(wǎng)卡。普通網(wǎng)卡也有校驗(yàn)和卸載、TSO/GRO這些功能但它們只是把某個(gè)固定操作微加速規(guī)則和邏輯都焊死在芯片里。智能網(wǎng)卡的區(qū)別在于可編程性——你可以定義新的轉(zhuǎn)發(fā)規(guī)則、修改協(xié)議頭處理流程、加載新的擁塞控制算法。從這個(gè)角度智能網(wǎng)卡更像是一個(gè)放在網(wǎng)卡位置上的專(zhuān)用處理系統(tǒng)而不只是一個(gè)I/O設(shè)備。如果用快遞來(lái)打比方傳統(tǒng)網(wǎng)卡相當(dāng)于每個(gè)快遞員收發(fā)件時(shí)都要自己查地圖、手動(dòng)填面單、逐個(gè)繞路配送智能網(wǎng)卡則相當(dāng)于一個(gè)分揀中心快遞一進(jìn)來(lái)自動(dòng)掃描、按規(guī)則分揀、規(guī)劃路線還能隨時(shí)更新分揀規(guī)則。CPU從“親手送快遞”變成“制定規(guī)則、處理異常件”效率自然是另一個(gè)量級(jí)?,F(xiàn)在市面上的智能網(wǎng)卡方案大概分三類(lèi)一類(lèi)是固定加速的ASIC網(wǎng)卡把幾類(lèi)熱門(mén)卸載做成硬件邏輯性能功耗都很好但不能改邏輯一類(lèi)是FPGA智能網(wǎng)卡邏輯可以反復(fù)配置適合還沒(méi)完全定型的場(chǎng)景還有一類(lèi)是帶多核CPU的DPU網(wǎng)卡能跑完整的控制面協(xié)議?;揪褪且慌_(tái)小服務(wù)器掛在PCIe槽上。三類(lèi)各有各的舒服區(qū)后面會(huì)專(zhuān)門(mén)算賬。2. FPGA智能網(wǎng)卡為什么說(shuō)網(wǎng)絡(luò)處理天生適合“可重寫(xiě)的硬件”2.1 FPGA的流水線結(jié)構(gòu)與包處理天然匹配好多朋友一聽(tīng)到FPGA就發(fā)怵覺(jué)得那是硬件工程師的地盤(pán)。實(shí)際上從網(wǎng)絡(luò)從業(yè)者的角度看把FPGA理解成一個(gè)可以反復(fù)改接線的大規(guī)模并行邏輯陣列就行。它最核心的優(yōu)勢(shì)不是某個(gè)單獨(dú)模塊跑得快而是整條數(shù)據(jù)通路可以做到所有環(huán)節(jié)同時(shí)工作——包從進(jìn)去那一刻開(kāi)始解析、查表、轉(zhuǎn)發(fā)、封裝、發(fā)送就是在一條流水線上并行的。網(wǎng)絡(luò)包處理恰恰就是這種高度流水化的計(jì)算。一個(gè)包進(jìn)來(lái)先查協(xié)議類(lèi)型再提取五元組然后匹配流表按規(guī)則做QoS和封裝最后從出口發(fā)出去。每一步都依賴上一步的結(jié)果但不同包之間完全獨(dú)立。這種場(chǎng)景CPU處理起來(lái)效率很低因?yàn)镃PU是“取指—譯碼—執(zhí)行”的串行模型一個(gè)核同時(shí)在跑的上下文也就那么幾個(gè)還得不停做分支預(yù)測(cè)。FPGA則可以把流水線的每一級(jí)做成獨(dú)立硬件上一級(jí)還沒(méi)算完下一級(jí)已經(jīng)開(kāi)始處理前一幀的尾部了。我在實(shí)際調(diào)測(cè)里的感受是FPGA網(wǎng)卡在處理64字節(jié)小包時(shí)的延遲穩(wěn)定性比同級(jí)別通用CPU方案要穩(wěn)得多延遲抖動(dòng)基本可以忽略。2.2 FPGA網(wǎng)卡上真正值錢(qián)的幾個(gè)加速模塊一塊FPGA智能網(wǎng)卡上真正承擔(dān)業(yè)務(wù)的其實(shí)是下面這幾個(gè)模塊可編程解析器支持自定義報(bào)文格式不只是標(biāo)準(zhǔn)以太網(wǎng)/IP/TCP還能直接解析RoCE、NVMe-oF這類(lèi)特定協(xié)議字段。這是相比固定ASIC最大的自由度。多級(jí)流表匹配用哈希、基于塊內(nèi)存的匹配邏輯做五元組/連接級(jí)別的查表。按精確匹配、最長(zhǎng)前綴匹配分級(jí)規(guī)則變更是下發(fā)到硬件刷新不用動(dòng)數(shù)據(jù)通路。流調(diào)度器按優(yōu)先級(jí)、隊(duì)列、流的速率做整形和擁避。無(wú)損網(wǎng)絡(luò)的優(yōu)先級(jí)流控參數(shù)也是在這里生效。線速加密和摘要IPsec、MACsec的加解密、完整性校驗(yàn)?zāi)苄兜紽PGA邏輯里省掉CPU的加密開(kāi)銷(xiāo)。硬件時(shí)間戳在數(shù)據(jù)通路里直接給每個(gè)包蓋上納秒級(jí)時(shí)間戳這個(gè)對(duì)網(wǎng)絡(luò)監(jiān)控和延遲測(cè)量特別有用。我自己剛接觸時(shí)最直觀的感受是FPGA網(wǎng)卡的“可編程”不像CPU軟件那樣寫(xiě)個(gè)函數(shù)就能改邏輯而是通過(guò)加載不同的比特流或規(guī)則表來(lái)生效。好在鳴鏑這類(lèi)產(chǎn)品化網(wǎng)卡已經(jīng)把常用的卸載功能封裝好了我們不需要真去寫(xiě)Verilog按它提供的接口下發(fā)規(guī)則表就行FPGA的靈活性和用戶的開(kāi)發(fā)成本之間取了一個(gè)平衡。2.3 三種智能網(wǎng)卡方案到底怎么選看靈活性也看總成本經(jīng)常有朋友問(wèn)我FPGA網(wǎng)卡是不是一定比ASIC網(wǎng)卡好真不是。選型本質(zhì)上是拿靈活性換功耗和成本。我習(xí)慣用下面這張表來(lái)說(shuō)事維度FPGA智能網(wǎng)卡ASIC固定功能網(wǎng)卡多核SoC DPU可編程性邏輯級(jí)可重寫(xiě)規(guī)則和流程都能改只有參數(shù)能調(diào)邏輯流片后定型軟件可編程生態(tài)最豐富數(shù)據(jù)面性能高延遲確定性強(qiáng)最高功耗最優(yōu)取決于核數(shù)和加速器配合開(kāi)發(fā)周期硬件迭代一次幾周流片周期數(shù)月到一年軟件開(kāi)發(fā)迭代最快單卡成本較高適合批量但非海量大規(guī)模量產(chǎn)單卡成本低中高CPU核本身也值錢(qián)適用場(chǎng)景協(xié)議還在演進(jìn)、需要快速跟隨標(biāo)準(zhǔn)成熟、量非常大的場(chǎng)景需要復(fù)雜控制面邏輯的卸載說(shuō)實(shí)話數(shù)據(jù)中心無(wú)損網(wǎng)絡(luò)這塊目前正好處在協(xié)議參數(shù)還在調(diào)整的階段。DCQCN的參數(shù)怎么配、PFC是否全局開(kāi)啟、ECN閾值設(shè)多少不同廠商都有各自的推薦值。ASE方案一旦流片這些細(xì)節(jié)基本就固定了FPGA方案則可以隨著算法迭代重新配置這是它現(xiàn)在被重視的很關(guān)鍵的原因。當(dāng)然如果哪天無(wú)損網(wǎng)絡(luò)和智能網(wǎng)卡的功能完全標(biāo)準(zhǔn)化了ASIC的優(yōu)勢(shì)會(huì)重新凸顯。3. 鳴鏑這類(lèi)FPGA智能網(wǎng)卡產(chǎn)品化之后業(yè)務(wù)端拿到的是什么3.1 鳴鏑系列網(wǎng)卡在產(chǎn)品層面的幾個(gè)看點(diǎn)鳴鏑這個(gè)系列最近在圈子里討論比較多按公開(kāi)資料來(lái)看它屬于典型的FPGA智能網(wǎng)卡產(chǎn)品化路線。硬件上通常是PCIe 4.0或5.0形態(tài)雙25G或雙100G端口板載大容量?jī)?nèi)存用來(lái)做流表和緩沖隊(duì)列FPGA邏輯里集成了包解析、流表匹配、隧道封裝、RDMA和擁塞控制相關(guān)的硬件模塊。相比一塊裸FPGA開(kāi)發(fā)板鳴鏑這類(lèi)產(chǎn)品的價(jià)值在“打包好了”。網(wǎng)卡管理工具、驅(qū)動(dòng)、固件升級(jí)機(jī)制、調(diào)試接口都是現(xiàn)成的用戶拿到手不是面對(duì)一堆邏輯代碼而是通過(guò)一套協(xié)議直接下發(fā)流表規(guī)則、配置QoS、查看統(tǒng)計(jì)計(jì)數(shù)。網(wǎng)絡(luò)工程師可以用自己熟悉的那套“下發(fā)規(guī)則—看計(jì)數(shù)器—調(diào)參數(shù)”的方法來(lái)使用它而不需要懂硬件描述語(yǔ)言。從卸載范圍看鳴鏑覆蓋了云數(shù)據(jù)中心最常見(jiàn)的那幾類(lèi)卸載OVS流表卸載、VXLAN/GRE封裝卸載以及RoCEv2所需的ECN識(shí)別和流控配合。這幾個(gè)點(diǎn)正好是純CPU方案最吃力的地方也是無(wú)損網(wǎng)絡(luò)落地最核心的環(huán)節(jié)。3.2 實(shí)測(cè)下來(lái)感受最明顯的三個(gè)場(chǎng)景我自己目前在模擬環(huán)境里調(diào)過(guò)類(lèi)似定位的FPGA智能網(wǎng)卡三個(gè)場(chǎng)景印象比較深。第一個(gè)是云主機(jī)網(wǎng)絡(luò)卸載。沒(méi)卸載之前虛擬交換機(jī)每轉(zhuǎn)發(fā)一個(gè)包都要CPU參與規(guī)則多了之后CPU占用像坐過(guò)山車(chē)。把OVS流表下發(fā)到網(wǎng)卡后數(shù)據(jù)面直接走硬件匹配轉(zhuǎn)發(fā)宿主機(jī)CPU占用立刻掉了一大截。最讓我意外的是規(guī)則變更時(shí)的表現(xiàn)流表下發(fā)到FPGA是增量刷新不是把整張表重來(lái)一遍業(yè)務(wù)流量幾乎無(wú)感。第二個(gè)是存儲(chǔ)和AI訓(xùn)練的RoCE場(chǎng)景。分布式存儲(chǔ)節(jié)點(diǎn)之間跑RDMA時(shí)一個(gè)很頭疼的問(wèn)題是PFC和ECN參數(shù)配不好就會(huì)掉速。FPGA網(wǎng)卡上這些參數(shù)可以直接通過(guò)寄存器調(diào)而且ECN標(biāo)記是在數(shù)據(jù)路徑里由硬件判斷的不像軟件方案那樣需要靠采樣來(lái)近似。調(diào)完之后AI訓(xùn)練這類(lèi)長(zhǎng)尾通信的尾延遲明顯變得穩(wěn)定。第三個(gè)場(chǎng)景可能很多人沒(méi)意識(shí)到就是網(wǎng)絡(luò)可視化和安全過(guò)濾。FPGA可以在線速下做包頭和負(fù)載特征匹配把特定流量鏡像到分析端或者在硬件層直接丟掉惡意報(bào)文。這在CPU方案里幾乎不可能做到線速但FPGA天然就是干這個(gè)的。3.3 產(chǎn)品化網(wǎng)卡同樣要付出的隱性代價(jià)用了幾周之后我也得說(shuō)實(shí)話產(chǎn)品化FPGA網(wǎng)卡不是零成本方案。首先是驅(qū)動(dòng)和固件的配套。FPGA邏輯越靈活驅(qū)動(dòng)和固件的版本匹配就越敏感。我們遇到過(guò)升級(jí)固件后舊驅(qū)動(dòng)異常業(yè)務(wù)斷連的情況最后只能按“固件和驅(qū)動(dòng)必須同批驗(yàn)證”的規(guī)矩來(lái)管理。其次是管理接口的成熟度。產(chǎn)品化網(wǎng)卡的管理工具通常能覆蓋絕大多數(shù)需求但真要到做深度調(diào)試的時(shí)候還是得翻廠商提供的寄存器級(jí)文檔。再有一個(gè)容易被忽略的功耗和散熱。FPGA的邏輯規(guī)模上去了功耗比同端口的固定功能網(wǎng)卡高不少。單臺(tái)服務(wù)器如果插兩塊供電和散熱就得提前做評(píng)估。這些成本不會(huì)出現(xiàn)在產(chǎn)品宣傳頁(yè)上但會(huì)在你部署的時(shí)候一點(diǎn)一點(diǎn)“找補(bǔ)”回來(lái)。4. 無(wú)損網(wǎng)絡(luò)的真相PFC、ECN與智能網(wǎng)卡之間其實(shí)是三方博弈4.1 RDMA為什么必須追求“無(wú)損”先從一個(gè)基礎(chǔ)問(wèn)題說(shuō)起RDMA為什么對(duì)丟包這么敏感傳統(tǒng)TCP丟包后走重傳、擁塞窗口退避雖然延遲升高但總歸能恢復(fù)。而RDMA為了降低延遲把數(shù)據(jù)通路上的重傳和擁塞處理減到最輕很多實(shí)現(xiàn)甚至依賴無(wú)損網(wǎng)絡(luò)來(lái)保證不丟包。一旦某個(gè)包丟了接收端遲遲等不到數(shù)據(jù)整個(gè)傳輸就可能等上很長(zhǎng)時(shí)間才觸發(fā)超時(shí)代價(jià)是微秒級(jí)的性能瞬間掉到毫秒級(jí)差距上千倍。所以無(wú)損網(wǎng)絡(luò)不是一個(gè)“金字招牌”它是RDMA能夠成立的前提。為了讓網(wǎng)絡(luò)不丟包傳統(tǒng)思路就是用流控把壓力往上游推推到源頭讓它降速。這聽(tīng)起來(lái)很合理但真做起來(lái)全是坑。4.2 PFC看似簡(jiǎn)單的逐跳反壓挖了哪些坑PFC優(yōu)先級(jí)流控的原理就是每跳交換機(jī)和網(wǎng)卡都監(jiān)控自己隊(duì)列的長(zhǎng)度超過(guò)閾值就向上一跳發(fā)暫停幀讓對(duì)端暫時(shí)停發(fā)該優(yōu)先級(jí)的流量。一層一層推上去最后讓發(fā)送端降速。這個(gè)機(jī)制本身沒(méi)有大問(wèn)題坑全在工程實(shí)現(xiàn)里。最典型的是隊(duì)頭阻塞某個(gè)擁塞隊(duì)列觸發(fā)了反壓暫停幀會(huì)把同一優(yōu)先級(jí)上的所有流都擋在后面哪怕這些流根本不經(jīng)過(guò)擁塞點(diǎn)。我見(jiàn)過(guò)一臺(tái)混跑AI訓(xùn)練和普通業(yè)務(wù)的交換機(jī)上一條訓(xùn)練流的突發(fā)流量把同優(yōu)先級(jí)里所有流全部堵死連監(jiān)控流量都跟著遭殃。PFC風(fēng)暴更是運(yùn)維噩夢(mèng)配置里任何一個(gè)環(huán)節(jié)出錯(cuò)暫停幀就會(huì)在環(huán)網(wǎng)里循環(huán)傳播整個(gè)機(jī)房的該優(yōu)先級(jí)流量全部癱瘓排查難度極高。所以現(xiàn)在做無(wú)損網(wǎng)絡(luò)的人對(duì)PFC基本是“能不開(kāi)就不開(kāi)必須開(kāi)就限制范圍”。把優(yōu)先級(jí)流控當(dāng)作最后一道防線而不是主要手段這個(gè)觀念上的轉(zhuǎn)變很重要。4.3 ECN和DCQCN則是更聰明的“有損折中”為了少依賴PFC現(xiàn)在無(wú)損網(wǎng)絡(luò)的主流做法是端到端擁塞控制。核心思想是交換機(jī)不直接掐斷流量而是在隊(duì)列深度超過(guò)閾值時(shí)給報(bào)文打上ECN標(biāo)記。接收端網(wǎng)卡收到帶標(biāo)記的報(bào)文后生成擁塞通知包發(fā)回給發(fā)送端發(fā)送端據(jù)此快速降速。這一套在RoCEv2里對(duì)應(yīng)的就是DCQCN。算法細(xì)節(jié)當(dāng)然比這段文字復(fù)雜得多什么時(shí)候標(biāo)記、降速比例多大、什么時(shí)候升速、CNP包的生成頻率怎么控制每個(gè)參數(shù)都會(huì)影響真實(shí)業(yè)務(wù)吞吐。這恰恰是FPGA智能網(wǎng)卡發(fā)揮價(jià)值的地方——ECN標(biāo)記的識(shí)別需要在線速下做毫秒級(jí)的延遲都會(huì)影響算法效果而擁塞控制參數(shù)的調(diào)節(jié)則需要靈活因?yàn)樗惴ㄟ€在持續(xù)演進(jìn)。固定功能的ASIC在流片那一刻就把這些邏輯定型了而FPGA的邏輯可以重新配置。我們的實(shí)際感受是這塊的可迭代性比紙面上的性能參數(shù)更重要因?yàn)槟阌肋h(yuǎn)不知道下一次算法優(yōu)化會(huì)改成什么樣。4.4 智能網(wǎng)卡在無(wú)損網(wǎng)絡(luò)里實(shí)際承擔(dān)的活把角色拆開(kāi)看智能網(wǎng)卡在無(wú)損網(wǎng)絡(luò)里承擔(dān)的事情有三塊流控參數(shù)的硬件卸載PFC的暫停閾值、ECN標(biāo)記閾值、速率限制器全部由網(wǎng)卡硬件執(zhí)行CPU只負(fù)責(zé)初始化和動(dòng)態(tài)調(diào)整。參數(shù)下發(fā)之后即使CPU被業(yè)務(wù)打滿流控依然有效。線速ECN識(shí)別和標(biāo)記交換機(jī)打上的ECN標(biāo)記接收端網(wǎng)卡要在收包的第一時(shí)間識(shí)別并決定是否生成CNP。這個(gè)操作做慢了擁塞窗口就調(diào)整晚了。PFC統(tǒng)計(jì)與死鎖檢測(cè)網(wǎng)卡維護(hù)每個(gè)優(yōu)先級(jí)的暫停幀收發(fā)統(tǒng)計(jì)出現(xiàn)異常時(shí)及時(shí)上報(bào)。這些計(jì)數(shù)器是排查PFC風(fēng)暴最重要的依據(jù)。鳴鏑這類(lèi)FPGA網(wǎng)卡在無(wú)損網(wǎng)絡(luò)里的價(jià)值就在于它開(kāi)箱就帶這些硬件邏輯同時(shí)保留了“未來(lái)算法升級(jí)時(shí)重新配置邏輯”的可能。這比單純買(mǎi)一塊固定功能的RoCE網(wǎng)卡要穩(wěn)妥得多。用我們團(tuán)隊(duì)內(nèi)部的話來(lái)說(shuō)無(wú)損網(wǎng)絡(luò)不是“配置”出來(lái)的一次性結(jié)果而是需要持續(xù)調(diào)優(yōu)和演進(jìn)的動(dòng)態(tài)過(guò)程。5. 選型與落地到底什么樣的組合才是“最優(yōu)解”5.1 按業(yè)務(wù)場(chǎng)景對(duì)號(hào)入座別問(wèn)“哪個(gè)最好”要問(wèn)“哪個(gè)適合”經(jīng)常有人問(wèn)“買(mǎi)FPGA智能網(wǎng)卡是不是一步到位”。我的回答是沒(méi)有一步到位只有場(chǎng)景適配。下面是我自己整理的一個(gè)粗粒度選型表業(yè)務(wù)場(chǎng)景核心訴求推薦方案理由HPC高性能計(jì)算超低延遲、固定路徑通信成熟RoCE網(wǎng)卡優(yōu)先ASIC通信模式固定、追求極致性能功耗AI訓(xùn)練集群長(zhǎng)尾流量、突發(fā)嚴(yán)重、需持續(xù)調(diào)優(yōu)FPGA智能網(wǎng)卡支持ECN參數(shù)自定義擁塞算法還在演進(jìn)需要靈活迭代分布式存儲(chǔ)吞吐優(yōu)先數(shù)據(jù)面卸載FPGA智能網(wǎng)卡RoCEv2卸載存儲(chǔ)協(xié)議卸載收益最直接云主機(jī)大規(guī)模虛擬化OVS卸載、多租戶隔離帶OVS卸載的智能網(wǎng)卡流表頻繁變化需要可編程匹配通用Web/業(yè)務(wù)成本敏感、流量相對(duì)平穩(wěn)固定功能網(wǎng)卡CPU調(diào)優(yōu)FC網(wǎng)卡性價(jià)比最優(yōu)這個(gè)表不是絕對(duì)的但能反映出核心邏輯流量模式越穩(wěn)定、協(xié)議越標(biāo)準(zhǔn)越應(yīng)該選ASIC固定功能流量突發(fā)越強(qiáng)、協(xié)議越不成熟越需要FPGA這類(lèi)可編程方案。5.2 成本賬智能網(wǎng)卡的錢(qián)花得值不值咱們可以算一筆很粗略的賬。一臺(tái)雙路服務(wù)器如果要支撐100G網(wǎng)絡(luò)并做OVS轉(zhuǎn)發(fā)和RoCE處理純CPU方案往往要預(yù)留4到6個(gè)物理核給網(wǎng)絡(luò)數(shù)據(jù)面。一顆28核的CPU那相當(dāng)于損失了七分之一左右的算力。如果跑的是云主機(jī)業(yè)務(wù)這些核占著的成本一直存在很浪費(fèi)。智能網(wǎng)卡把數(shù)據(jù)面卸載之后這幾個(gè)核可以釋放跑業(yè)務(wù)虛擬機(jī)。按一臺(tái)服務(wù)器的生命周期和核數(shù)來(lái)折算一塊智能網(wǎng)卡多花的幾萬(wàn)元成本通常能在一年左右從業(yè)務(wù)部署密度提升上賺回來(lái)這筆賬在測(cè)試環(huán)境里跑一遍就能算清楚。當(dāng)然如果要跑的場(chǎng)景只是少量收發(fā)包智能網(wǎng)卡的優(yōu)勢(shì)就體現(xiàn)不出來(lái)這時(shí)候也沒(méi)必要上。5.3 部署和調(diào)優(yōu)時(shí)容易踩的坑提前幫你排掉最后說(shuō)幾個(gè)我們自己踩過(guò)、周邊同行也常踩的坑。第一驅(qū)動(dòng)和固件的版本配套關(guān)系一定要固化。FPGA網(wǎng)卡邏輯可更新固件升級(jí)后驅(qū)動(dòng)不匹配會(huì)有兼容性問(wèn)題升級(jí)前必須看官方配套表升級(jí)后立刻做回歸測(cè)試。我們現(xiàn)在的規(guī)矩是生產(chǎn)環(huán)境能不動(dòng)固件就不動(dòng)。第二BIOS里的PCIe配置別漏。智能網(wǎng)卡要發(fā)揮性能PCIe鏈路寬度和速率必須配夠SR-IOV、IOMMU相關(guān)選項(xiàng)也要按產(chǎn)品手冊(cè)打開(kāi)。曾經(jīng)遇到性能只有預(yù)期一半的情況查了半天最后發(fā)現(xiàn)PCIe被BIOS自動(dòng)協(xié)商到了x4不是x16。第三PFC和ECN參數(shù)不要一把梭。無(wú)損網(wǎng)絡(luò)的配置要按業(yè)務(wù)流量模型來(lái)定不同優(yōu)先級(jí)配不同的緩沖策略PFC能不開(kāi)就不開(kāi)優(yōu)先級(jí)范圍越小越好。調(diào)完一定要跑一輪長(zhǎng)時(shí)壓測(cè)看PFC暫停幀計(jì)數(shù)有沒(méi)有異常增長(zhǎng)我見(jiàn)過(guò)不少“配置看著合理、跑了半小時(shí)就開(kāi)始丟包”的案例。最后我直接分享一點(diǎn)自己的體會(huì)。我一開(kāi)始也懷疑智能網(wǎng)卡是不是就是高級(jí)一點(diǎn)的卸載卡真正調(diào)完RDMA和PFC之后才明白在無(wú)損網(wǎng)絡(luò)這件事上網(wǎng)卡端的靈活性和可編程能力比想象中重要。FPGA方案看起來(lái)功耗高一點(diǎn)、門(mén)檻也高一點(diǎn)但遇到PFC風(fēng)暴、新?lián)砣惴ㄟ@類(lèi)問(wèn)題你會(huì)慶幸自己選了一塊能改邏輯的卡。如果你正在折騰數(shù)據(jù)中心網(wǎng)絡(luò)建議先跑通一套標(biāo)準(zhǔn)的流量模型再考慮上智能網(wǎng)卡如果預(yù)算允許優(yōu)先選支持RoCEv2卸載和流表可編程的方案。這個(gè)方向變化很快早一點(diǎn)自己動(dòng)手試試比看多少文章都有用。