FPGA是網絡交換領域的不二選擇

最近有朋友問,頭條號為什麼起名叫網絡交換FPGA?今天這篇文章就來回答一下。我們將從網絡交換的歷史講起,也正如機器學習也趕上了ASIC工藝發展才引起革命性的變化一樣。技術發展的歷程中,總有那些看似不相關的技術結合起來,結果導致翻天覆地的變化。我覺得網絡交換與FPGA就是屬於這樣的兩種技術,必將會給整個行業帶來革命性的變化。


FPGA是網絡交換領域的不二選擇

前兩天華為公佈了單端口800Gbps的方案,而在FPGA領域,ISSCC2020會議上,Xilinx公司則發佈了單通道112Gbps的高速串口

華為單端口800Gbps的光口,Xilinx發佈的單通道112Gbps的高速串口,一家是世界上目前最大的通信設備商,另一家則是世界上最大的FPGA廠商,正因為一些冥冥之中的原因走的越來越近。800Gbps光口中所使用的技術,就是8個112Gbps的高速串行通道綁定而實現的。FPGA與網絡交換的淵源,讓我們從可編程網絡的歷史說起。

可編程網絡的歷史

1、基於小型計算機的路由器(1969年至1990年代中期)


分組交換網絡上的第一個路由器可能是1969年ARPANET上的接口消息處理器(IMP)。IMP論文中描述的IMP是在Honeywell DDP-516微型計算機上實現的。在今天的術語中,這種路由器被稱為軟件路由器,因為它是作為通用計算機之上的軟件實現的。

在小型計算機之上實現路由器的這種方法足以滿足當時所需的適度轉發速率。例如,IMP論文報告說,IMP的最大吞吐量約為700 kbit/s,足以在兩個方向上服務於多條50 kbit/s的線路。此類基於微型計算機的路由器也非常出色:可編程路由器的功能僅需升級微型計算機上的轉發軟件即可。

這種使用小型計算機構建生產路由器的方法一直持續到1990年代中期。1970年代著名的軟件路由器例子是David Mills的Fuzzball路由器。1980年代最著名的例子是Noel Chiappa的C網關,這是MIT初創公司Proteon 的基礎,以及William Yeager的“夜間運貨”多協議路由器,這是斯坦福初創公司思科系統公司的基礎。

到1990年代中期,由於互聯網和萬維網的迅速採用,軟件已無法滿足對更高鏈接速度的需求。瞻博網絡的M40路由器是1998年硬件路由器的早期示例。M40包含用於實現路由器的數據平面的專用芯片以及用於實現路由器的控制平面的控制處理器。正如我們在前面中所描述的那樣,自1990年代中期以來,最快的路由器主要由專用硬件構成,因為硬件專業化是維持鏈路速度逐年提高的唯一方法。


FPGA是網絡交換領域的不二選擇

圖1:自1969年ARPANET上的第一臺路由器以來,軟件路由器的總容量。直到1990年代中期,軟件路由器才夠用。但是,從那時起,最快的路由器主要是固定功能的設備,這些設備是由專用的非可編程硬件構建而成的,與最好的軟件路由器相比,這些路由器的性能提高了10-100倍。


2、主動網絡(1990年代中期)

1990年代中期,有源網絡得到了發展,這種方法提倡網絡是可編程的或“有源的”,以允許在網絡基礎架構中部署新服務。主動網絡至少有兩種方法。首先,可編程路由器方法,它允許網絡運營商以受限方式對路由器進行編程。其次,封裝方法,其中最終主機會將程序作為封裝嵌入到數據包中,然後由路由器執行。

主動網絡主要與膠囊方法有關。但是膠囊方法引起了一些安全隱患。由於程序是由最終用戶嵌入到數據包中的,因此惡意或錯誤的最終用戶程序可能會破壞整個路由器。解決安全問題的一種方法是在隔離的應用程序級虛擬機(如Java虛擬機)中執行膠囊程序。但是,使用虛擬機進行隔離以降低轉發性能為代價。

