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