我們曾經面臨一項挑戰:當開發出8核心2GHz處理器LS2088A,且正開始進行初代晶片的取樣,但客戶一如往常提出更多的要求。那時我們討論的話題圍繞著:「該增加多少?真的需要嗎?如果市場確實需要更多,該升級的是什麼?」接下來該怎麼做?我們必須找出市場和我們產品組合中缺少的部分,更重要的是,想滿足什麼樣的新興應用和使用案例?

將所有要素全部升級再塞進晶片內是一個選項,但另一種比較慎重的做法後來勝出。本文將探究新一代處理器LX2160A背後的決策流程,還有我們如何克服重要的挑戰。它可能還是2GHz等級的處理器,核心數量或許是上一代LS2088A的兩倍,但絕不會是「全面升級」。以下將說明如何按照希望處理器SoC的專用領域來決定I/O介面,以及如何想出SoC架構的各特性,如快取記憶體、SRAM和DRAM頻寬等。本文也將討論為何要將特定的工作負載依照加速器和通用型運算核心加以區分,還有如何透過這種做法讓新處理器達成效能目標,以完成從無線傳輸通訊協定處理,到用於雲端資料中心的軟體定義儲存系統等各種工作負載。 故事的起點

上一代處理器LS2088A裝置有八個Arm Cortex-A72核心,各自的運作頻率為2.0GHz。在2016年,Cortex-A72是Arm效能最高的核心,其另一項優點是耗電量低於前一代的Cortex-A57。核心要同時滿足提升效能和降低耗電量兩種截然不同的目標,很難得可貴。

為每一對Arm核心分配了1MB的L2快取記憶體,總共有4MB的L2快取記憶體,另外LS2088A還具備1MB的L3平台快取記憶體。我們為上一代處理器選擇容量相對較小的L3快取記憶體,是為了有更多晶片空間能撥給L2快取記憶體,這樣核心在存取時可減少延遲,對核心效能的影響力也高於L3。為了存取主要記憶體,上一代處理器內建兩個72位元DDR4控制器,其各自的運作速率為2.1GT/s,加上第三個36位元DDR4控制器,供乙太網路資料路徑使用。由於LS2088A的目標應用為網路封包處理,頻寬大多為乙太網路資料路徑專屬的資料結構(封包資料和路由表)所佔用,因此又加入了第四個DDR4控制器。 上一代處理器LS2088A設計16個SerDes通道,專供外部高速I/O使用,可設定為支援最多四個PCIe Gen3控制器(PCIe Gen3 為當時速度最快的標準)和16個乙太網路MAC(其中八個支援到最高10Gbps)。在加速方面,新一代處理器有專用的壓縮、解壓縮、模式匹配和安全協作處理器,以及用於自主封包處理的可程式 AIOP (進階 IO 處理器)。AIOP 是專為網路路由和轉寄應用所設計,其中乙太網路封包可能會經過多次的表格查找和標頭操控。

採用此種架構,使 新一代處理器LS2088A能夠匯聚核心效能,達到約100,000 CoreMark,或在SPEC CPU2006-Int拿下81。使用128位元組的封包尺寸進行DPDK IPv4簡易轉送,速度最高可達40Gbps。或是在使用AIOP下讓裝置執行19.4Gbps的複雜IPv4轉送(所謂複雜轉送是指每個封包有三個完全符合的查找、一個長度最長的前綴符合查找,還有一個5-tuple存取控制清單查找的使用案例)。最重要的是,AIOP在達到這個速率時還能完全卸載CPU資料路徑,讓Cortex-A72核心達到零負載。

新興應用

推出新一代處理器時,目標是要為各種新興應用提供支援。就像新處理器是針對網路連線和無線基礎架構最佳化,我們也希望新產品能完美地適用於無線基礎架構(正從4G LTE轉移為5G)、網路功能虛擬化(NFV)、行動邊緣運算,以及新型態的資料中心卸載和儲存應用。

DRAM