即使使用提供有效隔離的技術(例如SNAP),在通用處理器上執行數據包轉發時,也會對性能造成重大影響。例如,SNAP在2001年報告的轉發速率為100Mbit/s,比1998年開發的Juniper M40 40Gbit/s硬件路由器慢了兩個數量級。

膠囊方法可能是所有主動網絡願景中最雄心勃勃的方法,由於安全方面的考慮,它並未以最通用的形式出現。但是,最近的系統向終端主機公開了路由器功能的一個更為受限的子集(例如,終端主機讀取路由器狀態但不寫入路由器狀態的能力),這使人想起了封裝方法。另一方面,可編程路由器方法已經以各種形式被採用:軟件定義的網絡和可編程路由器芯片都為網絡運營商提供了不同種類的受限路由器可編程性。


3、軟件路由器(1999年至今)

自1990年代後期以來,一種可編程性的方法就是使用通用基板來編寫數據包處理程序,而固定功能路由器硬件則無法編程。多年來,通用基板已經發生了變化。例如,Click 在2000年使用了單核CPU。在2000年代初期,英特爾推出了專門針對網絡的一系列處理器,稱為網絡處理器,例如2000年的IXP1200 和2000年的IXP2800 。RouteBricks項目在2009年使用了多核處理器,PacketShader項目在2010年使用了GPU ,而NetFPGA-SUME項目在2014年使用了FPGA 。

已經發現軟件路由器被用作對路由器進行編程的一種手段,但是卻犧牲了性能。在鏈接速度較低但計算要求較高的情況下,它們特別有用。例如,該方法已被用於實現WiFi 中的MAC層算法和無線物理層中的信號處理算法。

在開發軟件路由器的同時,還開發了許多用於數據包處理的特定領域語言(DSL)。例如,單擊使用C ++在軟件路由器上進行數據包處理。packetC 和Microengine C 目標網絡處理器。


4、軟件定義的網絡(2004年至今)

從2000年代初期開始,研究人員就主張將路由器的控制平面(運行分佈式路由協議以計算其路由表的路由器部分)與路由器的數據平面(通過查看路由表的數據來轉發數據包)分開。作為示例,鏈路狀態路由協議的實現將是控制平面的一部分,而基於最長前綴的表查找的實現將是數據平面的一部分。

這種方法背後的思想,後來被稱為軟件定義網絡(SDN),是網絡運營商在管理大型網絡(例如流量工程,訪問控制,創建虛擬網絡)時所需要的大部分靈活性。與控制平面有關,與數據平面無關。此外,與數據平面相比,控制平面執行的頻率相對較低:每幾毫秒一次,而不是每幾納秒一次。因此,雖然必須以硬件來實現數據平面以提高性能,但控制平面操作的相對少見的性質允許將其從路由器移出並移至商品通用處理器,在此可以更輕鬆地進行操作程序。

SDN還引入了集中控制的概念:通過將路由器控制平面從路由器移到通用處理器上,可以將整個網絡控制平面集中在幾個服務器上。這樣一來,這幾臺服務器就可以利用全局網絡可見性來計算整個網絡的路由。SDN有效地用了更簡單的集中圖計算(例如,使用Dijkstra算法的最短路徑)代替了易於出錯的分佈式路由計算協議。

一旦控制平面為每個路由器計算了路由,SDN還需要一種控制平面的機制來填充路由表的內容。在轉發數據包時,數據平面將查詢這些表。這些機制中最著名的是OpenFlow API ,它公開了路由器硬件中路由表的最小接口。OpenFlow的目標是充當跨接口到不同路由器芯片中的路由表的最小公分母。這樣一來,現有芯片就可以立即支持OpenFlow API。

儘管OpenFlow API使對網絡的控制平面進行編程成為可能,但並不一定使它變得容易。因此,SDN的發展也導致了高級編程語言的發展,以對路由器的控制平面進行編程。儘管SDN在編程和驗證豐富的控制平面策略方面進行了大量研究工作,但在啟用數據平面中的可編程性方面卻進行了很多工作。


5、網絡功能虛擬化(2012年至今)

