陳 吉 劉海坤 王孝遠(yuǎn) 張 宇 廖小飛 金 海
(華中科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 武漢 430074) (服務(wù)計(jì)算技術(shù)與系統(tǒng)教育部重點(diǎn)實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074) (集群與網(wǎng)格計(jì)算湖北省重點(diǎn)實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074) (湖北省大數(shù)據(jù)技術(shù)與系統(tǒng)工程實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074) (hkliu@hust.edu.cn)
隨著計(jì)算機(jī)軟硬件技術(shù)的飛速發(fā)展,傳統(tǒng)的動態(tài)隨機(jī)訪問存儲器(dynamic random access memory, DRAM)因其存儲密度小、可擴(kuò)展性有限、刷新和閑置功耗大等缺點(diǎn)已經(jīng)無法滿足應(yīng)用越來越大的內(nèi)存需求.諸如相變存儲器(phase change memory, PCM)、磁性隨機(jī)存儲器(magnetic random access memory, MRAM)等非易失性存儲器(non-volatile memory, NVM)具有可隨機(jī)訪問、存儲密度大、無靜態(tài)功耗等優(yōu)點(diǎn),但也存在著訪問時延較高、寫次數(shù)有限、寫功耗大等缺點(diǎn),因此直接使用NVM替代DRAM目前尚不可行.學(xué)術(shù)界提出使用DRAM/NVM混合內(nèi)存架構(gòu),通過混合使用小容量DRAM和大容量NVM,將DRAM作為NVM內(nèi)存的緩存或者將DRAM和NVM統(tǒng)一編址并通過頁遷移將頻繁訪問的數(shù)據(jù)放置于DRAM中來克服NVM高訪問時延缺陷的方式,提升系統(tǒng)性能.DRAM/NVM混合內(nèi)存系統(tǒng)的設(shè)計(jì)與優(yōu)化成為了學(xué)術(shù)界的研究熱點(diǎn).
隨著非易失性內(nèi)存的引入,計(jì)算機(jī)系統(tǒng)的內(nèi)存容量固然得到顯著提升,但是也給系統(tǒng)設(shè)計(jì)帶來了新的問題:內(nèi)存地址空間增大、虛實(shí)地址轉(zhuǎn)化的開銷隨之增大、虛實(shí)地址轉(zhuǎn)換將成為新的系統(tǒng)瓶頸[1].當(dāng)下主流的處理器都設(shè)計(jì)有加速虛實(shí)地址轉(zhuǎn)換的特殊硬件-旁路轉(zhuǎn)換緩沖(translation lookaside buffer, TLB).TLB的發(fā)展受到了其尺寸、查詢延遲及能耗開銷等因素的限制,因此近年來TLB的容量增加相當(dāng)緩慢.TLB的查找位于訪存的關(guān)鍵路徑上,對系統(tǒng)性能有著至關(guān)重要的影響.當(dāng)操作系統(tǒng)運(yùn)行大內(nèi)存占用的應(yīng)用程序并采用默認(rèn)大小為4 KB的頁面時,操作系統(tǒng)不僅需要較大的內(nèi)存空間來管理那些頁表項(xiàng),而且應(yīng)用程序運(yùn)行過程中還會產(chǎn)生較多的TLB 缺失和頁表查詢操作,從而大大影響系統(tǒng)的性能.TLB硬件的容量與快速增長的內(nèi)存地址空間之間出現(xiàn)了不可調(diào)和的矛盾[2-5].
操作系統(tǒng)中內(nèi)存分配的單元是一個個的物理頁框,通常是4 KB大小.大頁是由2n個物理地址對齊且連續(xù)的4 KB頁面構(gòu)成,可以容納更多的數(shù)據(jù).在使用2 MB大頁的系統(tǒng)中,一個TLB表項(xiàng)可以映射的快速地址轉(zhuǎn)換范圍是2 MB,在TLB表項(xiàng)數(shù)一樣的情況下,TLB映射的地址范圍是使用4 KB頁面時的512倍.大頁技術(shù)可以使一個TLB表項(xiàng)映射一個很大的物理內(nèi)存頁,從而在不增加TLB硬件容量的情況下顯著調(diào)提高TLB的地址覆蓋范圍,降低查找TLB的缺失率.當(dāng)操作系統(tǒng)以 2 MB 甚至更大作為分頁的單位時,將會大大減少 TLB 缺失數(shù),顯著提高應(yīng)用程序的性能,對于存儲容量越來越大的混合內(nèi)存系統(tǒng)更是如此.
在混合內(nèi)存系統(tǒng)中,使用大頁存在著新的挑戰(zhàn).譬如,在平行架構(gòu)的混合內(nèi)存中,NVM大頁內(nèi)部的數(shù)據(jù)的訪問往往是不均勻的,部分?jǐn)?shù)據(jù)會被頻繁訪問,而另一部分?jǐn)?shù)據(jù)則很少被訪問[6].對于熱的那部分?jǐn)?shù)據(jù),應(yīng)該遷移到DRAM中來提高訪問性能.但如果以大頁為粒度進(jìn)行頁面遷移,在遷移了熱數(shù)據(jù)的同時,也將大量的冷數(shù)據(jù)遷移到了DRAM中,這就占用了DRAM空間,還產(chǎn)生了不必要的遷移開銷和帶寬占用.但是細(xì)粒度的遷移需要復(fù)雜的硬件設(shè)計(jì)或者更改操作系統(tǒng)的頁表、TLB設(shè)計(jì)等.在層次結(jié)構(gòu)的混合內(nèi)存中,DRAM和NVM之間通常采用細(xì)粒度的數(shù)據(jù)交換方式,層次結(jié)構(gòu)的混合內(nèi)存系統(tǒng)可以將NVM大頁中的熱數(shù)據(jù)以細(xì)粒度的方式加載到DRAM中,更適合在層次結(jié)構(gòu)的混合內(nèi)存上使用大頁,因此本文將著重于層次化混合內(nèi)存上的大頁支持.在層次結(jié)構(gòu)的混合內(nèi)存中,查找DRAM緩存的元數(shù)據(jù)查找和存儲開銷成為了新的挑戰(zhàn)性問題,使得支持較大容量DRAM緩存比較困難.
針對上述問題,我們設(shè)計(jì)了一個在層次化混合內(nèi)存上支持大頁和大容量DRAM緩存的系統(tǒng)(supporting both superpage and large-capacity DRAM cache, SSLDC).SSLDC系統(tǒng)在DRAM和NVM之間使用直接映射的方式,同時在DRAM緩存中使用4 KB的粗粒度數(shù)據(jù)塊進(jìn)行管理,從而將元數(shù)據(jù)大小降低到能放入片上高速緩存中.為降低DRAM/NVM之間的粗粒度數(shù)據(jù)交換對內(nèi)存帶寬造成的壓力,提出了DRAM緩存數(shù)據(jù)過濾機(jī)制,只將訪問頻繁的熱數(shù)據(jù)緩存到DRAM中,避免將緩存收益不高的冷數(shù)據(jù)拷貝到DRAM中,減少了混合內(nèi)存間的數(shù)據(jù)交換,從而減輕了內(nèi)存帶寬的占用.還提出了一個基于內(nèi)存實(shí)時信息的動態(tài)熱度閾值調(diào)整策略,周期性的動態(tài)調(diào)整熱度閾值,以靈活適應(yīng)應(yīng)用訪存特征的變化.實(shí)驗(yàn)結(jié)果表明,SSLDC系統(tǒng)與使用大頁的純NVM內(nèi)存系統(tǒng)和CHOP緩存策略系統(tǒng)相比分別平均有69.9%和15.2%的性能提升,并且與使用大頁的純DRAM內(nèi)存系統(tǒng)相比平均只有8.8%的性能差距.
本節(jié)首先介紹2種主流的混合內(nèi)存架構(gòu),并分析其各自的特點(diǎn);然后介紹地址轉(zhuǎn)換過程中存在的TLB性能瓶頸,進(jìn)而介紹大頁在降低TLB缺失率方面的有效性以及在混合內(nèi)存中支持大頁使用的必要性.
由于PCM等NVM介質(zhì)具有低延遲、低能耗、非易失性、高密度的特點(diǎn),被認(rèn)為是DRAM內(nèi)存的有效補(bǔ)充或者替代品.但NVM的讀延遲是DRAM讀延遲的幾倍,NVM寫延遲更是超出DRAM一個數(shù)量級,且NVM寫操作的能耗是DRAM的幾倍.NVM內(nèi)存單元寫次數(shù)有限,大概只能承受108~1012次的寫操作,而DRAM可以承受大于1015次寫操作[7],NVM寫耐受力不足DRAM的1/1 000,NVM存儲單元非常容易因?yàn)轭l繁的寫操作而被寫壞,因此NVM不能完全取代DRAM的位置.為了充分利用NVM容量大和DRAM讀寫性能好的優(yōu)勢,并且最大限度地避免2種存儲介質(zhì)的缺陷,一般把NVM和DRAM結(jié)合起來構(gòu)造混合內(nèi)存系統(tǒng).目前主要有平行和層次2種混合內(nèi)存架構(gòu).
1) 層次化混合內(nèi)存架構(gòu)(層次結(jié)構(gòu)).如圖1(a)所示,層次結(jié)構(gòu)的混合內(nèi)存系統(tǒng)中,DRAM等快速存儲器作為NVM的緩存[8-9],由于緩存操作時間開銷較小,因此相較于統(tǒng)一編址結(jié)構(gòu)的平行架構(gòu)混合內(nèi)存系統(tǒng),層次結(jié)構(gòu)的混合內(nèi)存系統(tǒng)能獲取更多的性能提升.傳統(tǒng)的層次化混合內(nèi)存系統(tǒng)用硬件管理DRAM緩存,DRAM的組織形式類似于傳統(tǒng)的片上高速緩存,DRAM緩存對操作系統(tǒng)透明.最后一級片上緩存(last level cache, LLC)缺失后,首先通過DRAM內(nèi)存控制器中的硬件電路查找訪問地址對應(yīng)的標(biāo)識(tag),判斷訪問是否在DRAM緩存中命中,然后再進(jìn)行數(shù)據(jù)訪問,由此可看出,層次化混合內(nèi)存系統(tǒng)在DRAM緩存缺失的情況下的訪存時延比較長.此外,硬件管理的DRAM緩存一般采用Demand-Based數(shù)據(jù)預(yù)取機(jī)制[10],即DRAM緩存中數(shù)據(jù)缺失后,必須將其對應(yīng)的NVM數(shù)據(jù)塊取到DRAM中,該數(shù)據(jù)塊才能被訪問,在大數(shù)據(jù)環(huán)境下,很多應(yīng)用局部性很差,這種數(shù)據(jù)預(yù)取機(jī)制會加劇緩存污染問題.
2) 統(tǒng)一編址混合內(nèi)存架構(gòu)(平行結(jié)構(gòu)).如圖1(b)所示,DRAM與NVM統(tǒng)一編址,2種內(nèi)存都作為主存使用,并由操作系統(tǒng)進(jìn)行統(tǒng)一的管理和分配[11-13].為了充分發(fā)揮NVM與DRAM的優(yōu)勢,并且盡可能地避免NVM的缺陷給系統(tǒng)帶來的性能影響,現(xiàn)有研究普遍使用熱頁遷移這種優(yōu)化策略,即將頻繁訪問和頻繁寫的NVM頁面遷移到DRAM中.為了保證數(shù)據(jù)遷移的正確性,遷移操作一般分為2個步驟串行執(zhí)行:①讀取源和目標(biāo)頁框的內(nèi)容到緩沖區(qū)中;②將緩沖區(qū)數(shù)據(jù)寫入到目標(biāo)地址中.因此一次頁遷移操作會產(chǎn)生4次頁拷貝,由于讀取和寫入2個階段是串行執(zhí)行的,遷移操作的時間開銷比較大.

