0的表入口。因此,范圍儲(chǔ)存層可以包括由CPU 210執(zhí)行的計(jì)算機(jī)可執(zhí)行指令以執(zhí)行實(shí) 施范圍元數(shù)據(jù)選擇技術(shù)800的操作。如果找到具有匹配密鑰的表入口,然后從范圍密鑰810 映射的SSD位置530用于從SSD檢索現(xiàn)有范圍(未示出)。然后將現(xiàn)有范圍與新的范圍610相比 以確定它們的數(shù)據(jù)是否相同。如果數(shù)據(jù)相同,新的范圍610已經(jīng)儲(chǔ)存在SSD 260上并且可以 去重復(fù)(記為去重復(fù)452)以使得不需要寫入數(shù)據(jù)的另一拷貝。因此,用于現(xiàn)有范圍的表入口 中的引用計(jì)數(shù)被增加并且現(xiàn)有范圍的范圍密鑰810被傳遞至用于在密集樹元數(shù)據(jù)構(gòu)造444 (例如密集樹444a)的條目(表示為卷元數(shù)據(jù)條目446)內(nèi)存儲(chǔ)的適當(dāng)?shù)木韺訉?shí)例,使得范圍 密鑰810與卷445的偏移范圍440(例如偏移范圍440a)關(guān)聯(lián)。
[0039] 然而,如果現(xiàn)有范圍的數(shù)據(jù)與新的范圍610的數(shù)據(jù)不相同,則出現(xiàn)沖突并且確定性 算法被調(diào)用以順序地生成映射至與所需要提供去重復(fù)452或者生成已經(jīng)儲(chǔ)存在范圍儲(chǔ)存實(shí) 例內(nèi)的范圍密鑰的相同的桶的同樣多的新的候選范圍密鑰。值得注意地,另一哈希表(例如 哈希表850η)可以根據(jù)范圍元數(shù)據(jù)選擇技術(shù)800由新候選的范圍密鑰選擇。如果不存在去重 復(fù)機(jī)會(huì)(例如該范圍尚未被儲(chǔ)存),新的范圍610根據(jù)壓縮技術(shù)454被壓縮并且傳遞至RAID層 360,該RAID層處理用于在RAID組466的一個(gè)或多個(gè)條帶464內(nèi)的SSD 260上存儲(chǔ)的新的范圍 610。范圍儲(chǔ)存實(shí)例可以與RAID層360協(xié)作以識(shí)別存儲(chǔ)區(qū)段460(例如存儲(chǔ)陣列150的一部分) 和在儲(chǔ)存新的范圍610的區(qū)段460內(nèi)的SSD 260上的位置。說明性地,所識(shí)別的存儲(chǔ)區(qū)段是具 有例如用于儲(chǔ)存范圍610的SSD 260b上的位置530的較大連續(xù)自由空間的區(qū)段。
[0040] 在一個(gè)實(shí)施例中,RAID層360然后將條帶464寫入在RAID組466上,說明性地作為一 個(gè)或多個(gè)全寫入條帶462 AAID層360可以寫入足夠深度的一系列條帶464以降低在基于閃 存SSD 260(例如閃存塊管理)內(nèi)出現(xiàn)的數(shù)據(jù)重定位。然后,范圍儲(chǔ)存實(shí)例(i)將新范圍610的 SSD位置530加載到所選擇的哈希表850η(例如由新候選的范圍密鑰所選擇的哈希表)中, (ii)將新范圍密鑰(表示為范圍密鑰810)傳遞至用于由卷層實(shí)例管理的密集樹444的條目 (也表示為卷元數(shù)據(jù)條目446)內(nèi)存儲(chǔ)的適當(dāng)?shù)木韺?,以及(i i i)將至所選擇的哈希表的范圍 元數(shù)據(jù)的變換記錄在范圍儲(chǔ)存層記錄355中。說明性地,卷層實(shí)例選擇跨越包括寫入請(qǐng)求的 偏移范圍的卷445的偏移范圍440a的密集樹444a。正如要注意的是,卷445(例如卷的偏移空 間)被劃分為多個(gè)區(qū)域(例如充當(dāng)為解體偏移范圍);在實(shí)施例中,每個(gè)區(qū)域由密集樹444表 示。卷層實(shí)例然后將卷元數(shù)據(jù)條目446插入到密集樹444a中并且將與卷元數(shù)據(jù)條目對(duì)應(yīng)的 變化記錄在卷層記錄345中。因此,1/0(寫入)請(qǐng)求足夠地儲(chǔ)存在群集的SSD 260上。
[0041 ] 讀取路徑
[0042]圖5示出了用于處理例如SCSI讀取請(qǐng)求510的I/O請(qǐng)求的存儲(chǔ)器I/O堆棧300的I/O (例如讀取)路徑500。讀取請(qǐng)求510可以由主機(jī)120發(fā)出并且在群集100的節(jié)點(diǎn)200的協(xié)議層 320處被接收。說明性地,協(xié)議層320通過解碼420(例如分析和提取)該請(qǐng)求的域(例如LUN ID、LBA以及長(zhǎng)度)(在513處示出)來處理該讀取請(qǐng)求并且將經(jīng)解碼的結(jié)果522(例如LUN ID、 偏移以及長(zhǎng)度)用于卷映射技術(shù)430。也就是說,協(xié)議層320可以實(shí)施卷映射技術(shù)430 (如上所 述)以將讀取請(qǐng)求的LUN ID和LBA范圍(例如等效偏移和長(zhǎng)度)轉(zhuǎn)換為負(fù)責(zé)管理用于LBA(例 如偏移)范圍的卷元數(shù)據(jù)的群集100中的適當(dāng)?shù)木韺訉?shí)例,例如卷ID(卷445)。協(xié)議層然后將 結(jié)果532傳遞至持久層330,該持久層330可以查找回寫緩存器380以確定讀取請(qǐng)求的一些或 者全部能夠從它的所緩存的數(shù)據(jù)服務(wù)。如果全部請(qǐng)求不能從所緩存的數(shù)據(jù)服務(wù),持久層然 后可以根據(jù)功能運(yùn)送機(jī)制(例如用于RPC、用于節(jié)點(diǎn)內(nèi)通信)或者IPC機(jī)制(例如消息線程、用 于節(jié)點(diǎn)內(nèi)通信)將包括例如卷ID、偏移以及長(zhǎng)度的請(qǐng)求的其余部分作為參數(shù)534傳遞到適當(dāng) 的卷層實(shí)例。
[0043]卷層實(shí)例可以處理讀取請(qǐng)求以存取與包括所請(qǐng)求的偏移范圍(由參數(shù)534說明)的 卷445的區(qū)域(例如偏移范圍440a)關(guān)聯(lián)的密集樹元數(shù)據(jù)結(jié)構(gòu)444(密集樹444a)。卷層實(shí)例還 可以處理讀取請(qǐng)求以查找(查找)密集樹444a的一個(gè)或多個(gè)卷元數(shù)據(jù)條目446以獲取與所請(qǐng) 求的偏移范圍內(nèi)的一個(gè)或多個(gè)范圍610關(guān)聯(lián)的一個(gè)或多個(gè)范圍密鑰810。在實(shí)施例中,每個(gè) 密集樹444可以具體化為在每個(gè)級(jí)處具有可能重疊的偏移范圍的多級(jí)查找結(jié)構(gòu)。各級(jí)密集 樹可以具有用于相同的偏移的卷元數(shù)據(jù)條目446,而在這樣情況下,更高級(jí)具有新條目并且 用于服務(wù)該讀取請(qǐng)求。頂層的密集樹444說明性地駐留核內(nèi)并且頁(yè)緩存器448可以用來存取 該樹的較低層。如果所請(qǐng)求的范圍或者其部分未出現(xiàn)在頂層中,存取在接著與更低的樹的 層(未示出)處的索引項(xiàng)關(guān)聯(lián)的元數(shù)據(jù)頁(yè)。在下一級(jí)處的元數(shù)據(jù)頁(yè)(例如,在頁(yè)緩存器448中) 然后被查找(例如二進(jìn)制查找)以查找任何重疊條目。這個(gè)處理然后被迭代直至級(jí)的一個(gè)或 多個(gè)卷元數(shù)據(jù)條目446被找到以確保用于全部所請(qǐng)求的讀取范圍的范圍密鑰810被找到。如 果對(duì)于所請(qǐng)求的讀取范圍的全部或者部分不存在元數(shù)據(jù)條目,然后遺漏部分為零填充。 [0044] 一旦找到,每個(gè)范圍密鑰810由卷層340處理以例如實(shí)施將范圍密鑰轉(zhuǎn)換為對(duì)儲(chǔ)存 所請(qǐng)求的范圍610負(fù)責(zé)的適當(dāng)?shù)姆秶鷥?chǔ)存實(shí)例720的桶映射技術(shù)700。要注意的是,在一個(gè)實(shí) 施例中,每個(gè)范圍密鑰810可以與關(guān)聯(lián)于范圍610的哈希值650基本上相同,例如在用于范圍 的寫入請(qǐng)求期間計(jì)算出的哈希值,以使得桶映射700和范圍元數(shù)據(jù)選擇技術(shù)800可以用于寫 入和讀取路徑操作兩者。也要注意的是,范圍810可以從哈希值650導(dǎo)出。卷層340然后可以 將范圍密鑰810(例如來自用于該范圍的先前寫入請(qǐng)求的哈希值)(經(jīng)由范圍儲(chǔ)存獲取操作) 傳遞至適當(dāng)?shù)姆秶鷥?chǔ)存實(shí)例720,其執(zhí)行范圍密鑰至SSD映射以確定用于該范圍的SSD 260 上的位置。
[0045]響應(yīng)于獲取操作,范圍儲(chǔ)存實(shí)例可以處理范圍密鑰810(例如哈希值650)以執(zhí)行范 圍元數(shù)據(jù)選擇技術(shù)800,該范圍元數(shù)據(jù)選擇技術(shù)800 (i)從范圍儲(chǔ)存實(shí)例720內(nèi)的一組哈希表 (說明性地核內(nèi))選擇適當(dāng)?shù)墓1?50 (例如哈希表850a ),并且(i i)提取從哈希值650至索 引的哈希表索引820為所選擇的哈希表以及查找具有識(shí)別用于范圍610的在SSD 260上的存 儲(chǔ)位置530的匹配范圍密鑰810的表入口。也就是說,映射至范圍密鑰810的SSD位置530可以 用來從SSD 260(例如SSD 260b)檢索現(xiàn)有范圍(表示為范圍610)。范圍儲(chǔ)存實(shí)例然后與RAID 層360協(xié)作以存取SSD 260b上的范圍并且根據(jù)讀取請(qǐng)求檢索數(shù)據(jù)內(nèi)容。說明性地,RAID層 360可以根據(jù)范圍讀取操作468讀取該范圍并且將范圍610傳遞至范圍儲(chǔ)存實(shí)例。范圍儲(chǔ)存 實(shí)例然后可以根據(jù)解壓縮技術(shù)456解壓縮該范圍610,盡管對(duì)于本領(lǐng)域技術(shù)人員將理解的是 解壓縮能夠在存儲(chǔ)器I/O堆棧300的任何層處執(zhí)行。范圍610可以儲(chǔ)存在存儲(chǔ)器220中的緩沖 器(未示出)中并且對(duì)那個(gè)緩沖器的引用可以通過存儲(chǔ)器I/O堆棧的層回傳。持久層然后可 以將該范圍加載到讀取緩存器580(或者其它階段機(jī)制)中并且可以從用于讀取請(qǐng)求510的 LBA范圍的讀取緩存器580提取適當(dāng)?shù)淖x取數(shù)據(jù)512。此后,協(xié)議層320可以創(chuàng)建包括讀取數(shù) 據(jù)512的SCSI讀取響應(yīng)514并且將讀取響應(yīng)返回到主機(jī)120。
[0046] 范圍哈希結(jié)構(gòu)
[0047] 圖6是可以利用本文中所描述的一個(gè)或多個(gè)實(shí)施例有利地使用的范圍哈希技術(shù) 600的框圖。正如要注意的是,持久層330可以將一個(gè)或多個(gè)寫入請(qǐng)求的寫入數(shù)據(jù)組織到一 個(gè)或多個(gè)范圍610中,一個(gè)或多個(gè)范圍610中的每個(gè)被具體化為可變長(zhǎng)度塊。該范圍的長(zhǎng)度 可以在1字節(jié)和64KB(或者更大)之間變化,盡管例如該范圍的長(zhǎng)度通常是4KB或者更多。范 圍610說明性地是在群集的節(jié)點(diǎn)內(nèi)的SSD 260上物理上連續(xù)地儲(chǔ)存以便例如它能夠在單個(gè) 讀取操作中從SSD讀取。因此,從多個(gè)I/O請(qǐng)求集合的范圍可以包括在任何LUN內(nèi)的連續(xù)偏移 范圍。因此,多個(gè)LUN(和/或文件)可以在不同地址(只要在每個(gè)LUN內(nèi)邏輯上連續(xù))處共享相 同的范圍,因?yàn)樵摲秶ǔ2槐3衷谌杭?00的儲(chǔ)存池中相對(duì)于其存在的信息。
[0048]在實(shí)施例中,例如哈希函數(shù)620 (例如大致均勻的哈希)的隨機(jī)技術(shù)可以施加到每 個(gè)范圍610以生成用于分配例如使用范圍元數(shù)據(jù)選擇技術(shù))寫入數(shù)據(jù)(例如范圍數(shù)據(jù))和在 節(jié)點(diǎn)200之中的基本上平均的關(guān)聯(lián)元數(shù)據(jù)的哈希值650以啟用細(xì)紋的標(biāo)出和群集100中的去 重復(fù)452。哈希計(jì)算在整個(gè)范圍上被執(zhí)行并且在該范圍傳遞至范圍儲(chǔ)存實(shí)例前的任何時(shí)間 被計(jì)算。說明性地,因而產(chǎn)生的哈希值650可以用于兩個(gè)大致類似的任務(wù)。第一任務(wù)是在每 個(gè)范圍存儲(chǔ)實(shí)例內(nèi)大致平均地分配(擴(kuò)展)該范圍和相關(guān)聯(lián)的元數(shù)據(jù)。因此,哈希值650說明 性地在持久層330處計(jì)算,但是可以在卷層340處或者在卷層340前被計(jì)算,因?yàn)榫韺有枰?希值來確定服務(wù)該范圍的節(jié)點(diǎn)的范圍儲(chǔ)存實(shí)例I/O
[0049] 哈希計(jì)算根據(jù)安全哈希算法(例如SHA-3或者回波256加密哈希函數(shù))來說明性地 執(zhí)行以生成256位哈希函數(shù)結(jié)果(未示出)。可選地,可以使用例如SipHash(安全64位)或者 CityHasM非加密64位)的哈希算法。256位哈希函數(shù)結(jié)果的一部分,例如較低6字節(jié)(48位) 可以例如根據(jù)調(diào)整技術(shù)640來說明性地調(diào)整以生成48位哈希值650。對(duì)于本領(lǐng)域技術(shù)人員明 顯的是,哈希值的調(diào)整量可以隨著群集的儲(chǔ)存容量增加而擴(kuò)大。在實(shí)施例中,調(diào)整技術(shù)640 從32字節(jié)哈希函數(shù)結(jié)果實(shí)質(zhì)上截取或者切斷哈希值650的6字節(jié)(48位)部分。哈希值650的 因而產(chǎn)生的6字節(jié)(48位)說明性地足夠啟用范圍儲(chǔ)存實(shí)例以經(jīng)由哈希表850中的條目找到 SSD 260上的范圍610的位置的表示。此外,哈希值650說明性地啟用它的關(guān)聯(lián)元數(shù)據(jù),例如 在哈希表850的條目中的范圍元數(shù)據(jù),以完全地駐留在存儲(chǔ)器220中。然而,更寬的哈希值 (例如耗費(fèi)更多存儲(chǔ)器220)可以用來提高執(zhí)行新范圍的去重復(fù)452的機(jī)會(huì),而不必須實(shí)際上 比較儲(chǔ)存在SSD上的先前范圍的寫入數(shù)據(jù)。哈希值650可以用來根據(jù)各種技術(shù)(例如在存儲(chǔ) 器I/O堆棧300內(nèi)的桶映射700和范圍元數(shù)據(jù)選擇800)來執(zhí)行在它的哈??臻g的部分內(nèi)地址 類判定以選擇用于范圍610的適當(dāng)?shù)墓1?50a。
[0050] 圖7是可以利用本文中所描述的一個(gè)或多個(gè)實(shí)施例有利地使用的桶映射技術(shù)700 的框圖。正如要注意的是,哈希值650可以在持久層330處計(jì)算