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

stm32F407平臺上使用freertos,使用pvPortMalloc申請內(nèi)存,發(fā)現(xiàn)內(nèi)存中的數(shù)據(jù)總被修改,怎么解決?

DRAM內(nèi)存原理
怎樣去解決調(diào)節(jié)rk3288平臺上的cpu溫度頻率出現(xiàn)bug的問題呢
Firefly-RK3399平臺上的DDR動態(tài)頻率驅(qū)動調(diào)節(jié)
DRAM內(nèi)存模塊的設(shè)計技術(shù)
導(dǎo)體平臺上線天線問題的MoM-PO分析
DRAM原理 5 :DRAM Devices Organization

私有云平臺的虛擬機內(nèi)存調(diào)度策略

云計算平臺中多虛擬機內(nèi)存協(xié)同優(yōu)化策略研究

評論