網絡功能虛擬化(NFV)試圖將更豐富的數據包處理功能(超出原始數據包轉發功能)轉移到商品通用處理器和雲基礎架構中。這種數據包處理功能包括深度數據包檢查,負載平衡,入侵檢測和WAN加速,通常統稱為“中間盒”。出現了一些系統來對這種中間盒的數據和控制平面進行編程。

這種中間盒的一種常見用例是在網絡的邊緣(例如,在蜂窩基站處),其中,每當客戶端訪問因特網時,各種分組處理功能就在處理器集群上運行。由於NFV是在軟件平臺上執行數據包處理的,因此它也可以看作是鏈路速率要求相對較低的邊緣上的軟件路由器的實際用例。


6、基於邊緣/終端主機的軟件定義網絡(2013年至今)

很快就清楚了,OpenFlow API不足以表達網絡運營商的所有需求,因為它被設計為易於採用的通用最小分母API。OpenFlow缺乏表達能力,導致了基於邊緣的軟件定義網絡方法。

通過這種方法,網絡的路由器分為兩類。邊緣路由器位於網絡的入口或邊緣,並執行可編程的數據包處理。網絡的核心是核心路由器,這些路由器簡單地轉發幾乎沒有可編程性的數據包。由於邊緣路由器在空間上分佈以服務於不同位置的客戶端,因此每個邊緣路由器只需要處理進出網絡的總流量中的一小部分。

因此,相對於核心,邊緣路由器對性能的要求要低得多,這使得它們可以在通用CPU上實現。使用通用CPU對邊緣路由器進行編程可以使它們比受限的OpenFlow API更具可編程性。開放式虛擬交換機是邊緣路由器的一個眾所周知的示例。它在終端主機上的虛擬機管理程序中運行,並將單個終端主機上的多個虛擬機連接到網絡。最近,邊緣上不斷增長的性能要求已導致在FPGA 上實現此類虛擬交換機。

從邏輯上講,邊緣路由器可能是終端主機本身。因此,在討論基於邊緣的方法時,我們還包括一些近期的提案,這些提案使用最終主機來實現網絡靈活性。例如,Eden通過僅對終端主機進行編程就可以使用商用路由器提供可編程數據平面。微型數據包程序(TPP)允許最終主機將小程序嵌入數據包頭中,然後由路由器以類似於基於膠囊的活動網絡的樣式由路由器執行。TPP使用受限制的指令集來緩解活動網絡的性能和安全問題。在測量和監視方面,許多系統僅從終端主機監視網絡性能。

對於網絡中不可用的應用程序上下文,基於邊緣或基於最終主機的解決方案是必需的。例如,只有在終端主機上才能獲得有關哪個應用程序使用了網絡的知識(可能對監視有用)。同樣,許多網絡安全應用程序(例如,過濾垃圾郵件)最好在最終主機上運行,因為出於隱私原因,確定什麼是垃圾郵件以及什麼不是最好的信息留在最終主機上。此外,可以僅通過邊緣可編程性來實現很多可編程網絡功能(例如,網絡虛擬化,訪問控制,安全策略等)。

但是,基於邊緣的方法不足以解決所有網絡問題。例如,通過使用網絡支持進行擁塞控制(例如,使用來自路由器的顯式擁塞通知支持的DCTCP 和使用來自路由器的擁塞程度的顯式信息的XCP),性能有了顯著提高。用於提高網絡性能的許多其他最新提議依賴於網絡核心內路由器的支持。與使用來自不同終端主機有利位置的網絡測量結果“三角剖分”網絡問題的根本原因相比,直接在網絡中進行監視,網絡可見性也有了顯著提高。總而言之,缺少可編程網絡核心會大大降低性能,並使網絡調試複雜化。

有人可能會提出一種混合網絡架構,該架構將基於邊緣的可編程性與更智能但固定的核心路由器相結合。這樣的體系結構仍然將所有可編程性置於邊緣,但是通過少量固定功能擴展了核心路由器,以支持來自邊緣的可編程性。這種方法的示例包括通用數據包調度和帶內網絡遙測,它們通過細粒度的優先級隊列擴展了路由器,並且能夠將隊列大小信息導出到數據包中,但是保留了所有到邊緣的可編程性。

