TB)的LUN容量至基于具有哈希表展開(kāi)的128KB范圍尺寸(每一 范圍1Βχ3擴(kuò)展X128KB)的384TB的最大值。
[0063] 一旦哈希表850a被選定,范圍儲(chǔ)存實(shí)例可以提取哈希值650的Kl或者用作索引到 哈希表里的哈希表索引820(例如,使用Kl用于該表的上半部并且使用K2用于該表的下半 部)并且選定配置為特別儲(chǔ)存一部分范圍密鑰810以及SSD上的位置的識(shí)別的適當(dāng)?shù)臈l目 840a。值得注意地,Kl和K2彼此不同,使用將布谷鳥(niǎo)哈希表分為上地址空間和下地址空間的 隱含的高階位。說(shuō)明性地,隱含的高階位增加從216可能位置到217可能位置的Kl或者K2的 地址能力,其中,哈希表的上地址空間可由哈希值的一個(gè)16位域(例如Kl)尋址并且哈希表 的下地址空間可由另一 16位域(例如K2)尋址。在實(shí)施例中,使用對(duì)布谷鳥(niǎo)哈希表的最初索 引的哈希表索引(Kl或者K2)的選擇是任意的。在條目被插入到布谷鳥(niǎo)哈希表850a(例如對(duì) 范圍進(jìn)行存儲(chǔ))的情況下,期望的方法可以是選擇更少占據(jù)的上或者下地址空間組的任何 一個(gè)(在兩個(gè)組840a和840b的窮舉查找后)。
[0064] 正如所注意的,每一布谷鳥(niǎo)哈希表具有組關(guān)聯(lián)的槽,例如每一關(guān)聯(lián)的組的32個(gè)槽。 在一個(gè)實(shí)施例中,沒(méi)有將32個(gè)槽在關(guān)聯(lián)的組的條目?jī)?nèi)排序;線性查找可以被執(zhí)行以查找用 于插入范圍密鑰的空槽??蛇x地,可以對(duì)槽進(jìn)行排序以實(shí)現(xiàn)更快的查找,例如二分查找,特 別是對(duì)于更大關(guān)聯(lián)的組(例如128路),其可以不符合CPU緩存器行。類似地,一旦關(guān)聯(lián)的組槽 被識(shí)別,例如,能夠保持范圍密鑰的作為條目840,線性查找可以在槽內(nèi)被執(zhí)行以確定該密 鑰是否存在。布谷鳥(niǎo)哈希表的優(yōu)點(diǎn)是在給定范圍密鑰值能夠駐留于其的整個(gè)群集中具有正 好2條目(每一條目具有32個(gè)槽)。一旦該條目使用Kl或者K2與隱含的高階位一起被索引,在 條目840內(nèi)具有32個(gè)槽需要查找。
[0065]在一個(gè)實(shí)施例中,每一條目840的槽的數(shù)目說(shuō)明性地選擇為32,因?yàn)樗?2個(gè)槽能 夠符合例如英特爾處理器的緩存器行(例如,在槽中的哈希表索引820的32χ尺寸)。換句話 說(shuō),16位或者2字節(jié)(Kl或者Κ2)乘以32槽等于64字節(jié),其是說(shuō)明性的緩存器行的尺寸。一旦 操作取得并且操縱緩存器行,該緩存器行保持被緩存直至它被逐出。對(duì)于緩存槽830的線性 查找,可以不需要來(lái)自存儲(chǔ)器的進(jìn)一步的攫取,從而避免用于條目840的先前緩存的槽的任 何逐出。說(shuō)明性地,該組的尺寸(例如32個(gè)槽)是任意的并且選擇以便適應(yīng)緩存器行。在不改 變用于存取給定組(例如條目840)的任何算法的情況下,該設(shè)置尺寸能夠被變換成任意的 整數(shù)并且每一組平均的變化。構(gòu)成條目的其余8字節(jié)(包括構(gòu)成SSD上的范圍位置530的部分 的偏移831)的該信息可以脫機(jī)儲(chǔ)存在哈希表850的另一部分中,例如,未在槽的查找期間緩 存。應(yīng)當(dāng)注意的是,哈希表850可以以按列順序儲(chǔ)存在存儲(chǔ)器中(例如,限定"C"程序設(shè)計(jì)語(yǔ) 言中的哈希表為包括作為單獨(dú)的陣列的槽的域的結(jié)構(gòu))。因此,如果期望存取Kl或者Κ216位 域,可以僅僅需要存取一個(gè)緩存器行。
[0066]為了確??焖俸透咝У男阅埽1?50可以進(jìn)一步組織為需要僅僅一個(gè)用于從 范圍儲(chǔ)存實(shí)例獲取的每個(gè)范圍密鑰的磁盤(pán)(SSD)存取。這是可能的,因?yàn)榇鎯?chǔ)器I/O堆棧300 的范圍儲(chǔ)存350不具有目錄層級(jí)組織的上層并且,因此,在I/O請(qǐng)求被轉(zhuǎn)送到范圍儲(chǔ)存實(shí)例 時(shí),存儲(chǔ)器220中的快速查找可以對(duì)于適當(dāng)?shù)暮藘?nèi)哈希表850出現(xiàn)然后SSD僅僅存取一次。因 此,每一 1/〇(讀取或者寫(xiě)入)操作可以有僅僅一個(gè)SSD存取,從而提高讀取和/或?qū)懭敕糯蟆?[0067]圖9是可以利用本文中所描述的一個(gè)或多個(gè)實(shí)施例有利地使用的范圍密鑰重構(gòu)技 術(shù)的框圖。范圍密鑰重構(gòu)幫助從第一范圍儲(chǔ)存實(shí)例到第二范圍儲(chǔ)存實(shí)例的桶(數(shù)目)725(例 如,經(jīng)由桶映射表730)的高效的再分配(例如迀移)。例如,可以從第一范圍儲(chǔ)存實(shí)例的哈希 表850查找與要被再分配的桶關(guān)聯(lián)的槽,并且那些槽然后可以使用從每一相應(yīng)的槽重構(gòu)的 范圍密鑰重新被插入第二范圍儲(chǔ)存實(shí)例的哈希表中,每一相應(yīng)的槽在第一范圍儲(chǔ)存實(shí)例的 查找中找到。
[0068]說(shuō)明性地,范圍密鑰的重構(gòu)是部分地基于哈希表槽830a、b的內(nèi)容,從而允許在槽 中僅存儲(chǔ)哈希值650的那些需要識(shí)別(例如查找)該槽并且重構(gòu)哈希值650 (例如基本上相同 的范圍密鑰810)的位。在實(shí)施例中,范圍儲(chǔ)存層350包括由CPU 210執(zhí)行的計(jì)算機(jī)可執(zhí)行指 令以執(zhí)行實(shí)施本文中所描述的范圍密鑰重構(gòu)技術(shù)的操作。根據(jù)該技術(shù),一旦該槽830a、b被 找到,16位域(例如Kl或者K2)能夠被丟棄(不儲(chǔ)存),因?yàn)榉秶鷥?chǔ)存層(實(shí)例)能夠在哈希表 850的上地址空間部分902或者下地址空間部分904中無(wú)疑地重建來(lái)自條目840a、b的16位 域。也就是說(shuō),來(lái)自用于一部分索引的哈希值的位的使用使得能夠根據(jù)哈希值來(lái)推斷確定 位而不是必須儲(chǔ)存它們。此外,8位的哈希表選擇器804不需要被儲(chǔ)存并且能夠從存取的哈 希表自身無(wú)疑地再造,例如,確定槽830a、b隱含具有到適當(dāng)?shù)墓1砝锏乃饕R虼?,不?索引(例如Kl或者K2)隱含的僅僅2字節(jié)的哈希值650位和1字節(jié)的額外密鑰位802需要儲(chǔ)存 在槽830a、b中。具體地說(shuō),為了再生6字節(jié)(48位)哈希值650(例如,范圍密鑰810)、2字節(jié)布 谷鳥(niǎo)索引由表中的條目推斷(不儲(chǔ)存),2字節(jié)的布谷鳥(niǎo)索引儲(chǔ)存在存儲(chǔ)器中,一個(gè)字節(jié)的哈 希值由哈希表組的哈希表選擇器推斷(不儲(chǔ)存),并且最終一個(gè)字節(jié)作為額外位儲(chǔ)存在存儲(chǔ) 器中。因此,僅僅需要儲(chǔ)存3字節(jié)或者24位的哈希值650(例如Kl或者K2,加上額外密鑰位 802)在哈希表的槽830a、b中,以便重構(gòu)該哈希值,例如范圍密鑰810。在實(shí)施例中,額外密鑰 位802可以用來(lái)在發(fā)生沖突時(shí)實(shí)現(xiàn)足夠的唯一性。
[0069] 哈希表沖突
[0070] 圖10是可以利用本文中所描述的一個(gè)或多個(gè)實(shí)施例有利地使用的哈希沖突技術(shù) 的框圖。說(shuō)明性地,在發(fā)生沖突時(shí),例如哈希表索引820a與匹配額外密鑰位802和在該槽的 那個(gè)域中發(fā)現(xiàn)的Kl或者K2任一個(gè)的組合的槽830a沖突,哈希沖突技術(shù)使用哈希沖突計(jì)算 1002來(lái)確定唯一的候選的范圍密鑰811 (具有候選的哈希表索引820b)。正如本文中所使用 的,在條目由48位哈希值650的哈希表索引820a適當(dāng)?shù)厮饕焦1?50a里時(shí)沖突出現(xiàn),但 是比較揭示了不同的范圍已經(jīng)分配候選范圍密鑰,例如,該槽830a由具有匹配候選范圍密 鑰的那些的額外密鑰位802的不同的范圍占據(jù)。應(yīng)當(dāng)注意的是,到哈希表里的恰當(dāng)?shù)乃饕?括到哈希表850(使用例如分別Kl和K2)的上地址空間部分902和下地址空間部分904兩者中 的索引,因?yàn)槭褂煤蜻x范圍密鑰的范圍可能已經(jīng)存在于任何一個(gè)部分中。說(shuō)明性地,該沖突 的出現(xiàn)是由于失敗的去重復(fù)機(jī)會(huì)和選擇由新哈希表索引(例如候選哈希表索引820b)所索 引的新條目,該新哈希表索引從新哈希值(例如候選范圍密鑰811)確定。也就是說(shuō),哈希值 650是不足的并且候選哈希表索引820b可以生成。哈希表組860中的新條目840b(以及新槽 830η)可以根據(jù)從哈希值650計(jì)算的候選范圍密鑰811來(lái)確定,使得候選范圍密鑰811決定相 同(例如單個(gè))桶數(shù)目作為用于哈希值650的那個(gè)。也就是說(shuō),候選范圍密鑰811和哈希值650 兩者決定相同的桶數(shù)目,同時(shí)也決定哈希表組860中的不同的條目840a、b。要注意的是,決 定相同桶數(shù)目也決定相同的范圍儲(chǔ)存實(shí)例(例如,使用桶數(shù)目經(jīng)由桶映射表)。
[007?]在一個(gè)實(shí)施例中,候選范圍811可以使用確定性算法、例如哈希沖突計(jì)算1002根據(jù) 哈希值650計(jì)算,該哈希沖突計(jì)算1002將例如66521的大素?cái)?shù)說(shuō)明性地增加到哈希值,從而 決定相同的桶??蛇x地,哈希值650的子串(例如子組位)可以用來(lái)計(jì)算候選范圍密鑰811。在 實(shí)施例中,子串可以由哈希值650的最低位形成。此外,可以選擇子串以便充足地許多替換 的條目可以使用哈希沖突技術(shù)來(lái)計(jì)算。說(shuō)明性地,范圍儲(chǔ)存層350包括由CPU 210執(zhí)行的計(jì) 算機(jī)可執(zhí)行指令以執(zhí)行實(shí)施本文中所描述的哈希沖突技術(shù)的操作。
[0072]在實(shí)施例中,范圍密鑰810可以與48位哈希值650基本上相同,除在大素?cái)?shù)被增加 給哈希值以分析去重復(fù)沖突的情形之外。在那個(gè)情況中,48位哈希值可以改變以生成候選 范圍密鑰811和哈希表索引820b。正如要注意的是,哈希表索引是用于存取哈希表的條目 840以檢索范圍密鑰的機(jī)制。此后,所檢索的范圍密鑰810需要確定用于該范圍的SSD上的位 置,例如檢索在具有用于該范圍的位置的哈希表組中的槽。
[0073] 說(shuō)明性地,沖突與對(duì)例如填充布谷鳥(niǎo)哈希表?xiàng)l目這樣的將信息插入到哈希表里的 槽進(jìn)行查找不同。如果確定布谷鳥(niǎo)哈希表的2條目關(guān)聯(lián)的組中的所有64個(gè)槽是沒(méi)有任何范 圍密鑰匹配完整,空間能夠在由布谷鳥(niǎo)驅(qū)逐處理的2個(gè)關(guān)聯(lián)的組中的一個(gè)中釋放。在實(shí)施例 中,布谷鳥(niǎo)驅(qū)逐處理可以使用條目的替換的哈希表索引將關(guān)聯(lián)的組的64個(gè)槽的任何一個(gè)的 內(nèi)容再配置到布谷鳥(niǎo)哈希表中的替換條目,例如條目的Kl或者K2,作為到該表的上半部或 者下半部的索引里。
[0074] 在發(fā)生沖突時(shí),一般的解決方案可以是隨機(jī)地選擇新哈希值(例如候選的范圍密 鑰811)。然而,可以期望確保在群集各處分配或者重新分配桶時(shí)可以調(diào)用去重復(fù)。在沖突被 分析時(shí),候選范圍密鑰811應(yīng)該在相同的桶內(nèi);另外,因而產(chǎn)生的范圍密鑰可以決定具有不 同的哈希表的不同的范圍儲(chǔ)存實(shí)例。也就是說(shuō),候選范圍密鑰811應(yīng)該基于桶映射表730決 定相同的桶數(shù)目725,例如相同的范圍儲(chǔ)存實(shí)例。因此,哈希沖突計(jì)算1002可以將與桶的數(shù) 目關(guān)聯(lián)的素?cái)?shù)增加至哈希值(或者哈希值的子串)以獲取候選哈希表索引820b,以便用于確 定桶數(shù)目725的余項(xiàng)計(jì)算710得出相同的桶。本領(lǐng)域技術(shù)人員將理解的是,在哈希沖突技術(shù) 在哈希值的子串或者哈希值上操作時(shí)適當(dāng)?shù)倪M(jìn)位溢出處理(例如對(duì)相同的桶數(shù)目的決定) 可以是必要的。例如,僅僅選擇例如K1 + 1的哈希沖突計(jì)算可以工作直至群集增長(zhǎng)的點(diǎn)和所 有范圍密鑰(索引)和桶重新分配。在那個(gè)點(diǎn)處,不能保證K1 + 1將正確地索引到與哈希表關(guān) 聯(lián)的特定的桶(或者甚至特定的范圍儲(chǔ)存實(shí)例)里。
[0075]正如要注意的是,桶至范圍儲(chǔ)存實(shí)例映射包括將哈希值由較大素?cái)?shù)(65521)劃分 以達(dá)到桶數(shù)字725。在實(shí)施例中,確定性算法(例如哈希沖突計(jì)算1002)可以將較大素?cái)?shù) (65521)增加至哈希值的子串,例如哈希表索引(在發(fā)生沖突時(shí)),以創(chuàng)建新索引K3和K4,例 如候選哈希表索引820b。在替換實(shí)施例中,沖突技術(shù)可以在哈希值的下40位(例如子串)上 操作,以便候選哈希表索引引用相同的哈希表(例如哈希表選擇器804域被凍結(jié))。如果沖突 再次出現(xiàn),例如候選哈希表索引820b的沖突,該處理可以由增加大素?cái)?shù)連續(xù)直至唯一的候 選的范圍密鑰811為了該范圍查找,從而確保候選哈希表索引820b將引