假如把網(wǎng)絡(luò)看成一個(gè)可編程平臺
“未來我們應(yīng)該不再從協(xié)議的角度來思考(網(wǎng)絡(luò)),而是從軟件的角度來思考。所有功能和“協(xié)議”都將從硬件遷移到軟件中?!?/p>
——Nick McKeown
編者按:Nick McKeown,斯坦福教授、SDN之父、創(chuàng)辦了Nicira(網(wǎng)絡(luò)虛擬化的先驅(qū))和 Barefoot(推出了首個(gè)完全可編程的交換機(jī))、目前擔(dān)任英特爾公司網(wǎng)絡(luò)與邊緣事業(yè)部 (NEX) 高級副總裁兼總經(jīng)理。
本文系SDNLAB整理自Nick McKeown教授的演講視頻。Nick教授90年代“自研”Bay Bridge 路由器,這段經(jīng)歷讓他對微代碼可編程硬件加速器產(chǎn)生懷疑,他認(rèn)為當(dāng)時(shí)曇花一現(xiàn)的網(wǎng)絡(luò)處理器無法從根源解決網(wǎng)絡(luò)加速問題,系統(tǒng)地梳理了可編程發(fā)展的歷史;Nick開始研究在各個(gè)領(lǐng)域出現(xiàn)的特定領(lǐng)域的處理器,并提出了P4高級語言,推出了Tofino芯片;Nick教授認(rèn)為,應(yīng)該把網(wǎng)絡(luò)看作一個(gè)可編程的平臺,而不是一個(gè)獨(dú)立元素的集合,網(wǎng)絡(luò)的行為應(yīng)該自頂向下進(jìn)行描述,并分享了對未來網(wǎng)絡(luò)的很多看法。視頻內(nèi)容非常精彩,詳細(xì)內(nèi)容可閱讀下文。
作為網(wǎng)絡(luò)開源社區(qū)的忠實(shí)支持者,Nick McKeown認(rèn)為在過去十年或更長時(shí)間里,開源的興起推動了“真正的網(wǎng)絡(luò)革命”。在十多年前,每個(gè)人使用的都還是閉源的專有網(wǎng)絡(luò)設(shè)備,但如今,大型數(shù)據(jù)中心大部分都運(yùn)行在開源軟件上(主要是在基于 Linux 的設(shè)備上)。這種從閉源到開源開放的變化,讓網(wǎng)絡(luò)設(shè)備變得可編程,從而改變原有網(wǎng)絡(luò),這種創(chuàng)新方式加速了未來網(wǎng)絡(luò)的發(fā)展。
可編程發(fā)展的歷史
上世紀(jì)90年代初,互聯(lián)網(wǎng)還被稱為NSFNet,路由器被稱為“思科盒子”。這些路由器是基于 CPU 的,可以“每秒處理高達(dá)10000個(gè)數(shù)據(jù)包”。當(dāng)時(shí)Nick和其他一些學(xué)生決定創(chuàng)建一個(gè)名為Bay Bridge 的多端口光纖分布式數(shù)據(jù)接口(FDDI,F(xiàn)iber Distributed Data Interface) 路由器,它使用復(fù)雜的可編程邏輯設(shè)備(CPLD——FPGA 的前身)而不是 CPU,以此試圖超越商用路由器。
Bay Bridge 由Sun工作站通過SBus控制。CPLD 實(shí)現(xiàn)了一種新的微編碼語言,該語言描述了如何處理數(shù)據(jù)包,這讓Bay Bridge每秒可以處理大約 100000 個(gè)數(shù)據(jù)包,是商用路由器的10倍。該設(shè)備在伯克利大學(xué)的 FDDI 環(huán)上放置了大約五年。
在很長一段時(shí)間之后,他們想為Bay Bridge添加一些新功能,也就是那次經(jīng)歷給Nick上了寶貴的一課,“我們甚至不記得如何對其進(jìn)行編程”。最終,添加一個(gè)相當(dāng)簡單的功能所花費(fèi)的時(shí)間甚至比最初開發(fā)Bay Bridge所花的時(shí)間更長。在當(dāng)時(shí),創(chuàng)建一個(gè)非常長的指令字(VLIW)微控制器似乎是一個(gè)很棒的主意,但這個(gè)經(jīng)歷讓他對微代碼可編程硬件加速器產(chǎn)生了懷疑。
當(dāng)網(wǎng)絡(luò)處理器(或 NPU)的想法在 90 年代后期出現(xiàn)時(shí),Nick認(rèn)為“此路不通”。NPU 開發(fā)人員并沒有從根源上尋找需要解決的問題,而是簡單地創(chuàng)建了一個(gè)包含 CPU 內(nèi)核陣列的芯片。他說,網(wǎng)絡(luò)處理需要“非常深的管道和非常非??斓?I/O”,而 CPU(或 CPU 陣列)上都不存在這些。
Nick表示,目前最好的芯片可以處理大約12.8Tbps,而 CPU 僅略高于 100Gbps。在他最早研究這些的時(shí)候兩者的差距在5倍左右,但現(xiàn)在則達(dá)到了100倍左右。這使他得出結(jié)論,為了獲得最高性能,不可避免地需要使用“基于深度管道、高速 I/O 和與標(biāo)準(zhǔn)協(xié)議相對應(yīng)的固定操作序列”的東西。這需要最少的功率,最有可能安裝在單個(gè)芯片上,因此將“提供最低的總成本”。
例如,今天的一個(gè)專用集成電路 (ASIC) 交換機(jī)以 10Tbps 的速度處理 40 種協(xié)議,使用 400W。而CPU“等效”以10Tbps僅處理4個(gè)協(xié)議就需要 25KW。CPU是針對內(nèi)存加載和存儲操作進(jìn)行了優(yōu)化,而ASIC針對 I/O 和流水線進(jìn)行了優(yōu)化。這可以得出一個(gè)結(jié)論,在可預(yù)見的未來,高性能交換機(jī)將基于 ASIC。
然而,當(dāng)需要添加新的協(xié)議時(shí),問題就來了。舉個(gè)例子,當(dāng)需要將VXLAN協(xié)議添加到固定功能交換機(jī)時(shí),大約需要四年時(shí)間才能在新硬件中推出。在日新月異的網(wǎng)絡(luò)世界,四年這個(gè)數(shù)字“相當(dāng)瘋狂”,因此Nick認(rèn)為這樣改變數(shù)據(jù)包處理方式的開發(fā)過程是錯誤的。
第一批問世的可編程交換機(jī)基于各種方法——FPGA、NPU 或 ASIC,但它們都沒有能夠讓用戶根據(jù)自己的需要編寫代碼,真正編寫代碼的是設(shè)備制造商。但是,設(shè)備制造商并不運(yùn)營大型網(wǎng)絡(luò),所以他們傾向于簡單地實(shí)施現(xiàn)有的標(biāo)準(zhǔn)——他們永遠(yuǎn)不會主動成為創(chuàng)新的人,所有這些都使得引入新想法變得困難,因此一切都趨于停滯。
特定領(lǐng)域的處理器
Nick開始研究在各個(gè)領(lǐng)域出現(xiàn)的特定領(lǐng)域的處理器:用于圖形的 GPU、用于機(jī)器學(xué)習(xí)的數(shù)字信號處理器(DSP)、用于機(jī)器學(xué)習(xí)的張量處理單元(TPU) 等等。與 CPU 上的通用計(jì)算一樣,所有特定領(lǐng)域的處理器都有一些為處理器編譯的高級語言。這些編譯器將優(yōu)化發(fā)出的代碼以利用可用的指令集和并行性。
大約在 2010 年,他和其他人開始考慮一種針對數(shù)據(jù)包處理進(jìn)行優(yōu)化的新的特定領(lǐng)域處理器,它允許網(wǎng)絡(luò)運(yùn)營商自行編程。為此,需要一種新的高級語言,它獨(dú)立于硬件,并且可以在不犧牲功率、性能或大小的情況下編譯成以線速運(yùn)行。這就是 P4 語言。
P4是一種特定領(lǐng)域的編程語言,用于描述可編程的轉(zhuǎn)發(fā)設(shè)備如何處理報(bào)文。P4的架構(gòu)是PISA(Protocol Independent Switch Arch)全流水線可編程架構(gòu)。
- 簡要來說,它的基本單元是match-action table。
- match單元可以匹配任意報(bào)文的偏移與字段長度。
- action單元,則有相對比較豐富的報(bào)文編輯功能。
- 此外,片上資源SRAM與TCAM也可以進(jìn)行靈活的配置。
整個(gè)P4的控制過程包括包頭解析、可編程入流水線、可配置緩存管理TM,以及可編程出流水線的處理。對應(yīng)的編程框架包括自定義報(bào)文頭、match-action表項(xiàng)的定義,以及全流水線控制流的串接。
下圖展示了固定功能交換機(jī)和基于 Barefoot Networks 的 Tofino P4 可編程芯片的交換機(jī)的比較:
- 兩者都有 64 個(gè) 100Gbps 端口,除了使用的數(shù)據(jù)包處理芯片外幾乎完全相同。
- 最大轉(zhuǎn)發(fā)速率基本相同,基于 Tofino 的交換機(jī)稍高一些。
- 每個(gè)端口使用的功率差不多,但 Tofino 略低。
- 同樣,Tofino上的延遲要少一些,但大致相當(dāng)。
所有這些都表明,可編程交換機(jī)具有與固定功能交換機(jī)相同的性能、功耗和成本。這也意味著網(wǎng)絡(luò)運(yùn)營商可以選擇可編程交換機(jī)以獲得更多的靈活性。
未來的方向
Nick表示,企業(yè)和運(yùn)營商正在“試圖掌控那些控制他們網(wǎng)絡(luò)的軟件”,這是“他們的命脈”,因此他們需要確保它是可靠、安全的,并且可以以各自不同的方式進(jìn)行擴(kuò)展。為此,隨著可編程交換機(jī)和網(wǎng)卡越來越多地投入使用,他們還開始控制數(shù)據(jù)包的處理方式。
Nick想知道這對未來的網(wǎng)絡(luò)編程方式意味著什么。他認(rèn)為,我們應(yīng)該把網(wǎng)絡(luò)看作一個(gè)可編程的平臺,而不是一個(gè)獨(dú)立元素的集合。網(wǎng)絡(luò)的行為應(yīng)該自頂向下進(jìn)行描述。他的希望是,行為將被分區(qū)、編譯,并在網(wǎng)絡(luò)中的所有元素上運(yùn)行。然而,要實(shí)現(xiàn)這一目標(biāo)還有很多工作要做。
此外,每個(gè)數(shù)據(jù)中心都將以不同的方式工作,在本地進(jìn)行編程和定制。例如,可以通過刪除不需要的協(xié)議,或者根據(jù)運(yùn)行在數(shù)據(jù)中心里組織的需要添加特定的安全措施,使它們更加簡單。
Nick還提出了一個(gè)更具爭議的觀點(diǎn):未來我們應(yīng)該不再從協(xié)議的角度來思考,而是從軟件的角度來思考。所有功能和“協(xié)議”都將從硬件遷移到軟件中。
最終目標(biāo)是要建設(shè)一個(gè)“多數(shù)人編程但少數(shù)人運(yùn)維”的網(wǎng)絡(luò)。但目前距離做到這一點(diǎn)還有很長的路要走。
如果我們把網(wǎng)絡(luò)看做一個(gè)可編程平臺
如果把網(wǎng)絡(luò)看做一個(gè)可編程平臺,如何編寫描述網(wǎng)絡(luò)的代碼,并且保證它清晰、以線速運(yùn)行,并且可以移動到最適合運(yùn)行的組件?
Nick描述了網(wǎng)絡(luò)管道的元素,從用戶空間開始,它使用數(shù)據(jù)平面開發(fā)工具包(DPDK) 在虛擬機(jī) (VM)、容器或用戶空間程序中進(jìn)行網(wǎng)絡(luò)連接,內(nèi)核使用 XDP 和 eBPF,NIC 和交換機(jī)則更多地使用 P4 進(jìn)行編程,當(dāng)然以后也可能會出現(xiàn)其他語言或技術(shù)。
Nick表示,DPDK 和 XDP/eBPF 組件的應(yīng)用已經(jīng)非常成熟,PISA 和 P4 也正在用于交換機(jī)和網(wǎng)卡中,這兩種不同的方式之間存在潛在的沖突。但他并不是提倡拋棄C和C++,而是需要一種“受約束的編程方式”,這樣這些程序才能在內(nèi)核中安全地運(yùn)行。已經(jīng)編寫了大量用戶空間和內(nèi)核網(wǎng)絡(luò)的代碼應(yīng)該繼續(xù)維護(hù),但這些通用代碼不會直接在網(wǎng)卡或交換機(jī)中的硬件加速管道上運(yùn)行,而是需要某種方法來約束這些程序。
Nick的想法是用P4指定整個(gè)管道結(jié)構(gòu)。使用P4 extern功能,大部分程序代碼仍然可以用C/C++編寫,尤其是對于那些在CPU上運(yùn)行的內(nèi)容。其他代碼將用P4編寫,這樣就可以轉(zhuǎn)移到硬件加速器上。
他舉例說明了目前在智能網(wǎng)卡中實(shí)現(xiàn)的一些功能,用于云中的虛擬機(jī)和容器安全。當(dāng)云運(yùn)營商想要向云中添加新的裸機(jī)系統(tǒng)(如超級計(jì)算機(jī))時(shí),他們無法信任這些設(shè)備上的網(wǎng)卡,因?yàn)樗麄儫o法控制在其上運(yùn)行的軟件。如果他們可以把已經(jīng)在網(wǎng)卡上運(yùn)行的代碼放在交換機(jī)上,這個(gè)過程就會變得更容易。
P4社區(qū)和Linux網(wǎng)絡(luò)社區(qū)都有著專業(yè)的知識和能力,本著開源的精神,他們應(yīng)該一起合作解決這些問題。Nick建議netdev和 P4.org 組成一個(gè)工作組,專門致力于尋找開源解決方案。最后,Nick表示,在接下來的十年里,他相信網(wǎng)絡(luò)將變得更加端到端可編程,這也會帶來大量的網(wǎng)絡(luò)創(chuàng)新。