Fig.1 Hybrid memory architectures圖1 混合內(nèi)存架構(gòu)
由以上分析可以發(fā)現(xiàn)層次結(jié)構(gòu)和平行結(jié)構(gòu)適合不同的應(yīng)用特征.層次化結(jié)構(gòu)更適合局部性良好的應(yīng)用,由于大部分訪存都在DRAM中命中,可以極大地提高訪存性能.對于訪存局部性一般的應(yīng)用,由于所有的訪存必須經(jīng)過DRAM,將導(dǎo)致大量的緩存換入換出,甚至可能導(dǎo)致性能差于純NVM主存.在平行結(jié)構(gòu)中,由軟件及硬件監(jiān)測應(yīng)用的訪存特征、頁面的訪問信息,并據(jù)此進(jìn)行頁面的分配、回收與遷移,可以實(shí)現(xiàn)更大的靈活性,但由于監(jiān)測和頁面遷移的原因,會帶來一定的系統(tǒng)開銷,尤其是在頁面粒度較大的情況下,遷移一個頁面將帶來較為嚴(yán)重的性能開銷.
當(dāng)處理器要訪問某個內(nèi)存地址時,不是直接在頁表中查找.虛擬地址首先被送到TLB中查找,若TLB命中,則得到物理地址;否則,稱為TLB缺失,將通過操作系統(tǒng)的TLB缺失處理程序查找頁表來獲取物理地址,并進(jìn)行TLB的更新.在X86架構(gòu)中,共有4級頁表,意味著一次TLB缺失,會增加4次對內(nèi)存的訪問.而內(nèi)存的訪問速度相比于處理器慢了幾個數(shù)量級,TLB缺失處理會增加地址轉(zhuǎn)換的開銷,使系統(tǒng)性能下降.尤其是當(dāng)運(yùn)行科學(xué)計(jì)算、大數(shù)據(jù)等內(nèi)存占用量巨大的應(yīng)用時,TLB缺失的情況會變得更加嚴(yán)峻.一些相關(guān)研究指出,地址轉(zhuǎn)換開銷占整個系統(tǒng)開銷的10%~15%[14-15],Muck等人指出,在某些場景下TLB的缺失處理時間占應(yīng)用總執(zhí)行時間的40%以上[16],在虛擬化場景下地址轉(zhuǎn)換開銷占整體開銷甚至高達(dá)89%[17],大內(nèi)存工作集應(yīng)用中地址轉(zhuǎn)換開銷占整體開銷高達(dá)50%[18].由此可見,TLB缺失會嚴(yán)重影響系統(tǒng)的整體性能.因此,必須采取適當(dāng)?shù)氖侄谓档蚑LB缺失率,降低地址轉(zhuǎn)換的開銷,從而提高系統(tǒng)性能.
降低TLB缺失率的辦法主要有2種:1)增大TLB的表項(xiàng)數(shù)目.由于TLB在系統(tǒng)訪存的關(guān)鍵路徑上,增加TLB表項(xiàng)數(shù)目會增加系統(tǒng)的訪問時延以及造成更高的能耗開銷,并且少量地增加TLB表項(xiàng)不能解決TLB的性能瓶頸問題.2)使用大頁.大頁是由2n個基本頁(比如4 KB頁面)組成連續(xù)且自然對齊的頁面.通過使用較大的頁面粒度,增加每個TLB表項(xiàng)所能尋址的地址范圍,從而顯著的降低TLB缺失率.比如相較于使用4 KB頁面粒度,2 MB的頁面粒度的系統(tǒng)中,一個TLB表項(xiàng)可以覆蓋2 MB頁面的地址范圍,從而使得一個TLB表項(xiàng)可映射的地址范圍提升(2 048 KB)/(4 KB)=512倍,進(jìn)而顯著增加TLB命中率,同時實(shí)現(xiàn)在未增加TLB硬件開銷的情況下,顯著地降低了虛實(shí)地址轉(zhuǎn)化開銷.
Korn等人通過運(yùn)行SPEC CPU2006基準(zhǔn)得出,使用64 KB和16 MB的大頁,分別提高系統(tǒng)性能高達(dá)46.9%和50.9%[18].Zhang等人指出,對于Linpack測試基準(zhǔn)中的矩陣乘法,使用16 MB的大頁相比于使用16 KB的頁面,TLB缺失數(shù)量可減少99%以上[19].使用大頁被認(rèn)為是降低TLB缺失率最好的辦法.
對于大內(nèi)存應(yīng)用,如果使用傳統(tǒng)的4 KB細(xì)粒度頁面,會使TLB缺失率劇增,導(dǎo)致系統(tǒng)性能嚴(yán)重下降.因此在混合內(nèi)存系統(tǒng)中解決TLB 性能瓶頸問題顯得尤為迫切,提供大頁支持十分必要.
下面將分2部分介紹在平行結(jié)構(gòu)和層次結(jié)構(gòu)混合內(nèi)存中使用大頁所面臨的挑戰(zhàn).
在平行結(jié)構(gòu)的混合內(nèi)存架構(gòu)中,操作系統(tǒng)需要提供一定的策略來將NVM中訪問熱度高的頁面遷移到DRAM中,將DRAM中熱度低的頁面交換到NVM中,頁面遷移涉及到4次頁拷貝,開銷很大.為了防止過多的數(shù)據(jù)遷移,文獻(xiàn)[11]和文獻(xiàn)[20]中提到了使用硬件方法的細(xì)粒度熱數(shù)據(jù)遷移策略,但對硬件的改動較多,硬件復(fù)雜度高,實(shí)施難度大.硬件都是針對DRAM/NVM容量比例設(shè)計(jì)的,可擴(kuò)展性差.大頁內(nèi)部數(shù)據(jù)讀寫熱度往往不均,在DRAM和NVM間以大頁為粒度進(jìn)行熱數(shù)據(jù)遷移,會在遷移了熱數(shù)據(jù)的同時也遷移了大量的冷數(shù)據(jù),造成極大地帶寬浪費(fèi).軟件支持的細(xì)粒度熱數(shù)據(jù)遷移,又需要操作系統(tǒng)支持多粒度頁面,遷移時需要更改頁表、TLB表項(xiàng),進(jìn)行clflush, tlb shootdown等操作,系統(tǒng)開銷非常大,DRAM和NVM的內(nèi)存管理也會變得很復(fù)雜.
而在層次化的混合內(nèi)存架構(gòu)中,硬件管理的DRAM緩存支持以較小的粒度加載NVM主存中的數(shù)據(jù).比如在純DRAM內(nèi)存的架構(gòu)上,LLC中的cache line的粒度是64 B,而DRAM主存的頁面粒度是4 KB, 當(dāng)LLC缺失時,以相對于DRAM頁面較小的cache line粒度來加載數(shù)據(jù).層次化混合內(nèi)存結(jié)構(gòu)中NVM和DRAM之間的數(shù)據(jù)交換不需要對頁表、TLB等進(jìn)行操作,相較于平行結(jié)構(gòu)開銷更小.層次化的混合內(nèi)存可以很好地支持大頁的使用,便于實(shí)現(xiàn)熱度感知的細(xì)粒度數(shù)據(jù)交換,不會存在平行結(jié)構(gòu)混合內(nèi)存架構(gòu)中的困難.因此在更適合在層次結(jié)構(gòu)的混合內(nèi)存上提供大頁支持.
然而,層次結(jié)構(gòu)的混合內(nèi)存中存在著元數(shù)據(jù)查找和存儲開銷大的挑戰(zhàn).圖2中展示的是DRAM查找元數(shù)據(jù)命中時的訪存開銷.如圖2(a)所示,當(dāng)訪問DRAM緩存時,首先查找元數(shù)據(jù),確定所訪問的數(shù)據(jù)是不是在DRAM中.這個串行化的查找過程,在訪存的關(guān)鍵路徑上.如果將元數(shù)據(jù)存放在DRAM中,相當(dāng)于每次訪存都增加了一次對DRAM內(nèi)存的訪問,這將嚴(yán)重影響系統(tǒng)的性能.
為了加速元數(shù)據(jù)的查找過程,如圖2(b)所示,一般將元數(shù)據(jù)存儲在一塊高速的靜態(tài)隨機(jī)存儲器(static random access memory, SRAM)中,以減少元數(shù)據(jù)查找對系統(tǒng)性能的不良影響.對于片上cache,因其容量小、所需元數(shù)據(jù)很少,不存在元數(shù)據(jù)空間開銷大的問題.但當(dāng)前計(jì)算機(jī)中DRAM一般有著較大的容量,對于4 GB的DRAM緩存,若使用64 B粒度的數(shù)據(jù)塊,元數(shù)據(jù)的存儲開銷將達(dá)到384 MB,遠(yuǎn)遠(yuǎn)超過當(dāng)前的LLC大小,放置在SRAM中是不現(xiàn)實(shí)的.
對于上述問題,Loh和Hill在組相聯(lián)的DRAM緩存中采用64 B細(xì)粒度cacheline[21], 如圖3所示,他們修改了硬件結(jié)構(gòu),將元數(shù)據(jù)和數(shù)據(jù)放置在同一個bank行中,每一個bank行里存放著一組cache line和對應(yīng)的元數(shù)據(jù).每次訪存請求到來時,根據(jù)請求中的地址得到組相聯(lián)映射的組號,查找元數(shù)據(jù)時會把組號對應(yīng)的bank行加載到bank行緩沖區(qū)(bankrow buffer)中.如圖2(c)所示,如果DRAM命中,則數(shù)據(jù)此時已經(jīng)在bank行緩沖區(qū)中了,能快速地訪問數(shù)據(jù).

