01 背景 & 動機
隨著相變存儲器 (PCM)、STT-MRAM、憶阻器和英特爾的 3D-XPoint 等技術的快速發展,高速的、可字節尋址的新興 NVM 的產品逐漸涌現于市場中,學術界和工業界針對這一新興存儲介質展開了廣泛的應用探索并對計算機基礎領域的發展造成了不小的影響。
NVM 編程庫,NVM 數據結構,NVM 感知文件系統和基于 NVM 的數據庫已經得到了廣泛研究,許多內存或存儲系統都使用 NVM 編程庫移植到 NVM,例如 PmemKV 和 Pmem-RocksDB。Google 等公司已經嘗試將首款商用 NVM 產品 Intel Optane DC Persistent Memory 部署到了云數據中心環境中。當NVM 與易失性 DRAM 并排放置以作為快速字節可尋址存儲或大容量運行時內存被部署時,就形成了混合 NVM/DRAM 平臺。
Noisy Neighbor 問題
在云數據中心中,當一些應用程序(稱為 Noisy Neighbor,吵鬧鄰居)會過度使用內存帶寬時,會影響其他應用程序的性能。在傳統 DRAM 平臺上通過預防策略和補救策略緩解此問題:
1.主動為應用程序設置帶寬限制,以防止任何應用程序成為潛在的吵鬧鄰居。
2.監視并識別系統中是否存在吵鬧鄰居,限制新出現的吵鬧鄰居的內存帶寬使用。
Intel 發布的商業 Optane PM 可通過 CPU load/store 指令直接訪問,但 NVM 的實際帶寬仍遠低于 DRAM。在混合 NVM/DRAM 平臺上由于 NVM 和 DRAM 共享內存總線,這無疑增加了內存帶寬干擾的復雜性。
本文在混合平臺上運行 fio 工作負載來說明不同類型帶寬之間競爭的影響,結果如下圖。一共有四類任務:NVM Read、NVM Write、DRAM Read和DRAM Write,首先測量了每類任務單獨運行時的吞吐量并作為 baseline,即第一列。隨后測量了每兩類任務同時運行時主任務的吞吐量,并以歸一化的值顯示出來,較小的數字(即較暗的塊)表示其他嘈雜任務對主任務吞吐量的影響更大。
本文在進行帶寬實驗的同時還檢查了任務的吞吐量和延遲之間的關系。下圖顯示了任務 A(NVM Write)與任務 B(具有可變數量的 NVM-Write fio)同時運行的吞吐量和延遲。
本文得到以下觀察結果:
1. 內存干擾的影響與內存訪問的類型密切相關,比內存帶寬占用量的影響更大。
2. NVM 訪問對其他任務的影響比 DRAM 訪問更嚴重。
3. 隨著任務 B 的數量增長,任務 A 的帶寬逐漸減?。ㄓ捎趲捀蓴_的增強),同時任務 A 的延遲增加。由于內存訪問延遲與帶寬使用呈明顯負相關關系,這表明我們可以通過測量不同類型內存訪問的延遲來檢測內存帶寬干擾情況。
這表明在 NVM/DRAM 混合平臺在 Noisy Neighbor 問題呈現出更加復雜和嚴重的特征。在混合平臺上進行內存帶寬調節存在以下重大挑戰:
1.NVM 和 DRAM 內存帶寬上限不對稱,導致系統實際可用內存帶寬很大程度上取決于工作負載中不同類型的內存訪問的比例。
2.現有 NVM/DRAM 混合平臺上NVM 與 DRAM 共享內存總線,內存流量的混合導致在每個進程的基礎上監控不同類型的內存帶寬幾乎是不可能的,使得現有的為 DRAM 設計的硬件和軟件監管方法無效。
3.現有內存調節的硬件和軟件機制不足。CPU 供應商提供了硬件機制是粗粒度和定性的,頻率縮放和 CPU 調度等技術,可以提供相對細粒度的帶寬調整,但它們也是定性的并且減慢了計算和內存訪問效率。
現有的硬件調節和計數機制:
Intel Memory Bandwidth Monitoring (MBM) 支持在硬件級統計每個 NUMA 節點的內存流量并記錄到指定寄存器。
Intel Memory Bandwidth Allocation (MBA) 硬件功能,以可忽略的開銷提供對內存帶寬的間接和近似控制。MBA 支持對一組線程進行控制,通過向內存請求插入延遲來限制內存帶寬的使用。由于延遲機制,相同的限制值在具有不同內存訪問模式的應用程序中可能表現不同。
IMC 性能計數器可以獲得不同類型的實時帶寬,但僅限于內存通道粒度而不是進程粒度。
02 設計方案
1. MT^2 的設計
本文對現有軟硬件技術進行了深入調研,并提出了一種在 NVM/DRAM 混合平臺上監控調節并發應用的內存帶寬的設計(MT^2)。MT^2 實現于內核態,但用戶可通過偽文件系統接口與 MT^2 通信,將線程分類到不同的組(與 cgroups 相同)并指定一個策略來調節每個組的帶寬。TGroups(即 Throttling Groups)是 MT^2 中帶寬監控和限制的目標。其架構圖如下:
MT^2 由兩部分組成:監控器和調節器。從VFS、PMU(Performance Monitoring Unit)和MBM收集的數據,監控器將其分為四種類型,并將它們和干擾信息轉發給調節器。根據監控數據和調節測量,調節器通過兩種機制做出限制帶寬的決定:調整 MBA 限制值和改變 CPU 配額。MT^2 采用動態帶寬限制算法,根據實時帶寬和干擾水平不斷監控和調整限制。
MT^2 提供了兩種策略來緩解 Noisy Neighbor 問題(預防和補救策略)以應對不同的場景。為了預防,系統管理員需要為每個 TGroup 設置帶寬上限。MT^2 監控精確的實時帶寬并強制所有組不要使用超過上限的帶寬。但是,多個不超過上限的 TGroup 一起仍然可能造成較強的帶寬干擾,可以通過補救策略識別和重新限制。這兩種策略是正交的;因此,何時以及如何使用這兩種策略取決于具體場景。
2. MT^2 監控器的設計
監控器結合了各種硬件和軟件技術,以在進程粒度區分不同類型的帶寬,檢測系統當前的內存干擾程度。在硬件技術方面,重點使用到的一些性能事件的描述如下表所示:
2.1. 帶寬估計
獲得每種訪問類型的準確或估計的帶寬值,即 表示 DRAM 讀取量、 表示 NVM 讀取量、 表示 DRAM 寫入量和 表示 NVM 寫入量。
測量每個進程 DRAM 和 NVM 讀取量的精確值:
?:基于 ocr.all_data_rd.pmm_hit_local_pmm.any_snoop PMU 事件計數器檢索本地 NVM 讀取次數并將該值乘以緩存行大小 (64B)
?:基于 ocr.all_data_rd.l3_miss_local_dram.any_snoop PMU 事件計數器檢索本地 NVM 讀取次數并將該值乘以緩存行大小 (64B)
利用 MBM 來監控每個 TGroup 的總內存訪問帶寬,即 、、和 的總和。鑒于我們可以通過 PMU 計算出 和 的精確值,此時只需要知道每個進程 的精確值,就能計算出所有值。由于用戶空間應用程序只能通過兩種方式寫入 NVM:文件 API(write)和內存映射文件后的 CPU store 指令。
?對于文件 API,MT^2 掛鉤內核中的 VFS 并跟蹤每個 TGroup 的 NVM 寫入量。
?對于內存映射訪問,受信任的應用程序可以自行收集并向 MT^2 報告其對內存映射 NVM 的寫入量。通過掛鉤修改英特爾官方 PMDK 編程庫,顯式地將緩存行刷新或者執行非臨時內存寫入,并用每線程計數器計算總 NVM 寫入量。最后為每個進程設置一個與內核共享的 page,進程中的每個線程將其每線程計數器值寫入 page 中的不同槽中。內核中的 MT^2 定期檢查計數器并計算每個 TGroup 的帶寬。另外,還可以現代英特爾處理器中的一種高效采樣功能,基于處理器事件的采樣 (PEBS),將每個 TGroup 采樣到的內存寫入地址與 NVM 的地址范圍進行比較,可以得出采樣寫入 NVM 和 DRAM 的比例,以此粗略計算出和。
2.2. 干擾檢測
即使給出四種內存訪問的準確帶寬使用情況,也很難確定帶寬干擾是否發生及其嚴重程度,因為內存訪問需求的減少和 Noisy Neighbor 的存在都會導致應用程序使用更少的帶寬。
MT2 不是通過內存帶寬檢測內存干擾,而是通過測量不同類型內存訪問的延遲來檢測干擾級別,動機實驗的關鍵洞察支撐這一點設計,內存訪問延遲與由于競爭導致帶寬使用情況呈負相關關系。
? 對于讀取,從四個 PMU 性能事件中獲取延遲,unc_m_pmm_rpq_occupancy.all()、unc_m_pmm_rpq_inserts()、unc_m_rpq_occupancy 和 unc_m_rpq_inserts。NVM 讀取的延遲可以通過 來計算,DRAM 讀取延遲同理。
? 對于寫入,MT^2 定期發出一些 NVM 和 DRAM 寫入請求并測量它們的完成時間以獲得兩種類型寫入請求的延遲。
最后需要設置一個閾值來判斷帶寬干擾是否發生。當某個訪問請求的時延超過相應的閾值時,平臺就會出現比較嚴重的干擾,遂影響到該類內存的訪問。通過測量不同干擾水平下帶寬和延遲之間的關系得出閾值(可以跨不同平臺調整閾值),在我們的平臺中使用吞吐量減少 10% 時的延遲作為閾值。
3. MT^2 調節器的設計
基于上述收集到的內存帶寬相關信息,調節器將干擾水平和監控帶寬作為輸入,并根據系統管理員設置的調節策略決定采取什么行動來調整TGroup的帶寬,以避免或抑制噪聲應用程序。
3.1. 內存調節機制
本文使用了兩種內存調節機制:Intel Memory Bandwidth Allocation(MBA)硬件功能和 CPU 調度機制。如前所述,MBA通過向內存請求插入延遲來限制內存帶寬的使用,而 CPU 調度是通過減少分配給應用程序的內核數量以達到控制內存帶寬的效果。例如,通過配置 Linux CPU cgroup 更改線程的 CPU 時間(或 CPU 配額),MT^2 中的 CPU 配額定義了在給定時間段內分配給 TGroup 線程的 CPU 時間上限。具有較低 CPU 配額的 TGroups 占用較少的 CPU 時間,因此它消耗較少的內存帶寬。
為了說明 MBA 和 CPU 調度的效果,本文使用 fio 在不同的限制值下生成不同的工作負載。Throttling 值 100 表示沒有限制,而 10 表示最大限制,結果如下圖所示:
從上述圖表中我們可以發現,MBA只支持有限的限制值,并不是所有的限制值都對工作負載有效。MBA 對 DRAM 密集型工作負載的限制的表現比對 NVM 密集型工作負載的限制更好,MBA 對 NVM 寫的限制幾乎完全無效。因此,MBA 無法精確控制線程的帶寬,而 CPU 調度可以作為 MBA 的一種補充機制,CPU 調度可以提供粒度更細且表現看似更好的內存帶寬限制。如上表 3 所示,我們需要注意的是,MBA 僅僅減慢了內存訪問操作并且不影響其他操作(計算操作),所以 MBA 機制在僅限制內存帶寬方面其實是效率更高的,但適用性有限。
3.2 動態帶寬限制
本文采用動態帶寬限制的算法結合了上述所有機制,首先根據監視器提供的信息識別噪聲鄰居,然后采取措施限制嘈雜的鄰居的內存帶寬。
基于上述分析,本文認為具有最多 NVM 寫入的 TGroup 更有可能成為嘈雜的鄰居,其次是具有最多 NVM 讀取的 TGroup,最后是具有更多 DRAM 訪問的 TGroup。該算法按上述順序選擇最有可能成為噪聲鄰居的 TGroup。
然后算法根據要限制的內存帶寬類型選擇內存調節機制。為了限制NVM訪問帶寬,該算法采用 CPU 調度機制,為了僅限制 DRAM 訪問帶寬,該算法選擇降低目標 TGroup 的 MBA 值。如果 MBA 已設置為最低值,則算法使用 CPU 調度進行進一步限制。
一旦內存干擾消失,該算法就會嘗試放松強制執行的帶寬限制。調節器將周期性運行,根據監視器提供的新信息采取另一個步驟。循序漸進的方法減少了平臺內存帶寬變化的不確定性,并防止應用程序出現不必要的性能抖動。
4. MT^2 的實現
本文修改 Linux 內核 5.3.11 以將 TGroup 添加為 cgroups 的子系統。MT^2 被實現為與 TGroup 子系統緊密合作的內核模塊。
首先掛載子系統并在子系統掛載點創建一個新目錄(即創建一個新的 TGroup),然后將進程的 pid 寫入 cgroup.procs 文件(即將進程添加到 TGroup)。隨后可以讀取/寫入此目錄中的另外三個文件以管理 TGroup:
1. priority 文件用于獲取和設置 TGroup 的優先級,高優先級進程不受限制,只有低優先級進程才可能被限制。
2. bandwidth 文件是只讀的,返回 TGroup 上一秒的帶寬。
3. limit 文件用于獲取和設置 TGroup 的四種內存訪問的絕對帶寬限制。MT^2 會確保每個組使用的帶寬不會超過預設上限。
注意,每次發生進程上下文切換時,都會為將在此 CPU 內核上運行的新線程設置相應的 MT^2 上下文,即進程對應的 PMU 寄存器、MBA 相關的 MSR 寄存器并設置 CPU 配額,具體實現方法歡迎查閱論文原文。
03 實驗評估
實驗評估環境的準備
本文從有效性、性能開銷以及可信環境下的準確性等多個維度全面評估 MT^2,受限于篇幅,此處重點關注有效性方面。
本實驗在具有兩個 28 核 Intel Xeon Gold 6238R CPU 并禁用超線程的服務器上進行。服務器有兩個 NUMA 節點,每個節點都配備了 6*32GB DDR4 DRAM 和 6*128GB Optane PM,配置為交錯的 app-direct 模式,所有實驗都在單個 NUMA 節點上進行。
噪聲鄰居抑制情況分析
本文在使用 MT^2 的混合平臺上重新運行了一遍任務并行時的帶寬運行,用四種 fio 工作負載來說明 MT^2 在緩解不同類型帶寬之間競爭的作用。結果如下圖所示,一般來說,帶有 MT^2 的列比沒有 MT^2 的列的顏色要淺得多,這表明 MT2 可以通過限制其帶寬使用來有效減少嘈雜鄰居的干擾。
以 NVM Read 工作負載為例,四種噪聲鄰居將 Victim 進程 fio 的吞吐量降低到基線的 50%、39%、65% 和 44%。通過使用 MT^2 限制嘈雜鄰居的帶寬,Victim 進程 fio 的吞吐量恢復到基線的 98%、92%、99% 和 98%。其他工作負載呈現類似現象。
分配指定內存帶寬
本文利用 TGroup 為四種內存訪問模式對應的進程分配了指定的帶寬上限限制,通過 fio 實驗判斷本文設計的限制功能是否有效。結果如下表所示,第一列表示各個任務單獨運行時的吞吐量,第二列表示四個任務同時運行時各自的吞吐量。以 DRAM 寫入為例,多任務并行時吞吐量下降了 66%(從 7.4GB/s 到 2.5GB/s)。然后,本文為這些任務分配不同的帶寬保證(如括號中的數字所示),數據顯示這些任務的帶寬在 MT^2 的規定下得到滿足。
04 總結
持久內存(PM)/ 非易失性內存(NVM)的出現正改變著存儲系統的金字塔層次結構。本文發現,由于 NVM 和 DRAM 共享同一條內存總線,帶寬干擾問題變得更為嚴重和復雜,甚至會顯著降低系統的總帶寬。
本工作介紹了對內存帶寬干擾的分析,對現有軟硬件技術進行了深入調研,并提出了一種在 NVM/DRAM 混合平臺上監控調節并發應用的內存帶寬的設計(MT^2)。MT^2 以線程為粒度準確監測來自混合流量的不同類型的內存帶寬,使用軟硬件結合技術控制內存帶寬。
在多個不同的用例中,MT^2 能夠有效限制 Noisy Neighbors,消除吵鬧鄰居的帶寬干擾,保證高優先級應用程序的性能。
審核編輯:劉清
-
PCM
+關注
關注
1文章
187瀏覽量
52698 -
DRAM
+關注
關注
40文章
2189瀏覽量
182137 -
存儲器
+關注
關注
38文章
7161瀏覽量
162141 -
憶阻器
+關注
關注
8文章
67瀏覽量
19519 -
NVM
+關注
關注
1文章
37瀏覽量
19056
原文標題:混合NVM/DRAM平臺上的內存帶寬調節
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論