如果存在一小部分功能,這些功能對於固定功能路由器就足夠了,那麼這種混合方法將是面向未來的通用方法。如果確實存在如此少的一組固定功能,則構建固定功能路由器而不是可編程路由器將是更好且更簡單的方法。但是最近幾十年來,路由器中不斷增加的功能不斷湧現。在這種不斷變化的功能中,網絡內的可編程性為網絡運營商提供了未來的證明和安心:能夠在需要時快速向路由器添加功能,而無需冗長的硬件迭代週期。

而這正是FPGA所具有的得天獨厚的優勢。

FPGA是定製計算領域的不二選擇

引用前幾天FPGA領域大牛叢京生老師在2020年ASP-DAC會議上對於FPGA的一段論述:


可定製計算和人們通常所知的通用處理器相比有著巨大優勢。實際我在UCLA的同事Ingrid Verbauwhede教授的工作對我們的研究有不少啟發。她2003年在加密編碼算法的研究中得到了對於可定製計算非常有利的實驗結果[6]。她使用加密算法的專用集成電路(ASIC)實現作為性能基數,如下圖左邊表格第一行所示。第二行是使用可定製計算的方法得到的運行數據,第三行是在ARM上編寫彙編得出的運行數據。可以看見可定製計算總體優於此種方式85倍。再往下一行是在奔騰CPU上編寫相同功能的彙編代碼得到的運行數據,這在當時是最好的臺式機芯片。可定製計算的優勢高達8000倍。也許你會說這項研究是否有點老?那我們再來看一些其它的比較工作。下圖右側的圖表來自一篇斯坦福大學2010年發表的文章。他們使用H.264視頻編解碼算法對定製指令集進行了評估。可以看見即使是用上了SIMD和定製指令集,通用CPU和ASIC的差距還是有50倍。顯然你不可能對每個計算應用都開發專門的ASIC,這是一項既燒錢又耗時的工作。關鍵問題是任何算法的改動都需要重新開發一整塊新的ASIC。請注意在左邊的例子中,第二行的可定製計算是使用可重構的現場可編程邏輯門陣列(FPGA)做的實現。它既可以做到快速低成本,又保證高於通用CPU的性能。所以利用FPGA是一個非常有前景的解決方案。

FPGA是網絡交換領域的不二選擇

有些同學可能會比較好奇說:等一會,我在計算機原理課上學過CPU的架構。為什麼CPU的性能這麼差,差到甚至成百上千倍?實際上原因通過下圖看來非常簡單明瞭。你們可以想一想CPU是怎麼進行加法操作的。第一件事是從緩存或者內存裡拿到這個指令放進處理器流水線。這個過程就已經有9%的能量消耗了。接著指令需要被解碼從而CPU才知道這條指令到底要做什麼事情,這裡又有6%的能耗。因為現代處理器可以支持亂序執行,這樣指令很有可能要被重命名來解決一些衝突的問題,這又導致12%的能耗。接下來從寄存器堆拿數據又產生3%。現在萬事俱備就等著做加法了,等待數據會有11%的能耗。最終實際的計算部分只佔了14%能耗,而剩下的雜事又產生23%能耗。在以上CPU的一系列操作中實際上只有做加法這一步是你關心的。然而,為了得到正確的加法結果一條加法指令需要走一個非常複雜的計算流水線。這就是為什麼CPU不高效的原因。

因此,未來或許不僅僅是網絡交換領域,更多的領域都需要硬件定製。而FPGA則是硬件定製的首要選擇。

FPGA是網絡交換髮展的必然選擇

網絡將受益於快速靈活的分組處理器。如果分組處理器可以處理自定義標頭位,則它將簡化新網絡協議的設計和部署。同樣,如果分組處理器可以處理自定義有效載荷位,則可以將關鍵網絡功能(例如分組分類和共識協議)卸載到網絡數據平面。同時,分組處理器必須是快速的。例如,截至目前,數據中心網絡帶寬一直在穩定增長:10Gbps以太網普及,25Gbps越來越流行,而100Gbps和400Gbps也已經普及。在執行復雜的數據包處理時以線速處理數據包轉發需要大量的計算能力和可編程性。不幸的是,現有網絡數據平面都無法同時實現靈活性和性能。