Fig.2 Access cost when DRAM hit圖2 DRAM緩存命中時的訪問開銷

Fig.3 Metadata and data in the same bank row圖3 元數(shù)據(jù)和數(shù)據(jù)放置在同一bank row示意圖
圖3中的策略充分利用了內(nèi)存的行緩沖區(qū)(row buffer)命中,有效地縮短了DRAM命中時的串行查找開銷,甚至優(yōu)于將元數(shù)據(jù)放置在SRAM中的情況.但是在DRAM緩存缺失時會產(chǎn)生4次訪存:1)訪問存放在DRAM中的元數(shù)據(jù),判斷所訪問數(shù)據(jù)是否在DRAM緩存中;2)DRAM缺失后,需要訪問NVM讀取數(shù)據(jù);3)將NVM上的數(shù)據(jù)寫到DRAM緩存中;4)訪問DRAM緩存,進(jìn)行相應(yīng)的訪存操作.當(dāng)應(yīng)用的局部性不佳導(dǎo)致DRAM命中率很低時,該策略由于DRAM缺失時開銷較大,將導(dǎo)致嚴(yán)重的性能下降.同時對內(nèi)存硬件結(jié)構(gòu)有修改,可擴(kuò)展性差,大約有9%的DRAM用來存放元數(shù)據(jù),減少了DRAM實(shí)際可用的容量,會加劇DRAM的缺失問題.
Jiang等人提出了緩存熱頁(caching hot page, CHOP)的策略[22].在DRAM緩存中采用4 KB的粗粒度管理方式,有效地減小了元數(shù)據(jù)存儲開銷,將元數(shù)據(jù)放置在SRAM中加速元數(shù)據(jù)的查找過程.使用4 KB的DRAM 緩存粒度,每次DRAM緩存缺失時,都會從下層存儲器中加載一個4 KB的頁面.根據(jù)局部性原理,DRAM緩存采用更大的頁面管理粒度,可以有效地提高DRAM命中率,但是粗粒度的數(shù)據(jù)交換會增加對內(nèi)存帶寬的壓力.Jiang等人通過DRAM管理粒度敏感性實(shí)驗(yàn)得到,當(dāng)DRAM緩存行(DRAM cache line)增加到2 KB時,內(nèi)存帶寬占用接近100%,這是嚴(yán)重的性能瓶頸.因此提出了cache過濾機(jī)制,加入一個硬件的過濾緩存(filter cache)結(jié)構(gòu)動態(tài)的監(jiān)測主存中頁面的熱度.當(dāng)DRAM缺失時,只有訪問頻度超過一定閾值的熱頁,才能被加載到DRAM緩存中.避免了將熱度低的頁面加載到DRAM緩存中造成的頁面拷貝開銷和帶寬占用,也防止了冷數(shù)據(jù)加載到DRAM中浪費(fèi)DRAM的空間.
但CHOP緩存機(jī)制中的DRAM緩存只有128 MB,因此需要198 KB的空間存儲元數(shù)據(jù).當(dāng)今計(jì)算機(jī)里內(nèi)存大小一般遠(yuǎn)大于128 MB.對于4 GB的DRAM緩存,需要6 MB的SRAM空間存儲元數(shù)據(jù),會造成較大的硬件開銷.因此,CHOP緩存機(jī)制不能支持較大的DRAM緩存,系統(tǒng)的可擴(kuò)展性差.同時,該策略中的熱頁閾值是通過離線的分析訪存軌跡(trace)得到的,找出貢獻(xiàn)80%訪問次數(shù)的頁面,認(rèn)為這些頁面熱頁,并將這些頁面中訪問最少的次數(shù)設(shè)置為閾值.針對不同應(yīng)用都需要離線運(yùn)行一遍,然后通過分析獲得靜態(tài)閾值.由于不同應(yīng)用程序的訪存特性差異,他們的閾值都不相同.這種靜態(tài)的閾值設(shè)置可能過高,會增加對NVM的訪存操作;而且這種靜態(tài)閾值的設(shè)置只考慮到了熱度信息,沒有考慮到實(shí)時帶寬占用的影響,閾值設(shè)置方法可操作性差,不適用于多進(jìn)程等多種應(yīng)用場景,自適應(yīng)性較差,靈活性低.

