本發(fā)明適用于基于閃存的內(nèi)存系統(tǒng)技術(shù)領(lǐng)域,提供了一種基于閃存的內(nèi)存系統(tǒng)緩存機(jī)制,通過(guò)對(duì)緩存的設(shè)計(jì),緩解數(shù)據(jù)訪問(wèn)閃存時(shí)的負(fù)載瓶頸,改善基于閃存的內(nèi)存系統(tǒng)的讀寫延遲和使用壽命。
背景技術(shù):
隨著信息技術(shù)革命的飛速發(fā)展,大數(shù)據(jù)和云計(jì)算已經(jīng)成為當(dāng)今時(shí)代的主流,數(shù)據(jù)的爆炸性增長(zhǎng)以及計(jì)算機(jī)性能的不斷提高對(duì)存儲(chǔ)系統(tǒng)提出了越來(lái)越高的要求,存儲(chǔ)系統(tǒng)面臨著容量和性能的挑戰(zhàn)。
傳統(tǒng)內(nèi)存DRAM的集成度越來(lái)越高,其容量越來(lái)越大,雖然其訪問(wèn)延遲并沒(méi)有顯著的改善,但是容量的提升在性能、成本上也給計(jì)算機(jī)系統(tǒng)的發(fā)展帶來(lái)了很大的益處。由于DRAM為充電型器件,其電容需要一定的大小才能保存足夠的電荷而被感知,并且其上的半導(dǎo)體器件也只有達(dá)到一定的大小才能產(chǎn)生有效的通道控制信號(hào),由于目前預(yù)測(cè)理論上的最小值為40nm,而當(dāng)前工藝已經(jīng)接近極限。另一方面,DRAM功耗方面都存在瓶頸,由于DRAM為非易失存儲(chǔ)介質(zhì),存在電荷流失現(xiàn)象,需要不斷進(jìn)行刷新操作才能保證數(shù)據(jù)正確性。當(dāng)容量增大后,刷新操作的功耗很大。
近年來(lái),以閃存為代表的新型存儲(chǔ)介質(zhì)發(fā)展迅速,集成度不斷增加,價(jià)格不斷降低,緩解了存儲(chǔ)系統(tǒng)的性能壓力。閃存具有很多優(yōu)良特性,如高隨機(jī)訪問(wèn)性能,低功耗,體積小,抗震動(dòng)等,具有廣闊的發(fā)展前景。基于閃存的閃存固態(tài)盤由于其高性能,被廣泛用于云計(jì)算的數(shù)據(jù)中心中。但是,閃存的擦寫次數(shù)有限,使得其壽命有限,這是阻礙閃存的發(fā)展一大因素。因此,在可靠性敏感的環(huán)境中,閃存固態(tài)盤并不適用。對(duì)于云計(jì)算數(shù)據(jù)中心產(chǎn)生的寫密集型負(fù)載,閃存固態(tài)盤無(wú)法勝任存儲(chǔ)工作。之前,閃存相關(guān)產(chǎn)品都用作外存使用,為了進(jìn)一步降低延遲,學(xué)術(shù)界以及工業(yè)界的研究者嘗試用閃存構(gòu)建內(nèi)存。目前,市場(chǎng)上出現(xiàn)了基于閃存的內(nèi)存系統(tǒng)產(chǎn)品,如Ultra-DIMM,使得將閃存用于構(gòu)建內(nèi)存系統(tǒng)成為可能。
以閃存構(gòu)建內(nèi)存系統(tǒng),能有效地解決傳統(tǒng)DRAM的擴(kuò)展性和功耗問(wèn)題。但是,該系統(tǒng)存在兩個(gè)關(guān)鍵問(wèn)題:性能和使用壽命。一方面,閃存的性能比傳統(tǒng)DRAM低幾個(gè)數(shù)量級(jí)。盡管我們可以有效地利用閃存陣列內(nèi)部的并行性,但還是難以彌補(bǔ)和DRAM之間的性能差距。另一方面,有限的擦寫次數(shù)導(dǎo)致閃存的使用壽命有限。雖然可以采用損耗均衡等技術(shù)延長(zhǎng)閃存的壽命,但是作為內(nèi)存系統(tǒng)時(shí),數(shù)據(jù)訪問(wèn)非常頻繁,使用壽命還是一個(gè)嚴(yán)峻的問(wèn)題。鑒于這兩個(gè)方面的瓶頸,通常,我們傾向于在閃存陣列中增加一個(gè)DRAM作為數(shù)據(jù)緩存。這樣一來(lái),DRAM緩存可以吸收主機(jī)到來(lái)的很多請(qǐng)求,從而彌補(bǔ)閃存內(nèi)存系統(tǒng)在性能和壽命上的不足。也就是說(shuō),DRAM緩存中的緩存替換機(jī)制是該系統(tǒng)的關(guān)鍵。
然而,這樣的混合架構(gòu)存在兩個(gè)問(wèn)題。第一,閃存的訪問(wèn)粒度是頁(yè)(通常是4KB數(shù)據(jù)),而主機(jī)和內(nèi)存之間的訪問(wèn)粒度是cache line(通常是64B),這兩者訪問(wèn)粒度的不一致會(huì)使得DRAM緩存管理變得復(fù)雜。雖然有些閃存的接口協(xié)議支持子頁(yè)訪問(wèn)模式(訪問(wèn)粒度為512B),還是比cache line大。當(dāng)一個(gè)cache line的請(qǐng)求到來(lái)時(shí),如果DRAM緩存中缺失,閃存的控制器會(huì)從閃存陣列中讀取一頁(yè)到DRAM中。這樣一來(lái),DRAM緩存的命中率就至關(guān)重要。當(dāng)一個(gè)cache line的請(qǐng)求命中DRAM緩存的話,就不需要去訪問(wèn)閃存了。然而,如果我們采用簡(jiǎn)單的緩存機(jī)制,將閃存中的頁(yè)緩存到DRAM中,傳統(tǒng)的緩存替換算法,如LRU(Least Recently Used),只能識(shí)別出熱頁(yè)并將其保存在緩存中,并不能識(shí)別出每頁(yè)中熱的cache line。第二,現(xiàn)有的通用緩存替換機(jī)制,只關(guān)注于更高的請(qǐng)求命中率,并沒(méi)有考慮到閃存的相關(guān)特性。比如LRU算法,利用請(qǐng)求訪問(wèn)的時(shí)間局部性,能識(shí)別出一段時(shí)間內(nèi)熱的數(shù)據(jù)塊并將其保存在緩存中,冷的數(shù)據(jù)塊則剔除出去,以提高命中率。但是,閃存讀寫速度不一致,讀快寫慢,并且壽命有限,因此對(duì)寫請(qǐng)求很敏感。傳統(tǒng)的緩存替換機(jī)制若一味追求高的命中率,而導(dǎo)致刷下更多的寫請(qǐng)求到閃存中,就會(huì)影響增加閃存的讀寫延遲,降低使用壽命,進(jìn)而降低整體系統(tǒng)的性能和壽命。現(xiàn)有的其他緩存替換機(jī)制,如ARC,是在LRU的基礎(chǔ)上改進(jìn)而來(lái),是至今為止公認(rèn)的最好替換算法之一,能根據(jù)應(yīng)用特性進(jìn)行自我調(diào)節(jié),實(shí)現(xiàn)非常高的命中率,但還是存在相同的問(wèn)題,這使得通用的緩存替換機(jī)制并不能完全適用于閃存內(nèi)存系統(tǒng)。
綜上所述,基于閃存的內(nèi)存系統(tǒng)中,DRAM緩存對(duì)整體系統(tǒng)的性能和使用壽命至關(guān)重要。閃存的頁(yè)和cache line的大小不一致,使得DRAM緩存并不能夠識(shí)別出每頁(yè)內(nèi)熱的cache line。同時(shí),傳統(tǒng)的通用緩存替換算法并不完全適用于閃存內(nèi)存系統(tǒng),簡(jiǎn)單地使用,可能會(huì)降低整體系統(tǒng)的性能和使用壽命。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問(wèn)題是在基于閃存的內(nèi)存系統(tǒng)中設(shè)計(jì)實(shí)現(xiàn)有效的緩存機(jī)制,利用適合閃存特性的緩存機(jī)制,在DRAM中構(gòu)建頁(yè)的緩存區(qū)之外,又構(gòu)建了一個(gè)cache line的緩存區(qū),分別緩存熱頁(yè)和每頁(yè)內(nèi)的熱cache line。采用傳統(tǒng)LRU鑒別熱的頁(yè),并采用歷史感知的熱點(diǎn)識(shí)別機(jī)制鑒別當(dāng)前應(yīng)用下每頁(yè)中熱的cache line,分別將其保存在DRAM的頁(yè)緩存區(qū)和cache line緩存區(qū)中。進(jìn)而,采用延遲刷下機(jī)制,優(yōu)先剔除DRAM緩存中未被修改過(guò)的數(shù)據(jù)(即干凈的數(shù)據(jù)),減少對(duì)閃存的寫。通過(guò)這兩種方式,能夠改善閃存內(nèi)存系統(tǒng)的讀寫延遲和使用壽命。
DRAM緩存機(jī)制的原理包括兩方面的創(chuàng)新。一方面,是歷史感知的熱點(diǎn)識(shí)別機(jī)制。將DRAM緩存分為頁(yè)緩存區(qū)和cache line緩存區(qū)。頁(yè)緩存區(qū)存放熱的頁(yè),而cache line緩存區(qū)存放熱的cache line。兩個(gè)緩存區(qū)都采用基本的LRU策略進(jìn)行數(shù)據(jù)管理,在頁(yè)緩存區(qū)中,每個(gè)頁(yè)內(nèi)的各個(gè)cache line后需增加一個(gè)字節(jié)的空間記錄數(shù)據(jù)的訪問(wèn)次數(shù)。經(jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn),在大部分應(yīng)用的訪問(wèn)模式下,頁(yè)內(nèi)各個(gè)cache line的訪問(wèn)是不均衡的,為提高DRAM緩存的命中率,需要識(shí)別出頁(yè)內(nèi)的熱cache line,盡早剔除緩存中冷的cache line。歷史感知的熱點(diǎn)識(shí)別機(jī)制就是仿照了數(shù)學(xué)上的變異系數(shù)的方法。由于傳統(tǒng)的變異系數(shù)涉及到開(kāi)平方根等復(fù)雜運(yùn)算,為減少計(jì)算和硬件開(kāi)銷,我們?cè)O(shè)計(jì)了一種弱變異系數(shù)(Weak CV)的方法,采用平均差(mean deviation)除以平均數(shù)(average)的方式,通過(guò)計(jì)算弱變異系數(shù)的值來(lái)判斷頁(yè)內(nèi)是否存在熱的cache line。其具體公式如下:
該公式中,Xi為頁(yè)內(nèi)記錄的弟i個(gè)cache line的訪問(wèn)次數(shù),一個(gè)頁(yè)內(nèi)各個(gè)cacheline訪問(wèn)次數(shù)的平均值。當(dāng)一個(gè)頁(yè)被剔除出頁(yè)緩存區(qū)時(shí),計(jì)算該頁(yè)的Weak CV,如果Weak CV的值超過(guò)給定的閾值,則說(shuō)明該頁(yè)中存在熱的cache line,將該頁(yè)內(nèi)訪問(wèn)次數(shù)超過(guò)平均數(shù)的所有cache line都存到cache line緩存區(qū)中。頁(yè)緩存區(qū)和cache line緩存區(qū)若滿,都按照LRU的方式進(jìn)行數(shù)據(jù)替換。這樣一來(lái),采用LRU替換機(jī)制和歷史感知熱點(diǎn)識(shí)別機(jī)制能夠分別鑒別出熱的數(shù)據(jù)頁(yè)和每頁(yè)內(nèi)熱的cache line,并將它們保存在DRAM中,從而能極大地提高了緩存命中率,減少對(duì)閃存的訪問(wèn),提升系統(tǒng)的性能和壽命。
另一方面,是延遲刷下機(jī)制。在DRAM的頁(yè)緩存區(qū)和cache line緩存區(qū)中,每個(gè)數(shù)據(jù)塊都增加一個(gè)標(biāo)志位,標(biāo)識(shí)數(shù)據(jù)塊是否被修改過(guò),即是否為臟數(shù)據(jù)。當(dāng)任意一個(gè)緩存區(qū)滿后,傳統(tǒng)的LRU替換策略會(huì)剔除最近最少使用(LRU)的數(shù)據(jù)塊,將其刷到閃存中。若該數(shù)據(jù)塊為臟數(shù)據(jù),則會(huì)產(chǎn)生一個(gè)寫請(qǐng)求,更新在閃存中的副本數(shù)據(jù)。延遲刷下機(jī)制,則是在LRU策略的基礎(chǔ)上,根據(jù)閃存對(duì)寫請(qǐng)求敏感的特點(diǎn),做出調(diào)整。在緩存區(qū)滿需要剔除數(shù)據(jù)塊的時(shí)候,先判斷LRU數(shù)據(jù)塊是否為臟,若不為臟,則剔除LRU數(shù)據(jù)塊;否則,從與LRU數(shù)據(jù)塊相鄰的幾個(gè)數(shù)據(jù)塊中,按照訪問(wèn)頻率從少到多的順序選一個(gè)干凈的數(shù)據(jù)塊進(jìn)行剔除。由于這些數(shù)據(jù)塊相對(duì)于各自緩存區(qū)中的數(shù)據(jù)塊而言是較冷的數(shù)據(jù),因此,剔除其中一個(gè)數(shù)據(jù)塊并不會(huì)嚴(yán)重影響命中率。若這些數(shù)據(jù)塊都為臟數(shù)據(jù),則出于提高命中率的考慮,還是剔除LRU數(shù)據(jù)塊。延遲刷下機(jī)制通過(guò)延遲刷下臟數(shù)據(jù)塊,能夠減少對(duì)閃存的寫,從而提升系統(tǒng)性能和壽命。
本發(fā)明設(shè)計(jì)的基于閃存的內(nèi)存系統(tǒng)緩存機(jī)制在DRAM中構(gòu)建了兩個(gè)緩存區(qū):頁(yè)緩存區(qū)和cache line緩存區(qū)。一方面通過(guò)歷史感知熱點(diǎn)識(shí)別機(jī)制,鑒別并保存每個(gè)數(shù)據(jù)頁(yè)內(nèi)熱的cache line,提升DRAM緩存的命中率。另一方面,采用延遲刷下機(jī)制,在緩存區(qū)滿時(shí)優(yōu)先剔除干凈的數(shù)據(jù)塊,從而減少對(duì)閃存的寫。綜合兩個(gè)方面的策略,該機(jī)制能夠有效地改善閃存內(nèi)存系統(tǒng)的讀寫延遲和使用壽命。
使用本發(fā)明能達(dá)到以下有益效果:
1、提升閃存內(nèi)存系統(tǒng)的性能。本發(fā)明提出的歷史感知的熱點(diǎn)識(shí)別機(jī)制基于每個(gè)數(shù)據(jù)頁(yè)內(nèi)各個(gè)cache line訪問(wèn)的不均衡性,構(gòu)建cache line緩存區(qū),鑒別并保存頁(yè)內(nèi)熱的cache line,從而提升DRAM緩存的命中率,吸收了很多讀寫請(qǐng)求,有效地減少了對(duì)閃存的訪問(wèn),提升了性能;
2、提升閃存內(nèi)存系統(tǒng)的使用壽命。寫請(qǐng)求會(huì)消耗閃存的使用壽命,本發(fā)明提出的延遲刷下機(jī)制,通過(guò)延遲刷下臟數(shù)據(jù),減少了閃存的寫請(qǐng)求數(shù)量,從而提升了整體系統(tǒng)的使用壽命。
實(shí)現(xiàn)本發(fā)明的開(kāi)銷很小,包括以下三點(diǎn):
1、時(shí)間開(kāi)銷:本發(fā)明的緩存機(jī)制是基于傳統(tǒng)的LRU替換策略,設(shè)計(jì)的歷史感知的熱點(diǎn)識(shí)別機(jī)制和延遲刷下機(jī)制并不涉及復(fù)雜的計(jì)算開(kāi)銷,時(shí)間開(kāi)銷??;
2、空間開(kāi)銷:本發(fā)明的緩存機(jī)制將傳統(tǒng)的頁(yè)緩存區(qū)空間劃分為兩個(gè)緩存區(qū):頁(yè)緩存區(qū)和cacheline緩存區(qū),總空間大小不變。除此之外,歷史感知熱點(diǎn)識(shí)別機(jī)制中對(duì)每個(gè)頁(yè)中的cache line增加了一個(gè)字節(jié)的空間用于記錄訪問(wèn)信息,延遲刷下機(jī)制增加了1位的臟位標(biāo)記,這兩處空間開(kāi)銷不到DRAM緩存空間的2%,空間開(kāi)銷小。
附圖說(shuō)明
圖1是每頁(yè)內(nèi)各個(gè)cache line訪問(wèn)不均衡示意圖;
圖2是基于閃存的內(nèi)存系統(tǒng)緩存機(jī)制的體系結(jié)構(gòu)圖以及工作流程示意圖;
圖3是歷史感知的熱點(diǎn)識(shí)別機(jī)制原理示意圖;
圖4是延遲刷下機(jī)制的原理示意圖。
具體實(shí)施方式
圖1是每頁(yè)內(nèi)各個(gè)cache line訪問(wèn)不均衡示意圖,該例子中每個(gè)頁(yè)大小為512B,包括8個(gè)cache line。
圖2是本發(fā)明采用的基于閃存的內(nèi)存系統(tǒng)緩存機(jī)制的體系結(jié)構(gòu)圖以及工作流程示意圖,DRAM緩存中包括頁(yè)緩存區(qū)和cache line緩存區(qū)。
圖3是歷史感知的熱點(diǎn)識(shí)別機(jī)制原理示意圖,cache line的訪問(wèn)信息記錄在頁(yè)寫回閃存時(shí)可以存放在閃存的帶外區(qū)域(Out-of-Band)。
圖4是延遲刷下機(jī)制的原理示意圖,為每個(gè)數(shù)據(jù)頁(yè)以及cache line都設(shè)置了臟標(biāo)識(shí)位。具體的執(zhí)行過(guò)程為:
第一步,將DRAM緩存空間劃分為頁(yè)緩存區(qū)和cache line緩存區(qū),按照閃存的子頁(yè)訪問(wèn)協(xié)議,設(shè)定頁(yè)緩存區(qū)的數(shù)據(jù)塊大小為512B,cache line緩存區(qū)的數(shù)據(jù)塊大小為64B;
第二步,接收從主機(jī)到來(lái)的cache line請(qǐng)求,先判斷cache line緩存區(qū)是否命中,若cache line緩存區(qū)命中,則立即服務(wù)請(qǐng)求,執(zhí)行第十步;否則,判斷頁(yè)緩存區(qū)是否命中,執(zhí)行第三步;
第三步,若頁(yè)緩沖區(qū)命中,服務(wù)請(qǐng)求,執(zhí)行第十步;否則,閃存控制器根據(jù)請(qǐng)求地址,從閃存中讀取一頁(yè)到頁(yè)緩存區(qū)中,執(zhí)行第四步;
第四步,若頁(yè)緩存區(qū)不滿,則服務(wù)請(qǐng)求,執(zhí)行第十步;否則,根據(jù)延遲刷下策略,在LRU數(shù)據(jù)塊及其相鄰的兩個(gè)數(shù)據(jù)塊中選擇一個(gè)數(shù)據(jù)塊進(jìn)行剔除,執(zhí)行第五步;
第五步,若剔除的數(shù)據(jù)塊為干凈的,則不產(chǎn)生對(duì)閃存的寫,執(zhí)行第十步;否則產(chǎn)生對(duì)閃存的寫請(qǐng)求,執(zhí)行第六步;
第六步,針對(duì)剔除的數(shù)據(jù)頁(yè),根據(jù)頁(yè)內(nèi)各個(gè)cache line的訪問(wèn)記錄,計(jì)算該頁(yè)的弱變異系數(shù),若該值大于設(shè)定的閾值(以1.5為例),則說(shuō)明該頁(yè)內(nèi)各個(gè)cache line訪問(wèn)非常不均衡,將訪問(wèn)次數(shù)大于平均值以上的cache line取出,準(zhǔn)備存入cache line緩存區(qū),執(zhí)行第七步;否則說(shuō)明該頁(yè)內(nèi)訪問(wèn)較均衡,不需要進(jìn)一步處理,執(zhí)行第十步;
第七步,若cache line緩存區(qū)不滿,則將第六步中選出的一個(gè)cache line存入,執(zhí)行第九步;否則,根據(jù)延遲刷下策略,在LRU數(shù)據(jù)塊及其相鄰的兩個(gè)個(gè)數(shù)據(jù)塊中選擇一個(gè)數(shù)據(jù)塊進(jìn)行剔除,執(zhí)行第八步;
第八步,若剔除的數(shù)據(jù)塊為干凈的,則不需要多余操作,執(zhí)行第九步;否則,對(duì)閃存產(chǎn)生一個(gè)讀和一個(gè)寫,先將該cache line存在的頁(yè)讀出,再將cache line更新到對(duì)應(yīng)的位置,最后將更新后的頁(yè)寫回到閃存中,執(zhí)行第九步;
第九步,若第六步選擇的cache line處理完,則執(zhí)行第十步;否則,執(zhí)行第七步;
第十步,結(jié)束。
在基于閃存的內(nèi)存系統(tǒng)中,DRAM緩存對(duì)整體系統(tǒng)的性能和使用壽命至關(guān)重要。閃存的頁(yè)和cache line的大小不一致,采用傳統(tǒng)的緩存替換算法只能識(shí)別出熱的頁(yè),并不能夠識(shí)別出每頁(yè)內(nèi)熱的cache line。同時(shí),傳統(tǒng)的通用緩存替換算法并不完全適用于閃存內(nèi)存系統(tǒng),簡(jiǎn)單地使用,可能會(huì)降低整體系統(tǒng)的性能和使用壽命。
本發(fā)明針對(duì)以上兩種情況,提出在基于閃存的內(nèi)存系統(tǒng)的DRAM中構(gòu)建兩個(gè)緩存區(qū):頁(yè)緩存區(qū)和cache line緩存區(qū)。一方面通過(guò)歷史感知熱點(diǎn)識(shí)別機(jī)制,鑒別并保存每個(gè)數(shù)據(jù)頁(yè)內(nèi)熱的cache line,提升DRAM緩存的命中率。另一方面,采用延遲刷下機(jī)制,在緩存區(qū)滿時(shí)優(yōu)先剔除干凈的數(shù)據(jù)塊,從而減少對(duì)閃存的寫。同時(shí),采用弱變異系數(shù)算法,增加歷史訪問(wèn)記錄和臟標(biāo)記位等方式,該緩存機(jī)制在時(shí)間、空間開(kāi)銷等方面都不大?;诒景l(fā)明的實(shí)驗(yàn)測(cè)試表明,該機(jī)制在特定應(yīng)用下能最大提升緩存命中率12%,平均降低訪問(wèn)延遲19.7%,并且提升16.6%的使用壽命。這個(gè)結(jié)果表明,該機(jī)制能夠有效地改善閃存內(nèi)存系統(tǒng)的讀寫延遲和使用壽命。