對相關(guān)申請的交叉引用
本申請要求于2016年3月31日向美國專利商標局提交的第62/316,402號美國臨時專利申請的優(yōu)先權(quán)及權(quán)益,該美國臨時專利申請的全部內(nèi)容通過引用整體并入本文。
根據(jù)本發(fā)明的實施例的一個或多個方面涉及數(shù)據(jù)重復刪除(deduplication)。
背景技術(shù):
數(shù)據(jù)重復刪除或數(shù)據(jù)重復消除指的是減少存儲器設(shè)備中的冗余數(shù)據(jù),從而降低存儲設(shè)備的容量成本。在數(shù)據(jù)重復刪除中,數(shù)據(jù)對象/項(例如,數(shù)據(jù)文件)被劃分為一個或多個數(shù)據(jù)線/組塊(chunk)/塊。通過將由相同的數(shù)據(jù)構(gòu)成的多個數(shù)據(jù)塊與單個存儲的數(shù)據(jù)塊相關(guān)聯(lián),可以經(jīng)由計算機存儲器來減少或消除數(shù)據(jù)塊的重復副本,從而減少存儲器設(shè)備中數(shù)據(jù)的冗余副本的總量。數(shù)據(jù)的冗余副本的減少可能增加讀取延遲和存儲器帶寬,并且可能潛在地引起電力節(jié)約。
因此,如果數(shù)據(jù)的重復副本可以被減少為數(shù)據(jù)的單個副本,則在使用相同量的物理資源時,存儲器設(shè)備的總體可用容量增加。因為作為結(jié)果的(resultant)存儲器設(shè)備的節(jié)省允許數(shù)據(jù)重寫計數(shù)的減少,并且因為可以忽略對于在存儲器中已經(jīng)存儲的重復的數(shù)據(jù)塊的寫入請求,所以通過有效地增加寫入耐久性,可以延長實施了數(shù)據(jù)重復刪除的存儲器設(shè)備的壽命。
數(shù)據(jù)重復刪除的傳統(tǒng)方法可以使用存儲器中(in-memory)重復刪除技術(shù),據(jù)此重復刪除引擎按照cpu中心式方法與cpu或存儲器控制器(mc)集成。這樣的方法通常實施重復刪除緩存(ddc),該重復刪除緩存與存儲器控制器一起操作,以使得cpu處理器知曉重復并且嘗試根據(jù)存儲器控制器的控制來提供重復刪除的存儲器操作(例如,內(nèi)容查找、參考(reference)計數(shù)更新等)。重復刪除的方法還可以實施直接轉(zhuǎn)換緩沖器(dtb),該直接轉(zhuǎn)換緩沖器為用于對轉(zhuǎn)換線進行緩存以通過從關(guān)鍵路徑移除轉(zhuǎn)換取回(translationfetch)來改善數(shù)據(jù)讀取的緩存,并且可以與旁路(lookaside)緩沖器類似。
重復刪除最為常見地被用于硬盤驅(qū)動器。然而,對于在諸如動態(tài)隨機存取存儲器(dram)的易失性存儲器的區(qū)域中提供精細粒度的重復刪除存在興趣。
在背景技術(shù)部分中所公開的以上信息僅用于增強對本發(fā)明的背景的理解,并且因此,其可能包含不構(gòu)成現(xiàn)有技術(shù)的信息。
技術(shù)實現(xiàn)要素:
本公開的實施例的方面針對動態(tài)隨機存取(dram)系統(tǒng)中的存儲器重復刪除。
根據(jù)本發(fā)明的實施例,提供了一種被配置為內(nèi)部地執(zhí)行存儲器重復刪除的重復刪除存儲器模塊,該存儲器模塊包括:哈希表存儲器,用于將多個數(shù)據(jù)塊存儲在包括哈希表的哈希表陣列中,哈希表中的每個包括物理桶(physicalbuckets)和多個虛擬桶,虛擬桶中的每個包括物理桶中的一些,物理桶中的每個包括路;地址查找表存儲器(alutm),包括多個指針,所述多個指針指示在物理桶中的相對應(yīng)的一個物理桶中所存儲的數(shù)據(jù)塊中的每個的位置;和緩沖存儲器,用于當哈希表陣列為滿時,存儲未被存儲在哈希表存儲器中的唯一的數(shù)據(jù)塊;處理器;以及存儲器,其中,存儲器在其上存儲有指令,該指令當由處理器執(zhí)行時使得存儲器模塊與外部系統(tǒng)交換數(shù)據(jù)。
存儲器模塊可以是片上系統(tǒng)動態(tài)隨機存取存儲器(dram)。
存儲器模塊可以被配置為:接收與應(yīng)用模式歷史池、重復刪除算法池或重復刪除算法選擇策略中的至少一個相對應(yīng)的信息;以及基于所接收的信息來定義一個或多個重復刪除算法。
存儲器模塊可以被配置為接收用于設(shè)置重復刪除線大小、哈希表的數(shù)量、哈希表之一中的物理桶的數(shù)量、物理桶之一中的路的數(shù)量或者虛擬桶之一中的物理桶的數(shù)量中的至少一個的指令。
存儲器模塊可以被配置為接收用于針對哈希表中的每個來設(shè)置哈希函數(shù)的指令。
存儲器模塊可以被配置為接收用于定義哈希表存儲器、alutm或緩沖存儲器中的至少一個的指令。
存儲器模塊可以被配置為:接收與進入的(incoming)數(shù)據(jù)塊相對應(yīng)的寫入請求;當接收到寫入請求時,對進入的數(shù)據(jù)塊進行哈?;陨晒V?;確定與哈希值相對應(yīng)的值是否被存儲在哈希表存儲器中;取回與在哈希表存儲器中所存儲的值相對應(yīng)的指針中的相對應(yīng)的指針;對alutm中的指針中的相對應(yīng)的指針進行更新;以及對哈希表存儲器中的指針中的相對應(yīng)的指針的頻率計數(shù)進行更新。
存儲器模塊可以被配置為:接收讀取請求;從alutm取回指針中的相對應(yīng)的指針;從哈希表存儲器取回與指針中的相對應(yīng)的指針相關(guān)聯(lián)地存儲的數(shù)據(jù)塊之一;以及將所存儲的數(shù)據(jù)塊之一返回到外部系統(tǒng)。
根據(jù)本發(fā)明的實施例,提供了一種存儲器模塊中的存儲器重復刪除的方法,該方法包括:在存儲器模塊中定義:哈希表存儲器,用于將數(shù)據(jù)塊存儲在包括哈希表的哈希表陣列中,哈希表中的每個包括物理桶和多個虛擬桶,虛擬桶中的每個包括物理桶中的一些,物理桶中的每個包括路;地址查找表存儲器(alutm),包括指示所存儲的數(shù)據(jù)塊中的每個在物理桶中的哪個物理桶中的多個指針;和緩沖存儲器,用于當哈希表陣列為滿時,存儲未被存儲在哈希表存儲器中的數(shù)據(jù)塊;該方法還包括:根據(jù)重復刪除算法將數(shù)據(jù)塊存儲在哈希表存儲器或緩沖存儲器中。
該方法可以進一步包括將重復刪除算法選擇為:由與存儲器模塊相關(guān)聯(lián)的軟件或驅(qū)動所定義的非適應(yīng)性的重復刪除算法;或者基于由存儲器模塊所接收的信息的適應(yīng)性重復刪除算法。
該方法可以進一步包括從耦合到存儲器模塊的存儲器控制器接收信息,所接收的信息確定重復刪除線大小、哈希表的數(shù)量、哈希表之一中的物理桶的數(shù)量、物理桶之一中的路的數(shù)量或者虛擬桶之一中的物理桶的數(shù)量中的至少一個,其中,非適應(yīng)性重復刪除算法可以基于所接收的信息,并且可以通過與存儲器模塊相關(guān)聯(lián)的驅(qū)動來設(shè)置所接收的信息。
該方法可以進一步包括通過基于非適應(yīng)性重復刪除算法使用驅(qū)動創(chuàng)建區(qū)域來確定哈希表存儲器、alutm和緩沖存儲器的區(qū)域。
該方法可以進一步包括接收針對哈希表中的每個的哈希算法,該哈希算法由驅(qū)動基于非適應(yīng)性重復刪除算法來選擇。
該方法可以進一步包括:接收與應(yīng)用模式歷史池、重復刪除算法池或重復刪除算法選擇策略中的至少一個相對應(yīng)的信息;以及基于信息來設(shè)置自適應(yīng)重復刪除算法。
該方法可以進一步包括:使用與存儲器模塊相關(guān)聯(lián)的驅(qū)動來選擇預處理算法;接收預處理算法;以及創(chuàng)建重復刪除算法。
根據(jù)本發(fā)明的實施例,提供了一種存儲器模塊中的存儲器重復刪除的方法,該方法包括:在存儲器模塊中定義:哈希表存儲器,用于將數(shù)據(jù)塊存儲在包括哈希表的哈希表陣列中,哈希表中的每個包括物理桶和多個虛擬桶,虛擬桶中的每個包括物理桶,物理桶中的每個包括路;地址查找表存儲器(alutm),包括多個指針,所述多個指針指示在物理桶中的相對應(yīng)的一個物理桶中所存儲的數(shù)據(jù)塊中的每個的位置;和緩沖存儲器,用于當哈希表陣列為滿時,存儲未被存儲在哈希表存儲器中的數(shù)據(jù)塊;接收與進入的數(shù)據(jù)塊相對應(yīng)的寫入請求;通過對進入的數(shù)據(jù)塊執(zhí)行哈希函數(shù)來計算哈希值;根據(jù)哈希值來訪問物理桶中的期望的物理桶;確定進入的數(shù)據(jù)塊是否被存儲在期望的物理桶中;以及當與進入的數(shù)據(jù)塊不同的另一個數(shù)據(jù)塊被存儲在期望的物理桶中時,將進入的數(shù)據(jù)塊存儲在虛擬桶中的期望的物理桶位于其中的一個虛擬桶的物理桶之一中。
該方法可以進一步包括當進入的數(shù)據(jù)塊被存儲在期望的物理桶中時,對alutm中的指針中的相對應(yīng)的指針進行更新。
該方法可以進一步包括將與指針中相對應(yīng)的指針相對應(yīng)的頻率計數(shù)減小1。
該方法進一步包括當頻率計數(shù)達到0時,刪除存儲在期望的物理桶中的進入的數(shù)據(jù)塊。
該方法可以進一步包括接收與在哈希表陣列中所存儲的多個數(shù)據(jù)塊相對應(yīng)的讀取請求;從alutm取回與多個數(shù)據(jù)塊相對應(yīng)的指針中的相對應(yīng)的指針;在哈希表存儲器中,基于指針中的相對應(yīng)的指針來訪問多個數(shù)據(jù)塊;重編多個數(shù)據(jù)塊以產(chǎn)生重編的數(shù)據(jù);以及將重編的數(shù)據(jù)從存儲器模塊發(fā)送到存儲器控制器。
附圖說明
參考說明書、權(quán)利要求書以及附圖將領(lǐng)會和理解本發(fā)明的這些和其他方面,在附圖中:
圖1是本發(fā)明的實施例的重復刪除dram系統(tǒng)架構(gòu)的框圖;
圖2是圖1的實施例的重復刪除dram存儲器模塊中的存儲器類型的框圖;
圖3是圖2的實施例的哈希表存儲器的哈希表的框圖;
圖4是根據(jù)本發(fā)明的實施例的多哈希表陣列的框圖;
圖5a、圖5b和圖5c描繪了根據(jù)本發(fā)明的實施例用于生成跳轉(zhuǎn)詞(hopword)以將虛擬桶與特定的物理桶相關(guān)聯(lián)的二維陣列;
圖6是根據(jù)本發(fā)明的實施例用于對哈希表存儲器中的數(shù)據(jù)塊進行尋址的物理線id(plid)的框圖;
圖7是示出了根據(jù)本發(fā)明的實施例用于使用跳轉(zhuǎn)阻止(hopscotch)方法將數(shù)據(jù)寫入存儲器模塊的多哈希表陣列的處理的流程圖;以及
圖8是示出了根據(jù)本發(fā)明的實施例用于從存儲器模塊的多哈希表陣列讀取數(shù)據(jù)的處理的流程圖。
具體實施方式
通過參考對實施例和附圖的下面的詳細描述,可以更加容易地理解本發(fā)明構(gòu)思的特征以及實現(xiàn)該特征的方法。在下文中,將參考附圖來更加詳細地描述示例實施例,在附圖中,相同的附圖標記始終指代相同的元件。然而,本發(fā)明可以按照各種不同的形式來體現(xiàn),并且不應(yīng)當被解釋為僅限于本文中所示的實施例。更確切地說,作為示例提供這些實施例,以使得本公開將是充分的和完整的,并且將全面地向本領(lǐng)域技術(shù)人員傳達本發(fā)明的方面和特征。因此,對于本領(lǐng)域普通技術(shù)人員完整地理解本發(fā)明的方面和特征非必要的處理、元件和技術(shù),可以不進行描述。除非另外地指明,否則貫穿附圖和所撰寫的描述,相同的附圖標記指示相同的元件,并且因此,將不重復對其的描述。在附圖中,為了清楚,可以夸大元件、層和區(qū)域的相對大小。
將理解的是,盡管術(shù)語“第一”、“第二”、“第三”等在本文中可以被用來描述各種元件、組件、區(qū)域、層和/或部分,但是這些元件、組件、區(qū)域、層和/或部分不應(yīng)當受這些術(shù)語限制。這些術(shù)語被用來將一個元件、組件、區(qū)域、層或部分與另一個元件、組件、區(qū)域、層或部分相區(qū)分。因此,以下描述的第一元件、組件、區(qū)域、層或部分可以被稱為第二元件、組件、區(qū)域、層或部分,而不脫離本發(fā)明的精神和范圍。
為了解釋的方便,在本文中可以使用諸如“在……下方”、“在……以下”、“下方”、“在……之下”、“在……以上”、“上方”等空間相對術(shù)語來描述一個元件或特征與另外的(一個或多個)元件或(一個或多個)特征的關(guān)系,如附圖所示。將理解的是,除了在附圖中所描繪的定向之外,空間相對術(shù)語還意欲包含設(shè)備在使用中或操作中的不同的定向。例如,如果附圖中的設(shè)備被翻轉(zhuǎn),則被描述為“在其他元件或特征以下”或“在其他元件或特征下方”或“在其他元件或特征之下”的元件然后將被定向為“在其他元件或特征以上”。因此,示例術(shù)語“在……以下”和“在……之下”可以包含以上和以下的定向兩者。設(shè)備可以按照另外的方式被定向(例如,旋轉(zhuǎn)90度或其他任何定向)并且在本文中所使用的空間相對描述符可以相應(yīng)地解釋。
將理解的是,當元件、層、區(qū)域或組件被稱為“在另一個元件、層、區(qū)域或組件上”、“連接到另一個元件、層、區(qū)域或組件”或者“耦合到另一個元件、層、區(qū)域或組件”時,其可以直接地在該另一個元件、層、區(qū)域或組件上,直接地連接到該另一個元件、層、區(qū)域或組件或者直接地耦合到該另一個元件、層、區(qū)域或組件;或者可以存在一個或多個居于中間的元件、層、區(qū)域或組件。另外,還將理解的是,當元件或?qū)颖环Q為“在兩個元件或?qū)又g”時,其可以是兩個元件或?qū)又g僅有的元件或?qū)?;或者還可以存在一個或多個居于中間的元件或?qū)印?/p>
在下面的示例中,x軸、y軸和z軸不限于直角坐標系的三個軸,并且可以按照更寬泛的意味來解釋。例如,x軸、y軸和z軸可以彼此垂直,或可以表示不彼此垂直的不同方向。
在本文中所使用的術(shù)語出于僅描述特定的實施例的目的,而不意欲對本發(fā)明進行限制。當在本文中使用時,單數(shù)形式“一”和“一個”也意欲包括復數(shù)形式,除非上下文清楚地指示并非如此。將進一步理解的是,當在本說明書中使用時,術(shù)語“包括”、“包括有”、“包含”和“包含有”指明所闡述的特征、整數(shù)、步驟、操作、元件和/或組件的存在,但是不排除一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或其分組的存在或添加。當在本文中使用時,術(shù)語“和/或”包括相關(guān)列舉項中的一個或多個的任何和所有組合。諸如“……中的至少一個”的表述當在元件列表之后時,修飾整個元件列表而不修飾列表中的單個元件。
當在本文中使用時,術(shù)語“基本上”、“大約”以及類似術(shù)語被用作近似術(shù)語而非程度術(shù)語,并且意欲解釋(accountfor)本領(lǐng)域普通技術(shù)人員將認識到的測量值或計算值中的固有偏差。此外,當描述本發(fā)明的實施例時“可以”的使用指代“本發(fā)明的一個或多個實施例”。當在本文中使用時,術(shù)語“使用”、“使用于”和“被使用于”可以被認為分別地與術(shù)語“利用”、“利用于”和“被利用于”同義。另外,術(shù)語“示意性的”意欲指代示例或圖示。
當可以不同地實施特定的實施例時,可以與所描述的順序不同地來執(zhí)行特定的處理順序。例如,兩個連續(xù)地描述的處理可以基本上同時執(zhí)行或者可以按照與所描述的順序相反的順序執(zhí)行。
根據(jù)在本文中所描述的本發(fā)明的實施例的電子器件或電子設(shè)備和/或任何其他相關(guān)的設(shè)備或組件可以利用任何合適的硬件、固件(例如,專用集成電路)、軟件或者軟件、固件和硬件的組合來實施。例如,這些設(shè)備中的各種組件可以形成在一個集成電路(ic)芯片上或形成在分立的ic芯片上。此外,這些設(shè)備中的各種組件可以實施在柔性印刷電路薄膜、載帶封裝(tcp)、印刷電路板(pcb)上或形成在一個基板上。此外,這些設(shè)備的各種組件可以是在一個或多個計算設(shè)備中的一個或多個處理器上運行的、執(zhí)行計算機程序指令并且與其他系統(tǒng)組件相互作用以執(zhí)行在本文中所描述的各種功能的處理或線程。計算機程序指令被存儲在存儲器中,該存儲器可以例如使用諸如隨機存取存儲器(ram)的標準存儲器設(shè)備在計算設(shè)備中實施。例如,計算機程序指令還可以被存儲在其他非暫態(tài)計算機可讀介質(zhì)中,諸如,cd-rom、閃驅(qū)等。另外,本領(lǐng)域技術(shù)人員應(yīng)當認識到,各種計算設(shè)備的功能可以被組合或集成到單個計算設(shè)備,或者特定的計算設(shè)備的功能可以橫跨一個或多個其他計算設(shè)備被分布,而不脫離本發(fā)明的示例性實施例的精神和范圍。
除非另外地定義,否則在本文中使用的術(shù)語(包括技術(shù)術(shù)語和科學術(shù)語)具有與本發(fā)明所屬領(lǐng)域的普通技術(shù)人員通常所理解的含義相同的含義。將進一步理解的是,術(shù)語——諸如在通用詞典中所定義的術(shù)語——應(yīng)當被解釋為具有與其在相關(guān)技術(shù)的上下文和/或本說明書中的含義相一致的含義,并且不應(yīng)當按照理想化的或過于正式的意味被解釋,除非在本文中明確地如此定義。
圖1是本發(fā)明的實施例的重復刪除dram系統(tǒng)架構(gòu)的框圖。
參考圖1,為了如計算機存儲器那樣起作用,重復刪除的存儲器執(zhí)行被稱為“轉(zhuǎn)換(translation)”的功能,以記錄原始數(shù)據(jù)內(nèi)容與已經(jīng)被重復刪除的一組唯一的存儲塊之間的關(guān)系,所記錄的關(guān)系以壓縮形式被記憶。例如,原始數(shù)據(jù)的地址可以被存儲在查找表中。
通常,cpu的處理器110缺乏對物理存儲器(例如,重復刪除dram存儲器模塊130)的直接訪問,替代地,該物理存儲器由存儲器控制器120作為存儲線的陣列來管理。cpu中心式重復刪除系統(tǒng)試圖在數(shù)據(jù)到達存儲器系統(tǒng)之前在cpu內(nèi)部對數(shù)據(jù)進行緩存。
與傳統(tǒng)的cpu中心式重復刪除相反,本實施例的重復刪除dram系統(tǒng)架構(gòu)100使用存儲器中心式重復刪除,這意味著重復刪除dram存儲器模塊130可以在沒有來自處理器110的命令的情況下執(zhí)行存儲器重復刪除。重復刪除dram系統(tǒng)架構(gòu)100還使用在重復刪除dram存儲器模塊130中所存儲的可配置的重復刪除算法來提高存儲器的容量收益,從而提供大容量存儲器解決方案。即,不同于cpu中心式重復刪除,本實施例的重復刪除dram系統(tǒng)架構(gòu)100具有在ram模塊(例如,重復刪除dram存儲器模塊130)內(nèi)所包括的所有重復刪除情報(intelligence)。因此,能夠在不為cpu模塊140所知的情況下,在重復刪除dram存儲器模塊130內(nèi)執(zhí)行重復刪除,從而允許增加dram存儲器模塊130的容量。即,因為重復刪除為精細粒度并且在易失性存儲器內(nèi)(例如,在dram存儲器模塊130內(nèi))進行操作,所以本實施例的所有重復刪除情報發(fā)生在dram存儲器模塊130自身內(nèi),而同時cpu中的內(nèi)核模塊140可以不知曉在dram存儲器模塊130內(nèi)所執(zhí)行重復刪除操作的具體內(nèi)容。
應(yīng)當理解的是,盡管本實施例使用dram作為存儲器模塊130進行描述,但是在本發(fā)明的其他實施例中可以使用其他類型的存儲器。此外,本實施例的重復刪除dram系統(tǒng)架構(gòu)100能夠支持與多個類型的存儲器接合。即,本實施例的重復刪除dram存儲器模塊130能夠通過存儲器控制器120與多個不同類型的存儲器接口(例如,雙數(shù)據(jù)速率第四代同步動態(tài)隨機存取存儲器(ddr4)、作為用于將計算機與一個或多個外圍設(shè)備連接的串行擴展總線標準的快速外圍組件互聯(lián)表達(peripheralcomponentinterconnectexpress,pcie)、ddr-t和kti)相關(guān)聯(lián)。因此,應(yīng)當注意的是,可以使用不同的架構(gòu)來將重復刪除dram存儲器模塊130集成到重復刪除dram系統(tǒng)架構(gòu)100中。
另外,盡管可以對現(xiàn)存的dram存儲器模塊進行一些改變以實施本實施例(例如,驅(qū)動升級),但是軟件實施方式允許使用本實施例的重復刪除dram系統(tǒng)架構(gòu)100,而不對操作系統(tǒng)/cpu140或處理器110進行物理改變。
本實施例的重復刪除dram系統(tǒng)架構(gòu)100可以在重復刪除dram存儲器模塊130上實施片上系統(tǒng)(soc)以用于dram情報協(xié)議,諸如重復刪除、內(nèi)容可尋址性、安全性、存儲器中處理器(pim)、行地址選通(ras)等等,行地址選通(ras)是被發(fā)送到dram以告知dram相關(guān)聯(lián)的地址是行地址的信號,據(jù)此dram中的數(shù)據(jù)比特被存儲在根據(jù)列地址和行地址的交叉所定位的單元中。
重復刪除dram系統(tǒng)架構(gòu)100還可以具有智能系統(tǒng)軟件,其使得處理器110允許與存儲器控制器120相關(guān)的虛擬密度(density)管理、智能數(shù)據(jù)替換以及dram情報應(yīng)用編程接口(api)等等。
dram存儲器模塊130可以進一步具有3dsdram組件,諸如最高容量dram存儲器模塊,其具有多個形狀因子(例如,雙列直插存儲器模塊(dimm)、2.5英寸、全高、半高(fhhl)、半高半長(hhhl)、全高全長(fhfl)等等)。
因此,通過使用本實施例的重復刪除dram系統(tǒng)架構(gòu)100提供存儲器中心式重復刪除系統(tǒng),可以在存儲器接口處直接地執(zhí)行重復刪除寫入處理,從而增加dram130的容量。
圖2是圖1的實施例的重復刪除dram存儲器模塊中的存儲器類型的框圖;而圖3是圖2的實施例的哈希表存儲器的哈希表的框圖。
參考圖2,本發(fā)明的實施例的重復刪除dram存儲器模塊可以具有重復刪除算法架構(gòu),其中,dram存儲器模塊130內(nèi)部的存儲器空間被分類為三個不同區(qū)域。三個不同區(qū)域包括:地址查找表(lut)存儲器(alutm)210,用于指示所存儲的重復刪除的數(shù)據(jù)塊的位置;哈希表存儲器220,用于存儲重復刪除的數(shù)據(jù)塊;以及溢出/緩沖存儲器230,用于當哈希表存儲器的哈希表的哈希路為滿時存儲數(shù)據(jù)。
當數(shù)據(jù)塊要進入重復刪除dram存儲器模塊130時,重復刪除算法可以進行操作以確定數(shù)據(jù)塊是否為新的、在alutm210中缺乏任何相對應(yīng)的地址的之前未被存儲的數(shù)據(jù)塊。為了執(zhí)行此操作,重復刪除算法將訪問alutm210。為了確保相同的數(shù)據(jù)塊僅被存儲為單個條目,alutm210內(nèi)的指針/查找地址(例如,物理線id(plid),以下關(guān)于圖5對其進行進一步地描述)指示哈希表存儲器220中存儲有相同的數(shù)據(jù)塊的地點。即,alutm210是用于將哈希表內(nèi)的位置(例如,地址)與查找地址映射指針(例如,plid)相關(guān)聯(lián)的存儲設(shè)備。因此,如果數(shù)據(jù)塊已經(jīng)被之前存儲在哈希表存儲器220中,則alutm210內(nèi)的指針能夠指向其中存儲有相同的數(shù)據(jù)塊的哈希表存儲器220的地址,從而消除對于存儲數(shù)據(jù)塊的重復副本的需要,從而增加dram存儲器模塊130的存儲器容量。
參考圖3,存儲器重復刪除可以使用相對有效又簡單的多路的哈希表/哈希陣列380,以確保高等級的重復刪除,并且相對應(yīng)地,確保dram存儲器模塊130的大的存儲器容量。本實施例的dram存儲器模塊130的哈希表存儲器220是一個或多個哈希表380位于其中的地點,并且針對其益處被用于確定數(shù)據(jù)塊是否唯一。哈希表380可以被認為是包括哈希桶310(行)和哈希路320(列)的二維陣列。即,本實施例的哈希表380包括m行的哈希桶310,每個哈希桶310包含n列的數(shù)據(jù)線/槽/條目/哈希路320,其指示哈希桶310的容量(m和n是整數(shù))。
數(shù)據(jù)塊被存儲在哈希表存儲器220的哈希路320中,并且alutm210中的地址指針可以存儲指示與特定的數(shù)據(jù)塊相關(guān)聯(lián)的特定的哈希桶310和特定哈希路320的值。因此,地址(例如,64位地址)可以被索引編制到alutm210中,并且據(jù)此,可以確定存儲與地址相對應(yīng)的數(shù)據(jù)塊的哈希表380的哈希桶310的相關(guān)聯(lián)的哈希路320。
因此,在寫入處理(例如,64字節(jié)數(shù)據(jù)寫入)期間,當接收到寫入請求(即,用于記錄包括一個或多個數(shù)據(jù)塊的進入數(shù)據(jù)的請求)時,使用哈希函數(shù)/哈希算法針對進入數(shù)據(jù)來計算哈希值(即,對進入數(shù)據(jù)進行“哈希化”),以使得可以確定相對應(yīng)的哈希桶310和路320。即,通過對進入的數(shù)據(jù)進行哈?;?,可以確定數(shù)據(jù)是唯一的還是已經(jīng)被存儲在哈希表380中。因此,哈希值指示將要放置數(shù)據(jù)塊的地點,或者,當數(shù)據(jù)塊(例如,64字節(jié)的數(shù)據(jù)塊)是重復的時,哈希值指示哈希表存儲器220中已經(jīng)存儲有數(shù)據(jù)塊的地點。當數(shù)據(jù)內(nèi)容被添加到存儲器時,m個哈希桶310中的一些可以首先達到容量。因此,重復刪除的dram存儲器模塊130包括溢出條款(overflowprovision),其使用緩沖存儲器230以用于存儲不可以進入哈希表存儲器220的數(shù)據(jù)塊。之后,可以取回原始查找地址,并且可以依照根據(jù)對進入數(shù)據(jù)進行哈?;嬎愠龅牟檎业刂穪砀耡lutm210。
當在嘗試寫入處理期間確定所有哈希路320為滿時,使用緩沖存儲器230。即,當哈希表380填滿時,數(shù)據(jù)被放置在緩沖存儲器230的非重復刪除的溢出區(qū)域中,從而降低重復刪除等級。因此,緩沖存儲器230本質(zhì)上是預留的、標準的、簡單的溢出存儲器區(qū)域,其用作soc存儲器緩沖/緩存以用于實施虛擬密度過量提供(over-provision)管理溢出。一旦數(shù)據(jù)被放置在緩沖存儲器230中,則其不再被哈?;⑶也辉倏梢员恢貜蛣h除。
如果計算機應(yīng)用試圖將相同的值序列存儲到存儲器多次,則在alutm210中所存儲的轉(zhuǎn)換陣列中的多個條目參考哈希表存儲器220中的其中存儲有數(shù)據(jù)塊的同一地址,其中,alutm210中的條目小于原始的唯一的數(shù)據(jù)塊,從而允許實現(xiàn)有效的壓縮。
m個哈希桶310中的每個可以進一步包括:參考/頻率計數(shù)線340,包括用于指示哈希桶310的相對應(yīng)的哈希路320的唯一標識符;以及簽名線330。對于每個哈希桶310,相對應(yīng)的簽名線330包含零值以指示自由線或者包含非零次要(secondary)哈希值以用于內(nèi)容查找優(yōu)化。因此,對于內(nèi)容查找,通常不存在需要基于簽名線中的零值條目所分配的自由線的簽名匹配;或者存在單個簽名匹配以使得隨后的數(shù)據(jù)線的讀取和內(nèi)容的比較確認重復的存在。m個哈希桶310中的每個可以進一步包括跳轉(zhuǎn)詞線370,以下將參考圖5a、圖5b和圖5c進一步對其進行描述。
物理線id(plid)350可以被用于將數(shù)據(jù)索引編制到哈希表380中。plid350可以被用于識別存儲線,其可以被劃分到alutm201、哈希表存儲器220或緩沖存儲器230之一中。每個存儲線可以被稱為:用于將唯一內(nèi)容存儲在哈希表380中的數(shù)據(jù)線,或者用于存儲若干plid350并且用于提供從處理器總線地址到哈希表380中的重復刪除的數(shù)據(jù)塊的映射的轉(zhuǎn)換線。即,總線地址對轉(zhuǎn)換線進行識別,并且進一步地對轉(zhuǎn)換線中包含相關(guān)plid350的條目進行識別,該相關(guān)的plid350轉(zhuǎn)而指定特定的數(shù)據(jù)線。因此,plid350可以被實施為包括溢出標志,并且可以包括:用于指示特定的相對應(yīng)的哈希表380的數(shù)據(jù)、相對應(yīng)的哈希桶比特以及指示與plid350相對應(yīng)的數(shù)據(jù)塊的位置的相對應(yīng)的路比特。
對于每個候選桶310,存在一個相關(guān)聯(lián)的哈希函數(shù)/哈希算法“h(x)”,其是產(chǎn)生被用于將數(shù)據(jù)索引編制到哈希桶310中的log2(m)比特哈希的算法(例如,如果哈希表380具有8個哈希桶310,則該哈希表380的哈希函數(shù)將產(chǎn)生3比特哈希)。即,哈希函數(shù)h(x)允許相對大量的輸入數(shù)據(jù)(例如,要被存儲在存儲器中的輸入數(shù)據(jù)文件)被輸入到哈希函數(shù)h(x),以及通過要被存儲在哈希表380中的哈希函數(shù)h(x)來生成和輸出本質(zhì)上不同的較小量的輸出數(shù)據(jù)(例如,哈希值)。因此,當偶然地可能將不同的數(shù)據(jù)集哈?;癁橥还V禃r,哈希函數(shù)h(x)使得能夠進行壓縮。
在寫入到重復刪除的存儲器中時,當接收到與數(shù)據(jù)文件相對應(yīng)的寫入請求時,重復刪除的存儲器首先執(zhí)行重復搜索以確定相同的/重復的數(shù)據(jù)塊是否已經(jīng)被存儲在哈希表380中。然后,重復刪除的存儲器對alutm210和哈希表存儲器220中的條目進行更新。例如,可以通過對哈希表存儲器220中的原始查找地址的頻率計數(shù)進行更新(即,降低1)來更新參考計數(shù)線340,并且其中,當頻率計數(shù)達到0時刪除相對應(yīng)的數(shù)據(jù)塊。此外,可以在alutm210中生成新的plid350。
在可以被稱為內(nèi)容查找的重復搜索期間,重復刪除dram存儲器模塊130尋找意欲被寫入的數(shù)據(jù)文件的之前存在的實例或其一部分。當存在被存儲在哈希表存儲器220中的數(shù)據(jù)的之前存在的(pre-existing)實例時,重復搜索返回指向相對應(yīng)的數(shù)據(jù)線的plid350。當未發(fā)現(xiàn)數(shù)據(jù)的之前存在的實例時,則通過分配哈希表380中的空間、將內(nèi)容寫入其中以及返回新的plid350來針對相對應(yīng)的數(shù)據(jù)塊創(chuàng)建新的數(shù)據(jù)線??梢酝ㄟ^以由總線地址確定的偏移將plid350存儲在alutm210中來記錄內(nèi)容。
為了將數(shù)據(jù)線“c”插入到哈希表380中,c“h(c)”的相對應(yīng)的哈希函數(shù)可以被計算為數(shù)學運算。一旦針對數(shù)據(jù)線c計算了哈希函數(shù),則可以通過內(nèi)容查找操作來檢查哈希表t(h(c))的行,以查看是否存在允許數(shù)據(jù)線c的插入的足夠的可用空間(或查看重復的數(shù)據(jù)線c是否已經(jīng)在哈希表380中)。
如所提及地,哈希表380中的每個哈希桶310額外地包括簽名線330和參考計數(shù)線340,簽名線330和參考計數(shù)線340中的每個僅占用單個哈希路320,這是由于簽名線320的簽名332和參考計數(shù)線340的參考計數(shù)342可以被設(shè)計為足夠小以將若干量裝入每個哈希桶310的事實。即,在哈希表380中,哈希表380的一個整個列可以被指派給分別地屬于哈希桶310的簽名線330,并且一個整個列可以被指派給分別地屬于哈希桶310的參考計數(shù)線340。
當諸如數(shù)據(jù)線“c”的真實的數(shù)據(jù)塊被添加到哈希表380中時,哈希表380開始被數(shù)據(jù)填充,該數(shù)據(jù)可以稍后通過將在alutm210中所存儲的相對應(yīng)的plid350與每個單獨的重復刪除的數(shù)據(jù)線在哈希表380內(nèi)的地址進行匹配來訪問??梢酝ㄟ^識別數(shù)據(jù)位于其中的特定的哈希桶310和特定的哈希路320(例如,識別哈希表380的行和列)來識別哈希表380內(nèi)的地址。因此,對于在哈希表380中所存儲的每個數(shù)據(jù)塊,存在通過相對應(yīng)的(一個或多個)plid350所識別的、在alutm210中所存儲的以及指向數(shù)據(jù)塊的位置的一個或多個相對應(yīng)的地址。一旦哈希表380被數(shù)據(jù)填滿,則新近引入的數(shù)據(jù)被放置在非重復刪除的溢出區(qū)域/緩沖存儲器230中,從而降低重復刪除等級。
在從重復刪除的存儲器進行讀取時,重復刪除的存儲器返回來自哈希表存儲器220的數(shù)據(jù)線或來自緩沖存儲器230的溢出線的副本。例如,當接收到讀取請求、所存儲的數(shù)據(jù)要被讀取時,使用在alutm210中所存儲的plid350來查找哈希表380的相對應(yīng)的地址。然后,取回并且重編(reassemble)每個地址中的相對應(yīng)的塊。
圖4是根據(jù)本發(fā)明的實施例的多哈希表陣列的框圖。
參考圖4,根據(jù)本發(fā)明的實施例的重復刪除dram系統(tǒng)使用哈希表陣列400,該哈希表陣列400包括多個哈希表(mht)480,多個哈希表(mht)480中的每個包括m個哈希桶410,每個哈希桶410包括n個哈希路420。盡管本實施例描述了哈希表480和哈希桶410關(guān)于其維度一致(例如,m和n被描述為整數(shù)),但是在其他實施例中,同一多哈希表陣列中的不同的哈希表可以具有不同數(shù)量的桶,并且類似地,多哈希表陣列內(nèi)的或者甚至同一哈希表內(nèi)的不同的哈希桶可以具有不同數(shù)量的路。此外,盡管多哈希表480被整體地利用,但是在一些方面中,不同的哈希表480彼此獨立(例如,不同的哈希表480可以具有不同的相應(yīng)的哈希函數(shù),或者可以具有通用的哈希函數(shù))。
如果哈希表陣列400包括“k”個平行哈希表t1,t2,…,tk(k為整數(shù)),其中,每個哈希表480分別地使用單獨的、獨立的哈希函數(shù)h1(x),h2(x),…,hk(x),因為哈希表t1,t2,…,tk中的每個包含m個哈希桶410,所以使得哈希函數(shù)h1(x),h2(x),…,hk(x)仍然產(chǎn)生logm比特哈希;并且因為每個哈希桶410包含n個哈希路420,所以3維(3d)哈希表陣列(例如,多哈希表陣列)的容量為m×n×k。
每個哈希表480可以對應(yīng)于單個哈希函數(shù),該哈希函數(shù)確定如何對數(shù)據(jù)進行索引編制。通過對要被寫入的進入數(shù)據(jù)(incomingdata)進行哈希化,作為結(jié)果的計算(例如,包括查找地址和鍵的哈希值)可以與鍵和值進行比較,并且如果值匹配,則增加相對應(yīng)的哈希桶410中的參考計數(shù)線340,從而指示alutm210中的額外的plid350指向特定的線。
不同于傳統(tǒng)的哈希表,本實施例的多哈希表480各自包括多個虛擬哈希桶/虛擬桶460,虛擬桶460由多個物理哈希桶/物理桶410構(gòu)成。在下文中,術(shù)語“物理桶”將指代之前所討論的哈希桶,并且將被用于將之前所討論的哈希桶310與虛擬桶460相區(qū)分。
每個虛擬桶460可以包括相對應(yīng)的哈希表480的m個物理桶410中的h個,h是小于m的整數(shù)。然而,應(yīng)當注意的是,同一哈希表480的虛擬桶460中的不同的虛擬桶可以共享一個或多個物理桶410。如以下將討論地,通過使用根據(jù)本發(fā)明的實施例的虛擬桶460,第四維度可以被添加到3維哈希表陣列。因此,在布置和放置數(shù)據(jù)時可以提供更大的靈活性,從而提高效率并且提高重復刪除dram系統(tǒng)的壓縮比率。
當在哈希表480之一中所存儲的數(shù)據(jù)塊可以在相對應(yīng)的虛擬桶460內(nèi)移動或者可以移動到不同的物理桶410以釋放由其他虛擬桶460所共享的其他物理桶410時,本實施例使用虛擬桶460來提高另一個等級的數(shù)據(jù)放置靈活性(dataplacementflexibility)。通過釋放哈希表480內(nèi)的空間,通過移除廢棄的/重復的數(shù)據(jù)可以實現(xiàn)重復刪除。即,通過使用根據(jù)本發(fā)明的實施例的虛擬桶460,不存在通過使用哈希函數(shù)將數(shù)據(jù)線哈希化到受限的相對應(yīng)的位置所導致的嚴格限制,并且數(shù)據(jù)能夠被放置在附近/“附近位置”的物理桶410中,所述附近/“附近位置”的物理桶410指代在包括初始地期望的(但是未被占用的)物理哈希桶410的同一虛擬桶460內(nèi)的物理桶410。
作為示例,內(nèi)容(例如,數(shù)據(jù)線c)將被放置在k個哈希表t1(h1(c)),t2(h2(c)),…,t3(h3(c))之一的物理桶410之一中。如果數(shù)據(jù)線c被放置在t1(h1(c))中而不是要求數(shù)據(jù)線c被放置在由t1(h1(c))所表示的物理桶410中,則本實施例允許虛擬桶460,該虛擬桶460大于單個物理桶410以及包括由t1(h1(c))所表示的物理桶410而且還包含總計h個物理桶410。即,虛擬桶460包含排列在哈希表480內(nèi)的并且包括t1(h1(c)),t1(h1(c)+1),t1(h1(c)+2),…,t1(h1(c)+h-1)的h個連續(xù)的或鄰近的物理桶410的集合。
因此,虛擬桶460允許數(shù)據(jù)塊在哈希表480內(nèi)移動,以釋放空間來用于將來的寫入操作。允許之前進入哈希表480的數(shù)據(jù)塊的(在包含哈希表480的物理桶410的虛擬桶460內(nèi))移動的本實施例的操作可以被稱為跳轉(zhuǎn)阻止??梢匀缦滤龅馗倪M針對存儲器重復刪除的、使用多哈希表480的跳轉(zhuǎn)阻止操作。
首先,作為哈希表480的哈希函數(shù)的結(jié)果,dram存儲器模塊130可以嘗試將數(shù)據(jù)線c插入到哈希表480。然而,有時,作為同一哈希函數(shù)的結(jié)果,不同的數(shù)據(jù)線可以在之前進入了(enteredinto)哈希表480。即,盡管不同,但是作為哈希函數(shù)的結(jié)果,不同的數(shù)據(jù)線可以指向哈希表480內(nèi)的同一位置。為了確定數(shù)據(jù)線c應(yīng)該被插入到哪里,操作可以首先查找在被表示為t(h(c))的物理桶410處或之后的物理桶410處的第一可用物理桶410。
因此,在確定將數(shù)據(jù)線c寫入到哪里時,因為被表示為t(h(c))的初始期望的物理桶410可能被占用,所以第一可用物理桶410(即,數(shù)據(jù)線可以被插入到其中的第一空閑空間)可以被表示為t(h(c)+f),其中,f為0或更大。假定被表示為t(h(c))的物理桶410是相對應(yīng)的虛擬桶460的h個物理桶410中的第一物理桶410,如果f小于h(即,在同一虛擬桶460內(nèi)存在未被占用的物理桶410),則c可以被放置在相對應(yīng)的虛擬桶460中。類似地,如果被表示為t(h(c))的物理桶410是相對應(yīng)的虛擬桶460的第二物理桶410,如果f小于h-1,則c可以被放置在相對應(yīng)的虛擬桶460中。
然而,假定相對應(yīng)的虛擬桶460的第一物理桶410是期望的物理桶410,如果f大于或等于h(即,不存在c可以適合于其的虛擬桶460的物理桶410),則盡管c不適合于其虛擬桶460,但是操作可以嘗試按照下述方式在虛擬桶460中創(chuàng)建空閑空間。例如,本發(fā)明的實施例的重復刪除dram存儲器模塊130可以查看物理桶410,從由t(h(c)+f-h)所表示的物理桶410開始,然后為由t(h(c)+f-h+1)所表示的物理桶等等,直到確定由t(h(c)+f-1)所表示的物理桶410是否在其中包括有數(shù)據(jù)為止(例如,可以從頭到尾掃描虛擬桶460)。然后,重復刪除dram存儲器模塊可以確定在從t(h(c)+f-h)到t(h(c)+f-1)的物理桶410中所包含的任何數(shù)據(jù)對象是否可以被放置到空閑空間t(h(c)+f)中。即,重復刪除dram存儲器模塊可以確定從t(h(c)+f-h)到t(h(c)+f-1)的物理桶中的任何一個是否與物理桶t(h(c)+f)在共同的虛擬桶460中,從而允許包含在其中的數(shù)據(jù)被移除。然后,重復刪除dram存儲器模塊可以將最早地發(fā)現(xiàn)的這樣的數(shù)據(jù)對象放置在空閑空間中,從而以便在由t(h(c)+e)所表示的物理桶410中創(chuàng)建新的空閑空間(e是小于f的整數(shù))??梢灾貜驮撎幚恚钡絜小于h為止(例如,數(shù)據(jù)可以按照級聯(lián)方式在哈希表中移動),從而釋放允許將數(shù)據(jù)線c放置在相對應(yīng)的虛擬桶460中的足夠空間。
例如,參考圖5b,在本示例中,將物理桶pb2指派為期望的物理桶410。因為期望的物理桶bp2與虛擬桶vb1相關(guān)聯(lián)地被占用,所以可以從頭到尾掃描虛擬桶vb2(例如,從物理桶pb2到物理桶pb5)。因為物理桶pb3、pb4和pb5也被占用,所以第一可用物理桶410是物理桶bp6(即,f等于4并且因此大于或等于h,以及第一可用物理桶410不在相對應(yīng)的虛擬桶vb2中)。因此,物理桶pb5中的數(shù)據(jù)可以被移動到物理桶pb6,從而釋放虛擬桶vb2中的空間,以使得數(shù)據(jù)線c可以被放置在相對應(yīng)的虛擬桶vb2中(在物理桶pb5中)。然而,如果期望的物理桶為pb1(即,相對應(yīng)的虛擬桶460為vb1),則可以重復處理,以使得物理桶pb4中的數(shù)據(jù)可以從虛擬桶vb1被移動到鄰近的虛擬桶vb2,以進入物理桶pb5的新近地被釋放的空間。之后,數(shù)據(jù)線c可以被寫入到與pb1的期望的物理桶相對應(yīng)的虛擬桶vb1的物理桶pb4中。
因此,因為不同的虛擬桶460對特定的物理桶410的共同的所有權(quán),其可以被認為是不同的虛擬桶460的交疊(overlap),所以數(shù)據(jù)可以從一個虛擬桶460移動到另一個虛擬桶460,從而創(chuàng)建用于初始哈希桶410的空間。
在另一個實施例中,在寫入處理期間,當接收到用于將數(shù)據(jù)塊寫入到哈希表陣列400的請求時,dram存儲器模塊130可以查找每個哈希表的整個虛擬桶460的數(shù)據(jù)價值,以檢查現(xiàn)存項是否已經(jīng)在哈希表480之一中。如果第一期望的哈希表480為滿,并且如果在第一期望的哈希表480中未找到數(shù)據(jù)塊(即,每個物理桶410中的每個路420被不同的數(shù)據(jù)塊占用),則dram存儲器模塊130可以試圖使數(shù)據(jù)進入緩沖存儲器230,或者可以替選地(alternatively)試圖使數(shù)據(jù)進入陣列400的另一個哈希表480。然而,如果多哈希表陣列400的所有哈希表480為滿,則數(shù)據(jù)塊將“溢出”到緩沖存儲器230。在這樣的實施例中,哈希表陣列400內(nèi)的數(shù)據(jù)的移動可以被dram存儲器模塊130否決。因此,通過否決之前所存儲的數(shù)據(jù)在哈希表陣列400內(nèi)的移動,當前實施例(不同于之前所討論的實施例)能夠改進與寫入功能有關(guān)的延遲。
即,當接收到寫入請求時,本實施例的dram存儲器模塊130對數(shù)據(jù)塊進行哈希化,并且然后確定期望的物理桶(如由通過對數(shù)據(jù)塊進行哈?;a(chǎn)生的哈希值所確定的)或在同一虛擬桶460內(nèi)的任何其他附近物理桶410是否已經(jīng)將數(shù)據(jù)塊存儲在其中。如果數(shù)據(jù)塊未被存儲在其中,則dram存儲器模塊130確定在同一虛擬桶460中是否存在用于存儲數(shù)據(jù)塊的任何空間。如果不存在空間,則dram存儲器控制器130或者簡單地將數(shù)據(jù)塊存儲在緩沖存儲器中,或者替選地在將數(shù)據(jù)塊存儲在緩沖存儲器230之前確定在哈希表陣列400的其他地點中的任何空間是否可用。因為未執(zhí)行在虛擬桶之間移動其他數(shù)據(jù)塊以釋放期望的虛擬桶460中的空間的操作,所以相較于之前所描述的實施例,可以改進與本實施例的dram存儲器模塊130相關(guān)聯(lián)的尾部延遲(taillatency)。
根據(jù)又一實施例,可以通過重復刪除算法(例如,重復刪除寫入算法)來確定alutm210、哈希表存儲器220和緩沖存儲器230的配置。重復刪除算法可以轉(zhuǎn)而通過與重復刪除dram存儲器模塊相關(guān)聯(lián)的軟件或驅(qū)動來確定(例如,非適應(yīng)性重復刪除算法),或者可以由重復刪除dram存儲器模塊130自身基于由重復刪除dram存儲器模塊130所分析的信息或參數(shù)來確定(例如,適應(yīng)性重復刪除算法)。
例如,對于適應(yīng)性重復刪除算法,重復刪除dram存儲器模塊130可以接收與對應(yīng)于重復刪除dram系統(tǒng)架構(gòu)100的應(yīng)用模式歷史、重復刪除算法集或重復刪除算法選擇策略中的一個或多個相對應(yīng)的信息。因此,通過訪問追蹤特定的應(yīng)用的過去的行為或應(yīng)用的類型的數(shù)據(jù)庫,可以調(diào)整重復刪除dram存儲器模塊130的參數(shù)以提高性能。這樣的參數(shù)可以包括哈希表的數(shù)量(k)、物理桶的數(shù)量(m)、路的數(shù)量(m)、虛擬桶的“高度”(即,每個虛擬桶的物理桶的數(shù)量)(h)、哈希表的哈希函數(shù)(h(x))或者重復刪除線大小。參數(shù)還可以確定dram存儲器模塊130內(nèi)的什么空間分別地與alutm210、哈希表存儲器220或緩沖存儲器230相關(guān)聯(lián)。
此外,重復刪除dram存儲器模塊130可以生成各自與被不同地調(diào)整的參數(shù)相對應(yīng)的不同的重復刪除寫入算法的數(shù)量。因此,dram存儲器模塊130可以依賴于由處理器110所處理的應(yīng)用的類型來選擇不同的重復刪除寫入算法之一(例如,優(yōu)化的重復刪除寫入算法)以提高重復刪除dram系統(tǒng)100的整體性能。
作為另一示例,對于非適應(yīng)性重復刪除算法,與重復刪除dram系統(tǒng)100的處理器110或存儲器控制器120相關(guān)聯(lián)的軟件或驅(qū)動可以支配(dictate)要由dram存儲器模塊130實施的上述參數(shù)??商孢x地,軟件或驅(qū)動可以選擇預處理算法,并且重復刪除dram存儲器模塊130可以基于經(jīng)由存儲器控制器120所傳達的預處理算法來創(chuàng)建重復刪除寫入算法。
圖5a、圖5b和圖5c描繪了根據(jù)本發(fā)明的實施例用于生成跳轉(zhuǎn)詞(hopword)以將虛擬桶與特定物理桶相關(guān)聯(lián)的二維陣列。
參考圖5a、圖5b以及圖5c,根據(jù)本實施例,通過使用跳轉(zhuǎn)詞值591或跳轉(zhuǎn)詞向量592并且通過使用用于有效地追蹤數(shù)據(jù)移動的虛擬桶利用值,各種虛擬桶460可以與其相對應(yīng)的物理桶410相關(guān)聯(lián)。因為每個被占用的物理桶410僅可以對應(yīng)于單個虛擬桶460,所以跳轉(zhuǎn)詞值591或跳轉(zhuǎn)詞向量592可以被用于追蹤哪個虛擬桶460與每個被占用的物理桶410相對應(yīng)。
在本示例中,四個虛擬桶vb0、vb1、vb2以及vb3各自具有來自物理桶pb0、pb1、pb2、pb3、pb4、pb5和pb6的組的一組不同的四個連續(xù)的物理桶(即,h等于4)。
例如,參考圖5a和圖5b,通過創(chuàng)建包括物理桶位置和虛擬桶位置(例如,準地址)的二維陣列并且通過將1(例如,二進制指示符)放置在包含用于每個虛擬桶460的數(shù)據(jù)的每個物理桶410中,可以確定跳轉(zhuǎn)詞向量592,注意,在與物理桶410相對應(yīng)的任何列中不可以存在多于一個的1。因此,跳轉(zhuǎn)詞向量592可以包括可以被用于追蹤用于每個虛擬桶460的物理桶使用(physicalbucketusage)的1和0的陣列。在本示例中,針對第一虛擬桶vb0,物理桶pb0、pb1和pb3被占用;針對第二虛擬桶vb1,物理桶pb2和pb4被占用;針對第三虛擬桶vb2,僅物理桶pb5被占用;以及第四虛擬桶vb3未被占用。
類似地,參考圖5c,通過知曉哪個虛擬桶460與被占用的物理桶410相對應(yīng),可以基于該被占用的物理桶410來創(chuàng)建跳轉(zhuǎn)詞值591。跳轉(zhuǎn)詞值可以為log2(h)比特長(h是每虛擬桶460的物理桶410的數(shù)量)。
跳轉(zhuǎn)詞向量592或跳轉(zhuǎn)詞值591的信息可以被存儲在用于每個哈希桶410的跳轉(zhuǎn)詞線470中,以使得物理桶410與虛擬桶460之間的關(guān)系可以被索引編制到存儲器中。
圖6是根據(jù)本發(fā)明的實施例用于對哈希表存儲器中的數(shù)據(jù)塊進行尋址的物理線id(plid)的框圖。
參考圖6,依照本發(fā)明的實施例,提供了修改的plid650。本發(fā)明的實施例的plid650包括:多個比特,分別地指示地址、偏移、表的索引、哈希以及槽/路;以及鍵651,與特定的虛擬桶460配對以追蹤在虛擬桶460之間移動的對象。因此,如果鍵651與特定的虛擬桶460匹配,則該特定的虛擬桶460可以具有被寫入到其的數(shù)據(jù)對象。
然而,在另一個實施例中,plid650采用虛擬桶利用值字段652(例如,虛擬桶索引)來替換鍵651,該虛擬桶利用值字段652包括log2(h)比特(例如,具有/包括為16個物理桶的高度的虛擬桶將對應(yīng)于plid650中的4比特虛擬桶利用值字段)。虛擬桶利用值字段652指示哪個虛擬桶460對應(yīng)于每個被占用的物理桶410。因此當將數(shù)據(jù)對象寫入到虛擬桶460中時,可以計算在虛擬桶460中已經(jīng)存在的對象的數(shù)量,并且等于在虛擬桶中已經(jīng)存在的項的數(shù)量加一的值p可以被寫作虛擬桶利用值字段652。通過使用plid650中的虛擬桶利用值字段652,可以降低plid650的存儲開銷。
圖7是示出了根據(jù)本發(fā)明的實施例用于使用跳轉(zhuǎn)阻止方法將數(shù)據(jù)寫入存儲器模塊的多哈希表陣列的處理的流程圖。
參考圖7,在操作s701,可以識別多個哈希表,哈希表中的每個與哈希函數(shù)相對應(yīng),并且哈希表中的每個包括物理哈希桶,每個物理哈希桶包括路并且被配置為存儲數(shù)據(jù)(例如,重復刪除dram存儲器模塊130可以識別k個哈希表480,每個哈希表與哈希函數(shù)h(x)相對應(yīng),每個哈希表包括m個物理哈希桶410,每個物理哈希桶包n個路420)。
在操作s702,可以識別多個虛擬桶,虛擬桶中的每個包括物理哈希桶中的一些,并且虛擬桶中的每個與另外一個虛擬桶共享至少一個物理哈希桶(例如,重復刪除dram存儲器模塊130可以識別多個虛擬桶460,虛擬桶460中的每個包括m個物理哈希桶410中的h個,以及每個虛擬桶460與另一個虛擬桶460共享物理哈希桶410中的至少一個,如圖4所示)。在s702a,通過采用物理線id(plid)對哈希表進行索引編制并且通過當對象被寫入虛擬桶中的相對應(yīng)的虛擬桶時將虛擬桶利用值字段增加一來識別多個虛擬桶,該物理線id(plid)包括為log2(h)比特的虛擬桶利用值字段并且包括等于在虛擬桶中的相對應(yīng)的虛擬桶中的數(shù)據(jù)塊的數(shù)量的值(例如,可以通過采用物理線id(plid)650對哈希表480進行索引編制來識別虛擬桶460,該物理線id(plid)650包括虛擬桶利用值字段652并且包括等于在虛擬桶460中的相對應(yīng)的虛擬桶中的數(shù)據(jù)塊的數(shù)量的值,如圖6所示,其中,當對象或數(shù)據(jù)塊被寫入到虛擬桶460中的相對應(yīng)的虛擬桶的對象或數(shù)據(jù)塊時,虛擬桶利用值字段652可以增加一)。
在操作s703,在其上存儲有數(shù)據(jù)的物理哈希桶中的每個可以被識別為被指派給虛擬桶中的單個相對應(yīng)的虛擬桶(例如,重復刪除dram存儲器模塊130可以將在其上存儲由數(shù)據(jù)的物理哈希桶410識別為被指派給虛擬桶460(vb0、vb1和vb2)中的單個相對應(yīng)的虛擬桶,如圖5b和圖5c所示)。在操作s703a,可以通過生成用于指示包含數(shù)據(jù)的物理哈希桶中的哪個與虛擬桶中的哪個相對應(yīng)的跳轉(zhuǎn)詞向量或跳轉(zhuǎn)詞值來識別物理哈希桶(例如,重復刪除dram存儲器模塊130可以生成用于指示包含數(shù)據(jù)的物理哈希桶410中的哪個與虛擬桶460中的哪個相對應(yīng)的跳轉(zhuǎn)詞向量592或跳轉(zhuǎn)詞值591,如圖5b和圖5c所示)。
在操作s704,可以根據(jù)哈希函數(shù)中的相對應(yīng)的哈希函數(shù)來對數(shù)據(jù)線進行哈?;援a(chǎn)生哈希值(例如,重復刪除dram存儲器模塊130可以從與數(shù)據(jù)線c相對應(yīng)的存儲器控制器120接收寫入請求,并且可以根據(jù)哈希函數(shù)h(x)中的相對應(yīng)的哈希函數(shù)對進入數(shù)據(jù)進行哈希化以產(chǎn)生哈希值)。
在操作s705,可以根據(jù)哈希值來確定相對應(yīng)的哈希表的虛擬桶中的相對應(yīng)的虛擬桶是否具有用于數(shù)據(jù)塊的可用空間(例如,重復刪除dram存儲器模塊130可以確定虛擬桶460vb3在物理桶pb6中具有用于數(shù)據(jù)塊的空間,如圖5b和圖5c所示)。
在操作s706,當虛擬桶中的相對應(yīng)的虛擬桶不具有可用空間時,可以將數(shù)據(jù)從虛擬桶中的相對應(yīng)的虛擬桶順序地移動到虛擬桶中的鄰近的虛擬桶,直到虛擬桶中的相對應(yīng)的虛擬桶具有用于數(shù)據(jù)塊的空間為止(例如,當虛擬桶vb2不具有任何其他可用物理桶時,重復刪除dram存儲器模塊130可以將數(shù)據(jù)從虛擬桶vb2的物理桶pb5順序地移動到虛擬桶vb3,直到虛擬桶vb2具有用于數(shù)據(jù)塊的空間為止,如圖5b和圖5c所示,其中,如果虛擬桶vb1是虛擬桶460中的相對應(yīng)的虛擬桶,則可以重復處理以將數(shù)據(jù)從虛擬桶vb1d的物理桶pb4移動到虛擬桶vb2的物理桶pb5)。在操作s706a,可以對地址查找表存儲器進行更新以改變與被移動的數(shù)據(jù)塊相對應(yīng)的一個或多個查找地址(例如,重復刪除dram存儲器模塊130可以對alutm210進行更新以改變與被移動的數(shù)據(jù)塊相對應(yīng)的一個或多個地址指針,以使得可以取回被移動的數(shù)據(jù)塊在哈希表存儲器220中的新的地址)。
在操作s707,數(shù)據(jù)塊可以被存儲在虛擬桶中的相對應(yīng)的虛擬桶中(例如,如果虛擬桶vb1是期望的虛擬桶460,則重復刪除dram存儲器模塊130可以將數(shù)據(jù)塊存儲在虛擬桶vb1的物理桶pb4中,如圖5b和圖5c所示)。如果確定包括虛擬桶vb1的哈希表480為滿,則數(shù)據(jù)塊可以被存儲在緩沖存儲器230中。
圖8是示出了根據(jù)本發(fā)明的實施例用于從存儲器模塊的多哈希表陣列讀取數(shù)據(jù)的處理的流程圖。
在操作s801,可以接收與在哈希表陣列中所存儲的多個數(shù)據(jù)塊相對應(yīng)的讀取請求(例如,重復刪除dram存儲器模塊130可以從與構(gòu)成數(shù)據(jù)線c的多個數(shù)據(jù)塊相對應(yīng)的存儲器控制器120接收讀取請求,數(shù)據(jù)塊被存儲在哈希表存儲器220中的哈希表陣列400中)。
在操作s802,可以從alutm取回與多個數(shù)據(jù)塊相對應(yīng)的指針中的相對應(yīng)的指針(例如,重復刪除dram存儲器模塊130可以從alutm210取回與構(gòu)成數(shù)據(jù)線c的多個數(shù)據(jù)塊相對應(yīng)的地址指針)。
在操作s803,在哈希表存儲器中,可以基于指針中的相對應(yīng)的指針來訪問多個數(shù)據(jù)塊(例如,重復刪除dram存儲器模塊130可以對哈希表存儲器220中的哈希表陣列400內(nèi)的不同的地址進行訪問并且從其取回數(shù)據(jù)塊,不同的地址對應(yīng)于所接收的地址指針)。
在操作s804,可以對多個數(shù)據(jù)塊進行重編以產(chǎn)生重編的數(shù)據(jù)(例如,重復刪除dram存儲器模塊130可以對從哈希表存儲器220所取回的數(shù)據(jù)塊進行重編,以產(chǎn)生重編的數(shù)據(jù),該重編的數(shù)據(jù)可以等價于與所接收的讀取請求相對應(yīng)的數(shù)據(jù)線c)。
在操作s805,重編的數(shù)據(jù)可以從存儲器模塊被發(fā)送到存儲器控制器(例如,重復刪除dram存儲器模塊130可以向存儲器控制120發(fā)送數(shù)據(jù)線c)。
如上所述,可以使用本發(fā)明的實施例的重復刪除存儲器模塊來執(zhí)行數(shù)據(jù)重復刪除。因此,可以降低對存儲器的訪問,并且可以延長dram系統(tǒng)的壽命。
前述為示例實施例的例示,并且不將被解釋為對其進行限制。盡管已經(jīng)描述了一些示例實施例,但是本領(lǐng)域技術(shù)人員將容易地意識到,示例實施例中的多種修改是可能的,而實質(zhì)上不背離示例實施例的新穎的教導和優(yōu)點。因此,所有這樣的修改意欲被包括在如權(quán)利要求書所定義的示例實施例的范圍內(nèi)。在權(quán)利要求書中,裝置加功能語句意欲涵蓋在本文中被描述為執(zhí)行所列舉的功能的結(jié)構(gòu),并且涵蓋不僅結(jié)構(gòu)上的等價形式還有等價的結(jié)構(gòu)。因此,將理解的是,前述為示例實施例的例示而不將被解釋為限于所公開的具體的實施例;并且將理解的是,對所公開的示例實施例的修改以及其他示例實施例意欲被包括在所附權(quán)利要求書的范圍內(nèi)。本發(fā)明構(gòu)思通過所附權(quán)利要求書定義,權(quán)利要求書的等價形式將被包括在其中。