Fig.4 Architecture and function modules圖4 系統(tǒng)架構(gòu)與功能模塊
針對第2節(jié)提到的挑戰(zhàn),本文設(shè)計(jì)了一個支持大頁和大容量緩存的層次化混合內(nèi)存系統(tǒng)SSLDC.下面首先介紹系統(tǒng)的幾個模塊是如何工作的;然后介紹DRAM緩存的管理,包括使用粗粒度的DRAM數(shù)據(jù)塊、DRAM緩存與NVM主存間使用直接映射相聯(lián);最后介紹緩存數(shù)據(jù)操作的過濾機(jī)制,包括輕量級的熱度信息監(jiān)測、動態(tài)的熱度閾值調(diào)整.
針對在混合內(nèi)存中使用大頁時存在的諸多挑戰(zhàn),我們設(shè)計(jì)了一個在層次化結(jié)構(gòu)的混合內(nèi)存上支持大頁和大容量緩存的系統(tǒng),針對DRAM緩存的元數(shù)據(jù)存儲和查詢延遲的問題,采用4 KB粗粒度的DRAM管理方式,在DRAM緩存和NVM主存之間采用直接映射,從而進(jìn)一步精簡了DRAM緩存標(biāo)志的結(jié)構(gòu),減小了元數(shù)據(jù)的存儲壓力,解決了文獻(xiàn)[22]中的CHOP策略無法支持大容量DRAM、可擴(kuò)展性差的問題.
圖4所示的是SSLDC系統(tǒng)的架構(gòu)和功能模塊整體設(shè)計(jì)圖.DRAM作為NVM主存的緩存使用,可以看作是L4C (level 4 cache),被硬件直接管理,對操作系統(tǒng)透明.在DRAM中采用4 KB的粗粒度管理方式,與NVM主存之間采用直接映射的方式相聯(lián).在NVM主存中使用2 MB的大頁,以減少TLB缺失率,加快地址轉(zhuǎn)換的速度.提出一個對DRAM緩存數(shù)據(jù)操作的過濾機(jī)制,只有訪問熱度高的4 KB NVM數(shù)據(jù)塊才能在DRAM缺失時被加載到DRAM中.熱度監(jiān)測機(jī)制周期性的監(jiān)測NVM上的訪問信息,包括以4 KB為粒度的數(shù)據(jù)塊的讀寫熱度、每個監(jiān)測周期內(nèi)DRAM命中率、DRAM和NVM之間交換數(shù)據(jù)對內(nèi)存帶寬的占用情況等.在內(nèi)存控制器中開辟一小塊高速SRAM來記錄NVM中最近最頻繁訪問的4 KB數(shù)據(jù)塊的熱度信息,并綜合實(shí)時的DRAM命中率、帶寬占用情況、DRAM緩存使用情況,周期性地對熱度閾值進(jìn)行調(diào)整.
在整個訪存流程中,首先查找DRAM緩存的元數(shù)據(jù)來確定所訪問的數(shù)據(jù)是否在DRAM緩存中.為了加速元數(shù)據(jù)的查找過程,本文選擇將元數(shù)據(jù)存儲在高速的SRAM中.在層次化結(jié)構(gòu)中,顯然DRAM緩存越大,就能存放更多的數(shù)據(jù),DRAM命中率也會更高,從而有更好的性能.DRAM容量對DRAM命中率的影響將在后續(xù)的實(shí)驗(yàn)部分討論.一般每一個DRAM數(shù)據(jù)塊需要6 B的元數(shù)據(jù)來維護(hù)DRAM到NVM的映射關(guān)系[21-22].如果DRAM緩存管理采用64 B數(shù)據(jù)塊、組相聯(lián)映射的方式,對于一塊4 GB的DRAM緩存,需要384 MB的空間存儲元數(shù)據(jù),如此巨大的元數(shù)據(jù)無法放置在SRAM中.當(dāng)采用4 KB大小的DRAM 數(shù)據(jù)塊時,存儲元數(shù)據(jù)的空間開銷減少到6 MB.但將這么多的元數(shù)據(jù)放在SRAM中還是存在一定困難.
圖5(a)展示的是DRAM緩存和NVM主存之間的組相聯(lián)映射.在組相聯(lián)映射中,NVM主存數(shù)據(jù)塊映射到哪一組是固定的,而映射到組內(nèi)的哪一路是不固定的.硬件比較器并行的將訪存地址中的tag和所在組中每一行的tag進(jìn)行比較.tag需要維護(hù)DRAM緩存中數(shù)據(jù)塊在NVM中的具體的地址,因此每個元數(shù)據(jù)表項(xiàng)需要占用較多的位存儲地址信息.
為了減少元數(shù)據(jù)存儲的開銷,如圖5(b)展示的是直接映射的示意圖.在直接映射中,每一個NVM內(nèi)存數(shù)據(jù)塊都映射在固定的DRAM緩存塊上,圖5(b)中所示的DRAM與NVM的容量比是1∶4.直接映射的元數(shù)據(jù)tag不需要記錄數(shù)據(jù)塊對應(yīng)的NVM主存的地址,只需要記錄所對應(yīng)數(shù)據(jù)在NVM主存上的區(qū)號.在圖5(b)中,元數(shù)據(jù)中的tag只需要2 b保存DRAM緩存數(shù)據(jù)塊在NVM主存中的區(qū)號,就足以維護(hù)混合內(nèi)存間的映射.這極大地精簡了元數(shù)據(jù)的結(jié)構(gòu),對于圖5(b)中DRAM與NVM容量比例 1∶4 的配置,每一個DRAM數(shù)據(jù)塊只需要4 b來存儲元數(shù)據(jù),相較于組相聯(lián)映射的6 B開銷,明顯減少.為了提高系統(tǒng)的可擴(kuò)展能力和內(nèi)存配置靈活性,我們使用6 b來記錄主存上的區(qū)號,因此DRAM和NVM的比例可以根據(jù)需要靈活配置.使用4 KB粗粒度管理的4 GB DRAM,只需要1 MB的元數(shù)據(jù)存儲開銷.精簡后的元數(shù)據(jù)存放在SRAM中,而不造成較大的硬件開銷.

Fig.5 Set-associative mapped and direct mapped hybrid memory圖5 組相聯(lián)映射和直接映射的層次化混合內(nèi)存
使用直接映射,硬件電路簡單,容易實(shí)現(xiàn),但存在著命中率低的問題.在LLC和主存的直接映射中,每一塊主存數(shù)據(jù)只能映射在固定的cache空間上,如果兩塊映射在同一cache空間的主存數(shù)據(jù)在某時間段內(nèi)都被頻繁訪問時會成數(shù)據(jù)頻繁的換入換出,DRAM命中率嚴(yán)重下降.但考慮到,本架構(gòu)中使用4 GB的大容量DRAM,2個可能發(fā)生沖突的主存數(shù)據(jù)塊在物理地址上相隔4 GB的距離,因此在這樣的大容量DRAM緩存和NVM主存間使用直接映射的方式,產(chǎn)生緩存數(shù)據(jù)塊替換的概率會下降很多,而且后續(xù)提到的DRAM緩存過濾機(jī)制也能在一定程度上減少這種頻繁的數(shù)據(jù)交換.在后續(xù)實(shí)驗(yàn)部分進(jìn)行的混合內(nèi)存上映射方式敏感性測試也佐證了這一點(diǎn).
在訪存流程中,查找DRAM發(fā)生缺失時,會先從NVM中取數(shù)據(jù)到DRAM中,然后在DRAM中訪問數(shù)據(jù).每次DRAM缺失都會造成一次數(shù)據(jù)的預(yù)取,由于本系統(tǒng)中使用4 KB的粗粒度DRAM數(shù)據(jù)塊,因此頻繁的取數(shù)據(jù)操作產(chǎn)生的數(shù)據(jù)拷貝量會造成嚴(yán)重的帶寬壓力.文獻(xiàn)[22]中指出,如果每一次DRAM缺失,都從NVM主存中加載數(shù)據(jù),當(dāng)DRAM緩存數(shù)據(jù)粒度是2 KB時,在某些場景下就可能造成100%的帶寬占用.因此需要在層次化混合內(nèi)存系統(tǒng)中加入過濾機(jī)制,避免向DRAM緩存中加載熱度低的數(shù)據(jù)塊,以降低對內(nèi)存帶寬的占用.
圖6展示的是采用DRAM預(yù)取過濾機(jī)制后的訪存流程.CPU發(fā)出的訪求請求通過地址轉(zhuǎn)換得到物理地址,再到cache中查找.如果cache命中,則直接訪問cache上的數(shù)據(jù);否則,首先查找DRAM緩存中的元數(shù)據(jù).若DRAM命中,則直接訪問DRAM上的數(shù)據(jù);若DRAM缺失,則查找存放在SRAM上的數(shù)據(jù)塊熱度記錄表.數(shù)據(jù)塊熱度記錄表有1 024個表項(xiàng),存儲著當(dāng)前監(jiān)測周期內(nèi)最近最頻繁訪問的NVM中的4 KB數(shù)據(jù)塊的熱度信息.如果所訪問的數(shù)據(jù)塊信息不在數(shù)據(jù)塊熱度記錄表中,則直接訪問NVM內(nèi)存并插入一條新的表項(xiàng)到數(shù)據(jù)塊熱度記錄表中,這樣過濾掉取一個NVM數(shù)據(jù)塊到DRAM中的操作.若所訪問的數(shù)據(jù)塊熱度信息在數(shù)據(jù)塊熱度記錄表中,則需要判斷其熱度是否大于閾值.如果大于閾值,該數(shù)據(jù)塊被鑒定為熱數(shù)據(jù),被緩存到DRAM中;否則,直接訪問NVM,并更新數(shù)據(jù)塊熱度信息,該數(shù)據(jù)塊暫時不會被緩存到DRAM中.