我們知道,核心效能對這些應用同樣重要。無論應用是否用得到,很少有人會不喜歡擁有額外的核心週期。除了資料作業或裝置的網路封包移動,NFV和邊緣運算應用對高階應用的核心效能需求也持續增加。但假如增加了過多的核心效能,這些核心必須等著存取記憶體子系統,同樣派不上用場,此現象通常稱為「記憶體撞牆期」。因此,必須先計算目標應用在成本限制內需要多少的DRAM頻寬,目標應改成:在最大化利用頻寬為前提下,盡量提高核心效能。

有好幾項DRAM技術可供選用:LPDDR4、GDDR、HBM和DDR4。LPDDR4具有出色的頻寬,因為它是點對點的技術,不會有多重晶片對組選擇共用公共資料匯流排,再加上它基本上是×32技術(每晶片的資料匯流排寬度),而不是×16、×8 或×4技術的DDR4,LPDDR4所能達到的最大DRAM系統容量並不能滿足需求使用。有多種版本的GDDR同樣具有出色的頻寬,但其缺點在於,它只有在長循序存取時可達到全頻寬,對於在由核心啟動的快取行大小交易,還有乙太網路封包一般較小的本系統上,可就不保證能達到全頻寬。

希望DRAM技術在一致化存取及從核心存取(這兩種都會產生快取行大小的交易)時也能發揮出色效能,因此選擇DRAM技術時必須將這點納入考量。我們也需要這項DRAM技術在小型乙太網路封包上發揮出色效能,正如同許多其他應用,系統需要有充足的效能,來回應可能收到的任何大小的乙太網路封包。與主要SoC(如HBM)採用相同封裝基板的3D堆疊DRAM也在考量範圍內,但它會增加不少封裝成本,而且DRAM需要嵌入到封裝內(非與系統相依的設計參數),因此也會限制DRAM的容量。此外,處理器會運用到各種不同的應用上,想要在生產前事先預測記憶體的實際大小,顯然並不容易。

如此一來,早已熟悉的DDR4便成為獲選的技術。好消息是,新一代處理器推出時,3.2GT/s DDR4已快要問世。在DDR4介面數量和寬度相同的情況下,其傳輸量比新一代處理器的2.1GT/s DDR4介面高出50%以上。為了使客戶的PCB設計成本和產品成本維持在合理水平,裝載兩個以上的DRAM控制器顯然不可行。因此,決定支援兩個速度3.2GT/s的72位元DDR4介面。

核心與快取記憶體

回到核心的選擇,在考慮核心架構時,再度考量Cortex-A72,以及在它之後發表的一些其他核心。無論選擇為何,它都必須相容Arm-v8 AARCH64,以達到與新一代處理器和產品組合中其他產品的軟體相容性。每個核心都必須達到與新處理器內的Cortex-A72相同的效能水準,回頭使用單一執行緒程式碼無法被接受。但無論應用程式如何針對跨多重核心平行運行所設計,應用內總是多少會存在一些單一執行緒程式碼(例如用於例外處理或網路控制平面)。

快取記憶體上的ECC保護(例如Cortex-A72上) 對維持可靠度來說是不可或缺的功能。只要保留一定的晶片面積(還有成本)給CPU,就能維持住效能。神奇的是,考量到這些需求的情況下,最好的核心仍舊是Cortex-A72。只不過,稍微調整了一下時脈速度,從2.0GHz提高到2.2GHz,但其實還是同一個核心。

建立晶片的DRAM頻寬和所要使用的核心後,為了計算所需要的核心數量,分析包括公開和內部的好幾項基準測試。公開基準測試的重點在於CPU、快取記憶體和DRAM子系統,方式有些微的不同。內部基準測試則包含特別為封包處理建立的多個驗證點應用程式。這些結果整體來說與SPEC CPU2006-Int套裝軟體的部分結果一致,其快取記憶體命中次數較少,因此最重視DRAM(例如xalankbmk和gcc)。我們從中導出了一項黃金定律:每GHz的CPU時脈需要大約0.9GB/s的頻寬。運用這條黃金定律,並考量DRAM的使用效率後,發現可以將16個Cortex-A72核心(16×0.9GB/s×2.2GHz)容納到DRAM實際可用的31GB/s頻寬內(3.2GT/s×8位元組/週期×2個DDR控制器×60%平均DRAM使用率)。

