杜 嬌,錢育蓉,張 猛,趙京霞,張文沖
(新疆大學(xué)軟件學(xué)院,新疆 烏魯木齊 830008)
大數(shù)據(jù)時代,數(shù)據(jù)密集型應(yīng)用的比例逐漸超過計算密集型應(yīng)用,成為計算機系統(tǒng)中的主流應(yīng)用[1],內(nèi)存計算也隨之迅速發(fā)展,對存儲系統(tǒng)的容量、性能、功耗以及可拓展性不斷提出了更高的要求.目前的存儲系統(tǒng)中,應(yīng)用最廣泛的存儲器件是傳統(tǒng)的動態(tài)隨機存取存儲器(Dynamic Random Access Memory,DRAM),然而DRAM存儲技術(shù)受其本身工藝尺寸、存儲密度、掉電數(shù)據(jù)丟失等特性的限制[2],難以滿足大數(shù)據(jù)時代對海量信息存儲的需求[3],計算瓶頸問題逐漸轉(zhuǎn)化為I/O瓶頸問題,為能提供與計算能力相匹配的I/O能力,需對現(xiàn)有的存儲系統(tǒng)進行優(yōu)化甚至變革.
近年來,新型非易失性存儲器(Non-Volatile Memory,NVM)憑借其非易失性、漏電功耗低、存儲密度高和擴展性強等特性,為計算機存儲系統(tǒng)的發(fā)展帶來了新方向[4],但NVM各存儲單元存在壽命限制以及讀寫性能不對稱等問題,因此要真正發(fā)揮非易失存儲器的優(yōu)勢,解決上述兩個問題是前提.
改進目前主流內(nèi)存設(shè)備(DRAM)的能力,在很長一段時間內(nèi),科研工作者將壓縮DRAM工藝尺寸和成本,提高容量,降低其能耗作為研究目標,但DRAM面臨的一些問題依然沒有得到較好的解決.除此之外,目前應(yīng)用廣泛的還有閃存,閃存與磁盤相比無機械延遲,速度也相對較快,但遠遠不及阻變存儲器(Resistive Random Access Memory,RRAM)、相變存儲器(Phase Change Memory,PCM)等新型非易失存儲器.楊濮源等[5]基于磁盤和固態(tài)硬盤構(gòu)建混合存儲系統(tǒng),對數(shù)據(jù)頁進行精準分類,雖然提升性能,但固態(tài)硬盤與NVM相比較,在存儲性能方面仍然存在一定差距.
在非易失性存儲器領(lǐng)域方面國內(nèi)外學(xué)者也展開了許多研究.一部分研究者從材料及工藝出發(fā),致力于研制更高性價比的存儲介質(zhì).另一部分學(xué)者從軟件層面出發(fā),尋求提高存儲系統(tǒng)能力的方法.W.Wei等[6]為了能夠更準確地反映NVM混合主存系統(tǒng)中最后一級高速緩存的性能,設(shè)計了TMPKI(Transformed Misses Per-Kilo Instructions)性能度量制式;沈凡凡等[7]為降低緩存單元的寫壓力,提出了一種SRAM輔助新型非易失性緩存的磨損均衡方法;D.Liu等[8]將NVM上的寫操作在整個NVM芯片空間內(nèi)平均分布,通過磨損均衡的方法提高NVM的壽命.
通過對新型非易失性存儲器及混合存儲的研究現(xiàn)狀及背景進行分析,發(fā)現(xiàn)目前引入NVM構(gòu)建混合內(nèi)存系統(tǒng)主要有3種結(jié)構(gòu):第1種是NVM完全取代DRAM作為內(nèi)存;第2種是NVM與DRAM構(gòu)成混合內(nèi)存,但兩者處于同一層次;第3種是DRAM與NVM采用層次結(jié)構(gòu)構(gòu)成混合內(nèi)存結(jié)構(gòu)[9],這種情況下,DRAM充當緩存的角色.針對第1種結(jié)構(gòu),NVM目前存在寫操作延遲大、壽命有限的缺點,因此單獨使用NVM作為內(nèi)存是不可行的.若采用第2種層次結(jié)構(gòu),則內(nèi)存的大小為NVM的大小,處理器對DRAM是未知的,同時DRAM與NVM之間需要頻繁交換數(shù)據(jù),會影響系統(tǒng)的性能.因此本文基于第3種的混合內(nèi)存結(jié)構(gòu)進行了研究.
本文基于DRAM和RRAM構(gòu)建一種DRAM-RRAM混合存儲模型,針對混合內(nèi)存結(jié)構(gòu)中RRAM寫延遲大以及寫耐性有限的缺陷,從減少RRAM上寫操作數(shù)量的角度出發(fā),提出一種混合內(nèi)存管理策略,主要思想是通過將請求頁面按照寫訪問熱度進行劃分,將最近多次被寫的頁面設(shè)置為熱寫頁面,與之相對應(yīng)的,將最近很少發(fā)生寫操作的頁面定義為冷寫頁面,把熱寫頁面盡可能放置到DRAM上,冷寫頁面存到RRAM上,減少RRAM上的寫次數(shù),達到提高系統(tǒng)性能、延長RRAM壽命的目的.
RRAM存儲數(shù)據(jù)信息的方式是基于阻值變化的,它利用薄膜材料在不同電流激勵的作用下出現(xiàn)高低阻態(tài)之間的可逆轉(zhuǎn)變現(xiàn)象來進行數(shù)據(jù)存儲[10],高阻值時寫“1”,低阻值時寫“0”,與DRAM相比不需要充電操作,空閑時不耗能.其結(jié)構(gòu)簡單,由金屬-介質(zhì)-金屬構(gòu)成,有利于實現(xiàn)三維的高密度集成.國際半導(dǎo)體技術(shù)路線圖組織在其2013年度報告中指出,RRAM將成為下一代存儲器中最有力的候選者[11].
從單元存儲密度、容量、讀寫延遲、耐久性、寫能耗和易失性等方面出發(fā),將RRAM與常用存儲器件DRAM、NAND Flash進行了對比,見表1.發(fā)現(xiàn)DRAM的讀寫延遲小,耐久性好,但其功耗高,存儲密度相對較低.RRAM在功耗、讀寫性能、耐性等方面都優(yōu)于目前流行的閃存.
表1 常用存儲技術(shù)比較
在DRAM-RRAM混合內(nèi)存系統(tǒng)中,不僅要對DRAM的特性進行模擬重現(xiàn),還需模擬RRAM特性,因此需要設(shè)計一個混合內(nèi)存控制器來進行管理和控制,充當橋梁的角色,分別為上層和下層提供一個接口,響應(yīng)上層下發(fā)的請求,并通過接口從下層存儲介質(zhì)中查詢,并將執(zhí)行完的數(shù)據(jù)返回給CPU.圖1展示了引入RRAM后的混合內(nèi)存體系結(jié)構(gòu).傳統(tǒng)的內(nèi)存是直接與內(nèi)存總線相連接的,而本文則將DRAM和RRAM連接到內(nèi)存控制器上,內(nèi)存控制器再與內(nèi)存總線連接.
圖1 混合內(nèi)存體系結(jié)構(gòu)
內(nèi)存控制器負責管理DRAM和RRAM內(nèi)存,主要工作包含管理數(shù)據(jù)的訪存,實現(xiàn)地址映射、維護分區(qū)列表、命令產(chǎn)生、讀寫調(diào)度控制等,同時管理每一個對內(nèi)存發(fā)起訪問的請求.其中DRAM和RRAM分別設(shè)計存儲管理模塊,二者的地址空間是分別獨立的,任何時候一個數(shù)據(jù)頁只存在于一個設(shè)備上.內(nèi)存控制器維護DRAM和RRAM的分區(qū)列表,根據(jù)請求地址將請求發(fā)送到相應(yīng)的內(nèi)存,DRAM與RRAM之間進行數(shù)據(jù)遷移.
混合內(nèi)存控制器中請求下發(fā)執(zhí)行過程如圖2所示,具體如下:
(1) 當內(nèi)存訪問請求到達時,內(nèi)存控制器對訪問請求進行解析,獲得請求類型、地址、大小等信息,請求信息進行保存.
(2) 判斷該請求操作的頁面是否在內(nèi)存中.若請求命中執(zhí)行步驟3,未命中執(zhí)行步驟5.
(3) 對請求類型進行判斷,若為讀請求,根據(jù)地址映射關(guān)系表中的信息,到DRAM或者RRAM中進行查找,找成功,則返回結(jié)果,本次請求處理結(jié)束.
(4) 若為寫請求,首先判斷DRAM上是否有存儲空間,若有則寫入DRAM中,若沒有則存入RRAM中.最后將結(jié)果返回內(nèi)存控制器,進一步返回給CPU.
(5) 若請求未命中,產(chǎn)生一個缺頁中斷.在外存中查找,當讀操作發(fā)生缺頁中斷程序從外存讀取請求頁時,優(yōu)先考慮將請求頁寫入DRAM中,若DRAM中沒有空間時則寫入RRAM中.目的是減少RRAM的寫次數(shù),因為RRAM具有較高的寫延遲(相對于DRAM).
圖2 請求下發(fā)流程
對寫頁面的熱度進行定義是為了體現(xiàn)頁面最近被寫訪問的情況,若一個頁面最近一段時間被經(jīng)常執(zhí)行寫操作,則該頁面可能為熱寫頁面;若一個頁面最近一段時間內(nèi)沒有被寫過,則預(yù)測該頁面在以后的一段時間內(nèi)也可能不會被寫訪問,則把該頁面的狀態(tài)設(shè)置為冷寫頁面.
LIRS(Low Inter-reference Recency Set,LIRS)替換算法是針對最近未使用算法(Least recently used,LRU)的優(yōu)化,受LIRS算法中IRR(Inter-Reference Recency)參數(shù)(記錄一個頁面最近2次的訪問間隔)思想啟發(fā)[12].本文將頁面最近寫訪問發(fā)生的那個時刻定義為current,將current之后的時間定義為future,將current的上一個寫訪問發(fā)生的時刻定義history,通過添加以下2個計數(shù)器共同判定寫頁面的冷熱狀態(tài),這樣的好處是既考慮了該頁面的歷史訪問情況,又兼顧了該頁面將來的訪問情況,如圖3所示.
定義1 歷史寫距離count(history).記錄頁面在最后一次和倒數(shù)第二次發(fā)生寫操作期間,其他被寫過的頁面的數(shù)目,該數(shù)值可以反映頁面曾經(jīng)被寫的冷熱程度.如果某個頁面只發(fā)生過一次或沒有發(fā)生過寫訪問,則count(history)值無窮大.
定義2 將來寫距離count(future):表示一個頁面在最后一次被寫訪問后,即該頁面的current時刻之后,其他被寫過的頁面的數(shù)目.
count(history),count(future)不統(tǒng)計在同一頁面上發(fā)生重復(fù)寫訪問的情況,認為對其他頁面中的同一頁面發(fā)送重復(fù)寫訪問不會影響當前頁面的寫熱度.如圖3中,頁面1上2次寫操作期間,其他頁面共發(fā)生了3次寫操作,其中頁面2上發(fā)生了2次,但我們只記錄1次,不重復(fù)記錄,因此頁面1的count(history)=2,count(future)=2.
圖3 頁面訪問的3個時刻
用count(history)和count(future)兩個值來評估一個頁面的熱寫度,可以防止一個頁面count(history)很小,但很久沒有被寫過的頁面判斷為熱寫頁的情況發(fā)生.目的是盡量將熱寫頁存到DRAM上,所以在該混合內(nèi)存結(jié)構(gòu)下,DRAM中允許存儲的熱寫頁面數(shù)為DRAM能存儲的最大頁面數(shù).
表2描述了一個寫頁面從冷寫頁狀態(tài)轉(zhuǎn)變到熱寫頁狀態(tài)的過程.
表2 寫頁面熱度變化過程
假設(shè)內(nèi)存系統(tǒng)允許的最大的熱頁面數(shù)目為5.在對頁面F的寫請求到達前,頁面A,B,C,D,E均為熱寫頁,其中頁面E的count(future)值和count(history)值均為最大,說明頁面E是所有熱寫頁中最近最久沒有被寫過的頁面,頁面轉(zhuǎn)變過程可以描述為:
(1) 頁面F最初的count(future)值為1,count(history)值為8.對頁面F的寫請求到達后,將其count(future)值與count(history)值進行更新,根據(jù)定義,其count(history)值被更新為其前一刻的count(future)的值,更新后的count(future)值為1,故更新后的頁面F的count(future)值為0,count(history)值為1.相應(yīng)的將其他頁面的count(future)也進行更新.
(2) 將頁面F更新后的count(future)值與頁面E的count(future)值比較,頁面F的count(future)值小,因此頁面F的熱寫度比頁面E更高.
(3) 將頁面E的狀態(tài)更改為冷寫頁狀態(tài),頁面F的狀態(tài)更改為熱寫頁,頁面E遷移到RRAM上或者被換出.
在混合內(nèi)存DRAM-RRAM結(jié)構(gòu)下,DRAM與RRAM之間需要進行頁面遷移操作.當從RRAM向DRAM中遷移時,說明該頁面為熱寫頁,采用立即遷移的方式;當DRAM向RRAM中遷移時,說明該頁面狀態(tài)為冷寫頁,若DRAM中仍有剩余空間,先不執(zhí)行遷移操作,當不得不遷移時再執(zhí)行,目的是為了減少RRAM上的寫操作次數(shù),因此,此時采用延遲遷移的方式.為保證訪問命中率,頁面替換采用的是傳統(tǒng)的clock算法規(guī)則.通過兩個鏈表管理頁面,全局clock、寫clock.
全局鏈表(clock):管理所有的內(nèi)存頁面,即DRAM頁面與RRAM頁面.當請求未命中時,從此鏈表中選擇需要換出的頁面.
寫clock:記錄最近發(fā)生寫操作的頁面信息,同時包含部分被換出內(nèi)存的頁面信息,count(future)max為熱寫頁面中熱度最低的頁面,因此只追蹤比count(future)max小的頁面信息,就可以檢測到熱寫頁,該鏈表主要用于判斷頁面的熱寫度狀態(tài).
當寫請求命中,但頁面位于RRAM上時,若該頁面狀態(tài)正好從冷寫頁轉(zhuǎn)換為熱寫頁,先將其遷移到DRAM上,然后再執(zhí)行寫操作.
當寫請求未命中時,從外存調(diào)入所需頁面,同時將其存儲到DRAM上,因為寫請求未命中時,會對內(nèi)存產(chǎn)生兩次寫操作:一次是從外存寫入時;另一次是寫請求的執(zhí)行.因此,為了減少在RRAM上的寫操作,將其存儲到DRAM上.若DRAM上沒有存儲空間,執(zhí)行頁面遷移操作,將DRAM上的冷寫頁遷移到RRAM上,為新讀入的頁面讓出空間.
當一個頁面被選中,需換出內(nèi)存時,將其歷史寫信息保存一段時間.因為該頁面可能在不久將來會再次被請求,這時候,若該頁面曾是熱寫頁,則將其存于DRAM上,否則分配任意空間.
從請求命中和未命中兩種情況展開描述.為每一個頁面設(shè)置寫冷熱標志位、訪問位、讀訪問位、寫訪問位等狀態(tài)信息,將其初始值均設(shè)置為“0”.
算法1:請求命中處理
Input:the requested page isp,operation typeop
Output:the address of thep
p.reference _bit=1;
/將訪問頁狀態(tài)置1,頁面替換時需要使用此狀態(tài)位.
if (opis read ) then
p.read_reference=1;∥讀訪問位置1
else if (opis write ) then
if (opin write_clock) then
p.write_reference=1;∥寫訪問位置1
if (pin RRAM) then
if( DRAM have free pages) then
migratepto DRAM;
else∥DRAM上沒有空閑
use the migration strategy,then write the pagep;
∥在DRAM上選擇一個冷寫頁q遷移到RRAM,將頁面P遷移到q的位置
else
setpin DRAM;
else∥頁面P不在write_clock中
addpto the write_clock;
setpis write-cold;p.write_reference_bit=0;
算法2:請求未命中處理過程
討論DRAM、RRAM上的空間已滿的情況,請求未命中處理過程.因為若DRAM或RRAM上尚有空間,則請求頁可直接調(diào)入內(nèi)存.
Input:the requested page isp,operation typeop
Output:the address of thep
use clock policy to replace a pageqfrom global_clock;
if (opis read ) then∥請求為讀操作
if (pin write_clock andpis a write-hot page) then
if (qin RRAM ) then
use the migration strategy to find a DRAM write-cold pagef;
if (havef) then
migrateffrom DRAM toq;
loadptof;
else∥q在DRAM上
loadptoq;
else∥請求為寫操作
if (pin write_clock ) then
p.write_reference_bit=1;
else
addpto the write_clock;
setpto write-cold;p.write_reference_bit=0;
if (write_clock is full) then move out a write_clod page;
if (qis in RRAM) then
use the migration strategy to find a write-cold pagef;
migrateffrom DRAM toq;
loadpto DRAM;
addpto global_clock;
setp.reference_bit=1.
為了同時仿真DRAM和RRAM的特性,本文在GEM5和 NVMain的基礎(chǔ)上,構(gòu)建DRAM-RRAM混合內(nèi)存模擬器,通過混合內(nèi)存控制器來負責調(diào)度上層下發(fā)的請求,并將執(zhí)行完的數(shù)據(jù)返回給CPU,環(huán)境配置信息如表3所示.
表3 實驗環(huán)境配置信息
本文采用的基準測試程序集是PARSEC[13],該測試集由多線程應(yīng)用程序組成,是普林斯頓共享內(nèi)存計算機應(yīng)用庫,是一種并發(fā)程序測試集,它包含的不同領(lǐng)域的應(yīng)用程序可以代表未來的發(fā)展方向.從中選取6個不同基準程序,包括blackscholes、bodytrack、canneal、facesim、streamcluster、x264),輸入集選取simMidum規(guī)格進行實驗.
實驗中設(shè)計了3種內(nèi)存結(jié)構(gòu),分別為4 GB容量的DRAM、4 GB容量的RRAM和2 GB DRAM+2 GB RRAM,首先通過模擬器單獨在DRAM設(shè)備和RRAM設(shè)備上運行上述測試程序集,獲得單個設(shè)備的性能,然后在混合內(nèi)存結(jié)構(gòu)上運行同一測試集.
圖4展示了3種內(nèi)存結(jié)構(gòu)下不同基準的平均讀延遲,內(nèi)存總?cè)萘烤鶠? GB.在DRAM內(nèi)存結(jié)構(gòu)下,所有應(yīng)用的平均讀延遲最小,與RRAM內(nèi)存結(jié)構(gòu)相比,混合內(nèi)存結(jié)構(gòu)下部分應(yīng)用的讀延遲低,這是因為DRAM具有較快讀速度的物理性質(zhì).
圖4 不同內(nèi)存結(jié)構(gòu)下平均讀延遲比較
圖5展示了不同內(nèi)存結(jié)構(gòu)下,基準程序的平均寫延遲情況.整體來看,DRAM內(nèi)存結(jié)構(gòu)下的平均寫延遲最小,DRAM-RRAM混合內(nèi)存結(jié)構(gòu)的寫延遲大于DRAM內(nèi)存結(jié)構(gòu),但比RRAM單獨作為內(nèi)存時寫延遲低.其中streamcluster基準程序在DRAM和DRAM-RRAM內(nèi)存結(jié)構(gòu)下的平均寫延遲接近,而facesim基準程序在DRAM-RRAM內(nèi)存結(jié)構(gòu)下的平均寫延遲較大,并未顯示出DRAM快速寫的特性.這主要是因為streamcluster屬于讀密集應(yīng)用,而facesim屬于寫密集應(yīng)用.也就是說,混合內(nèi)存結(jié)構(gòu),對讀密集應(yīng)用具有更好的支持,對于寫密集型應(yīng)用可能會反映出RRAM寫延遲大的缺點,因為對于寫密集性應(yīng)用,當大量寫請求發(fā)送到RRAM上時,會帶來大量延遲.
圖5 不同內(nèi)存結(jié)構(gòu)下平均寫延遲比較
以上實驗中使用頁面管理算法是LRU算法,以下實驗將基于所提的寫熱度頁面遷移策略開展.從平均運行時間的角度,對其有效性進行驗證.
不用頁面管理策略下的平均運行時間見圖6,可以看到在混合內(nèi)存結(jié)構(gòu)DRAM-RRAM下,本文所提頁面管理策略與傳統(tǒng)的LRU算法相比,平均運行時間明顯降低,在寫密集應(yīng)用facesim上最為明顯,運行時間縮短了約31.2%.這是因為本文通過對寫頁面的熱度狀態(tài)進行定義,盡可能減少RRAM上的寫操作,降低由于RRAM寫操作帶來的延遲,同時使用clock頁面替換算法,保證了命中率,降低了整體運行時間,提高了系統(tǒng)性能.
圖6 不用頁面管理策略下的平均運行時間
本文基于Gem5和NVMain構(gòu)建了DRAM-RRAM混合內(nèi)存模擬器,考慮混合內(nèi)存結(jié)構(gòu)下RRAM壽命及寫延遲較大的問題,提出一種基于寫熱度的混合內(nèi)存頁面遷移策略,根據(jù)頁面最近寫訪問情況,引入count(history)和count(future)計數(shù)器,對頁面的寫熱度狀態(tài)進行判定.實驗結(jié)果表明,本文構(gòu)建的混合內(nèi)存結(jié)構(gòu),能在保證系統(tǒng)性能的情況下,增大內(nèi)存系統(tǒng)容量,所提頁面遷移策略能有效縮短系統(tǒng)運行時間,對于寫操作密集型應(yīng)用,降低效果更加明顯.本文考慮的是減少RRAM上寫操作數(shù)量,如何在此基礎(chǔ)上將RRAM上的寫操作平均分配到個各儲單元,還需進一步研究.