Fig.6 Memory access process while using cache filter圖6 使用緩存過濾時的訪存流程
通過上述的過濾機(jī)制,只有熱度足夠的NVM數(shù)據(jù)塊才會被緩存到DRAM中,避免了將大量冷數(shù)據(jù)塊緩存到DRAM中,從而降低了混合內(nèi)存間數(shù)據(jù)交換對內(nèi)存帶寬造成的壓力.
如圖7所示,以108個CPU時鐘周期為時間片記錄每個周期內(nèi)混合內(nèi)存間數(shù)據(jù)交換對帶寬的占用情況,分別畫出了不使用過濾機(jī)制和使用過濾機(jī)制運(yùn)行Linpack[23]應(yīng)用時,數(shù)據(jù)交換對內(nèi)存帶寬占用百分比隨時間變化的曲線圖.未使用過濾機(jī)制的Linpack在起始階段對帶寬的占用在20%,隨著時間推移,訪存特征發(fā)生變化,對帶寬的占用迅速提高到100%,這個時候系統(tǒng)甚至?xí)l(fā)生癱瘓.而使用了過濾機(jī)制后,由于根據(jù)應(yīng)用的實(shí)時訪存特征,動態(tài)的調(diào)整熱度閾值,只把滿足熱度閾值的熱數(shù)據(jù)緩存到DRAM中,帶寬占用始終被控制在較低的水平.

Fig.7 Bandwidth occupancy with cache filter and without filter圖7 使用緩存過濾和不使用過濾時的帶寬占用
要在DRAM上使用過濾機(jī)制,需要知道NVM上數(shù)據(jù)塊的熱度信息.本系統(tǒng)中NVM上熱度信息監(jiān)測的粒度和DRAM緩存管理粒度一致,都是4 KB數(shù)據(jù)塊.在NVM上以4 KB為粒度監(jiān)測數(shù)據(jù)塊的訪存信息,每個4 KB數(shù)據(jù)塊需要使用2 B的計(jì)數(shù)器來存儲熱度值,以保證數(shù)據(jù)塊在周期時間內(nèi)的熱度值不會超過計(jì)數(shù)器最大計(jì)數(shù)范圍.對于本架構(gòu)中32 GB的NVM,監(jiān)測所有的NVM數(shù)據(jù)塊需要16 MB空間存儲熱度信息,數(shù)據(jù)量太大,存儲在SRAM中不現(xiàn)實(shí).而每次DRAM缺失時,都需要查找一次訪存請求所訪問數(shù)據(jù)塊的熱度值,為了縮短查找時延,需要將熱度信息存儲在高速的SRAM中.這就是當(dāng)前面臨著的矛盾.
文獻(xiàn)[24]中通過實(shí)驗(yàn)分析大量應(yīng)用的訪存特征,得出雖然大部分應(yīng)用總的內(nèi)存占用很大,但是在一定的時間周期內(nèi)(108cycle)所訪問到的工作集只是其中很小的一部分.在本系統(tǒng)中由于DRAM緩存讀緩存請求的過濾作用,大部分訪存請求都直接訪問DRAM中的數(shù)據(jù),實(shí)際上訪問NVM內(nèi)存的部分工作集就更少了.根據(jù)這一特性,我們增加了一小塊SRAM,用來存放數(shù)據(jù)塊熱度信息記錄表.每個熱度信息表項(xiàng)需要8 B的存儲空間,包括3部分組成:1)28 b的NVM數(shù)據(jù)塊的塊號,用來記錄NVM中數(shù)據(jù)塊的塊號信息,最大可支持1TB大小的主存,有很強(qiáng)的可擴(kuò)展性.2)22 b的最近最少使用(least recently used, LRU)值,用來記錄當(dāng)前熱度信息記錄表中表項(xiàng)的LRU信息.3)14 b的熱度值,記錄當(dāng)前數(shù)據(jù)塊的熱度.本系統(tǒng)中的熱度記錄表包括1 024個表項(xiàng),只需要8 KB的硬件存儲開銷.
在DRAM緩存過濾機(jī)制中,每次DRAM缺失都需要查找數(shù)據(jù)塊熱度記錄表以確定是否要將訪存請求訪問的數(shù)據(jù)塊緩存到DRAM中.如果熱度信息記錄表的表項(xiàng)數(shù)太少,會造成大量的表項(xiàng)替換,一些舊的數(shù)據(jù)塊的熱度信息就會丟失,對熱度監(jiān)測的準(zhǔn)確性造成影響.為了驗(yàn)證使用1 024個表項(xiàng)來維護(hù)熱度信息是否足夠,我們統(tǒng)計(jì)了查找熱度信息記錄表的命中率.經(jīng)過實(shí)驗(yàn)得出查找熱度信息表的平均命中率高達(dá)99.1%,只有極少的舊表項(xiàng)會被換出,證明了本系統(tǒng)中使用1 024個表項(xiàng)是足夠的.由于NVM讀寫不對稱,讀延遲是DRAM的幾倍,而寫延遲比DRAM高一個數(shù)量級.同時NVM寫耐受力差,頻繁的寫操作容易破壞NVM的存儲單元.因此更傾向于將寫熱度高的數(shù)據(jù)鑒定為熱頁加載到DRAM中.在統(tǒng)計(jì)NVM數(shù)據(jù)塊訪問熱度時,對于讀寫操作分別給予不同的熱度權(quán)重.每對NVM內(nèi)存進(jìn)行一次讀操作,增加Tnvm_read_cycle-Tdram_read_cycle的熱度值,其中Tnvm_read_cycle和Tdram_read_cycle分別代表NVM和DRAM進(jìn)行一次讀操作平均所需的時鐘周期數(shù).每對NVM內(nèi)存進(jìn)行一次寫操作,增加Tnvm_write_cycle-Tdram_write_cycle的熱度值,其中Tnvm_write_cycle和Tdram_write_cycle分別代表NVM和DRAM進(jìn)行一次讀操作平均所需的時鐘周期數(shù).由于寫操作密集的數(shù)據(jù)放置在DRAM中帶來的收益更大,因此寫操作在數(shù)據(jù)塊熱度計(jì)算過程中被賦予了更大的權(quán)重,寫操作頻繁的數(shù)據(jù)塊就更容易達(dá)到閾值從而被緩存到DRAM中.
除了記錄NVM數(shù)據(jù)塊的熱度信息,也用一個計(jì)數(shù)器記錄每個周期內(nèi)混合內(nèi)存間數(shù)據(jù)交換的數(shù)據(jù)量,用來估算數(shù)據(jù)交換對內(nèi)存帶寬的壓力.同時也記錄DRAM緩存的訪問次數(shù)和命中次數(shù),用來計(jì)算每個周期內(nèi)實(shí)時的DRAM命中率,用于指導(dǎo)閾值的動態(tài)調(diào)整策略.
閾值的選取,決定了在DRAM缺失時是否從NVM主存中將請求的數(shù)據(jù)塊加載到DRAM中.閾值選取過低,會減弱了過濾機(jī)制的作用,將大量訪問熱度不高的數(shù)據(jù)也加載到DRAM中.閾值選取過高,熱數(shù)據(jù)很晚才能被加載到DRAM中,NVM會承受大量的讀寫操作,會降低系統(tǒng)的性能和使用壽命.由于應(yīng)用的訪存特征在運(yùn)行過程中會動態(tài)地發(fā)生變化,不同的應(yīng)用訪存特征差異性也較大.為了保證系統(tǒng)的靈活性和可用性,需要使用動態(tài)的熱度閾值調(diào)整策略.
在本系統(tǒng)中,對于閾值的動態(tài)調(diào)整,為了盡可能優(yōu)化系統(tǒng)的性能,有3點(diǎn)因素需要考慮:1)DRAM實(shí)時的命中率.DRAM的命中率越高,從NVM中取數(shù)據(jù)的次數(shù)就越少,性能、帶寬上的表現(xiàn)也會好.因此在帶寬條件允許的情況下適當(dāng)?shù)亟档烷撝担瑢⒏嗟臄?shù)據(jù)加載到DARM緩存中,有助于提高DRAM緩存的命中率,從而提升系統(tǒng)整體性能.2)大多數(shù)應(yīng)用的工作集小于DRAM緩存大小,對于這類應(yīng)用,設(shè)置較低的閾值,將其全部工作集盡早的調(diào)入到DRAM緩存中有利于提高系統(tǒng)的性能.3)要考慮帶寬的占用情況,避免出現(xiàn)帶寬100%占用的情形.在帶寬占用嚴(yán)重時,應(yīng)快速大步長的提高熱度閾值,減少數(shù)據(jù)交換量,防止數(shù)據(jù)交換對內(nèi)存帶寬造成巨大壓力.根據(jù)上述的3點(diǎn)因素,在SSLDC中提出了基于應(yīng)用運(yùn)行過程中實(shí)時信息的動態(tài)閾值調(diào)整算法.
閾值動態(tài)調(diào)整的過程如下:
1) 考慮DRAM的命中率.當(dāng)DRAM命中率小于10%時,此時的閾值可能設(shè)置得太大了,導(dǎo)致最近訪問的數(shù)據(jù)熱度很難達(dá)到將其緩存到DRAM中所需的閾值.此時需要快速地以大步長來減小閾值;當(dāng)DRAM命中率在10%~50%時,混合內(nèi)存的性能不是很好,此時適當(dāng)?shù)販p小閾值,以提升DRAM命中率;當(dāng)DRAM命中率在50%~80%之間時,在不對內(nèi)存帶寬產(chǎn)生壓力的情況下,以小步長減小閾值以進(jìn)一步提高DRAM命中率.
2) 考慮實(shí)時的DRAM緩存使用情況.在DRAM空間比較富余時,將閾值設(shè)為0,盡可能地利用空閑的DRAM緩存.
3) 考慮帶寬的實(shí)時占用情況.前面2點(diǎn)都是盡可能地在帶寬允許的條件下減小閾值,以達(dá)到更高的DRAM命中率.在本策略中,每個周期都會統(tǒng)計(jì)DRAM和NVM間數(shù)據(jù)交換所產(chǎn)生的帶寬占用量,根據(jù)這個占用情況來最終決定閾值的設(shè)置.當(dāng)數(shù)據(jù)交換產(chǎn)生的帶寬占用小于10%時,不會對內(nèi)存帶寬產(chǎn)生壓力,因此不進(jìn)一步對閾值進(jìn)行調(diào)整.當(dāng)數(shù)據(jù)交換的帶寬占用超過20%時,此時會較嚴(yán)重的對內(nèi)存帶寬產(chǎn)生壓力,大步長的增加閾值,從而過濾掉更多數(shù)據(jù)交換的操作.當(dāng)數(shù)據(jù)交換的帶寬占用在15%~20%之間時,存在一定的帶寬壓力,此時適當(dāng)?shù)脑黾娱撝担档蛿?shù)據(jù)交換所產(chǎn)生的內(nèi)存占用;當(dāng)這部分帶寬占用在10%~15%之間時,小步長的增加閾值,將數(shù)據(jù)交換產(chǎn)生的帶寬占用控制到10%左右.
使用了動態(tài)閾值調(diào)整技術(shù)后,DRAM和NVM間數(shù)據(jù)交換產(chǎn)生的帶寬占用維持在10%左右,在不對帶寬產(chǎn)生明顯壓力的情況下,盡可能地降低閾值以提高DRAM命中率,從而提高系統(tǒng)整體性能.
本系統(tǒng)是基于zsim[25]和 NVMain[26]兩個廣泛使用的模擬器實(shí)現(xiàn)的.其中,zsim是一個快速的x86-64架構(gòu)的多核模擬器,它使用Intel Pin[27]工具收集處理器的訪存信息,并且在zsim中進(jìn)行重放.我們借鑒了文獻(xiàn)[24]對zsim做的修改,同樣在zsim源碼中加入了對操作系統(tǒng)功能的模擬模塊(比如伙伴分配器、頁表及TLB管理等).CPU訪存前,首先調(diào)用伙伴分配器為虛擬頁分配對應(yīng)的物理頁,并在頁表中建立虛擬頁到物理頁的映射;CPU訪存時,通過TLB獲取虛擬地址對應(yīng)的物理地址.另一個模擬器—NVMain,是一個時鐘精確性的內(nèi)存模擬器,它可以同時模擬DRAM以及NVM內(nèi)存的訪存行為.在實(shí)驗(yàn)中,我們使用NVMain來模擬DRAM與NVM組成的混合內(nèi)存系統(tǒng).
本系統(tǒng)詳細(xì)配置信息如表1所示.因?yàn)镻CM是研究領(lǐng)域中主流的NVM介質(zhì).我們選擇PCM作為NVM的代表,其中具體的時序和能耗參數(shù)主要參考文獻(xiàn)[24]和文獻(xiàn)[28].

