可編程數(shù)據(jù)平面從根本上改變網(wǎng)絡(luò)元素的構(gòu)建和管理方式,也在一定程度上平衡了靈活性和性能之間的矛盾,這種平衡行為的關(guān)鍵是對數(shù)據(jù)包處理的良好抽象。數(shù)據(jù)包處理的常見抽象是匹配動作流水線,最早由OpenFlow提出。通過匹配動作抽象,可以將包處理器建模為一系列匹配和動作流水線階段。每個流水線階段對流經(jīng)的數(shù)據(jù)包執(zhí)行不同的操作。這種抽象可以映射到FPGA和下一代ASIC。
在這種情況下,與平臺和體系結(jié)構(gòu)無關(guān)的P4語言應(yīng)運(yùn)而生。為支持P4語言,可編程數(shù)據(jù)平面大都采用可重配置匹配動作表(Reconfigurable Match Tables,RMT)抽象轉(zhuǎn)發(fā)模型,定義了可編程解析、可編程匹配與可編程動作等數(shù)據(jù)包處理行為,而使用P4編程語言,可以快速簡便地對數(shù)據(jù)包處理行為進(jìn)行描述。
因此,在人們的印象中,提到P4語言,大腦中就自動出現(xiàn)解析器、逆解析器和多級流表的架構(gòu),想到了Barefoot的Tofino芯片。認(rèn)為解析器、逆解析器加多級Match Action流表的架構(gòu)就是P4語言唯一硬件架構(gòu)。然而,實際上,除了這種架構(gòu)外,還有好幾種其它的實現(xiàn)架構(gòu)。
比如在今年8月下旬即將召開的SIGCOMM會議上,MIT和Juniper的研究人員聯(lián)合發(fā)表了一篇介紹Trio芯片架構(gòu)的文章,Trio芯片就不是采用流水線架構(gòu)來實現(xiàn)對P4語言支持的。文章主要面向新的應(yīng)用場景與傳統(tǒng)的PISA流水線架構(gòu)的交換芯片的性能進(jìn)行對比,現(xiàn)將該文章部分譯文奉上,以饗讀者。感興趣的讀者也可以提前閱讀扎神的文章《Trio 6, Express 5 and Silicon One》以更全面了解相關(guān)內(nèi)容和背景。
本文介紹了Trio,一種用于瞻博(Juniper)網(wǎng)絡(luò)MX系列路由器和交換機(jī)的可編程芯片組。Trio的架構(gòu)基于一個多線程的可編程數(shù)據(jù)包處理引擎和一個分層的大容量內(nèi)存系統(tǒng),這使得它與基于流水線的架構(gòu)有著根本的不同。Trio可以優(yōu)雅地處理各種網(wǎng)絡(luò)用例和協(xié)議的非同質(zhì)包處理率,使其成為新興網(wǎng)絡(luò)內(nèi)應(yīng)用的理想平臺。
我們首先描述了Trio芯片組的基本構(gòu)件,包括其多線程的包轉(zhuǎn)發(fā)和包處理引擎。然后,我們討論Trio的編程語言,稱為微代碼。為了展示Trio靈活的基于Microcode的編程環(huán)境,我們描述了兩個使用案例。
首先,我們展示了Trio為分布式機(jī)器學(xué)習(xí)執(zhí)行網(wǎng)絡(luò)內(nèi)聚合的能力。其次,我們提出并設(shè)計了一種使用Trio的定時器線程的網(wǎng)絡(luò)內(nèi)滯留者緩解技術(shù)。我們在測試平臺上使用三個真實的DNN模型(ResNet50、DenseNet161和VGG11)對這兩個用例進(jìn)行了原型測試,以證明Trio在執(zhí)行網(wǎng)絡(luò)內(nèi)聚合的同時緩解串?dāng)_的能力。我們的評估表明,當(dāng)集群中出現(xiàn)散工問題時,Trio的性能比目前基于流水線的解決方案高1.8倍。
01?引言
數(shù)據(jù)密集型應(yīng)用是當(dāng)今在線服務(wù)的基礎(chǔ)。隨著摩爾定律的逐漸放緩,硬件加速器正在努力滿足新興云應(yīng)用的性能需求,如機(jī)器學(xué)習(xí)、數(shù)據(jù)庫、存儲和數(shù)據(jù)分析。進(jìn)一步的進(jìn)展明顯受到單臺服務(wù)器所能容納的計算量和內(nèi)存的限制,推動了數(shù)據(jù)密集型應(yīng)用對高效分布式系統(tǒng)的需求。 可編程交換機(jī)的出現(xiàn),如英特爾的Tofino[2, 20, 22],為設(shè)計新的包處理協(xié)議和編譯器創(chuàng)造了機(jī)會[17, 20, 24, 44, 45, 58, 69, 71]。Tofino交換機(jī)也為使用網(wǎng)絡(luò)內(nèi)計算[23, 60, 74]來加速應(yīng)用鋪平了道路,如緩存[43]、數(shù)據(jù)庫查詢處理[50, 73]、機(jī)器學(xué)習(xí)訓(xùn)練[36, 48, 55, 63, 77]、推理[76]和共識協(xié)議[27, 28, 52]。網(wǎng)絡(luò)內(nèi)計算的關(guān)鍵思想是利用交換機(jī)的獨(dú)特優(yōu)勢,直接在網(wǎng)絡(luò)內(nèi)進(jìn)行部分計算,從而減少延遲,提高性能。 ? 盡管可編程交換機(jī)一直是這種新模式的重要推動者,但獨(dú)立于協(xié)議的交換機(jī)架構(gòu)(PISA)[2, 20, 22, 58]往往不適合新興的網(wǎng)內(nèi)應(yīng)用,從而限制了進(jìn)一步發(fā)展,阻礙了網(wǎng)內(nèi)計算應(yīng)用的廣泛采用[35, 37, 67]。 ? 本文介紹了Trio的網(wǎng)絡(luò)內(nèi)計算可編程架構(gòu)。Trio是瞻博網(wǎng)絡(luò)的可編程芯片組,擁有數(shù)十億美元的預(yù)存客戶群。它已被部署在全球核心、邊緣和數(shù)據(jù)中心環(huán)境中的數(shù)十萬臺路由器和交換機(jī)中。Trio芯片組在生產(chǎn)設(shè)備中使用已超過十年。 ? Trio建立在一套定制的處理器內(nèi)核上,其指令集針對網(wǎng)絡(luò)應(yīng)用進(jìn)行了優(yōu)化。因此,該芯片組具有傳統(tǒng)ASIC的性能,同時享有完全可編程處理器的靈活性,允許通過軟件安裝新功能。Trio的靈活架構(gòu)使其能夠支持在芯片組發(fā)布后很長時間內(nèi)開發(fā)的功能和協(xié)議。Trio處理器內(nèi)核可以訪問一個高性能的大內(nèi)存系統(tǒng),以存儲與系統(tǒng)配置和數(shù)據(jù)包有關(guān)的數(shù)據(jù)和狀態(tài)。該內(nèi)存系統(tǒng)對具有大內(nèi)存足跡的新興應(yīng)用的可擴(kuò)展性至關(guān)重要。 ? Trio的結(jié)構(gòu)與Tofino的結(jié)構(gòu)有根本的不同。Trio有一個非流水線結(jié)構(gòu),因此不同的數(shù)據(jù)包不一定流經(jīng)芯片上的相同物理路徑。Trio中的入站數(shù)據(jù)包是使用成千上萬的并行線程獨(dú)立處理的(詳情見2)。這些線程使用運(yùn)行-完成模型[12, 70],其中一個線程將執(zhí)行所需的指令,以完成它目前正在處理的數(shù)據(jù)包的處理。Trio有專門的邏輯,以確保同一流量的數(shù)據(jù)包按順序交付,但不同流量的數(shù)據(jù)包可以不按順序處理,使其能夠有效地處理混合的并發(fā)應(yīng)用。 ? 因此,Trio可以優(yōu)雅地處理不同的數(shù)據(jù)包處理率:它可以為需要豐富的每包處理的應(yīng)用提供低于線速的支持,同時為具有簡單的每包處理需求的應(yīng)用保持線速。相比之下,基于PISA的交換機(jī)在處理數(shù)據(jù)包時,處于同一流水線的數(shù)據(jù)包需要遍歷流水線的各個階段,無論P(yáng)4程序是怎樣的;P4程序[19]的部署只有完全成功和完全失敗兩個結(jié)果,基于PISA的交換機(jī)無法支持靈活的數(shù)據(jù)包處理速率,以可編程性為代價,換取數(shù)據(jù)包的線速處理能力。 ? 在本文中,我們首先描述了Trio芯片組的基本構(gòu)件,包括其數(shù)據(jù)包處理引擎和周圍的內(nèi)存系統(tǒng)的細(xì)節(jié)(2)。接下來,我們描述了Trio的編程語言,稱為Microcode(3)。然后,我們以機(jī)器學(xué)習(xí)訓(xùn)練的網(wǎng)絡(luò)內(nèi)聚合作為第一個用例,解釋Trio靈活的Microcode設(shè)計(4)。我們將網(wǎng)絡(luò)中的串?dāng)_緩解作為第二個用例,以證明Trio在啟動高效的基于定時器的線程方面的獨(dú)特能力(5)。我們證明了在Trio中實現(xiàn)滯留者緩解是直接的,而據(jù)我們所知,在基于PISA的設(shè)備中實現(xiàn)高效的滯留者緩解是具有挑戰(zhàn)性的,甚至是不可能的。 ? 我們在一個帶有Juniper MX480設(shè)備[10]、一個64個100Gbps Tofino交換機(jī)和六個華碩ESC4000AE10服務(wù)器的測試平臺上實現(xiàn)這兩個用例,每個服務(wù)器都有一個A100 Nvidia GPU[11]和一個100Gbps Mellanox ConnectX5網(wǎng)卡。我們訓(xùn)練三個DNN模型(ResNet50[41]、DenseNet161[42]和VGG11[68]),以證明Trio在執(zhí)行網(wǎng)內(nèi)聚合的同時減輕散兵線的能力。我們的評估表明,當(dāng)集群中出現(xiàn)散工時,Trio比最先進(jìn)的網(wǎng)內(nèi)聚合平臺SwitchML[63]的性能高出1.8倍。 ? 瞻博網(wǎng)絡(luò)將繼續(xù)發(fā)展Trio芯片組,為現(xiàn)有和新興應(yīng)用提供更高的帶寬、更低的功耗和更多的功能,同時還將開發(fā)軟件基礎(chǔ)架構(gòu)以支持更多的使用案例。我們邀請網(wǎng)絡(luò)界確定能夠利用Trio可編程架構(gòu)的新用例。 ? ?
02?Trio的結(jié)構(gòu)
自2009年推出以來,Trio芯片組已經(jīng)經(jīng)歷了六代[16],具有各種性能點和架構(gòu)。本節(jié)詳細(xì)介紹了Trio的最新架構(gòu)。首先,我們對基于Trio的路由器1中的數(shù)據(jù)包轉(zhuǎn)發(fā)和處理做了一個高層次的概述。然后,我們轉(zhuǎn)向Trio的數(shù)據(jù)包處理引擎的細(xì)節(jié)。最后,我們解釋Trio的各種內(nèi)存類型和讀-改-寫操作。
1 、基于Trio的路由器體系結(jié)構(gòu)
圖1說明了基于Trio的路由器(或交換機(jī))與基于PISA的交換機(jī)之間的高層區(qū)別。每個基于Trio的設(shè)備都有兩個重要的組成部分:(i)包轉(zhuǎn)發(fā)引擎和(ii)包處理引擎,下面將介紹。 ?
? 數(shù)據(jù)包轉(zhuǎn)發(fā)引擎(PFE)。PFE是Trio轉(zhuǎn)發(fā)平面的中心處理元素,用于系統(tǒng)地將數(shù)據(jù)包移入和移出設(shè)備。一個基于Trio的設(shè)備由一個或多個PFE組成。根據(jù)不同的年代,每個Trio芯片組支持不同的數(shù)據(jù)包處理帶寬。Trio的第一代PFE用多個芯片支持40Gbps的網(wǎng)絡(luò)帶寬。今天,Trio的第六代PFE在單個芯片中支持1.6 Tbps。小型路由器可能只有一個PFE,而大型路由器則有多個PFE,通過互連結(jié)構(gòu)連接,如圖1(a)所示。通過在PFE之間提供any-to-any的全互連連接,互連結(jié)構(gòu)擴(kuò)大了設(shè)備的帶寬,遠(yuǎn)遠(yuǎn)超過了單個芯片所能支持的范圍。每個PPE在入口和出口方向上都處理數(shù)據(jù)包。數(shù)據(jù)包通過一個入口PFE到達(dá)系統(tǒng),并通過一個出口PFE離開。 ? 包處理引擎(PPE)。每個PFE都有數(shù)百個多線程的包處理引擎(PPE),如圖2所示。每個PPE支持幾十個線程同時處理不同的數(shù)據(jù)包。與Tofino的架構(gòu)不同,流水線不能訪問對方的寄存器,一個PFE中的PPE線程可以通過共享內(nèi)存有效地共享狀態(tài)。第2.2節(jié)更詳細(xì)地解釋了PPE的基于線程的設(shè)計。 ?
? ? 平行數(shù)據(jù)包處理。PFE的硬件邏輯自動將每個進(jìn)入的數(shù)據(jù)包分為頭和尾部分(類似于PISA的頭和有效載荷)。數(shù)據(jù)包頭是數(shù)據(jù)包的第一部分,通常大到足以容納處理數(shù)據(jù)包所需的所有數(shù)據(jù)包頭(每一代Trio設(shè)備的數(shù)據(jù)包頭大小不同,但通常約為200字節(jié))。尾部由數(shù)據(jù)包的剩余字節(jié)組成(如果有的話)。當(dāng)一個新的數(shù)據(jù)包到達(dá)時,PFE內(nèi)部的一個硬件模塊,稱為調(diào)度模塊,根據(jù)可用性將數(shù)據(jù)包頭發(fā)送到PPE進(jìn)行處理,PPE為這個數(shù)據(jù)包頭生成一個新線程。數(shù)據(jù)包尾部被保存在PFE的內(nèi)存和隊列子系統(tǒng)中的數(shù)據(jù)包緩沖區(qū),以避免在PPE線程中存儲大量的字節(jié)。默認(rèn)情況下,每個線程在一個數(shù)據(jù)包上工作。許多PPE線程并行工作以提供所需的處理帶寬。 ? 重新排序引擎。當(dāng)數(shù)據(jù)包處理完成后,修改后的數(shù)據(jù)包頭被發(fā)送到重新排序引擎。重排引擎保留更新的包頭,直到同一流程中所有較早到達(dá)的數(shù)據(jù)包都被處理,以確保按順序交付。然后,Reorder Engine將修改后的數(shù)據(jù)包頭發(fā)送到內(nèi)存和排隊子系統(tǒng),以便排隊傳輸。 ?
2、包處理引擎
Trio的PPE提供了固定處理流水線或現(xiàn)有專門處理單元難以或無法實現(xiàn)的功能。每個PPE都是一個VLIW(超長指令字)多線程的微碼引擎核心。每個微指令都控制著多個ALU、操作數(shù)和結(jié)果選擇,以及復(fù)雜的多路分支。執(zhí)行一個微指令所需工作的復(fù)雜性意味著每個指令需要多個時鐘周期。因為每個PFE通常同時為許多數(shù)據(jù)包提供服務(wù),所以一個PPE不需要高的單線程性能。Trio中的每個線程一次只有一條數(shù)據(jù)通路指令。Trio不會將同一線程上的指令與前一條指令分派到PPE流水線中,直到后者退出流水線。因此,不需要在同一線程的指令之間傳遞數(shù)據(jù),因為在數(shù)據(jù)回寫完成之前,后續(xù)指令不依賴于前一指令的結(jié)果。
PPE線程。一個PPE線程通常在數(shù)據(jù)包頭到達(dá)PPE時啟動,并在該P(yáng)PE對該數(shù)據(jù)包的處理完成后銷毀。線程的銷毀由芯片中的硬件邏輯自動處理,盡管程序員可以控制何時放棄線程的執(zhí)行。線程也可以響應(yīng)某些內(nèi)部事件而啟動,包括統(tǒng)計收集和定時器(更多細(xì)節(jié)見5)。外部事件有能力通過類似的機(jī)制來催生新線程的執(zhí)行。入口和出口PFE中的PPE共同處理處理數(shù)據(jù)包所需的所有功能(例如,數(shù)據(jù)包解析、路由查找、數(shù)據(jù)包重寫)。
每線程本地存儲。每個PPE有兩種主要的內(nèi)部存儲形式。首先,每個線程有一個專用的本地存儲器池(1.25 KBytes)。本地存儲器可以在任何字節(jié)邊界訪問,使用指針寄存器或微指令中包含的地址。在一個PPE線程啟動之前,數(shù)據(jù)包頭被加載到該線程的本地存儲器中。當(dāng)發(fā)送數(shù)據(jù)包時,修改后的數(shù)據(jù)包頭會從線程的本地存儲器中卸載。指針寄存器的使用允許對包頭以及其他類型的數(shù)據(jù)結(jié)構(gòu)進(jìn)行有效的訪問。其次,每個線程都有32個64位的通用寄存器,這些寄存器對它是私有的。
本地存儲(內(nèi)存和寄存器)持有正在處理的數(shù)據(jù)包的特定信息??绨墓蚕頎顟B(tài)被保存在所有PPE都可以訪問的共享內(nèi)存系統(tǒng)中。
ALU類型。有兩種ALU類型:(i)條件ALU和(ii)移動ALU。條件ALU用于算術(shù)或邏輯運(yùn)算,產(chǎn)生32位數(shù)據(jù)結(jié)果和/或用于比較運(yùn)算,產(chǎn)生1位條件結(jié)果。移動ALU產(chǎn)生32位的結(jié)果,可以寫進(jìn)寄存器或本地存儲器。來自條件ALU的結(jié)果可以作為移動ALU的輸入。這種ALU組織允許每個指令的資源在排序控制(接下來描述)和生成邏輯/算術(shù)結(jié)果之間靈活分配,以存儲在寄存器/存儲器中。
重要的是,每個ALU操作數(shù)和每個移動ALU結(jié)果可以是一個任意長度的位域(最多32位)和一個任意的位偏移。這有兩個主要的好處。首先,它提高了訪問包頭中不同大小的字段的效率。第二,它提高了內(nèi)存和寄存器容量的利用率,使每塊數(shù)據(jù)只使用它所需要的比特。Trio在PPE和共享內(nèi)存系統(tǒng)中都有ALU。前者用于對寄存器和本地存儲器的操作,而后者則用于對存儲在共享存儲器系統(tǒng)中的數(shù)據(jù)進(jìn)行操作。通過將數(shù)據(jù)包尾部的部分移動到PPE線程的本地存儲器,也支持對數(shù)據(jù)包尾部的操作。
排序邏輯。一個或多個條件ALU的條件結(jié)果可以被排序邏輯單元用來選擇下一個要執(zhí)行的微指令。每個微指令包括一個至八個微指令的目標(biāo)塊的地址。任何或所有的條件結(jié)果都可以被忽略,所使用的條件結(jié)果的組合也非常靈活。數(shù)據(jù)包處理中的許多工作涉及代碼中復(fù)雜的條件分支,特別是在解析期間。Trio在一條指令中執(zhí)行復(fù)雜的多路分支的能力與數(shù)據(jù)包處理應(yīng)用的需求非常匹配。PPE支持對子程序的調(diào)用-返回機(jī)制,子程序可以嵌套到八層深處。
高效的哈希計算。高效的負(fù)載平衡是所有路由器/交換機(jī)的一個重要要求。在一個基于Trio的系統(tǒng)中,一個Microcode程序負(fù)責(zé)指定哪些數(shù)據(jù)包字段被包括在哈希計算中。這使得哪些數(shù)據(jù)包字段有助于負(fù)載平衡的決定具有完全的靈活性,包括從協(xié)議尚未發(fā)明的數(shù)據(jù)包頭中選擇字段的能力。Trio中的哈希函數(shù)是一個使用專用邏輯實現(xiàn)的高質(zhì)量哈希函數(shù)。因此,哈希函數(shù)的實現(xiàn)比用軟件實現(xiàn)的類似哈希函數(shù)更有效。可編程字段選擇和硬接線哈希函數(shù)的結(jié)合,使PPE在靈活性和效率方面達(dá)到了前所未有的平衡。
靈活的編程。對PPE可處理的報頭數(shù)量或類型沒有固定限制。因此,PPE可以使用Trio的微碼程序(3)輕松創(chuàng)建新的報頭或消耗/刪除數(shù)據(jù)包中的現(xiàn)有報頭。隨著新協(xié)議的開發(fā),Trio數(shù)據(jù)包處理架構(gòu)可以通過增強(qiáng)運(yùn)行在PPE上的軟件來適應(yīng)。由于PPE的多線程結(jié)構(gòu),PPE還可以創(chuàng)建或消耗數(shù)據(jù)包來完成任務(wù),如保持功能,其速度遠(yuǎn)遠(yuǎn)高于控制平面CPU所能支持的速度。重要的是,處理周期在不同的應(yīng)用之間是可以互換的,從而能夠優(yōu)雅地處理不同應(yīng)用的數(shù)據(jù)包處理要求。因此,基于Trio的系統(tǒng)可以為數(shù)據(jù)包處理較豐富的應(yīng)用提供較低的數(shù)據(jù)包速率,為數(shù)據(jù)包處理較簡單的應(yīng)用提供較高的數(shù)據(jù)包速率,或兩者混合使用。
3、共享內(nèi)存系統(tǒng)
最近的Trio芯片組在每個PFE中支持幾個GBytes的內(nèi)存。本節(jié)對Trio的共享內(nèi)存系統(tǒng)進(jìn)行了概述。 共享內(nèi)存的優(yōu)點。對于交換機(jī)和路由器來說,一些數(shù)據(jù)結(jié)構(gòu),如計數(shù)器和(流量)管制器,需要以很高的速度修改。為了支持?jǐn)?shù)百個PPE線程對這些數(shù)據(jù)結(jié)構(gòu)的有效訪問,Trio的共享內(nèi)存系統(tǒng)成為所有線程訪問和修改數(shù)據(jù)的地方。
所有對共享內(nèi)存系統(tǒng)的數(shù)據(jù)訪問(讀、寫和讀-修改-寫)都由位于共享內(nèi)存系統(tǒng)附近的讀-修改-寫引擎處理。當(dāng)多個線程在同一時間訪問同一內(nèi)存位置時,不需要將數(shù)據(jù)從一個線程移到另一個線程。相反,數(shù)據(jù)修改發(fā)生在讀-修改-寫引擎內(nèi)部。這允許在內(nèi)存附近高速更新數(shù)據(jù),很好地滿足了數(shù)據(jù)包處理應(yīng)用的需要。
相比之下,傳統(tǒng)處理器使用的基于緩存線的一致性模型需要在訪問過程中把數(shù)據(jù)移到線程中;當(dāng)多個線程試圖修改同一內(nèi)存位置時,這會造成較長的延遲。雖然這種模型可以支持對數(shù)據(jù)進(jìn)行更復(fù)雜和更普遍的操作,但對于可以被數(shù)百個線程訪問的數(shù)據(jù)結(jié)構(gòu)來說,它的表現(xiàn)很差。
內(nèi)存類型。Trio存儲器系統(tǒng)經(jīng)過優(yōu)化,為相對較小(8字節(jié))的請求提供了較高的訪問速率。為了實現(xiàn)所需的帶寬、延遲和容量的組合,存儲器系統(tǒng)使用兩種類型的存儲器,如圖3所示:(i)高帶寬的片上存儲器,從PPE的訪問延遲約為70ns;(ii)基于DRAM的大型高帶寬片外存儲器,從PPE的訪問延遲約為300 ns至400 ns。片上存儲器是由一個嚴(yán)重的多槽SRAM實現(xiàn)的,通常用于頻繁訪問的數(shù)據(jù)結(jié)構(gòu)。
片外存儲器有一個幾百萬字節(jié)的片上緩存,它與片上SRAM類似,并且是大量的多Bank,以提供高吞吐量。片上SRAM和片外DRAM緩存的大小是可以軟件配置的(通常分別為2-8 MBytes和8-24 MBytes)。片外DRAM是幾GB字節(jié)。片內(nèi)和片外存儲器在結(jié)構(gòu)上是等同的,存在于一個統(tǒng)一的地址空間的不同范圍內(nèi)。它們只在容量、延遲和可用帶寬上有所不同。這使得數(shù)據(jù)結(jié)構(gòu)可以被放置在最符合其容量和帶寬要求的存儲器類型中。
? 內(nèi)存交易。內(nèi)存系統(tǒng)支持不同大小的讀寫操作,從8字節(jié)到64字節(jié)(以8字節(jié)為增量)。Trio可以用8字節(jié)的訪問來支持全部的內(nèi)存系統(tǒng)帶寬。此外,還支持豐富的讀-改-寫操作,包括數(shù)據(jù)包/字節(jié)計數(shù)器、Policers、邏輯獲取和操作(And/Or/Xor/Clear)、獲取和交換、屏蔽式寫入和32位添加。讀-修改-寫操作由讀-修改-寫引擎啟用,具體規(guī)定如下。
讀-修改-寫引擎。數(shù)據(jù)包處理需要極其高速的讀-修改-寫操作。處理一個數(shù)據(jù)包可能涉及到對多個計數(shù)器的更新,對一個或多個策略器的操作,以及應(yīng)用程序需要的其他操作。處理讀-改-寫操作的天真方法是,在操作進(jìn)行時,讓一個線程擁有一個內(nèi)存位置的所有權(quán)。但這種方法不能滿足數(shù)據(jù)包處理的高效率要求。相比之下,Trio將讀-改-寫操作卸載到它的內(nèi)存系統(tǒng)中,由一個讀-改-寫引擎來處理一系列的內(nèi)存位置。
如果對同一內(nèi)存位置的多個請求在同一時間到達(dá),該引擎將依次處理這些請求,以保證更新的一致性。在混合讀、寫和讀-修改-寫操作時,不需要向內(nèi)存中的某個位置發(fā)出明確的一致性命令。每個讀-改-寫引擎以每個時鐘周期8字節(jié)的速度處理內(nèi)存請求。因此,整個共享內(nèi)存系統(tǒng)的單個讀-修改-寫引擎不能提供足夠高的速率處理數(shù)據(jù)包所需的內(nèi)存帶寬。為了應(yīng)對這一挑戰(zhàn),Trio支持幾組SRAM和片外緩存,并有自己的讀-修改-寫引擎,使讀-修改-寫處理帶寬能夠與原始內(nèi)存帶寬一起擴(kuò)展。
Crossbar和共享內(nèi)存性能。Trio的Crossbar被設(shè)計為支持所有的讀-修改-寫引擎,因此Crossbar本身不會限制內(nèi)存性能。如果提供給某個讀-改-寫引擎的負(fù)載超過了每周期8字節(jié)的吞吐量,就會通過Crossbar產(chǎn)生背壓。瞻博網(wǎng)絡(luò)在每一代Trio芯片中都增加了讀-改-寫引擎的數(shù)量,以便內(nèi)存帶寬隨著數(shù)據(jù)包處理帶寬的增加而增加。
03?Trio的編程環(huán)境
本節(jié)對Trio的編程環(huán)境進(jìn)行了概述。第1節(jié)描述了Trio的編程語言和基于Trio設(shè)備的編程工具鏈。第2節(jié)提供了一個用Trio微代碼編程的數(shù)據(jù)包過濾例子。 ?
1、Trio的編程語言和工具鏈
基于Trio的設(shè)備的編程語言是一種叫做Microcode的類C語言。程序員在Microcode中實現(xiàn)所有的數(shù)據(jù)包處理操作,包括數(shù)據(jù)包解析、路由查找、數(shù)據(jù)包重寫和網(wǎng)絡(luò)內(nèi)計算(如果有)。圖4顯示了在Trio上為新的應(yīng)用程序編程所需的工具。要在Trio上編程一個新的應(yīng)用程序,程序員使用Microcode語言來編寫新的應(yīng)用程序,并將新的Microcode程序添加到現(xiàn)有的代碼庫中。然后,程序員使用Trio的編譯器生成軟件圖像并配置目標(biāo)設(shè)備。 ?
表達(dá)式語法。Microcode支持C風(fēng)格的表達(dá)式。支持的變量類型包括標(biāo)量(label, bool, 和不同大小的整數(shù))和復(fù)合(struct 和union)。Microcode還支持指針和數(shù)組,條件,函數(shù)調(diào)用和Gotos,以及switch語句。 指令邊界。一個Microcode程序有多個指令。一條Microcode指令可以執(zhí)行有限的操作,程序員需要明確指定指令的邊界。通常情況下,一條Microcode指令可以執(zhí)行四個寄存器或兩個本地存儲器的讀取,以及兩個寄存器或兩個本地存儲器的寫入。
變量存儲類。當(dāng)在Microcode中定義一個新的變量時,程序員需要指定存儲該變量的位置。有三種類型的變量存儲類:內(nèi)存(PPE的本地內(nèi)存和寄存器),總線(表示變量作為ALU的輸入),和虛擬(表示常量值)。對存儲在共享內(nèi)存系統(tǒng)中的數(shù)據(jù)的訪問,如轉(zhuǎn)發(fā)表,是通過下面規(guī)定的外部事務(wù)實現(xiàn)的。
外部交易。PPE可以通過Crossbar向其他模塊發(fā)出外部事務(wù)(XTXN),如共享內(nèi)存系統(tǒng)、哈希查找/插入/刪除、高性能過濾器和計數(shù)器/警戒器塊。這些XTXN可以是同步的或異步的。在同步XTXN中,PPE線程被暫停,直到收到XTXN回復(fù);在異步XTXN中,PPE線程繼續(xù)正常運(yùn)行。PPE也可以通過XTXNs從數(shù)據(jù)包尾部獲取數(shù)據(jù)。在這種情況下,數(shù)據(jù)包尾巴從內(nèi)存和隊列子系統(tǒng)發(fā)出,通過Crossbar,然后到達(dá)PPE的本地內(nèi)存。
一個XTXN由PPE向目標(biāo)發(fā)出的請求和目標(biāo)向PPE發(fā)回的回復(fù)組成。XTXN的格式取決于目標(biāo)塊。例如,發(fā)送到共享內(nèi)存系統(tǒng)的讀取請求以內(nèi)存地址為參數(shù),數(shù)據(jù)在XTXN響應(yīng)寄存器中返回。 編譯器。為了編譯Microcode程序,程序員使用一個叫做Trio Compiler(TC)的工具。TC將指令的源代碼映射到指令可以控制的各種資源,包括將變量映射到它們的底層存儲,并將指令分配到PPE內(nèi)的Microcode內(nèi)存。TC同時具有編譯器和匯編器的特點。在編譯器方面,TC支持將高級C風(fēng)格的表達(dá)式翻譯成硬件指令。
在匯編器方面,TC的源代碼必須包含指令的劃分,即程序員標(biāo)記代表一條指令的代碼塊的開始和結(jié)束。如果指定給一條指令的代碼不合適,TC的編譯就會失敗,因為它不能在多條指令中實現(xiàn)要求的動作。TC沒有一個單獨(dú)的編譯和連接階段。它需要完整的源代碼而不是單個模塊來生成二進(jìn)制文件。這個二進(jìn)制文件包含初始化PPE資源的數(shù)據(jù),如Microcode內(nèi)存和本地內(nèi)存。它還定義了所需的符號,如本地內(nèi)存中數(shù)據(jù)包頭開始的地址。該二進(jìn)制文件是Trio的ASIC驅(qū)動程序用于設(shè)備初始化的Junos2軟件鏡像的一部分。
vMX虛擬路由器。瞻博網(wǎng)絡(luò)正在共同努力,使第三方能夠訪問基于Trio的設(shè)備編程。作為第三方訪問Trio功能的第一步,瞻博網(wǎng)絡(luò)開發(fā)了vMX虛擬路由器[5]。vMX是一個虛擬化的通用路由平臺,由一個虛擬控制平面(VCP)和一個虛擬轉(zhuǎn)發(fā)平面(VFP)組成。VCP由Junos操作系統(tǒng)驅(qū)動,VFP運(yùn)行為x86環(huán)境優(yōu)化的Microcode引擎。vMX可作為授權(quán)軟件,部署在基于x86的服務(wù)器和云服務(wù)上,如亞馬遜網(wǎng)絡(luò)服務(wù)。
高級轉(zhuǎn)發(fā)接口。在Trio中,數(shù)據(jù)包轉(zhuǎn)發(fā)是一個由PFE執(zhí)行的操作序列。每個操作都可以用潛在包轉(zhuǎn)發(fā)操作圖上的一個節(jié)點表示。PFE根據(jù)單個數(shù)據(jù)包的類型/字段,為其執(zhí)行一系列操作。瞻博網(wǎng)絡(luò)高級轉(zhuǎn)發(fā)接口(AFI)[3]提供了部分可編程性,允許第三方開發(fā)者通過一個稱為沙盒的小型虛擬容器控制和管理這個轉(zhuǎn)發(fā)路徑圖的一部分。該沙盒使開發(fā)者能夠添加、刪除和改變特定數(shù)據(jù)包的操作順序。
2、Microcode程序示例(略)
04?Trio討論和未來的用例
Trio用于網(wǎng)絡(luò)內(nèi)遙測。大多數(shù)網(wǎng)絡(luò)運(yùn)營商需要遙測或深入了解其網(wǎng)絡(luò)中的流量,以便進(jìn)行容量規(guī)劃、服務(wù)級協(xié)議監(jiān)測、安全緩解和其他用途。目前的網(wǎng)絡(luò)設(shè)備通常依靠數(shù)據(jù)包采樣,使用設(shè)備中嵌入的內(nèi)部處理器或外部監(jiān)測設(shè)備進(jìn)行進(jìn)一步處理。由于通過設(shè)備的流量很大,而可用于監(jiān)測的處理和帶寬有限,只有一小部分?jǐn)?shù)據(jù)包(幾萬分之一或更少)被選中進(jìn)行監(jiān)測,而且采樣數(shù)據(jù)包的決定往往是盲目的,基于一個簡單的時間間隔[62]。Trio的數(shù)據(jù)包處理的靈活性和操作資源的可用性使其適合網(wǎng)絡(luò)內(nèi)遙測。例如,服務(wù)提供商可以利用Trio的大內(nèi)存來跟蹤傳入的數(shù)據(jù)包,以保持足夠的信息用于遙測。此外,Trio的定時器線程適用于定期監(jiān)測和異常分析。為了給網(wǎng)絡(luò)運(yùn)營商提供更智能的遙測,可以根據(jù)Trio已經(jīng)提取的用于路由的數(shù)據(jù)包字段,對每個數(shù)據(jù)包執(zhí)行基于機(jī)器學(xué)習(xí)的分類技術(shù)。最后,數(shù)據(jù)結(jié)構(gòu)可以更有效地存儲,從而減少外部監(jiān)測設(shè)備的傳輸帶寬和處理周期。
Trio用于網(wǎng)絡(luò)內(nèi)安全。為了減輕DDoS攻擊,基于Trio的MX系統(tǒng)支持識別和丟棄惡意數(shù)據(jù)包的功能,充分利用了芯片組的高性能和靈活的數(shù)據(jù)包過濾機(jī)制。Trio還在SRX安全平臺上充當(dāng)基于安全流的快速轉(zhuǎn)發(fā)路徑[1]。Trio能夠?qū)魅氲臄?shù)據(jù)包進(jìn)行額外的復(fù)雜的網(wǎng)絡(luò)內(nèi)安全處理,通過聚合特征或?qū)Ψ?wù)提供商安裝的ML模型進(jìn)行推理,以識別和緩解流量中的異常情況。與基于設(shè)備的解決方案不同,Trio在網(wǎng)絡(luò)數(shù)據(jù)通路上進(jìn)行異常檢測的可編程架構(gòu)可實現(xiàn)低延遲的威脅緩解。 ? Trio-ML中的數(shù)據(jù)包丟失。運(yùn)行各種不同應(yīng)用的數(shù)據(jù)中心可能會出現(xiàn)瞬時流量高峰,而這又可能導(dǎo)致聚合數(shù)據(jù)包丟失。一個實用的網(wǎng)絡(luò)內(nèi)聚合系統(tǒng)需要一定程度的彈性,使長期運(yùn)行的工作能夠在這種突發(fā)事件中生存下來。SwitchML[63]建議如何實現(xiàn)這種彈性。Trio-ML的實現(xiàn)有支持這種解決方案的規(guī)定,盡管它不是當(dāng)前代碼的一部分,我們把它留給未來的工作。 ? 未來的開放源碼計劃。我們正在考慮幾個未來開源的想法。首先,我們計劃為Trio增加對P4編程的全面支持。Juniper工程公司已經(jīng)為實現(xiàn)這一目標(biāo)做出了初步努力[6],但最近對P4核心規(guī)范的修改和增強(qiáng),應(yīng)該可以讓更多的靈活性和更多的功能通過P4接口公開。其次,我們計劃創(chuàng)建一種特定領(lǐng)域的語言,讓第三方開發(fā)者能夠使用Trio芯片組的全部轉(zhuǎn)發(fā)路徑功能。瞻博網(wǎng)絡(luò)正在探索這一領(lǐng)域的發(fā)展,并歡迎社區(qū)提供反饋。 ? ?
05?相關(guān)工作
使用可編程交換機(jī)的網(wǎng)絡(luò)內(nèi)計算。之前的幾篇論文通過利用網(wǎng)絡(luò)內(nèi)部的某種形式的可編程性提出了網(wǎng)絡(luò)內(nèi)計算。這些方法分為兩類:(1)使用基于PISAb的架構(gòu)進(jìn)行線速計算[18, 48, 63];(2)使用片上FPGA進(jìn)行亞線速計算[21]。我們的網(wǎng)絡(luò)內(nèi)ML聚合用例與Sharp[18]、SwitchML[63]、ATP[48]、PANAMA[36]和Flare[29]密切相關(guān)。Sharp[18]是Mellanox針對專用ML訓(xùn)練集群的專有設(shè)計;它假定網(wǎng)絡(luò)帶寬可以被完全保留。相比之下,我們考慮的是多個用戶和應(yīng)用共享鏈接的網(wǎng)絡(luò)。SwitchML[63]和ATP[48]使用市面上的Tofino交換機(jī)來執(zhí)行梯度聚合。盡管Tofino交換機(jī)可以進(jìn)行線速數(shù)據(jù)包處理,但其流水線結(jié)構(gòu)的可編程性較為有限,這使得網(wǎng)絡(luò)內(nèi)的散兵游勇緩解極具挑戰(zhàn)性。我們使用SwitchML作為Trio-ML的基線比較。對于我們的用例來說,SwitchML是一個蘋果對蘋果的比較,使其成為比ATP更合適的基線。更具體地說,ATP的性能改進(jìn)受到網(wǎng)絡(luò)內(nèi)聚合和額外的參數(shù)服務(wù)器的影響,而SwitchML和Trio-ML更相似,因為這兩種方法只使用交換機(jī)/路由器進(jìn)行聚合。PANAMA的[36]網(wǎng)內(nèi)聚合硬件可以支持靈活的數(shù)據(jù)包處理,但它是基于FPGA充當(dāng)線內(nèi)顛簸,使得它在大規(guī)模部署中不切實際。然而,本文旨在利用Trio的可編程架構(gòu),從頭開始設(shè)計新的有狀態(tài)的網(wǎng)絡(luò)內(nèi)應(yīng)用。Trio的幾個關(guān)鍵特征使這些新的應(yīng)用成為可能。首先,Trio的大內(nèi)存和對數(shù)據(jù)包尾部數(shù)據(jù)的快速訪問使網(wǎng)絡(luò)內(nèi)的高效計算成為可能。其次,Trio的共享內(nèi)存系統(tǒng)提供了幾GB的存儲空間;即使在有散兵游勇的情況下,或者在多個應(yīng)用程序同時運(yùn)行的情況下,這也足夠用于數(shù)據(jù)存儲。最后,Trio對單個數(shù)據(jù)包的指令數(shù)量沒有限制,使Microcode程序能夠啟動大型數(shù)據(jù)包所需的計算指令。
緩解散工問題。在理解和緩解分布式系統(tǒng)中散工問題的影響方面,之前有大量的工作[13 15, 25, 26, 30, 31, 33, 34, 38, 46, 51, 56, 57, 59, 61, 72, 75, 78, 79] 。特別是,Harlap等人提出了FlexRR,以減輕散工問題對分布式學(xué)習(xí)工作的影響[38]。FlexRR要求工人之間進(jìn)行點對點的通信,以檢測速度慢的工人并進(jìn)行工作重新分配。相比之下,我們考慮在網(wǎng)絡(luò)內(nèi)部減輕散兵游勇的影響,不需要工人之間的任何消息傳遞,也不需要參數(shù)服務(wù)器。Tandon等人[72]和Raviv等人[61]提出了編碼理論框架,通過在工人之間重復(fù)訓(xùn)練數(shù)據(jù)來緩解分布式學(xué)習(xí)中的散兵游勇;然而,Trio-ML不需要數(shù)據(jù)重復(fù)。
替代傳統(tǒng)交換機(jī)架構(gòu)。研究界一直在研究替代的交換機(jī)架構(gòu),以解決基于PISA的架構(gòu)的一些限制,如缺乏共享內(nèi)存和淺層流水線深度。最有競爭力的例子是dRMT(Disaggregated Programmable Switching)[24]。dRMT開關(guān)架構(gòu)實現(xiàn)了一個集中的、共享的內(nèi)存池,所有的匹配動作階段都可以訪問。dRMT不是在一個流水線上執(zhí)行匹配動作階段,而是將這些階段聚集在一個集群中,并以輪流的順序執(zhí)行。
一個控制邏輯單元對這些階段進(jìn)行調(diào)度,以便在尊重程序依賴性的前提下最大限度地提高集群的吞吐量。然而,集中式內(nèi)存池由一個連接各階段和內(nèi)存的多路復(fù)用器控制,在一個給定的時鐘周期內(nèi),只有一個階段可以訪問內(nèi)存。當(dāng)一個應(yīng)用程序需要在多個階段訪問內(nèi)存時,這可能導(dǎo)致程序執(zhí)行速度減慢。
在Trio中,多個線程可以在同一時間向同一內(nèi)存位置發(fā)送內(nèi)存訪問請求,Trio的讀-改-寫引擎依次處理這些請求,保證了更新的一致性。此外,dRMT通過crossbar的內(nèi)存訪問是在編譯時調(diào)度的,這降低了增量更新和重新編譯應(yīng)用程序代碼的靈活性。
橫杠調(diào)度算法的復(fù)雜性會限制該架構(gòu)擴(kuò)展到更多數(shù)量的匹配行動處理器的能力。相比之下,Trio的crossbar是實時調(diào)度的,從而提供對內(nèi)存的有效訪問。這種動態(tài)調(diào)度機(jī)制使Trio能夠從第一代的16個PPE擴(kuò)展到第六代的160個PPE,而且將來還會繼續(xù)擴(kuò)大規(guī)模。
此外,在dRMT中,數(shù)據(jù)包解析器和分離器位于匹配動作處理器之外。對依賴查找結(jié)果的數(shù)據(jù)包的內(nèi)部頭的任何解析(例如MPLS封裝的數(shù)據(jù)包)都必須重新循環(huán)到解析器中進(jìn)行處理。相比之下,Trio的PPE是完全可編程的處理器,能夠以運(yùn)行完成的方式處理數(shù)據(jù)包解析/分離,以及其余的數(shù)據(jù)包查找和處理。Trio的多線程PPE還允許數(shù)據(jù)包由不同的Microcode程序根據(jù)其處理要求進(jìn)行處理。
06?結(jié)論
本文介紹了瞻博網(wǎng)絡(luò)的可編程芯片組Trio,以及它在新興數(shù)據(jù)密集型網(wǎng)絡(luò)內(nèi)應(yīng)用中的應(yīng)用。Trio已經(jīng)生產(chǎn)了十多年,建立了一個龐大的客戶群,擁有數(shù)十億美元的市場份額。我們描述了Trio的多線程和可編程的包轉(zhuǎn)發(fā)和包處理引擎。然后,我們使用分布式機(jī)器學(xué)習(xí)訓(xùn)練的網(wǎng)絡(luò)內(nèi)聚合和網(wǎng)絡(luò)內(nèi)散工問題緩解作為兩個用例來說明Trio的微代碼和編程環(huán)境。我們的評估表明,Trio的性能比今天基于流水線的解決方案高出1.8倍。
編輯:黃飛
?
評論