摘 要
內(nèi)存解耦被視為解決數(shù)據(jù)中心內(nèi)存低效利用問(wèn)題的強(qiáng)大替代方案。解耦內(nèi)存具備適應(yīng)數(shù)據(jù)中心應(yīng)用程序(如數(shù)據(jù)分析、大數(shù)據(jù)等)內(nèi)存需求的動(dòng)態(tài)變化能力,這些應(yīng)用程序需要進(jìn)行內(nèi)存內(nèi)處理。然而,由于互連速度的限制,這些系統(tǒng)可能面臨著高遠(yuǎn)程內(nèi)存訪問(wèn)延遲的挑戰(zhàn)。
在本文中,我們探討了一種機(jī)架級(jí)解耦內(nèi)存架構(gòu),并深入討論了各種設(shè)計(jì)方面的問(wèn)題。我們?cè)O(shè)計(jì)了一個(gè)基于追蹤的模擬器,結(jié)合了事件驅(qū)動(dòng)的互連和周期準(zhǔn)確的內(nèi)存模擬器,以評(píng)估機(jī)架級(jí)解耦內(nèi)存系統(tǒng)的性能。我們的研究表明,遠(yuǎn)程內(nèi)存訪問(wèn)延遲的問(wèn)題不僅與互連速度相關(guān),還與遠(yuǎn)程內(nèi)存隊(duì)列中的爭(zhēng)用有關(guān)。為了降低延遲,我們引入了一種內(nèi)存分配策略,與傳統(tǒng)策略相比表現(xiàn)出色。我們使用多種不同內(nèi)存訪問(wèn)模式的基準(zhǔn)進(jìn)行了實(shí)驗(yàn),研究結(jié)果顯示,我們?cè)跈C(jī)架級(jí)內(nèi)存解耦和平均內(nèi)存訪問(wèn)延遲方面取得了令人鼓舞的成果。
引 言
隨著高端服務(wù)器級(jí)多處理器(例如Xeon Phi和AMD的EPYC)的出現(xiàn),服務(wù)器的計(jì)算能力得到了顯著提升,可以同時(shí)運(yùn)行多個(gè)應(yīng)用程序。然而,在高性能計(jì)算(HPC)設(shè)施和云數(shù)據(jù)中心中,典型的工作負(fù)載,如大數(shù)據(jù)分析和機(jī)器學(xué)習(xí)應(yīng)用程序,由于內(nèi)存低效利用和內(nèi)存容量壁壘[1],導(dǎo)致服務(wù)器內(nèi)存不足的問(wèn)題愈發(fā)凸顯。由于對(duì)板載內(nèi)存的不合理使用,內(nèi)存碎片化成為每個(gè)服務(wù)器節(jié)點(diǎn)內(nèi)的小片段,從而增加了總體擁有成本[2]。內(nèi)存的解耦技術(shù)為內(nèi)存管理提供了一種模塊化方法,可以以更精細(xì)的方式進(jìn)行管理,而不需要將內(nèi)存安裝在與處理器相同的主板上。它允許內(nèi)存的獨(dú)立升級(jí),并延長(zhǎng)了數(shù)據(jù)中心硬件刷新周期[3]。
在本文中,我們研究了一種機(jī)架級(jí)系統(tǒng),其中部分內(nèi)存被解耦,每個(gè)計(jì)算節(jié)點(diǎn)具有一些本地內(nèi)存以滿足主要需求,而大多數(shù)應(yīng)用程序的內(nèi)存需求則由遠(yuǎn)程內(nèi)存滿足。遠(yuǎn)程內(nèi)存以多個(gè)遠(yuǎn)程內(nèi)存池的形式在同一機(jī)架內(nèi)進(jìn)行管理,并根據(jù)計(jì)算節(jié)點(diǎn)的需求進(jìn)行動(dòng)態(tài)分配。
內(nèi)存的解耦引入了多個(gè)設(shè)計(jì)挑戰(zhàn)。首先,遠(yuǎn)程內(nèi)存的位置應(yīng)合理,以確保多個(gè)計(jì)算節(jié)點(diǎn)可以同時(shí)訪問(wèn)遠(yuǎn)程內(nèi)存而無(wú)明顯擁塞。其次,需要如何公開(kāi)遠(yuǎn)程內(nèi)存地址空間,以避免系統(tǒng)級(jí)瓶頸并降低額外開(kāi)銷(xiāo)。另一個(gè)要求是需要一個(gè)集中式內(nèi)存管理器來(lái)負(fù)責(zé)遠(yuǎn)程內(nèi)存的分配,同時(shí)需要平衡內(nèi)存池的負(fù)載。不同類(lèi)型的遠(yuǎn)程內(nèi)存訪問(wèn)需要不同的互連設(shè)計(jì)和協(xié)議支持?;诰彺娴脑L問(wèn)需要內(nèi)存綁定的支持以實(shí)現(xiàn)更快的訪問(wèn)速度[4],[5],而以較大塊方式訪問(wèn)遠(yuǎn)程內(nèi)存則需要支持遠(yuǎn)程直接內(nèi)存訪問(wèn)(RDMA)[6]。我們提出了一個(gè)兩級(jí)遠(yuǎn)程內(nèi)存分配機(jī)制,一個(gè)在計(jì)算節(jié)點(diǎn)級(jí)別,另一個(gè)在全局內(nèi)存管理器級(jí)別。研究表明,不同的內(nèi)存分配方法會(huì)對(duì)基于內(nèi)存池的遠(yuǎn)程內(nèi)存性能產(chǎn)生影響。
本文的主要貢獻(xiàn)如下:
我們探討了機(jī)架級(jí)內(nèi)存解耦的設(shè)計(jì),并深入討論了設(shè)計(jì)空間。
我們確定了影響遠(yuǎn)程內(nèi)存訪問(wèn)延遲的主要因素,并提出了經(jīng)濟(jì)有效的內(nèi)存分配策略,以實(shí)現(xiàn)負(fù)載平衡以減少尾延遲。
我們?cè)u(píng)估了所提出的內(nèi)存分配策略在不同工作負(fù)載下的性能,以展示內(nèi)存解耦的整體影響。
相關(guān)工作與動(dòng)機(jī)
早期的設(shè)計(jì)曾針對(duì)傳統(tǒng)服務(wù)器節(jié)點(diǎn)提出機(jī)架級(jí)內(nèi)存解耦的方法[7]–[9]。例如,Infiniswap [10] 和 FARM [11] 推出了虛擬內(nèi)存解耦系統(tǒng)的優(yōu)化方案,利用RDMA技術(shù)訪問(wèn)遠(yuǎn)程內(nèi)存,并充分利用其他服務(wù)器中的閑置內(nèi)存。Lim等人 [1],[12] 提出了通用的物理內(nèi)存解耦設(shè)計(jì),其中內(nèi)存刀片通過(guò)PCIe總線連接到計(jì)算節(jié)點(diǎn)。而Scale-out NUMA [13] 提供了一個(gè)芯片內(nèi)硬件模塊,為處理器和遠(yuǎn)程內(nèi)存之間提供低延遲接口。Venice [4] 和 DEOI [5] 也研究了類(lèi)似的芯片內(nèi)模塊,用于遠(yuǎn)程內(nèi)存訪問(wèn),具備細(xì)粒度和分頁(yè)訪問(wèn)遠(yuǎn)程內(nèi)存的獨(dú)立通道。最近,硬件行業(yè)領(lǐng)袖共同制定了一項(xiàng)名為Gen-Z的協(xié)議標(biāo)準(zhǔn),類(lèi)似于芯片內(nèi)內(nèi)存一致性互連,其中包括交換機(jī)和內(nèi)存池子系統(tǒng)[14]。Komareddy等人提出了一種面向內(nèi)存池的共享內(nèi)存方法,為所有計(jì)算節(jié)點(diǎn)提供了單一的遠(yuǎn)程地址空間[15]。然而,大多數(shù)數(shù)據(jù)中心應(yīng)用程序可以滿足其CPU需求,只在極少數(shù)情況下需要共享內(nèi)存訪問(wèn)。在這種情況下,多個(gè)計(jì)算節(jié)點(diǎn)很少需要共享訪問(wèn)遠(yuǎn)程內(nèi)存。相反,保持單一域內(nèi)的一致性將有助于減少一致性流量并降低相關(guān)成本開(kāi)銷(xiāo)。我們的研究利用了池化內(nèi)存系統(tǒng)的非一致性使用,以更好地分配遠(yuǎn)程內(nèi)存。
此外,早期對(duì)分散內(nèi)存系統(tǒng)的評(píng)估通常是在小規(guī)模環(huán)境下進(jìn)行的,要么在虛擬化環(huán)境中[2],要么在主機(jī)操作系統(tǒng)[16]上進(jìn)行的,其中網(wǎng)絡(luò)延遲和地址空間分配通常是固定的。
機(jī)架級(jí)設(shè)計(jì)
我們的內(nèi)存解耦方法專(zhuān)注于機(jī)架級(jí)的遠(yuǎn)程內(nèi)存訪問(wèn),因?yàn)槌綑C(jī)架級(jí)別將引入更多延遲,這是由于網(wǎng)絡(luò)延遲引起的。
A. 池化內(nèi)存管理
計(jì)算節(jié)點(diǎn)不僅依賴(lài)遠(yuǎn)程內(nèi)存以滿足大部分內(nèi)存分配需求,還需要支持這些節(jié)點(diǎn)對(duì)內(nèi)存的廣泛請(qǐng)求,并確保它們?cè)谝?guī)定時(shí)間內(nèi)完成。遠(yuǎn)程內(nèi)存在其內(nèi)存隊(duì)列中可能發(fā)生爭(zhēng)用,這會(huì)顯著增加尾延遲。因此,需要更小的內(nèi)存池和更多的通信通道,以實(shí)現(xiàn)高整體內(nèi)存帶寬。目前,關(guān)于在一個(gè)機(jī)架內(nèi)使用多少個(gè)內(nèi)存池尚無(wú)共識(shí),因?yàn)榉稚?nèi)存設(shè)計(jì)仍在實(shí)驗(yàn)階段。我們的基本設(shè)計(jì)涉及將遠(yuǎn)程內(nèi)存劃分為多個(gè)遠(yuǎn)程池,后續(xù)實(shí)驗(yàn)將建立計(jì)算節(jié)點(diǎn)工作負(fù)載需求與內(nèi)存池?cái)?shù)量之間的關(guān)系。
B. 遠(yuǎn)程內(nèi)存組織
遠(yuǎn)程內(nèi)存可以對(duì)所有計(jì)算節(jié)點(diǎn)透明,允許節(jié)點(diǎn)上的操作系統(tǒng)從任何部分分配內(nèi)存。然而,所有節(jié)點(diǎn)都應(yīng)該通過(guò)全局內(nèi)存管理器獲得一致的視圖。然而,由于大量共享內(nèi)存引起的一致性流量問(wèn)題,這種方法可能存在可擴(kuò)展性問(wèn)題。另一種方法是提供對(duì)遠(yuǎn)程內(nèi)存的映射訪問(wèn),其中任何遠(yuǎn)程內(nèi)存頁(yè)面都專(zhuān)屬于單個(gè)節(jié)點(diǎn)。全局內(nèi)存管理器可以以較大的塊(幾兆字節(jié))方式保留遠(yuǎn)程內(nèi)存,而不會(huì)成為瓶頸。在我們的設(shè)計(jì)中,我們選擇了分布式內(nèi)存訪問(wèn)。
C. 互連需求
盡管快速網(wǎng)絡(luò)交換機(jī)已顯著減少網(wǎng)絡(luò)延遲,但網(wǎng)絡(luò)開(kāi)銷(xiāo)的一大部分仍來(lái)自節(jié)點(diǎn)深層協(xié)議堆棧、低速I(mǎi)/O總線以及在請(qǐng)求卸載時(shí)進(jìn)行的協(xié)議轉(zhuǎn)換。
圖1.基于RMAC的遠(yuǎn)程內(nèi)存訪問(wèn)
如圖1(a)所示,芯片內(nèi)網(wǎng)絡(luò)接口,如遠(yuǎn)程內(nèi)存訪問(wèn)控制器(RMAC),對(duì)于將遠(yuǎn)程內(nèi)存資源引入數(shù)據(jù)中心以進(jìn)行緩存加載/存儲(chǔ)是至關(guān)重要的。RMAC是一個(gè)可尋址的設(shè)備,還負(fù)責(zé)路由緩存未命中請(qǐng)求到適當(dāng)?shù)膬?nèi)存池所需的簿記機(jī)制。過(guò)去,芯片內(nèi)互連已經(jīng)在使快速遠(yuǎn)程內(nèi)存訪問(wèn)成為可能的領(lǐng)域發(fā)揮了關(guān)鍵作用[4],[5],[13],[17],[18],這些方法在數(shù)據(jù)中心應(yīng)用程序中非常有效。如圖1(b)所示,RMAC將屬于遠(yuǎn)程內(nèi)存的最后一級(jí)緩存(LLC)未命中請(qǐng)求進(jìn)行轉(zhuǎn)發(fā),并在硬件上實(shí)現(xiàn)了輕量級(jí)網(wǎng)絡(luò)協(xié)議。另一方面,粗粒度的頁(yè)訪問(wèn)可以通過(guò)類(lèi)似DMA通道的通道在相同接口上實(shí)現(xiàn),該通道與用戶(hù)或內(nèi)核空間的守護(hù)程序一起工作,用于監(jiān)視熱門(mén)遠(yuǎn)程內(nèi)存頁(yè)面并偶爾將它們傳送到本地內(nèi)存。RDMA互連,如RoCE [19] 和 InfiniBand [20],允許單邊訪問(wèn)遠(yuǎn)程內(nèi)存,并已在現(xiàn)有數(shù)據(jù)中心中得到廣泛應(yīng)用[21]。
D. 全局內(nèi)存管理器
全局內(nèi)存管理器負(fù)責(zé)管理單個(gè)機(jī)架內(nèi)的所有遠(yuǎn)程內(nèi)存。當(dāng)應(yīng)用程序在本地內(nèi)存不足時(shí)發(fā)生頁(yè)面錯(cuò)誤,它會(huì)向全局內(nèi)存管理器發(fā)起請(qǐng)求,以從內(nèi)存池中分配一個(gè)內(nèi)存塊。該塊將擴(kuò)展計(jì)算節(jié)點(diǎn)上的本地內(nèi)存地址空間。在Linux操作系統(tǒng)中,這一過(guò)程可以通過(guò)內(nèi)存熱插拔服務(wù)在線升級(jí)系統(tǒng)內(nèi)存來(lái)實(shí)現(xiàn)。一旦初始化,該服務(wù)將向操作系統(tǒng)的頁(yè)分配器提供所需的內(nèi)存塊。為了更細(xì)粒度地控制遠(yuǎn)程內(nèi)存,內(nèi)存應(yīng)以較小的塊進(jìn)行分配。如果塊的分配過(guò)小,映射表將變得龐大,導(dǎo)致顯著的搜索延遲。然而,如果塊的分配過(guò)大,內(nèi)存將被低效利用,類(lèi)似于傳統(tǒng)服務(wù)器內(nèi)存的使用方式,這將增加遠(yuǎn)程內(nèi)存回收的復(fù)雜性,因?yàn)樾枰笠?guī)模的數(shù)據(jù)遷移。全局內(nèi)存管理器可以托管在ToR(Top-of-Rack)交換機(jī)上,并維護(hù)包括已分配和可用遠(yuǎn)程內(nèi)存塊在內(nèi)的內(nèi)存表。一旦管理器分配了一個(gè)遠(yuǎn)程內(nèi)存塊,它將塊的詳細(xì)信息發(fā)送給請(qǐng)求節(jié)點(diǎn),以便在遠(yuǎn)程內(nèi)存訪問(wèn)控制器(RMAC)中添加適當(dāng)?shù)谋镜氐竭h(yuǎn)程地址映射,以進(jìn)行地址轉(zhuǎn)換。
機(jī)架級(jí)內(nèi)存分配
在分散內(nèi)存系統(tǒng)中,內(nèi)存分配涉及兩個(gè)關(guān)鍵方面。首先,計(jì)算節(jié)點(diǎn)上的頁(yè)面分配策略必須決定何時(shí)開(kāi)始使用遠(yuǎn)程內(nèi)存。節(jié)點(diǎn)可以選擇首先利用本地內(nèi)存,或者采用備用的本地-遠(yuǎn)程分配方法,以獲取連續(xù)的頁(yè)面。對(duì)于第一種選擇,節(jié)點(diǎn)最初可獲得快速本地內(nèi)存的性能優(yōu)勢(shì),但一旦本地內(nèi)存用盡,性能會(huì)突然下降。然而,這種方式通常不適用于許多應(yīng)用程序,因?yàn)樗鼈儍A向于經(jīng)歷啟動(dòng)階段,并且在此方案下無(wú)法充分利用快速的本地內(nèi)存。另一種選擇允許更長(zhǎng)時(shí)間的更好的平均內(nèi)存訪問(wèn)延遲,但不會(huì)充分利用快速的本地內(nèi)存。其次,全局內(nèi)存管理器需要確定一種內(nèi)存池選擇策略來(lái)分配內(nèi)存塊。在池化的遠(yuǎn)程內(nèi)存系統(tǒng)中,每個(gè)內(nèi)存池連接到機(jī)架頂部交換機(jī)的其中一個(gè)鏈路。如果沒(méi)有負(fù)載均衡,一些內(nèi)存池將吸引更多的請(qǐng)求,從而導(dǎo)致交換機(jī)緩沖區(qū)擁塞,并增加尾延遲的發(fā)生。
A. 隨機(jī)內(nèi)存池選擇
我們首先使用隨機(jī)內(nèi)存池選擇策略分析了工作負(fù)載WL-Mix(在第五節(jié)中解釋?zhuān)谶@種情況下,全局管理器會(huì)根據(jù)計(jì)算節(jié)點(diǎn)操作系統(tǒng)的每個(gè)塊分配請(qǐng)求(4MB分配大?。S機(jī)選擇一個(gè)內(nèi)存池,并且頁(yè)面分配交替在本地和遠(yuǎn)程內(nèi)存之間。
圖2.隨機(jī)內(nèi)存池選擇與本地-遠(yuǎn)程頁(yè)面交替分配 如圖2(a)所示,每個(gè)基準(zhǔn)測(cè)試的平均內(nèi)存訪問(wèn)延遲都超過(guò)了微秒,遠(yuǎn)遠(yuǎn)超出了應(yīng)用程序正常執(zhí)行的可接受限制。造成這種高延遲的唯一重要因素是遠(yuǎn)程內(nèi)存隊(duì)列中的爭(zhēng)用,這是盲目地將隨機(jī)遠(yuǎn)程內(nèi)存池分配給應(yīng)用程序內(nèi)存需求的結(jié)果。在圖2(b)中可以觀察到相同的情況,該圖僅顯示了平均遠(yuǎn)程內(nèi)存延遲,不包括網(wǎng)絡(luò)延遲。我們對(duì)所有內(nèi)存訪問(wèn)進(jìn)行了探測(cè),發(fā)現(xiàn)2%的內(nèi)存訪問(wèn)(僅遠(yuǎn)程)延遲為1000納秒或更長(zhǎng)時(shí)間,導(dǎo)致了較高的平均延遲(如圖2(c)所示)。在圖2(d)中,我們展示了每150萬(wàn)個(gè)周期內(nèi)不同內(nèi)存池的內(nèi)存訪問(wèn)次數(shù)變化。通過(guò)計(jì)算在該時(shí)期內(nèi)最大和最小內(nèi)存訪問(wèn)之間的差值來(lái)計(jì)算變化。較大的變化顯示了內(nèi)存訪問(wèn)在各個(gè)內(nèi)存池之間的不平衡,導(dǎo)致了較高的尾延遲。
B. 智能空閑內(nèi)存池選擇
智能空閑內(nèi)存池選擇策略在兩個(gè)不同的步驟中執(zhí)行最佳內(nèi)存池選擇。第一步是從所有可用的內(nèi)存池中選擇一個(gè)小的子集,根據(jù)最近的內(nèi)存訪問(wèn)流量。其基本理念是,當(dāng)前流量較小的內(nèi)存池最不可能很快遇到爭(zhēng)用,因此可以當(dāng)前選擇用于更多的內(nèi)存分配。第二步是最終選擇一個(gè)已分配內(nèi)存最少的子集中的內(nèi)存池。背后的原因在于要均衡各個(gè)內(nèi)存池之間的內(nèi)存塊分配數(shù)量。此外,即使某個(gè)內(nèi)存池當(dāng)前的流量較小,如果在過(guò)去已分配了更多的內(nèi)存,它仍然可能會(huì)突然面臨來(lái)自先前分配的內(nèi)存的更多內(nèi)存請(qǐng)求。因此,選擇已分配內(nèi)存最少的內(nèi)存池不太可能面臨這種突然的訪問(wèn)。為了實(shí)施這一策略,我們使用了托管在機(jī)架頂部交換機(jī)上的全局內(nèi)存管理器,該管理器跟蹤每個(gè)遠(yuǎn)程內(nèi)存池的總內(nèi)存訪問(wèn)量。它只需要一小部分32或64字節(jié)的計(jì)數(shù)器。我們使用基于窗口的機(jī)制來(lái)測(cè)量每個(gè)池的訪問(wèn)因子(Af),通過(guò)在每個(gè)窗口開(kāi)始時(shí)測(cè)量每個(gè)池的內(nèi)存訪問(wèn)次數(shù),并計(jì)算如(1)所示的訪問(wèn)因子。這里,MemAccCount指的是窗口內(nèi)對(duì)內(nèi)存池的總內(nèi)存訪問(wèn)次數(shù)。最近的窗口具有更大的權(quán)重,以反映內(nèi)存流量的最新狀態(tài)。較低的Af值表示某個(gè)池最近面臨較少的內(nèi)存流量,因此可以選擇用于下一個(gè)內(nèi)存塊的分配。
智能空閑內(nèi)存池選擇確保了選擇一個(gè)當(dāng)前活躍度較低的池,并且在各個(gè)內(nèi)存池之間均勻分配內(nèi)存塊。假設(shè)內(nèi)存池的總數(shù)為n,智能空閑策略首先選擇一個(gè)大小為m的池子集,其中m的計(jì)算如下:m = Ceil[log2(n)]。然后,它最終選擇已分配內(nèi)存最少的內(nèi)存池。
實(shí)驗(yàn)方法和結(jié)果
我們對(duì)應(yīng)用程序的全部主內(nèi)存訪問(wèn)進(jìn)行了模擬,將它們合并以代表在機(jī)架內(nèi)運(yùn)行的多個(gè)節(jié)點(diǎn),并最終用于互連和內(nèi)存的模擬。一旦準(zhǔn)備就緒,任務(wù)就是根據(jù)引用地址模擬每個(gè)節(jié)點(diǎn)的主內(nèi)存訪問(wèn),這些訪問(wèn)可以是本地的,也可以是遠(yuǎn)程的。我們使用Intel的PIN [22]平臺(tái)進(jìn)行應(yīng)用程序分析的二進(jìn)制儀器化。我們的工具基于一個(gè)功能模擬TLB和緩存層次結(jié)構(gòu)的Allcache pin-tool進(jìn)行修改。這個(gè)基本工具經(jīng)過(guò)修改以支持多線程跟蹤收集,并為T(mén)LB/緩存未命中提供了近似時(shí)間,同時(shí)進(jìn)行了基于指令級(jí)的儀器化。我們以與[23]相同的方式收集LLC未命中數(shù)據(jù),將所有核心中的合并緩存未命中的時(shí)間戳進(jìn)行排序以組合跟蹤數(shù)據(jù)。LLC未命中數(shù)據(jù)最終提供了主內(nèi)存訪問(wèn),同時(shí)保留了應(yīng)用程序的多線程性質(zhì),其中每個(gè)記錄都包括LLC未命中的虛擬地址、時(shí)間戳、線程ID和讀/寫(xiě)訪問(wèn)類(lèi)型。跟蹤中的虛擬地址經(jīng)過(guò)模擬內(nèi)存管理單元進(jìn)行翻譯,該單元跟蹤本地和遠(yuǎn)程內(nèi)存中的頁(yè)面。對(duì)于每個(gè)頁(yè)面錯(cuò)誤,它會(huì)在本地或遠(yuǎn)程內(nèi)存中分配一個(gè)新頁(yè)面。我們還模擬了全局內(nèi)存管理器,以處理來(lái)自節(jié)點(diǎn)的遠(yuǎn)程內(nèi)存分配請(qǐng)求。
互連的模擬是一系列離散事件,其中一個(gè)事件對(duì)應(yīng)一個(gè)CPU周期。我們使用基于隊(duì)列的機(jī)制來(lái)模擬NIC和機(jī)架級(jí)互連的延遲。為了進(jìn)行NIC和機(jī)架交換機(jī)端口的模擬,我們使用了有限大小的隊(duì)列,這些隊(duì)列具備反壓擁塞控制策略,并在隊(duì)列滿時(shí)為等待的請(qǐng)求添加適當(dāng)?shù)呐抨?duì)延遲。此外,根據(jù)線長(zhǎng)和鏈路速度,我們?cè)诿總€(gè)數(shù)據(jù)包中添加了傳播延遲和傳輸延遲。每個(gè)遠(yuǎn)程內(nèi)存訪問(wèn)以網(wǎng)絡(luò)數(shù)據(jù)包的形式發(fā)送,適當(dāng)添加了打包和解包時(shí)間。一個(gè)交換機(jī)仲裁器從輸入端口的虛擬隊(duì)列中選擇就緒的數(shù)據(jù)包,以避免饑餓和頭部阻塞。最后,我們使用DRAMSim2 [24]來(lái)模擬主內(nèi)存,為此我們部署了多個(gè)實(shí)例,分別用于計(jì)算節(jié)點(diǎn)的本地內(nèi)存和內(nèi)存池中的遠(yuǎn)程內(nèi)存。來(lái)自多核前端的排序內(nèi)存訪問(wèn)有助于在代表多線程執(zhí)行的環(huán)境中進(jìn)行內(nèi)存模擬。
我們選擇了四個(gè)多線程基準(zhǔn)測(cè)試,如表I所示。每個(gè)基準(zhǔn)測(cè)試在模擬期間的內(nèi)存訪問(wèn)總數(shù)方面都有很大的變化,代表了數(shù)據(jù)中心服務(wù)器的異構(gòu)工作負(fù)載。在機(jī)架規(guī)模的實(shí)驗(yàn)中,我們使用了混合工作負(fù)載WL-Mix,該工作負(fù)載部署在64個(gè)計(jì)算節(jié)點(diǎn)和6個(gè)內(nèi)存池上,每個(gè)工作負(fù)載中包含了16個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)具備256MB的本地內(nèi)存。我們故意將內(nèi)存池?cái)?shù)量保持較少,因?yàn)槲覀兊哪繕?biāo)是測(cè)試內(nèi)存池在高工作負(fù)載情況下的最大帶寬限制。
表II總結(jié)了用于模擬的所有系統(tǒng)參數(shù)。我們?cè)诒镜貎?yōu)先和交替本地-遠(yuǎn)程頁(yè)面分配策略上執(zhí)行實(shí)驗(yàn),并與輪詢(xún)和智能空閑池選擇一起運(yùn)行。
圖3.使用本地-優(yōu)先頁(yè)面分配的平均內(nèi)存訪問(wèn)延遲
首先,我們討論了輪詢(xún)池選擇的本地優(yōu)先頁(yè)面分配。如圖3(a)所示,該圖展示了不同模擬時(shí)間點(diǎn)的累積平均內(nèi)存訪問(wèn)延遲,黑色標(biāo)記表示本地內(nèi)存不再可用。盡管與隨機(jī)池選擇相比,結(jié)果顯示平均訪問(wèn)延遲大幅減少,但仍然很高,特別是對(duì)于lbm和fotonik。這是因?yàn)檫@兩個(gè)基準(zhǔn)測(cè)試將大多數(shù)內(nèi)存訪問(wèn)發(fā)送到遠(yuǎn)程內(nèi)存。fft和fmm的平均延遲也不足以維持足夠的應(yīng)用程序速度。另一方面,如圖3(b)所示,智能空閑策略改善了平均延遲,改進(jìn)幅度相當(dāng)大。盡管在epoch4之后在某種程度上出現(xiàn)一些延遲,但沒(méi)有一個(gè)基準(zhǔn)測(cè)試在整個(gè)過(guò)程中都面臨嚴(yán)重的遠(yuǎn)程內(nèi)存隊(duì)列爭(zhēng)用,盡管如此,智能空閑策略仍然保持了較低的平均延遲。即使使用本地優(yōu)先分配,延遲對(duì)于所有基準(zhǔn)測(cè)試也只是逐漸增加,這是適當(dāng)?shù)呢?fù)載平衡的結(jié)果。圖3(c)顯示了輪詢(xún)和智能空閑池選擇的內(nèi)存池的累積平均內(nèi)存訪問(wèn)延遲(不包括網(wǎng)絡(luò)延遲),這與上述結(jié)果完全一致。由于在中間突然爆發(fā)了大量?jī)?nèi)存請(qǐng)求,輪詢(xún)無(wú)法完美地處理這些請(qǐng)求在內(nèi)存池之間的平衡。然而,通過(guò)智能空閑策略,塊分配被設(shè)計(jì)成幾乎平均地分配到多個(gè)池中,這就是為什么它給出了更好的結(jié)果。
(b)智能空閑池選擇
圖4.使用本地-遠(yuǎn)程頁(yè)面交替分配的平均內(nèi)存訪問(wèn)延遲
接下來(lái),我們通過(guò)交替的本地-遠(yuǎn)程分配來(lái)測(cè)量性能,如圖4所示。如預(yù)期的那樣,一旦本地內(nèi)存用完,所有基準(zhǔn)測(cè)試的延遲都會(huì)逐漸增加,而不會(huì)出現(xiàn)遠(yuǎn)程內(nèi)存訪問(wèn)的突然激增。令人驚訝的是,輪詢(xún)和智能空閑策略的表現(xiàn)相對(duì)于本地優(yōu)先策略而言更好。這并沒(méi)有顯示最初沒(méi)有專(zhuān)有訪問(wèn)快速本地內(nèi)存的太大影響,盡管lbm和fmm具有較大的內(nèi)存占用量,它們?nèi)阅軌颢@得足夠好的平均內(nèi)存延遲??偟膩?lái)說(shuō),我們看到了相同的趨勢(shì),智能空閑策略比輪詢(xún)更好。但是,這次的延遲差異較小。這些結(jié)果表明,交替的本地-遠(yuǎn)程頁(yè)面分配與智能空閑池選擇相結(jié)合,可以?xún)?yōu)化整體平均內(nèi)存延遲,如圖4(b)所示。
圖5.基于訪問(wèn)時(shí)間的遠(yuǎn)程內(nèi)存訪問(wèn)分布和本地/遠(yuǎn)程/網(wǎng)絡(luò)時(shí)間的延遲分析 深入分析了所有遠(yuǎn)程內(nèi)存訪問(wèn)的完成時(shí)間,如圖5(a)所示。這里的延遲僅包括內(nèi)存請(qǐng)求到達(dá)遠(yuǎn)程內(nèi)存并完成內(nèi)存訪問(wèn)所需的時(shí)間。不同顏色的條形圖表示根據(jù)其訪問(wèn)延遲完成的內(nèi)存訪問(wèn)數(shù)量。盡管使用隨機(jī)池選擇會(huì)導(dǎo)致較高的延遲,但輪詢(xún)池選擇策略將其降低。許多內(nèi)存請(qǐng)求的延遲超過(guò)了500納秒(黃色、淺藍(lán)色和綠色的條形圖)。輪詢(xún)策略未能充分平衡不同內(nèi)存池之間的內(nèi)存流量,從而導(dǎo)致了這些高延遲。智能空閑池選擇策略結(jié)合了本地-遠(yuǎn)程交替頁(yè)面分配,相對(duì)于簡(jiǎn)單的輪詢(xún)策略,可以更好地減少尾延遲。圖表顯示,只有很少的訪問(wèn)需要超過(guò)500納秒才能完成。
圖5(b)展示了所有內(nèi)存訪問(wèn)的總體延遲分解。智能空閑策略的網(wǎng)絡(luò)延遲相對(duì)較低,因?yàn)閮?nèi)存請(qǐng)求均勻分布在連接內(nèi)存池的多個(gè)鏈路上。然而,不同策略在各個(gè)基準(zhǔn)測(cè)試中的平均遠(yuǎn)程內(nèi)存訪問(wèn)時(shí)間存在很大的差異。
結(jié)論與未來(lái)工作
在本文中,我們研究了機(jī)架規(guī)模的內(nèi)存解耦系統(tǒng),這些系統(tǒng)提供了更靈活的內(nèi)存利用方式,但也伴隨一些開(kāi)銷(xiāo)。通過(guò)我們的實(shí)驗(yàn),我們還研究了遠(yuǎn)程內(nèi)存訪問(wèn)延遲。當(dāng)使用傳統(tǒng)池選擇策略時(shí),遠(yuǎn)程內(nèi)存的內(nèi)存隊(duì)列高度爭(zhēng)用成為主要問(wèn)題。我們提出的智能空閑池選擇策略通過(guò)均勻分配內(nèi)存流量負(fù)載到所有內(nèi)存池中,以抵消高尾延遲,并提供更平衡的本地和遠(yuǎn)程內(nèi)存的平均訪問(wèn)延遲。此外,我們還討論了一些優(yōu)化方法,如遠(yuǎn)程預(yù)取或?qū)㈨?yè)面從遠(yuǎn)程遷移到本地內(nèi)存,這些方法可以用于掩蓋遠(yuǎn)程內(nèi)存延遲。內(nèi)存解耦系統(tǒng)需要從共享的遠(yuǎn)程內(nèi)存中策略性地選擇頁(yè)面進(jìn)行遷移,這將成為我們未來(lái)工作的一部分。
-
數(shù)據(jù)中心
+關(guān)注
關(guān)注
16文章
4630瀏覽量
71888 -
架構(gòu)
+關(guān)注
關(guān)注
1文章
506瀏覽量
25430 -
模擬器
+關(guān)注
關(guān)注
2文章
862瀏覽量
43128
原文標(biāo)題:數(shù)據(jù)中心機(jī)架級(jí)內(nèi)存解耦架構(gòu)的設(shè)計(jì)與評(píng)估
文章出處:【微信號(hào):SDNLAB,微信公眾號(hào):SDNLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論