作者:張景濤
序言
近日我有幸閱讀了英特爾公司互聯系統領域的權威人物Debendra Das Sharma撰寫的一篇開創性文章——《Novel Composable and Scaleout Architectures Using Compute Express Link》(文末附鏈接)。在這篇文章中,Debendra Das Sharma詳盡地闡述了如何利用CXL(Compute Express Link)技術構建一個可橫向擴展的可組合分離架構。眾所周知,CXL協議涵蓋了type1、type2、type3三種設備類型,而目前學術界和工業界的研究主要集中在如何利用CXL技術擴展系統的內存容量。
然而至今尚未有文獻系統地探討如何直接通過CXL技術在機架級別構建一個支持異構計算、內存和存儲設備的池化系統。據我了解,現有的CXL協議在不進行任何修改和優化的情況下,似乎難以勝任這一重任。至少在性能和可擴展性方面,它與PCIe相比并沒有展現出顯著的優勢。(對于如何通過PCIe技術構建可組合基礎設施感興趣的讀者,可以參考《基于PCIE的可組合基礎設施的性能洞察》。)
Debendra Das Sharma憑借其卓越的技術洞察力和對CXL技術的深刻理解,提出了一系列在現有CXL協議基礎上的增強措施。這些建議旨在提升協議的性能和擴展性,部分提議已經在最新的CXL 3.1規范中得到了采納。這些改進不僅為CXL技術的發展提供了新的方向,也為構建下一代高性能計算系統提供了可能。
在接下來的內容中,我們將深入探討這些協議增強措施的具體細節,以及它們如何助力實現大規模、高效能的計算架構。這不僅涉及到硬件層面的創新,也包括軟件和系統設計的新思路。通過這些綜合措施,我們有望打破現有的技術瓶頸,推動計算技術邁向一個新的高度。
背景知識
CXL是一個開放的行業標準互連,它在PCI-Express之上提供了緩存和內存語義。除了在主機處理器和加速器、智能網絡接口卡以及內存擴展設備之間提供高帶寬和低延遲的連接外,它還支持跨多個系統的資源共享池,實現可擴展、節能和成本效益高的計算。接下來會探討使用CXL互連在機架級別及更高級別上搭建可組合和可擴展架構,以實現異構內存和異構計算資源的池化和共享。
PCIe是一個非一致性互連。PCIe設備一般使用DMA完成系統內存讀寫事務以非一致性方式訪問系統內存。附加到PCIe設備的任何內存都在系統中作為不可緩存的內存映射I/O(MMIO)區域進行映射。CXL 1.0/1.1在PCIe基礎設施之上增加了一致性和內存語義,以支持細粒度的協同異構處理以及滿足新興計算需求所需的內存帶寬和容量擴展。英特爾捐贈了最初的CXL 1.0規范,并在2019年領導了CXL聯盟的啟動。CXL 1.0/1.1支持I/O(CXL.io)、一致性(CXL.cache)和內存(CXL.memory)協議之間的動態多路復用,如圖1(b)所示。CXL基于內存加載-存儲語義。它在中央處理單元(CPU(s))(主機處理器)和跨異構內存的CXL設備之間維護統一的、一致的內存空間,如圖1(a)所示。
圖 1. CXL 1.0和CXL 2.0的使用模式和協議。(a) 綠色文本顯示了CXL 1.0啟用的新系統能力。三種類型的CXL 1.0設備。(b) CXL在PCIe PHV上的三種協議的動態多路復用。(c) CXL 2.0的資源池化。
CXL類型1設備是加速器,例如使用一致性語義以及PCIe的DMA傳輸的智能NIC。CXL類型2設備是加速器,例如通用圖形處理單元(GP-GPU)和現場可編程門陣列(FPGA),它們具有可以部分或全部映射到可緩存系統內存的本地內存。CXL類型3設備用于使用可能具有自己內存層次結構的異構內存進行內存帶寬和容量擴展。
后面文章會展示如何開發商業上可行的可組合系統,在POD級別具有加載-存儲語義,并繼續向后兼容CXL的演進。
CXL 2.0引入了通過允許多個域對一個或多個池化設備進行加載-存儲訪問的內存和加速器的池化概念。這種池化能力可以提供更高的能效同時降低總擁有成本,因為各個服務器不必過度配置內存,因為它們可以依賴內存池來應對需求的臨時激增。CXL 2.0支持扇出和池化、內存和加速器池化、熱插拔管理和資源管理器的切換,同時完全向后兼容CXL 1.0/1.1。因此,CXL 2.0為CXL提供了一種擴展到機架級別低延遲互連的機制,具有加載-存儲語義。
CXL協議概述
68字節的FLIT是CXL中傳輸的基本單位。CXL.io基于帶有非一致性加載-存儲和生產者-消費者排序語義的PCIe協議。CXL.cache 支持設備緩存數據,采用請求和響應協議。主機處理器管理修改、獨占、共享、無效(MESI)一致性協議,根據需要部署SNOOP消息。每個方向上都有三種消息類別:請求(Req)、響應(Rsp)和數據。在設備到主機(D2H,上行)方向上,Req 包括讀?。ɡ?,Rd_Shared,RdOwn)和寫入;相應的下行 H2D 響應是全局可觀察性(GO)。H2D-Req 是SNOOP,導致 D2H 響應SNOOP(例如,RspI,RspSHitSE)。
圖 2. CXL 實現和測量的延遲
CXL.memory 支持類型2/3設備將其內存映射到系統的一致性內存中,這將被稱為主機管理的設備內存(HDM)。它以緩存行粒度(64字節)在主機處理器(M)和類型2/3設備(S)之間傳輸內存加載和存儲事務。請求從主機發送到設備在一個下游通道上:M2SReq(例如,讀取請求),以及 M2S RwD(例如,寫入)。響應從設備發送到主機在兩個上行通道上:S2M NDR(無數據響應)和 S2M DRS(帶數據的響應)。
CXL 實現和結果
CXL 1.0/1.1 在英特爾的 Sapphire Rapids (SPR) CPU 中實現,支持所有三種協議,符合 CXL 規范的要求。它已經通過在 32.0 GT/s 下運行的 x16 寬度的英特爾 FPGA 實現 CXL 進行了廣泛測試。最后一級緩存(LLC)和窺探過濾器涵蓋了 CXL設備中的緩存。無論是本地連接到 CPU 的雙倍數據速率動態隨機存取存儲器(DDR)總線還是映射到系統地址空間的 CXL設備,內存都在 CPU 中的 Home Agent 的管轄范圍內。
圖 2 表示我們的 IP 級微架構塊圖。SERDES 引腳到應用層的總往返延遲目標是 21 或 25 納秒,這取決于公共時鐘模式是否開啟。這符合 CXL 規范目標,即內存訪問的引腳到引腳往返延遲為 80 納秒,SNOOP的響應為 50 納秒。因此,跨 CXL 鏈路的加載到使用延遲預計為 CXL.Mem 的大約 150-175 納秒。
圖3(a)和(b)展示了我們構建大型可組合服務器集群的架構愿景,這些服務器跨越一個或多個機架,使用CXL作為互連。每個機架抽屜可以是計算抽屜(抽屜可以理解為一個機架中有獨立外殼的托盤),連接多個節點(服務器)與池化內存(包括雙列內存模塊、雙列內存模塊(DIMM)和CXL內存驅動器),和池化加速器。每個節點可能有自己的專用內存、加速器和其他I/O資源。一個抽屜也可以只由內存或加速器組成,這些可以是跨機架資源池的一部分。共享內存控制器(SMC)芯片提供CXL連接。SMC也可以本地托管DDR內存,如圖3(c)所示。SMC之間的互連可以通過機架內的銅纜(1-2米)?;蛘呤褂霉饫w用于SMC之間的跨機架連接。
圖 4. 延遲優化的FLIT布局,提出的CXLFLIT打包和CXL事務增強。(a) 128字節優化的FLIT布局。(b) 使用我們提出的可擴展性機制,在SMC-SMC鏈路中使用128字節LO FLIT的例子。(c) 現有的CXL(1.0,2.0)流程;所有HDM訪問都通過主機處理器與HA進行。(d) 直接訪問HDM內存的提出流程;新流程以紅色文本顯示。
CXL協議和能力增強
文中提出了幾項CXL增強措施,以實現可組合和可擴展架構。這使得跨多個域共享和池化資源(例如,內存、加速器);每個域都是一個獨立的服務器??梢詷嫿鐧C架的可組合系統,每個域都可以根據需要動態地從資源池中添加/移除資源。新的架構還通過使用共享內存、跨域中斷、信號量和基于CXL的直接加載存儲內存訪問語義的消息傳遞,實現跨域的協同計算。
后面需要在不增加延遲懲罰的情況下將可擴展架構帶寬翻倍。CXL 3.0規范采用了64-GT/s PAM-4信號與我們的128字節sub-FLIT機制(與CXL 2.0相比沒有增加任何延遲)。圖4(a)顯示了不同slot的布局。通用(G)slot為16字節,可用于頭和數據,而H/HS slot(14/12字節)僅用于頭。
為了構建圖3所示的大規??蓴U展系統,即使存在多級SMC也需要有接近單節點性能的表現。文中方法適用于任何使用無死鎖路由機制的拓撲結構,沒有PCIe和CXL 1.0/2.0的樹形拓撲限制。SMC之間的CXL鏈路需要是CXL 3.0協議加上這里討論的增強功能,并支持每個CXL協議的上下游通道。
我們提議增強CXL 3.0的128字節延遲優化(LO)FLIT,使用12位端口ID號通過SMC路由。這比256字節的方法提供了更低的延遲和更高的帶寬效率。端口ID號只需要唯一標識連接到SMC的主機CPU或CXL設備,允許多達4,096個主機CPU或設備(可以是PCIe/CXL 1.0/CXL 2.0/CXL 3.0)連接到任何SMC端口。為此,我們需要在每個頭進入第一個SMC時添加12位目標端口ID(也稱為Dest-ID)。對于請求,我們需要添加12位源端口ID(Src-ID),以便響應可以路由回源節點。當事務傳遞到CPU或設備并在出口SMC端口交付時,這些Dest-ID / Src-ID將被移除,并轉換為標準PCIe/CXL 1.0/1.1/2.0/3.0格式,以便現有的CPU/設備可以與我們提出的架構一起工作,該架構僅將可組合性和可擴展性負擔放在SMC上。CXL.Cache/Mem頭有足夠的備用位來適應這種擴展,并且仍然適合CXL3流量的任何slot。
我們已經確定了CXL 3.0規范中所有性能關鍵的頭編碼,如圖4(b)所示(例如,一個G slot中的3個S2M NDR)。即使在每個事務中添加了額外的端口ID位,我們也可以容納它們,包括每個slot有多個頭的那些。有兩個例外:1)有兩個頭(M2SReq,M2SRwD),由于沒有足夠的備用位,Dest-ID沒有發送。因此,這兩個需要在每個SMC進行目的ID查找(而不是在進入SMC復合體時一次)。我們認為,為了保留外部鏈路帶寬而增加的查找邏輯帶寬是一個合理的權衡。2)有一個實例,其中插槽中的第三個數據返回頭(DRS)需要與第二個DRS具有相同的目標ID位。這也是一個合理的權衡,因為我們無法發送3個DRS(而是發送2個DRS)的唯一時間是如果有超過2,048個CPU/CXL設備,并且在一個重負載系統中我們無法調度兩個具有相同Dest-ID的DRS。
通過這些提議的優化,對于CXL.Cache/CXL.Mem,現有的單一域與我們為大型可組合系統提出的多域支持之間沒有效率損失。對于跨SMC鏈路的CXL.io訪問,在SMC的初始入口點,目標端口ID生成并添加為事務層數據包(TLP)前綴,并適當轉換為目標域的總線、設備和功能。TLP前綴的額外4個字節將對CXL.io帶寬產生很小的影響。
為了在大型系統中擴展性能,我們還提出了新的CXL流程,其中一些已經被采用在CXL 3.0規范中。在CXL 1.0/CXL 2.0中,所有HDM訪問都通過主機處理器進行,以解決緩存一致性,即使類型2/3設備可以通過SMC直接訪問,如圖4(a)所示。這導致鏈路帶寬浪費和額外的延遲。我們提出直接點對點(p2p)訪問HDM內存,我們在CXL.io中稱之為“無序I/O”(UIO),類似于MMIO訪問的點對點。我們在S2M中添加了一個新的回退使能窺探(“BI-Snp”)和相應的回退使能響應(“BI-Rsp”),以支持這種直接p2p HDM訪問。這種方法保留了CXL的不對稱性,因為主機處理器仍然協調一致性并解決可緩存訪問的沖突。BI-Snp只啟用設備端內存控制器支持直接點對點訪問,類似于自CXL 1.0時代以來類型2設備已經具備的能力,而不會引入實現類型2設備的緩存語義和偏置翻轉流程的復雜性。
類型2/3設備已經有一個目錄,由兩位存儲元數據(MESI狀態:I、S、E/A,其中A代表任何MESI狀態)。接收到其HDM內存的直接UIO請求的類型2/3設備,如果可以在保持MESI一致性機制的同時本地服務事務[例如,如果狀態是I/S,則為讀?。▽懭耄┱埱骫;否則,它將觸發BI-Snp流程,如圖4(b)所示,以通過主機CPU強制執行MESI一致性機制,然后完成請求。這些回退使能流程還使類型2設備能夠部署一個窺探過濾器。BI流程是CXL.Mem中的一個單獨消息類別,因為CXL.Mem不依賴于其他消息類別,并且CXL.Mem存在于類型3(和類型2)設備中。我們還提議為CXL.io UIO寫事務添加一個可選的完成流程,如圖4(b)所示,從而將生產者-消費者排序點移動到源,以實現CXL.io的多路徑。
我們提議使用增強類型2/3設備在CPU和設備之間使用硬件強制緩存一致性共享內存。內存控制器可以在芯片上實現一個窺探過濾器,可選地由內存中的目錄支持,或者僅僅是內存中的目錄,其中它跟蹤可能擁有緩存行的主機處理器(s)的端口ID,并根據需要向主機處理器(s)發送BI-Snp。這使得SMC能夠在跨域的共享內存上強制執行緩存一致性。這種共享內存也可以用來跨域實現信號量。我們基于CXL.io(UIO)和非一致性CXL.Mem的節點間消息傳遞機制。
我們提議使用單根I/O虛擬化,為多個域中的CXL類型1/2和PCIe設備添加池化能力。在這種情況下,fabric管理器將負責設備。SMC將把所有配置請求轉發給fabric管理器,該管理器將模擬配置訪問并確保跨域的隔離。一個域只對其分配的設備功能(s)的內存空間有直接訪問權,這是為了提供最佳性能所必需的。
SMC微架構
圖3(c)顯示了SMC芯片的塊圖,它支持連接到CXL節點(主機處理器或CXL設備)或其他SMC的CXL鏈路,以及連接到DRAM內存的DDR總線。CXL管理接口提供了分布式fabric管理功能,這些功能對于協調資源分配、控制池化、共享CXL設備的配置寄存器空間以及在SMC內部跨域設置公共數據結構是必需的。每個主機都有獨立的系統地址空間視圖。帶有分布式fabric管理軟件棧的SMC協調全局地址映射,如圖5所示。因此,對從CXL節點的訪問通過SMC內部的地址映射和路由邏輯進行適當的重映射。SMC內部數據路徑和SMC鏈路中的事務頭攜帶源和/或目標的12位端口ID進行路由。SMC需要在交付給CPU或設備時取下這些前綴、源/目標端口ID,并在完成時重新分配它。除了跨域的地址轉換外,SMC在我們的提議架構中還提供對復制、郵箱、信號量和中斷服務的支持。
性能指標
SMC之間的連通性 一個抽屜可以有一個或多個SMC。對于大規模擴展配置,我們期望每個獨立鏈接是x4@64.0GT/s,每個方向32 GB/s。擁有192個通道或48個鏈接,每個SMC可以連接到機架中所有16個獨立服務器和16個池化設備,另外16個可以用于連接機架內/跨機架的其他SMC。因此,使用兩個級別的SMC可以在16個機架之間實現連通性。
用于I/O一致性訪問和圖5中描述的跨域消息傳遞,可以部署CXL.io或CXL.Mem機制。由于帶寬效率CXL.io更高,并且它不會消耗連接到SMC(s)的系統內存來備份消息傳遞空間,我們建議僅使用CXL.io進行跨域消息傳遞,以獲得性能、實現簡單性和成本效益。表1(a)和(b)總結了我們使用CXL.io的帶寬結果。
表1 架構的鏈路效率
如上所述,我們提議通過直接點對點(包括不涉及緩存的DMA和跨域消息)繞過主機處理器進行CXL.io訪問。預期絕大多數這些訪問不會引發BI-Snp機制來強制一致性。這有助于提高鏈路效率以及減輕主機處理器鏈路的擁塞。如表1(b)所示,即使在所有訪問都引發BI-Snp的極端情況下,這種機制的效率增益也是顯著的,因為這比跨鏈路的多緩存行傳輸更好。
根據我們在“帶有CXL的可組合、可擴展機架級架構”部分中介紹的結果,CXL堆棧的Tx+Rx路徑為25納秒。即使增加額外的15納秒用于內部延遲,如排隊/地址查找/仲裁/傳播延遲等,每次通過SMC的跳轉少于40納秒。這使得兩次SMC跳轉對于內存訪問非常可行。表2總結了我們基于在實現CXL和詳細微架構SMC方面的工作經驗對各種訪問的估計。
表2 架構的延遲估計
結論
CXL技術由于在成熟穩定的PCIe基礎設施上實現低延遲緩存和內存語義的簡便性而在行業中獲得了廣泛的關注。CXL可以進一步增強和部署,以跨越多個機架,為多種應用提供高可靠性和低延遲的加載-存儲訪問。通過我們提出的方法,我們期望實現構建跨越機架和數據中心的可組合和可擴展系統的愿景,從而實現能效性能,并帶來顯著的總擁有成本優勢。
-
內存
+關注
關注
8文章
2904瀏覽量
73551 -
PCIe
+關注
關注
15文章
1165瀏覽量
81998 -
存儲設備
+關注
關注
0文章
148瀏覽量
18525
原文標題:CXL協議演進,如何構建未來可組合基礎設施?
文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論