我們調查了2008年,2012年和2016年的三種數據平面實施技術,以瞭解不同類型的網絡數據平面如何發展以及為什麼現有數據平面缺乏靈活性或性能;也就是說,網絡數據平面是靈活的(可編程的)或高性能的,但不能兼而有之。


1、軟件分組處理器

軟件分組處理器是靈活的,但不是很快。軟件分組處理器是用高級編程語言(例如C或C ++)編寫並在通用CPU上執行的軟件程序。25Gbps網絡接口可以每19.2ns接收最小大小(64B)的數據包。但是,以這種速度,即使是對最後一級緩存的單次訪問也將花費比數據包的到達時間更長的時間。即使使用所有高級軟件技術(例如內核旁路,接收方縮放和數據直接I / O),在軟件數據平面中處理數據包也具有挑戰性。更糟糕的是,由於頻率縮放停滯,CPU性能不可能提高。表1總結了2008、2012和2016年用於構建軟件數據平面的CPU的三個示例,它們比較了CPU頻率,內核總數,製造過程和內存帶寬。表格的“核心數量”行顯示,2016年CPU核心總數從4個增加到24個,而時鐘頻率從3.4GHz減少到2.2GHz。如果我們使用時鐘頻率來估計單線程性能,則性能在2008年至2016年期間不會得到改善。由於網絡鏈接速度接近25Gbps或100Gbps,軟件網絡數據平面對服務器計算和內存功能造成了很大壓力,因此變得不切實際。

FPGA是網絡交換領域的不二選擇

表1:從2008年到2016年的Dell服務器規格,2008年的XeonCPU沒有按核L2高速緩存,而是使用按插槽的L3高速緩存。


2、基於ASIC的分組處理器

基於ASIC的分組處理器速度很快,但不靈活。 這些分組處理器通常用於現代交換機和路由器中,並且傾向於處理一組有限的協議。例如,表2比較了從2008年到2016年的三代Broadcom交換機ASIC,它們是交換機開發中使用的主要設備。收發器行顯示,在此期間,端口數量和每端口鏈接速度已顯著提高。但是,開關ASIC提供的功能集在很大程度上保持不變。因此,儘管性能有所提高,但在提供可編程數據平面方面,ASIC仍然不是最佳選擇,因為難以滿足未直接支持的應用要求。

FPGA是網絡交換領域的不二選擇


表2:2008年至2016年Broadcom Trident系列交換機ASIC規範


3、基於FPGA的分組處理器

用FPGA實現的分組處理器在硬件性能和軟件靈活性之間取得了平衡。例如,NetFPGA項目已被用於原型最短路徑路由和擁塞控制算法。使用諸如Verilog之類的硬件描述語言來表達設計,並使用供應商特定的佈局佈線工具將其綜合到FPGA。表3展示了Xilinx在2008、2012和2016年中的三代Virtex系列FPGA。我們為每一代選擇了頂級的FPGA模型。Xilinx在每一代產品中使用的工藝技術與Broadcom在同一時期所採用的製造工藝相似。在此期間,Virtex FPGA上收發器的數據速率增加了3倍(從Virtex-6中的11.2Gbps增長到Virtex UltraScale +中的32.75Gbps),收發器的總數從Virtex-6中的72個略微增加到96個在UltraScale +中,由於封裝限制,縮放比例有限。FPGA上的邏輯和內存資源分別增加了2倍和5倍。總體而言,FPGA由於具有可重新配置性,因此可以為軟件提供競爭性的靈活性。它們提供了與ASIC相當的性能。

FPGA是網絡交換領域的不二選擇


表3:2008年至2016年的Xilinx Virtex系列FPGA規範

基於FPGA的設計面臨的挑戰是,數據包處理管道通常使用數據包處理算法進行硬編碼。實施新的數據包處理算法需要用戶使用硬件描述語言進行編程。而這也是FPGA所面臨的一個挑戰。能否有更敏捷的開發方式來快速的實現FPGA的可編程,HLS?Chisel?還是別的什麼?

文末福利,請點擊以下鏈接觀看西瓜視頻:


全文完。


分享到:


相關文章: