Source: Shao-Peng Yang, Minjae Kim, Sanghyun Nam, Juhyung Park, Jin-yong Choi, Eyee Hyun Nam, Eunji Lee, Sungjin Lee, Bryan S. Kim, Overcoming the MemoryWall with CXL-Enabled SSDs, July 10, 2023
本文探討了使用廉價閃存內存(flash memory)在新型互連技術(如CXL)上以應對“內存墻”的可行性。我們探索了CXL啟用的閃存設備的設計空間,并展示了緩存和預取等技術可以幫助緩解有關閃存性能和壽命的擔憂。我們通過使用真實世界的應用程序跟蹤數據展示,這些技術使得CXL設備的估計壽命至少為3.1年,并能在微秒級內滿足68-91%的內存請求。我們分析了現有技術的局限性,并提出了系統層面的變更來實現使用閃存的DRAM級性能。
01.?引言
在計算系統中,計算能力和內存容量需求之間的日益不平衡發展成為一個稱為“內存墻”的挑戰[23,34,52]。圖1基于Gholami等人的數據[34],并擴展了更多的最新數據[11,30,43],展示了自然語言處理(NLP)模型的快速增長(每年14.1倍),遠遠超過了內存容量的增長(每年1.3倍)?!皟却鎵Α逼仁宫F代數據密集型應用,如數據庫[8,10,14,20]、數據分析[1,35]和機器學習(ML)[45,48,66],要么意識到它們的內存使用情況[61],要么實現用戶級內存管理[66]以避免昂貴的頁面交換[37,53]。因此,在透明處理應用程序的情況下突破“內存墻”是一個活躍的研究領域;已經積極探索了一些方法,如創建面向ML系統[45,48,61],構建內存解耦合框架[36,37,52,69]和設計新的內存架構[23,42]。
圖1: NLP應用程序內存需求的趨勢 [11,30,34,43]。每年參數數量增加了14.1倍,而GPU的內存容量每年只增長了1.3倍
我們探討了是否可以使用閃存內存來突破“內存墻”——這是一種通常用于存儲的內存技術,因為其具有高密度和容量擴展性[59]。雖然DRAM只能擴展到幾GB的容量,但基于閃存的固態硬盤(SSD)可達到TB級的容量[23],足夠大以應對“內存墻”的挑戰。閃存內存作為主內存的使用得益于最近出現的諸如CXL[3]、Gen-Z[7]、CCIX[2]和OpenCAPI[12]的互連技術,它們允許通過load/store指令直接由CPU訪問PCIe(Peripheral Component Interconnect Express)設備。此外,這些技術承諾具有出色的可擴展性,因為可以通過交換機連接更多的PCIe設備[13],而不像用于DRAM的DIMM(雙列直插式內存模塊)。
然而,將閃存內存作為CPU可訪問的主內存面臨著三個主要挑戰。
首先,內存請求與閃存內存之間存在顆粒度不匹配。這導致了在閃存上需要存在明顯的流量放大,除了已有的閃存間接性需求[23,33]之外:例如,將64B的緩存行刷新到CXL啟用的閃存,將導致16KiB的閃存內存頁面讀取、64B更新和16KiB的閃存程序寫入到另一個位置(假設16KiB的頁面級映射)。
其次,閃存內存的速度仍然比DRAM慢幾個數量級(幾微秒對比幾納秒)[5,24]。因此,雖然兩種技術之間的峰值數據傳輸速率相似[4,15],但長時間的閃存內存延遲阻礙了持續性性能,因為數據密集型應用最多只能容忍微秒級的延遲[53]。
最后,閃存內存具有有限的耐久性,在經過多次寫入后會磨損[24,44]。這限制了內存技術的可用性,因為超過耐久性限制的閃存內存塊會表現出不可靠的行為和高錯誤率[44]。 ?
我們通過探索設計選擇來解決上述閃存內存的挑戰,特別是與緩存和預取相關的選項,從而使得CXL啟用的閃存設備(或稱為CXL-flash)能夠克服“內存墻”。盡管之前的研究已經探討了多個CXL設備的可擴展性方面 [36,42],并且已經證明了CXL-flash的可行性 [9,42],但據我們所知,我們是第一個對CXL-flash設備的設計選擇以及現有優化技術的有效性進行深入開源研究的工作。由于設計空間很大,我們首先在第4節中探索了CXL-flash硬件設計,然后在第5節中對詳細策略和算法進行評估和分析。我們發現可以使用真實應用程序的內存跟蹤數據設計CXL-flash,使得68-91%的請求可以在微秒級內實現延遲,并具有至少3.1年的估計壽命。在探索各種設計和策略的同時,我們進行了七項觀察,這些觀察共同表明現代預取算法不適合預測CXL-flash的內存訪問模式。更具體地說,虛擬地址到物理地址的轉換使得現有的預取器無法足夠有效地執行。為了解決這個問題,我們探索了從內核向CXL-flash傳遞內存訪問提示來進一步提高性能。本工作的貢獻如下:
我們開發了一種新型工具,用于收集應用程序的物理內存訪問軌跡,并用這些軌跡模擬了CXL-flash的行為。內存跟蹤工具和CXL-flash模擬器的代碼都可以在(https://github.com/spypaul/MQSim_CXL.git)上獲取。
通過使用合成工作負載,我們展示了將各種系統設計技術(如緩存和預取)集成到CXL-flash中,有潛力顯著減少延遲,同時突顯了優化的機會。(第4節)
使用真實世界的工作負載,我們分析了當前預取器的局限性,并提出了用于未來CXL-flash的系統級變更,以實現接近DRAM的性能,特別是設備的子微秒級延遲。(第5節)
02.?背景
在本節中,我們首先描述了CXL(Compute Express Link)[3]作為基于PCIe的內存一致性互連技術(包括Gen-Z [7]、CCIX [2]和OpenCAPI [12])所帶來的機遇。然后,我們討論了在CXL中使用閃存內存的挑戰。 2.1 CXL帶來的機遇 CXL是一種建立在PCIe之上的新型互連協議,將CPU、加速器和內存設備集成到單一計算域中 [42]。這種集成的主要好處有兩個。
首先,它允許CPU和PCIe設備之間進行一致的內存訪問。這減少了通常需要在CPU和設備之間進行數據傳輸時所需的同步開銷。
其次,CXL設備的數量可以很容易地進行擴展:通過CXL交換機,可以連接另一組CXL設備到CPU。 ?
在CXL支持的三種類型的設備中,對于內存擴展的Type 3設備對本工作是感興趣的。Type 3設備公開了主機管理的設備內存(HDM,host-managed device memory),CXL協議允許主機CPU通過load/store指令直接操作設備內存 [3]。雖然CXL目前只考慮DRAM和PMEM作為主要的內存擴展設備,但由于CXL的一致性內存訪問特性[42],使用SSD也是可能的。 此外,基于閃存的SSD的高容量和更好的擴展性,通過3D堆疊[59]和在一個單元中存儲多位[24],可以有效地解決現代數據密集型應用所面臨的“內存墻”問題。受之前關于CXL的工作的啟發[36,42],本文研究了使用閃存內存作為CXL內存擴展設備的可行性。 2.2 閃存的挑戰 我們討論以下三個閃存的特點,這使得將其用作系統的主內存具有挑戰性。 粒度不匹配。閃存不是隨機訪問的:其數據以頁粒度寫入和讀取,每個頁的大小約為幾千字節[33],導致大量的流量放大。此外,頁不能被覆蓋寫入。相反,必須首先擦除一個包含數百個頁的塊,然后才能寫入數據到已擦除的頁[33]。這種受限的接口導致任何64B緩存行刷新通過讀取-修改-寫入操作產生大量的寫放大。作為一個塊設備,其訪問粒度要大得多(4KiB)的SSD擁有更少的開銷。 微秒級延遲。閃存的速度比DRAM慢幾個數量級,其讀取速度仍在幾十微秒范圍內,而較慢的編程和擦除操作則在幾百微秒到幾千微秒之間[5,24]。此外,閃存的延遲還取決于其單元技術[24]。例如,表1中所示,隨著每個單元存儲的位數增加,從SLC(單級單元)到TLC(三級單元),延遲也會增加。超低延遲(ULL)閃存是SLC的一種變體,以性能為代價提高了密度[46,76]。然而,即使是ULL技術,其速度仍比DRAM慢幾個數量級。作為一個塊設備,微秒級的延遲是可以容忍的,因為存儲棧中存在軟件開銷。然而,對于直接使用load/store指令訪問的內存設備來說,微秒級延遲是一個挑戰。
表1: 內存技術特性概述
有限的耐久性。編程和擦除操作期間施加在閃存上的高電壓會慢慢使單元失效,使它們隨著時間的推移無法使用[44,72]。存儲器制造商規定了耐久性極限作為一個指導,表示閃存塊可以被擦除的次數。這個限制也取決于閃存技術,如表1所示。雖然這仍然是一個軟限制,閃存超過限制后仍然可以繼續使用[72],但是磨損的塊表現出不可靠的行為,并且不能保證正確存儲數據[44]。由于應用程序級和內核級的緩存和緩沖,SSD的塊接口的寫入量減少,因此當前的耐久性限制在SSD的壽命內通常是足夠的。然而,作為內存設備,頻繁的內存寫入會使閃存內存快速變得無法使用。 我們注意到,雖然這些閃存的挑戰在存儲領域中也存在,但是它們由SSD的內部固件處理。然而,對于CXL-flash,由于時間尺度更細,這些挑戰應該由硬件來解決,這使得實現靈活和優化的算法變得困難。因此,我們預期將閃存內存從存儲領域移動到內存領域時,這些挑戰會加劇。
03.?工具和方法
為了理解CPU到CXL設備的物理內存訪問行為,我們使用頁面錯誤事件構建了一個物理內存跟蹤工具(第3.1節)。然后,我們通過與一組虛擬內存跟蹤(第3.2節)進行比較,展示了這個工具的必要性。本工作中生成的工具和數據可供公眾使用。 3.1 跟蹤內存訪問 主內存和CXL-flash通過物理內存地址進行訪問。不幸的是,據我們所知,沒有公開可用的工具能夠在沒有硬件修改的情況下跟蹤最后一級緩存(LLC)和內存控制器之間的物理內存事務。跟蹤CPU中的load/store指令是不夠的,因為(1)它只收集虛擬地址訪問,(2)最終對CXL-flash的訪問被緩存層次結構過濾掉。
圖2: 收集物理內存跟蹤的工作流程。我們使用Valgrind收集虛擬內存跟蹤,并在緩存中模擬其行為。同時,我們捕獲頁面故障事件以跟蹤頁面表的更新,并用此生成物理內存跟蹤 我們通過結合來自Valgrind [19,57]的內存跟蹤和頁面錯誤事件信息來跟蹤物理內存訪問。圖2說明了這個工作流程。如圖頂部路徑所示,我們使用 Valgrind 對應用程序進行load/store指令的工具化,并使用其緩存模擬器 (Cachegrind) 來過濾對內存的訪問。更具體地說,我們修改了Cachegrind以收集由LLC缺失或替換引起的內存訪問。然而,Cachegrind產生的這些內存訪問仍然是虛擬地址,因此需要虛擬到物理(V2P)映射信息來生成物理內存跟蹤。為此,如圖2底部路徑所示,我們收集應用程序運行時由頁面錯誤引起的頁表更新。我們修改安裝頁面表項的內核函數(do_anonymous_page()和do_set_pte()),并將目標應用程序的PID的V2P轉換存儲在/proc文件系統中。這捕獲了應用程序執行過程中頁面表更新的動態特性,并且開銷很小。我們將來自Valgrind的虛擬訪問和頁面表更新結合起來生成物理內存跟蹤。 3.2 虛擬內存與物理內存訪問 我們使用基于預取技術的前期工作[25, 56]中的五個合成應用程序來展示我們的物理內存跟蹤工具。所收集的跟蹤特性總結如表2所示。我們收集了前2000萬次內存訪問:請注意這些不是load/store指令,而是LLC和內存之間的內存事務。
表2: 合成工作負載特性概述
圖3: 顯示五個合成應用程序(哈希映射、矩陣乘法、最小堆、隨機訪問和步幅訪問)的訪問模式的散點圖。頂行(圖3a–3e)顯示虛擬地址訪問,第二行(圖3f–3j)顯示物理訪問。最后一行(圖3k–3o)顯示連續訪問之間差異的累積分布函數。我們觀察到由于地址轉換,物理內存訪問與虛擬內存訪問不同 圖3a-3e(圖3的第一行)繪制了這五個合成跟蹤的虛擬頁號(VPN,virtual page number)。我們可以觀察到虛擬地址訪問模式與我們對應用程序的期望相匹配。然而,如圖3f-3j(圖3的第二行)所示,相應的物理幀號(PFN)并不類似于VPN。我們在圖3k-3o(圖3的最后一行)中顯示了連續訪問之間的差異(?,delta)。黑色虛線是虛擬地址的delta,而灰色實線是五次迭代的物理地址的delta,其中兩次迭代是在運行其他應用程序時運行的,以增加內存利用率。我們做出兩個觀察。 首先,虛擬訪問模式(黑色虛線)平均具有較小的delta值。然而,物理訪問模式(灰色實線)可能具有非常大的delta值,這是由于虛擬到物理地址轉換所致。 其次,灰色實線很少彼此重疊,突顯物理內存模式是動態的,并取決于影響內存分配的各種運行時因素。因此,物理和虛擬地址之間的觀察到的不匹配可能受到動態因素的影響,如系統的內存利用率。 為了證明捕獲物理內存跟蹤的必要性,我們通過使用虛擬地址和物理地址跟蹤作為輸入來測量CXL-flash的性能。CXL-flash的配置是具有8個通道和每個通道8個路的閃存后端以及512MiB DRAM緩存,并實現Next-N-line預取器[41](更多詳細信息見第4節)。我們測量了五個合成應用程序的內存請求在小于1微秒的延遲下的百分比,并在表3中報告了結果。使用虛擬內存跟蹤生成了一個過于樂觀的結果,相較于運行物理內存跟蹤的結果,更多的請求在1微秒以下完成。虛擬地址和物理地址之間的誤差顯著較高:所有的矩陣乘法實驗的誤差都超過了25%。隨機和步幅訪問負載的誤差率較低,使得無論是虛擬還是物理尋址,都很難或者太容易預測訪問模式。
表3: 使用虛擬和物理地址跟蹤的合成應用程序在CXL閃存中的亞微秒延遲百分比。我們重復五次物理跟蹤生成,其中第4和第5次具有更高的系統內存利用率(因此,內存布局更加碎片化)。我們計算虛擬跟蹤性能相對于物理跟蹤的誤差,并用黃色(黃色)標記超過10%的錯誤,用紅色(紅色 )標記超過25%的錯誤。 減輕地址轉換過程中信息的變化的一種技術是利用大頁面,這可以顯著減少地址轉換的數量[54, 58]以保留內存訪問模式。然而,這種方法只能部分減少對系統的影響,并且地址轉換是不可避免的。隨著應用程序內存需求的快速增長(如圖1所示,年均增長率為14.1倍),在幾年內,大頁面將面臨與較小頁面相同的挑戰。因此,我們決定保持配置的通用性,以探索CXL-flash的設計選項。
04.?CXL-flash 的設計空間
我們探索構建CXL-flash的設計空間,特別是其中的硬件模塊;我們稍后在第5節中評估算法和策略。為了模擬硬件,我們基于MQSim [68]及其擴展MQSim-E [49]構建了一個CXL-flash模擬器,并使用五個合成應用程序的物理內存跟蹤(表2)來評估設計選項的效果。我們的CXL-flash的整體架構如圖4所示,并在表4中展示了初始配置。 本節中,我們回答以下研究問題。
緩存在提高性能方面的效果如何?(第4.1節)
如何有效地減少閃存內存流量?(第4.2節)
預取在隱藏長閃存內存延遲方面的效果如何?(第4.3節)
CXL-flash的合適閃存技術和并行性是什么?(第4.4節)
圖4: CXL閃存的體系結構。
表4: §4中CXL閃存的初始配置。
4.1 緩存對性能的影響
我們首先探索在閃存前添加DRAM緩存的效果。緩存主要有兩個作用。
首先,它通過從更快的DRAM中提供頻繁訪問的數據來提高CXL-flash的性能。
其次,它在緩存命中時減少對閃存的整體流量。 ?
圖5: 隨著DRAM緩存大小變化的64B讀寫請求的平均訪問延遲(圖5a)和閃存內存流量(圖5b)。通常情況下,緩存可以提高性能并減少對閃存的流量。然而,即使有足夠大的緩存,平均延遲仍然遠高于DRAM,這是由于內存訪問的高強度造成的。 圖5定量展示了使用緩存的好處。我們將緩存大小從0變化到8GiB,并測量物理內存訪問的平均延遲(圖5a)和發送給后端的閃存內存請求的間隔時間(圖5b)。當沒有緩存時,由于排隊延遲,平均延遲遠高于閃存的讀取和編程延遲。即使閃存后端的配置是每個通道32個通道和每個通道32個路的豐富并行性,但它仍不足以處理具有短間隔時間的內存請求。添加緩存顯著減少了對閃存后端的流量,并改善了整體性能。然而,我們觀察到圖5a中,矩陣乘法和最小堆的平均延遲仍遠高于DRAM的延遲,盡管這些工作負載的內存占用小于緩存。這是由于短間隔時間的請求導致了超負荷的閃存后端獲取數據(圖5b)。這個實驗表明,僅僅使用緩存是不足以降低CXL-flash的延遲的,我們需要額外的輔助結構來減少對閃存的流量。
4.2 減少閃存內存流量
內存訪問以64B的粒度進行,而閃存后端以4KiB為單位進行尋址。因此,在緩存未命中時,將從閃存中獲取4KiB的數據,并且屬于同一4KiB的后續64B緩存未命中將在閃存讀取正在進行時產生額外的閃存內存讀取請求。這種情況在具有高空間局部性的內存訪問中非常常見,并且由于更長的閃存延遲而加劇。我們將其稱為重復讀取,圖6說明了哈希圖,矩陣乘法和堆工作負載中重復讀取的嚴重性:超過90%的閃存讀取是重復讀?。?/p>
圖6: 物理內存幀的閃存讀取次數。實心條表示總的讀取次數,而陰影條表示重復讀取次數。重復讀取是對尚未完成的讀取請求的讀取請求。
圖7: 使用(實線)和不使用(虛線)MSHR的延遲分布。 受到CPU緩存的啟發,我們向CXL-flash中添加了一組MSHR(miss status holding registers)[29, 47],如圖4所示。MSHR跟蹤當前未完成的閃存內存請求,并從單個閃存內存讀取服務多個64B內存訪問。我們注意到,在SSD中MSHR很少見:在存儲領域中,軟件棧合并具有重疊地址的塊I/O,因此不需要底層設備實現MSHR。然而,對于CXL-flash,沒有軟件層來執行此任務,因為它直接從LLC接收內存事務。我們觀察到,圖7中的MSHR顯著降低了長尾延遲,特別是對于具有大量重復讀取的三個工作負載。我們還觀察到,通過添加MSHR,對于其他兩個工作負載(隨機和步幅),也會有輕微的改進。然而,MSHR只能減少閃存內存流量,并不能通過在需要數據之前將數據帶入緩存來主動提高緩存命中率。
4.3 從閃存預取數據
預取(Prefetching)是一種隱藏較慢技術長延遲的有效技術。通常,預取器在需要未命中或預取命中時獲取額外的數據。為了了解這種技術的有效性,我們在CXL-flash中實現了一個簡單的Next-N-line預取器[41],如圖4所示。該預取器有兩個可配置的參數:度和偏移量。度控制獲取的額外數據量,而偏移量決定了觸發地址的預取地址。換句話說,度參數表示預取器的侵略性,偏移量控制預取器提前獲取數據的距離。
圖8: 具有不同預取器配置的CXL閃存的性能。
(X, Y)表示Next-N-line預取器的度和偏移。 圖8顯示了不同度和偏移量對預取器的影響。在一個以4KiB頁數為單位的(X,Y)符號中,X表示度,Y表示偏移量。如圖8a所示,增加度或者預取器的侵略性通常會提高性能。即使是小的度數1,也會將矩陣乘法工作負載中的小于一微秒請求的比例從64%提高到76%,凸顯了CXL-flash的預取的必要性。然而,改進效果會達到平臺,進一步增加度數可能只會污染緩存。另一方面,增加偏移量會導致兩種不同的行為,這取決于工作負載。對于哈希圖,矩陣乘法和最小堆工作負載,增加偏移量從4增加到16時性能首先會有所改善。然而,偏移量為64時性能下降,因為它預取了太遠的數據。隨機工作負載對偏移量不敏感,除非它足夠大,而步幅工作負載則隨著偏移量的增加逐漸改善。
4.4 探索閃存技術和并行性
在之前的子章節中,我們使用SLC閃存技術和豐富的閃存并行性(每個通道32個通道和每個通道32個路,32×32)檢驗了CXL-flash的性能。在本節中,我們研究技術(ULL,SLC,MLC和TLC)和并行性(8×4,8×8,16×16和32×32)對整體CXL-flash性能的敏感性。 首先,我們通過使用步幅工作負載(如圖9所示)來研究閃存技術和緩存大小的影響。我們選擇這個工作負載是因為它在默認配置下表現良好,因此我們期望它代表了具有最小改進空間的工作負載。圖9a說明了不同內存技術的平均延遲。我們觀察到,即使ULL和SLC閃存的延遲存在顯著差異(3微秒對25微秒),在存在緩存的情況下,兩者之間的性能差異是可以忽略的。只有當沒有DRAM緩存時,ULL閃存的性能明顯更好。我們還觀察到使用MLC和TLC技術會顯著降低性能。圖9b顯示了基于閃存寫入流量估算的CXL-flash的預計壽命。這個估算考慮了耐用性限制、容量和數據寫入量;它樂觀地假設閃存后端的寫放大可以忽略。我們觀察到,通過使用ULL和SLC技術以及一些緩存,CXL-flash的壽命可以達到4年以上。增加緩存大小進一步提高壽命,因為閃存寫入流量減少。對于基于MLC和TLC的CXL-flash來說,只有使用足夠大的緩存才是可行的:只有1GiB的緩存,其壽命不會超過一年。
圖9: 對CXL閃存性能和壽命的閃存技術和緩存大小敏感性測試。
圖10: 不同閃存并行性和緩存大小的亞微秒請求百分比。x軸表示閃存內存并行性(通道數×路數)。線表示不同緩存大小的值。 接下來,我們通過使用隨機(圖10a)和步幅(圖10b)工作負載來研究不同閃存并行性和緩存大小對整體性能的影響。我們選擇這兩個工作負載,因為它們具有最大的內存占用(分別為8GiB和4GiB)。這里閃存技術是SLC。我們觀察到,對于足夠大的緩存,減少并行性為(8×4)并不會對性能產生不利影響。然而,對于較小的緩存,閃存并行性很重要。有趣的是,這兩個工作負載表現出略微不同的行為。隨機工作負載對緩存大小非常敏感。另一方面,步幅工作負載對緩存大小不敏感,但對并行性更敏感。這是由于步幅工作負載中的預取器的有效性。
4.5 結論摘要
我們簡要總結以下研究結果:
僅僅使用緩存無法隱藏較長的閃存內存延遲(§4.1),我們需要輔助結構來減少閃存內存流量(§4.2)。
預取數據可以提高CXL-flash的性能,但最佳配置(甚至算法)取決于工作負載(§4.3)。
在性能和壽命方面,使用ULL和SLC之間的性能差距僅微不足道,而利用MLC和TLC閃存具有挑戰性(§4.4)。
05.?策略評估
在上一節(§4)對CXL-flash架構的設計空間進行探索的基礎上,本節中我們評估了高級緩存和預取策略。我們選擇了五個來自各個領域的內存密集型真實應用程序:自然語言處理[18,70]、圖處理[6,27]、高性能計算[17,62]、SPEC CPU[16,21]和KV存儲[22,31]。我們使用我們的工具(§3)收集物理內存訪問追蹤,并在表5中總結了工作負載特性。
表5: 實際應用程序的工作負載特性。空間和時間局部性值的范圍在0到1之間,并使用棧和塊親和性度量[32]計算:較高的值表示較高的局部性。 然而,真實應用程序的內存占用比我們預期的要小,盡管它們是在64GiB內存的計算機上收集的。因此,我們故意將緩存配置為較?。?4MiB),以便實驗結果能夠擴展到更大的工作負載。我們還將閃存并行性縮小到更現實的設置,并使用ULL閃存。本節中CXL-flash的默認參數在表6中總結。
表6: §5中CXL閃存的默認參數。
5.1 緩存替換策略
與先前對性能的緩存大小檢查(§4.1)不同,這里我們固定緩存大小,評估不同緩存替換策略在不同的集合關聯性下的影響。特別地,我們實現了以下四種策略。
FIFO:剔除最舊的數據。
隨機:隨機選擇數據剔除。
LRU:剔除最近最少使用的數據。
CFLRU [60]:優先剔除干凈數據而不是已修改的數據。 ?
我們選擇隨機作為基準線,FIFO和LRU是兩種可以在硬件中實現的標準CPU緩存策略。為了進一步減少流量并延長設備的壽命,我們實現了CFLRU,以探索優先選擇剔除干凈緩存行以減少閃存寫入活動的好處。 圖11衡量了具有小于一微秒延遲的CXL-flash內存請求的百分比,圖12顯示了閃存內存寫入次數。從這些圖表中我們得出五個觀察結果。 首先,增加關聯性會提高性能,因為它會增加緩存命中率。對于緩存系統,其失效開銷很高,增加命中率比減少命中時間對性能影響更大。 其次,CFLRU的表現優于其他替換策略,特別是在BERT,XZ和YCSB中(圖11a,圖11d和圖11e)。這得到了圖12a,圖12d和圖12e中顯示的寫流量的顯著減少的支持。 第三,具有高局部性的工作負載,如Radiosity,對緩存替換策略不敏感(圖11c和圖12c):至少有83%的請求具有小于一微秒的延遲,無論采用何種策略。 第四,以讀為主的工作負載通常比以寫為主的工作負載表現更好,因為閃存內存編程延遲相對于讀取延遲偏大。BERT和Radiosity只產生了0.7M和1.0M閃存寫入次數(圖12a和圖12c),因此其小于一微秒延遲的占比分別達到了84%和85%(圖11a和圖11c)。 最后,局部性較低的工作負載不僅性能較差,而且對緩存策略的敏感性較低。特別是,如圖11b所示,僅有最多65%的請求在頁面排名工作負載中實現小于一微秒的延遲,因為其局部性較低且內存占用較大。圖11d中的XZ跟蹤也表現出較低的局部性,但對于CFLRU的敏感性比頁面排名工作負載高,因為工作負載具有較高的寫入比例。
圖11: 基于緩存替換策略和關聯性的CXL閃存亞微秒延遲百分比。通常情況下,增加關聯性可以減少延遲,而CFLRU表現比其他策略更好。
圖12: 基于緩存替換策略和關聯性的閃存寫請求數量。隨著關聯性的增加,CFLRU顯著減少寫入次數。 在存儲領域,通過各種軟件層面的技術,包括操作系統級別的頁緩存,可以減少寫入SSD的數據量。然而,CXL-flash的緩存管理行為類似于CPU緩存,并且可能存在其接近最優狀態的限制。
5.2 預取策略
在 §4.3 中,我們測量了一個簡單的Next-N-line預取器在大型8GiB緩存下的有效性。在本節中,我們將緩存縮小為64MiB,并將其關聯性設置為16,并使用CFLRU算法進行管理,并測量以下五種預取器設置的性能。
NP(無預取)不預取任何數據。
NL(Next-N-line)[41]在需要缺失或預取命中時帶來下N個數據。
FD(反饋導向)[65]通過跟蹤預取器的準確性,及時性和污染來動態調整預取器的攻擊性。
BO(最佳偏移)[55]通過跟蹤最近請求歷史記錄中的連續訪問之間的差異來學習。它還具有禁用預取的置信度概念。
LP(Leap)[53]實施基于多數的預取,并具有動態窗口大小調整。它還根據預取器的準確性逐漸調整攻擊性。 ?
我們選擇這些算法是因為它們已被證明是有效的,可以在硬件中實現,并且適用于CXL-flash的設計空間。特別是,NL,FD和BO是用于CPU緩存的預取器,其中BO是NL的改進版本,而FD利用我們將在后面討論的性能指標。LP主要用于從遠程內存預取數據,其中緩存命中和緩存缺失之間的延遲差異與我們的設計空間相似。
觀察1:盡管68-91%的請求延遲小于一微秒,但使用預取器可能會對真實世界的應用性能產生不利影響。如圖13a所示,最先進的預取器對BERT、XZ和YCSB工作負載的性能產生了負面影響,而對另外兩個工作負載則有所幫助。特別是,在使用最佳偏移預取器時,Radiosity顯示出36%的子微秒延遲增加。為了理解其中原因,我們檢查了緩存命中率、緩存命中-未命中(HUM)率和缺失率(圖13b)。緩存命中-未命中指的是MSHR中的命中,在此之前由于先前的缺失而正在獲取數據的情況。我們觀察到在Radiosity上,BO將25%的緩存命中-未命中轉換為命中,表明預取對局部性因子高的工作負載(參見表5)具有很高的有效性。我們的觀察結果表明,預取器的性能取決于工作負載的特性,并且它們可能對應用產生不利影響。
圖13: 具有不同預取器的CXL閃存性能和壽命。圖13a顯示延遲小于一微秒的請求占比。圖13b顯示CXL閃存內64MiB緩存的命中、命中下未命中和未命中率。圖13c繪制了估計的壽命。
觀察2:即使在高強度的工作負載下,CXL-flash的壽命至少為3.1年。我們根據寫入閃存的數據量、耐用限制和1TiB容量估計了CXL-flash在真實工作負載下的壽命,如圖13c所示。我們觀察到,在最壞的情況下,設備在Page Rank下可持續使用3.1年,但在Radiosity等工作負載下可達403年。壽命取決于三個因素:工作負載強度、讀寫比例和局部性;Page Rank具有最高的工作負載強度、高寫入比例和低局部性。即使在這種不利條件下,CXL-flash提供了合理的壽命;因此,CXL-flash的耐久性可以滿足內存請求的強度。
觀察3:CXL-flash比純DRAM設備具有更好的性能成本比。盡管CXL-flash在子微秒請求方面稍遜于DRAM,但我們的分析顯示它有潛力為內存密集型應用程序提供優勢。由于CXL-flash可以在小于一微秒的延遲下為68-91%的內存請求提供服務,而最近DRAM的價格點比NAND閃存高17-100倍[39,64,77],我們預計CXL-flash比純DRAM設備具有11-91倍的性能成本效益,如圖14所示。雖然在某些情況下,當需要最佳性能時,仍然可能更喜歡純DRAM設備,但根據工作負載的不同,CXL-flash可能是一種具有成本效益的內存擴展選項。 有趣的是,我們觀察到,雖然預取器對Page Rank有益,但其性能總體上是最差的,只有最多68%的請求在一微秒內完成。為了進一步了解預取器的性能,我們測量了以下四個指標。
準確性衡量預取器實際使用的預取數據比例。較高的準確性越好。
覆蓋度是內存請求中預取數據緩存命中的部分。較高的覆蓋度意味著緩存命中歸功于預取器,而較低的覆蓋度則表示預取器沒有發揮作用。
延遲是所有預取數據中遲到的比例。較低的延遲越好。
污染是由預取器引起的緩存缺失中的緩存缺失次數。較低的污染越好。
圖14: 使用BO預取器的CXL閃存相對于僅DRAM設備的性能-成本收益。估計是根據圖13a的性能結果、DRAM的最新價格點為5 $/GB [77],NAND閃存的價格范圍從0.05到0.30 $/GB [39, 64]得出的。 觀察4:在預取器改進性能的情況下,其成功歸功于實現高準確性。我們在圖15中繪制了評估的預取器的四個指標。延遲和污染是負指標(越低越好),因此我們倒置了它們的條形圖,以使所有指標都越高越好。我們觀察到,預取器對預取器有所幫助的工作負載(Page Rank和Radiosity)的定義特征是準確性高。例如,Leap(LP)預取器在Radiosity下達到85%的準確性,而在BERT下只達到27%。此外,最佳偏移(BO)預取器在XZ下實現了48%的準確性;但是,它僅有4%的覆蓋度,表明盡管準確性相對較高,但預取器并未主動獲取數據以改善性能。 我們進一步分析了Page Rank,以了解為什么預取器能夠實現相對較高的準確性,即使工作負載具有最低的局部性(使用堆棧和塊親和性指標[32]計算)。如圖16所示,Page Rank在其工作負載中呈現出明顯的階段。在第一階段,Page Rank加載圖信息并表現出很高的局部性(圖16a)。最佳偏移預取器也能夠實現很高的覆蓋度和準確性(圖16b)。然而,在第二階段,Page Rank構建圖,并且此處的訪問模式具有非常低的局部性。因此,最佳偏移預取器變得更不活躍(覆蓋率低),因為其準確性下降。在最后階段,Page Rank計算每個頂點的分數。雖然其訪問局部性不高,但預取器表現良好,并且大部分訪問都在緩存中命中。請注意,雖然污染很嚴重,但緩存失效率非常低,因此對性能的影響可以忽略不計。該分析表明,雖然預取器對第一階段和最后階段有益,但第二階段的低局部性限制了性能。
圖15: 預取器的準確率、覆蓋率、延遲和污染度指標。
圖16: Page Rank隨時間的行為。
?觀察5:當準確性低時,緩存污染是性能下降的主要原因。如圖15所示,BERT和YCSB具有較低的準確性,而它們的污染率很高,導致預取器的啟用會降低性能(圖13a)。對于XZ,盡管最佳偏移(BO)預取器的準確性較低,但它與沒有預取器一樣,因為它幾乎沒有污染。我們將這歸因于BO根據其準確性的能力禁用預取。對于Page Rank和Radiosity,預取器污染率較低,盡管它們的延遲很高。緩存污染降低了CXL-flash的性能,預取器應該注意這種影響,以避免對設備產生不利影響。
圖17: BO預取器虛擬與物理指標比較。 觀察6:虛擬到物理地址轉換使CXL-flash難以預取數據。為了了解虛擬內存地址轉換的影響,我們使用最佳偏移預取器模擬CXL-flash,使用5個應用程序工作負載的虛擬內存跟蹤數據,圖17比較了虛擬和物理跟蹤之間的四個預取器指標。我們得出兩個觀察結果。首先,除了Radiosity之外,我們觀察到從虛擬跟蹤到物理跟蹤的準確性顯著下降。最佳偏移預取器在Page Rank的虛擬內存跟蹤下的準確性為99%,但在物理跟蹤下,準確性下降到42%。其次,覆蓋率也降低,表明預取器在物理內存訪問下變得不太活躍:例如,在BERT下,覆蓋率從76%降至26%。對于物理跟蹤,準確性和覆蓋率的下降顯示CXL-flash在虛擬尋址下的性能將更好。
圖18: 使用內存訪問模式提示提高BERT性能。圖18a是對提供提示的地址數量敏感性測試。圖18b顯示隨著添加更多提示的性能改進。在兩個圖中,線表示使用提示前的命中下未命中轉換為使用提示后的命中次數。
觀察7:如果內核能夠為設備提供內存訪問模式提示,則CXL-flash的性能將通過將命中-未命中轉換為緩存命中而得到改善。我們考慮了一個假設的具有洞察力的內核,它知道物理內存訪問模式。這不是太牽強,因為數據密集型應用程序通常進行多次迭代,它們的行為可以進行分析。更具體地說,我們假設內核具有有關頂部密集訪問的物理幀的信息,并可以在實際訪問之前向設備傳遞提示。為了限制內核參與的開銷,我們模擬了對訪問提示的概率性生成。圖18a顯示了在前N%的密集訪問地址的10%處生成提示時,BERT的性能改進情況。我們觀察到,通過將命中-未命中(HUM)轉換為緩存命中,隨著對更多地址生成訪問提示,子微秒延遲的百分比從86%增加到91%。圖18b考慮了變量的提示生成概率,從前10%的密集訪問地址的0%到10%。同樣,我們看到整體性能有所改善,但在91%處平穩。我們的實驗表明,利用主機的知識來生成訪問模式提示,可能會提高CXL-flash的性能。
06.?相關工作
評估的緩存策略和預取算法在之前的研究中得到了深入探討。然而,大多數研究都是針對管理和優化CPU緩存的,其中緩存命中和緩存未命中之間的延遲差異要小得多,而在CXL-flash中則要大得多。CFLRU [60] 和 Leap [53] 與我們的設備共享類似的設計空間,但它們所面臨的內存訪問強度并不像CXL-flash需要處理的那樣極端。因此,必須在CXL-flash的設計空間下評估這些策略和算法的有效性。 先前的研究探索了緩解地址轉換和閃存限制導致性能下降的技術。利用大頁面可以減少地址轉換次數 [54,58]。
FlashMap [40] 和 FlatFlash [23] 將SSD的地址轉換與頁表結合以減少開銷。eNVY [73] 采用寫入緩沖、頁面重映射和清理策略,實現直接內存尋址并保持性能。CXL主機系統的未來研究應進一步探索利用主機生成提示的潛在好處,并結合先前的工作來減少開銷。 內存解聚將內存資源組織在服務器之間作為網絡附加的內存池,滿足數據密集型應用的高內存需求 [37,38,52,69]。雖然我們的工作不直接研究內存解聚系統,但使用CXL-flash作為解聚內存有助于克服內存墻的問題。 先前的研究探索了利用非DRAM擴展內存的方法 [28,40,63,74]。HAMS [75] 通過以OS透明的方式管理主機和內存硬件之間的數據路徑,將持久性內存和ULL閃存聚合成內存擴展。
Suzuki等人 [67] 提出了一種基于輕量級DMA的接口,繞過NVMe協議,實現與DRAM類似性能的閃存讀取訪問。SSDAlloc [26] 是一個內存管理器和運行時庫,允許應用程序通過操作系統分頁機制將閃存用作內存設備,但訪問SSD中的數據可能導致開銷。FlatFlash [23] 則通過整合操作系統分頁機制和SSD的內部映射表,將DRAM和閃存內存暴露為一個平坦的內存空間。雖然這些先前的工作主要關注操作系統級管理和主機設備交互,但我們的工作在此基礎上,研究了內存擴展設備內部的設計決策。
使用CXL Type 3設備進行內存擴展是一個活躍的研究領域 [36, 42, 50, 71]。Pond [50] 利用CXL來改進云環境中的DRAM內存池,并提出了機器學習模型來管理本地和池化內存。雖然該工作研究了如何在云環境中使用CXL Type 3設備,但我們的工作研究了如何使用閃存內存實現CXL Type 3設備。
DirectCXL [36] 成功地在實際硬件中通過CXL將主機處理器與外部DRAM連接,并開發了軟件運行時庫來直接訪問資源。最后,CXL-SSD [42] 倡導將CXL和SSD結合起來擴展主機內存。雖然我們與該工作有著相同的目標,但它主要討論了CXL互聯和CXL-SSD的可擴展性潛力。 專為機器學習設計的系統致力于解決內存墻挑戰 [45,48,51]。MC-DLA [48] 提出了一種架構,聚合內存模塊以擴展加速器的訓練ML模型的內存容量。Behemoth [45] 發現許多NLP模型需要大量內存,但不需要大量帶寬,并提出了一個以閃存為中心的訓練框架,管理內存和SSD之間的數據移動,以克服內存墻。
07.?結論
本文探索了CXL-flash設備的設計空間,并評估了現有的優化技術。通過使用物理內存跟蹤,我們發現68-91%的內存訪問可以在CXL-flash設備上實現亞微秒的延遲,而且該設備的壽命至少可以達到3.1年。我們發現,對于虛擬內存的地址轉換使得CXL-flash的預取器特別難以發揮作用,建議通過傳遞內核級別的訪問模式提示來進一步提高性能。 雖然我們試圖通過測試多種工作負載和設計參數來概括結果,但還需要承認一些限制。本文所探索的CXL-flash的當前設計并未考慮閃存的內部任務,如垃圾收集和磨損均衡。此外,所考慮的主機系統可能并未完全反映CXL引入的新系統特性。因此,我們認為在CXL-flash研究領域還需要做更多的工作,而我們的工作可以為未來的研究提供一個平臺。
編輯:黃飛
?
評論
查看更多