為了善加利用寶貴的DRAM頻寬,我們決定大幅增加一致性互連中平台快取記憶體的大小,從1MB提高到8MB。這個快取記憶體大小確實能為核心流量帶來些許好處(做為核心叢集八個1MB L2快取記憶體的受害者快取記憶體),但LX2160平台快取記憶體的主要優點還是減少I/O啟動器(乙太網路和PCI Express)對DRAM頻寬造成的壓力。某一啟動器將資料寫入DRAM,之後可能由其他啟動器讀取,然後才會從快取記憶體中逐出。一般來說,小容量快取記憶體遭到輾轉(先前寫入的資料由新資料取代)的機率要比大容量快取記憶體來得高。換句話說,LX2160較大的快取記憶體容量,可讓資料停留在快取記憶體內更長的時間。資料停留在快取記憶體內的時間越長,當下次需要使用資料時,資料還會在快取記憶體內的可能性便越高。

PCIe、SerDes 和壓縮

要決定由核心主宰的工作負載需要哪些功能,相對來說是比較簡單的,難的是決定其餘工作負載需要的功能。

一開始要應付的挑戰之一,就是為每瓦單位效能、資料中心卸載,以及企業儲存解決方案設計出正確的組合。需要遵守現有儲存系統最嚴格的高可用性設計和雙控制器架構,而其剛好也符合新一代高階熱儲存解決方案,以及較新的物件儲存系統和高擴充性軟體設計儲存(SDS)系統的基本設計。

新處理器的設計適用於高效能的資料路徑架構,其I/O透過新的高頻寬介面連接,包括像是網路端的25G/50G/100G聚合式網路卡(CNA)、企業儲存適用的序列連接SCSI(SAS)控制器或NVMe SSD適用的PCIe交換器等介面。DMA控制器的大小設計也適用於支援非透明橋接(NTB)功能的控制器對控制器資料複製。

透過結合16個Cortex-A72核心,加上可執行壓縮、加密和去重複化的硬體加速功能,我們找出了效能、功率和功能的絕妙平衡點,足以應付新型資料中心的運算卸載挑戰,和智慧型SSD等讓運算接近儲存的需求。隨著固態儲存的虛擬化需求不斷提高,和SSD容量不斷成長的情況下,讓運算接近儲存(compute-closer-to-storage)逐漸變成必要條件。

在這類應用中,新處理器可作為伺服器處理器(透過PCIe的主機匯流排轉接器連接)和儲存裝置(透過PCIe型IO控制器連接的HDD或SSD)之間的儲存控制器使用。這類的企業級系統極重視系統備援,儲存控制器可能有多個複本,資料的備援複本在儲存控制器之間傳送,即使某一系統故障,資料也不會遺失。基本上,大量資料會經由PCIe(某些情況下也包含乙太網路)進出SoC,還有加密/解密、壓縮/解壓縮和DMA複本的資料在不同的位置間移動。區塊大小相比下較大(單位為千位元組,而非位元組),因此DRAM效率會比用於網路交易時更高,另外相較於資料傳輸時間,判斷如何處理封包或資料區塊的負載更是微乎其微。因此可以更專心將新處理器最佳化,透過PCIe Gen4介面讓大型資料區塊進出SoC。

20180606TA01P1 圖1 儲存控制器。

在定義新處理器期間,我們早知道PCIe Gen4會在其使用壽命期間內受到廣泛運用,因此加入這項功能是無庸置疑的。其每通道速度理論上達到16Gb/s,相較之下,上一代處理器的Gen3只能達到8Gb/s,且其有16個SerDes通道,供PCIe和乙太網路共用。但就算有雙倍資料率,16個SerDes通道的頻寬似乎也不夠新處理器使用。為了迎合儲存使用案例,產品目標訂為支援八個PCIe Gen4通道,以用在進出伺服器的流量,但這些流量最終還是得從儲存裝置流出,因此需要另外八個通道,以將I/O控制器連接至儲存裝置(HDD或SSD)。此外,為了提供備援,還需要額外八個SerDes通道,以連接到完全相同的新處理器。如此看來,新處理器需要的不只是PCIe Gen4,而是24個能達到此速率的通道。

