系統廠商在為滿足未來的擴展性和集成挑戰而研究下一代數據包處理技術時,面臨著多種架構選擇。目前有兩種常用架構:通用多核架構和專用數據流架構。
每種架構都有其長處。通常情況是,每個系統供應商的設計決策歸根到底都是平臺的預期任務。從本質上講,決策過程就是根據應用選擇架構的過程。
數據包處理背景
數據包處理是數據密集型操作,需要優化的硬件。在寬帶互聯網出現之前,通用處理器既被用于控制會話處理又肩負用戶流量的數據包處理。
但是,由數據和控制平面共享中央處理單元(CPU)資源的作法已被證明難以滿足隨帶寬需求增長帶來的更高要求。對于交換機和路由器來說,數據平面的數據包處理任務已轉交給定制的固定功能ASIC或可編程網絡處理器單元(NPU)。從而把通用CPU解放出來以專門應對控制平面任務。
有幾家NPU供應商一直在試圖針對2-4層包處理任務優化通用處理器,并提供集成了網絡硬件(即物理層、媒體存取控制器和表存儲器)以及用于特定任務(即散列)的硬件引擎的多核架構。在20世紀末20世紀初,MMC、C-Port和英特爾的IXP部門等機構開發了這類器件。
雖然這些產品各有不同,但它們的基本架構是相同的。通過降低復雜性,處理器核能夠得到簡化,從而使得器件內可以集成數十個處理器核以滿足更高的并行要求。
除了極少數例外,這些NPU供應商在商業上都不成功。根本原因是這些NPU不能有效地滿足超過10Gbps的網絡應用對處理能力和存儲器訪問方面的要求。
現在,當我們邁進2010年,我們看到了旨在應對網絡處理市場的新一代多核供應商的出現。雖然CMOS技術、存儲器帶寬和時鐘周期性能得到了提升,但它們仍基于同樣的基本架構。因此,這些新興公司能期待獲得更大的成功嗎?
這將取決于它們針對的是哪類應用。現在的網絡節點不僅處理2-4層的數據包,也需在更高層進行處理以支持服務和增加安全性。我們將研究其中的差異,以及對任何給定應用來說,為什么某些架構比其它架構效果更好。
線速包處理
2-4層數據包處理不同于其它網絡應用(表1)。首先,能對所有大小的數據包進行線速處理是一個關鍵目標。現代路由器和交換機被設計為擁有廣泛的網絡功能,服務提供商期望能同時獲得這些功能且不降低性能。
第二,數據平面將數據包視為獨立個體,允許高度并行的處理。對一個100Gbps應用來說,網絡處理器需要每秒處理1.5億個數據包以確保線速性能。處理器10μs的延時相當于1,500個數據包的并行處理時間。
第三,數據平面程序需要高I/O存儲器訪問帶寬以完成表查詢轉發、狀態更新及其它處理。在高速平臺上,數據包到達間隔時間非常短,因而對存儲器延時提出了苛刻要求。對于小型數據包來說,執行這些任務的存儲器帶寬是鏈路帶寬的數倍。
最后,當今網絡的功耗很高。出于運營成本和環保兩方面的考慮,服務提供商在煞費苦心地追求最佳的每瓦性能。考慮到包處理的特點,應以線速性能條件下、每瓦功率可實現的最高性能來衡量最有效的架構。
服務和安全處理特征
與數據包處理相近的市場是服務和安全處理。這些應用具有與2-4層數據包處理不同的特點。因此,可實施其它的硬件設計優化。
在客戶機-服務器方式中,這些應用終止和處理主機至主機協議,或在中間網絡節點(即防火墻、負載均衡器、入侵和防御系統)上處理重組的凈載數據包數據。這些產品必須能夠跨數據包邊界工作,因為它們通常需要在更大的數據量上進行更大規模的操作,這將導致數據并行性較低。另一方面,相對所處理的數據而言,這類所需的I/O存儲器帶寬較低。
架構比較
NPU承諾可提供定制ASIC的性能,且具有通用處理器的可編程能力。但是,比較處理器的性能較困難,因為理論上的最大值通常與真實世界關聯不大。此外,有效利用可用處理性能的能力,以及與處理容量相關的I/O存儲器的利用情況也是影響處理器性能的因素。
因此,這種比較必須從設計層面開始。我們首先從一個通用多核NPU架構開始。多核NPU架構衍生于通用處理器架構,該架構希望通過增加處理器核來實現更高的并行處理能力。降低復雜性并移除當今通用處理器架構內不必要的功能(即浮點指令)可實現這一目標。
多核NPU架構對處理器核進行了專門分組。這些內核或被分組到各個并行池或以串行方式進行流水線排列(圖1)。NPU供應商在設計時,允許架構對這種分組實施嚴格控制以優化性能。
圖1:處理器核采用流水線或者并行池架構,混合模式也很常見。
如果定義得較松散,這種分組就允許程序員更自由地在內核間劃分任務,最終結果是以性能控制為代價提供更大的靈活性。在許多情況下,多核網絡處理器最終會以流水線和并行池的混合架構形態出現。
處理器核的分組對編程模式有重要影響。并行池帶有相關的多線程編程模式,其中每個處理器核可運行一個或多個線程。從本質上講就是程序獲取一個數據包并對其執行一系列操作。
一旦處理完一個數據包,程序就準備好按順序取用下一個數據包。程序員通過把數據包分配給不同的并行池來有效利用處理資源。線程之間的同步是程序員的另一個關鍵系統任務。
流水線模式處理數據平面應用,并將其劃分為不同的處理任務(即:分類、修改、隧道處理以及狀態更新)。然后,每個任務被映射到不同的處理器核,任務的執行或由架構強制完成,或交由程序員處理。由于吞吐量受限于速度最慢的部分,因此如何在各內核間有效地劃分任務通常是個挑戰。
通用多核架構內的數據包通常存儲在共享存儲器區域(圖2)。在這種情況下,程序員必須將分類和數據包修改任務分別分配給處理資源的并行池和流水線。
圖2:多核架構共享資源,以及用于處理器核和資源互連的高速總線或crossbar總線。
共享數據的復雜性
在并行數據包處理過程中,多個線程可能需要訪問和更新諸如狀態和ARP條目等共享數據。不同的線程需要進行同步以強制互斥并實現通用共享模式。但眾所周知,同步并非易事而且會對性能造成影響。
為提高性能,許多多核處理器采用硬件緩存。雖然這可以極大縮短平均存儲器訪問延遲,但架構會變得更難以預測。
緩存一致性協議保證了采用緩存層次結構的多核系統中數據的完整性。雖然這對于程序員是透明的,但為了調節性能,程序員需要了解緩存和一致性協議是如何運作的。另一方面,存儲器一致性模型也對程序員開放。因此,程序員需要了解存儲器一致性模型以編寫正確的程序。
保持數據包順序
并行數據包處理的另一個挑戰是保持數據包的順序。所有節點都應針對相關的數據包保持數據包順序,因為上層傳輸協議的正常工作依賴這種順序。了解哪些類數據包需要保持包順序以及如何最有效地滿足這一需求通常是程序員的職責。
為降低復雜度,NPU供應商通常會提供硬件支持和軟件庫。添加更多的數據包緩沖器可有助于確保數據包順序,但這總是以增加延遲為代價。
降低復雜性需求
駕馭基于多核的NPU并非易事。英特爾公司的Larry Huston在第10屆高性能計算機體系結構國際研討會上發表的論文中總結道:
“理想的情況應是,程序員將應用寫成一段軟件,而工具會自動劃分應用并將應用映射到并行資源集。這也許是個難以實現的目標,但在該方向上的任一進步都將升華開發者的開發生命。”
數據流架構正好滿足這一需求。雖然Larry Huston的上述見解發表在2004年,但它在今天的效用和意義與6年前一樣。
確定性數據流架構
數據流架構(圖3)采用了獨特的方法,且具有處理器內核組成的單個流水線。該架構已被設計成完全確定性和超高效的。除執行語境外,它還包括一個數據包指令集計算機(PISC)和一個引擎接入點(EAP)。
圖3:數據流架構(圖3)擁有包含數百個PISC處理器內核的單個流水線,以及嵌入式引擎接入點。
PISC是專為數據包處理設計的處理器核。流水線可以包含數百個(超過400)PISC。EAP是用于分類任務的專用I/O單元。EAP統一訪問存儲在嵌入式或外部存儲器(TCAM、SRAM、DRAM)中的存儲表,并包含用于計量、計數、散列、格式化、流量管理以及表搜索的資源引擎。
執行語境是程序員可用的數據包內的具體數據。它包括數據包最初的256個字節、通用寄存器、設備寄存器和狀態標志。一個執行語境唯一地對應一個數據包并使該數據包在流水線內傳送。
數據包在流水線中傳送就像在一個固定長度的先入先出(FIFO)設備中行進一樣。在每個時鐘周期,流水線內的所有數據包都前移一級以便在下一個處理器或EAP內執行。
指令總是在一個時鐘周期內執行完。每條指令都能以超長指令字(VLIW)方式并行執行多達5個操作。然后,數據包繼續前進到下一個PISC或EAP。
數據平面程序經編譯后存儲在位于處理器核內的指令存儲器,從而無需在程序執行期間從共享存儲器內將指令發送到處理器內核。另外,此舉還顯著提升了性能,降低了功耗。
編程模式反映出眾所周知的順序單處理器模式,其中,程序員可以編寫順序執行的模塊以避免多個并行編程(即存儲器連貫性、一致性和同步)的麻煩。當軟件被編譯后,程序代碼會自動映射到由處理器內核構成的單一流水線。一個VLIW指令占用流水線中的一個處理器核。
這種架構和編程模式的一個顯著好處是,它強制執行線速運作。每種數據包都有經確保數量的操作和分類資源。
降低復雜度,提高性能
多核架構無法保證某一水平的性能,而數據流架構是完全確定性的(表2)。通過降低復雜度并面向2-4層包處理充分優化架構,數據流架構的設計可擴展到數百個處理器核,從而能以強大的線速保證支持100Gbps的速率和每秒1.5億個數據包的操作。
雖然原始處理器的性能非常重要,但在數據流架構中,程序員將處理器性能發揮到極致的能力是衡量架構實際效用的另一關鍵因素。從原子操作到表存儲的一系列公共存儲器操作允許高效編碼和代碼復用,這些操作獨立于存儲器類型(片上或外部存儲器)和貫穿整個流水線的通用處理器核。
在多核架構中,每一級都需要處理能力的冗余配置,在實踐中,這對于總是感到處理資源短缺的程序員來說是個重大挑戰。因此,為恢復丟失的時鐘周期,數據平面程序員會陷入“測試-性能優化-再測試-再性能優化”這樣一個無盡的循環中。
針對數據包處理比較數據流與多核架構,兩款架構在效率上的差異顯而易見。下面讓我們借助兩款當今最先進的處理器來比較2-4層包處理的各項指標。
第一款處理器是Xelerated基于數據流架構的HX 330 NPU。它工作在300MHz,擁有448個處理器核,每個內核可同時進行5項操作。每兩個時鐘周期就有一個新數據包可以進入流水線。
這相當于每秒可處理1.5億個數據包,也就是說即使是最小的64字節以太網數據包,也需要確保能提供100Gbps的線速操作支持。每個數據包可確保5×448 =2240個操作。
當然,2240個操作是理論上的數值。真實的數據平面應用并不會用到全部的潛能。經優化的數據平面代碼大約用到50%的資源,這允許很高的服務密度。
第二款處理器是市場上性能最高的多核處理器之一。它擁有64個處理器核、工作在700 MHz。將該處理器用于100Gbps的數據包處理應用時,需要每四個時鐘周期調度一個新的數據包。平均而言,每個數據包理論上將獲得256個時鐘周期的處理能力。
同步挑戰以及管理共享數據所耗費的性能會將整體性能降低到利用率最多為50%。這相當于每個數據包128個操作,或者HX NPU的13%處理資源。此外,這些操作的性能得不到保證。
如果再考慮功耗因素,則兩者的差異更為顯著。基于數據流架構的NPU,其每瓦性能(在線速下)是多核處理器架構NPU的15至20倍。
不同需求,不同架構
對于2-4層數據包處理來說,數據流架構具有明顯優勢。但其它比較卻會產生不同結果。因此,起初看起來具有競爭力的方法實際上也許要大打折扣。
對面向服務的應用來說,由于多核架構能很好地協調共同工作,因此它們能夠有效地擴展。在一個分離的架構中,系統供應商可以利用基于數據流的處理器執行2-4層處理并通過運行多核處理器完成內容識別、加密和完成服務等操作。
本文小結
有關架構的爭論在不斷循環往復。十年前,在10Gbps以上領域業內有30多家NPU供應商。這些公司的研發大多基于多核架構。
而今天,我們知道這種架構在進行2-4層數據包處理時,無法與專用數據流架構媲美。數據流架構的能效要比多核架構高出15至20倍,且嚴格保證線速。
當就網絡處理對架構進行比較時,不要被其所支持的接口帶寬所誤導,因為如果不考慮服務密度,則這一指標沒有意義。當服務提供商評估網絡平臺時,真正有價值的是在線速操作下同時支持的服務數量。系統供應商需要在研發階段的早期就密切關注服務密度。
雖然在2-4層處理的服務密度上達不到要求,但新一代多核處理器仍可滿足巨大且不斷增長的網絡市場的需求。這是對基于網絡的服務和安全處理應用的大力推動,它為現代多核處理器和數據流架構的結合創造了新的機會(表3)。
評論
查看更多