用于基于哈希表排除數(shù)據(jù)重復(fù)的存儲(chǔ)系統(tǒng),存儲(chǔ)控制器及方法
【專(zhuān)利摘要】根據(jù)實(shí)施方式,存儲(chǔ)控制器具備分割部、重復(fù)管理部以及重復(fù)判定部。所述分割部將由來(lái)自主計(jì)算機(jī)的寫(xiě)入請(qǐng)求所指定的數(shù)據(jù)分割成多個(gè)大塊。所述重復(fù)管理部在第1大塊被寫(xiě)入到存儲(chǔ)裝置的情況下,將所述第1大塊的第1哈希值與所述第1大塊建立對(duì)應(yīng),并優(yōu)先地登記到哈希表的第1表中。所述哈希表包含具有比所述第1表多的條目的第2表。所述重復(fù)判定部,在計(jì)算出第2大塊的第2哈希值的情況下,首先從所述第1表中搜索與所述第2哈希值一致的第3哈希值。
【專(zhuān)利說(shuō)明】用于基于哈希表排除數(shù)據(jù)重復(fù)的存儲(chǔ)系統(tǒng),存儲(chǔ)控制器及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的實(shí)施方式涉及用于基于哈希表排除數(shù)據(jù)重復(fù)的存儲(chǔ)系統(tǒng)、存儲(chǔ)控制器及方法。
【背景技術(shù)】
[0002]近年,為了保存在信息處理系統(tǒng)中處理的大規(guī)模的數(shù)據(jù)(大量數(shù)據(jù)),存儲(chǔ)裝置的大容量化正在進(jìn)展。大量數(shù)據(jù)一般包含較多的重復(fù)的數(shù)據(jù)。為此,在存儲(chǔ)裝置中保存有大量數(shù)據(jù)的情況下,該存儲(chǔ)裝置的記憶區(qū)域的一部分被較多的重復(fù)的數(shù)據(jù)所占據(jù)。這意味著,存儲(chǔ)裝置的記憶容量被浪費(fèi)地使用。因此,為了有效地使用存儲(chǔ)裝置的受限的記憶容量,需要從應(yīng)當(dāng)保存于該存儲(chǔ)裝置的數(shù)據(jù)中排除重復(fù)的數(shù)據(jù)。
[0003]以下,對(duì)現(xiàn)有技術(shù)中應(yīng)用的排除重復(fù)的數(shù)據(jù)的方法的例子進(jìn)行敘述。存儲(chǔ)控制器在對(duì)存儲(chǔ)裝置寫(xiě)入數(shù)據(jù)的情況下,判定與該應(yīng)當(dāng)寫(xiě)入的數(shù)據(jù)相同的數(shù)據(jù)是否已被寫(xiě)入到該存儲(chǔ)裝置。為了進(jìn)行該判定,存儲(chǔ)控制器將應(yīng)當(dāng)寫(xiě)入的數(shù)據(jù)(文件)分割成被稱(chēng)為大塊(chunk)的固定長(zhǎng)的數(shù)據(jù)的塊。
[0004]存儲(chǔ)控制器針對(duì)每個(gè)大塊、用哈希函數(shù)計(jì)算哈希值。存儲(chǔ)控制器在將哈希值的計(jì)算中所用的大塊寫(xiě)入存儲(chǔ)裝置時(shí),將該哈希值與該大塊建立對(duì)應(yīng)并登記到哈希表中。
[0005]因此,存儲(chǔ)控制器在計(jì)算出應(yīng)當(dāng)新寫(xiě)入存儲(chǔ)裝置的第I大塊的哈希值時(shí),判定與該哈希值相同的哈希值是否登記于哈希表中。若進(jìn)一步具體地?cái)⑹?,存?chǔ)控制器基于相同的哈希值是否登記于哈希表中,判定與第I大塊重復(fù)的數(shù)據(jù)是否已寫(xiě)入到存儲(chǔ)裝置。存儲(chǔ)控制器僅在與第I大塊重復(fù)的數(shù)據(jù)未被寫(xiě)入的情況下,將該第I大塊寫(xiě)入存儲(chǔ)裝置。由此,從存儲(chǔ)裝置排除重復(fù)的數(shù)據(jù)。
[0006]在寫(xiě)入到存儲(chǔ)裝置的大塊的數(shù)目增多時(shí),與這些大塊建立對(duì)應(yīng)并在哈希表中登記的哈希值的數(shù)目也增多。因此,現(xiàn)有技術(shù)為了登記多個(gè)哈希值,應(yīng)用使用具有相同數(shù)目條目的多個(gè)表并構(gòu)成為多級(jí)的哈希表。
[0007]現(xiàn)有技術(shù)文獻(xiàn)(專(zhuān)利文獻(xiàn))
[0008]專(zhuān)利文獻(xiàn)1:日本特開(kāi)平3-282966號(hào)公報(bào)
[0009]專(zhuān)利文獻(xiàn)2:日本特表2012-505440號(hào)公報(bào)
【發(fā)明內(nèi)容】
[0010]發(fā)明要解決的課題
[0011]如上所述,在哈希表被用于登記多個(gè)哈希值的情況下,保存該哈希表所需的記憶容量也變大。將這種哈希表整體保存于存儲(chǔ)控制器具有的存儲(chǔ)器是困難的。因此,哈希表一般保存于如保存大量數(shù)據(jù)所用的大容量的存儲(chǔ)裝置、或者存儲(chǔ)控制器具有的硬盤(pán)驅(qū)動(dòng)器(HDD)那樣的本地存儲(chǔ)裝置。另一方面,現(xiàn)有技術(shù)應(yīng)用利用具有相同數(shù)目條目的多個(gè)表并構(gòu)成為多級(jí)的哈希表。
[0012]因此,存儲(chǔ)控制器為了比較哈希值而對(duì)這種結(jié)構(gòu)的哈希表進(jìn)行搜索的情況下,在該存儲(chǔ)控制器與存儲(chǔ)裝置之間將產(chǎn)生很多的輸入輸出(I/o)處理。這樣,在伴隨著用于排除數(shù)據(jù)重復(fù)的哈希值的比較而產(chǎn)生很多I/o處理時(shí),存儲(chǔ)裝置的寫(xiě)入性能(寫(xiě)入速度)低下。
[0013]本發(fā)明要解決的課題在于,提供能夠使得用于排除數(shù)據(jù)重復(fù)的哈希表搜索高速化的存儲(chǔ)系統(tǒng)、存儲(chǔ)控制器及方法。
[0014]用于解決課題的手段
[0015]根據(jù)實(shí)施方式,存儲(chǔ)系統(tǒng)具備存儲(chǔ)裝置、存儲(chǔ)控制器以及哈希表。所述存儲(chǔ)控制器控制對(duì)所述存儲(chǔ)裝置的訪問(wèn)。所述哈希表包含具有第I數(shù)目的條目的第I表及具有比所述第I數(shù)目大的第2數(shù)目的條目的第2表。所述存儲(chǔ)控制器具備分割部、哈希生成部、訪問(wèn)控制器、重復(fù)管理部以及重復(fù)判定部。所述分割部將由來(lái)自主計(jì)算機(jī)的寫(xiě)入請(qǐng)求所指定的數(shù)據(jù)分割成多個(gè)大塊。所述哈希生成部基于所述多個(gè)大塊的各自的數(shù)據(jù),計(jì)算所述多個(gè)大塊的各自的具有第I長(zhǎng)度的哈希值。所述訪問(wèn)控制器對(duì)所述存儲(chǔ)裝置寫(xiě)入大塊。在所述存儲(chǔ)裝置被寫(xiě)入第I大塊的情況下,所述重復(fù)管理部將所述第I大塊的第I哈希值與所述第I大塊建立對(duì)應(yīng)并優(yōu)先地登記到所述哈希表的所述第I表。所述重復(fù)判定部,在計(jì)算出第2大塊的第2哈希值的情況下,使從所述第I表的搜索優(yōu)先來(lái)執(zhí)行從所述哈希表搜索與所述第2哈希值一致的第3哈希值的處理,由此判定具有與所述第2大塊相同內(nèi)容的第3大塊是否保存于所述存儲(chǔ)裝置。所述重復(fù)管理部,在判定為所述第3大塊保存于所述存儲(chǔ)裝置的情況下,抑制所述第2大塊被寫(xiě)入所述存儲(chǔ)裝置。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0016]圖1是表示實(shí)施方式涉及的計(jì)算機(jī)系統(tǒng)的典型的硬件結(jié)構(gòu)的框圖。
[0017]圖2是以圖1所示的存儲(chǔ)控制器的典型的功能結(jié)構(gòu)為主進(jìn)行表示的框圖。
[0018]圖3是表示通過(guò)來(lái)自主計(jì)算機(jī)的寫(xiě)入請(qǐng)求所指定的文件的數(shù)據(jù)與大塊的關(guān)系的例子的圖。
[0019]圖4是表示圖2所示的哈希表的數(shù)據(jù)結(jié)構(gòu)例的圖。
[0020]圖5是表示圖4所示的哈希表所包含的第I級(jí)的表具有的葉頁(yè)的數(shù)據(jù)結(jié)構(gòu)例的圖。
[0021]圖6是表示圖5所示的管理信息的格式的例子的圖。
[0022]圖7是表示圖5所示的其他的管理信息的格式的例子的圖。
[0023]圖8是表示圖2所示的元表(Meta Table)的數(shù)據(jù)結(jié)構(gòu)例的圖。
[0024]圖9是表示圖2所示的大塊表的數(shù)據(jù)結(jié)構(gòu)例的圖。
[0025]圖10是表示對(duì)同實(shí)施方式中的數(shù)據(jù)寫(xiě)入處理的典型的步驟進(jìn)行說(shuō)明所用的流程圖的一部分的圖。
[0026]圖11是表示對(duì)同數(shù)據(jù)寫(xiě)入處理的典型的步驟進(jìn)行說(shuō)明所用的流程圖的其他的一部分的圖。
[0027]圖12是表示對(duì)同數(shù)據(jù)寫(xiě)入處理的典型的步驟進(jìn)行說(shuō)明所用的流程圖的剩余部分的圖。
[0028]圖13是表示對(duì)同實(shí)施方式中的哈希值搜索處理的典型的步驟進(jìn)行說(shuō)明所用的流程圖的一部分的圖。
[0029]圖14是表示對(duì)同哈希值搜索處理的典型的步驟進(jìn)行說(shuō)明所用的流程圖的剩余部分的圖。
[0030]圖15是表示由從主計(jì)算機(jī)依次發(fā)送的三個(gè)文件寫(xiě)入請(qǐng)求所指定的三個(gè)文件與通過(guò)該三個(gè)文件被每隔恒定的尺寸來(lái)劃分而取得的大塊的關(guān)系的例子的圖。
[0031]圖16是表示哈希表中包含的第I級(jí)的表的內(nèi)容的變化的例子的圖。
[0032]圖17是表示元表的內(nèi)容的變化的例子的圖。
[0033]圖18是表示大塊表的內(nèi)容的變化的例子的圖。
【具體實(shí)施方式】
[0034]以下,參照附圖對(duì)實(shí)施的方式進(jìn)行說(shuō)明。
[0035]圖1是表示實(shí)施方式涉及的計(jì)算機(jī)系統(tǒng)的典型的硬件結(jié)構(gòu)的框圖。所述計(jì)算機(jī)系統(tǒng)包括存儲(chǔ)系統(tǒng)10及主計(jì)算機(jī)(以下,稱(chēng)為主機(jī)的裝置)20。存儲(chǔ)系統(tǒng)10經(jīng)由網(wǎng)絡(luò)30與主機(jī)20連接。
[0036]主機(jī)20是服務(wù)器、或者客戶端個(gè)人計(jì)算機(jī)(客戶端PC)這樣的物理計(jì)算機(jī)。在主機(jī)20內(nèi),用于對(duì)存儲(chǔ)系統(tǒng)10內(nèi)的數(shù)據(jù)進(jìn)行訪問(wèn)的應(yīng)用程序動(dòng)作。按照該應(yīng)用程序,主機(jī)20將存儲(chǔ)系統(tǒng)10 (更詳細(xì)而言,存儲(chǔ)系統(tǒng)10的后述的HDD/SSD陣列11)作為外部記憶裝置并經(jīng)由網(wǎng)絡(luò)30來(lái)利用。網(wǎng)絡(luò)30例如是存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN)、因特網(wǎng)(Internet)或者內(nèi)部網(wǎng)(intranet)ο因特網(wǎng)或者內(nèi)部網(wǎng)例如由以太網(wǎng)(登記商標(biāo))來(lái)構(gòu)成。此外,主機(jī)20也可以經(jīng)由光纖通道(FC)、小型計(jì)算機(jī)系統(tǒng)接口( SCSI)總線、串行SCSI (SAS)總線、或者串行高級(jí)技術(shù)附件(SATA)總線那樣的主機(jī)接口總線與存儲(chǔ)系統(tǒng)10連接。
[0037]存儲(chǔ)系統(tǒng)10包括HDD/SSD陣列11及存儲(chǔ)控制器12。在本實(shí)施方式中,HDD/SSD陣列11及存儲(chǔ)控制器12構(gòu)成存儲(chǔ)裝置。HDD/SSD陣列11是用例如多個(gè)硬盤(pán)驅(qū)動(dòng)器及多個(gè)固態(tài)硬盤(pán)(SSD)所構(gòu)成的 RAID (Redundant Arrays of Inexpensive Disks 或 RedundantArrays of Independent Disks)陣列。HDD/SSD陣列11經(jīng)由存儲(chǔ)接口總線13與存儲(chǔ)控制器12 (更詳細(xì)而言,存儲(chǔ)控制器12的未圖示的存儲(chǔ)接口)連接。在本實(shí)施方式中,存儲(chǔ)接口總線13是FC (光纖通道)。然而,存儲(chǔ)接口總線13也可以是SCSI總線、SAS總線、或者SATA總線那樣的、FC以外的接口總線。
[0038]存儲(chǔ)控制器12經(jīng)由存儲(chǔ)接口總線13來(lái)控制對(duì)HDD/SSD陣列11的訪問(wèn)。存儲(chǔ)控制器12經(jīng)由網(wǎng)絡(luò)30與主機(jī)20連接。存儲(chǔ)控制器12從主機(jī)20受理通過(guò)指定邏輯地址而進(jìn)行的讀出請(qǐng)求或?qū)懭胝?qǐng)求。存儲(chǔ)控制器12通過(guò)地址轉(zhuǎn)換功能將所指定的邏輯地址轉(zhuǎn)換為物理地址,該物理地址表示映射了該邏輯地址的HDD/SSD陣列11內(nèi)的物理區(qū)域。若以數(shù)據(jù)讀出的情況為例更詳細(xì)地?cái)⑹?,存?chǔ)控制器12將邏輯地址轉(zhuǎn)換為分配給以該邏輯地址所指定的數(shù)據(jù)(大塊)的大塊編號(hào)。關(guān)于大塊,后述。存儲(chǔ)控制器12將大塊編號(hào)轉(zhuǎn)換為物理地址,該物理地址表示保存有該大塊編號(hào)所示的大塊的HDD/SSD陣列11內(nèi)的物理區(qū)域。存儲(chǔ)控制器12基于該物理地址訪問(wèn)HDD/SSD陣列11。
[0039]存儲(chǔ)控制器12包括CPU121、存儲(chǔ)器122及硬盤(pán)驅(qū)動(dòng)器(HDD) 123。CPU121按照存儲(chǔ)器122內(nèi)的后述的控制程序區(qū)域122a中所保存的控制程序的程序編碼,在存儲(chǔ)控制器12中執(zhí)行被請(qǐng)求的處理。存儲(chǔ)器122例如是用多個(gè)DRAM所構(gòu)成的易失性存儲(chǔ)器。HDD123是本地存儲(chǔ)裝置,用于保存控制程序及各種表。此外,也能夠使用搭載了多個(gè)閃存器的存儲(chǔ)裝置代替HDD 123。
[0040]在本實(shí)施方式中,存儲(chǔ)控制器12包括于包含HDD/SSD陣列11的存儲(chǔ)裝置。然而,存儲(chǔ)控制器12也可以獨(dú)立于存儲(chǔ)裝置而被包括。此情況下,存儲(chǔ)控制器12也可以?xún)?nèi)置于主機(jī)20。另外,存儲(chǔ)控制器12 (更詳細(xì)而言,存儲(chǔ)控制器12的功能)也可以用主機(jī)20具有的操作系統(tǒng)(OS)的功能的一部分來(lái)實(shí)現(xiàn)。
[0041 ] 另外,存儲(chǔ)控制器12也可以包括于在主機(jī)20的插件槽中安裝并被使用的卡片。另夕卜,也可以是,存儲(chǔ)控制器12的一部分內(nèi)置于主機(jī)20,該存儲(chǔ)控制器12的剩余部分包括于所述卡片。
[0042]另外,也可以應(yīng)用例如用多個(gè)HDD而構(gòu)成的RAID陣列、或用多個(gè)SSD而構(gòu)成的RAID陣列,來(lái)代替HDD/SSD陣列11。另外,也可以應(yīng)用不具有RAID結(jié)構(gòu)的僅僅多個(gè)存儲(chǔ)驅(qū)動(dòng)的集合(驅(qū)動(dòng)陣列),來(lái)代替HDD/SSD陣列11 (即RAID陣列)。
[0043]圖2是以圖1所示的存儲(chǔ)控制器12的典型的功能結(jié)構(gòu)為主進(jìn)行表示的框圖。存儲(chǔ)控制器12包括分割部200、重復(fù)管理部201、重復(fù)判定部202、哈希生成部203及訪問(wèn)控制器204。關(guān)于分割部200、重復(fù)管理部201、重復(fù)判定部202、哈希生成部203及訪問(wèn)控制器204的功能,后述。這些功能要素200至204是通過(guò)由圖1所示的存儲(chǔ)控制器12的CPU121執(zhí)行控制程序而實(shí)現(xiàn)的軟件模塊。然而,功能要素200至204的一部分或全部也可以通過(guò)硬件模塊來(lái)實(shí)現(xiàn)。
[0044]存儲(chǔ)器122包含控制程序區(qū)域122a、表區(qū)域122b及工作區(qū)域122c??刂瞥绦騾^(qū)域122a用于保存由CPU121執(zhí)行的控制程序的至少一部分。該控制程序如前所述那樣、預(yù)先保存于HDD123,該控制程序的至少一部分在存儲(chǔ)控制器12的起動(dòng)時(shí)從該HDD123載入到控制程序區(qū)域122a。
[0045]表區(qū)域122b用于對(duì)保存于HDD123的各種表的至少一部分進(jìn)行保存。工作區(qū)域122c用于保存CPU121執(zhí)行控制程序時(shí)所利用的臨時(shí)性的數(shù)據(jù)。
[0046]HDD123 (即,本地存儲(chǔ)裝置)除了保存上述的控制程序以外,還保存后述的哈希表205、元表206及大塊表207。即HDD123包含分別保存控制程序、哈希表205、元表206及大塊表207的記憶區(qū)域。
[0047]圖3表示通過(guò)來(lái)自主機(jī)20的寫(xiě)入請(qǐng)求所指定的文件的數(shù)據(jù)與大塊的關(guān)系的例子。分割部200將圖3所示的文件分割成固定長(zhǎng)、例如4千比特(4K比特)的數(shù)據(jù)的塊。將該每4K比特的數(shù)據(jù)的塊稱(chēng)為大塊。重復(fù)管理部201對(duì)每個(gè)大塊管理重復(fù)的有無(wú)。在圖3的例子中,文件F的尺寸為4NK比特。此情況下,文件F被分割成N個(gè)大塊# O至# N-1。重復(fù)管理部201對(duì)大塊# O至# N-1賦予唯一的識(shí)別編號(hào)即大塊編號(hào)。在本實(shí)施方式中,大塊編號(hào)以8比特表示。
[0048]接著,對(duì)在HDD123中保存的哈希表205的概要進(jìn)行說(shuō)明。哈希表205用于對(duì)被賦予了大塊編號(hào)的每個(gè)大塊登記哈希信息。哈希信息例如包含基于對(duì)應(yīng)的大塊而計(jì)算出的32比特的哈希值與該大塊的8比特的大塊編號(hào)的對(duì)。即,哈希表205用于登記哈希信息,該哈希信息是指,將大塊的哈希值與該大塊的大塊編號(hào)建立關(guān)聯(lián)的哈希信息。
[0049]哈希表205用于由重復(fù)判定部202來(lái)判定具有與應(yīng)當(dāng)寫(xiě)入HDD/SSD陣列11的大塊相同內(nèi)容的大塊是否已被寫(xiě)入到該HDD/SSD陣列11。重復(fù)管理部201基于該重復(fù)判定部202的判定的結(jié)果,排除具有相同內(nèi)容的多個(gè)大塊被重復(fù)寫(xiě)入到HDD/SSD陣列11。由此,數(shù)據(jù)的重復(fù)排除能夠?qū)崿F(xiàn)。
[0050]在此,對(duì)本實(shí)施方式中應(yīng)用的數(shù)據(jù)的重復(fù)排除的概要進(jìn)行說(shuō)明。首先,設(shè)想從主機(jī)20向存儲(chǔ)系統(tǒng)10的存儲(chǔ)控制器12請(qǐng)求包含大塊A的文件的寫(xiě)入。另外,設(shè)大塊A的哈希值為H (A)0重復(fù)判定部202將大塊A的哈希值H (A)與登記到哈希表205的哈希值依次比較?;谠摫容^的結(jié)果,重復(fù)判定部202判定HDD/SSD陣列11中保存有具有與大塊A相同內(nèi)容的大塊(以下,稱(chēng)為代表大塊A)。
[0051]如果哈希表205中登記有與哈希值H (A)—致的哈希值(B卩,哈希值H (A)),則重復(fù)判定部202判定為HDD/SSD陣列11中保存有代表大塊A。即,重復(fù)判定部202判定為大塊A重復(fù)。另一方面,如果哈希表205中未登記有哈希值H CA),則重復(fù)判定部202判定為大塊A不重復(fù)。
[0052]在判定為大塊A不重復(fù)的情況下,訪問(wèn)控制器204在由寫(xiě)入請(qǐng)求所指定的HDD/SSD陣列11的地址中寫(xiě)入大塊A。更詳細(xì)而言,訪問(wèn)控制器204將大塊A寫(xiě)入到由被分配到來(lái)自主機(jī)20的寫(xiě)入請(qǐng)求所指定的邏輯地址的物理地址所示的HDD/SSD陣列11的物理區(qū)域。此時(shí),重復(fù)管理部201將哈希信息登記到哈希表205,該哈希信息包含哈希值H (A)與大塊A的大塊編號(hào)的對(duì)。
[0053]另一方面,在判定為大塊A重復(fù)的情況下,重復(fù)管理部201抑制訪問(wèn)控制器204將大塊A寫(xiě)入HDD/SSD陣列11。此情況下,重復(fù)管理部201對(duì)由來(lái)自主機(jī)20的寫(xiě)入請(qǐng)求所指定的邏輯地址分配物理地址,該物理地址是指已在HDD/SSD陣列11中寫(xiě)入代表大塊A的物理地址(即映射)。
[0054]圖4表示圖2所示的哈希表205的數(shù)據(jù)結(jié)構(gòu)例。哈希表205用多個(gè)表構(gòu)成為多級(jí)。在圖 4 的例子中,哈希表 205 用 7 個(gè)表 TBL_1、TBL_2、TBL_3、TBL_4、TBL_5、TBL_6 及 TBL_7構(gòu)成。即哈希表205為7段結(jié)構(gòu)的表。在此,表了81^_11(11=1,2,3,4、5,6,7)是哈希表205中的第h級(jí)的表。
[0055]表TBL_1至TBL_7任一個(gè)都包含“kmax + I”個(gè)頁(yè)(以下,稱(chēng)為葉頁(yè))。在此,表TBL_h的第k個(gè)(k = 0,l,..., kmax)葉頁(yè)如LP_k (h)那樣標(biāo)記。葉頁(yè)LP_k (h)與后述的組G_k (組編號(hào)k或組索引k)建立了對(duì)應(yīng)。葉頁(yè)LP_k (h)用于登記哈希信息,該哈希信息是指,包含屬于組G_k的哈希值(更詳細(xì)而言,后述的第一階段哈希值(first stage hash value))與用于確定在該哈希值的計(jì)算中所用的大塊的大塊編號(hào)的對(duì)的哈希信息。
[0056]表TBL_1至TBL_7的葉頁(yè)LP_k (I)至LP_k (7)的尺寸不同,因此,在登記哈希信息中所用的條目的數(shù)目也不同。在此,設(shè)表TBL_1、TBL_2、TBL_3、TBL_4、TBL_5、TBL_6及TBL_7 的葉頁(yè) LP_k (l)、LP_k (2)、LP_k (3)、LP_k (4)、LP_k (5)、LP_k (6)及 LP_k (7)的尺寸(條目數(shù))分別為 SIZE_1 (EN_1)、SIZE_2 (EN_2)、SIZE_3 (EN_3)、SIZE_4 (EN_4)、SIZE_5 (EN_5)、SIZE_6 (EN_6)及SIZE_7 (EN_7)。此情況下,在這些尺寸(條目數(shù))之間,存在如下的關(guān)系:
[0057]SIZE_1 < SIZE_2 < SIZE_3 < SIZE_4 < SIZE_5 < SIZE_6 < SIZE_7
[0058]EN_1 < EN_2 < EN_3 < EN_4 < EN_5 < EN_6 < EN_7。
[0059]即,在本實(shí)施方式中,構(gòu)成哈希表205的7個(gè)表TBL_1、TBL_2、TBL_3、TBL_4、TBL_5、TBL_6 及 TBL_7 具有的葉頁(yè) LP_k (l)、LP_k (2)、LP_k (3)、LP_k (4)、LP_k (5)、LP_k (6)及LP_k (7)的尺寸(條目數(shù))中,表TBL_1 (即第I級(jí)的表TBL_1)的尺寸最小。以下,按表TBL_2、TBL_3、TBL_4、TBL_5、TBL_6及TBL_7的順序,葉頁(yè)的尺寸(條目數(shù))變大。
[0060]表TBL_1的各葉頁(yè)LP_k (I)具有例如96條目。表TBL_2的各葉頁(yè)LP_k (2)具有例如192條目(B卩,葉頁(yè)LP_k (I)的尺寸的2倍的條目)。表TBL_3的各葉頁(yè)LP_k (3)具有例如384條目(B卩,葉頁(yè)LP_k (2)的尺寸的2倍的條目)。表TBL_4的各葉頁(yè)LP_k (4)具有例如768條目(葉頁(yè)LP_k (3)的尺寸的2倍的條目)。表TBL_5的各葉頁(yè)LP_k (5)具有例如1536條目(B卩,葉頁(yè)LP_k (4)的尺寸的2倍的條目)。表TBL_6的各葉頁(yè)LP_k (6)具有例如3,072條目(8卩,葉頁(yè)1^_1^ (5)的尺寸的2倍的條目)。表TBL_7的各葉頁(yè)LP_k(7)具有例如6,144條目(S卩,葉頁(yè)LP_k (6)的尺寸的2倍的條目)。
[0061]在本實(shí)施方式中,哈希表205為了對(duì)該哈希表205的訪問(wèn)的高速化而被從HDD123載入到存儲(chǔ)器122的表區(qū)域122b中使用。但是,因?yàn)榇鎯?chǔ)器122的表區(qū)域122b的容量的制約,并不是哈希表205整體被載入到存儲(chǔ)器122,而是僅僅從哈希表205選擇出的I個(gè)葉頁(yè)被載入到存儲(chǔ)器122的表區(qū)域122b。
[0062]在本實(shí)施方式中,用32比特的哈希值作為大塊(4K比特的大塊)的哈希值。哈希生成部203在計(jì)算該32比特的哈希值時(shí),應(yīng)用例如被稱(chēng)為“SHA-256”的第I哈希函數(shù)。將該32比特的哈希值稱(chēng)為第一階段哈希值。
[0063]在此,設(shè)在HDD/SSD陣列11中保存的全部大塊的第一階段哈希值與大塊編號(hào)的對(duì)不被分類(lèi)就被分散登記到表TBL_1至TBL_7中。此情況下,在表TBL_1?TBL_7中保存的第一階段哈希值與大塊編號(hào)的對(duì)的數(shù)目變得龐大。為此,從表TBL_h(h = 1,2,3,4、5,6,7)中搜索例如與前述的哈希值H (A) 一致的哈希值需要很多時(shí)間。
[0064]因此,在本實(shí)施方式中,重復(fù)管理部201基于第一階段哈希值,將應(yīng)當(dāng)?shù)怯浀奖鞹BL_1?TBL_7中的該第一階段哈希值(即,32比特的哈希值)的集合分類(lèi)為“kmax + I”個(gè)組G_0至G_kmax。組G_0至G_kmax分別與組編號(hào)O至kmax建立對(duì)應(yīng)。表TBL_1?TBL_7的各自的“kmax + I”個(gè)葉頁(yè)與組G_0至G_kmax (即組編號(hào)O至kmax)建立了對(duì)應(yīng)。例如,表TBL_h的葉頁(yè)LP_0 (h)至LP_kmax (h)與組G_0至G_kmax建立了對(duì)應(yīng)。在此,kmax”例如為16,777,216 (16進(jìn)制表現(xiàn)時(shí)為OxFFFFFF)。OxFFFFFF中的“Ox”表示附有該“Ox”的FFFFFF為16進(jìn)制表現(xiàn)。
[0065]為了重復(fù)管理部201進(jìn)行的上述的分類(lèi),哈希生成部203基于第一階段哈希值生成用于確定該第一階段哈希值所屬的組的作為組編號(hào)的索引(以下,稱(chēng)為組索引)。在本實(shí)施方式中,該組索引中使用基于第一階段哈希值算出的3比特的哈希值。將該3比特的哈希值稱(chēng)為第二階段哈希值(second stage hash value)。該第二階段哈希值(即組索引)的計(jì)算中用第2哈希函數(shù)。關(guān)于該第2哈希函數(shù),后述。
[0066]重復(fù)管理部201例如將與第二階段哈希值(組索引)O (= 0x000000)對(duì)應(yīng)的第一階段哈希值的集合作為具有組編號(hào)O的組G_0來(lái)管理。同樣地,重復(fù)管理部201將與第二階段哈希值I (0x000001)對(duì)應(yīng)的第一階段哈希值的集合作為具有組編號(hào)I的組G_1來(lái)管理,將與第二階段哈希值2 (0x000002)對(duì)應(yīng)的第一階段哈希值的集合作為具有組編號(hào)2的組G_2來(lái)管理。同樣地,重復(fù)管理部201將與第二階段哈希值kmax (OxFFFFFF)對(duì)應(yīng)的第一階段哈希值的集合作為具有組編號(hào)kmax的組G_kmax來(lái)管理。即重復(fù)管理部201將與第二階段哈希值k對(duì)應(yīng)的第一階段哈希值的集合作為具有組編號(hào)k的組G_k來(lái)管理。
[0067]這樣,在本實(shí)施方式中,重復(fù)管理部201用第二階段哈希值(即組索引),將對(duì)應(yīng)的第一階段索引值的集合分類(lèi)為16,777,216個(gè)(即“kmax + I”個(gè))組。由此,與第一階段索引值的集合未被組化的情況相比較,能夠?qū)⒐1?05中的搜索范圍減小為16,777,216分之一 O
[0068]在此,對(duì)第2哈希函數(shù)進(jìn)行說(shuō)明。如前所述,第2哈希函數(shù)用于作為組索引的第二階段哈希值的計(jì)算。在本實(shí)施方式中,該第2哈希函數(shù)使用除法函數(shù)。該除法函數(shù)用規(guī)定的質(zhì)數(shù)作為除數(shù)。具體而言,該除數(shù)例如使用比以3比特表現(xiàn)的最大的數(shù)值(16,777,216)小并且最接近該最大的數(shù)值的質(zhì)數(shù)(16,777,213)。第二階段哈希值是基于除法函數(shù)(第2哈希函數(shù)),以質(zhì)數(shù)16,777,213除第一階段哈希值而取得的余數(shù)。除法函數(shù)的除數(shù)使用這種質(zhì)數(shù),由此能夠?qū)⒎謩e屬于組G_0至G_kmax的第一階段哈希值的集合隨機(jī)化。
[0069]在應(yīng)用了上述的第2哈希函數(shù)的情況下,第二階段哈希值的總數(shù)(即,組索引的總數(shù))為 16,777,213 (OxFFFFFC)0 此情況下,第二階段哈希值“kmax-2” (= 16,777,214),“kmax-1” (= 16,777,215)及kmax (= 16,777,216)不存在。然而,在本實(shí)施方式中,為了簡(jiǎn)化管理,重復(fù)管理部201也管理分別與第二階段哈希值“kmax-2”、“kmax-Ι”及kmax對(duì)應(yīng)的組 G_ (kmax-2 )、G_ (kmax-1)及 G_kmax。此外,組 G_ (kmax-2 )、G_ (kmax-1)及 G_kmax未必是必要的。
[0070]接著,舉例對(duì)表TBL_1至TBL_7的各葉頁(yè)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行說(shuō)明。圖5表示在圖4所示的哈希表205中包含的表TBL_1 (即第I級(jí)的表TBL_1)具有的第k個(gè)葉頁(yè)LP_k (I)的數(shù)據(jù)結(jié)構(gòu)例。葉頁(yè)LP_k (I)與組G_k建立了對(duì)應(yīng)。
[0071]葉頁(yè)LP_k (I)包括8個(gè)扇區(qū)ST_0至ST_7。扇區(qū)如周知那樣,是對(duì)如硬盤(pán)驅(qū)動(dòng)器(HDD)或者固態(tài)硬盤(pán)(SSD)那樣的存儲(chǔ)驅(qū)動(dòng)進(jìn)行訪問(wèn)時(shí)的最小單位。在本實(shí)施方式中,I扇區(qū)的尺寸為512比特。扇區(qū)ST_0至ST_7分別包含登記哈希信息時(shí)所用的12個(gè)條目。因此,葉頁(yè)LP_k (I)如前所述那樣、具有96 (8X12 = 96)個(gè)條目。哈希信息的尺寸例如為40比特。哈希信息包含32比特的哈希值(第一階段哈希值)與8比特的大塊編號(hào)的對(duì)。扇區(qū)ST_0至ST_7進(jìn)一步包含管理信息MI1_0至MI1_7。管理信息MI1_0至MI1_7的各自的尺寸例如為32比特。關(guān)于管理信息MIl_i (i = 0,1,...,i (l)max),后述。此外,i (I)max是從葉頁(yè)LP_k (I)具有的扇區(qū)的數(shù)目中減去I而獲得的數(shù),為7。
[0072]表TBL_2至TBL_7具有的第k個(gè)葉頁(yè)LP_k (2)至LP_k (7)的數(shù)據(jù)結(jié)構(gòu)也與圖5所示的葉頁(yè)LP_k (I)的數(shù)據(jù)結(jié)構(gòu)同樣。但是,葉頁(yè)LP_k (2)至LP_k (7)具有的扇區(qū)的數(shù)目如依據(jù)前述的條目數(shù)的差異所知那樣,是不同的。
[0073]例如,葉頁(yè)LP_k (2)、LP_k (3)及LP_k (4)分別具有16扇區(qū)(192條目)、32扇區(qū)(384 條目)及 64 扇區(qū)(768 條目)。即,i (2)max、i (3)max 及 i (4) max 分別為 15、31 及63。另外,葉頁(yè)LP_k (5)、LP_k (6)及LP_k (7)分別具有128扇區(qū)(1,536條目)、256扇區(qū)(3,072 條目)及 512 扇區(qū)(6,144 條目)。S 卩,i (5)max、i (6)max 及 i (7)max 分別為128,256 及 512。
[0074]接著,對(duì)向如上所述的數(shù)據(jù)結(jié)構(gòu)的哈希表205登記哈希信息(即哈希表205的更新)的概要進(jìn)行說(shuō)明。如前所述,哈希表205包括表TBL_1至TBL_7。表TBL_1具有基于3比特的第二階段哈希值0x000000至OxFFFFFF (即組索引)而分類(lèi)的“kmax + I”個(gè)(即16,777,216 個(gè))葉頁(yè) LP_0 (I)至 LP_kmax (I)。
[0075]例如在具有第二階段哈希值0x000000的第I大塊被寫(xiě)入到HDD/SSD陣列11的情況下,重復(fù)管理部201在通過(guò)該第二階段哈希值0x000000指定的第I級(jí)的表TBL_1的葉頁(yè)LP_0 (I)中登記第I哈希信息。該第I哈希信息包含第I大塊的第一階段哈希值與該第I大塊的大塊編號(hào)的對(duì)。同樣地,例如在具有第二階段哈希值0x000001的第2大塊被寫(xiě)入到HDD/SSD陣列11的情況下,重復(fù)管理部201在通過(guò)該第二階段哈希值0x000001指定的第I級(jí)的表TBL_1的葉頁(yè)LP_1 (I)中登記第2哈希信息。該第2哈希信息包含第2大塊的第一階段哈希值與該第2大塊的大塊編號(hào)的對(duì)。
[0076]第I 級(jí)的表 TBL_1 的葉頁(yè) LP_k (I) (k = 0,1,..., kmax)具有 96 條目(EN_1 =96)。為此,例如在具有第二階段哈希值0x000000的96個(gè)大塊已被寫(xiě)入到HDD/SSD陣列11的情況下,葉頁(yè)LP_0 (I)充滿。在該狀態(tài)下,例如無(wú)法將上述的第I哈希信息登記到葉頁(yè)LP_0 (I)中。即,需要增設(shè)的葉頁(yè)。
[0077]因此,在本實(shí)施方式中,哈希表205進(jìn)一步包括提供增設(shè)的葉頁(yè)LP_k(2)的第2級(jí)的表TBL_2。第2級(jí)的表TBL_2的葉頁(yè)LP_k (2)當(dāng)在第I級(jí)的表TBL_1中葉頁(yè)LP_k (I)達(dá)到充滿的情況下使用。根據(jù)該情況,可以說(shuō),表TBL_1 (即第I級(jí)的表TBL_1)是哈希表205中的基本的表。
[0078]另外,在第I級(jí)的表TBL_1的葉頁(yè)LP_0 (I)達(dá)到充滿的狀態(tài)下,如上所述那樣,設(shè)第I大塊(即,具有第二階段哈希值0x000000的第I大塊)被寫(xiě)入到HDD/SSD陣列11。此情況下,重復(fù)管理部201在第2級(jí)的表TBL_2的葉頁(yè)LP_0 (2)中登記第I哈希信息。第2級(jí)的表 TBL_2 的葉頁(yè) LP_k (2) (k = 0,1,…,kmax)具有 192 條目(EN_2 = 192)。因此,例如葉頁(yè)LP_0 (2)的192條目也達(dá)到充滿的情況下,無(wú)法在該葉頁(yè)LP_0 (2)中登記新的哈希信息。
[0079]因此,哈希表205進(jìn)一步包括提供增設(shè)的葉頁(yè)LP_k (3)的第3級(jí)的表TBL_3。葉頁(yè)LP_k (3)當(dāng)在第2級(jí)的表TBL_2中葉頁(yè)LP_k (2)達(dá)到充滿的情況下使用。第3級(jí)的表TBL_3的葉頁(yè)LP_k (3)具有384條目(EN_3 = 384)。同樣地,哈希表205還包括提供增設(shè)的葉頁(yè)LP_k (4)的第4級(jí)的表TBL_4。葉頁(yè)LP_k (4)當(dāng)在第3級(jí)的表TBL_3中葉頁(yè)LP_k (3)達(dá)到充滿的情況下使用。第4級(jí)的表TBL_4的葉頁(yè)LP_k (4)具有768條目(EN_4 =768)。
[0080]同樣地,哈希表205還包括提供增設(shè)的葉頁(yè)LP_k (5)的第5級(jí)的表TBL_5。第5級(jí)的表TBL_5的葉頁(yè)LP_k (5)具有1,536條目(EN_5 = 1,536)。同樣地,哈希表205還包括提供增設(shè)的葉頁(yè)LP_k (6)的第6級(jí)的表TBL_6、提供增設(shè)的葉頁(yè)LP_k (7)的第7級(jí)的表TBL_7。第6級(jí)的表TBL_6的葉頁(yè)LP_k (6)具有3,072條目(EN_6 = 3,072),第7級(jí)的表TBL_7的葉頁(yè)LP_k (7)具有6,144條目(EN_6 = 6,144)。S卩,哈希表205針對(duì)每個(gè)第二階段哈希值(即組索引)具有12,192個(gè)條目。
[0081]在此,對(duì)如上所述的哈希表205的結(jié)構(gòu)的意義進(jìn)行說(shuō)明。在哈希表205中所登記的哈希值的量隨著在HDD/SSD陣列11中保存的數(shù)據(jù)的量(大塊數(shù))變多而增大。在這種狀況下,哈希表205所需的記憶容量一般成為也無(wú)法在存儲(chǔ)器122中保存的大小(例如,超過(guò)數(shù)GB的大小)。為此,哈希表205如本實(shí)施方式那樣、保存于HDD123 (即,本地存儲(chǔ)裝置)。此外,哈希表205也可以保存于HDD/SSD陣列11。
[0082]在哈希表205所需的記憶容量變大時(shí),存儲(chǔ)控制器12(更詳細(xì)而言,存儲(chǔ)控制器12的重復(fù)判定部202)為了搜索哈希值,需要重復(fù)將該哈希表205的全部條目的一部分讀入到存儲(chǔ)器122的動(dòng)作。為此,在存儲(chǔ)控制器12與存儲(chǔ)裝置之間,產(chǎn)生較多的輸入輸出(I/O)處理。
[0083]另外,在一般的存儲(chǔ)系統(tǒng)中,以最初分配到邏輯卷的記憶容量(例如,最小的單位的記憶容量)開(kāi)始運(yùn)用。邏輯卷是指,由主機(jī)識(shí)別為邏輯的存儲(chǔ)驅(qū)動(dòng)的記憶區(qū)域。邏輯卷中,例如每隔4K (千)比特適當(dāng)分配HDD/SSD陣列11的記憶區(qū)域(物理區(qū)域)。這種存儲(chǔ)系統(tǒng)具有根據(jù)運(yùn)用開(kāi)始后的狀況使邏輯卷的記憶容量靈活地增加的功能。本實(shí)施方式中的存儲(chǔ)系統(tǒng)10也是同樣的。
[0084]在這種具有記憶容量增設(shè)功能并且具有重復(fù)排除功能的存儲(chǔ)系統(tǒng)中,在運(yùn)用開(kāi)始時(shí),準(zhǔn)備與分配了最小單位的記憶容量的邏輯卷對(duì)應(yīng)的基準(zhǔn)的大小RS的哈希表。并且,在分配給邏輯卷的記憶容量增加到最小的單位的M倍(M是比I大的整數(shù))的情況下,哈希表也增加到基準(zhǔn)的大小RS的M倍。
[0085]在本實(shí)施方式中,能夠?qū)壿嬀矸峙涞挠洃浫萘康淖钚〉膯挝皇?太拉(T)比特。設(shè)該6T比特的數(shù)據(jù)如前所述那樣、被分割成4K比特的大塊。
[0086]重復(fù)管理部201基于各大塊的32比特的哈希值(第一階段哈希值),排除具有相同內(nèi)容的多個(gè)大塊(即重復(fù)的大塊)被保存于HDD/SSD陣列11的情況。此情況下,哈希表205中登記的大塊的數(shù)目(即,排除重復(fù)后的大塊的數(shù)目)以一定的可能性不超過(guò)16,777,216X96是眾所周知的。
[0087]16,777,216如前所述那樣、是在第一階段哈希值的集合被按第二階段哈希值來(lái)分類(lèi)的情況下獲得的組G_0至G_kmax (組索引)的總數(shù)。96是與各組G_k (k = O, I,...,kmax)建立了對(duì)應(yīng)的表TBL_1的葉頁(yè)LP_k (I)具有的條目的數(shù)目(EN_1 )。因此,表TBL_1能夠應(yīng)用于6T比特的邏輯卷的數(shù)據(jù)的重復(fù)排除。即,在邏輯卷的記憶容量為6T比特的情況下,具有16,777,216 X 96條目的表TBL_1的大小為上述的基準(zhǔn)的大小RS。
[0088]在此,邏輯卷的記憶容量從例如6T比特增加到12T比特或24T比特的情況下,僅僅表TBL_1,條目數(shù)不足。此情況下,需要將哈希表205的大小擴(kuò)展為基準(zhǔn)的大小RS的2倍或4倍。同樣地,邏輯卷的記憶容量從例如6T比特增加到516T比特的情況下,需要將哈希表205的大小擴(kuò)展為基準(zhǔn)的大小RS的86倍。
[0089]若是現(xiàn)有技術(shù),則為了進(jìn)行該擴(kuò)展,具有基準(zhǔn)大小RS的85個(gè)第2至第86的表被追加至具有基準(zhǔn)大小R的第I表(即構(gòu)成運(yùn)用開(kāi)始時(shí)的哈希表的第I表)??芍?至第86的表任一個(gè)都具有與第I表具有的條目數(shù)相同數(shù)目的條目。第I表用作多級(jí)結(jié)構(gòu)的哈希表的第I級(jí)的表。第2至第86的表分別用作多級(jí)結(jié)構(gòu)的哈希表的第2級(jí)至第86級(jí)的表。
[0090]此情況下,存儲(chǔ)控制器為了從第I至第86的表中搜索哈希值,需要將該第I至第86的表依次讀入到存儲(chǔ)器。因此,在現(xiàn)有技術(shù)中,關(guān)于哈希表,即使使存儲(chǔ)器具有用于保存16,777,216 X 96條目的表區(qū)域,也需要86次I/O處理。
[0091]與之相對(duì),在本實(shí)施方式中,第I級(jí)的表TB_1中被追加第2級(jí)的表TBL_2至第7級(jí)的表TBL_7。第2級(jí)的表TBL_2、第3級(jí)的表TBL_3及第4級(jí)的表TBL_4分別具有第I級(jí)的表TB_1所具有的條目數(shù)的2倍、4倍及8倍的條目。另外,第4級(jí)的表TBL_4、第5級(jí)的表TBL_5及第6級(jí)的表TBL_6分別具有第I級(jí)的表TB_1所具有的條目數(shù)的16倍、32倍及64倍的條目。
[0092]此情況下,哈希表205的總條目數(shù)成為第I級(jí)的表TB_1的條目數(shù)的127倍,充分地超過(guò)了支持516T比特的記憶容量的邏輯卷所需的總條目數(shù)(即,第I級(jí)的表TB_1的總條目數(shù)的86倍)。在應(yīng)用這種結(jié)構(gòu)的哈希表205的本實(shí)施方式中,存儲(chǔ)控制器12在從第I級(jí)的表TB_1至第7級(jí)的表TBL_7中搜索哈希值的情況下,至多進(jìn)行7次的I/O處理就結(jié)束。
[0093]因此,根據(jù)本實(shí)施方式,與現(xiàn)有技術(shù)相比較,能夠大幅削減伴隨著哈希值搜索的表訪問(wèn)所需的I/o處理的次數(shù)。由此,根據(jù)本實(shí)施方式,能夠?qū)崿F(xiàn)哈希值搜索的高速化,能夠提聞與重復(fù)排除有關(guān)的處理能力,進(jìn)一步能夠提聞存儲(chǔ)系統(tǒng)10的與入性能(與入速度)。
[0094]而且,在本實(shí)施方式中,存儲(chǔ)控制器12無(wú)需為了搜索哈希值而將第I級(jí)的表TB_1至第7級(jí)的表TBL_7的各自的整體讀入到存儲(chǔ)器122。即,存儲(chǔ)控制器12僅僅只將包含第I級(jí)的表TB_1至第7級(jí)的表TBL_7并且與第二階段哈希值(更詳細(xì)而言,以第二階段哈希值確定的組)建立了對(duì)應(yīng)的葉頁(yè)讀入到存儲(chǔ)器122即可。
[0095]并且,在本實(shí)施方式中,最大的尺寸的葉頁(yè)是第7級(jí)的TBL_7的葉頁(yè)LP_k(7)。該葉頁(yè)LP_k (7)具有6,144個(gè)條目。因此,在本實(shí)施方式中,存儲(chǔ)控制器12通過(guò)上述的I/O處理,最大將具有6,144個(gè)條目的葉頁(yè)從存儲(chǔ)裝置(更詳細(xì)而言,HDD123)讀入到存儲(chǔ)器(更詳細(xì)而言,存儲(chǔ)器122)即可。換言之,存儲(chǔ)器122關(guān)于哈希表205、僅具有用于保存6,144條目的表區(qū)域即可。
[0096]因此,根據(jù)本實(shí)施方式,與現(xiàn)有技術(shù)相比,能夠大幅減小哈希值搜索的范圍。由此,根據(jù)本實(shí)施方式,能夠?qū)崿F(xiàn)哈希值搜索的進(jìn)一步的高速化,能夠進(jìn)一步提高存儲(chǔ)系統(tǒng)10的寫(xiě)入性能。
[0097]圖6表示圖5所示的管理信息MI1_0的格式的例子。管理信息MI1_0如前所述,被登記于表TBL_1具有的葉頁(yè)LP_k (I)的開(kāi)頭的扇區(qū)ST_0。管理信息MI1_0包含8個(gè)字段H)至F7。字段H)至F7的各自的長(zhǎng)度為2比特。
[0098]管理信息MI1_0的字段H)用于設(shè)定使用條目計(jì)數(shù)CNT。使用條目計(jì)數(shù)CNT表示在登記管理信息MI1_0 (即,包含字段H)的管理信息MI1_0)的扇區(qū)ST_0中在哈希信息的登記時(shí)所使用的條目的數(shù)目。
[0099]管理信息MI 1_0的字段Fl至F7用于設(shè)定使用條目計(jì)數(shù)CNTl至CNT7。使用條目計(jì)數(shù)CNTl至CNT7表示在表TBL_1至TBL_7的葉頁(yè)LP_k (I)至LP_k (7)中在哈希信息的登記時(shí)所使用的條目的數(shù)目。
[0100]圖7表示圖5所示的管理信息MIl_i (i = 1,2,…,7)的格式的例子。管理信息MIl_i如前所述那樣、被登記到表TBL_1具有的葉頁(yè)LP_k (I)的扇區(qū)ST_i (S卩,除了扇區(qū)ST_0外的扇區(qū))。管理信息MIl_i包含字段H)。字段H)的長(zhǎng)度為2比特。
[0101]管理信息MI I」的字段H)與管理信息MI1_0同樣地,在設(shè)定使用條目計(jì)數(shù)CNT時(shí)使用。該使用條目計(jì)數(shù)CNT表示在登記管理信息Mil」的扇區(qū)ST_i中在哈希信息的登記時(shí)所使用的條目的數(shù)目。圖7所示的管理信息MI I」的格式也被應(yīng)用于在表TBL_2至TBL_7具有的葉頁(yè)LP_k (2)至LP_k (7)的全部扇區(qū)中登記的管理信息。
[0102]圖8表不圖2所不的兀表206的數(shù)據(jù)結(jié)構(gòu)例。兀表206用于對(duì)大塊進(jìn)行管理,該大塊是指,被寫(xiě)入到通過(guò)按每4K (千)比特劃分邏輯卷而獲得的各區(qū)域(4K比特區(qū)域)的大塊。元表206具有與對(duì)邏輯卷的各個(gè)4K比特區(qū)域(更詳細(xì)而言,在4K比特區(qū)域中保存的大塊)進(jìn)行指示的邏輯地址建立了對(duì)應(yīng)的條目的集合。
[0103]元表206的各條目用于對(duì)在與該條目建立了對(duì)應(yīng)的邏輯地址表示的4K比特區(qū)域中保存的大塊的大塊編號(hào)進(jìn)行登記。即元表206是為了表示寫(xiě)入于各4K比特區(qū)域的大塊而將該4Κ比特區(qū)域的邏輯地址與分配給該大塊的大塊編號(hào)建立了對(duì)應(yīng)的表。因此,重復(fù)管理部201能夠通過(guò)參照元表206來(lái)確定在以目的的邏輯地址所指定的區(qū)域中保存著的大塊。
[0104]圖9表示圖2所示的大塊表207的數(shù)據(jù)結(jié)構(gòu)例。大塊表207具有與大塊編號(hào)建立了對(duì)應(yīng)的條目的集合。大塊表207的各條目用于對(duì)具有與該條目建立了對(duì)應(yīng)的大塊編號(hào)的大塊所涉及的大塊信息進(jìn)行登記。大塊信息包含物理地址及參照計(jì)數(shù)RCNT。
[0105]大塊表207的各條目具有物理地址字段及參照計(jì)數(shù)字段。物理地址字段用于登記物理地址,該物理地址是指,對(duì)具有與具有該物理地址字段的條目(以下,稱(chēng)為對(duì)應(yīng)條目)建立了對(duì)應(yīng)的大塊編號(hào)的大塊的物理位置進(jìn)行指示的物理地址。大塊的物理位置是指,實(shí)際保存有該大塊的HDD/SSD陣列11的記憶區(qū)域的位置。
[0106]參照計(jì)數(shù)字段用于登記參照計(jì)數(shù)RCNT。參照計(jì)數(shù)RCNT表示以與對(duì)應(yīng)條目建立了對(duì)應(yīng)的大塊編號(hào)所確定的大塊(以下,稱(chēng)為對(duì)應(yīng)大塊)與幾個(gè)邏輯地址(4Κ比特區(qū)域)建立了對(duì)應(yīng)。
[0107]例如,在參照計(jì)數(shù)RCNT為“I”的情況下,該參照計(jì)數(shù)RCNT表示對(duì)應(yīng)大塊不會(huì)成為重復(fù)排除的對(duì)象而被寫(xiě)入到HDD/SSD陣列11。換言之,參照計(jì)數(shù)RCNT表示對(duì)應(yīng)大塊僅被寫(xiě)入到邏輯卷內(nèi)的I個(gè)邏輯地址所指示的4Κ比特區(qū)域。與之相對(duì),在參照計(jì)數(shù)RCN為例如“2”的情況下,該參照計(jì)數(shù)RCN表示:通過(guò)重復(fù)排除,雖然在HDD/SSD陣列11中作為實(shí)體寫(xiě)入有I個(gè)大塊,但是該大塊與兩個(gè)邏輯地址建立了對(duì)應(yīng)。換言之,表示從主機(jī)20對(duì)邏輯卷內(nèi)的兩個(gè)邏輯地址所指示的4Κ比特區(qū)域?qū)懭肓司哂邢嗤瑑?nèi)容的大塊。
[0108]接著,參照?qǐng)D10至圖12對(duì)本實(shí)施方式的動(dòng)作進(jìn)行說(shuō)明。圖10是表示用于對(duì)由存儲(chǔ)系統(tǒng)10的存儲(chǔ)控制器12從主機(jī)20接收到數(shù)據(jù)寫(xiě)入請(qǐng)求的情況下執(zhí)行的數(shù)據(jù)寫(xiě)入處理的典型的步驟進(jìn)行說(shuō)明所用的流程圖的一部分的圖。圖11是表示用于對(duì)同數(shù)據(jù)寫(xiě)入處理的典型的步驟進(jìn)行說(shuō)明的流程圖的其他的一部分的圖,圖12是表示用于對(duì)同數(shù)據(jù)寫(xiě)入處理的典型的步驟進(jìn)行說(shuō)明的流程圖的剩余部分的圖。
[0109]這里,設(shè)從主機(jī)20經(jīng)由網(wǎng)絡(luò)30對(duì)存儲(chǔ)系統(tǒng)10發(fā)送了對(duì)文件的寫(xiě)入進(jìn)行指定的數(shù)據(jù)寫(xiě)入請(qǐng)求(即,文件寫(xiě)入請(qǐng)求)。并且,設(shè)存儲(chǔ)系統(tǒng)10的存儲(chǔ)控制器12接收到來(lái)自主機(jī)20的文件寫(xiě)入請(qǐng)求。
[0110]于是,存儲(chǔ)控制器12的分割部200例如按每4Κ比特對(duì)以文件寫(xiě)入請(qǐng)求所指定的文件(即文件數(shù)據(jù))進(jìn)行劃分。由此,分割部200將所指定的文件分割成具有4Κ比特尺寸的多個(gè)大塊(步驟SI)。即重復(fù)管理部201從所指定的文件取得構(gòu)成該文件的多個(gè)大塊。此夕卜,在所指定的文件的尺寸為4Κ比特的情況下,分割部200取得該文件本身作為I個(gè)大塊。在此,大塊的尺寸無(wú)需為固定長(zhǎng)。即大塊的尺寸也可以是可變長(zhǎng)。
[0111]重復(fù)管理部201將所取得的大塊的數(shù)設(shè)定為變量N (步驟S2)。在此,將所取得的N個(gè)大塊標(biāo)記為大塊C_1至C_N。哈希生成部203用被稱(chēng)為例如“SHA-256”的第I哈希函數(shù)計(jì)算大塊c_l至C_N的哈希值(即第一階段哈希值)H1 (C_l)至Hl (C_N)(步驟S3)。第一階段哈希值Hl (C_l)至Hl (C_N)分別以32比特表示。
[0112]接著,哈希生成部203用第2哈希函數(shù)計(jì)算第一階段哈希值Hl (C_l)至Hl (C_N)的哈希值(即第二階段哈希值)H2 (C_l)至H2 (C_N)(步驟S4)。如前所述,第2哈希函數(shù)是用質(zhì)數(shù)16,777,213作為除數(shù)的除法函數(shù)。即哈希生成部203將通過(guò)以質(zhì)數(shù)16,777,213除第一階段哈希值Hl (C_l)至Hl (C_N)而取得的余數(shù)決定為第二階段哈希值H2 (C_l)至 H2 (C_N)。
[0113]接著,重復(fù)管理部201將在指定通過(guò)步驟SI取得的N個(gè)大塊中的一個(gè)大塊時(shí)所用的變量η設(shè)定為初始值I (步驟S5)。然后,重復(fù)管理部201從通過(guò)步驟SI取得的N個(gè)大塊C_1至C_N中選擇第η個(gè)大塊C_n (步驟S6)。
[0114]接著,重復(fù)判定部202執(zhí)行哈希值搜索處理,該哈希值搜索處理用于從哈希表205搜索與通過(guò)重復(fù)管理部201所選擇的大塊C_n的第一階段哈希值Hl (C_n) 一致的第一階段哈希值(步驟S7)。在該哈希值搜索處理中,重復(fù)判定部202依次比較通過(guò)步驟S4計(jì)算出的大塊C_n的第二階段哈希值H2 (C_n)和屬于建立有對(duì)應(yīng)的組并且被登記于哈希表205的第一階段哈希值。通過(guò)該比較,重復(fù)判定部202搜索與第一階段哈希值Hl (C_n)—致的第一階段哈希值。該哈希值搜索處理的詳細(xì)后述。
[0115]重復(fù)判定部202基于哈希值搜索處理的結(jié)果,判定與所選擇的大塊C_n的第一階段哈希值Hl (C_n)—致的第一階段哈希值是否存在于哈希表205 (步驟S8)。重復(fù)管理部201基于該重復(fù)判定部202的判定的結(jié)果,進(jìn)入到步驟S9或步驟S16。
[0116]如果與所選擇的大塊C_n的第一階段哈希值Hl(C_n)—致的第一階段哈希值不存在(步驟S8的否),則重復(fù)管理部201判定為具有與大塊C_n相同內(nèi)容的大塊未保存于HDD/SSD陣列11。此情況下,重復(fù)管理部201進(jìn)入到步驟S9。
[0117]在步驟S9中,重復(fù)管理部201對(duì)大塊(:_11賦予大塊編號(hào)0從:_11。在本實(shí)施方式中,賦予時(shí)序的大塊編號(hào)。通過(guò)步驟S9對(duì)大塊C_n賦予的大塊編號(hào)CNC_n通過(guò)對(duì)已賦予其他大塊的最新的大塊編號(hào)加I而獲得。為此,例如HDD123中保存最新的大塊編號(hào)(或接著應(yīng)當(dāng)賦予的大塊編號(hào))。該最新的大塊編號(hào)從HDD123載入到存儲(chǔ)器122的工作區(qū)域122c來(lái)使用。
[0118]此外,通過(guò)從開(kāi)頭條目起依次參照大塊表207的條目,重復(fù)管理部201也能夠取得最新的大塊編號(hào)。另外,重復(fù)管理部201也可以使用對(duì)與接著應(yīng)當(dāng)賦予的大塊編號(hào)建立對(duì)應(yīng)的大塊表207的條目進(jìn)行指示的下一條目指針。重復(fù)管理部201能夠基于該下一條目指針,決定對(duì)于大塊C_n賦予的大塊編號(hào)CNC_n。
[0119]在對(duì)大塊C_n賦予大塊編號(hào)CNC_n時(shí),訪問(wèn)控制器204將該大塊C_n寫(xiě)入到HDD/SSD陣列11內(nèi)的空的記憶區(qū)域(步驟S10)。接著,重復(fù)管理部201在與大塊C_n的第二階段哈希值H2 (C-n)建立了對(duì)應(yīng)的哈希表205內(nèi)的葉頁(yè)LP_k (h)中登記大塊C_n的哈希信息HIC_n (步驟S11)。該哈希信息HIC_n包含大塊C_n的第一階段哈希值Hl (C_n)及該大塊C_n的大塊編號(hào)的對(duì)。
[0120]LP_k (h)如后所述那樣、表示通過(guò)哈希值搜索處理(步驟S7)最后搜索到哈希值的葉頁(yè)。在此,LP_k (h)中的k表示用作組索引的第二階段哈希值H2 (C-n)。另外,LP_k(h)中的h表示葉頁(yè)LP_k (h)包含于第h級(jí)的表TBL_h。S卩,表示LP_k (h)是在第h級(jí)的表TBL_h包含的第k個(gè)葉頁(yè)。
[0121]關(guān)于步驟Sll的詳細(xì),以下進(jìn)行說(shuō)明。首先,設(shè)最后搜索到哈希值的葉頁(yè)LP_k(h)的扇區(qū)及該扇區(qū)的條目分別是該葉頁(yè)LP_k(h)的第i個(gè)扇區(qū)ST_i及該第i個(gè)扇區(qū)ST_i的第j個(gè)條目。此情況下,重復(fù)判定部202對(duì)葉頁(yè)LP_k (h)的第i個(gè)扇區(qū)ST_i內(nèi)的第j +I個(gè)條目登記大塊C_n的哈希信息HIC_n。
[0122]另外,重復(fù)管理部201使在扇區(qū)ST_i中包含的管理信息中的使用條目計(jì)數(shù)CNT僅增加I。并且,重復(fù)管理部201使在葉頁(yè)LP_k (I)的開(kāi)頭的扇區(qū)ST_0中包含的管理信息MI1_0中的使用條目計(jì)數(shù)CNTh僅增加I。該管理信息MI1_0如后所述那樣、不僅保存于葉頁(yè)LP_k (I)的開(kāi)頭的扇區(qū)ST_0,也保存于工作區(qū)域122c。
[0123]在本實(shí)施方式中,在工作區(qū)域122c中保存的管理信息MI1_0中的使用條目計(jì)數(shù)CNTh增加。在該工作區(qū)域122c保存的管理信息MI1_0在適當(dāng)?shù)臅r(shí)機(jī)被在HDD123中保存的葉頁(yè)LP_k (I)的開(kāi)頭的扇區(qū)ST_0的管理信息MI1_0例如覆蓋。適當(dāng)?shù)臅r(shí)機(jī)是指,例如存儲(chǔ)系統(tǒng)10不忙碌的情況或者存儲(chǔ)系統(tǒng)10的電源被切斷前的時(shí)機(jī)。
[0124]另外,設(shè)第i個(gè)扇區(qū)ST_i的第j個(gè)條目是該第i個(gè)扇區(qū)的最終條目(在此,i =11)。此情況下,重復(fù)判定部202在葉頁(yè)LP_k (h)的第“i + I”個(gè)扇區(qū)ST_ (i + 1)內(nèi)的開(kāi)頭條目中登記大塊C_n的哈希信息HIC_n。
[0125]另外,重復(fù)管理部201使在扇區(qū)ST_ (i + 1)中包含的管理信息中的使用條目計(jì)數(shù)CNT僅增加I。并且,重復(fù)管理部201使管理信息MI1_0中的使用條目計(jì)數(shù)CNTh僅增加
1
[0126]接著,設(shè)最后搜索到哈希值的葉頁(yè)LP_k (h)內(nèi)的條目是該葉頁(yè)LP_k (h)的最終的條目(更詳細(xì)而言,葉頁(yè)LP_k (h)的最終的扇區(qū)內(nèi)的最終的條目)。S卩,設(shè)葉頁(yè)LP_k (h)的全部條目被使用,該葉頁(yè)LP_k (h)內(nèi)沒(méi)有空條目。此情況下,重復(fù)管理部201與上述的說(shuō)明不同地、對(duì)在第“h+Ι”級(jí)的表TBL_ (h+1)中包含的第k個(gè)葉頁(yè)LP_k (h+1)的開(kāi)頭的扇區(qū)ST_0 (更詳細(xì)而言,葉頁(yè)LP_k (h+1)的開(kāi)頭的扇區(qū)ST_0內(nèi)的開(kāi)頭的條目)登記大塊C_n的哈希信息HIC_n。
[0127]另外,重復(fù)管理部201使葉頁(yè)LP_k (h+1)的開(kāi)頭的扇區(qū)ST_0中包含的管理信息中的使用條目計(jì)數(shù)CNT僅增加I。并且,重復(fù)管理部201使管理信息MI 1_0中的使用條目計(jì)數(shù)CNT (h+Ι)僅增加I。
[0128]另外,重復(fù)管理部201執(zhí)行步驟Sll后進(jìn)入到步驟S12。在步驟S12中,重復(fù)管理部201取得對(duì)所選擇的大塊C_n的邏輯卷內(nèi)的位置進(jìn)行表示的邏輯地址。該邏輯地址通過(guò)對(duì)由來(lái)自主機(jī)20的文件寫(xiě)入請(qǐng)求指定的邏輯地址(文件的開(kāi)頭地址)加4K (B卩,4,096) X(η-1)而取得。在步驟S12中重復(fù)管理部201進(jìn)一步在與所取得的邏輯地址建立了對(duì)應(yīng)的兀表206的條目中登記對(duì)所選擇的大塊C_n賦予的大塊編號(hào)CNC_n。
[0129]重復(fù)管理部201執(zhí)行步驟S12后進(jìn)入到步驟S13。在步驟S13中,首先,重復(fù)管理部201選擇與對(duì)所選擇的大塊C_n賦予的大塊編號(hào)CNC_n建立了對(duì)應(yīng)的大塊表207的條目。在步驟S13中,重復(fù)管理部201還在所選擇的條目中登記所選擇的大塊C_n所涉及的大塊信息CIC_n。該大塊信息CIC_n包含寫(xiě)入了所選擇的大塊C_n的HDD/SSD陣列11內(nèi)的記憶區(qū)域的物理地址及參照計(jì)數(shù)RCN。參照計(jì)數(shù)RCN的值為“ I ”。
[0130]重復(fù)管理部201執(zhí)行步驟S13后進(jìn)入到步驟S14。在步驟S14中,重復(fù)管理部201使變量η增加I。并且,重復(fù)管理部201判定增加后的變量η是否超過(guò)通過(guò)步驟S2所設(shè)定的大塊數(shù)N(步驟S15)。如果增加后的變量η未超過(guò)大塊數(shù)N(步驟S15的否),則重復(fù)管理部201為了對(duì)在由來(lái)自主機(jī)20的文件寫(xiě)入請(qǐng)求所指定的文件中包含的下一大塊的寫(xiě)入進(jìn)行處理,返回到步驟S6。與之相對(duì),如果增加后的變量η超過(guò)了大塊數(shù)N (步驟S15的是),則重復(fù)管理部201判定為結(jié)束了在通過(guò)來(lái)自主機(jī)20的文件寫(xiě)入請(qǐng)求而指定的文件中包含的全部大塊的寫(xiě)入。此情況下,以圖10至圖12的流程圖表示的數(shù)據(jù)寫(xiě)入處理結(jié)束。
[0131]接著,對(duì)重復(fù)判定部202在步驟S8中判定為與所選擇的大塊C_n的第一階段哈希值Hl (C_n)—致的第一階段哈希值存在的情況的動(dòng)作進(jìn)行說(shuō)明。這樣,在步驟S8的判定為“是”的情況下,重復(fù)管理部201判定為具有與所選擇的大塊C_n相同內(nèi)容的大塊已經(jīng)保存于HDD/SSD陣列11。在此,將已經(jīng)保存于HDD/SSD陣列11并且具有與大塊C_n相同內(nèi)容的大塊標(biāo)記為大塊C_x。
[0132]在步驟S8的判定為”是”的情況下,為了排除具有相同內(nèi)容的多個(gè)大塊重復(fù)并且被保存于HDD/SSD陣列11的情況,重復(fù)管理部201進(jìn)入到步驟S16。在步驟S16中,重復(fù)管理部201抑制訪問(wèn)控制器204將所選擇的大塊C_n寫(xiě)入到HDD/SSD陣列11的動(dòng)作。
[0133]接著,重復(fù)管理部201將大塊C_x的大塊編號(hào)作為所選擇的大塊C_n的大塊編號(hào)CNC_n,并登記到元表206中(步驟S17)。由此,元表206中,相同的大塊編號(hào)被登記到元表206內(nèi)的至少兩個(gè)條目。重復(fù)管理部201為了確定應(yīng)當(dāng)?shù)怯浽摯髩K編號(hào)的元表206的條目,通過(guò)與步驟S12同樣的方法取得對(duì)所選擇的大塊C_n的邏輯卷內(nèi)的位置進(jìn)行表示的邏輯地址。
[0134]重復(fù)管理部201執(zhí)行步驟S17后進(jìn)入到步驟S18。在步驟S18中,首先,重復(fù)管理部201參照在與所選擇的大塊C_n的大塊編號(hào)(即,大塊C_x的大塊編號(hào))建立了對(duì)應(yīng)的大塊表207的條目中登記著的大塊信息CI_Cn。在步驟S18中,重復(fù)管理部201還使所參照的大塊信息中的參照計(jì)數(shù)RCNT增加I。由此,增加后的參照計(jì)數(shù)RCNT表示:雖然在HDD/SSD陣列11中作為實(shí)體寫(xiě)入I個(gè)大塊,但是具有相同內(nèi)容的RCNT個(gè)大塊被寫(xiě)入到邏輯卷內(nèi)的RCNT個(gè)4K比特區(qū)域。
[0135]重復(fù)管理部201執(zhí)行步驟S18后進(jìn)入到步驟S19。在步驟S19中,首先,重復(fù)管理部201取得對(duì)寫(xiě)有大塊C_x(S卩,具有與所選擇的大塊C_n相同內(nèi)容的大塊C_x)的HDD/SSD陣列11的記憶區(qū)域進(jìn)行指示的物理地址。該物理地址包含于通過(guò)步驟S18參照的大塊信息。在步驟S19中,重復(fù)管理部201進(jìn)一步將所取得的物理地址分配至所選擇的大塊C_n的邏輯地址。具體而言,重復(fù)管理部201在未圖示的地址轉(zhuǎn)換表中登記對(duì)所選擇的大塊C_η的邏輯地址與所取得的物理地址的對(duì)應(yīng)進(jìn)行表示的地址轉(zhuǎn)換信息(即,映射信息)。重復(fù)管理部201執(zhí)行步驟S19后進(jìn)入到步驟S14。以后的動(dòng)作與重復(fù)管理部201從步驟S13進(jìn)入到步驟S14的情況相同。
[0136]此外,步驟S19未必是必要的。例如,重復(fù)管理部201能夠如以下所述那樣、不用地址轉(zhuǎn)換表就將由主機(jī)20所指定的邏輯地址轉(zhuǎn)換為物理地址。重復(fù)管理部201首先基于由主機(jī)20所指定的邏輯地址參照元表206,由此取得在與該邏輯地址建立了對(duì)應(yīng)的條目中登記的大塊編號(hào)。接著,重復(fù)管理部201基于所取得的大塊編號(hào)參照大塊表207,由此取得在與該大塊建立了對(duì)應(yīng)的條目中登記的物理地址。
[0137]接著,參照?qǐng)D13及圖14對(duì)本實(shí)施方式中的哈希值搜索處理(步驟S7)的詳細(xì)進(jìn)行說(shuō)明。圖13是表示用于對(duì)哈希值搜索處理的典型的步驟進(jìn)行說(shuō)明的流程圖的一部分的圖。圖13是表示用于對(duì)同哈希值搜索處理的典型的步驟進(jìn)行說(shuō)明的流程圖的剩余部分的圖。
[0138]首先,重復(fù)判定部202將變量h設(shè)定為初始值I (步驟S21)。變量h表示哈希表205內(nèi)的第h級(jí)的表TBL_h。在步驟S21中,重復(fù)判定部202還將變量k設(shè)定為所選擇的大塊C_n的第二階段哈希值H2 (C_n)。變量k表示包含于表TBL_h并且與所選擇的大塊C_η的第二階段哈希值Η2 (C_n)建立了對(duì)應(yīng)的第k個(gè)葉頁(yè)LP_k (h)。在步驟S21中,重復(fù)判定部202進(jìn)一步將變量i及j任一個(gè)都設(shè)定為初始值O。變量i表示在基于變量h及k而確定的葉頁(yè)LP_k (h)中包含的第i個(gè)扇區(qū)ST_i。變量j表示扇區(qū)ST_i內(nèi)的第j個(gè)條目。
[0139]接著,重復(fù)判定部202從哈希表205中選擇第h級(jí)的表TBL_h (步驟S22)。在變量h為I的本實(shí)施方式中,選擇第I級(jí)的表TBL_1作為表TBL_h。接著,重復(fù)判定部202選擇包含于所選擇的表TBL_h并且與所選擇的大塊C_n的第二階段哈希值H2 (C_n) = k建立了對(duì)應(yīng)的第k個(gè)葉頁(yè)LP_k (h)(步驟S23)。在此,因?yàn)閔為1,所以選擇表TBL_1的第k個(gè)葉頁(yè)LP_k (I)作為葉頁(yè)LP_k (h)。在步驟S23中,重復(fù)判定部202從HDD123讀出所選擇的葉頁(yè)LP_k (h),將該讀出的葉頁(yè)LP_k (h)保存于存儲(chǔ)器122的表區(qū)域122b。即重復(fù)判定部202將所選擇的葉頁(yè)LP_k (h)載入于存儲(chǔ)器122的表區(qū)域122b。
[0140]接著,重復(fù)判定部202選擇所選擇的(所載入的)葉頁(yè)LP_k (h)(在此,葉頁(yè)LP_k
(I))的第i個(gè)扇區(qū)ST_i (步驟S24)。在此,作為第i個(gè)扇區(qū)ST_i,選擇開(kāi)頭(第O個(gè))扇區(qū)ST_0o
[0141]重復(fù)判定部202選擇了葉頁(yè)LP_k (I) (S卩,存儲(chǔ)器122的表區(qū)域122b中所保存的葉頁(yè)LP_k (O)的開(kāi)頭的扇區(qū)ST_0時(shí),將該扇區(qū)ST_0中包含的管理信息MI1_0也保存于例如存儲(chǔ)器122的工作區(qū)域122c。由此,重復(fù)判定部202僅參照管理信息MI1_0中的使用條目計(jì)數(shù)CNT2至CNT7,就能夠取得表TBL_2至TBL_7的葉頁(yè)LP_k (2)至LP_k (7)內(nèi)分別使用著的條目的數(shù)目。即,重復(fù)判定部202能夠在從HDD123讀出葉頁(yè)LP_k (2)至LP_k
(7)前取得該葉頁(yè)LP_k (2)至LP_k (7)內(nèi)分別使用著的條目的數(shù)目。另外,重復(fù)判定部202也能夠基于管理信息MI 1_0中的使用條目計(jì)數(shù)CNT1,來(lái)取得葉頁(yè)LP_k (I)內(nèi)使用著的條目的數(shù)目。
[0142]因此,重復(fù)判定部202能夠基于葉頁(yè)LP_k (I)至LP_k (7)內(nèi)分別使用著的條目的數(shù)目(即,管理信息MI 1_0中的使用條目計(jì)數(shù)CNTl至CNT7),確定使用著的條目的數(shù)目為零的葉頁(yè)。在此,設(shè)使用條目計(jì)數(shù)CNTl至CNT4非零,并設(shè)使用條目計(jì)數(shù)CNT5至CNT7為零。此情況下,重復(fù)判定部202能夠決定為充其量將葉頁(yè)LP_k (I)至LP_k (4)作為對(duì)象進(jìn)行哈希值搜索即可。將與該葉頁(yè)有關(guān)的最大的搜索范圍標(biāo)記為hmax。在該例中,hmax為4,表示將葉頁(yè)LP_k (I)作為開(kāi)頭的四個(gè)葉頁(yè)為最大的搜索范圍。
[0143]同樣地,重復(fù)判定部202能夠基于管理信息MI1_0中的使用條目計(jì)數(shù)CNTh (h =1,2,…,7)確定在葉頁(yè)LP_k (h)中使用著的扇區(qū)的數(shù)目。例如,葉頁(yè)LP_k (I) (h = I)的各扇區(qū)的條目的數(shù)目是12。因此,使用條目計(jì)數(shù)CNTl (h = I)為例如16的情況下,重復(fù)判定部202能夠確定為在葉頁(yè)LP_k (I)中使用著的扇區(qū)的數(shù)目為2。此情況下,重復(fù)判定部202能夠決定為充其量將葉頁(yè)LP_k (I)內(nèi)的扇區(qū)ST_0及ST_1作為對(duì)象進(jìn)行哈希值搜索即可。將與該扇區(qū)有關(guān)的最大的搜索范圍標(biāo)記為imax (h,CNTl)。imax (h,CNTl)是通過(guò)從在葉頁(yè)LP_k (I)中使用著的扇區(qū)的數(shù)目減去I而獲得的值。
[0144]重復(fù)判定部202執(zhí)行步驟S24后進(jìn)入到步驟S25。在步驟S25中,重復(fù)判定部202從所選擇的扇區(qū)ST_i的第j個(gè)條目中讀出第一階段哈希值Hl (C_x)。接著,重復(fù)判定部202對(duì)所讀出的第一階段哈希值Hl (C_x)和通過(guò)步驟SI計(jì)算出的大塊C_n的第一階段哈希值Hl ((:_11)進(jìn)行比較(步驟326)。然后,重復(fù)判定部202判定第一階段哈希值Hl (C_x)與第一階段哈希值Hl (C_n)是否相等(步驟S27)。
[0145]如果步驟S27的判定為“是”,則重復(fù)判定部202取得包含于扇區(qū)ST_i的第j個(gè)條目并且與第一階段哈希值Hl (C_x)成對(duì)的大塊編號(hào)(步驟S28)。在步驟S27中,重復(fù)判定部202將所取得的大塊編號(hào)作為具有與所選擇的大塊C_n相同內(nèi)容的大塊C_x的大塊編號(hào),暫時(shí)保存于例如存儲(chǔ)器122的工作區(qū)域122c。由此,哈希值搜索處理(步驟S7)結(jié)束,重復(fù)判定部202進(jìn)入步驟S8。暫時(shí)保存于工作區(qū)域122c的大塊C_x的大塊編號(hào)在步驟S17中使用。
[0146]另一方面,如果步驟S27的判定為“否”,則重復(fù)判定部202為了取得應(yīng)當(dāng)與第一階段哈希值Hl (C_n)進(jìn)行比較的下一第一階段哈希值而進(jìn)入到步驟S29。在步驟S29中,重復(fù)判定部202使變量j僅增加I。接著,重復(fù)判定部202判定增加后的變量j是否超過(guò)變量j的最大值jmax (步驟S30)。在本實(shí)施方式中,變量j的最大值jmax為11。
[0147]如果步驟S30的判定為“否”,則重復(fù)判定部202進(jìn)入到步驟S31。在步驟S31中,重復(fù)判定部202判定變量j是否超過(guò)jmax (CNT)0 jmax (CNT)是通過(guò)使在葉頁(yè)LP_k (h)的扇區(qū)ST_i中包含的管理信息MIh_i中的使用條目計(jì)數(shù)CNT減I而獲得的值(即,“CNT-1”)。BP, jmax (CNT)表示葉頁(yè)LP_k (h)的扇區(qū)ST_i中的條目涉及的最大的搜索范圍。
[0148]如果變量j超過(guò)加&1(0見(jiàn)')(即“0見(jiàn)'-1”)(步驟S31的是),則重復(fù)判定部202判定為應(yīng)當(dāng)與第一階段哈希值Hl (C_n)進(jìn)行比較的新的第一階段哈希值不存在于哈希表205,因此第一階段哈希值Hl (C_n)與哈希表205中登記著的全部第一階段哈希值不一致。此情況下,重復(fù)判定部202使哈希值搜索處理結(jié)束。與之相對(duì),如果變量j未超過(guò)jmax(CNT)(步驟S31的否),則重復(fù)判定部202為了從葉頁(yè)LP_k (h)的扇區(qū)ST_i內(nèi)的下一條目中讀出第一階段哈希值而返回到步驟S25。
[0149]另一方面,如果步驟S30的判定為“是”,則重復(fù)判定部202使變量i增加I (步驟S32)。然后,重復(fù)判定部202判定增加后的變量i是否超過(guò)變量i的最大值imax (h)(步驟S33)。變量i的最大值imax (h)在變量h為例如I時(shí)為7 (8_1 = 7),在變量h為例如2 時(shí)為 15 (16-1)。
[0150]如果步驟S33的判定為“否”,則重復(fù)判定部202進(jìn)入到步驟S34。在步驟S34中,重復(fù)判定部202判定變量i是否超過(guò)imax (h,CNTh)。imax (h,CNTh)是如前所述那樣、通過(guò)從在葉頁(yè)LP_k (h)中使用著的扇區(qū)的數(shù)目減去I而獲得的值。
[0151]如果變量i超過(guò)imax (h,CNTh)(步驟S34的是),則重復(fù)判定部202判定為應(yīng)當(dāng)與第一階段哈希值Hl (C_n)進(jìn)行比較的新的第一階段哈希值在哈希表205中不存在,因此第一階段哈希值Hl (C_n)與哈希表205中登記著的全部第一階段哈希值不一致。此情況下,重復(fù)判定部202使哈希值搜索處理結(jié)束。與之相對(duì),如果變量i超過(guò)imax (h,CNTh)(步驟S34的否),則重復(fù)判定部202為了選擇葉頁(yè)LP_k (h)(在此,LP_k (I))的下一扇區(qū)而返回到步驟S24。
[0152]另一方面,如果步驟S33的判定為“是”,則重復(fù)判定部202使變量h僅增加I (步驟S35)。然后,重復(fù)判定部202判定增加后的變量h是否超過(guò)hmax (步驟S36)。hmax如前所述那樣、基于葉頁(yè)LP_k (I)的開(kāi)頭的扇區(qū)ST_0中包含的管理信息MI1_0中的使用條目計(jì)數(shù)CNTl至CNT7而決定。
[0153]如果步驟S36的判定為“否”,則重復(fù)判定部202為了從哈希表205中選擇下一表及該下一表內(nèi)的下一葉頁(yè)而返回到步驟S22。與之相對(duì),如果步驟S36的判定為“是”,則重復(fù)判定部202判定為應(yīng)當(dāng)與第一階段哈希值Hl (C_n)進(jìn)行比較的新的第一階段哈希值在哈希表205中不存在,因此第一階段哈希值Hl (C_n)與哈希表205中登記著的全部第一階段哈希值不一致。此情況下,重復(fù)判定部202使哈希值搜索處理結(jié)束。
[0154]接著,參照?qǐng)D15至圖18,對(duì)通過(guò)主機(jī)20請(qǐng)求的文件寫(xiě)入的例子進(jìn)行說(shuō)明。圖15表示由從主機(jī)20依次發(fā)送的三個(gè)文件寫(xiě)入請(qǐng)求所指定的文件H)至F2與通過(guò)該文件H)至F2被每隔4K比特劃分而取得的大塊的關(guān)系的例子。圖16表示哈希表205中包含的例如第I級(jí)的表TBL_1的內(nèi)容的變化的例子。圖17表示元表206的內(nèi)容的變化的例子。圖18表示大塊表207的內(nèi)容的變化的例子。
[0155]首先,設(shè)存儲(chǔ)系統(tǒng)10的運(yùn)用的開(kāi)始后,從主機(jī)20對(duì)存儲(chǔ)系統(tǒng)10的存儲(chǔ)控制器12請(qǐng)求將圖15 (A)所示的16K比特的文件H)寫(xiě)入邏輯卷的從邏輯地址LaO開(kāi)始的區(qū)域。此情況下,存儲(chǔ)控制器12的分割部200將文件H)分割成四個(gè)大塊CaO、Cal、Ca2及Ca3。應(yīng)當(dāng)寫(xiě)入大塊Cal、Ca2及Ca3的邏輯地址La1、La2及La3分別是LaO + 4K、LaO + 8K、LaO +12K。大塊CaO、Cal、Ca2及Ca3分別具有數(shù)據(jù)A、B、C及D。哈希生成部203計(jì)算大塊CaO、Cal、Ca2及Ca3的哈希值(第一階段哈希值)H CA), H (B)、H (C)及H (D)0
[0156]在此,設(shè)具有與大塊CaO、Cal、Ca2及Ca3相同內(nèi)容的其他的大塊不存在。此情況下,訪問(wèn)控制器204將大塊CaO、Cal、Ca2及Ca3寫(xiě)入HDD/SSD陣列11的空區(qū)域、例如以物理地址PaO、Pal、Pa2及Pa3指定的物理區(qū)域。另外,重復(fù)管理部201對(duì)大塊CaO、Cal、Ca2及Ca3賦予例如大塊編號(hào)0、1、2及3。
[0157]重復(fù)管理部201將第一階段哈希值H (A)、H (B)、H (C)及H (D)與大塊編號(hào)O、
1、2及3的各個(gè)對(duì)例如如圖16 (A)所示那樣、登記到表TBL_1。此外,在圖16 (A)中省略,但這些對(duì)被登記到與哈希值H CA), H (B)、H (C)、H (D)各自的第二階段哈希值建立了對(duì)應(yīng)的表TBL_1的葉頁(yè)。
[0158]另外,重復(fù)管理部201如圖17 (A)所示那樣、在與邏輯地址LaO、La1、La2及La3分別建立了對(duì)應(yīng)的元表206的條目中登記大塊CaO、Cal、Ca2及Ca3的大塊編號(hào)0、1、2及
3。另外,重復(fù)管理部201如圖18 (A)所示那樣、在與大塊CaO、Cal、Ca2及Ca3的大塊編號(hào)
0、1、2及3分別建立了對(duì)應(yīng)的大塊表207的條目中登記寫(xiě)入有大塊Ca0、Cal、Ca2及Ca3的物理區(qū)域的物理地址PaO、Pal、Pa2及Pa3。另外,重復(fù)管理部201在大塊表207中,對(duì)與物理地址PaO、Pal、Pa2及Pa3分別成對(duì)的參照計(jì)數(shù)RCNT任一個(gè)都設(shè)定I。
[0159]接著,設(shè)從主機(jī)20對(duì)存儲(chǔ)控制器12請(qǐng)求將圖15 (B)所示的12K比特的文件Fl寫(xiě)入邏輯卷的從邏輯地址LbO開(kāi)始的區(qū)域。此情況下,存儲(chǔ)控制器12的分割部200將文件Fl分割為三個(gè)大塊Cb0、Cbl及Cb2。應(yīng)當(dāng)寫(xiě)入大塊Cbl及Cb2的邏輯地址Lbl及Lb2分別是LbO + 4K及LbO + 8K。大塊CbO、Cbl及Cb2分別具有數(shù)據(jù)X、Y及A。哈希生成部203計(jì)算大塊CbO、Cbl及Cb2的哈希值(第一階段哈希值)H (X)、H (Y)及H (A)0
[0160]在此,具有與大塊CbO及Cbl相同內(nèi)容的其他的大塊不存在,但具有與大塊Cb2相同內(nèi)容(A)的大塊CaO存在。此情況下,訪問(wèn)控制器204將大塊CbO及Cbl寫(xiě)入HDD/SSD陣列11的空區(qū)域、例如通過(guò)物理地址PbO及Pbl指定的物理區(qū)域。另一方面,關(guān)于大塊Cb2,為了排除與大塊CaO的重復(fù),重復(fù)管理部201抑制訪問(wèn)控制器204向HDD/SSD陣列11寫(xiě)入該大塊Cb2。另外,重復(fù)管理部201對(duì)大塊CbO及Cbl賦予后續(xù)于最新的大塊編號(hào)3的大塊編號(hào)4及5。另外,對(duì)具有與大塊CaO相同內(nèi)容(A)的大塊Cb2的大塊編號(hào)使用該大塊CaO的大塊編號(hào)O。
[0161]重復(fù)管理部201例如如圖16 (B)所示那樣、將第一階段哈希值H (X)及H (Y)與大塊編號(hào)4及5的各自的對(duì)登記到表TBL_1。另外,重復(fù)管理部201如圖17 (B)所示那樣、在與邏輯地址LbO、Lbl及Lb2分別建立了對(duì)應(yīng)的元表206的條目中登記大塊CbO、Cbl及Cb2的大塊編號(hào)4、5及O。
[0162]另外,重復(fù)管理部201如圖18 (B)所示那樣、在與大塊CbO及Cbl的大塊編號(hào)4及5分別建立了對(duì)應(yīng)的大塊表207的條目中登記寫(xiě)入有大塊CbO及Cbl的物理區(qū)域的物理地址PbO及Pb I。另外,重復(fù)管理部201在大塊表207中,對(duì)與物理地址PbO及Pbl分別成對(duì)的參照計(jì)數(shù)RCNT任一個(gè)都設(shè)定I。另外,重復(fù)管理部201將與具有與大塊Cb2相同內(nèi)容(A)的大塊CaO的大塊編號(hào)O建立了對(duì)應(yīng)的大塊表207的條目的參照計(jì)數(shù)RCNT從如圖18(A)所示的I更新為如圖18 (B)所示的2。
[0163]接著,設(shè)從主機(jī)20對(duì)存儲(chǔ)控制器12請(qǐng)求將如圖15 (C)所示的12K比特的文件F2寫(xiě)入邏輯卷的從邏輯地址LcO開(kāi)始的區(qū)域。此情況下,存儲(chǔ)控制器12的分割部200將文件F2分割為三個(gè)大塊CcO、Ccl及Cc2。應(yīng)當(dāng)寫(xiě)入大塊Ccl及Cc2的邏輯地址Lcl及Lc2分別是LcO + 4K及LcO + 8K。大塊CcO、Ccl及Cc2分別具有數(shù)據(jù)E、F及A。哈希生成部203接收大塊CcO、Ccl及Cc2的哈希值(第一階段哈希值)H CE), H (F)及H (A)0
[0164]在此,具有與大塊CcO及Ccl相同內(nèi)容的其他的大塊不存在,但具有與大塊Cc2相同內(nèi)容(A)的大塊CaO存在。此情況下,訪問(wèn)控制器204將大塊CcO及Ccl寫(xiě)入HDD/SSD陣列11的空區(qū)域、例如通過(guò)物理地址PcO及Pcl指定的物理區(qū)域。另一方面,關(guān)于大塊Cc2,為了排除與大塊CaO的重復(fù),重復(fù)管理部201抑制訪問(wèn)控制器204對(duì)HDD/SSD陣列11寫(xiě)入該大塊Cc2。另外,重復(fù)管理部201對(duì)大塊CcO及Ccl賦予后續(xù)于最新的大塊編號(hào)6的大塊編號(hào)7及8。另外,在具有與大塊CaO相同內(nèi)容(A)的大塊Cc2的大塊編號(hào)中,使用該大塊CaO的大塊編號(hào)O。
[0165]重復(fù)管理部201例如如圖16 (C)所示那樣、將第一階段哈希值H (E)及H (Y)與大塊編號(hào)6及7的各自的對(duì)登記到表TBL_1。另外,重復(fù)管理部201如圖17 (C)所示那樣、在與邏輯地址LcO、Lcl及Lc2分別建立了對(duì)應(yīng)的元表206的條目中登記大塊CcO、Ccl及Cc2的大塊編號(hào)6、7及O。
[0166]另外,重復(fù)管理部201如圖18 (C)所示那樣、在與大塊CcO及Ccl的大塊編號(hào)6及7分別建立了對(duì)應(yīng)的大塊表207的條目中登記寫(xiě)入了大塊CcO及Ccl的物理區(qū)域的物理地址PcO及Pci。另外,重復(fù)管理部201在大塊表207中,對(duì)與物理地址PcO及Pcl分別成對(duì)的參照計(jì)數(shù)RCNT任一個(gè)都設(shè)定I。另外,重復(fù)管理部201將與具有與大塊Cc2相同內(nèi)容
(A)的大塊CaO的大塊編號(hào)O建立了對(duì)應(yīng)的大塊表207的條目?jī)?nèi)的參照計(jì)數(shù)RCNT從圖18
(B)所示的2更新為圖18(C)所示的3。
[0167]在此,設(shè)從主機(jī)20對(duì)存儲(chǔ)控制器12請(qǐng)求文件Fl的刪除。此情況下,重復(fù)管理部201如圖17 (D)所示那樣、使與邏輯地址b0、bl及b2分別建立了對(duì)應(yīng)的元表206的三個(gè)條目的內(nèi)容無(wú)效化。在圖17 (D)中,為了表示無(wú)效條目,對(duì)相應(yīng)的條目附以斜線。為了進(jìn)行這種無(wú)效化,元表206的各條目的特定的位用作表示該條目的內(nèi)容是否有效的有效位。
[0168]重復(fù)管理部201將與邏輯地址b0、bl及b2分別建立了對(duì)應(yīng)的元表206的三個(gè)條目?jī)?nèi)的各自的有效位任一個(gè)都設(shè)定為表示該條目的內(nèi)容無(wú)效的狀態(tài)(例如“O”)。另外,重復(fù)管理部201將與構(gòu)成被刪除的文件Fl的大塊CbO、Cbl及Cb2的大塊編號(hào)4、5及O分別建立了對(duì)應(yīng)的大塊表207的條目?jī)?nèi)的參照計(jì)數(shù)RCNT從圖18 (C)所示的1、1及3更新為圖18 (D)所示的0、0及2。
[0169]在本實(shí)施方式中,在這種狀態(tài)下新的大塊被寫(xiě)入到HDD/SSD陣列11的情況下,對(duì)該新的大塊賦予通道編號(hào)8。此時(shí),被賦予了通道編號(hào)4及5的有效的大塊不存在。因此,在本實(shí)施方式中,相應(yīng)于存儲(chǔ)控制器12的等待時(shí)間或者來(lái)自主機(jī)20的指示,進(jìn)行碎片消除處理(碎片整理處理;defragmentat1n)。S卩,在HDD/SSD陣列11中保存的有效的大塊按照例如每個(gè)文件、在該HDD/SSD陣列11的物理地址連續(xù)的區(qū)域被進(jìn)行再配置。此時(shí),對(duì)有效的全部大塊重新賦予連續(xù)的通道編號(hào)。與之相應(yīng),哈希表205、元表206及大塊表207也得以更新。
[0170]根據(jù)以上說(shuō)明的至少I(mǎi)個(gè)實(shí)施方式,能夠提供能夠使得用于排除數(shù)據(jù)重復(fù)的哈希表搜索高速化的存儲(chǔ)系統(tǒng)、存儲(chǔ)控制器及方法。
[0171]對(duì)本發(fā)明的幾個(gè)實(shí)施方式進(jìn)行了說(shuō)明,但這些實(shí)施方式作為例子來(lái)提示,無(wú)意限定發(fā)明的范圍。這些新的實(shí)施方式能夠以其他各種方式實(shí)施,在不脫離發(fā)明的主旨的范圍內(nèi),能夠進(jìn)行各種省略、置換、變更。這些實(shí)施方式及其變形包含于發(fā)明的范圍及主旨,并且包含于與權(quán)利要求書(shū)記載的發(fā)明及其等同的范圍。
【權(quán)利要求】
1.一種存儲(chǔ)系統(tǒng),具備: 存儲(chǔ)裝置; 存儲(chǔ)控制器,控制對(duì)所述存儲(chǔ)裝置的訪問(wèn);以及 哈希表,包含具有第I數(shù)目的條目的第I表及具有比所述第I數(shù)目大的第2數(shù)目的條目的第2表, 所述存儲(chǔ)控制器具備: 分割部,將由來(lái)自主計(jì)算機(jī)的寫(xiě)入請(qǐng)求所指定的數(shù)據(jù)分割成多個(gè)大塊; 哈希生成部,基于所述多個(gè)大塊的各自的數(shù)據(jù),計(jì)算所述多個(gè)大塊的各自的具有第I長(zhǎng)度的哈希值; 訪問(wèn)控制器,對(duì)所述存儲(chǔ)裝置寫(xiě)入大塊; 重復(fù)管理部,在所述存儲(chǔ)裝置被寫(xiě)入第I大塊的情況下,將所述第I大塊的第I哈希值與所述第I大塊建立對(duì)應(yīng)并優(yōu)先地登記到所述哈希表的所述第I表;以及 重復(fù)判定部,在計(jì)算出第2大塊的第2哈希值的情況下,使從所述第I表的搜索優(yōu)先來(lái)執(zhí)行從所述哈希表搜索與所述第2哈希值一致的第3哈希值的處理,由此判定具有與所述第2大塊相同內(nèi)容的第3大塊是否保存于所述存儲(chǔ)裝置, 在判定為所述第3大塊保存于所述存儲(chǔ)裝置的情況下,所述重復(fù)管理部抑制所述第2大塊寫(xiě)入所述存儲(chǔ)裝置。
2.如權(quán)利要求1所述的存儲(chǔ)系統(tǒng),其中, 所述第I表包括多個(gè)第I頁(yè),該多個(gè)第I頁(yè)是指,用于基于多個(gè)哈希值將分別具有所述第I長(zhǎng)度的該多個(gè)哈希值分類(lèi)為多個(gè)組并登記的、分別與指示所述多個(gè)組的多個(gè)組索引建立了對(duì)應(yīng)的多個(gè)第I頁(yè), 所述多個(gè)第I頁(yè)分別具有第3數(shù)目的條目, 所述多個(gè)第I頁(yè)的總條目數(shù)與所述第I數(shù)目相等, 所述第2表包括與所述多個(gè)組索引分別建立了對(duì)應(yīng)的多個(gè)第2頁(yè), 所述多個(gè)第2頁(yè)分別具有大于所述第3數(shù)目的第4數(shù)目的條目, 所述多個(gè)第2頁(yè)的總條目數(shù)與所述第2數(shù)目相等, 所述重復(fù)判定部,基于所述第2大塊的所述第2哈希值,確定該第2哈希值屬于的組,優(yōu)先地選擇與所述所確定的組的組索引建立了對(duì)應(yīng)的所述第I頁(yè),從所述所選擇的第I頁(yè)中搜索所述第3哈希值,在無(wú)法從所述所選擇的第I頁(yè)中搜索所述第3哈希值并且至少所述所選擇的第I頁(yè)的所述第3數(shù)目的條目全部被使用的情況下,選擇與所述所確定的組的組索引建立了對(duì)應(yīng)的所述第2頁(yè),從所述所選擇的第2頁(yè)中搜索所述第3哈希值, 所述重復(fù)管理部,在判定為所述第3大塊未保存于所述存儲(chǔ)裝置的情況下,在所述第I頁(yè)及所述第2頁(yè)中的、最后被選擇的頁(yè)中登記所述第I哈希值。
3.如權(quán)利要求2所述的存儲(chǔ)系統(tǒng),其中, 所述哈希生成部,基于具有所述第I長(zhǎng)度的哈希值,計(jì)算具有比所述第I長(zhǎng)度短的第2長(zhǎng)度并且被用作所述組索引的哈希值, 所述重復(fù)判定部,在從所述哈希表中搜索所述第3哈希值的情況下,將基于所述第2哈希值計(jì)算的具有所述第2長(zhǎng)度的第4哈希值作為對(duì)于應(yīng)當(dāng)搜索所述第3哈希值的組進(jìn)行指定的組索引而使用。
4.如權(quán)利要求2所述的存儲(chǔ)系統(tǒng),其中, 所述存儲(chǔ)控制器還具備易失性的存儲(chǔ)器, 所述哈希表保存于所述存儲(chǔ)裝置、或所述存儲(chǔ)控制器具有的本地存儲(chǔ)裝置, 所述多個(gè)第I頁(yè)分別包含管理信息,該管理信息包含該第I頁(yè)內(nèi)使用著的條目的數(shù)目、與該第I頁(yè)所屬的組的組索引建立了對(duì)應(yīng)的所述第2頁(yè)內(nèi)使用著的條目的數(shù)目, 所述重復(fù)判定部,在選擇了所述第I頁(yè)的情況下,將該被選擇的第I頁(yè)載入到所述存儲(chǔ)器,從所述被載入的第I頁(yè)中搜索所述第3哈希值,在無(wú)法從所述被載入的第I頁(yè)中搜索所述第3哈希值并且由所述被載入的第I頁(yè)中包含的所述管理信息所示的所述第2頁(yè)內(nèi)使用著的條目的數(shù)目不為零的情況下,選擇所述第2頁(yè),將該被選擇的第2頁(yè)載入到所述存儲(chǔ)器,從所述被載入的第2頁(yè)搜索所述第3哈希值。
5.一種存儲(chǔ)控制器,控制對(duì)存儲(chǔ)裝置的訪問(wèn),在該存儲(chǔ)控制器中,具備: 分割部,將由來(lái)自主計(jì)算機(jī)的寫(xiě)入請(qǐng)求所指定的數(shù)據(jù)分割成多個(gè)大塊; 哈希生成部,基于所述多個(gè)大塊的各自的數(shù)據(jù),計(jì)算所述多個(gè)大塊的各自的具有第I長(zhǎng)度的哈希值; 訪問(wèn)控制器,對(duì)所述存儲(chǔ)裝置寫(xiě)入大塊; 重復(fù)管理部,在所述存儲(chǔ)裝置被寫(xiě)入第I大塊的情況下,將所述第I大塊的第I哈希值與所述第I大塊建立對(duì)應(yīng),并優(yōu)先地登記到包含第I表及第2表的哈希表中的所述第I表;以及 重復(fù)判定部,在計(jì)算出第2大塊的第2哈希值的情況下,使從所述第I表的搜索優(yōu)先來(lái)執(zhí)行從所述哈希表搜索與所述第2哈希值一致的第3哈希值的處理,由此判定具有與所述第2大塊相同內(nèi)容的第3大塊是否保存于所述存儲(chǔ)裝置, 所述重復(fù)管理部,在判定為所述第3大塊保存于所述存儲(chǔ)裝置的情況下,抑制所述第2大塊被寫(xiě)入到所述存儲(chǔ)裝置, 所述哈希表保存于所述存儲(chǔ)裝置、或所述存儲(chǔ)控制器具有的本地存儲(chǔ)裝置, 所述第I表具有第I數(shù)目的條目, 所述第2表具有大于所述第I數(shù)目的第2數(shù)目的條目。
6.一種方法,應(yīng)用于控制對(duì)存儲(chǔ)裝置的訪問(wèn)的存儲(chǔ)控制器,并且用于基于哈希表排除數(shù)據(jù)的重復(fù), 將由來(lái)自主計(jì)算機(jī)的寫(xiě)入請(qǐng)求所指定的數(shù)據(jù)分割成多個(gè)大塊, 基于所述多個(gè)大塊的各自的數(shù)據(jù),計(jì)算所述多個(gè)大塊的各自的具有第I長(zhǎng)度的哈希值, 在所述存儲(chǔ)裝置被寫(xiě)入第I大塊的情況下,將所述第I大塊的第I哈希值與所述第I大塊建立對(duì)應(yīng),并優(yōu)先地登記到包含第I表及第2表的哈希表中的所述第I表, 在計(jì)算出第2大塊的第2哈希值的情況下,使從所述第I表的搜索優(yōu)先來(lái)執(zhí)行從所述哈希表搜索與所述第2哈希值一致的第3哈希值的處理, 基于所述搜索的結(jié)果來(lái)判定具有與所述第2大塊相同內(nèi)容的第3大塊是否保存于所述存儲(chǔ)裝置, 在判定為所述第3大塊保存于所述存儲(chǔ)裝置的情況下,抑制所述第2大塊被寫(xiě)入所述存儲(chǔ)裝置,所述哈希表保存于所述存儲(chǔ)裝置、或所述存儲(chǔ)控制器具有的本地存儲(chǔ)裝置,所述第I表具有第I數(shù)目的條目,所述第2表具有大于所述第I數(shù)目的第2數(shù)目的條目。
【文檔編號(hào)】G06F12/00GK104246722SQ201380000362
【公開(kāi)日】2014年12月24日 申請(qǐng)日期:2013年3月29日 優(yōu)先權(quán)日:2013年3月29日
【發(fā)明者】山崎修二 申請(qǐng)人:株式會(huì)社東芝, 東芝解決方案株式會(huì)社