Table 1 System Detailed Configuration 表1 系統(tǒng)詳細(xì)配置

Table 1 (Continued)
我們測試了不同訪存特征的測試集,如表2所示,這些測試用例選自SPEC CPU 2006[29],Parsec[30],Problem Based Benchmarks Suit (PBBS)[31]以及大內(nèi)存應(yīng)用Graph500[32],Linpack[23]和NPB-CG[33].其中mcf,soplex,freqmine,BFS,setCover等應(yīng)用的內(nèi)存占用小于4 GB大小.MST,Graph500,Linpack,NPB-CG的內(nèi)存占用均超過4 GB.

Table 2 Benchmarks表2 應(yīng)用程序測試集
為了衡量本系統(tǒng)在系統(tǒng)性能、能耗、帶寬占用等方面的表現(xiàn),共設(shè)置了5組系統(tǒng)進(jìn)行對比:
1) NVM-2 MB.主存由單一的32 GB NVM存儲器構(gòu)成的系統(tǒng),在所有對比系統(tǒng)中,性能最差.
2) DRAM-2 MB.主存由單一的32 GB DRAM存儲器構(gòu)成的系統(tǒng),在所有對比系統(tǒng)中,能耗較高,價格最貴,但性能最好.
3) CHOP.文獻(xiàn)[4]中提到的層次化結(jié)構(gòu)混合內(nèi)存系統(tǒng),采用4 GB的DRAM緩存、32 GB的NVM主存,操作系統(tǒng)中使用2 MB的大頁.DRAM緩存的管理粒度是4 KB,并使用固定閾值的過濾機(jī)制對DRAM上的緩存數(shù)據(jù)的操作進(jìn)行過濾.
4) SSLDC.本文中設(shè)計(jì)的支持大頁和大容量緩存的層次化混合內(nèi)存的SSLDC系統(tǒng),使用層次化的混合內(nèi)存架構(gòu),4 GB DRAM使用4 KB的粗粒度管理方式,與32 GB的NVM以直接映射的方式相聯(lián),操作系統(tǒng)中使用2 MB大頁.在DRAM緩存上使用本文描述的過濾機(jī)制,判斷數(shù)據(jù)塊熱度的閾值根據(jù)實(shí)時訪存情況進(jìn)行動態(tài)的調(diào)整.
5) SSLDC_no_filter.和SSLDC大致相同,只是不對DRAM上緩存數(shù)據(jù)的操作進(jìn)行過濾.
本文將平均每個時鐘周期執(zhí)行的指令條數(shù)(instructions per cycle, IPC)作為系統(tǒng)性能的指標(biāo).在測試中把NVM-2 MB系統(tǒng)作為參照組;DRAM-2 MB因?yàn)闆]有頁面遷移開銷并且開啟了大頁,所以DRAM-2 MB的性能是所有測試系統(tǒng)的上限.圖8顯示了5組對比系統(tǒng)的性能結(jié)果圖.

Fig.8 Systems IPC result圖8 系統(tǒng)IPC結(jié)果
從圖8可以看出,SSLDC相對于NVM-2 MB和CHOP分別平均有69.9%和15.2%的性能提升,并且距離上限(DRAM-2 MB)平均只有8.8%的性能差距.對于內(nèi)存占用小于DRAM緩存大小的應(yīng)用,SSLDC和SSLDC_no_filter的性能接近,增加了過濾機(jī)制對于性能的影響不大.這是因?yàn)镾SLDC中的動態(tài)熱度閾值調(diào)整策略,會在DRAM使用量小于70%時將閾值設(shè)置為0,相當(dāng)于停止了過濾,因此對于內(nèi)存占用小于DRAM緩存大小的應(yīng)用,兩者性能十分接近.Graph500雖然內(nèi)存占用達(dá)到幾十GB,但本次測試只運(yùn)行了4×1010條指令,產(chǎn)生的工作集大概是2865 MB,小于DRAM緩存的大小,因此SSLDC和SSLDC_no_filter的性能也是接近的.MST,Linpack,NPB-CG產(chǎn)生的工作集均大于DRAM緩存的容量,SSLDC的性能都僅次于DRAM-2 MB的性能上限.對于內(nèi)存占用小于DRAM緩存的應(yīng)用,CHOP的性能普遍比SSLDC和SSLDC_no_filter要差.這因?yàn)镃HOP中靜態(tài)閾值設(shè)置得有些高,數(shù)據(jù)塊需要達(dá)到很熱才會被緩存到DRAM中,在此之間都在NVM中訪問,因此性能較差.而SSLDC和SSLDC_no_filter很早就把所有數(shù)據(jù)緩存到DRAM中,因此性能較好.而對于Linpack,MST,NPB-CG等內(nèi)存占用大的應(yīng)用,CHOP的性能都要好于SSLDC_no_filter.因?yàn)檫@類應(yīng)用的數(shù)據(jù)不能全部緩存到DRAM中,SSLDC_no_filter沒有過濾機(jī)制,在DRAM和NVM之間會頻繁的交換數(shù)據(jù),占用大量帶寬同時產(chǎn)生巨大的數(shù)據(jù)拷貝開銷,性能會比較差.
圖9顯示了各個系統(tǒng)的能耗對比.其中,NVM-2 MB系統(tǒng)作為對照系統(tǒng).

