王孝遠,廖小飛,劉海坤,金海
華中科技大學計算機學院,湖北 武漢 430074
隨著大數(shù)據(jù)應用的蓬勃發(fā)展,計算模式已經從傳統(tǒng)的以計算為中心轉變?yōu)橐源笠?guī)模數(shù)據(jù)處理為中心。大數(shù)據(jù)處理的需求不僅僅表現(xiàn)為要處理的數(shù)據(jù)規(guī)模大,而且要求能快速實時地響應。數(shù)據(jù)的快速增長和以數(shù)據(jù)為中心的計算模式給現(xiàn)有的計算機存儲系統(tǒng)帶來了新的挑戰(zhàn)。傳統(tǒng)以外存為主體的存儲模式需要頻繁地在內存和外存之間交換數(shù)據(jù),這使得大數(shù)據(jù)處理的大部分時間都耗費在數(shù)據(jù)移動過程中,內外存之間過低的I/O帶寬成了大數(shù)據(jù)處理系統(tǒng)的性能瓶頸。為了提高大數(shù)據(jù)處理的效率,內存計算模式應運而生。內存計算模式要求計算機系統(tǒng)能夠提供大容量的內存,從而盡可能多地把需要處理的數(shù)據(jù)緩存在內存中,從而消除磁盤I/O的性能瓶頸。
然而,傳統(tǒng)的動態(tài)隨機訪問存儲器(dynamic random access memory,DRAM)因其存儲能耗大、存儲密度小、可擴展性有限、刷新和靜態(tài)功耗高等缺點,已經無法滿足應用越來越大的內存需求。近些年涌現(xiàn)的非易失性存儲器(nonvolatile memory,NVM),如相變存儲器(phase change memory,PCM)、磁性隨機存儲器(magnetic random access memory,MRAM)等,具有可隨機訪問、存儲密度大、可擴展性強、無刷新和閑置功耗等特點,成為替代DRAM提供大容量內存的理想存儲器。但NVM具有訪問時延高、寫次數(shù)有限、寫功耗大等缺點(見表1),因此直接使用NVM替代DRAM是不可取的。
為了充分利用NVM容量大和DRAM讀寫性能好的優(yōu)勢,并且最大限度地避免各種存儲介質的缺陷,學術界提出使用DRAM-NVM異構內存架構,通過混合使用小容量DRAM和大容量NVM,將DRAM作為NVM內存的緩存,或者將頻繁訪問的數(shù)據(jù)放置于DRAM中來提升系統(tǒng)性能,降低NVM高訪問時延的缺陷。DRAMNVM異構內存系統(tǒng)的設計與優(yōu)化成了研究的熱點[1-9]。
目前主要有層次和平行兩種異構內存架構。DRAM-NVM層次化異構內存架構如圖1(a)所示,在這種架構下,DRAM作為大容量NVM內存的緩存,其組織形式類似于傳統(tǒng)的片上緩存,CPU請求的數(shù)據(jù)在最后一級片上緩存缺失后,首先查找DRAM緩存,若數(shù)據(jù)在DRAM緩存中缺失,則訪問NVM內存,并將缺失的數(shù)據(jù)塊從NVM內存復制到DRAM緩存中。DRAM-NVM平行架構如圖1(b)所示,在這種架構下,NVM和DRAM均作為內存使用,由操作系統(tǒng)統(tǒng)一管理。
表1 DRAM與NVM的性能參數(shù)對比
圖1 異構內存架構
層次架構的異構內存系統(tǒng)中,DRAM等快速存儲器作為NVM的緩存,緩存操作時間開銷較小,但是對于局部性較差的應用,可能會引起DRAM緩存頻繁換入換出,從而導致性能降低。平行架構的異構內存系統(tǒng)中,為了提高異構內存的性能,常用的優(yōu)化策略是熱頁遷移[4,7,9-11],即對應用頁面信息進行監(jiān)測,將頻繁訪問和頻繁寫的NVM頁框遷移到DRAM中,但是遷移操作的時間開銷較大,并且監(jiān)測開銷較大。
以上兩種方案各有利弊,但是無論采取何種方案,最終目的都是盡可能同時發(fā)揮DRAM與NVM的自身優(yōu)勢,從而改善異構內存各方面的性能,更好地為大數(shù)據(jù)應用服務。由此可見,異構內存給現(xiàn)有計算機設計帶來了新的挑戰(zhàn),這些挑戰(zhàn)主要集中在體系結構層面、系統(tǒng)軟件層面、編程模型層面(如圖2所示)。
具體說來,上述3個層面主要面臨以下挑戰(zhàn)。
● 在體系結構層面,如何根據(jù)NVM和DRAM的特性以及不同應用的訪存特征,設計可動態(tài)適配的存儲架構,是異構內存系統(tǒng)設計面臨的主要挑戰(zhàn)。
圖2 異構內存研究挑戰(zhàn)
● 在系統(tǒng)軟件層面,由于NVM和DRAM在性能、能耗和耐久性方面的差異,異構內存資源管理面臨的挑戰(zhàn)是:如何對異構內存中不同存儲介質進行差異化管理和調度;如何應對可用地址空間增大而引起的旁路轉換緩沖(translation lookaside buffer,TLB)缺失率和地址轉換開銷增大的問題;如何根據(jù)應用的特征決定哪類數(shù)據(jù)組織形式更適合大規(guī)模事務數(shù)據(jù)的處理;如何結合新的內存特性,設計高效、低傳輸量的數(shù)據(jù)可靠性保證機制。
● 在編程模型層面,異構內存給程序員帶來的主要挑戰(zhàn)是:如何設計統(tǒng)一的用戶接口與編程抽象、執(zhí)行模型與相應的編譯器。
本文將概述DRAM/NVM異構內存的發(fā)展現(xiàn)狀,總結目前異構內存的體系結構、系統(tǒng)軟件、編程模型等層面的研究進展,并分析現(xiàn)有研究的優(yōu)點與不足,提出針對性的解決方案。最后,以大規(guī)模圖計算系統(tǒng)為例,給出異構內存系統(tǒng)針對應用層面的優(yōu)化方向。
為了克服異構內存中各介質的缺點,并充分發(fā)揮各自的優(yōu)點,現(xiàn)有的研究主要是集中在異構內存系統(tǒng)架構、異構內存管理機制、異構內存持久化和異構內存緩存管理等方面。
為了研究NVM與DRAM組成的異構內存系統(tǒng)架構以及兩種介質的容量配比問題,Qureshi M K等人[1]把DRAM設計成NVM的一個小容量緩存區(qū),并利用操作系統(tǒng)頁表管理NVM,基于此頁表,文中使用了一系列的優(yōu)化策略來減少對NVM的寫操作次數(shù),從而延長了NVM的使用壽命。這些策略主要有3種:延遲寫機制,該機制的原理是在發(fā)生缺頁的時候,首先從磁盤讀入DRAM,當DRAM里的頁面需要逐出的時候,根據(jù)頁面是否被修改的信息來決定頁面是否被寫入NVM;緩存行粒度寫回機制,該機制的原理是只將DRAM中被標記為臟的緩存行寫回NVM中,從而減少對NVM的不必要的寫操作;細粒度磨損均衡機制,該機制的原理是通過細粒度地管理邏輯扇區(qū)和物理扇區(qū)之間的映射關系,達到磨損均衡的目的。實驗證明,DRAM容量與NVM容量的比在3%左右時,可以更好地利用DRAM與NVM組成的異構內存系統(tǒng)。當然,細粒度的映射機制也帶來了較大的空間開銷,tag的查詢、比較也增加了系統(tǒng)時延,降低了系統(tǒng)性能。
通過將DRAM和NVM放在同一個地址空間內,Zhang W等人[12]實現(xiàn)了DRAM與NVM的平行架構的異構內存系統(tǒng)。他們的想法是以頁面為粒度對應用程序的頁面進行分類,將頻繁修改的頁面放入DRAM,將不頻繁修改的頁面放入NVM。具體實現(xiàn)機制是,首先所有的頁面都加載到NVM中,隨著程序的運行,對頁面進行引用計數(shù),當某個頁面的計數(shù)達到一定閾值時,則會被遷移到NVM中。在進行頁面計數(shù)的過程中,文章采用了多級隊列(multiqueue)的管理策略:使用多個最近最少使用(least recently used,LRU)隊列,每個隊列代表不同的引用等級,根據(jù)頁面的引用計數(shù)值對頁面進行分類,引用等級越高的隊列中的頁面越容易被遷移到DRAM中。與此同時,也會把之前在DRAM中但具有較少引用計數(shù)值的頁面回遷到NVM中。但是該方案計數(shù)和隊列維護的開銷巨大,頁面遷移的操作也會給系統(tǒng)帶來影響。
通過利用應用的空間局部性原理,Mladenov R[2]設計了擁有小容量DRAM緩存和大容量NVM的異構內存系統(tǒng)。該系統(tǒng)將DRAM設計成NVM的小容量緩存,對系統(tǒng)的訪存請求的處理進行優(yōu)化。對于讀請求,系統(tǒng)優(yōu)先訪問DRAM緩存,如果在DRAM緩存中命中,則直接返回DRAM緩存中的數(shù)據(jù);若DRAM緩存未命中,則接著訪問NVM,并把對應的NVM數(shù)據(jù)緩存到DRAM中。對于寫請求,若DRAM未滿,則直接寫入DRAM緩存;若DRAM已滿,則基于LRU算法進行DRAM緩存頁面的替換,并把替換下來的頁面寫回到NVM中。為了進一步減少頁面替換對性能的影響,該系統(tǒng)會定期檢測DRAM的緩存狀態(tài),并在內存空閑時,根據(jù)LRU替換策略進行頁面替換,從而預留DRAM空間用于響應后來的DRAM寫請求。該系統(tǒng)有效地彌補了NVM訪問速度慢的不足,更有利于充分發(fā)揮NVM的優(yōu)勢。
為了進一步提升DRAM緩存的優(yōu)勢,Loh G H等人[13]以一個Cache line(64 byte)的粒度對DRAM進行管理,而在DRAM與NVM之間采用組相連的方式進行映射。同時,為了降低tag查詢開銷對系統(tǒng)的影響,該系統(tǒng)將元數(shù)據(jù)和數(shù)據(jù)放在同一個存儲陣列的行(bank row)中,從而在DRAM命中時快速訪問數(shù)據(jù),有效地縮短了DRAM命中時的串行查找開銷。然而,在DRAM緩存未命中的時候,該系統(tǒng)需要4次訪存:訪問DRAM中的元數(shù)據(jù),判斷DRAM緩存命中與否;訪問NVM并獲取相應數(shù)據(jù)塊;將獲取的數(shù)據(jù)塊加載到DRAM緩存中;訪問DRAM緩存,獲取相應數(shù)據(jù)。由此可見,該系統(tǒng)缺點也很明顯:由于DRAM缺失代價太高,該系統(tǒng)不適用于局部性較差的應用;由于DRAM管理的粒度較小,tag的存儲開銷較大(9%左右),降低了DRAM實際可用容量;硬件改動較大,可擴展性差。
為了降低異構內存的系統(tǒng)功耗,Park H等人[3]提出3種優(yōu)化策略。
● DRAM能耗動態(tài)監(jiān)測機制,以DRAM行(row)為粒度對DRAM中的數(shù)據(jù)進行監(jiān)測,系統(tǒng)維護每一個DRAM row的監(jiān)測值,并定期衰減此檢測值,一旦檢測值為0,則對相應的數(shù)據(jù)進行寫回操作,從而減少DRAM刷新能耗。
● DRAM bypass機制,該系統(tǒng)認為對數(shù)據(jù)的第一次訪問并不能說明數(shù)據(jù)是熱數(shù)據(jù),當此數(shù)據(jù)再次被訪問的時候才會被判定為熱數(shù)據(jù),才會被遷移到DRAM。
● 臟數(shù)據(jù)保持機制,因為程序的局部性原理,臟數(shù)據(jù)接下來被訪問的概率較高,所以盡可能讓臟數(shù)據(jù)在DRAM中保持較長時間,從而降低DRAM換入換出的開銷,并且在寫回時進行寫操作合并策略,降低對NVM的寫頻次,更進一步地降低系統(tǒng)功耗。該方案降低了系統(tǒng)的功耗,但是定期的頁面寫回操作對系統(tǒng)性能有一定的影響,并且策略的實現(xiàn)復雜度較高。
通過對各個Linux段的訪存模式分析,Park Y等人[14]提出了基于段的頁面放置機制。Linux把線性地址空間分為很多個段,每一個段中的數(shù)據(jù)具有相似的訪存特征。比如文本段包含只讀的運行代碼,訪存模式為只讀,而堆棧段包含返回地址、參數(shù)和本地變量等經常被讀寫的數(shù)據(jù),因此堆棧段的訪存模式是頻繁讀寫的模式。根據(jù)這些信息,在程序運行之前,針對性地把讀寫頻繁的段的數(shù)據(jù)放置在DRAM中,而把只讀的段的數(shù)據(jù)放在NVM中,從而提升異構內存系統(tǒng)性能。
通過對多級隊列算法進行改進以及對隊內元素進行動態(tài)排序,Ramos L E等人[4]提出了一種基于排序策略的異構內存頁面放置(rank-based page placement,RaPP)機制。與參考文獻[12]類似,RaPP的理念也是盡量將寫入操作較為頻繁的頁面放入DRAM,而將寫入操作不頻繁的頁面放入NVM。不同的是,首先,RaPP通過修改內存控制器監(jiān)測頁面的寫操作頻次以及頁面寫密集程度;其次,RaPP根據(jù)監(jiān)測信息對頁面進行動態(tài)排序;最后,RaPP在發(fā)生頁面替換時,優(yōu)先替換隊列中排名較為靠前的頁面。雖然該方案緩解了頁面統(tǒng)計的開銷問題,但并未從根本上解決問題,頁面遷移操作也給系統(tǒng)帶來了不小的性能影響。
通過對堆中對象的訪存特征的分析,Wei W等人[5]提出一種軟硬件結合的異構內存頁面放置框架——二維頁面放置機制(2-phase page placement framework,2PP)。2PP的原理主要分以下兩步:
● 離線分析,通過離線運行應用程序,獲取并分析應用程序的訪存特征(讀寫比例、程序計數(shù)器對象特征等),從而指導頁面的初始放置;
● 運行時調整,通過在內存控制器中對頁面進行讀寫監(jiān)測,周期性地計算頁面的讀寫比例,從而篩選出要遷移的頁。
通過使用一種基于影子內存(shadow memory)的數(shù)據(jù)持久化方式,Liu M X等人[15]提出了一個將程序執(zhí)行和數(shù)據(jù)持久化操作完全解耦的NVM持久內存框架——DUDETM。DUDETM的原理是,將系統(tǒng)執(zhí)行需要使用的數(shù)據(jù)全部從NVM緩存到位于DRAM的影子內存,系統(tǒng)對持久數(shù)據(jù)的訪問均在影子內存中完成,不直接訪問NVM。當需要對數(shù)據(jù)進行持久化處理時,DUDETM采用本地更新的方式將數(shù)據(jù)寫入影子內存,同時將對應的日志信息寫入DRAM緩沖區(qū)。待事務提交之后,后臺進程會異步地將日志數(shù)據(jù)持久化到NVM中,并根據(jù)日志數(shù)據(jù)更新位于NVM中的持久數(shù)據(jù)。相比于不具有數(shù)據(jù)持久化功能的內存事務系統(tǒng),DUDETM僅犧牲了7.4%~24.6%的系統(tǒng)吞吐量就實現(xiàn)了數(shù)據(jù)的持久化操作。但是作為層次化的架構,系統(tǒng)的性能很大程度上受限于DRAM緩存容量。
為了能夠充分發(fā)揮DRAM/NVM異構內存性能,同時保證數(shù)據(jù)強制一致性,Xu J等人[6]設計了一個新穎的內存文件系統(tǒng)——非易失內存加速的日志文件系統(tǒng)(non-volatile memory accelerated logstructured file system,NOVA)。NOVA通過日志來保證用戶對文件系統(tǒng)元數(shù)據(jù)、文件數(shù)據(jù)操作的原子性,并且提供保證數(shù)據(jù)一致性的Atomic_mmap接口使應用可以直接訪問NVM。在提高系統(tǒng)訪問性能方面,NOVA擴展了已有的Log-structured文件系統(tǒng)技術,充分發(fā)揮NVM可快速隨機訪問數(shù)據(jù)的特征,并且為每一個索引節(jié)點(inode)都配置了獨立的日志結構,以保證訪問的高并行性。此外,NOVA還將復雜的元數(shù)據(jù)結構存儲在DRAM中,以加速數(shù)據(jù)查找。
Wang Z等人[16]提出了一種基于NVM的寫回操作感知的緩存動態(tài)管理機制(writeback-aware dynamic cache management for nvm-based main memory system,WADE)。針對NVM的讀寫時延不同,WADE把片上共享高速末級緩存(last level cache,LLC)分成兩個列表:一個僅包含頻繁寫回的Cache line的列表,一個記錄其他Cache line的列表。通過替換非頻繁寫回的Cache line,WADE可以顯著地減少對NVM內存的寫操作頻次。但是WADE并不適合應用在異構內存環(huán)境中,原因如下。
● 異構環(huán)境中有4種訪存模式:DRAM讀、DRAM寫、NVM讀、NVM寫,在LLC中維護4個列表,開銷比較大。
● 未考慮DRAM與NVM之間的性能差異,因為在異構內存中,DRAM與NVM之間的性能差異要大于NVM讀操作與NVM寫操作之間的性能差異,所以發(fā)生緩存替換時,應當充分考慮DRAM與NVM的特性。
Wei W等人[17]提出一種面向異構內存的緩存管理(hybrid memory-aware partition in shared last-level cache,HAP)機制。HAP機制把整個共享緩存分成兩個部分,一部分用來緩存NVM頁面的數(shù)據(jù),一部分用來緩存DRAM頁面對應的數(shù)據(jù),通過對采樣數(shù)據(jù)的分析比較,動態(tài)調整NVM緩存區(qū)在整個緩存的占比,以達到LLC中DRAM 與NVM緩存塊最優(yōu)的配比。HAP機制只有5種配比策略,因此并不能保證每次調整都是最優(yōu)配比。因為HAP機制使用簡單的LRU替換算法,發(fā)生LLC缺失的時候并未考慮替換塊的類型,所以會導致因替換而影響緩存塊的最優(yōu)配比,造成性能的降低。
為了更好地發(fā)揮異構內存的優(yōu)勢,同時也為了給上層應用提供高效、可靠的數(shù)據(jù)訪存和資源調度與管理等系統(tǒng)級支撐,主要從異構內存全系統(tǒng)模擬器、異構內存體系結構、異構內存系統(tǒng)軟件、異構內存編程模型、面向大數(shù)據(jù)的異構內存應用等方面進行研究。
目前市場中還沒有商用的NVM產品,DRAM-NVM異構內存相關的研究主要是基于模擬器完成的。目前主流的模擬器主要有兩種:軟件模擬器和硬件仿真器。
3.1.1 軟件模擬器
軟件模擬器基于Zsim[18]和NVMain[19]的異構內存模擬器進行研究。Zsim是基于Intel Pin[20]工具集的系統(tǒng)模擬器,它使用Intel Pin工具集獲取應用程序訪存虛擬地址,并將虛擬地址重放到模擬的系統(tǒng)架構中(包括CPU、片上高速緩存、片上互聯(lián)網絡等)模擬應用執(zhí)行和訪存特征。此外,Zsim還支持使用其他內存模擬器(如NVMain、DRAMSim2[21]等)模擬其物理內存。NVMain是精確的內存模擬器,可模擬DRAM和NVM等物理內存的訪問行為和物理組件。
但當前Zsim模擬器缺少TLB以及操作系統(tǒng)的模擬模塊,通過Intel Pin工具集獲取訪存虛擬地址后,直接用該虛擬地址訪問Cache模塊和內存模塊。不同應用虛擬地址存在大量的重疊,因此當前的Zsim不能準確模擬多進程混合的訪存行為。為了解決這個問題,筆者在當前Zsim模擬器中添加了操作系統(tǒng)內存管理模塊、頁表和TLB模擬模塊,操作系統(tǒng)內存管理模塊主要負責為虛擬頁分配物理頁[7],頁表、TLB模擬模塊主要負責將虛擬地址轉換成物理地址。修改后的Zsim模擬器可精確地模擬單進程、混合多進程的運行和訪存行為。具體架構如圖3所示。
此外,為了給DRAM-NVM異構內存系統(tǒng)管理優(yōu)化提供基本的平臺支持,筆者基于Zsim和NVMain開發(fā)了DRAM-NVM層次化異構內存架構和DRAM-NVM統(tǒng)一編址的異構內存架構。為了進一步提升異構內存系統(tǒng)性能,筆者基于DRAM-NVM統(tǒng)一編址的異構內存架構,提供了以下兩種內存管理策略。
● 行緩存局部性感知(row buffer locality aware,RBLA)[22]的頁遷移策略:考慮行緩沖區(qū)命中時,NVM讀寫訪問時延接近DRAM讀寫訪問時延,該策略將行緩沖區(qū)局部性差的NVM內存頁遷移到DRAM中,將行緩沖區(qū)局部性好的NVM頁放置于NVM中,盡量降低NVM行緩沖區(qū)缺失帶來的巨大性能和能耗開銷。
圖3 基于Zsim和NVMain混合模擬器的異構內存平臺架構
● 基于多級隊列(multi-level queue,MQ)的熱頁遷移策略:采用多級隊列算法,根據(jù)頁面訪問頻度將內存頁劃分為冷頁面和熱頁面,將訪問頻繁的熱頁面由NVM遷移到DRAM,從而提升系統(tǒng)性能。
3.1.2 硬件仿真器
現(xiàn)有的軟件模擬方法模擬速度較慢、無法準確地模擬復雜和規(guī)模較大的工作負載,而且對網絡通信、虛擬化和分布式應用的兼容性較差,筆者提出了一種基于DRAM的性能仿真器——異構內存仿真器(hybrid memory emulator,HME[23]),以模擬即將到來的NVM技術的性能和能耗特性。HME利用商業(yè)級CPU中的非統(tǒng)一內存訪問架構(non-uniform memory access architecture,NUMA)中可用的功能來模擬兩種內存:快速、本地DRAM和其他NUMA節(jié)點上的較慢的遠程NVM。通過在遠程NUMA節(jié)點上注入不同的內存訪問時延,HME可以模擬范圍廣泛的NVM時延和帶寬。
為了幫助程序員和研究人員評估NVM對應用程序性能的影響,筆者還提供了一個高級編程接口,用于從NVM或DRAM中分配內存。
在商用硬件中沒有編程接口直接控制內存訪問時延,因此筆者采用了一種軟件方法來模擬NVM讀時延。其基本思想是在合適的時間間隔內為應用程序注入軟件生成的額外時延。筆者通過對應用程序的內存訪問進行監(jiān)控,并通過內存訪問行為對滯后時間進行建模,以逼近一段時期內的NVM讀時延。
一般情況下,數(shù)據(jù)寫入可以歸類為寫直達法和寫回法兩種方式。在寫直達法中,數(shù)據(jù)立即通過緩存寫入內存中。在寫回法中,數(shù)據(jù)首先寫入緩存,并在以后將相應的緩存行逐出時寫入內存。雖然內存寫入操作通常不在應用程序執(zhí)行的關鍵路徑上,但是,它仍會占用內存總線帶寬,也就可能造成內存讀取請求的響應被推遲,因此內存寫入對系統(tǒng)的影響不應被忽視。筆者通過特殊的性能監(jiān)控硬件來監(jiān)控寫直達操作和寫回操作,并通過構建內存讀寫次數(shù)與寫時延之間的關系來模擬NVM寫時延,從而實現(xiàn)了在不增加讀請求響應時間的同時,準確地模擬寫操作時延。
在帶寬模擬方面,筆者通過限制最大可用DRAM帶寬來模擬NVM帶寬。帶寬節(jié)流是通過在商品英特爾至強處理器中提供性能計數(shù)器來控制DRAM能通過的最大訪存指令實現(xiàn)的。筆者還建立了能源消耗模型來計算NVM的能耗。由于缺少用于計算主存儲器所消耗能量的硬件級特征,筆者選擇了一種統(tǒng)計方法對NVM能耗進行建模。不像DRAM,NVM不產生靜態(tài)功耗,故只需要計算NVM讀寫能耗。記錄一段時間內NVM的讀寫訪存次數(shù),通過建立簡單的模型來模擬NVM單位時間內的能耗。
筆者使用NUMA體系結構在雙插槽服務器上模擬混合內存系統(tǒng)。每個插槽都包含三級 CPU。NUMA體系結構既支持時延較低的本地DRAM訪問操作,也支持時延較高的遠程Socket上的DRAM訪問操作。因此,筆者使用遠程節(jié)點上的DRAM來模擬時延較高和帶寬較低的NVM。
如圖4所示,筆者在遠端Socket中選擇一個核心(core),用來計算應向本地Socket上的應用程序注入的附加時延。筆者關閉遠端Socket上的其他core以避免對計算核的性能干擾。HME使用英特爾至強處理器性能監(jiān)視單元(uncore PMU)中本地代理(home agent,HA)來記錄正在本地節(jié)點0上運行的應用程序對遠程節(jié)點1上的DRAM內存讀取訪問的次數(shù)(LLC 缺失)和寫訪問次數(shù)。HME通過核間中斷(interprocessor interrupt,IPI)向節(jié)點0的核心注入額外的時延。這樣,HME增加了遠程內存訪問時延,以模擬NVM時延。
圖4 HME硬件仿真器系統(tǒng)架構
由于目前市場上沒有商用的異構內存產品,筆者在模擬器中進行異構內存體系結構的研究,主要研究包括軟硬件協(xié)同管理的層次化異構內存架構、面向異構內存架構的片上緩存管理和異構內存并行處理等方面。與此同時,由于在不同的應用場景下,異構內存系統(tǒng)中兩種架構各有優(yōu)劣,筆者在模擬器中實現(xiàn)了軟件定義的可重構異構內存體系架構。
3.2.1 軟硬件協(xié)同管理的層次化異構內存架構
Demand-Based數(shù)據(jù)管理機制是當前內存計算環(huán)境下DRAM-NVM層次化異構內存系統(tǒng)主要采用的數(shù)據(jù)管理機制,但這種數(shù)據(jù)預取機制沒考慮NVM讀寫性能不對稱的特征,且存在硬件復雜度高、存儲開銷大、軟件靈活性低、DRAM緩存利用率低等挑戰(zhàn),并不適用于DRAM-NVM異構內存系統(tǒng)。
基于DRAM-NVM層次化異構內存系統(tǒng),筆者提出了基于效用的(utilitybased)軟硬件協(xié)同管理的層次化異構內存架構(hardware/software cooperative caching for hybrid DRAM/NVM memory architectures,HSCC[7])。如圖5所示,HSCC在頁表和TLB中建立了NVM內存到DRAM緩存的映射,消除了復雜的硬件開銷和巨大的存儲開銷,同時將多級數(shù)據(jù)預取機制的實現(xiàn)提升到軟件層次,增加了系統(tǒng)的可擴展性。HSCC實現(xiàn)了基于效用的多級數(shù)據(jù)預取機制,該機制僅將NVM熱頁面預取到DRAM緩存,提升了DRAM緩存利用效率。此外,HSCC在基于效用的多級數(shù)據(jù)預取機制的基礎上,提出了HSCC-Dyn和HSCC-MQ兩種優(yōu)化策略:HSCCDyn使用爬山算法動態(tài)調整數(shù)據(jù)預取閾值,充分利用DRAM緩存的同時,盡量減少DRAM緩存回收造成的性能開銷;HSCC-MQ采用多級隊列算法動態(tài)更新NVM頁面訪問熱度,提升了NVM頁面熱度監(jiān)測的準確度。
3.2.2 面向異構內存架構的片上緩存管理
圖5 軟硬件協(xié)同管理的層次化異構內存架構(HSCC)總體架構
傳統(tǒng)基于提高緩存命中率的策略在傳統(tǒng)DRAM內存中展現(xiàn)了良好的性能。然而,這些策略在混合內存環(huán)境下性能不高。這是因為DRAM與NVM的訪問時延存在著多倍的差異,不再像傳統(tǒng)DRAM內存環(huán)境下那樣有著相對比較單一的訪存時延開銷。單純地考慮提升命中率不能反映整體的訪存開銷,因此這些算法已經不能完全適應混合內存環(huán)境新的特性?;旌蟽却姝h(huán)境下的LLC替換策略還需要將LLC緩存缺失時的訪存時延開銷這一變量納入緩存替換決策的考慮范疇。因此,筆者考慮LLC的命中開銷、DRAM緩存塊的缺失代價以及NVM緩存塊的缺失代價,并采用平均訪存時延作為評價混合內存下緩存性能的指標。
筆者提出了一種新型緩存替換策略——異構內存環(huán)境下的缺失代價感知的緩存替換策略(miss-penalty aware LRU-based cache replacement for hybrid memory systems,MALRU[8])。MALRU的主要思想是增加高時延緩存塊留存在LLC中的概率,降低這些高時延緩存塊缺失時帶來的昂貴訪存開銷。MALRU的整體構架如圖6所示,MALRU通過設置一個保留指針,將LLC在邏輯上分為一個替換區(qū)間和一個保留區(qū)間。當發(fā)生LLC缺失時,MALRU會從LRU開始,在替換區(qū)間內尋找第一個DRAM緩存塊,并將其替換出去。如果在優(yōu)化區(qū)間內沒有找到DRAM緩存塊,則將LRU位置的NVM緩存塊替換出去。這種策略相當于增加了NVM緩存塊留存在LLC中的概率,提高了NVM緩存塊的命中率,從而減少了因為高時延的NVM緩存塊被替換出去帶來的昂貴的訪存開銷。同時,保留區(qū)間內的DRAM緩存塊和NVM緩存塊不會被替換出去。這是因為這些緩存塊均為被頻繁訪問的緩存塊,保護其不被替換出去能夠避免這些緩存換被頻繁地換進換出而導致的緩存顛簸。
圖6 MALRU
3.2.3 異構內存并行處理
并行程序在異構內存系統(tǒng)中運行時,一些運行較慢的線程可能會減緩其他線程的運行速度。原因在于:所有線程的訪存請求被分發(fā)到不同的內存通道。NVM的寫請求時延過長,訪問NVM的請求需要較長的完成時間,因此NVM寫請求數(shù)量多的線程需要更多的時間來完成內存訪問操作,該線程將因此成為運行最慢的線程。該運行最慢的線程顯然將拖慢其他線程的運行進程,從而導致整個程序的性能下降。在異構內存環(huán)境下更好地調度線程的訪存請求,可以緩解這種性能的損失。筆者提出了一種針對異構內存環(huán)境下并行程序的訪存調度算法(如圖7所示)。該算法在運行時監(jiān)測每個線程的訪存請求數(shù)量,然后根據(jù)訪存請求為每個線程計算調度優(yōu)先級,最后執(zhí)行調度策略。
為了能夠在異構混合內存環(huán)境下對多線程程序進行調度,必須對多線程程序的訪存請求進行監(jiān)測,包括記錄每個訪存請求是由哪個處理器發(fā)出的、每個訪存請求所請求的數(shù)據(jù)的物理地址,這是對整個系統(tǒng)的基本要求,通過對這些訪存請求進行分析,確定內存控制器的調度算法。
在記錄了每個線程訪存信息之后,如何通過這些信息確定內存控制器的調度算法,減小NVM訪存時延高所帶來的系統(tǒng)性能下降,提高程序整體性能,是進一步要研究的問題。該難點在于如何在監(jiān)測的訪存請求的基礎上制定一個合適的調度優(yōu)化算法,盡可能使運行時調度開銷與程序性能優(yōu)化之間達到平衡。
圖7 面向多核的異構內存調度策略整體功能模塊
如圖7所示,在內存子系統(tǒng)中,異構內存控制器負責對訪問DRAM和NVM的請求做優(yōu)化調度,在異構內存控制器中主要包含訪存行為監(jiān)測模塊、線程優(yōu)先級確定模塊、訪存請求調度模塊3個模塊。訪存行為監(jiān)測模塊主要在程序運行期間對程序每個線程的訪存行為進行檢測,獲取確定調度策略的依據(jù)信息;線程優(yōu)先級確定模塊會根據(jù)訪存行為為每個線程計算出一個調度權值;訪存請求調度模塊會在已有的FRFCFS調度算法的基礎上優(yōu)先調度權值高的線程。
為了研究新型異構內存管理系統(tǒng),基于傳統(tǒng)內存介質和新型非易失性內存的訪存特性和介質屬性,研究新型異構內存管理機制,將內存和存儲資源結合起來進行統(tǒng)一管理,實現(xiàn)異構內存體系架構下系統(tǒng)軟件的基礎。
3.3.1 能耗管理
隨著計算機系統(tǒng)軟硬件的發(fā)展,計算機內存系統(tǒng)的能耗問題日益突出。諸如PCM等新型非易失性存儲器依靠介質的電阻特性存儲數(shù)據(jù),為解決現(xiàn)代計算機系統(tǒng)的能耗問題提供了契機,但這些存儲器存在寫功耗大的缺陷。為了改善異構內存系統(tǒng)的能耗問題,筆者提出了一種新的能耗管理策略——異構內存能耗管理機制(EMH[9])。
如圖8所示,EMH策略根據(jù)內存頁面訪問特征信息劃分冷頁面和熱頁面,并經過一系列的排序和篩選得到若干個冷頁面和熱頁面,最后采用能耗模型預測每個頁面的能耗值,找到可使系統(tǒng)能耗效率最大化的冷熱頁面組合,遷移配對的冷熱頁面,從而提升系統(tǒng)的能耗效率。具體來說,EMH主要有以下3個方面的設計。
● 統(tǒng)計頁面全局和局部訪存信息的數(shù)據(jù)結構設計。在異構內存管理中,分配頁面的依據(jù)就是頁面的訪存歷史信息,需要考慮頁面從被訪問開始到當前時間的全局和局部訪存信息。為了準確地記錄這些頁面訪存信息,筆者設計了一個能統(tǒng)計頁面全局和局部訪存信息的數(shù)據(jù)結構。
● 基于頁面全局/局部寫密集度和時間局部性的冷熱頁面決策算法設計。由于采用了本文設計的記錄訪存信息的數(shù)據(jù)結構,系統(tǒng)運行時全局和局部的頁面讀/寫信息都被記錄下來,充分參考這些信息,從全局角度和局部角度出發(fā),利用時間局部性制定了一個冷熱頁面決策算法。此算法準確地對頁面的未來行為進行預測,從而更為準確地選出寫操作頻繁的熱頁面和系統(tǒng)不經常訪問的冷頁面。
● 基于數(shù)據(jù)局部性的異構內存能耗遷移模型設計。本文基于數(shù)據(jù)局部性對異構內存能耗以頁面為單位進行數(shù)學建模,通過該模型可以計算出遷移某頁面組合后所帶來的節(jié)能效益,對計算出的節(jié)約能耗值進行排序,挑選出使系統(tǒng)能耗降低最大化的頁面組合,更好地達到降低異構內存整體能耗的目標。
3.3.2 異構內存全系統(tǒng)檢查點
在異構內存環(huán)境下,為了減輕預復制對其他應用的內存訪問干擾、降低檢查點的開銷,筆者對不同應用在混合內存上的訪存行為進行了研究,發(fā)現(xiàn)多數(shù)應用訪問內存Bank(一組存儲顆粒的集合)的頻繁程度隨著時間變化有著較大的變化,并且即使在同一時間段內,不同Bank的訪存頻繁程度也有較大差異。根據(jù)這個特征,可以利用應用訪問Bank的空閑時間完成預復制,減少檢查點對應用訪存的干擾,降低檢查點操作的開銷。
圖8 EMH系統(tǒng)模塊
基于上述思想,筆者在混合內存上實現(xiàn)了一個面向應用內存訪問優(yōu)化、降低檢查點開銷的預復制檢查點系統(tǒng)——Shadow。Shadow利用預復制檢查點數(shù)據(jù)復制順序靈活可變且對內存訪問時延不敏感的特征,優(yōu)化了預復制檢查點的訪存行為。Shadow系統(tǒng)需要通過軟件和硬件的協(xié)同工作來實現(xiàn),其總體設計原則為將復雜、高開銷的預復制檢查點流程控制、Bank訪問頻繁程度預測等功能放在軟件層實現(xiàn);對于簡單且需要底層支持的應用Bank訪問信息采集、單個預復制事件數(shù)據(jù)復制、沖突預復制操作處理等功能,通過在傳統(tǒng)內存控制器上添加新的部件,在硬件層實現(xiàn)。其整體結構如圖9所示。具體來講,分別在軟件與硬件層面實現(xiàn)了以下主要功能。
在系統(tǒng)軟件層面,主要實現(xiàn)了以下功能。
● 預復制檢查點流程控制:該模塊用于實現(xiàn)預復制檢查點的基本功能,包括跟蹤應用數(shù)據(jù)的修改、生成檢查點數(shù)據(jù)復制事件、控制檢查點操作的起止、維護檢查點操作元數(shù)據(jù)等。
● Bank訪問頻繁程度預測:該模塊根據(jù)硬件收集的應用Bank訪問信息,通過預測算法計算得出未來應用對各個Bank訪問的頻繁程度,為預復制檢查點流程控制模塊生成新的檢查點復制事件提供參考。
在硬件層面,在內存控制器上添加了以下功能部件。
圖9 Shadow系統(tǒng)架構
● 應用Bank訪問信息采集:該模塊用于監(jiān)測到達內存控制器的應用訪存請求,記錄應用對各個Bank的訪問情況,為軟件中的預測模塊提供輸入數(shù)據(jù)。
● 預復制事件數(shù)據(jù)復制:該模塊從軟件中的檢查點控制模塊接收單個預復制事件的源地址、目的地址,在內存控制器中完成檢查點數(shù)據(jù)的復制,使檢查點數(shù)據(jù)無須經過CPU。
● 沖突預復制操作處理:該模塊監(jiān)測到達內存控制器的應用訪存請求,判斷應用是否與預復制檢查點發(fā)生Bank沖突,并通知預復制事件數(shù)據(jù)復制模塊暫停或重啟復制過程。
● 檢查點數(shù)據(jù)寄存器:該模塊用于存儲檢查點執(zhí)行過程中產生的關鍵數(shù)據(jù),包括Bank訪問記錄、檢查點事件信息、緩存的檢查點數(shù)據(jù)請求,軟硬件各功能模塊通過寄存器中的數(shù)據(jù)進行數(shù)據(jù)交流。
3.3.3 大頁管理
隨著應用內存需求、計算機系統(tǒng)內存容量的持續(xù)增加,虛實地址轉換逐漸成為系統(tǒng)性能瓶頸?,F(xiàn)有的計算機普遍采用TLB來加快虛實地址轉換的速度。由于每一次CPU訪存操作都需要優(yōu)先訪問TLB,如果TLB命中,則直接使用獲取的物理地址訪問緩存或者內存中的數(shù)據(jù),如果TLB缺失,則需要進行查詢系統(tǒng)頁表的操作。由于現(xiàn)有Linux采用四級頁表的機制,訪問頁表導致多達4次的訪存開銷,這將嚴重影響系統(tǒng)性能。同時,由于TLB位于系統(tǒng)的關鍵路徑上,考慮到時延和能耗等相關因素的影響,TLB硬件的容量多年來發(fā)展緩慢。在不改變現(xiàn)有TLB硬件特性的情況下,使用大頁機制成為解決TLB瓶頸問題的關鍵。而另一方面,隨著新型存儲介質NVM的出現(xiàn),計算機系統(tǒng)內存容量得以顯著增加,但由于NVM自身存在缺陷,導致主流的研究主要集中在DRAM/NVM異構內存系統(tǒng)中,在這些研究中,為了提升異構內存的性能,數(shù)據(jù)遷移成為異構內存優(yōu)化的一個重要手段。然而,因為現(xiàn)有的大頁管理機制不能很好地支持頁面遷移,所以這些方式在異構環(huán)境下性能不高。
筆者提出了一種異構內存環(huán)境下大頁管理機制(如圖10所示)。該機制的主要思想是,對DRAM和NVM采用不同的粒度進行管理,通過使用Split TLB機制來加快DRAM和NVM的地址轉化速度,并在內存控制器中使用位圖來標識頁面遷移的狀態(tài),從而在邏輯上保證大頁的完整性。同時為了減少頁面監(jiān)測的開銷,采用輕量級的頁面監(jiān)測機制,即對內存頁面分兩步進行檢測:首先,監(jiān)測大頁的冷熱程度,并篩選出最熱的N個大頁;接著對篩選出來的N個大頁進行細粒度的監(jiān)測,從而篩選出最熱的細粒度頁面。此外,為了優(yōu)化DRAM中熱頁面的訪問,筆者設計了一套DRAM頁面重映射機制。
在平行化異構內存系統(tǒng)中,只有將應用程序的數(shù)據(jù)放置在合適的內存介質中,才能充分利用NVM和DRAM各自的優(yōu)勢?,F(xiàn)有的研究主要著重于利用頁面遷移的機制來獲取更好的性能和更優(yōu)的能耗效率。然而這些機制都依賴于在線的頁面監(jiān)測,而這種監(jiān)測機制需付出很大的性能開銷,并且以頁面為粒度進行數(shù)據(jù)遷移的操作會浪費一定的DRAM帶寬,并降低DRAM的利用率。
筆者提出了一種基于對象的內存分配和遷移機制(OAM)。OAM利用離線訪存分析工具獲取對象的訪存模式,并用性能/能耗模型來指導應用程序的數(shù)據(jù)分配,并為有需要的數(shù)據(jù)對象提供遷移操作?;贠AM中提供的用于平行化異構內存系統(tǒng)內存分配和數(shù)據(jù)遷移的編程接口,應用程序的源碼可通過OAM提供的靜態(tài)代碼工具自動修改。當程序開始執(zhí)行后,操作系統(tǒng)根據(jù)OAM提供的分配建議以及當前系統(tǒng)中DRAM的可用量共同決定對象的放置。如圖11所示,OAM主要包括離線分析(offline instrumentation,OFI)模塊和動態(tài)分配(online allocation,OLA)模塊兩個模塊,并且通過提供適用于本系統(tǒng)的編程接口以及基于底層虛擬機(low level virtual machine,LLVM)實現(xiàn)的自動化修改程序源代碼的機制,將這兩部分有效地結合。
圖10 異構內存大頁管理機制
圖11 基于對象的內存分配和遷移機制總體架構
圖12 各種圖計算應用下性能對比
大數(shù)據(jù)應用需要越來越大的內存,而新興的NVM內存,因其優(yōu)異的特性成為內存擴展更好的選擇。相比于DRAM,NVM具有較低的帶寬和較高的時延,但也具有大容量和成本低廉的優(yōu)勢。筆者量化分析了相同成本下,異構內存環(huán)境帶來的性能提升。由先前的工作可知,DRAM內存的成本約為NVM內存成本的5倍,使用Twitter的數(shù)據(jù)集測試和對比了同種成本情況下多種圖計算應用的性能。如圖12所示,相同成本情況下,異構內存系統(tǒng)中程序的性能明顯優(yōu)于純DRAM系統(tǒng),其中寬度優(yōu)先搜索(breadth first search,BFS)算法、網頁排序(page rank)算法和單源最短路徑(single-source shortest path,SSSP)算法分別獲得了3.47倍、4.52倍、6.96倍的性能提升。這是因為16 GB的DRAM內存,圖數(shù)據(jù)無法全部加載到內存中處理,部分數(shù)據(jù)需要存儲在磁盤中,而相同的成本,采用異構內存技術,可以擁有更大的內存,有機會使數(shù)據(jù)全部在內存中處理,而無需與磁盤進行數(shù)據(jù)交換。
筆者進一步測試了相同成本下兩種內存配置不同迭代次數(shù)的性能。如圖13所示,隨著迭代次數(shù)增多,程序執(zhí)行時間相應變長,采用異構內存獲得的加速比更大。這是因為,在較小的DRAM內存條件下,每次迭代都和磁盤發(fā)生數(shù)據(jù)交換,而在異構內存中,只有在第一次數(shù)據(jù)加載到內存中的時候,才有數(shù)據(jù)交換,其他時候數(shù)據(jù)都是在內存當中的,迭代次數(shù)較多時,異構內存減少的磁盤數(shù)據(jù)交換更多,節(jié)省的時間也就越多。
最后,筆者測試了在不同的數(shù)據(jù)集下,不同的圖算法在兩種內存環(huán)境下的性能提升。如圖14所示,對于不同的應用程序、不同的數(shù)據(jù)集,采用異構內存獲得的性能各不相同,但是總體來說,相同成本下,采用異構內存可以獲得一定的性能提升。筆者未考慮固態(tài)硬盤(solid state drive,SSD)和磁盤的開銷,因為有了足夠大的NVM內存,可以不用SSD和磁盤來存放數(shù)據(jù)。把SSD或者磁盤開銷考慮進去,程序性能提升會更大。
此外,針對圖計算應用的特性,筆者提出一種面向圖處理的異構內存管理系統(tǒng)。該系統(tǒng)主要思想有以下兩部分。
● 異構內存圖數(shù)據(jù)放置策略:在圖數(shù)據(jù)中,由于圖屬性數(shù)據(jù)訪存不規(guī)則,緩存命中率較低,所以將其放置在DRAM中,以減少數(shù)據(jù)訪問時延;而圖結構數(shù)據(jù)一般以數(shù)組形式存放,訪存局部性較好,緩存命中率高,因此將其放置在NVM中;對于元數(shù)據(jù)等一些其他數(shù)據(jù)結構,數(shù)據(jù)量相對較小,可以緩存在緩存中,也可以放置在NVM中。
圖13 PageRank不同迭代次數(shù)下性能對比
圖14 不同數(shù)據(jù)集各種圖計算應用下性能對比
● 異構內存多核圖處理優(yōu)化策略:在同步執(zhí)行模式下,多核并行處理圖數(shù)據(jù)因為DRAM與NVM內存訪存差異,各個核數(shù)據(jù)處理完成時間不同,任務快速完成的核會處于空閑狀態(tài),核利用率低,程序整體性能下降。優(yōu)化策略為:在進行圖數(shù)據(jù)劃分和任務分配的時候,NVM中子圖劃分得小一些,DRAM中子圖劃分得大一些,使綁定到兩種內存介質上的核處理數(shù)據(jù)完成時間盡量保持一致。
與DRAM相比,NVM的讀寫時延較大、寫能耗較高、壽命有限,因此如何有效地引進、高效地管理和準確地評估異構內存是當今研究面臨的挑戰(zhàn)。面對以上挑戰(zhàn),本文從異構內存系統(tǒng)架構、內存管理機制、緩存替換管理、內存請求調度、持久化以及應用等方面對面向大數(shù)據(jù)的異構內存系統(tǒng)進行分析與研究,并提出了面向大數(shù)據(jù)的異構內存系統(tǒng)的優(yōu)化方案。
可以看出,隨著對異構內存研究的深入,DRAM與NVM組成的異構內存取代純DRAM內存指日可待,尤其是Intel、Micron等大公司對NVM的研究推進,加速了異構內存的商業(yè)化進程。筆者相信異構內存將會給整個計算機系統(tǒng)架構設計帶來新的變革。