相關(guān)申請的交叉引用
本申請要求2016年3月29日向美國專利商標(biāo)局遞交的美國臨時申請第62/314,918號的優(yōu)先權(quán)和權(quán)益,在此通過引用將其全部內(nèi)容并入。
根據(jù)本發(fā)明的實施例的一個或多個方面涉及數(shù)據(jù)去重(deduplication)。
背景技術(shù):
數(shù)據(jù)去重或數(shù)據(jù)重復(fù)消除,是指縮減存儲器設(shè)備中的冗余數(shù)據(jù)從而降低存儲器設(shè)備的容量成本。在數(shù)據(jù)去重中,數(shù)據(jù)對象/項(如,數(shù)據(jù)文件)被分割成一個或多個數(shù)據(jù)行(line)/區(qū)塊(chunk)/塊(block)。通過將相同數(shù)據(jù)構(gòu)成的多個數(shù)據(jù)塊與單個存儲的數(shù)據(jù)塊關(guān)聯(lián),數(shù)據(jù)塊的重復(fù)拷貝可被計算機存儲器減少或消除,從而減少了存儲器設(shè)備中數(shù)據(jù)的冗余拷貝總量。數(shù)據(jù)冗余拷貝的減少可以增加讀速度和存儲器帶寬,并且可以潛在地導(dǎo)致功率節(jié)省。
因而,如果數(shù)據(jù)的重復(fù)拷貝可被減少為該數(shù)據(jù)的單個拷貝,則雖然使用相同數(shù)量的物理資源,卻增加了存儲器設(shè)備的總可用容量。因為由此引發(fā)的存儲器設(shè)備的節(jié)省允許數(shù)據(jù)重寫計數(shù)的減少,并且因為對已存儲在存儲器中重復(fù)的數(shù)據(jù)塊的寫請求可以被丟棄,所以實施了數(shù)據(jù)去重的存儲器設(shè)備的壽命可以通過有效提高寫耐久性而延長。
傳統(tǒng)的數(shù)據(jù)去重方法可以使用存儲器內(nèi)去重技術(shù)(in-memorydeduplicationtechnology),借此,去重引擎被以cpu為中心的方法與cpu或存儲器控制器(mc)集成。這樣的方法通常實施去重高速緩存(deduplicatedcache,ddc),ddc與存儲器控制器一起操作以使能cpu處理器知曉重復(fù)并且試圖根據(jù)存儲器控制器的控制來提供去重的存儲器操作(如,內(nèi)容查找、引用計數(shù)更新等)。去重的方法還可以實施直接轉(zhuǎn)換緩沖器(directtranslationbuffer,dtb),dtb是用于緩存轉(zhuǎn)換行以通過從關(guān)鍵路移除轉(zhuǎn)換提取來改善數(shù)據(jù)讀取的高速緩存,并且dtb可以類似于后援(lookaside)緩沖器。
去重最常用于硬件驅(qū)動器。然而,對在諸如動態(tài)隨機訪問存儲器(dram)的易失性存儲器的區(qū)域中提供細粒度去重感興趣。
在本背景部分公開的以上信息只為增強對本發(fā)明背景的理解,并且因而它可以包含不構(gòu)成現(xiàn)有技術(shù)的信息。
技術(shù)實現(xiàn)要素:
本公開的實施例的方面針對動態(tài)隨機訪問存儲器(dram)系統(tǒng)中的存儲器去重。
根據(jù)本發(fā)明的實施例,提供了一種存儲器去重的方法,該方法包括:識別多個散列表,每個散列表與散列函數(shù)對應(yīng),并且每個散列表包括物理散列桶,每個物理散列桶包括路并且被配置為存儲數(shù)據(jù);識別多個虛擬桶,每個虛擬桶包括物理散列桶中的一些,并且每個虛擬桶與虛擬桶中的另一個共享物理散列桶中的至少一個;將其上存儲數(shù)據(jù)的物理散列桶的每個識別為被指定給虛擬桶中的單個相應(yīng)虛擬桶;根據(jù)散列函數(shù)中的相應(yīng)一個來散列數(shù)據(jù)行以產(chǎn)生散列值;根據(jù)散列值確定相應(yīng)散列表的虛擬桶的相應(yīng)一個是否有用于數(shù)據(jù)塊的可用空間;當(dāng)虛擬桶中的相應(yīng)一個沒有可用空間時,將數(shù)據(jù)從虛擬桶中的相應(yīng)一個順序地移動到虛擬桶中的鄰近一個,直到虛擬桶中的相應(yīng)一個有用于數(shù)據(jù)塊的空間,以及將數(shù)據(jù)塊存儲在虛擬桶中的相應(yīng)一個。
該方法可以進一步包括更新地址查找表存儲器以改變與被移動的數(shù)據(jù)塊對應(yīng)的一個或多個查找地址。
散列表的每個進一步可以包括引用計數(shù)行、簽名行和跳字行。
該方法可以進一步包括生成用于指示包含數(shù)據(jù)的哪個物理散列桶與哪個虛擬桶對應(yīng)的跳字矢量。
生成跳字矢量可以包括,對于虛擬桶的每個,使用二進制指示符指示虛擬桶的相應(yīng)一個的物理散列桶中的每個是否包含與虛擬桶中的該相應(yīng)一個關(guān)聯(lián)的數(shù)據(jù)塊。
該方法可以進一步包括生成跳字值,該跳字值包括log2(h)比特每物理散列桶,該跳字值用于指示包含與某個虛擬桶對應(yīng)的數(shù)據(jù)的某個物理散列桶,其中h是每個虛擬桶的物理散列桶的數(shù)目。
生成跳字值可以包括生成在表示物理散列桶和虛擬桶的關(guān)聯(lián)對的位置處包括含有數(shù)據(jù)的物理散列桶的每個的準(zhǔn)地址的二維陣列。
散列表可以存儲在易失性存儲器中。
易失性存儲器可以包括動態(tài)隨機訪問存儲器(dram)。
該方法可以進一步包括用物理行id(plid)索引散列表,plid包括log2(h)個比特的虛擬桶利用值字段,并且包括等于虛擬桶的相應(yīng)一個中的數(shù)據(jù)塊的數(shù)目的值,其中h是每個虛擬桶的物理散列桶的數(shù)目。。
該方法可以進一步包括,當(dāng)向虛擬桶的相應(yīng)一個寫入對象時,將虛擬桶利用值字段增加1。
該方法還可以包括當(dāng)相應(yīng)散列表已滿時,將數(shù)據(jù)塊存儲在緩沖存儲器。
根據(jù)本發(fā)明的實施例,提供了用于通過減少存儲器中重復(fù)的數(shù)據(jù)塊來對存儲器進行去重的去重動態(tài)隨機訪問存儲器(dram)存儲器模塊,去重dram存儲器模塊包括:用于存儲被去重的數(shù)據(jù)塊的散列表存儲器,用于存儲與被去重的數(shù)據(jù)塊對應(yīng)的地址的地址查找表存儲器(alutm),和處理器,用于接收讀請求以使能去重dram存儲器模塊從散列表存儲器檢索數(shù)據(jù)塊并導(dǎo)出數(shù)據(jù)塊,并且用于接收寫請求以使能去重dram存儲器模塊將數(shù)據(jù)塊存儲在散列表存儲器。
散列表存儲器可以包括存儲在其中的散列表的三維陣列,散列表的每個包括物理散列桶,每個物理散列桶包括路并且被配置為存儲被去重的數(shù)據(jù)塊。
散列表的每個可以進一步包括多個虛擬桶,每個虛擬桶包括兩個或更多個物理散列桶。
去重dram存儲器模塊可被配置為將去重的數(shù)據(jù)塊在散列表的相應(yīng)一個內(nèi)的虛擬桶的相鄰虛擬桶之間移動。
去重dram存儲器模塊可以在沒有外部提供的命令的情況下執(zhí)行數(shù)據(jù)去重。
去重dram存儲器模塊可以進一步包括,用于在散列表存儲器已滿時存儲數(shù)據(jù)的緩沖存儲器。
根據(jù)本發(fā)明的實施例,提供了用于減少存儲器中重復(fù)的數(shù)據(jù)塊的去重dram存儲器模塊,去重dram存儲器模塊包括:存儲在其中的散列表的三維陣列,散列表的每個包括物理散列桶,每個物理散列桶包括路并且被配置為存儲數(shù)據(jù)塊;處理器;和存儲器,其中該存儲器在其上存儲指令,當(dāng)指令由處理器運行時,導(dǎo)致去重dram存儲器模塊將先前存儲的被去重的數(shù)據(jù)塊在散列表的一個的鄰近虛擬桶之間移動,虛擬桶的每個包括兩個或更多個物理散列桶。
存儲器可以進一步在其上存儲指令,當(dāng)指令由處理器運行時,導(dǎo)致去重dram存儲器模塊將傳入數(shù)據(jù)存儲在從其移出了先前存儲的被去重數(shù)據(jù)塊的虛擬桶的一個中。
附圖說明
參考說明書、權(quán)利要求和附圖,本發(fā)明的這些和其它方面將被領(lǐng)會和理解,其中:
圖1是本發(fā)明的實施例的去重dram系統(tǒng)架構(gòu)的框圖;
圖2是圖1的實施例的去重dram存儲器模塊中存儲器的類型的框圖;
圖3是圖2的實施例的散列表存儲器的散列表框圖;
圖4是根據(jù)本發(fā)明的實施例的多散列表陣列的框圖;
圖5a、5b和5c描述了根據(jù)本發(fā)明的實施例的用于生成跳字(hopword)以將虛擬桶(bucket)與特定物理桶關(guān)聯(lián)的二維陣列;
圖6是根據(jù)本發(fā)明的實施例用于尋址散列表存儲器中的數(shù)據(jù)塊的物理行id(plid)的框圖;
圖7是示出了根據(jù)本發(fā)明的實施例用于使用跳房子(hopscotch)方法向存儲器模塊的多散列表陣列寫入數(shù)據(jù)的過程的流程圖;以及
圖8是示出了根據(jù)本發(fā)明的實施例用于從存儲器模塊的多散列表陣列讀取數(shù)據(jù)的過程的流程圖。
具體實施方式
通過引用實施例的以下具體描述和附圖,可以更容易理解發(fā)明構(gòu)思的特征和實現(xiàn)該發(fā)明構(gòu)思的方法。此后,示例實施例將通過參考附圖更具體描述,附圖中相同的附圖標(biāo)記始終指代相同的元素。然而,本發(fā)明可以以各種不同形式具體化,并且不應(yīng)被解釋為受限于只在本文示出的實施例。而是,這些實施例被提供為示例以便本公開將是全面和完整的,并且將向本領(lǐng)域技術(shù)人員完全地傳達本發(fā)明的方面和特征。因而,對于本領(lǐng)域普通技術(shù)人員完全理解本發(fā)明的方面和特征不必要的過程、元素和技術(shù)可以不描述。除非另有說明,貫穿附圖和書面描述全文,相同的附圖標(biāo)記指代相同元素,并且因而其描述將不被重復(fù)。附圖中,為了清楚,可以擴大元素、層和區(qū)域的相對大小。
將理解,盡管術(shù)語“第一”、“第二”、“第三”等在本文可以用來描述各種元素、組件、區(qū)域、層和/或部分,但是這些元素、組件、區(qū)域、層和/或部分不應(yīng)受這些術(shù)語的限制。這些術(shù)語被用來區(qū)分一個元素、組件、區(qū)域、層或部分與另一元素、組件、區(qū)域、層或部分。因而,在不脫離本發(fā)明的精神和范圍的情況下,以下描述的第一元素、組件、區(qū)域、層或部分可以稱為第二元素、組件、區(qū)域、層或部分。
為容易解釋,空間上相對的術(shù)語,諸如“下面”、“之下”、“低于”、“以下”、“之上”、“上面”等可在本文用以描述如圖所示的一個元素或特征與其它(多個)元素或(多個)特征的關(guān)系。將理解,空間上相對的術(shù)語意圖包含使用或操作中的設(shè)備的除了圖所述方向之外的不同方向。例如,如果圖中的設(shè)備被翻轉(zhuǎn),則被描述為其它元素或特征“之下”或“下面”或“以下”的元素之后將被標(biāo)定方向在其它元素或特征“之上”。因而,示例術(shù)語“之下”和“以下”可以包含之上和之下二者的方向。設(shè)備可以被另外標(biāo)定方向(如,旋轉(zhuǎn)90度或在其它方向上)并且本文使用的在空間上相對的描述符應(yīng)當(dāng)被相應(yīng)地解釋。
將理解,當(dāng)元素、層、區(qū)域或組件被稱為在另一元素、層、區(qū)域或組件“上”或與它們“連接”或“耦接”時,它可以直接在另一元素、層、區(qū)域或組件上或與它們直接連接或耦接,或者可以存在一個或多個介于其間的元素、層、區(qū)域或組件。并且,還將理解,當(dāng)元素或?qū)颖环Q為在兩元素或?qū)印爸g”時,它可以是該兩元素或?qū)又g唯一的元素或?qū)?,或者也可以存在一個或多個介入其間的元素或?qū)印?/p>
以下示例中,x軸、y軸和z軸不限于直角坐標(biāo)系的三個軸,并且可被更廣義地解釋。例如,x軸、y軸和z軸可以彼此垂直,或可以表示彼此不垂直的不同方向。
本文使用的術(shù)語是只用于描述具體實施例的目的并且不意圖限制本發(fā)明。如本文使用的,單數(shù)形式“一”和“一個”意圖也包括復(fù)數(shù)形式,除非上下文清楚地另有所指。將進一步理解,術(shù)語“包含”和“包括”,當(dāng)在本說明書中使用時,指明所述特征、整數(shù)、步驟、操作、元素和/或組件的存在,但是不排除一個或多個其它特征、整數(shù)、步驟、操作、元素、組件和/或其組合的存在或附加。如本文使用的,術(shù)語“和/或”包括關(guān)聯(lián)列表項的一個或多個的任意和所有組合。諸如“至少其中之一”的表述,當(dāng)在元素列表之后時,修飾整個元素列表并且不修飾該列表的單個元素。
如本文使用的,術(shù)語“基本上”、“大約”和類似術(shù)語被用作近似的術(shù)語并且不作為程度的術(shù)語,并且意圖說明將被本領(lǐng)域普通技術(shù)人員識別的測量或計算值的固有偏差。進一步,當(dāng)描述本發(fā)明的實施例時“可以”的使用指代“本發(fā)明的一個或多個實施例”。如本文使用的,術(shù)語“使用”可被認為與術(shù)語“利用”同義。并且,術(shù)語“示范性”意圖指代示例或闡述。
當(dāng)某一實施例可以被不同地實現(xiàn)時,具體過程順序可以不同于所述順序執(zhí)行。例如,兩個連續(xù)描述的過程可以基本上同時執(zhí)行或以相反于所述順序的順序執(zhí)行。
本文所述根據(jù)本發(fā)明的實施例的電子或電動設(shè)備和/或任意其它相關(guān)設(shè)備或組件可以利用任意合適的硬件、固件(如,專用集成電路)、軟件、或軟件、固件和硬件的組合實現(xiàn)。例如,這些設(shè)備的各種組件可以形成在一個集成電路(ic)芯片上或分開的ic芯片上。進一步,這些設(shè)備的各種組件可以實現(xiàn)在柔性印刷電路膜、帶載封裝(tapecarrierpackage,tcp)、印刷電路板(pcb)上,或形成在一個基底上。進一步,這些設(shè)備的各種組件可以是進程或線程,其運行在一個或多個計算設(shè)備中的一個或多個處理器上、運行計算機程序指令并且與其它系統(tǒng)組件交互,用以執(zhí)行本文所述的各種功能。計算機程序指令存儲在存儲器中,存儲器可以使用諸如,例如隨機訪問存儲器(ram)的標(biāo)準(zhǔn)存儲器設(shè)備在計算設(shè)備中實現(xiàn)。計算機程序指令還可以存儲在其它非暫態(tài)計算機可讀介質(zhì)中,諸如,例如cd-rom、快閃驅(qū)動器等。并且,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)意識到,在不脫離本發(fā)明的示例實施例的精神和范圍的情況下,各種計算設(shè)備的功能可被組合或集成到單個計算設(shè)備,或者特定計算設(shè)備的功能可分布于一個或多個其它計算設(shè)備。
除非另有定義,本文使用的所有術(shù)語(包括技術(shù)性和科學(xué)性術(shù)語)具有和本發(fā)明所屬領(lǐng)域普通技術(shù)人員通常理解的相同意思。將進一步理解,諸如定義在常用字典中的那些術(shù)語應(yīng)當(dāng)被解釋為具有和相關(guān)領(lǐng)域和/或本說明書的語境中它們的意思一致的意思,并且不應(yīng)以理想化或過于正式的意思解釋,除非本文明確地這樣定義。
圖1是本發(fā)明的實施例的去重dram系統(tǒng)架構(gòu)的框圖。
參考圖1,為起到計算機存儲器的作用,去重存儲器執(zhí)行被稱為“轉(zhuǎn)換”的功能以記錄原始數(shù)據(jù)的內(nèi)容和已被去重的唯一存儲塊集之間的關(guān)系,記錄的關(guān)系以壓縮形式存儲。例如,原始數(shù)據(jù)的地址可以存儲在查找表中。
通常,cpu的處理器110缺少到物理存儲器(如,去重dram存儲器模塊130)的直接訪問,而物理存儲器是由存儲器控制器120按照存儲器行(memoryline)的陣列來管理。以cpu為中心的去重系統(tǒng)試圖在數(shù)據(jù)到達存儲器系統(tǒng)前將該數(shù)據(jù)高速緩存在cpu內(nèi)部。
本實施例的去重dram系統(tǒng)架構(gòu)100使用以存儲器為中心的去重,而不是傳統(tǒng)的以cpu為中心的去重,這意味著去重dram存儲器模塊130可以在缺少來自處理器110的命令的情況下執(zhí)行存儲器去重。去重dram系統(tǒng)架構(gòu)100還使用存儲在去重dram存儲器模塊130中的可配置去重算法以增加存儲器的容量效益,從而提供大容量存儲器解決方案。即,不像以cpu為中心的去重,本實施例的去重dram系統(tǒng)架構(gòu)100具有包括在ram模塊(如,去重dram存儲器模塊130)內(nèi)的去重智能(deduplicationintelligence)的全部。因而,去重能在去重dram存儲器模塊130內(nèi)不為cpu模塊140所知地執(zhí)行,從而允許去重dram存儲器模塊130容量增加。即,因為該去重是細粒度的并且在易失性存儲器內(nèi)(如,在去重dram存儲器模塊130內(nèi))操作,所以本實施例的去重智能的全部都出現(xiàn)在去重dram存儲器模塊130自身內(nèi),而cpu中的核模塊140可以不知道在去重dram存儲器模塊130內(nèi)執(zhí)行的去重操作的細節(jié)。
應(yīng)當(dāng)理解,盡管本實施例描述使用dram作為去重dram存儲器模塊130,但其它類型的存儲器可以在本發(fā)明的其它實施例中使用。更進一步,本實施例的去重dram系統(tǒng)架構(gòu)100能夠支持與多個類型存儲器接口。即,本實施例的去重dram存儲器模塊130能夠經(jīng)存儲器控制器120(如,雙倍數(shù)據(jù)率第4代同步動態(tài)隨機訪問存儲器(ddr4)、作為用于連接計算機和一個或多個外圍設(shè)備的串行擴展總線標(biāo)準(zhǔn)的外圍組件高速互連(pcie)、ddr-t和kti)與多個不同類型存儲器接口關(guān)聯(lián)。因而,應(yīng)當(dāng)注意,不同架構(gòu)可被用來將去重dram存儲器模塊130集成到去重dram系統(tǒng)架構(gòu)100中。
并且,盡管可以對現(xiàn)有dram存儲器模塊做出一些變化以實現(xiàn)本實施例(如,驅(qū)動器升級),但軟件實現(xiàn)允許本實施例的去重dram系統(tǒng)架構(gòu)100的使用而無需對操作系統(tǒng)/cpu模塊140或處理器110做出物理改變。
本實施例的去重dram系統(tǒng)架構(gòu)100可以針對dram智能協(xié)議在去重dram存儲器模塊130上實現(xiàn)片上系統(tǒng)(soc),dram智能協(xié)議諸如去重、內(nèi)容可尋址性、安全性、存儲器內(nèi)處理器(processor-in-memory,pim)、行地址選通(rowaddressstrobe,ras)等,其中ras是被發(fā)送到dram的信號,其告知dram關(guān)聯(lián)的地址是行地址,借此,dram中的數(shù)據(jù)比特被存儲在由列地址和行地址的交叉點定位的單元內(nèi)。
去重dram系統(tǒng)架構(gòu)100還可以有智能系統(tǒng)軟件,其導(dǎo)致處理器110結(jié)合存儲器控制器120允許虛擬密度管理、智能數(shù)據(jù)放置和dram智能應(yīng)用編程接口(api)等。
去重dram存儲器模塊130可以進一步具有3dsdram組件,諸如多個外形因子的高容量dram存儲器模塊(如,雙列直插式存儲器模塊(dimm)、2.5in、全高半長(fhhl)、半高半長(hhhl)、全高全長(fhfl)等)。
因而,通過使用本實施例的去重dram系統(tǒng)架構(gòu)100提供以存儲器為中心的去重系統(tǒng),去重的寫入過程可以在存儲器接口處直接執(zhí)行,從而增加去重dram存儲器模塊130的容量。
圖2是圖1的實施例的去重dram存儲器模塊中的存儲器類型的框圖,并且圖3是圖2的實施例的散列表存儲器的散列表的框圖。
參考圖2,本發(fā)明的實施例的去重dram存儲器模塊可以具有去重算法架構(gòu),其中去重dram存儲器模塊130內(nèi)部的存儲器空間被歸類為3個不同區(qū)域。3個不同區(qū)域包括用于指示存儲的被去重數(shù)據(jù)塊位置的地址查找表(ltu)存儲器(alutm)210、用于存儲被去重數(shù)據(jù)塊的散列表存儲器220、和用于在散列表存儲器的散列表的散列路(hashway)已滿時存儲數(shù)據(jù)的溢出/緩沖存儲器230。
當(dāng)數(shù)據(jù)塊要被輸入去重dram存儲器模塊130時,去重算法可以操作以確定該數(shù)據(jù)塊是否是在alutm210中缺少任何對應(yīng)地址的新的、之前未存儲的數(shù)據(jù)塊。為執(zhí)行該操作,去重算法將訪問alutm210。為確保相同數(shù)據(jù)塊僅被存儲為單個條目,alutm210內(nèi)的指針(如,物理行id(plid),其進一步結(jié)合圖5在下文描述)指示相同數(shù)據(jù)塊被存儲在散列表存儲器220中的哪個位置。即,alutm210是用于將散列表內(nèi)的位置(如,地址)與查找地址映射指針(如,plid)關(guān)聯(lián)的儲存設(shè)備。因而,如果數(shù)據(jù)塊先前已被存儲在散列表存儲器220中,則alutm210內(nèi)的指針能夠指向其中存儲了相同數(shù)據(jù)塊的散列表存儲器220的地址,從而消除了對于存儲該數(shù)據(jù)塊的重復(fù)拷貝的需要,從而增加了去重dram存儲器模塊130的存儲容量。
參考圖3,存儲器去重可以使用相對高效但簡單的多路散列表/散列陣列380,以確保高程度的去重,并且因而,確保去重dram存儲器模塊130的大存儲器容量。本實施例的去重dram存儲器模塊130的散列表存儲器220是一個或多個散列表380所處的位置,并且被用于確定數(shù)據(jù)塊是否是唯一的。散列表380被認為是包含散列桶310(排)和散列路320(列)的二維陣列。即,本實施例的散列表380包括m排散列桶310,每個散列桶310包含n列指示散列桶310容量的數(shù)據(jù)行/槽/條目/散列路320(m和n是整數(shù))。
數(shù)據(jù)塊被存儲在散列表存儲器220的散列路320中,并且alutm210中的地址指針可以存儲指示與特定數(shù)據(jù)塊關(guān)聯(lián)的特定散列桶310和特定散列路320的值。因而,地址(如,64比特地址)可被索引到alutm210中,并且由此,存儲與該地址對應(yīng)的數(shù)據(jù)塊的散列表380的散列桶310的關(guān)聯(lián)散列路320可被確定。
因而,在寫入過程(如,64字節(jié)數(shù)據(jù)寫入)期間,當(dāng)接收到寫請求(如,記錄包含一個或多個數(shù)據(jù)塊的傳入數(shù)據(jù)的請求)時,使用散列函數(shù)/散列算法為傳入數(shù)據(jù)計算散列值(即,傳入數(shù)據(jù)被“散列”)以便相應(yīng)散列桶310和散列路320可被確定。因而,散列值指示該數(shù)據(jù)塊要被放置在哪里,或者,當(dāng)該數(shù)據(jù)塊(如,64字節(jié)數(shù)據(jù)塊)是重復(fù)的時,散列值指示該數(shù)據(jù)塊已存儲在散列表存儲器220的哪個位置。當(dāng)數(shù)據(jù)內(nèi)容被添加到存儲器時,m個散列桶310中的一些可能最先達到容量。因而,去重dram存儲器模塊130包括溢出預(yù)備(overflowprovision),其使用緩沖存儲器230來存儲不能被輸入散列表存儲器220的數(shù)據(jù)塊。此后,原始查找地址可被檢索,并且alutm210可以根據(jù)從對所述傳入數(shù)據(jù)進行散列而計算出的查找地址被更新。
緩沖存儲器230可以在嘗試寫入過程期間當(dāng)確定所有散列路320已滿時使用。即,當(dāng)散列表380填滿時,數(shù)據(jù)可被放置在緩沖存儲器230的非去重溢出區(qū)域,從而降低去重程度。因而,緩沖存儲器230本質(zhì)上是保留的、標(biāo)準(zhǔn)的、簡單的溢出存儲區(qū)域,其充當(dāng)用于實現(xiàn)虛擬密度過度供應(yīng)管理溢出的soc存儲器緩沖/高速緩存。一旦數(shù)據(jù)被放置在緩沖存儲器230中,數(shù)據(jù)就不再是散列的并且不能再被去重。
如果計算機應(yīng)用多次試圖向存儲器存儲相同序列值,那么存儲在alutm210中轉(zhuǎn)換陣列中的多個條目指代數(shù)據(jù)塊存儲在散列表存儲器220中的同一地址,其中alutm210中的條目小于原始唯一數(shù)據(jù)塊,從而允許高效壓縮被實現(xiàn)。
m個散列桶310的每個可以進一步包括引用/頻率計數(shù)行340和簽名行330,引用/頻率計數(shù)行340包括用于指示散列桶310的相應(yīng)散列路320的唯一標(biāo)識符。對于每個散列桶310,相應(yīng)簽名行330包含指示空行的0或用于內(nèi)容查找最優(yōu)化的非0次級散列值中的任一者。因而,對于內(nèi)容查找,通常要么不存在要求基于簽名行中0條目分配的空行的簽名匹配,要么存在單個簽名匹配以便數(shù)據(jù)行的后續(xù)讀取和內(nèi)容的比較確認重復(fù)的存在。m個散列桶310的每個可以進一步包括跳字行(在圖中沒有相應(yīng)附圖標(biāo)記),其將參考圖5a、5b和5c在下文進一步描述。
物理行id(plid)350可被用來將數(shù)據(jù)索引到散列表380。plid350可被用來識別存儲器行,存儲器行可被劃分到alutm210、散列表存儲器220或緩沖存儲器230中的一個。每個存儲器行可被稱為以下二者之一:用于在散列表380中存儲唯一內(nèi)容的數(shù)據(jù)行,或用于存儲若干plid350和用于提供從處理器總線地址到散列表380中被去重的數(shù)據(jù)塊的映射的轉(zhuǎn)換行。即,總線地址標(biāo)識轉(zhuǎn)換行,并且進一步識別轉(zhuǎn)換行中包含相關(guān)plid350的條目,相關(guān)plid350進而指定特定的數(shù)據(jù)行。因而,plid350可被實現(xiàn)為包括溢出標(biāo)志,并且可以包括用于指示特定相應(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),并且基本上不同的較少量輸出數(shù)據(jù)(如,散列值)由散列函數(shù)h(x)生成并且輸出以存儲在散列表380中。因而,散列函數(shù)h(x)使能壓縮,因為不同數(shù)據(jù)集會偶爾散列為同一散列值。
在向去重存儲器寫入中,當(dāng)接收到與數(shù)據(jù)文件對應(yīng)的寫請求時,去重存儲器首先執(zhí)行副本搜索以確定相同/重復(fù)的數(shù)據(jù)塊是否已存儲在散列表380中。去重存儲器然后更新alutm210和散列表存儲器220中的條目。例如,引用/頻率計數(shù)行340可以通過更新散列表存儲器220中原始查找地址的頻率計數(shù)(即,減小1)來更新,并且其中當(dāng)頻率計數(shù)到達0時相應(yīng)數(shù)據(jù)塊被刪除。更進一步,新plid350可以在alutm210中生成。
在可被稱為內(nèi)容查找的副本搜索期間,去重dram存儲器模塊130尋找意圖被寫入的數(shù)據(jù)文件或其部分的預(yù)先存在的實例。當(dāng)存在散列表存儲器220中存儲的數(shù)據(jù)的預(yù)先存在的實例時,副本搜索返回指向相應(yīng)數(shù)據(jù)行的plid350。當(dāng)未發(fā)現(xiàn)數(shù)據(jù)的預(yù)先存在的實例時,則通過分配散列表380中的空間、在其中寫內(nèi)容并且返回新plid350,為相應(yīng)數(shù)據(jù)塊創(chuàng)建新數(shù)據(jù)行。該內(nèi)容可通過在alutm210中以總線地址所確定的偏移量存儲該plid350而被記錄。
為向散列表380插入數(shù)據(jù)行“c”,c的相應(yīng)散列函數(shù)“h(c)”可按數(shù)學(xué)運算來計算。一旦為數(shù)據(jù)行c計算了散列函數(shù),散列表的行t(h(c))就可以通過內(nèi)容查找操作來檢查以了解是否有足夠可用空間允許數(shù)據(jù)行c的插入(或了解數(shù)據(jù)行c的副本是否已在散列表380中)。
如所述,散列表380的每個散列桶310額外地包括簽名行330和引用/頻率計數(shù)行340,由于事實是簽名行330的簽名332和引用/頻率計數(shù)行340的引用計數(shù)342可被設(shè)計成足夠小以將若干量打包到每個散列桶310中,所以簽名行330和引用計數(shù)行340的每個只占用單個散列路320。即,在散列表380中,散列表380的一整列可被指定為分別屬于散列桶310的簽名行330,并且一整列可被指定為分別屬于散列桶310的引用/頻率計數(shù)行340。
當(dāng)諸如數(shù)據(jù)行“c”的實數(shù)據(jù)塊被添加到散列表380時,散列表380開始被數(shù)據(jù)填充,該數(shù)據(jù)之后可以通過將存儲在alutm210中的相應(yīng)plid350和每個單獨的被去重的數(shù)據(jù)行的散列表380內(nèi)的地址匹配而被訪問。散列表380內(nèi)的地址可以通過識別數(shù)據(jù)所在的特定散列桶310和特定散列路320(如,識別散列表380的排和列)而被識別。因而,對于存儲在散列表380中的每個數(shù)據(jù)塊,存在由存儲在alutm210中并且指向數(shù)據(jù)塊的位置的相應(yīng)plid350標(biāo)識的一個或多個相應(yīng)地址。一旦散列表380被填滿數(shù)據(jù),新產(chǎn)生的數(shù)據(jù)就被放置在非去重溢出區(qū)域/緩沖存儲器230中,從而降低了去重程度。
在從去重存儲器讀取時,去重存儲器返回來自散列表存儲器220的數(shù)據(jù)行或來自緩沖存儲器230的溢出行二者中任一個的拷貝。例如,當(dāng)存儲的數(shù)據(jù)要被中讀取時,當(dāng)接收到讀請求時,使用存儲在alutm210中的plid350查找散列表380的相應(yīng)地址。然后,每個地址中的相應(yīng)塊被檢索和重組。
圖4是根據(jù)本發(fā)明的實施例的多散列表陣列的框圖。
參考圖4,根據(jù)本發(fā)明的實施例的去重dram系統(tǒng)架構(gòu)使用包含多個散列表(mht)480的散列表陣列400,多個散列表480的每個包括m個散列桶410,每個散列桶410包括n個散列路420。盡管,本實施例將散列表480和散列桶410描述為就它們的維度而言是統(tǒng)一的(如,m和n被描述為整數(shù)),但其它實施例中,同一多散列表陣列中的不同散列表可以有不同數(shù)目的散列桶,并且類似地,該多散列表陣列內(nèi)或甚至同一散列表內(nèi)的不同散列桶可以有不同數(shù)目的散列路。更進一步,盡管多個散列表480被共同利用,但不同散列表480在某些方面彼此獨立(如,不同散列表480可以有不同的各自的散列函數(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)生log2(m)-比特的散列,并且因為每個物理桶410包含n個散列路420,所以該三維(3d)散列表陣列(如,多個散列表的陣列)的容量是mxnxk。
每個散列表480可以與單個散列函數(shù)對應(yīng),單個散列函數(shù)確定數(shù)據(jù)如何被索引。通過對要被寫入的傳入數(shù)據(jù)進行散列,計算結(jié)果(如,包括查找地址和鍵的散列值)可以與鍵和值比較,并且如果該值匹配,則相應(yīng)散列桶410中的引用/頻率計數(shù)行340增加,從而指示alutm210中另外的plid350指向該特定行。
不像傳統(tǒng)散列表,本實施例的多個散列表480包括多個虛擬散列桶/虛擬桶460,虛擬桶460由多個物理散列桶/物理桶410組成。此后,術(shù)語“物理桶”將指代先前討論的散列桶310,并且將被用來區(qū)分先前討論的散列桶310和虛擬桶460。
每個虛擬桶460可以包括相應(yīng)散列表480的m個物理桶410中的h個物理桶,h是小于m的整數(shù)。然而,應(yīng)當(dāng)注意,同一散列表480中的虛擬桶460中的不同虛擬桶可以共享一個或多個物理桶410。如以下將描述的,通過使用根據(jù)本發(fā)明的實施例的虛擬桶460,第四維度被添加到三維的多散列表陣列。因而,可以在安排和放置數(shù)據(jù)時提供更大的靈活性,從而提高去重dram系統(tǒng)的效率并且增加去重dram系統(tǒng)架構(gòu)的壓縮比。
由于存儲在散列表480的一個中的數(shù)據(jù)塊可以在相應(yīng)虛擬桶460內(nèi)移動,或者移動到不同物理桶410,以釋放被其它虛擬桶460共享的其它物理桶410,所以本實施例使用虛擬桶460提高數(shù)據(jù)放置靈活性的程度。通過釋放散列表480內(nèi)的空間,去重可以通過移除廢棄/重復(fù)的數(shù)據(jù)來實現(xiàn)。即,通過根據(jù)本發(fā)明的實施例的虛擬桶460的使用,不存在使用散列函數(shù)將數(shù)據(jù)行進行散列所導(dǎo)致的對于受限的相應(yīng)位置的嚴格限制,并且數(shù)據(jù)能夠被放置在“附近位置”的散列桶410,“附近位置”散列桶410指代在包括最初預(yù)期的(但未占用的)物理散列桶410的同一虛擬桶460內(nèi)的物理桶410。
作為示例,內(nèi)容(如,數(shù)據(jù)行c)要被放置到k個散列表t1(h1(c)),t2(h2(c)),…,tk(hk(c))中的一個的物理桶410的一個中。如果數(shù)據(jù)行c要被放置到t1(h1(c))中,代替要求數(shù)據(jù)行c要被放置在由t1(h1(c))表示的物理桶410中,那么本實施例允許大于單個物理桶410并且包括由t1(h1(c))表示的物理桶410、而且包含總計h個物理桶410的虛擬桶460。即,虛擬桶460包含在散列表480內(nèi)排列的h個鄰近或相鄰的物理桶410的聚集,包括t1(h1(c)),t1(h1(c)+1),t1(h1(c)+2),…,t1(h1(c)+h-1)。
因而,虛擬桶460允許數(shù)據(jù)塊在散列表480內(nèi)移動或者釋放空間用于將來的寫操作。允許先前被寫入散列表480的數(shù)據(jù)塊(在包含散列表480的物理桶410的虛擬桶460內(nèi))移動的本實施例的操作,可被稱為跳房子(hopscotch)。如下所述,可以改進使用多個散列表480用于存儲器去重的跳房子操作。
首先,作為散列表480的散列函數(shù)的結(jié)果,去重dram存儲器模塊130可以試圖將數(shù)據(jù)行c插入到散列表480。然而,有時候,作為相同的散列函數(shù)的結(jié)果,不同數(shù)據(jù)行可能在之前被輸入散列表480。即,不同數(shù)據(jù)行,盡管不同,但作為散列函數(shù)的結(jié)果,其可被指向散列表480內(nèi)的同一位置。為確定數(shù)據(jù)行c應(yīng)被插入到哪里,該操作可以最先在被表示為t(h(c))的物理桶410處或其后面尋找第一可用物理桶410。
因而,在確定向哪里寫入數(shù)據(jù)行c時,因為被表示為t(h(c))的最初預(yù)期的物理桶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),那么數(shù)據(jù)行c可被放置到相應(yīng)虛擬桶460。類似地,如果被表示為t(h(c))的物理桶410是相應(yīng)虛擬桶460的第二物理桶,那么如果f小于h-1,則數(shù)據(jù)行c可被放置到相應(yīng)虛擬桶460。
然而,并且假定相應(yīng)虛擬桶460的第一物理桶410是預(yù)期的物理桶410,如果f大于或等于h(即,沒有數(shù)據(jù)行c可以適合放入的虛擬桶460的物理桶410),盡管數(shù)據(jù)行c不適合放入其虛擬桶460,但該操作可以試圖用以下方式在虛擬桶460中創(chuàng)建空的空間。例如,本發(fā)明的實施例的去重dram存儲器模塊130可以查看物理桶410,從由t(h(c)+f-h)表示的物理桶410開始、然后是由t(h(c)+f-h+1)表示的物理桶410等等,直到確定由t(h(c)+f-1)表示的物理桶410其中是否包括數(shù)據(jù)為止(如,可以從頭至尾掃描虛擬桶460)。去重dram存儲器模塊130可以隨后確定包含在從t(h(c)+f-h)到t(h(c)+f-1)的物理桶410內(nèi)的任何數(shù)據(jù)對象是否可被放置到空的空間t(h(c)+f)。即,去重dram存儲器模塊130可以確定從t(h(c)+f-h)到t(h(c)+f-1)的物理桶中的任何物理桶是否與物理桶t(h(c)+f)位于公共虛擬桶460中,從而允許包含在其中的數(shù)據(jù)被移動。去重dram存儲器模塊130然后可以將最早找到的這些數(shù)據(jù)對象放置在空的空間中,從而在由t(h(c)+e)(e是小于f的整數(shù))表示的物理桶410中創(chuàng)建新的空的空間。該過程可被重復(fù)直到e小于h(如,數(shù)據(jù)可以以級聯(lián)方式在散列表內(nèi)移動),從而釋放足夠的空間以允許將數(shù)據(jù)行c放置在相應(yīng)虛擬桶460中。
例如,并且參考圖5b,本示例中,將指定物理桶pb2作為預(yù)期的物理桶410。因為預(yù)期的物理桶pb2與虛擬桶vb1關(guān)聯(lián)地被占用,所以可以從頭至尾(如,從物理桶pb2到物理桶pb5)掃描虛擬桶vb2。因為物理桶pb3、pb4和pb5也被占用,所以第一可用物理桶410是物理桶pb6(即,f等于4,并且因而大于或等于h,并且第一可用物理桶410不在相應(yīng)虛擬桶vb2中)。因而,物理桶pb5中的數(shù)據(jù)可被移動到物理桶pb6,從而釋放虛擬桶vb2中的空間,以便數(shù)據(jù)行c可被放置在相應(yīng)虛擬桶vb2中(物理桶pb5中)。然而,如果預(yù)期的物理桶是pb1(即,相應(yīng)虛擬桶460是vb1),則該過程可被重復(fù)以便物理桶pb4中的數(shù)據(jù)可從虛擬桶vb1向鄰近虛擬桶vb2移動,即,移動到最新釋放的物理桶pb5的空間。此后,數(shù)據(jù)行c可被寫入與預(yù)期物理桶pb1相應(yīng)的虛擬桶vb1的物理桶pb4中。
因而,由于不同虛擬桶460共同擁有某些物理桶410,其可被認為是不同虛擬桶460的重疊,所以數(shù)據(jù)可以從一個虛擬桶460向另一虛擬桶460移動,從而為最初的散列表410創(chuàng)建空間。
另一實施例中,在寫入過程期間,當(dāng)接收到向散列表的陣列400寫入數(shù)據(jù)塊的請求時,去重dram存儲器模塊130可以查找每個散列表數(shù)據(jù)的整個虛擬桶460以檢查現(xiàn)有條目是否已在散列表480的一個中。如果第一預(yù)期散列表480已滿,并且如果未在第一預(yù)期散列表480中找到該數(shù)據(jù)塊(即,每個物理桶410的每條散列路420被不同數(shù)據(jù)塊占用),則去重dram存儲器模塊130可以試圖將數(shù)據(jù)寫入散列表陣列400的另一散列表480中。然而,如果多散列表陣列400的所有散列表480已滿,則該數(shù)據(jù)塊將“溢出”到緩沖存儲器230。這樣的實施例中,去重dram存儲器模塊130可以不允許散列表陣列400內(nèi)數(shù)據(jù)的移動。
圖5a、5b和5c描述根據(jù)本發(fā)明的實施例用于生成跳字(hopword)以將虛擬桶與特定物理桶關(guān)聯(lián)的二維陣列。
參考圖5a、5b和5c,根據(jù)本實施例,各種虛擬桶460可以通過使用跳字值591或跳字矢量592二者中的任一個并且通過使用虛擬桶利用值而與它們的相應(yīng)物理桶410關(guān)聯(lián),從而高效追蹤數(shù)據(jù)移動。因為每個占用的物理桶410可以只與單個虛擬桶460對應(yīng),所以跳字值591或跳字矢量592可被用來追蹤哪個虛擬桶460與每個占用的物理桶410對應(yīng)。
本示例中,4個虛擬桶vb0、vb1、vb2和vb3每個都具有來自物理桶pb0、pb1、pb2、pb3、pb4、pb5和pb6的組中的4個相鄰物理桶的不同集(即,h等于4)。
例如,參考圖5a和圖5b,跳字矢量592可以通過創(chuàng)建包含物理桶位置和虛擬桶位置(如,準(zhǔn)地址)的二維陣列并且通過在包含用于每個虛擬桶460的數(shù)據(jù)的每個物理桶410中放置1(如,二進制指示符)來確定,注意到,至多單個1可以在與物理桶410對應(yīng)的任意列中。因而,跳字矢量592可以包括1和0的陣列,其可被用來追蹤每個虛擬桶460對物理桶的使用。本示例中,物理桶pb0、pb1和pb3被第一虛擬桶vb0占用,物理桶pb2和pb4被第二虛擬桶vb1占用,只有物理桶pb5被第三虛擬桶vb2占用,并且第四虛擬桶vb3是未占用的。
類似地,并且參考圖5c,跳字值591可以基于占用的物理桶410、通過知道哪個虛擬桶460與之對應(yīng)而創(chuàng)建。跳字值591可以是log2(h)比特長(h是每個虛擬桶460的物理桶410的數(shù)目)。
跳字矢量592或跳字值591的信息可存儲在用于每個散列桶410的跳字行(圖4中沒有相應(yīng)的附圖標(biāo)記)中,以便物理桶410和虛擬桶460之間的關(guān)系可在存儲器中被索引。
圖6是根據(jù)本發(fā)明的實施例用于尋址散列表存儲器中的數(shù)據(jù)塊的物理行id(plid)的框圖。
參考圖6,根據(jù)本發(fā)明的實施例,提供了修改的plid650。本發(fā)明的實施例的plid650包括分別指示地址、偏移、表的索引、散列和槽/路(slot/way)的多個比特、以及與特定虛擬桶460配對以追蹤在虛擬桶460之間移動的對象的鍵651。因而,如果鍵651與特定虛擬桶460匹配,則該特定虛擬桶460可以具有被寫入其中的數(shù)據(jù)對象。
然而,在另一實施例中,plid650用虛擬桶利用值字段652(如,虛擬桶索引)替換鍵651,虛擬桶利用值字段652包含log2(h)個比特(如,高度為16個物理桶的虛擬桶將與plid650中的4比特虛擬桶利用值字段對應(yīng))。虛擬桶利用值字段652指示哪個虛擬桶460與每個占用的物理桶410對應(yīng)。因而,當(dāng)向虛擬桶460寫入數(shù)據(jù)對象時,已存在于虛擬桶460中的對象的數(shù)目可被計算,并且值p,其等于虛擬桶中已存在的條目的數(shù)量加上1,可被寫為虛擬桶利用值652。通過使用plid650中的虛擬桶利用值652,plid650的存儲開銷可被減少。
圖7是示出了根據(jù)本發(fā)明的實施例用于使用跳房子(hopscotch)方法向存儲器模塊的多散列表陣列寫入數(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處,通過用包括log2(h)個比特的虛擬桶利用值字段并且包括等于虛擬桶中的相應(yīng)一個中的數(shù)據(jù)塊的數(shù)目的值的物理行id(plid)來索引散列表,并且通過當(dāng)對象被寫入所述虛擬桶中的相應(yīng)一個時將虛擬桶利用值字段增加1,可以識別多個虛擬桶(如,通過用如圖6所示的包括虛擬桶利用值字段652并且包括等于虛擬桶460中的相應(yīng)一個中的數(shù)據(jù)塊的數(shù)目的值的物理行id(plid)650來索引散列表480,可以識別虛擬桶460,其中當(dāng)向虛擬桶460中的相應(yīng)一個寫入對象或數(shù)據(jù)塊時,可以將虛擬桶利用值字段652增加1)。
操作s703處,其上存儲了數(shù)據(jù)的物理散列桶的每個可被識別為被指定給虛擬桶中的單個相應(yīng)虛擬桶(如,去重dram存儲器模塊130可以將其上存儲了數(shù)據(jù)的物理散列桶410(pb0、pb1、pb2、pb3、pb4和pb5)識別為被指定給虛擬桶460(vb0、vb1和vb2)中的單個相應(yīng)虛擬桶,如圖5b和圖5c所示)。操作s703a處,可以通過生成用于指示包含數(shù)據(jù)的哪個物理散列桶對應(yīng)哪個虛擬桶的跳字矢量或跳字值來識別物理散列桶(如,去重dram存儲器模塊130可以生成用于指示包含數(shù)據(jù)的哪個物理散列桶410與哪個虛擬桶460對應(yīng)的跳字矢量592或跳字值591,如圖5b和圖5c所示)。
操作s704處,數(shù)據(jù)行可以根據(jù)散列函數(shù)中的相應(yīng)一個被散列以產(chǎn)生散列值(如,去重dram存儲器模塊130可以從存儲器控制器120接收與數(shù)據(jù)行c對應(yīng)的寫請求,并且可以根據(jù)散列函數(shù)h(x)中的相應(yīng)一個來散列傳入的數(shù)據(jù)以產(chǎn)生散列值)。
操作s705處,可以確定,根據(jù)該散列值,相應(yīng)散列表的虛擬桶的相應(yīng)一個是否有用于數(shù)據(jù)塊的可用空間(如,去重dram存儲器模塊130可以確定虛擬桶460vb3在物理桶pb6中有用于數(shù)據(jù)塊的空間,如圖5b和圖5c所示)。
操作s706處,當(dāng)虛擬桶中的相應(yīng)一個沒有可用空間時,數(shù)據(jù)可從虛擬桶中的該相應(yīng)一個向虛擬桶中的鄰近一個順序地移動,直到虛擬桶中的相應(yīng)一個有用于數(shù)據(jù)塊的空間(如,去重dram存儲器模塊130可以,當(dāng)虛擬桶vb2沒有任何其它可用物理桶時,將數(shù)據(jù)從虛擬桶vb2的物理桶pb5順序地移動到虛擬桶vb3,直到虛擬桶vb2有用于數(shù)據(jù)塊的空間為止,如圖5b和圖5c所示,其中如果虛擬桶vb1是虛擬桶460中的相應(yīng)一個,則該過程可被重復(fù)以將數(shù)據(jù)從虛擬桶vb1的物理桶pb4移動到虛擬桶vb2的物理桶pb5)。操作s706a處,地址查找表存儲器可被更新以改變與被移動的數(shù)據(jù)塊對應(yīng)的一個或多個查找地址(如,去重dram存儲器模塊130可以更新alutm210以改變與被移動的數(shù)據(jù)塊對應(yīng)的一個或多個地址指針,以便散列表存儲器220中被移動的數(shù)據(jù)塊的新地址可被檢索)。
操作s707處,數(shù)據(jù)塊可被存儲在虛擬桶中的相應(yīng)一個(如,如果虛擬桶vb1是預(yù)期的虛擬桶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可以接收來自存儲器控制器120的與構(gòu)成數(shù)據(jù)行c的多個數(shù)據(jù)塊對應(yīng)的讀請求,該數(shù)據(jù)塊存儲在散列表存儲器220中的散列表陣列400里)。
操作s802處,與多個數(shù)據(jù)塊對應(yīng)的指針中的相應(yīng)指針可以從alutm210檢索(如,去重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)。
如上所述,數(shù)據(jù)去重可以使用本發(fā)明的實施例的去重dram存儲器模塊來執(zhí)行。因而,對存儲器的訪問可以被減少,并且dram系統(tǒng)的壽命可以被延長。
前述是示例實施例的闡述,并且不被解釋為對其的限制。盡管已描述了少量示例實施例,但本領(lǐng)域技術(shù)人員將容易理解,在實質(zhì)上不脫離示例實施例的新教學(xué)和優(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)利要求的等同物限定。