Fig.9 Power consumption result圖9 能耗結(jié)果
從圖9中可以看出DRAM-2 MB系統(tǒng)能耗最高,這是因?yàn)镈RAM產(chǎn)生了較多的靜態(tài)能耗.類似地,CHOP,SSLDC_no_filter和SSLDC能耗高于對照系統(tǒng)(NVM-2 MB)的原因也有部分是因?yàn)樵黾恿薉RAM刷新能耗,此外還有頁面拷貝到DRAM以及寫回到NVM中的能耗.從圖9中我們可以看到,與DRAM-2 MB,CHOP相比,SSLDC平均降低67.6%和20.1%的能耗.NVM有著較低的靜態(tài)功耗,但注意到mcf,setCover,Graph500,NPB-CG這幾個應(yīng)用的NVM-2 MB能耗并不是最低的,尤其是mcf和setCover,NVM-2 MB的能耗僅次于DRAM-2 MB,雖然比DRAM-2 MB的能耗低很多.這是因?yàn)閙cf和setCover等應(yīng)用有頻繁的訪存操作,NVM讀寫的動態(tài)功耗較大,因此NVM-2 MB運(yùn)行這些應(yīng)用時功耗較高.SSLDC在能耗方面表現(xiàn)優(yōu)秀,對于大多數(shù)應(yīng)用都有著較低的能耗.
圖10顯示了CHOP,SSLDC_no_filter和SSLDC三種策略的帶寬使用對比.在本實(shí)驗(yàn)中以CHOP作為對照系統(tǒng).

Fig.10 Bandwidth occupancy result圖10 帶寬占用結(jié)果
從圖10可以看出,相比于CHOP,SSLDC_no_filter和SSLDC增加了39.9%和36.9%的帶寬占用.這是因?yàn)镃HOP中的靜態(tài)閾值設(shè)置得較高,所以有很強(qiáng)的過濾能力.如4.2節(jié)性能測試中提到的,CHOP閾值設(shè)置過高導(dǎo)致只有熱度很高的數(shù)據(jù)才能被緩存到DRAM中,NVM因此承受了大量的讀寫,導(dǎo)致系統(tǒng)性能較差.對于mcf,soplex,freqmine等應(yīng)用完全可以將全部工作集盡早地緩存到DRAM中,以提高系統(tǒng)性能.但過高的閾值阻礙了將數(shù)據(jù)緩存到DRAM的操作.圖10中這3個應(yīng)用的帶寬占用量明顯低于其他2組的原因,正是由于閾值設(shè)置的不合理.圖10中顯示的是運(yùn)行全部測試集的平均帶寬占用情況,所以大多數(shù)應(yīng)用的帶寬占用在3組策略下區(qū)別不大.
圖11顯示了SSLDC中大頁優(yōu)化的效果圖.其中縱坐標(biāo)顯示的是每運(yùn)行一千條指令所產(chǎn)生的TLB 缺失次數(shù)(TLB misses per kilo instructions,MPKI).通過圖11可以看出開啟大頁后顯著地降低了TLB缺失次數(shù),對于Linpack等內(nèi)存占用較大的應(yīng)用,可以降低99.96%的TLB缺失率.平均來說SSLDC開啟大頁可以降低99.8%的TLB缺失率.
圖12顯示的是,在操作系統(tǒng)中使用2 MB大頁和使用4 KB時系統(tǒng)IPC的對比情況,對于mcf,soplex,setCover,Graph500,NPB-CG等應(yīng)用,使用大頁后性能提升明顯,其中Graph500應(yīng)用的性能提升超過220%.使用大頁后,相對于使用4 KB基本頁的平均性能提升高達(dá)37.3%.

Fig.11 MPKI result圖11 MPKI結(jié)果

Fig.12 IPC result圖12 IPC結(jié)果
為了驗(yàn)證混合內(nèi)存間映射方式對DRAM命中率以及性能的影響,選取了3個代表性的應(yīng)用來進(jìn)行映射方式的敏感性實(shí)驗(yàn).
如圖13展示了3個應(yīng)用在使用直接映射、4路組相聯(lián)映射、8路組相聯(lián)映射、16路組相聯(lián)映射這4組不同映射策略時的DRAM命中率.從圖13中可以看出采用不同的映射方式,DRAM命中率變化不大.

Fig.13 Effect of mapping mode on DRAM hit rate圖13 映射方式對DRAM命中率的影響
圖14中也同樣顯示出,混合內(nèi)存間的映射關(guān)系對系統(tǒng)IPC的影響不大.因此在本架構(gòu)中使用直接映射的方式不會對DRAM命中率和系統(tǒng)性能產(chǎn)生顯著影響.

Fig.14 Effect of mapping mode on IPC圖14 映射方式對IPC的影響
為了研究DRAM容量對DRAM命中率和系統(tǒng)性能的影響,分別進(jìn)行了1 GB,2 GB,4 GB,8 GB不同DRAM緩存容量配置的實(shí)驗(yàn).
DRAM容量對DRAM命中率的影響如圖15所示,DRAM緩存容量越大,命中率也越高.

Fig.15 Effect of DRAM capacity on DRAM hit rate圖15 DRAM容量對DRAM命中率的影響

Fig.16 Effect of DRAM capacity on IPC圖16 DRAM容量對IPC的影響
如圖16所示,使用更大容量的DRAM緩存可以有效地提高系統(tǒng)性能和DRAM命中率.Linpack的8 GB DRAM這一組實(shí)驗(yàn)的IPC比使用1 GB DRAM時提高了50%,DRAM緩存命中率也提高了大約5倍.soplex和BFS的IPC與DRAM命中率都隨著DRAM緩存容量的增大有所提升.因此在層次化混合內(nèi)存中支持大容量的DRAM有顯著優(yōu)勢.
在DRAM緩存過濾機(jī)制中,每次DRAM缺失都需要查找數(shù)據(jù)塊熱度記錄表以確定是否要將訪存請求訪問的數(shù)據(jù)塊緩存到DRAM中.查找數(shù)據(jù)塊熱度記錄表在訪存的關(guān)鍵路徑上,雖然數(shù)據(jù)塊熱度記錄表存儲在高速訪問的SRAM中,但仍需要分析一下這部分開銷對整體性能的影響.
圖17展示的是查找數(shù)據(jù)塊熱度記錄表的開銷在整個程序執(zhí)行時間中的占比.對于大多數(shù)應(yīng)用,使用過濾機(jī)制產(chǎn)生的額外開銷只有不到1%,幾乎可以忽略不計(jì).對于Linpack和NPB-CG,這部分開銷超過了3%,這是因?yàn)長inpack和NPB-CG的內(nèi)存占用非常大,且訪存的局部性比較差,所以DRAM的命中率較低,造成了較多次數(shù)的數(shù)據(jù)塊熱度信息表查找.

Fig.17 Time spent in hotness table lookup圖17 查找熱度信息記錄表的時間開銷
在本系統(tǒng)中,有2部分?jǐn)?shù)據(jù)需要存儲在SRAM中:
1) DRAM緩存的元數(shù)據(jù).因?yàn)樵贒RAM緩存中使用4 KB的粗粒度管理方式,且在DRAM緩存和NVM主存之間使用直接映射的方式,進(jìn)一步簡化了元數(shù)據(jù)的結(jié)構(gòu),降低了硬件存儲開銷.對于本系統(tǒng)中4 GB的DRAM緩存,僅需要1 MB的SRAM硬件存儲開銷.
2) 數(shù)據(jù)塊熱度信息記錄表.在周期性的監(jiān)測NVM數(shù)據(jù)塊熱度信息時,用一塊SRAM存放當(dāng)前最近最頻繁訪問的NVM數(shù)據(jù)塊的熱度信息.每一個表項(xiàng)需要8 B,1 024個表項(xiàng)一共需要8 KB的SRAM存儲開銷.
總體來看,本系統(tǒng)的硬件存儲開銷在可以接受的范圍內(nèi)是可實(shí)現(xiàn)的.
本文設(shè)計(jì)了一個能同時支持大頁和大容量DRAM緩存的層次化混合內(nèi)存系統(tǒng).為了優(yōu)化元數(shù)據(jù)結(jié)構(gòu),以盡可能地減小元數(shù)據(jù)存儲開銷,在DRAM中使用4 KB數(shù)據(jù)塊粒度,并在DRAM緩存和NVM主存之間使用直接映射的方式維護(hù)地址映射信息,精簡了元數(shù)據(jù)結(jié)構(gòu),所以大容量DRAM緩存的元數(shù)據(jù)都可以放置在SRAM中.考慮到DRAM每次缺失時都需要從NVM中讀取數(shù)據(jù),這將帶來嚴(yán)重的帶寬占用.為了減小帶寬壓力,增加了一個過濾機(jī)制,只有NVM中訪問熱度達(dá)到閾值的熱數(shù)據(jù)塊才能被緩存到NVM中,避免了不必要的冷數(shù)據(jù)讀取產(chǎn)生的帶寬占用.提出了一個動態(tài)熱度閾值調(diào)整方法,根據(jù)應(yīng)用實(shí)時的內(nèi)存信息周期性的動態(tài)調(diào)整熱度閾值,保證在不造成內(nèi)存帶寬壓力的情況下,盡可能地遷移熱數(shù)據(jù)提高DRAM命中率,從而提高系統(tǒng)整體性能.與使用大頁的純NVM內(nèi)存和現(xiàn)有的CHOP策略相比分別平均有69.9%和15.2%的性能提升,并且與使用大頁的純DRAM內(nèi)存系統(tǒng)相比也平均只有8.8%的性能差距.