為了應付來自伺服器的流量,還有來自完全相同的備援新處理器的流量,設計必須要能支援大量的壓縮/解壓縮流量,也因此帶動硬體資料壓縮和解壓縮引擎擴充其大小。雖然安全性引擎也使用在儲存使用案例,但其大小決策需要透過IPSec的DPDK IPv4轉送使用案例來說明,待後續說明。

乙太網路與安全性

我們選擇最佳化新處理器LS2088A的另一個關鍵使用案例,就是透過IPSec來進行DPDK IPv4轉送,這尤其適合5G無線網路基礎架構等應用。IPSec非常類似於新處理器最佳化所適用的DPDK IPv4轉送使用案例,只不過IPSec還需要將每個封包加密或解密。隨著隨來越多的私有資料儲存於雲端,並透過網際網路傳送,安全性也變得更加重要。IPSec可確保所有酬載資料都經過加密,以防止不法之徒攔截機密資訊。

但是和新處理器不同的是,這項產品刻意不針對複雜的轉送進行最佳化,而且可查找最多5個表格。這是因為我們發現,在許多應用中可以使用資料流快取,如此就只有資料流中的第一個封包,需要經過複雜轉送機制的表格查找程序。如果平均而言,在資料流的生命週期中存在許多封包,則該資料流可以建立快取,以避免需要對每個封包進行查找的動作。由於這項應用的重點轉移,因此在本產品中就不需要AIOP的表格查找加速功能,讓新處理器的設計能夠更聚焦於其他關鍵使用案例。

此外,雖然我們設計讓上一代處理器能夠處理各種封包大小,但是我們針對新處理器進行了最佳化,使其能夠以峰值的IPsec資料速率,來處理較大型的封包。新的處理器可以高達50Gb/s的速度,使用IPsec進行IPv4轉送。這是既有處理器LS2088A最高資料速率的2.5倍。我們著眼於這項設計切入點,因為某些網路處理市場,雖然可能會有涵蓋平均封包大小較小的應用,但是新處理器最佳化所針對的儲存和5G無線網路基礎架構應用,則通常會具有較大的平均封包大小。配合不同的應用來設計新處理器,並維持較低的封包速率,可讓晶片針對這些高資料速率進行最佳化,不會因為處理封包而變得負擔過重。

不過,從乙太網路的角度來看,效能的目標是達到和超過上一代處理器MAC所支援的10Gb/s速率。25G、40G、50G和100G乙太網路正變得日益普及,因此需要支援這些乙太網路。我們提供了兩種乙太網路MAC,可支援40G、50G和100G 的速度,乙太網路的這個最高速度,是上一代處理器10G的10倍,讓先前不可能實現的高頻寬使用案例成為可能。在企業應用中經常需要兩個最高速度的連接埠(一個是乙太網路的傳入埠,另一個是傳出埠),這是為了提供備援或支援「嵌入式線路串接」。在新處理器上總共提供了16個MAC。這項特色所支援的使用案例包括:16個1G乙太網路,用來連線到單一系統中的各種裝置(處理器的硬體支援L2交換);或是最多6個25G乙太網路,適合經常部署25G乙太網路的資料中心等應用。

20180606TA01P2 圖2 最終的晶片設計

總結

深思熟慮的分析和評估客戶的需求,讓新一代處理器LX2160A得以誕生。相較於上一代,新處理器擁有雙倍的核心數量、8倍的平台快取記憶體、1.5倍的DRAM頻寬、3倍的PCIe頻寬,和10倍的乙太網路最高速度。這套綜合的功能並非只是採用「每一樣都變更多」的設計方式,其實是在針對目前和未來的使用案例,進行詳盡分析之後,才建置了SoC實現這些應用。