摘要
現(xiàn)代數(shù)據(jù)中心對(duì)內(nèi)存容量的高需求促進(jìn)了內(nèi)存擴(kuò)展和分解方面的多條創(chuàng)新線,其中一項(xiàng)獲得極大關(guān)注的工作是基于Compute eXpress Link(CXL)的內(nèi)存擴(kuò)展。為了更好地利用CXL,研究人員建立了幾個(gè)仿真和實(shí)驗(yàn)平臺(tái)來(lái)研究其行為和特性。然而,由于缺乏支持CXL的商業(yè)硬件,大家可能仍不清楚其功能的全貌。在這項(xiàng)工作中,我們?cè)谧钕冗M(jìn)的實(shí)驗(yàn)平臺(tái)上探索了CXL存儲(chǔ)器的性能表征。首先,我們使用我們提出的微基準(zhǔn)來(lái)研究CXL存儲(chǔ)器的基本性能特征?;谖覀兊挠^察結(jié)果和與連接到本地和遠(yuǎn)程N(yùn)UMA節(jié)點(diǎn)的標(biāo)準(zhǔn)DRAM的比較,我們還研究了CXL內(nèi)存對(duì)具有不同卸載和交織策略的端到端應(yīng)用程序的影響。最后,我們?yōu)槲磥?lái)的程序員提供了一些指南,以充分發(fā)揮CXL內(nèi)存的潛力。
?1.簡(jiǎn)介?
在數(shù)據(jù)中心存儲(chǔ)和處理數(shù)據(jù)的爆炸性需求、以及傳統(tǒng)DDR內(nèi)存接口的有限帶寬和容量可擴(kuò)展性,要求采用新的內(nèi)存接口技術(shù)和系統(tǒng)架構(gòu)。其中,Compute eXpress Link(CXL)已成為業(yè)界和學(xué)術(shù)界最有前途的技術(shù)之一,不僅用于內(nèi)存容量/帶寬擴(kuò)展,還用于內(nèi)存分解。
CXL是由主要硬件供應(yīng)商和云提供商于2019年共同制定的開(kāi)放標(biāo)準(zhǔn),目前仍在快速發(fā)展。具體來(lái)說(shuō),與傳統(tǒng)的PCIe互連相比,它提供了一組新功能,使CPU能夠以具有加載/存儲(chǔ)語(yǔ)義的高速緩存一致方式與外圍設(shè)備(及其連接的存儲(chǔ)器)通信。因此,與內(nèi)存相關(guān)的設(shè)備擴(kuò)展是CXL的主要目標(biāo)場(chǎng)景之一。
作為未來(lái)數(shù)據(jù)中心的事實(shí)標(biāo)準(zhǔn),主要硬件供應(yīng)商已在其產(chǎn)品路線圖中宣布支持CXL。鑒于CXL存儲(chǔ)器的受歡迎程度和前景,它備受關(guān)注。然而,由于缺乏支持CXL的商用硬件(尤其是CPU),最近對(duì)CXL內(nèi)存的研究都是基于使用多插槽NUMA系統(tǒng)的仿真,因?yàn)镃XL內(nèi)存被公開(kāi)為NUMA節(jié)點(diǎn)。因此,這些研究可能無(wú)法準(zhǔn)確地對(duì)現(xiàn)實(shí)世界中的CXL內(nèi)存進(jìn)行建模和表征。
隨著Intel第4代Xeon可擴(kuò)展CPU(Sapphire Rapids或SPR)和商用CXL設(shè)備的出現(xiàn),我們能夠開(kāi)始了解CXL存儲(chǔ)器的實(shí)際特性,并定制能夠充分利用這些特性的軟件系統(tǒng)。在這項(xiàng)工作中,我們?cè)谟蒊ntel SPR CPU和基于Intel Agilex-I FPGA的CXL存儲(chǔ)器(R-Tile中加固的CXL控制器)組成的測(cè)試臺(tái)上,對(duì)具有多個(gè)微基準(zhǔn)和端到端應(yīng)用程序的CXL內(nèi)存進(jìn)行了全面分析。從我們的微基準(zhǔn)標(biāo)記中,我們發(fā)現(xiàn)CXL內(nèi)存的行為與遠(yuǎn)程N(yùn)UMA節(jié)點(diǎn)中的內(nèi)存不同,后者通常用于仿真。與基于NUMA的內(nèi)存相比,真正的CXL內(nèi)存具有:(1)更高的延遲,(2)更少的內(nèi)存通道(導(dǎo)致更低的吞吐量),以及(3)在各種操作下不同的傳輸效率。
基于上述觀察,我們還將CXL內(nèi)存應(yīng)用于表現(xiàn)出不同內(nèi)存訪問(wèn)行為的三個(gè)實(shí)際應(yīng)用程序。我們發(fā)現(xiàn)它們對(duì)CXL內(nèi)存卸載有不同的敏感性。具體而言,我們發(fā)現(xiàn)(1)μs延遲數(shù)據(jù)庫(kù)對(duì)內(nèi)存延遲的增加高度敏感,(2)當(dāng)數(shù)據(jù)庫(kù)在CXL內(nèi)存上運(yùn)行時(shí),具有中間計(jì)算層的ms延遲微服務(wù)受到的影響較小,(3)內(nèi)存密集型ML推理對(duì)CXL內(nèi)存提供的隨機(jī)訪問(wèn)吞吐量敏感。在所有情況下,在連接CPU的DRAM和CXL內(nèi)存之間交錯(cuò)內(nèi)存可以減少CXL內(nèi)存帶來(lái)的性能損失。
接下來(lái),在分析了在使用CXL內(nèi)存的系統(tǒng)上運(yùn)行的微基準(zhǔn)和應(yīng)用程序的性能特征后,我們?yōu)橛脩籼峁┝艘恍?shí)用的指導(dǎo)方針,以優(yōu)化他們的軟件堆棧/庫(kù)以獲得最高性能。例如,應(yīng)該使用在CXL內(nèi)存和DRAM之間均勻分布的帶寬來(lái)最大限度地提高性能;應(yīng)當(dāng)使用高速緩存旁路指令來(lái)進(jìn)行從CXL存儲(chǔ)器到CXL存儲(chǔ)器的數(shù)據(jù)移動(dòng);對(duì)于單個(gè)CXL內(nèi)存通道,由于幾個(gè)線程很容易使負(fù)載或存儲(chǔ)帶寬飽和,因此應(yīng)該限制對(duì)CXL內(nèi)存的寫(xiě)線程數(shù)量,以減少寫(xiě)干擾;并且應(yīng)該針對(duì)以毫秒級(jí)延遲運(yùn)行的讀取量大的應(yīng)用程序,其中較高的CXL內(nèi)存延遲可以通過(guò)中間計(jì)算來(lái)分?jǐn)偂?/p>
本文的其余部分組織如下。我們?cè)诘?章中簡(jiǎn)要介紹了CXL,并在第3章中描述了我們的實(shí)驗(yàn)設(shè)置。然后,我們?cè)诘?章中用我們的微基準(zhǔn)來(lái)分析CXL記憶,在第5章中用三個(gè)有代表性的應(yīng)用來(lái)介紹我們的發(fā)現(xiàn)。最后,我們?cè)诘?章中提供了一些有效利用CXL內(nèi)存的指南。
2.背景
2.1
Compute eXpress Link (CXL)
PCI Express(PCIe)是高速串行計(jì)算機(jī)擴(kuò)展總線的標(biāo)準(zhǔn),它取代了舊的PCI總線。自2003年以來(lái),每一代的帶寬都翻了一番,截至PCIe Gen 5,帶寬已達(dá)到32 GT/s(即64 GB/s,帶16個(gè)通道)。其點(diǎn)對(duì)點(diǎn)拓?fù)浣Y(jié)構(gòu)借助帶寬的增長(zhǎng),實(shí)現(xiàn)了與PCIe連接設(shè)備(如圖形處理單元(GPU)、網(wǎng)絡(luò)接口卡(NIC)和NVMe固態(tài)硬盤(pán)(SSD))的低延遲、高帶寬通信。
CXL在PCIe物理層上構(gòu)建緩存一致性系統(tǒng)。與標(biāo)準(zhǔn)PCIe通信類似,在標(biāo)準(zhǔn)PCIe通信中,數(shù)據(jù)傳輸使用事務(wù)層數(shù)據(jù)包(TLP)報(bào)頭和數(shù)據(jù)鏈路層數(shù)據(jù)包,CXL協(xié)議的子集使用預(yù)定義的報(bào)頭和16B塊來(lái)傳輸數(shù)據(jù)。在CXL 1.1中,根據(jù)協(xié)議和傳輸?shù)臄?shù)據(jù),CXL硬件將根據(jù)CXL規(guī)范中描述的一組規(guī)則,將標(biāo)頭和數(shù)據(jù)打包到68 B flit(64 B CXL數(shù)據(jù)+2 B CRC+2 B協(xié)議ID)中。除非另有說(shuō)明,否則在本文的剩余部分中,CXL指的是CXL 1.1。
CXL標(biāo)準(zhǔn)定義了三個(gè)獨(dú)立的協(xié)議:CXL.io、CXL.cache和CXL.mem。CXL.io使用標(biāo)準(zhǔn)PCIe中的TLP和DLLP等功能,主要用于協(xié)議協(xié)商和主機(jī)設(shè)備初始化。CXL.cache和CXL.mem分別為設(shè)備訪問(wèn)主機(jī)的內(nèi)存和主機(jī)訪問(wèn)設(shè)備的內(nèi)存使用上述協(xié)議頭。
通過(guò)將這三種協(xié)議相結(jié)合,CXL為不同的用例確定了三種類型的設(shè)備。Type-1設(shè)備使用CXL.io和CXL.cache,它們通常指的是不應(yīng)用主機(jī)管理內(nèi)存的SmartNIC和加速器。Type-2設(shè)備支持所有三種協(xié)議。這些設(shè)備,如GP GPU和FPGA,具有主機(jī)CPU可以訪問(wèn)和緩存的附加內(nèi)存(DRAM、HBM),并且它們還使用CXL.cache進(jìn)行設(shè)備到主機(jī)的內(nèi)存訪問(wèn)。Type-3設(shè)備支持CXL.io和CXL.mem,并且這些設(shè)備通常被視為對(duì)現(xiàn)有系統(tǒng)的內(nèi)存擴(kuò)展。在本文中,我們將重點(diǎn)介紹Type-3設(shè)備,并介紹CXL.mem的較低級(jí)別細(xì)節(jié)。
由于CXL.mem協(xié)議只考慮主機(jī)到設(shè)備的內(nèi)存訪問(wèn),因此該協(xié)議由兩個(gè)簡(jiǎn)單的內(nèi)存訪問(wèn)組成:從主機(jī)到設(shè)備內(nèi)存的讀取和寫(xiě)入。每次訪問(wèn)都伴隨著來(lái)自設(shè)備的完成回復(fù)。從設(shè)備內(nèi)存讀取時(shí),應(yīng)答包含數(shù)據(jù),在寫(xiě)入時(shí)僅包含完成標(biāo)頭。圖1顯示了這些訪問(wèn)路線。
圖1:支持CXL的典型系統(tǒng)體系結(jié)構(gòu)(左)和內(nèi)存事務(wù)流
CXL.mem協(xié)議在CPU歸屬代理和設(shè)備上的CXL控制器之間進(jìn)行通信。當(dāng)歸屬代理處理協(xié)議時(shí),CPU以與訪問(wèn)DRAM相同的方式發(fā)出加載和存儲(chǔ)指令來(lái)訪問(wèn)存儲(chǔ)器。這比其他內(nèi)存擴(kuò)展解決方案(如遠(yuǎn)程直接內(nèi)存訪問(wèn)(RDMA))具有優(yōu)勢(shì),后者涉及設(shè)備上的DMA引擎,因此具有不同的語(yǔ)義。將加載/存儲(chǔ)指令與CXL.mem集成還意味著CPU將在其所有級(jí)別的緩存中緩存PCIe連接的內(nèi)存,這對(duì)于除持久內(nèi)存之外的任何其他內(nèi)存擴(kuò)展解決方案來(lái)說(shuō)都是不可能的。
2.2
支持CXL的商品硬件
CXL需要主機(jī)CPU端和設(shè)備端的支持。截至目前,除了一些研究原型外,三星、SK海力士、美光和瀾起等主要硬件供應(yīng)商還設(shè)計(jì)了多個(gè)支持CXL的存儲(chǔ)設(shè)備。為了促進(jìn)更靈活的內(nèi)存功能和近內(nèi)存計(jì)算研究,英特爾還在其最新的Agilex-I系列FPGA上啟用CXL.mem,其中CXL和內(nèi)存相關(guān)的IP核在小芯片上進(jìn)行硬編碼,以實(shí)現(xiàn)高性能。在主機(jī)CPU方面,Intel最新的第4代Xeon可擴(kuò)展處理器(代號(hào)Sapphire Rapids,SPR)是第一款支持CXL1.1標(biāo)準(zhǔn)的高性能商用CPU。我們預(yù)計(jì),在不久的將來(lái),越來(lái)越多的硬件供應(yīng)商的產(chǎn)品將支持更豐富的CXL。
3.實(shí)驗(yàn)裝置
在這項(xiàng)工作中,我們使用兩個(gè)測(cè)試臺(tái)來(lái)評(píng)估最新的商品CXL硬件,如表1所示。該服務(wù)器配備Intel Gold 6414U CPU和128 GB CXL.mem協(xié)議以及4800MT/s DDR5 DRAM(分布在8個(gè)內(nèi)存通道中)。在第4代中,Intel Xeon CPU被實(shí)現(xiàn)為四個(gè)單獨(dú)的小芯片。用戶可以決定使用這4個(gè)小芯片作為統(tǒng)一處理器(即共享的末級(jí)緩存(LLC)、集成內(nèi)存控制器(iMC)和根復(fù)合體),或者在子NUMA集群(SNC)模式下,每個(gè)小芯片作為一個(gè)小NUMA節(jié)點(diǎn)運(yùn)行。這種靈活性允許用戶微調(diào)系統(tǒng)以適應(yīng)其工作負(fù)載特性,并對(duì)資源共享和隔離進(jìn)行細(xì)粒度控制。在我們的實(shí)驗(yàn)中,我們將探索SNC和CXL.mem之間的內(nèi)存交錯(cuò)將如何影響應(yīng)用程序的性能。我們還在雙插槽系統(tǒng)上進(jìn)行了一些實(shí)驗(yàn),該系統(tǒng)具有兩個(gè)Intel Platinum 8460H和相同的DDR5 DRAM,以在基于NUMA的常規(guī)內(nèi)存和CXL.mem之間進(jìn)行一些比較。
表1:試驗(yàn)臺(tái)配置
對(duì)于CXL內(nèi)存設(shè)備,系統(tǒng)有一個(gè)Intel Agilex-I開(kāi)發(fā)套件。它有16 GB 2666MT/s DDR4 DRAM作為CXL內(nèi)存,并通過(guò)x16 PCIe Gen 5接口連接到CPU。它作為一個(gè)具有16GB內(nèi)存而沒(méi)有CPU內(nèi)核的NUMA節(jié)點(diǎn)透明地暴露給CPU和OS,并且CXL內(nèi)存的使用與常規(guī)的基于NUMA的內(nèi)存管理相同。
請(qǐng)注意,CXL協(xié)議本身并沒(méi)有定義底層內(nèi)存的配置。這樣的配置包括但不限于容量、介質(zhì)(DRAM、持久存儲(chǔ)器、閃存芯片等)和存儲(chǔ)器通道的數(shù)量。因此,不同的器件可能表現(xiàn)出不同的性能特征。
4.基于微基準(zhǔn)的特性研究
在本節(jié)中,我們介紹了使用我們的微基準(zhǔn)來(lái)評(píng)估CXL內(nèi)存的發(fā)現(xiàn)。我們相信,這一分析深入解讀了CXL內(nèi)存用戶如何根據(jù)他們的用例更有效地利用CXL內(nèi)存。我們還將這些結(jié)果與最近關(guān)于CXL內(nèi)存的一些工作中的假設(shè)和模擬進(jìn)行比較,在這些工作中,CXL內(nèi)存是使用具有一些額外延遲的跨NUMA數(shù)據(jù)訪問(wèn)來(lái)模擬的。
4.1
微基準(zhǔn)描述
為了徹底檢查CXL內(nèi)存的能力,我們開(kāi)發(fā)了一個(gè)稱為MEMO的微基準(zhǔn)測(cè)試。此基準(zhǔn)測(cè)試旨在針對(duì)CXL內(nèi)存的各種用例,并在Linux用戶空間上運(yùn)行。用戶可以提供命令行參數(shù)來(lái)指定MEMO要執(zhí)行的工作負(fù)載。之后我們計(jì)劃開(kāi)源MEMO。
特別地,MEMO具有以下能力:(1)通過(guò)使用NUMA_lalloc_node函數(shù)從不同的源分配內(nèi)存,包括本地DDR5內(nèi)存、CXL內(nèi)存無(wú)CPU NUMA節(jié)點(diǎn)或遠(yuǎn)程DDR5,(2)啟動(dòng)指定數(shù)量的測(cè)試線程,將每個(gè)線程固定到一個(gè)內(nèi)核,并可選地啟用或禁用內(nèi)核,以及(3)使用內(nèi)聯(lián)匯編語(yǔ)言執(zhí)行存儲(chǔ)器訪問(wèn)。基準(zhǔn)測(cè)試報(bào)告不同指令(如加載、存儲(chǔ)和非臨時(shí)存儲(chǔ))的內(nèi)存訪問(wèn)延遲或聚合帶寬,所有內(nèi)存訪問(wèn)都使用AVX-512指令完成。此外,MEMO可以在內(nèi)存區(qū)域上執(zhí)行指針跟蹤,并且通過(guò)改變工作集大?。╓SS),基準(zhǔn)可以顯示平均訪問(wèn)延遲如何隨著WSS跨越緩存層次結(jié)構(gòu)的不同大小而變化。
4.2
延遲分析
在延遲測(cè)試中,MEMO從刷新測(cè)試地址的緩存線開(kāi)始,并立即發(fā)出mfence指令。然后,MEMO發(fā)出一組nop指令來(lái)刷新CPU管道。當(dāng)使用加載指令進(jìn)行測(cè)試時(shí),我們記錄訪問(wèn)清空的緩存行所花費(fèi)的時(shí)間;當(dāng)使用存儲(chǔ)指令進(jìn)行測(cè)試時(shí),我們記錄執(zhí)行臨時(shí)存儲(chǔ)所需的時(shí)間,然后記錄緩存線寫(xiě)回(clwb),或者記錄非臨時(shí)存儲(chǔ)的執(zhí)行時(shí)間,然后再記錄sfence。此外,我們測(cè)試了在禁用所有預(yù)取的情況下,在大內(nèi)存空間中通過(guò)指針追逐的平均訪問(wèn)延遲。圖2顯示了四條測(cè)試指令的延遲,1GB內(nèi)存空間下的平均指針追逐延遲,以及不同工作集大小下的指針追逐延遲。
圖2:訪問(wèn)延遲。1GB空間中單AVX512加載(ld)、存儲(chǔ)和回寫(xiě)(st+wb)、非臨時(shí)存儲(chǔ)(nt-st)和順序指針追逐(ptr-chase)的平均延遲;連續(xù)指針追蹤延遲與工作集大小(右)。在這兩種情況下,都會(huì)禁用所有級(jí)別的預(yù)取
我們的結(jié)果(圖2)顯示,CXL內(nèi)存訪問(wèn)延遲比8通道本地DDR5(DDR5-L8)訪問(wèn)高約2.2倍,而單通道遠(yuǎn)程DDR5比DDR5-L8高約1.27倍。根據(jù)先前對(duì)持久存儲(chǔ)器的研究,訪問(wèn)最近刷新的高速緩存線可能會(huì)比正常的高速緩存未命中訪問(wèn)產(chǎn)生更高的延遲,這是由于此類刷新高速緩存線的額外高速緩存一致性握手導(dǎo)致的。指針追逐反映了應(yīng)用程序所經(jīng)歷的更現(xiàn)實(shí)的訪問(wèn)延遲。在MEMO中,工作集首先在預(yù)熱運(yùn)行中被引入緩存層次結(jié)構(gòu)。圖2中的右圖顯示了不同工作集大小下的平均內(nèi)存訪問(wèn)時(shí)間。指針追逐延遲的每次跳躍對(duì)應(yīng)于跨越L1、L2和LLC大小的邊界。圖2中的結(jié)果顯示,CXL內(nèi)存中的指針追逐延遲比DDR5-L8訪問(wèn)高4倍。CXL內(nèi)存上的指針追逐延遲比DDR5-R1訪問(wèn)高2.2。有趣的是,當(dāng)工作集大小在4MB到32MB之間時(shí),與CXL內(nèi)存相比,DDR5-R1表現(xiàn)出更高的延遲。我們認(rèn)為這種差異可歸因于LLC大小的差異,Xeon 8460H的LLC大小幾乎是Xeon 6414U的兩倍。
值得注意的是,盡管CXL控制器和DDR4存儲(chǔ)器控制器在FPGA芯片上得到了加固,但CXL存儲(chǔ)器較長(zhǎng)的訪問(wèn)延遲可部分歸因于其FPGA實(shí)現(xiàn)。盡管我們預(yù)計(jì)CXL存儲(chǔ)器設(shè)備的ASIC實(shí)現(xiàn)將導(dǎo)致延遲的改善,但我們認(rèn)為它仍將高于常規(guī)的跨NUMA訪問(wèn),這主要是由于與CXL協(xié)議相關(guān)的開(kāi)銷。此外,我們?cè)诘?節(jié)中的實(shí)際應(yīng)用程序評(píng)測(cè)顯示,根據(jù)應(yīng)用程序的特定特性,延遲懲罰有所減少。還應(yīng)該注意的是,基于FPGA的CXL設(shè)備的好處在于它們能夠在CXL存儲(chǔ)器數(shù)據(jù)路徑上添加(內(nèi)聯(lián))加速邏輯,以及以接近存儲(chǔ)器的方式卸載存儲(chǔ)器密集型任務(wù)。
另一方面,CXL內(nèi)存上具有sfence的非臨時(shí)存儲(chǔ)指令的延遲明顯低于臨時(shí)存儲(chǔ)后的緩存線寫(xiě)回。這兩種操作都將數(shù)據(jù)從CPU核心傳輸?shù)紺XL內(nèi)存,而延遲差異約為2.6倍。這種延遲差異是由于CXL的MESI緩存一致性協(xié)議中的所有權(quán)讀?。?a target="_blank">RFO)行為造成的,在該協(xié)議中,每次存儲(chǔ)未命中都會(huì)將緩存線加載到緩存中。這種訪問(wèn)延遲的差異稍后會(huì)轉(zhuǎn)化為帶寬差異,這將在第4.3節(jié)中討論。
4.3
帶寬分析
在我們的帶寬測(cè)試中,MEMO在每個(gè)測(cè)試線程中執(zhí)行順序或隨機(jī)訪問(wèn)塊。主程序通過(guò)對(duì)訪問(wèn)的字節(jié)數(shù)求和來(lái)計(jì)算固定間隔的平均帶寬。為了便于公平比較內(nèi)存通道數(shù),我們測(cè)試了遠(yuǎn)程DDR5,在CXL內(nèi)存旁邊只有一個(gè)內(nèi)存通道(DDR5-R1)。
4.3.1 順序訪問(wèn)模式
順序訪問(wèn)反映了內(nèi)存方案在特定操作下的最大可能吞吐量,結(jié)果如圖3所示。在使用DDR5-L8進(jìn)行測(cè)試期間,我們觀察到負(fù)載帶寬線性縮放,直到其峰值達(dá)到221 GB/s的最大帶寬,大約有26個(gè)線程。相比之下,非臨時(shí)存儲(chǔ)指令達(dá)到了170GB/s的最大帶寬,這低于加載指令的帶寬,但線程數(shù)較低,約為16。
圖3:順序訪問(wèn)帶寬。實(shí)驗(yàn)顯示了8通道(a)的本地DDR5、CXL內(nèi)存(b)和1通道(c)的遠(yuǎn)程DDR5的最大可能帶寬。(b)中的灰色虛線顯示DDR4-2666MT/s的理論最大速度
相比之下,與DDR5-L8相比,CXL存儲(chǔ)器表現(xiàn)出明顯的帶寬趨勢(shì)。具體來(lái)說(shuō),通過(guò)加載指令,CXL內(nèi)存可以在大約8個(gè)線程的情況下達(dá)到其最大帶寬,但當(dāng)線程數(shù)增加到12個(gè)線程以上時(shí),這個(gè)值會(huì)降至16.8 GB/s。另一方面,非臨時(shí)存儲(chǔ)僅用2個(gè)線程就展示了令人印象深刻的22GB/s的最大帶寬,這接近于測(cè)試DRAM的最大理論帶寬。然而,當(dāng)我們?cè)黾泳€程數(shù)時(shí),這個(gè)帶寬會(huì)立即下降,這表明FPGA內(nèi)存控制器受到了一些干擾。
CXL內(nèi)存的時(shí)間存儲(chǔ)帶寬顯著低于非時(shí)間存儲(chǔ),這與圖4.2中報(bào)告的時(shí)間存儲(chǔ)的高延遲一致。這種差異是由于第4.2節(jié)中描述的時(shí)間存儲(chǔ)中的RFO行為造成的,這顯著降低了CXL存儲(chǔ)器的傳輸效率。這種減少是因?yàn)榕c非臨時(shí)存儲(chǔ)相比,RFO需要額外的核心資源和額外的微片往返來(lái)加載和驅(qū)逐高速緩存行。
圖4:數(shù)據(jù)傳輸帶寬。顯示不同工作負(fù)載下數(shù)據(jù)傳輸效率的實(shí)驗(yàn)。D2C是local-DDR5到CXL內(nèi)存的縮寫(xiě)。(b)中的所有實(shí)驗(yàn)都是用單個(gè)線程完成的。
此外,圖3c顯示DDR5-R1的順序訪問(wèn)性能與CXL內(nèi)存類似。由于DDR5和UPI互連具有更高的傳輸速率和更低的延遲,DDR5-R1在負(fù)載和非臨時(shí)存儲(chǔ)中顯示出更高的吞吐量,但在臨時(shí)存儲(chǔ)中表現(xiàn)出類似的吞吐量。
除了上述指令外,我們還測(cè)試了一條新的x86指令movdir64B,它是SPR上新提供的指令。該指令將64B數(shù)據(jù)從源內(nèi)存地址移動(dòng)到目標(biāo)內(nèi)存地址,并明確繞過(guò)緩存加載源并將其存儲(chǔ)到目標(biāo)位置。如圖4a所示,我們的結(jié)果表明,D2*操作表現(xiàn)出類似的行為,而C2*操作通常表現(xiàn)出較低的吞吐量。從這些結(jié)果中,我們可以得出結(jié)論,來(lái)自CXL內(nèi)存的較慢負(fù)載會(huì)導(dǎo)致movdir64B的吞吐量較低,在C2C的情況下更是如此。
作為SPR的新產(chǎn)品,Intel Data Streaming Accelerator(Intel DSA)使內(nèi)存移動(dòng)操作能夠從主機(jī)處理器上卸載。Intel DSA由工作隊(duì)列(WQ)和處理引擎(PE)組成,前者用于保存已卸載的工作描述符,后者用于從WQ中提取描述符以進(jìn)行操作。描述符可以通過(guò)等待每個(gè)已卸載的描述符完成后再卸載另一個(gè)描述符來(lái)同步發(fā)送,也可以通過(guò)連續(xù)發(fā)送描述符來(lái)異步發(fā)送,從而使WQ有許多正在運(yùn)行的描述符。通過(guò)設(shè)計(jì)程序以最佳方式異步使用Intel DSA,可以實(shí)現(xiàn)更高的吞吐量。為了進(jìn)一步提高吞吐量,可以對(duì)操作進(jìn)行批處理以攤銷卸載延遲。圖4b顯示了通過(guò)memcpy()或movdir64B在主機(jī)處理器上執(zhí)行內(nèi)存復(fù)制操作,并使用不同批處理大?。ㄈ?、16和128)的Intel DSA同步/異步執(zhí)行內(nèi)存復(fù)制時(shí)觀察到的最大吞吐量。雖然到Intel DSA的非批處理同步卸載與非批處理內(nèi)存復(fù)制的吞吐量相匹配,但任何級(jí)別的異步或批處理都會(huì)帶來(lái)改進(jìn)。此外,與僅使用CXL連接的內(nèi)存相比,拆分源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置可產(chǎn)生更高的吞吐量,C2D案例報(bào)告稱,由于DRAM上的寫(xiě)入延遲較低,因此吞吐量更高。
在我們的帶寬分析過(guò)程中,我們觀察到了線程數(shù)量增加導(dǎo)致帶寬減少的情況。雖然數(shù)據(jù)訪問(wèn)在每個(gè)工作線程內(nèi)是順序的,但隨著線程數(shù)的增加,CXL控制器和擴(kuò)展DRAM之間的內(nèi)存控制器接收到的請(qǐng)求模式更少。因此,CXL內(nèi)存的性能受到了阻礙。
4.3.2 隨機(jī)存取模式
為了評(píng)估MEMO對(duì)隨機(jī)塊訪問(wèn)的性能,我們按順序發(fā)布AVX-512訪問(wèn)的塊,但每次都有隨機(jī)偏移。這種方法使我們能夠在數(shù)據(jù)訪問(wèn)模式不可預(yù)測(cè)的現(xiàn)實(shí)工作條件下測(cè)量系統(tǒng)的性能。隨著我們?cè)跍y(cè)試的線程計(jì)數(shù)中增加塊大小,內(nèi)存訪問(wèn)模式將收斂到順序訪問(wèn),其中CPU緩存和內(nèi)存控制器都可以提高整體帶寬。為了確保塊級(jí)別的寫(xiě)入順序,我們?cè)趎t存儲(chǔ)的每個(gè)塊之后發(fā)布一個(gè)sfence。隨機(jī)塊訪問(wèn)的結(jié)果如圖5所示。
圖5:隨機(jī)塊訪問(wèn)帶寬。行順序(從上到下):本地DDR5、CXL內(nèi)存、遠(yuǎn)程DDR5。列順序(從左到右):加載、存儲(chǔ)、nt存儲(chǔ)。線程數(shù)在頂部圖例中表示
當(dāng)塊大小較?。?KB)時(shí),我們?cè)陔S機(jī)塊加載中觀察到類似的模式,所有三種存儲(chǔ)器方案都同樣受到隨機(jī)訪問(wèn)的影響。然而,當(dāng)我們將塊大小增加到16KB時(shí),DDR5-L8和DDR5-R1/CXL內(nèi)存之間出現(xiàn)了主要差異。DDR5-L8的帶寬隨線程數(shù)呈次線性擴(kuò)展,而DDR5-R1和CXL內(nèi)存從更高的線程數(shù)(4個(gè)線程后)中獲益較少,這在CXL內(nèi)存中更為明顯。內(nèi)存通道數(shù)起著至關(guān)重要的作用,DDR5-R1和我們的CXL內(nèi)存設(shè)備只有一個(gè)內(nèi)存通道,而DDR5-L8總共有八個(gè)通道。隨機(jī)塊存儲(chǔ)在線程數(shù)方面表現(xiàn)出與負(fù)載相似的模式,但增加了帶寬停止隨塊大小縮放的趨勢(shì)。
與所有其他測(cè)試的工作負(fù)載相比,CXL內(nèi)存中隨機(jī)塊非臨時(shí)存儲(chǔ)的行為顯示出一個(gè)有趣的趨勢(shì)。單線程nt存儲(chǔ)可以很好地隨塊大小擴(kuò)展,而線程數(shù)越高,在達(dá)到塊大小和線程數(shù)的一些最佳點(diǎn)后,吞吐量就會(huì)下降。例如,當(dāng)塊大小為32KB時(shí),2線程帶寬達(dá)到峰值,而4線程帶寬在塊大小為16KB時(shí)達(dá)到峰值。
我們認(rèn)為,這個(gè)最佳點(diǎn)是由CXL內(nèi)存設(shè)備內(nèi)的內(nèi)存緩沖區(qū)決定的。與常規(guī)存儲(chǔ)指令不同,nt存儲(chǔ)不占用CPU核心中的跟蹤資源。因此,更容易同時(shí)擁有更多的動(dòng)態(tài)nt存儲(chǔ)指令,這可能會(huì)導(dǎo)致CXL內(nèi)存設(shè)備中的緩沖區(qū)溢出。
盡管如此,非臨時(shí)指令的優(yōu)點(diǎn)是避免了RFO(第4.2節(jié))和緩存污染,使它們?cè)贑XL內(nèi)存設(shè)置中更具吸引力。希望使用nt存儲(chǔ)的程序員應(yīng)該記住這種行為,以充分利用CXL內(nèi)存中的nt存儲(chǔ)。
4.4
與使用NUMA系統(tǒng)的仿真的比較
最近關(guān)于CXL內(nèi)存的研究通常是通過(guò)跨NUMA內(nèi)存訪問(wèn)來(lái)模擬CXL內(nèi)存訪問(wèn)延遲來(lái)進(jìn)行的,即通過(guò)對(duì)主內(nèi)存訪問(wèn)施加額外的延遲來(lái)進(jìn)行。然而,根據(jù)我們的觀察,跨NUMA仿真模型無(wú)法精確模擬CXL內(nèi)存的以下特征:(1)當(dāng)前CXL設(shè)備中有限帶寬的影響(除非遠(yuǎn)程DIMM填充的通道數(shù)與CXL內(nèi)存相同),(2)與跨NUMA訪問(wèn)相比,延遲更高的各種CXL內(nèi)存實(shí)現(xiàn)(在延遲受限的應(yīng)用程序中,延遲更大的影響變得更嚴(yán)重),以及(3)不同工作負(fù)載下的數(shù)據(jù)傳輸效率(即負(fù)載和非臨時(shí)存儲(chǔ)帶寬)。
5.實(shí)際應(yīng)用
為了研究CXL內(nèi)存對(duì)性能的影響,我們通過(guò)將應(yīng)用程序的內(nèi)存全部或部分綁定到CXL內(nèi)存來(lái)探索。Linux提供了numactl程序,它允許用戶(1)將程序綁定到特定的內(nèi)存節(jié)點(diǎn)(membind模式),或(2)優(yōu)先分配給內(nèi)存節(jié)點(diǎn),并僅在指定節(jié)點(diǎn)內(nèi)存耗盡時(shí)將內(nèi)存分配給其他節(jié)點(diǎn)(首選模式),或者將分配均勻地分布在一組節(jié)點(diǎn)上(交錯(cuò)模式)。
Linux內(nèi)核中最近的一個(gè)補(bǔ)丁現(xiàn)在允許對(duì)內(nèi)存節(jié)點(diǎn)之間的頁(yè)面交錯(cuò)率進(jìn)行細(xì)粒度控制。這意味著,例如,如果我們將DRAM:CXL比率設(shè)置為4:1,我們可以將20%的內(nèi)存分配給CXL內(nèi)存。為了研究CXL內(nèi)存對(duì)應(yīng)用程序性能的影響,我們針對(duì)一些應(yīng)用程序調(diào)整了這個(gè)交織比率。此外,我們禁用了NUMA平衡,以防止頁(yè)面遷移到DRAM。
使用這種異構(gòu)內(nèi)存方案的這些應(yīng)用程序的性能應(yīng)該作為大多數(shù)內(nèi)存分層策略的準(zhǔn)則。這是因?yàn)榕c加權(quán)循環(huán)分配策略相比,所提出的優(yōu)化至少應(yīng)該表現(xiàn)得同樣好。
5.1
Redis-YCSB
Redis是一種在業(yè)界流行并廣泛使用的高性能內(nèi)存鍵值存儲(chǔ)。我們使用YCSB來(lái)測(cè)試Redis在不同內(nèi)存分配方案下的性能,方法是將其內(nèi)存固定到CXL內(nèi)存、DRAM或分布在兩者之間。為了評(píng)估系統(tǒng)性能,我們?cè)赮CSB客戶端中執(zhí)行了多個(gè)工作負(fù)載,同時(shí)限制每秒查詢(QPS)。具體來(lái)說(shuō),我們測(cè)量了兩個(gè)指標(biāo):(1)查詢中第99個(gè)百分點(diǎn)的尾部延遲,以及(2)最大可持續(xù)QPS。除了工作負(fù)載D之外,所有工作負(fù)載都對(duì)請(qǐng)求使用統(tǒng)一的分布,從而確保最大限度地增加內(nèi)存壓力。我們還微調(diào)了交織比(DRAM:CXL),以將一定量的內(nèi)存卸載到CXL,在不同的實(shí)驗(yàn)中使用了30:1(3.23%)和9:1(10%)等比例。
我們?cè)趫D6中的結(jié)果表明,當(dāng)Redis純粹在CXL內(nèi)存上運(yùn)行時(shí),在低QPS(20k)下,p99尾部延遲存在顯著差距。這一差距在55k QPS之前保持相對(duì)恒定,此時(shí)YCSB客戶端無(wú)法到達(dá)目標(biāo)QPS,導(dǎo)致尾部延遲突然增加。當(dāng)Redis 50%的內(nèi)存分配給CXL內(nèi)存時(shí),p99尾部延遲介于純DRAM和純CXL內(nèi)存之間。盡管50%CXL內(nèi)存Redis直到65k才使其QPS飽和,但尾部延遲在55k左右激增。最后,DRAMMRedis表現(xiàn)出穩(wěn)定的尾部延遲,其QPS在80k左右飽和。
圖6:Redis p99延遲。使用YCSB工作負(fù)載A進(jìn)行測(cè)試(50%讀取,50%更新)。50/100%-圖例中的R/U表示50/100%Redis內(nèi)存在CXL內(nèi)存上運(yùn)行時(shí)的讀取/更新延遲
我們認(rèn)為,尾部延遲差距歸因于Redis查詢的超低響應(yīng)延遲,使這些μs級(jí)響應(yīng)的延遲對(duì)內(nèi)存訪問(wèn)延遲高度敏感。這與我們?cè)诘?.2節(jié)中給出的延遲測(cè)量結(jié)果非常相關(guān),其中CXL內(nèi)存訪問(wèn)延遲范圍從數(shù)百到1000納秒,比DRAM高2-4倍。然而,中間計(jì)算和緩存命中將延遲差異(就應(yīng)用程序尾部延遲而言)降低到QPS飽和點(diǎn)之前的約2倍。
另一方面,CXL內(nèi)存Redis可以提供的最大可持續(xù)QPS(圖7)與第4.3.2節(jié)中觀察到的隨機(jī)塊訪問(wèn)帶寬相關(guān),其中與本地-DDR5或遠(yuǎn)程-DDR5相比,CXL存儲(chǔ)器的單線程加載/存儲(chǔ)帶寬要低得多。
圖7:Redis最大QPS。測(cè)試具有各種CXL內(nèi)存配置的最大可持續(xù)Redis QPS。圖例表示Redis內(nèi)存分配給CXL內(nèi)存的百分比。YCSB工作負(fù)載D默認(rèn)讀取最近插入的元素(lat),但我們也用Zipfian(zipf)或uniform(uni)分布中的讀取請(qǐng)求測(cè)試了該工作負(fù)載,以查看對(duì)訪問(wèn)位置的影響。這里省略了工作負(fù)載E,因?yàn)樗欠秶樵儭?/p>
單線程隨機(jī)訪問(wèn)帶寬受內(nèi)存訪問(wèn)延遲的限制,其中單線程內(nèi)的數(shù)據(jù)依賴性使CPU中的負(fù)載存儲(chǔ)隊(duì)列難以飽和。此外,圖7顯示了一種趨勢(shì),即分配給CXL的內(nèi)存更少(CXL內(nèi)存百分比降低),在測(cè)試的所有工作負(fù)載中都能提供更高的最大QPS,但這些都無(wú)法超過(guò)純粹在DRAM上運(yùn)行Redis的性能。在這種情況下,內(nèi)存交錯(cuò)無(wú)法提高單個(gè)應(yīng)用程序的性能,因?yàn)榕cCXL內(nèi)存的交錯(cuò)總是會(huì)引入更高的訪問(wèn)延遲。請(qǐng)注意,當(dāng)前的CXL內(nèi)存設(shè)置是基于FPGA的,其真正優(yōu)點(diǎn)在于其靈活性。我們預(yù)計(jì)基于ASIC的CXL存儲(chǔ)器將提供相對(duì)較低的訪問(wèn)延遲,從而提高延遲受限應(yīng)用程序的性能。
圖8:DLRM嵌入減少吞吐量。使用8通道DRAM和CXL內(nèi)存進(jìn)行測(cè)試;吞吐量與線程數(shù)(左);32個(gè)線程時(shí)標(biāo)準(zhǔn)化為DRAM的不同內(nèi)存方案的吞吐量(右)
5.2
DLRM中的嵌入縮減
深度學(xué)習(xí)推薦模型(DLRM)已在行業(yè)中得到廣泛部署。嵌入縮減是DLRM推理中的一個(gè)步驟,已知其內(nèi)存占用率很高,占用推理延遲的50%-70%。我們?cè)贒RAM、CXL內(nèi)存和交錯(cuò)內(nèi)存上測(cè)試了嵌入縮減,設(shè)置與MERCI相同。
圖8中的結(jié)果顯示,隨著線程數(shù)的增加,在每個(gè)方案上運(yùn)行DLRM推理都是線性的,并且斜率不同。DDR5-R1和CXL存儲(chǔ)器的總體趨勢(shì)相似,這與第4.3.2節(jié)中的觀察結(jié)果一致,其中DDR-R1和CXL內(nèi)存在訪問(wèn)粒度較小時(shí)具有相似的隨機(jī)加載/存儲(chǔ)帶寬。內(nèi)存交錯(cuò)的兩個(gè)點(diǎn)(CXL內(nèi)存上的3.23%和50%)如圖8所示。隨著我們將交錯(cuò)到CXL的內(nèi)存量減少,推理吞吐量也會(huì)增加。然而,我們?cè)俅斡^察到,即使將3.23%的內(nèi)存分配給CXL,推理吞吐量也無(wú)法與純粹在DRAM上運(yùn)行的吞吐量相匹配。還要注意,純DRAM推理吞吐量呈線性擴(kuò)展,其線性趨勢(shì)似乎擴(kuò)展到32個(gè)線程之外。結(jié)合這兩個(gè)觀察結(jié)果,我們可以得出結(jié)論,8通道DDR5內(nèi)存可以在32個(gè)線程之外維持DLRM推斷。
圖8:DLRM嵌入減少吞吐量。使用8通道DRAM和CXL內(nèi)存進(jìn)行測(cè)試;吞吐量與線程數(shù)(左);32個(gè)線程時(shí)標(biāo)準(zhǔn)化為DRAM的不同內(nèi)存方案的吞吐量(右)
為了演示應(yīng)用程序受內(nèi)存帶寬限制的場(chǎng)景,我們測(cè)試了SNC模式下的推理吞吐量。回想一下,英特爾在SPR中引入了子NUMA集群功能,其中小芯片被拆分為四個(gè)單獨(dú)的NUMA節(jié)點(diǎn),每個(gè)NUMA節(jié)點(diǎn)上的內(nèi)存控制器獨(dú)立于其他節(jié)點(diǎn)工作。通過(guò)在一個(gè)SNC節(jié)點(diǎn)上運(yùn)行推理,我們有效地將推理限制在兩個(gè)DDR5通道上運(yùn)行,使其具有內(nèi)存限制。
圖9展示了在SNC模式下運(yùn)行推理的結(jié)果,CXL內(nèi)存以與之前所有實(shí)驗(yàn)相同的方式交錯(cuò)。圖中的綠色條顯示了SNC上的推理吞吐量,它在24個(gè)線程后停止線性縮放。在28個(gè)線程中,推理受到兩個(gè)內(nèi)存通道的限制,并且將內(nèi)存交織到CXL會(huì)產(chǎn)生略高的推理吞吐量。這種趨勢(shì)持續(xù)存在,在32個(gè)線程中,將20%的內(nèi)存放在CXL上,與SNC情況相比,推理吞吐量增加了11%。未來(lái),我們預(yù)計(jì)CXL設(shè)備的帶寬將與本機(jī)RAM相當(dāng),這將進(jìn)一步提高內(nèi)存帶寬綁定應(yīng)用程序的吞吐量。
圖9:DLRM嵌入縮減吞吐量
5.3
DeathStarBench
DeathStarBench(DSB)是一個(gè)開(kāi)源基準(zhǔn)套件,旨在評(píng)估系統(tǒng)上微服務(wù)的性能。它使用Docker來(lái)啟動(dòng)微服務(wù)的組件,包括機(jī)器學(xué)習(xí)推理邏輯、web后端、負(fù)載均衡器、緩存和存儲(chǔ)。DSB為社交網(wǎng)絡(luò)框架提供了三個(gè)單獨(dú)的工作負(fù)載和一個(gè)混合的工作負(fù)載。圖10顯示了撰寫(xiě)帖子、讀取用戶時(shí)間線和混合工作負(fù)載的第99個(gè)百分點(diǎn)的尾部延遲。我們省略了讀取home timeline的結(jié)果,因?yàn)樗辉跀?shù)據(jù)庫(kù)上操作,因此與用于數(shù)據(jù)庫(kù)的內(nèi)存類型無(wú)關(guān)。在我們的實(shí)驗(yàn)中,我們將具有高工作集大小的組件(即存儲(chǔ)和緩存應(yīng)用程序)固定到DDR5-L8或CXL內(nèi)存中。我們將計(jì)算密集型部分留在DDR5-L8。這些組件的內(nèi)存細(xì)分如圖10所示。
圖10:DeathStarBench p99延遲和內(nèi)存細(xì)分。工作負(fù)載:撰寫(xiě)帖子(左)、讀取用戶時(shí)間線(左中)、混合工作負(fù)載(右中)、按功能劃分的內(nèi)存細(xì)分(右)?;旌瞎ぷ髫?fù)載有60%讀取主頁(yè)時(shí)間線,30%讀取用戶時(shí)間線,10%撰寫(xiě)帖子。
圖10中的結(jié)果顯示,在撰寫(xiě)帖子的情況下存在尾部延遲差異,而在讀取用戶時(shí)間線和混合工作負(fù)載的情況下幾乎沒(méi)有差異。請(qǐng)注意,DSB中的尾部延遲為毫秒級(jí),遠(yuǎn)高于YCSB Redis。
當(dāng)我們分析撰寫(xiě)帖子和讀取用戶時(shí)間線的軌跡時(shí),我們發(fā)現(xiàn)撰寫(xiě)帖子涉及更多的數(shù)據(jù)庫(kù)操作,這給CXL內(nèi)存帶來(lái)了更大的負(fù)載。同時(shí),讀取用戶時(shí)間線的大部分響應(yīng)時(shí)間都花在了nginx前端。這使得較長(zhǎng)的CXL內(nèi)存訪問(wèn)延遲可以在計(jì)算密集型組件中分?jǐn)?,從而使尾部延遲對(duì)數(shù)據(jù)庫(kù)訪問(wèn)延遲的依賴性大大降低。
最后,混合工作負(fù)載顯示了真實(shí)社交網(wǎng)絡(luò)的模擬用例,總體而言,大多數(shù)用戶閱讀了一些用戶撰寫(xiě)的帖子。盡管在混合工作負(fù)載中,隨著QPS的增加,將數(shù)據(jù)庫(kù)固定到CXL內(nèi)存會(huì)顯示出略高的延遲,但總體飽和點(diǎn)類似于在DDR5-L8上運(yùn)行數(shù)據(jù)庫(kù)。
DSB的結(jié)果提供了CXL內(nèi)存的一個(gè)有趣的用例,即只要計(jì)算密集型組件保留在DRAM中,以低需求率運(yùn)行的緩存和存儲(chǔ)組件就可以分配給較慢的CXL內(nèi)存,并且應(yīng)用程序的性能基本保持不變。
6.CXL內(nèi)存的最佳實(shí)踐
鑒于CXL內(nèi)存的獨(dú)特硬件特性,我們?cè)诔浞掷肅XL內(nèi)存方面提供了以下見(jiàn)解。
將數(shù)據(jù)從CXL內(nèi)存移出或移動(dòng)到CXL內(nèi)存時(shí),請(qǐng)使用非臨時(shí)存儲(chǔ)或movdir64B。如第4節(jié)所示,不同的x86指令在訪問(wèn)CXL內(nèi)存時(shí)表現(xiàn)出顯著不同的性能,這是由于CPU核心的微體系結(jié)構(gòu)設(shè)計(jì)和CXL內(nèi)存的固有行為造成的。考慮到CXL內(nèi)存的使用情況(例如,內(nèi)存分層),短期數(shù)據(jù)重用的可能性不大,為了實(shí)現(xiàn)更高的數(shù)據(jù)移動(dòng)吞吐量并避免污染寶貴的緩存資源,我們建議在相應(yīng)的軟件堆棧中優(yōu)先考慮nt store或movdir64B指令。請(qǐng)注意,由于nt store和movdir64B都是弱排序的,因此需要使用內(nèi)存圍欄來(lái)確保數(shù)據(jù)已被寫(xiě)入。
限制并發(fā)寫(xiě)入CXL內(nèi)存的線程數(shù)。如前所述,CXL內(nèi)存的性能取決于CPU和設(shè)備控制器。對(duì)于并發(fā)CXL內(nèi)存訪問(wèn)尤其如此,因?yàn)闋?zhēng)用可能發(fā)生在多個(gè)位置。盡管CXL存儲(chǔ)器控制器的當(dāng)前基于FPGA的實(shí)現(xiàn)可能會(huì)限制內(nèi)部緩沖區(qū)大小,從而限制動(dòng)態(tài)存儲(chǔ)指令的數(shù)量,但我們預(yù)計(jì),在純基于ASIC的CXL存儲(chǔ)器設(shè)備上仍然存在該問(wèn)題。最好在CPU軟件端有一個(gè)集中的通信存根來(lái)進(jìn)行數(shù)據(jù)移動(dòng)。我們建議CXL內(nèi)存應(yīng)由操作系統(tǒng)或?qū)S密浖刈o(hù)程序管理,而不是由所有應(yīng)用程序管理。
使用Intel DSA進(jìn)行從CXL內(nèi)存到CXL內(nèi)存的大容量?jī)?nèi)存移動(dòng)。當(dāng)在常規(guī)DRAM和CXL存儲(chǔ)器上傳輸大量數(shù)據(jù)時(shí),前兩個(gè)見(jiàn)解可能仍然不足,因?yàn)樗鼈兿牧舜罅康腃PU周期,并且仍然具有有限的指令/存儲(chǔ)器級(jí)并行性。我們發(fā)現(xiàn),與前代產(chǎn)品相比,Intel DSA具有高吞吐量、靈活性和更少的限制,可以很好地進(jìn)一步提高此類數(shù)據(jù)移動(dòng)的性能和效率。這在分層內(nèi)存系統(tǒng)中尤其有用,因?yàn)榉謱觾?nèi)存系統(tǒng)的數(shù)據(jù)移動(dòng)通常以頁(yè)面粒度(即4KB或2MB)進(jìn)行。
使用NUMApolices和其他分層內(nèi)存方法交錯(cuò)內(nèi)存,以便在所有DRAM和CXL通道上均勻分配內(nèi)存負(fù)載。除了將CXL存儲(chǔ)器用作較慢的DRAM或較快的SSD(例如,存儲(chǔ)器分層)之外,CXL存儲(chǔ)器還可以與常規(guī)存儲(chǔ)器通道交織,以增加總存儲(chǔ)器帶寬,尤其是當(dāng)CXL存儲(chǔ)器設(shè)備作為更多的存儲(chǔ)器通道(從而更具可比性的存儲(chǔ)器帶寬)時(shí)。仔細(xì)選擇交錯(cuò)百分比/策略可以在很大程度上緩解預(yù)期的性能下降。
避免在CXL內(nèi)存上運(yùn)行具有μs級(jí)延遲的應(yīng)用程序。CXL內(nèi)存相對(duì)較長(zhǎng)的訪問(wèn)延遲可能會(huì)成為需要以精細(xì)時(shí)間粒度(μs級(jí))進(jìn)行即時(shí)數(shù)據(jù)訪問(wèn)的應(yīng)用程序的主要瓶頸。Redis就是這樣一個(gè)例子——由于CXL內(nèi)存導(dǎo)致的延遲數(shù)據(jù)訪問(wèn)將積累到端到端查詢處理的重要價(jià)值。這種類型的應(yīng)用程序仍然應(yīng)該考慮將數(shù)據(jù)固定在更快的介質(zhì)上。
微服務(wù)可能是CXL內(nèi)存卸載的一個(gè)很好的候選者。微服務(wù)架構(gòu)由于其靈活、便于開(kāi)發(fā)、可擴(kuò)展和敏捷,已成為當(dāng)今數(shù)據(jù)中心互聯(lián)網(wǎng)和云服務(wù)的主流開(kāi)發(fā)方法。然而,與傳統(tǒng)的單片應(yīng)用程序相比,它的分層和模塊化設(shè)計(jì)確實(shí)帶來(lái)了更高的運(yùn)行時(shí)開(kāi)銷。這樣的表征使其對(duì)底層高速緩存/存儲(chǔ)器配置和參數(shù)不那么敏感。我們對(duì)DSB的研究(見(jiàn)第5.3節(jié))也證明了這一點(diǎn)。我們?cè)O(shè)想,很大一部分微服務(wù)數(shù)據(jù)可以卸載到CXL內(nèi)存,而不會(huì)影響其延遲或吞吐量性能。
利用可編程CXL內(nèi)存設(shè)備探索在線加速的潛力。鑒于上述見(jiàn)解,那些適合CXL內(nèi)存卸載的應(yīng)用程序可能對(duì)數(shù)據(jù)訪問(wèn)延遲不太敏感。這為CXL內(nèi)存設(shè)備內(nèi)的內(nèi)聯(lián)加速邏輯提供了更多的設(shè)計(jì)空間——盡管這種加速可能會(huì)給數(shù)據(jù)訪問(wèn)增加額外的延遲,但從目標(biāo)應(yīng)用程序的端到端角度來(lái)看,這種開(kāi)銷是不可見(jiàn)的。因此,我們?nèi)匀惶岢贔PGA的CXL存儲(chǔ)設(shè)備,因?yàn)樗鼈兙哂徐`活性和可編程性。
6.1
?應(yīng)用分類
從分析的應(yīng)用程序中,我們根據(jù)在CXL內(nèi)存上運(yùn)行時(shí)的性能確定了兩種類型的應(yīng)用程序:帶寬受限和延遲受限。
內(nèi)存帶寬受限的應(yīng)用程序通常會(huì)經(jīng)歷吞吐量的次線性增長(zhǎng),超過(guò)一定的線程數(shù)。盡管在CXL內(nèi)存上運(yùn)行Redis和DLRM推理都會(huì)產(chǎn)生較低的飽和點(diǎn),但應(yīng)該明確區(qū)分兩者,只有DLRM推理是帶寬受限的應(yīng)用程序。單線程Redis受到CXL內(nèi)存更高延遲的限制,這降低了Redis的處理速度。
內(nèi)存延遲受限的應(yīng)用程序即使將少量工作集分配給延遲較高的內(nèi)存,也會(huì)感知到吞吐量下降。在數(shù)據(jù)庫(kù)的情況下,當(dāng)在CXL內(nèi)存上運(yùn)行時(shí),即使QPS離飽和點(diǎn)很遠(yuǎn),它們也可能顯示出尾部延遲間隙。Redis和memcached等在μs級(jí)延遲下運(yùn)行的數(shù)據(jù)庫(kù)在純CXL內(nèi)存上運(yùn)行時(shí)受到的懲罰最大。相比之下,具有計(jì)算層的毫秒級(jí)微服務(wù)顯示出將內(nèi)存卸載到CXL內(nèi)存的良好用例。
然而,在這兩種情況下,在傳統(tǒng)的CPU連接的DRAM和CXL內(nèi)存之間使用交錯(cuò)內(nèi)存可以減少較慢的CXL內(nèi)存在吞吐量(第5.2節(jié))和尾部延遲(第5.1節(jié))方面的損失。這種循環(huán)策略應(yīng)該作為分層內(nèi)存策略的基線。
7.相關(guān)研究
隨著存儲(chǔ)器技術(shù)的快速發(fā)展,除了基于常規(guī)DDR的DRAM之外,數(shù)據(jù)中心還出現(xiàn)了許多新型存儲(chǔ)器,每種存儲(chǔ)器都有不同的特點(diǎn)和權(quán)衡。這些包括但不限于持久存儲(chǔ)器,如Intel Optane DIMM,基于RDMA的遠(yuǎn)程/分解存儲(chǔ)器,甚至字節(jié)可尋址SSD。盡管CXL內(nèi)存已經(jīng)被廣泛研究和分析,但作為內(nèi)存層中的一個(gè)新成員,其性能特征和指標(biāo)仍不明確。
自2019年概念提出以來(lái),CXL已經(jīng)被許多研究人員討論過(guò)。例如,Meta設(shè)想使用CXL內(nèi)存進(jìn)行內(nèi)存分層和交換;微軟構(gòu)建了一個(gè)用于內(nèi)存分解探索的CXL內(nèi)存原型系統(tǒng)。他們中的大多數(shù)人使用NUMA機(jī)器來(lái)模擬CXL內(nèi)存的行為。Gouk等人在基于FPGA的RISC-V CPU上構(gòu)建了CXL存儲(chǔ)器原型。與之前的研究不同,我們是第一個(gè)在商品CPU和CXL設(shè)備上進(jìn)行CXL內(nèi)存研究的,既有微基準(zhǔn)測(cè)試,也有實(shí)際應(yīng)用。這使我們的研究更加現(xiàn)實(shí)和全面。
8.結(jié)論
CXL已經(jīng)成為未來(lái)的設(shè)備互連標(biāo)準(zhǔn),具有豐富的有用功能,而CXL內(nèi)存就是其中的一個(gè)重要功能。在這項(xiàng)工作中,基于最先進(jìn)的實(shí)際硬件,我們使用微基準(zhǔn)和實(shí)際應(yīng)用程序?qū)XL內(nèi)存進(jìn)行了詳細(xì)的表征分析。通過(guò)對(duì)CXL存儲(chǔ)器行為的獨(dú)特觀察,我們還為程序員提供了一些使用指南,以更好地利用CXL內(nèi)存。我們希望這項(xiàng)工作能夠促進(jìn)CXL內(nèi)存生態(tài)系統(tǒng)的開(kāi)發(fā)和采用。
編輯:黃飛
?
評(píng)論
查看更多