[1]Alam H, Zhang Tianhao, Erez M, et al.Do-It-Yourself virtual memory translation [C]//Proc of the 44th Annual Int Symp on Computer Architecture.Los Alamitos, CA: IEEE Computer Society, 2017: 457468
[2]Mccurdy C, Coxa A L, Vetter J.Investigating the TLB behavior of high-end scientific applications on commodity microprocessors [C]//Proc of the IEEE Int Symp on Performance Analysis of Systems and Software (ISPASS 2008).Los Alamitos, CA: IEEE Computer Society, 2008: 95104
[3]Basu A, Gandhi J, Chang Jichuan, et al.Efficient virtual memory for big memory servers [J].ACM SIGARCH Computer Architecture News, 2013, 41(3): 237248
[4]Barr T W, Cox A L, Rixner S.Translation caching: Skip, don’t walk (the page table) [J].ACM SIGARCH Computer Architecture News, 2010, 38(3): 4859
[5]Bhattacharjee A.Large-reach memory management unit caches [C]//Proc of the 46th Annual IEEE/ACM Int Symp on Microarchitecture.New York: ACM, 2013: 383394
[6]Chen Yujie.Hardware/software cooperative caching for hybrid DRAM/NVM memory architectures [D].Wuhan: College of Computer Science and Technology, Huazhong University of Science and Technology, 2017 (in Chinese)(陳宇杰.軟硬件協(xié)同管理的異構(gòu)內(nèi)存緩存機(jī)制[D].武漢: 華中科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 2017)
[7]Mao Wei, Liu Jingning, Tong Wei, et al.A review of storage technology research based on phase change memory [J].Chinese Journal of Computers, 2015, 38(5): 944960 (in Chinese)(冒偉, 劉景寧, 童薇, 等.基于相變存儲器的存儲技術(shù)研究綜述[J].計(jì)算機(jī)學(xué)報(bào), 2015, 38(5): 944960)
[8]Meza J, Chang Jichuan, Yoon H B, et al.Enabling efficient and scalable hybrid memories using fine-granularity DRAM cache management [J].IEEE Computer Architecture Letters, 2012, 11(2): 6164
[9]Qureshi M K, Loh G H.Fundamental latency trade-off in architecting DRAM caches: Outperforming impractical SRAM-Tags with a simple and practical design [C]//Proc of the 45th Annual IEEE/ACM Int Symp on Microarchitecture.Piscataway, NJ: IEEE, 2012: 235246
[10]Qureshi M K, Srinivasan V, Rivers J A.Scalable high performance main memory system using phase-change memory technology [C]//Proc of the 36th Annual Int Symp on Computer Architecture.New York: ACM, 2009: 2433
[11]Ryoo J H, Meswani M R, Panda R, et al.SILC-FM: Subblocked interleaved cache-like flat memory organization [C]//Proc of the 2016 Int Conf on Parallel Architectures and Compilation.Piscataway, NJ: IEEE, 2017: 435437
[12]Bock S, Childers B R, Melhem R, et al.Concurrent migration of multiple pages in software-managed hybrid main memory [C]//Proc of ICCD2016.Piscataway, NJ: IEEE, 2016: 420423
[13]Salkhordeh R, Asadi H.An operating system level data migration scheme in hybrid DRAM-NVM memory architecture [C]//Proc of the 2016 Conf on Design, Automation & Test in Europe.Piscataway, NJ: IEEE, 2016: 936941
[14]Barr T W, Cox A L, Rixner S.SpecTLB: A mechanism for speculative address translation [C]//Proc of the 38th Annual Int Symp on Computer Architecture.Piscataway, NJ: IEEE, 2011: 307317
[15]Talluri M, Hill M D.Surpassing the TLB performance of superpages with less operating system support [J].ACM SIGPLAN Notices, 1994, 29(11): 171182
[16]Muck J, Hays J.Architectural support for translation table management in large address space machines [C]//Proc of the 20th Annual Int Symp on Computer Architecture.Piscataway, NJ: IEEE, 1993: 3950
[17]Bhargava R, Serebrin B, Spadini F, et al.Accelerating two-dimensional page walks for virtualized systems [C]//Proc of the 13th Int Conf on Architectural Support for Programming Languages and Operating Systems.New York: ACM, 2008: 2635
[18]Korn W, Chang M S.SPEC CPU2006 sensitivity to memory page sizes [J].ACM SIGARCH Computer Architecture News, 2007, 35(1): 97101
[19]Zhang Xiaohui, Jiang Yifei, Cong Ming.Performance improvement for multicore processors using variable page technologies [C]//Proc of the 6th 2011 IEEE Int Conf on Networking, Architecture, and Storage.Piscataway, NJ: IEEE, 2011: 230235
[20]Chou C C, Jaleel A, Qureshi M K.CAMEO: A two-level memory organization with capacity of main memory and flexibility of hardware-managed cache [C]//Proc of the 47th Annual IEEE/ACM Int Symp on Microarchitecture.Piscataway, NJ: IEEE, 2014: 112
[21]Loh G H, Hill M D.Efficiently enabling conventional block sizes for very large die-stacked DRAM caches [C]//Proc of the 44th Annual IEEE/ACM Int Symp on Microarchitecture.New York: ACM, 2011: 454464
[22]Jiang Xiaowei, Madan N, Zhao Li, et al.CHOP: Adaptive filter-based DRAM caching for CMP server platforms [C]//Proc of the 16th Int Symp on High Performance Computer Architecture(HPCA).Piscataway, NJ: IEEE, 2010: 112
[23]Linpack.Benchmark programs and reports[EB/OL].[2018-04-05].http://www.netlib.org/benchmark/
[24]Liu Haikun, Chen Yujie, Liao Xiaofei, et al.Hardware/software cooperative caching for hybrid DRAM/NVM memory architectures [C]//Proc of the Int Conf on Supercomputing (ICS’17).New York: ACM, 2017: Article Number 26
[25]Sanchez D, Kozyrakis C.ZSim: Fast and accurate microarchitectural simulation of thousand-core systems [J].ACM SIGARCH Computer Architecture News, 2013, 41(3): 475486
[26]Poremba M, Zhang Tao, Xie Yuan.NVMain 2.0: A user-friendly memory simulator to model (non-) volatile memory systems [J].IEEE Computer Architecture Letters, 2015, 14(2): 140143
[27]Luk C K, Cohn R, Muth R, et al.Pin: Building customized program analysis tools with dynamic instrumentation [J].ACM SIGPLAN Notices, 2005, 40(6): 190200
[28]Lee B C, Ipek E, Mutlu O, et al.Architecting phase change memory as a scalable dram alternative [J].ACM SIGARCH Computer Architecture News, 2009, 37(3): 213
[29]Henning J L.SPEC CPU2006 benchmark descriptions [J].ACM SIGARCH Computer Architecture News, 2006, 34(4): 117
[30]Bienia C, Kumar S, Singh J P, et al.The PARSEC benchmark suite: Characterization and architectural implications [C]//Proc of the 17th Int Conf on Parallel Architectures and Compilation Techniques.New York: ACM, 2008: 7281
[31]Carnegie Mellon University.PBBS: Problem based benchmarks suit[EB/OL].[2018-04-05].http://www.cs.cmu.edu/pbbs/
[32]Standard Performance Evaluation Corporation.Graph500[EB/OL].[2018-04-05].http://graph500.org/
[33]NASA Advanced Supercomputing Division.NAS parallel benchmarks: NPB-CG[EB/OL].[2018-04-05].https://www.nas.nasa.gov/publications/npb.htmlChenJi, born in 1992.Master candidate.His main research interests include in-memory computing and operation system.