存儲(chǔ)系統(tǒng)中的可變長(zhǎng)度編碼的制作方法
【專利摘要】本發(fā)明涉及一種用于在數(shù)據(jù)存儲(chǔ)子系統(tǒng)中保持映射表的系統(tǒng)和方法。數(shù)據(jù)存儲(chǔ)子系統(tǒng)支持分別包括多個(gè)條目的多個(gè)映射表。每一個(gè)條目包括帶有關(guān)鍵字的一個(gè)元組。數(shù)據(jù)存儲(chǔ)控制器被配置成利用可變長(zhǎng)度編碼對(duì)映射表中的每一個(gè)元組進(jìn)行編碼。此外,所述映射表可以被組織成多個(gè)時(shí)間排序?qū)蛹?jí),其中每一個(gè)層級(jí)包括一個(gè)或多個(gè)映射表?xiàng)l目。此外,可以至少部分地基于以下各項(xiàng)來選擇對(duì)應(yīng)于給定元組的多種編碼當(dāng)中的特定一種編碼:未編碼的給定元組的尺寸,已編碼的給定元組的尺寸,以及用以編碼給定元組的時(shí)間。
【專利說明】存儲(chǔ)系統(tǒng)中的可變長(zhǎng)度編碼
【背景技術(shù)】【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò),更具體來說涉及在存儲(chǔ)系統(tǒng)中保持映射結(jié)構(gòu)。
[0002]相關(guān)技術(shù)
[0003]隨著計(jì)算機(jī)存儲(chǔ)器存儲(chǔ)和數(shù)據(jù)帶寬的增加,企業(yè)日常所管理的數(shù)據(jù)的數(shù)量和復(fù)雜度也會(huì)增加。例如數(shù)據(jù)中心之類的大規(guī)模分布式存儲(chǔ)系統(tǒng)通常會(huì)運(yùn)行許多企業(yè)運(yùn)營(yíng)。數(shù)據(jù)中心也可以被稱作服務(wù)器機(jī)房,其是用于存儲(chǔ)、管理和散播與一家或多家企業(yè)有關(guān)的數(shù)據(jù)的物理的或虛擬的集中式儲(chǔ)存庫(kù)。分布式存儲(chǔ)系統(tǒng)可以耦合到通過一個(gè)或多個(gè)網(wǎng)絡(luò)互連的客戶端計(jì)算機(jī)。如果分布式存儲(chǔ)系統(tǒng)的任何部分的性能較差,則公司運(yùn)營(yíng)可能會(huì)受到損害。因此,分布式存儲(chǔ)系統(tǒng)保持對(duì)應(yīng)于數(shù)據(jù)可用性和高性能功能的高標(biāo)準(zhǔn)。
[0004]分布式存儲(chǔ)系統(tǒng)包括物理卷,其可以是硬盤、固態(tài)設(shè)備、利用另一種存儲(chǔ)技術(shù)的存儲(chǔ)設(shè)備或者存儲(chǔ)設(shè)備的某些部分。例如邏輯卷管理器或盤陣列管理器之類的軟件應(yīng)用提供在大容量存儲(chǔ)陣列上分配空間的措施。此外,該軟件允許系統(tǒng)管理員創(chuàng)建包括邏輯卷在內(nèi)的存儲(chǔ)組單元。存儲(chǔ)虛擬化提供了邏輯存儲(chǔ)與物理存儲(chǔ)的抽象(分離),以便在無需末端用戶識(shí)別物理存儲(chǔ)的情況下訪問邏輯存儲(chǔ)。
[0005]為了支持存儲(chǔ)虛擬化,卷管理器施行輸入/輸出(I/O)重定向,這是通過把來自末端用戶的利用邏輯地址的傳入I/o請(qǐng)求翻譯成利用與存儲(chǔ)設(shè)備中的物理位置相關(guān)聯(lián)的地址的新請(qǐng)求而實(shí)現(xiàn)的。由于一些存儲(chǔ)設(shè)備可以包括附加的地址翻譯機(jī)制,比如可以被用在固態(tài)存儲(chǔ)設(shè)備中的地址翻譯層,因此前面所提到的從邏輯地址到另一地址的翻譯可能不代表僅有的或最終的地址翻譯。重定向利用存儲(chǔ)在一個(gè)或多個(gè)映射表中的元數(shù)據(jù)。此外,存儲(chǔ)在一個(gè)或多個(gè)映射表中的信息可以被用于存儲(chǔ)重復(fù)數(shù)據(jù)刪除(deduplication)以及把特定快照層級(jí)的虛擬扇區(qū)映射到物理位置。卷管理器可以保持對(duì)應(yīng)于虛擬化存儲(chǔ)的映射信息的一致視圖。但是所支持的地址空間可能會(huì)受到被用來保持映射表的存儲(chǔ)容量的限制。
[0006]與所選擇的存儲(chǔ)盤相關(guān)聯(lián)的技術(shù)和機(jī)制決定由卷管理器所使用的方法。舉例來說,提供對(duì)應(yīng)于外部存儲(chǔ)設(shè)備的硬盤、硬盤分區(qū)或邏輯單元號(hào)(LUN)的粒度層級(jí)的映射的卷管理器被限制到對(duì)應(yīng)于大數(shù)據(jù)組塊的重定向、定位、去除重復(fù)數(shù)據(jù)等等。另一種類型的存儲(chǔ)盤的一個(gè)實(shí)例是固態(tài)盤(SSD)。SSD可以模擬HDD接口,但是SSD利用固態(tài)存儲(chǔ)器來存儲(chǔ)永久性數(shù)據(jù)而不是如在HDD中所看到的電磁設(shè)備。舉例來說,SSD可以包括閃存組。相應(yīng)地,在利用針對(duì)HDD開發(fā)的映射表分配算法的情況下,在包括SSD以用于存儲(chǔ)的系統(tǒng)中可能無法實(shí)現(xiàn)由一個(gè)或多個(gè)映射表所支持的較大地址空間。
[0007]鑒于前述內(nèi)容,希望有針對(duì)存儲(chǔ)在多個(gè)固態(tài)存儲(chǔ)設(shè)備當(dāng)中的數(shù)據(jù)高效地施行存儲(chǔ)虛擬化的系統(tǒng)和方法。
【發(fā)明內(nèi)容】
[0008]本發(fā)明設(shè)想了用于在數(shù)據(jù)存儲(chǔ)系統(tǒng)中高效地管理映射表的計(jì)算機(jī)系統(tǒng)和方法的各個(gè)實(shí)施例。
[0009]在一個(gè)實(shí)施例中,耦合到網(wǎng)絡(luò)的數(shù)據(jù)存儲(chǔ)子系統(tǒng)在所述網(wǎng)絡(luò)上接收來自客戶端計(jì)算機(jī)的讀取和寫入請(qǐng)求。所述數(shù)據(jù)存儲(chǔ)子系統(tǒng)包括設(shè)備組上的多個(gè)數(shù)據(jù)存儲(chǔ)位置,其中所述設(shè)備組包括多個(gè)存儲(chǔ)設(shè)備。所述數(shù)據(jù)存儲(chǔ)子系統(tǒng)還包括至少一個(gè)映射表。所述映射表包括多個(gè)條目,其中每一個(gè)條目包括帶有關(guān)鍵字的一個(gè)元組。數(shù)據(jù)存儲(chǔ)控制器被配置成利用可變長(zhǎng)度編碼對(duì)映射表中的每一個(gè)元組進(jìn)行編碼。此外,所述映射表可以被組織成多個(gè)時(shí)間排序?qū)蛹?jí),其中每一個(gè)層級(jí)包括一個(gè)或多個(gè)映射表?xiàng)l目。此外,可以至少部分地基于以下各項(xiàng)來選擇對(duì)應(yīng)于給定元組的多種編碼當(dāng)中的特定一種編碼:未編碼的給定元組的尺寸,已編碼的給定元組的尺寸,以及用以編碼給定元組的時(shí)間。此外本發(fā)明還設(shè)想到其中所述數(shù)據(jù)存儲(chǔ)控制器被配置成對(duì)給定元組施行多種不同編碼、對(duì)各種編碼進(jìn)行比較以及選擇被視為最優(yōu)的特定編碼的實(shí)施例。
[0010]此外本發(fā)明還設(shè)想到其中映射表存儲(chǔ)其關(guān)鍵字對(duì)應(yīng)于系統(tǒng)中的虛擬塊的條目的映射表。在各個(gè)實(shí)施例中,對(duì)應(yīng)于給定虛擬塊范圍的條目存儲(chǔ)在所述給定虛擬塊范圍中的數(shù)據(jù)之上計(jì)算的一個(gè)散列數(shù)值,并且所述條目存儲(chǔ)便于查找包括所述塊范圍的數(shù)據(jù)的位置的信息。
[0011]考慮到后面的描述和附圖,前述和其他實(shí)施例將變得顯而易見。
【專利附圖】
【附圖說明】
[0012]圖1是示出網(wǎng)絡(luò)架構(gòu)的一個(gè)實(shí)施例的一般化方塊圖。
[0013]圖2是映射表的一個(gè)實(shí)施例的一般化方塊圖。
[0014]圖3A是被用來訪問映射表的初級(jí)索引的一個(gè)實(shí)施例的一般化方塊圖。
[0015]圖3B是被用來訪問映射表的初級(jí)索引的另一個(gè)實(shí)施例的一般化方塊圖。
[0016]圖4是初級(jí)索引和映射表的另一個(gè)實(shí)施例的一般化方塊圖。
[0017]圖5A是示出用于施行讀取訪問的方法的一個(gè)實(shí)施例的一般化流程圖。
[0018]圖5B是示出用于施行寫入操作的方法的一個(gè)實(shí)施例的一般化流程圖。
[0019]圖5C是示出用于編碼和存儲(chǔ)元組的方法的一個(gè)實(shí)施例的一般化流程圖。
[0020]圖示出了元組編碼的一個(gè)實(shí)施例。
[0021]圖5E是示出用于選擇和編碼方案的方法的一個(gè)實(shí)施例的一般化流程圖。
[0022]圖6是具有共享映射表的多節(jié)點(diǎn)網(wǎng)絡(luò)的一個(gè)實(shí)施例的一般化方塊圖。
[0023]圖7是被用來訪問映射表的次級(jí)索引的一個(gè)實(shí)施例的一般化方塊圖。
[0024]圖8是訪問映射表的三級(jí)索引的一個(gè)實(shí)施例的一般化方塊圖。
[0025]圖9示出了利用覆蓋表的方法的一個(gè)實(shí)施例。
[0026]圖10是對(duì)應(yīng)于映射表內(nèi)的各個(gè)層級(jí)的平坦化操作的一個(gè)實(shí)施例的一般化方塊圖。
[0027]圖11是對(duì)應(yīng)于映射表內(nèi)的各個(gè)層級(jí)的平坦化操作的另一個(gè)實(shí)施例的一般化方塊圖。
[0028]圖12是示出用于平坦化映射表內(nèi)的各個(gè)層級(jí)的方法的一個(gè)實(shí)施例的一般化流程圖。
[0029]圖13是示出用于高效地處理映射表內(nèi)的批量陣列任務(wù)的方法的一個(gè)實(shí)施例的一般化流程圖。
[0030]圖14是示出存儲(chǔ)設(shè)備內(nèi)的數(shù)據(jù)布局架構(gòu)的一個(gè)實(shí)施例的一般化方塊圖。
[0031]雖然本發(fā)明可以有各種修改和替換形式,但是在附圖中通過舉例的方式示出并且在這里詳細(xì)描述了具體實(shí)施例。但是應(yīng)當(dāng)理解的是,附圖及其詳細(xì)描述不意圖把本發(fā)明限制到所公開的具體形式,相反,本發(fā)明意圖涵蓋落在由所附權(quán)利要求書限定的本發(fā)明的精神和范圍內(nèi)的所有修改、等效方案和替換方案。
【具體實(shí)施方式】
[0032]在后面的描述中闡述了許多具體細(xì)節(jié)以提供對(duì)于本發(fā)明的透徹理解。但是本領(lǐng)域技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)到,可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐本發(fā)明。在一些實(shí)例中,沒有詳細(xì)示出眾所周知的電路、結(jié)構(gòu)、信號(hào)、計(jì)算機(jī)程序指令和技術(shù)以避免模糊本發(fā)明。
[0033]參照?qǐng)D1,其中示出了網(wǎng)絡(luò)架構(gòu)100的一個(gè)實(shí)施例的一般化方塊圖。正如后面進(jìn)一步描述的那樣,網(wǎng)絡(luò)架構(gòu)100的一個(gè)實(shí)施例包括通過網(wǎng)絡(luò)180彼此互連并且互連到數(shù)據(jù)存儲(chǔ)陣列120a-120b的客戶端計(jì)算機(jī)系統(tǒng)110a-110b。網(wǎng)絡(luò)180可以通過交換機(jī)140耦合到第二網(wǎng)絡(luò)190。客戶端計(jì)算機(jī)系統(tǒng)IlOc通過網(wǎng)絡(luò)190耦合到客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOb和數(shù)據(jù)存儲(chǔ)陣列120a-120b。此外,網(wǎng)絡(luò)190可以通過交換機(jī)150耦合到因特網(wǎng)160或其他外部網(wǎng)絡(luò)。
[0034]應(yīng)當(dāng)提到的是,在替換實(shí)施例中,客戶端計(jì)算機(jī)和服務(wù)器、交換機(jī)、網(wǎng)絡(luò)、數(shù)據(jù)存儲(chǔ)陣列和數(shù)據(jù)存儲(chǔ)設(shè)備的數(shù)目和類型不限于圖1中所示。在不同時(shí)間,一個(gè)或多個(gè)客戶端可以離線操作。此外,在操作期間,隨著用戶連接、斷開以及重新連接到網(wǎng)絡(luò)架構(gòu)100,各種客戶端計(jì)算機(jī)連接類型可以改變。此外,雖然本說明書總體上討論了網(wǎng)絡(luò)附屬存儲(chǔ),因此這里描述的系統(tǒng)和方法也可以被應(yīng)用于直接附屬存儲(chǔ)系統(tǒng),并且可以包括被配置成施行所描述的方法的一個(gè)或多個(gè)方面的主機(jī)操作系統(tǒng)??赡茉O(shè)想到許多此類替換方案。簡(jiǎn)短提供了關(guān)于圖1中所示的每一個(gè)組件的進(jìn)一步描述。首先將描述由數(shù)據(jù)存儲(chǔ)陣列120a-120b提供的一些特征的總覽。
[0035]在網(wǎng)絡(luò)架構(gòu)100中,每一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a_120b可以被用于在不同的服務(wù)器和計(jì)算機(jī)之間共享數(shù)據(jù),比如客戶端計(jì)算機(jī)系統(tǒng)110a-110b。此外,數(shù)據(jù)存儲(chǔ)陣列120a-120b可以被用于盤鏡像、備份和恢復(fù)、數(shù)據(jù)歸檔和已歸檔數(shù)據(jù)的取回以及從一個(gè)存儲(chǔ)設(shè)備到另一個(gè)存儲(chǔ)設(shè)備的數(shù)據(jù)遷移。在一個(gè)替換實(shí)施例中,一個(gè)或多個(gè)客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc可以通過快速局域網(wǎng)(LAN)彼此關(guān)聯(lián)以便形成集群。這樣的客戶端可以共享存儲(chǔ)資源,比如駐留在其中一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a-120b內(nèi)的集群共享卷。
[0036]每一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a_120b包括用于數(shù)據(jù)存儲(chǔ)的存儲(chǔ)子系統(tǒng)170。存儲(chǔ)子系統(tǒng)170可以包括多個(gè)存儲(chǔ)設(shè)備176a-176m。這些存儲(chǔ)設(shè)備176a_176m可以為客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc提供數(shù)據(jù)存儲(chǔ)服務(wù)。每一個(gè)存儲(chǔ)設(shè)備176a-176m使用特定技術(shù)和機(jī)制來施行數(shù)據(jù)存儲(chǔ)。在每一個(gè)存儲(chǔ)設(shè)備176a-176m內(nèi)使用的技術(shù)和機(jī)制的類型可以至少部分地被用來確定用于控制和調(diào)度針對(duì)和來自每一個(gè)存儲(chǔ)設(shè)備176a-176m的讀取和寫入操作的算法。舉例來說,所述算法可以定位對(duì)應(yīng)于所述操作的特定物理位置。此外,所述算法可以施行對(duì)應(yīng)于所述操作的輸入/輸出(I/O)重定向,去除存儲(chǔ)子系統(tǒng)170中的重復(fù)數(shù)據(jù),以及支持被用于地址重定向和重復(fù)數(shù)據(jù)刪除的一個(gè)或多個(gè)映射表。[0037]在前面的算法中使用的邏輯可以被包括在以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng)中:基本操作系統(tǒng)(OS) 132,存儲(chǔ)子系統(tǒng)控制器174內(nèi)的卷管理器134,每一個(gè)存儲(chǔ)設(shè)備176a_176m內(nèi)的控制邏輯等等。此外,這里所描述的邏輯、算法和控制機(jī)制可以包括硬件和/或軟件。
[0038]每一個(gè)存儲(chǔ)設(shè)備176a_176m可以被配置成接收讀取和寫入請(qǐng)求并且包括多個(gè)數(shù)據(jù)存儲(chǔ)位置,每一個(gè)數(shù)據(jù)存儲(chǔ)位置可以作為陣列中的行和列而被尋址。在一個(gè)實(shí)施例中,存儲(chǔ)設(shè)備176a-176m內(nèi)的數(shù)據(jù)存儲(chǔ)位置可以被設(shè)置成邏輯冗余存儲(chǔ)容器或RAID陣列(廉價(jià)/獨(dú)立盤冗余陣列)。
[0039]在一些實(shí)施例中,每一個(gè)存儲(chǔ)設(shè)備176a_176m可以利用不同于傳統(tǒng)硬盤驅(qū)動(dòng)器(HDD)的用于數(shù)據(jù)存儲(chǔ)的技術(shù)。舉例來說,其中一個(gè)或多個(gè)存儲(chǔ)設(shè)備176a-176m可以包括或者進(jìn)一步耦合到由固態(tài)存儲(chǔ)器構(gòu)成的存儲(chǔ)裝置來存儲(chǔ)永久性數(shù)據(jù)。在其他實(shí)施例中,其中一個(gè)或多個(gè)存儲(chǔ)設(shè)備176a-176m可以包括或者進(jìn)一步耦合到利用其他技術(shù)的存儲(chǔ)裝置,比如自旋矩傳輸技術(shù)、磁阻式隨機(jī)存取存儲(chǔ)器(MRAM)技術(shù)、疊瓦式盤、憶阻器、相變存儲(chǔ)器或者其他存儲(chǔ)技術(shù)。這些不同的存儲(chǔ)技術(shù)可能導(dǎo)致存儲(chǔ)設(shè)備之間的不同I/O特性。
[0040]在一個(gè)實(shí)施例中,所包括的固態(tài)存儲(chǔ)器包括固態(tài)驅(qū)動(dòng)器(SSD)技術(shù)。HDD技術(shù)與SDD技術(shù)之間的技術(shù)和機(jī)制上的差異可能導(dǎo)致存儲(chǔ)設(shè)備176a-176m的輸入/輸出(I/O)特性的差異。固態(tài)盤(SSD)還可以被稱作固態(tài)驅(qū)動(dòng)器。在沒有移動(dòng)部件或機(jī)械延遲的情況下,SSD可以具有低于HDD的讀取訪問時(shí)間和等待時(shí)間。但是SSD的寫入性能通常慢于讀取性能,并且可能會(huì)受到SSD內(nèi)的自由可編程塊的可用性的顯著影響。
[0041]通過創(chuàng)建用戶存儲(chǔ)與存儲(chǔ)設(shè)備176a_176m內(nèi)的物理位置之間的存儲(chǔ)虛擬化層可以改進(jìn)存儲(chǔ)陣列效率。在一個(gè)實(shí)施例中,卷管理器的虛擬層被放置在操作系統(tǒng)(OS)的設(shè)備-驅(qū)動(dòng)器棧中,而不是被放置在存儲(chǔ)設(shè)備內(nèi)或網(wǎng)絡(luò)中。許多存儲(chǔ)陣列在粗粒度層級(jí)施行存儲(chǔ)虛擬化,以便允許把虛擬到物理映射表?xiàng)l目存儲(chǔ)在存儲(chǔ)器中。但是這樣的存儲(chǔ)陣列無法集成例如數(shù)據(jù)壓縮、重復(fù)數(shù)據(jù)刪除以及修改時(shí)拷貝(copy-on-modify)操作。許多文件系統(tǒng)支持細(xì)粒度虛擬到物理映射表,但是其不支持大存儲(chǔ)陣列,比如設(shè)備組173a-173m。相反,卷管理器或盤陣列管理器被用來支持設(shè)備組173a-173m。
[0042]在一個(gè)實(shí)施例中,一個(gè)或多個(gè)映射表可以被存儲(chǔ)在存儲(chǔ)設(shè)備176a_176m中,而不是例如RAM172、存儲(chǔ)器介質(zhì)130或處理器122內(nèi)的高速緩存之類的存儲(chǔ)器。存儲(chǔ)設(shè)備176a-176m可以是利用閃存的SSD。對(duì)應(yīng)于SSD的較低讀取訪問和等待時(shí)間可以允許在服務(wù)于來自客戶端計(jì)算機(jī)的存儲(chǔ)裝置訪問請(qǐng)求的同時(shí)發(fā)生少數(shù)的從屬讀取操作。所述從屬讀取操作可以被用來在服務(wù)于存儲(chǔ)裝置訪問請(qǐng)求期間訪問一個(gè)或多個(gè)索引、一個(gè)或多個(gè)映射表以及用戶數(shù)據(jù)。
[0043]在一個(gè)實(shí)例中,可以通過從屬讀取操作來施行I/O重定向。在另一個(gè)實(shí)例中,可以通過從屬讀取操作來施行在線重復(fù)數(shù)據(jù)刪除。在另一個(gè)實(shí)例中,可以完全在映射表內(nèi)施行例如大型拷貝、移動(dòng)或歸零操作之類的批量陣列任務(wù),而不是訪問保存用戶數(shù)據(jù)的存儲(chǔ)位置。這樣的直接映射操縱可以大大減少存儲(chǔ)設(shè)備176a-176m內(nèi)的I/O通信量和數(shù)據(jù)移動(dòng)。對(duì)應(yīng)于服務(wù)于存儲(chǔ)裝置訪問請(qǐng)求和施行來自SSD的從屬讀取操作的組合時(shí)間可能少于服務(wù)于來自旋轉(zhuǎn)中的HDD的存儲(chǔ)裝置訪問請(qǐng)求的時(shí)間。
[0044]此外,映射表內(nèi)的信息可以被壓縮??梢赃x擇特定壓縮算法以便允許識(shí)別出各個(gè)單獨(dú)的組成部分,比如多條記錄當(dāng)中的某一條記錄內(nèi)的一個(gè)關(guān)鍵字。因此可以發(fā)生針對(duì)多條已壓縮記錄當(dāng)中的給定關(guān)鍵字的搜索。在各個(gè)實(shí)施例中,可以在無需解壓縮每一個(gè)元組的情況下施行針對(duì)給定關(guān)鍵字的搜索,這是通過把所述關(guān)鍵字的已壓縮表示與存儲(chǔ)在所述元組的相關(guān)字段中的已壓縮信息進(jìn)行比較而實(shí)現(xiàn)的。如果找到匹配,則可以僅對(duì)匹配的記錄進(jìn)行解壓縮。對(duì)映射表的各條記錄內(nèi)的元組進(jìn)行壓縮還可以允許細(xì)粒度層級(jí)的映射。這一細(xì)粒度層級(jí)的映射可以允許直接映射操作以作為針對(duì)通常的批量陣列任務(wù)的替換方案。后面將討論關(guān)于聞效存儲(chǔ)虛擬化的進(jìn)一步細(xì)節(jié)。
[0045]同樣,如圖所示,網(wǎng)絡(luò)架構(gòu)100包括通過網(wǎng)絡(luò)180和190彼此互連并且互連到數(shù)據(jù)存儲(chǔ)陣列120a-120b的客戶端計(jì)算機(jī)系統(tǒng)110a-110c。網(wǎng)絡(luò)180和190可以包括多種技術(shù),其中包括無線連接、直接局域網(wǎng)(LAN)連接、例如因特網(wǎng)之類的廣域網(wǎng)(WAN)連接、路由器、存儲(chǔ)區(qū)域網(wǎng)絡(luò)、以太網(wǎng)等等。網(wǎng)絡(luò)180和190可以包括可以是無線的一個(gè)或多個(gè)LAN。網(wǎng)絡(luò)180和190還可以包括遠(yuǎn)程直接存儲(chǔ)器訪問(RDMA)硬件和/或軟件、傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)硬件和/或軟件、路由器、轉(zhuǎn)發(fā)器、交換機(jī)、網(wǎng)格等等。例如光纖信道、以太網(wǎng)上的光纖信道(FCoE)、iSCSI等協(xié)議可以被用在網(wǎng)絡(luò)180和190中。交換機(jī)140可以利用與網(wǎng)絡(luò)180和190同時(shí)關(guān)聯(lián)的協(xié)議。網(wǎng)絡(luò)190可以與被用于因特網(wǎng)160的一個(gè)通信協(xié)議集合接口,比如傳輸控制協(xié)議(TCP)和互聯(lián)網(wǎng)協(xié)議(IP),或者TCP/IP。交換機(jī)150可以是TCP/IP交換機(jī)。
[0046]客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc代表許多靜止或移動(dòng)計(jì)算機(jī),比如臺(tái)式個(gè)人計(jì)算機(jī)(PC)、服務(wù)器、服務(wù)器群、工作站、膝上型計(jì)算機(jī)、手持式計(jì)算機(jī)、服務(wù)器、個(gè)人數(shù)字助理(PDA)、智能電話等等。通常來說,客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc包括一個(gè)或多個(gè)處理器,所述處理器包括一個(gè)或多個(gè)處理器核心。每一個(gè)處理器核心包括用于執(zhí)行根據(jù)一個(gè)預(yù)定義通用指令集的指令的電路。舉例來說,可以選擇x86指令集架構(gòu)?;蛘呖梢赃x擇
Alpha?、PowerPC?、SPARC?或者任何其他通用指令集架構(gòu)。所述處理器核心可以
訪問用于數(shù)據(jù)和計(jì)算機(jī)程序指令的高速緩沖存儲(chǔ)器子系統(tǒng)。所述高速緩存子系統(tǒng)可以耦合到包括隨機(jī)存取存儲(chǔ)器(RAM)和存儲(chǔ)設(shè)備的存儲(chǔ)器架構(gòu)。
[0047]客戶端計(jì)算機(jī)系統(tǒng)內(nèi)的每一個(gè)處理器核心和存儲(chǔ)器架構(gòu)可以連接到網(wǎng)絡(luò)接口。除了硬件組件之外,每一個(gè)客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc還可以包括存儲(chǔ)在所述存儲(chǔ)器架構(gòu)內(nèi)的基本操作系統(tǒng)(OS)?;綩S可以代表多種操作系統(tǒng)當(dāng)中的任一種,比如
MS-DOS?、MS-WINDOWS?、OS/2?、UNIX?、Linux?、Solaris?、AIX?、
DART等等。因此,基本OS可以適于為末端用戶提供各種服務(wù),并且提供適于支持執(zhí)行各種程序的軟件框架。此外,每一個(gè)客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc可以包括被用來支持虛擬機(jī)(VM)的管理程序(hypervisor)。正如本領(lǐng)域技術(shù)人員所知,虛擬化可以被使用在臺(tái)式計(jì)算機(jī)和服務(wù)器中以便把例如OS之類的軟件與系統(tǒng)的硬件完全地或部分地解耦。虛擬化可以為末端用戶提供多個(gè)OS運(yùn)行在同一臺(tái)機(jī)器上的假象,其中每一個(gè)OS具有其自身的資源以及對(duì)于建立在每一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a-120b內(nèi)的上的邏輯存儲(chǔ)實(shí)體(例如LUN)的訪問。
[0048]每一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a_120b可以被用于在例如客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc之類的不同服務(wù)器之間共享數(shù)據(jù)。每一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a-120b包括用于數(shù)據(jù)存儲(chǔ)的存儲(chǔ)子系統(tǒng)170。存儲(chǔ)子系統(tǒng)170可以包括多個(gè)存儲(chǔ)設(shè)備176a-176m。每一個(gè)這些存儲(chǔ)設(shè)備176a-176m可以是SSD??刂破?74可以包括用于應(yīng)對(duì)所接收到的讀取/寫入請(qǐng)求的邏輯。隨機(jī)存取存儲(chǔ)器(RAM) 172可以被用來對(duì)例如所接收到的寫入請(qǐng)求之類的操作進(jìn)行分批。在各個(gè)實(shí)施例中,當(dāng)對(duì)寫入操作(或其他操作)進(jìn)行分批時(shí),可以使用非易失性存儲(chǔ)裝置(例如NVRAM)。
[0049]存儲(chǔ)在存儲(chǔ)器介質(zhì)130中的基本0S132、卷管理器134 (或者盤陣列管理器134)、任何OS驅(qū)動(dòng)程序(未示出)以及其他軟件可以提供訪問文件的功能以及對(duì)于這些功能的管理?;綩S 132可以是例如NetApp Data ONT AP?,或其他存儲(chǔ)操作系統(tǒng)?;?S132和OS驅(qū)動(dòng)程序可以包括存儲(chǔ)在存儲(chǔ)器介質(zhì)130上并且可由處理器122執(zhí)行的程序指令,以便在存儲(chǔ)子系統(tǒng)170中施行對(duì)應(yīng)于所接收到的請(qǐng)求的一項(xiàng)或多項(xiàng)存儲(chǔ)器訪問操作。圖1中所示的系統(tǒng)通??梢园ㄒ粋€(gè)或多個(gè)文件服務(wù)器和/或塊服務(wù)器。
[0050]每一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a_120b可以使用網(wǎng)絡(luò)接口 124來連接到網(wǎng)絡(luò)180。類似于客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc,在一個(gè)實(shí)施例中,網(wǎng)絡(luò)接口 124的功能可以被包括在網(wǎng)絡(luò)適配器卡中。網(wǎng)絡(luò)接口 124的功能可以利用硬件和軟件全部二者來實(shí)施。隨機(jī)存取存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)都可以被包括在網(wǎng)絡(luò)接口 124的網(wǎng)絡(luò)卡實(shí)現(xiàn)方式中。可以使用一個(gè)或多個(gè)專用集成電路(ASIC)來提供網(wǎng)絡(luò)接口 124的功能。
[0051]除了前述內(nèi)容之外,數(shù)據(jù)存儲(chǔ)陣列120a_120b內(nèi)的每一個(gè)存儲(chǔ)控制器174可以支持例如快照、復(fù)制和高可用性之類的存儲(chǔ)陣列功能。此外,每一個(gè)存儲(chǔ)控制器174可以支持包括多個(gè)卷的虛擬機(jī)環(huán)境,每一個(gè)卷包括多個(gè)快照。在一個(gè)實(shí)例中,存儲(chǔ)控制器174可以支持?jǐn)?shù)以十萬計(jì)的卷,其中每一個(gè)卷包括數(shù)以千計(jì)的快照。在一個(gè)實(shí)施例中,一個(gè)卷可以被映射在固定尺寸的扇區(qū)中,比如存儲(chǔ)設(shè)備176a-176m內(nèi)的4千字節(jié)(KB)頁面。在另一個(gè)實(shí)施例中,例如對(duì)于寫入請(qǐng)求,一個(gè)卷可以被映射在可變尺寸的扇區(qū)中??梢允褂镁鞩D、快照ID和扇區(qū)號(hào)來標(biāo)識(shí)給定卷。
[0052]一個(gè)地址翻譯表可以包括多個(gè)條目,其中每一個(gè)條目保存對(duì)應(yīng)于相應(yīng)的數(shù)據(jù)組成部分的虛擬到物理映射。該映射表可以被用于把來自每一個(gè)客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc的邏輯讀取/寫入請(qǐng)求映射到存儲(chǔ)設(shè)備176a-176m中的物理位置??梢栽趯?duì)應(yīng)于所接收到的讀取/寫入請(qǐng)求的查找操作期間從映射表讀取“物理”指針數(shù)值。該物理指針數(shù)值隨后可以被用來定位存儲(chǔ)設(shè)備176a-176m內(nèi)的物理位置。應(yīng)當(dāng)提到的是,物理指針數(shù)值可以被用來訪問存儲(chǔ)設(shè)備176a-176m當(dāng)中的給定存儲(chǔ)設(shè)備內(nèi)的另一個(gè)映射表。因此,在物理指針數(shù)值與目標(biāo)存儲(chǔ)位置之間可以存在一個(gè)或多個(gè)間接層級(jí)。
[0053]在另一個(gè)實(shí)施例中,映射表可以包括被用來刪除重復(fù)數(shù)據(jù)(刪除重復(fù)的與表有關(guān)的信息)的信息。存儲(chǔ)在重復(fù)數(shù)據(jù)刪除表中的信息可以包括對(duì)于給定數(shù)據(jù)組成部分所計(jì)算的一個(gè)或多個(gè)散列數(shù)值與指向保存所述給定數(shù)據(jù)組成部分的其中一個(gè)存儲(chǔ)設(shè)備176a-176m中的某一物理位置的物理指針之間的映射。此外,所述給定數(shù)據(jù)組成部分的長(zhǎng)度和對(duì)應(yīng)于相應(yīng)條目的狀態(tài)信息也可以被存儲(chǔ)在重復(fù)數(shù)據(jù)刪除表中。
[0054]現(xiàn)在參照?qǐng)D2,其中示出了映射表的一個(gè)實(shí)施例的一般化方塊圖。如前所述,可以將一個(gè)或多個(gè)映射表用于I/o重定向或翻譯、用戶數(shù)據(jù)的重復(fù)拷貝的重復(fù)數(shù)據(jù)刪除、卷快照映射等等。映射表可以被存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m中。圖2中示出的圖示代表映射表的組織和存儲(chǔ)的一個(gè)實(shí)施例的邏輯表示。所示出的每一個(gè)層級(jí)可以包括對(duì)應(yīng)于一個(gè)不同時(shí)間段的映射表?xiàng)l目。舉例來說,層級(jí)“ I ”可以包括比存儲(chǔ)在層級(jí)“2”中的信息更早的信息。類似地,層級(jí)“2”可以包括比存儲(chǔ)在層級(jí)“3”中的信息更早的信息。存儲(chǔ)在圖2中所示的記錄、頁面和層級(jí)中的信息可以按照隨機(jī)存取方式被存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m內(nèi)。此外,給定的映射表?xiàng)l目的某些部分或全部的拷貝可以被存儲(chǔ)在RAM172中,存儲(chǔ)在控制器174內(nèi)的緩沖器中,存儲(chǔ)在存儲(chǔ)器介質(zhì)130中,以及存儲(chǔ)在處理器122內(nèi)或者與之耦合的一個(gè)或多個(gè)高速緩存中。在各個(gè)實(shí)施例中,在每一個(gè)層級(jí)中可以包括對(duì)應(yīng)于作為該層級(jí)的一部分的映射的相應(yīng)索引(正如后面在圖4中所描繪的那樣)。這樣的索引可以包括映射表?xiàng)l目的標(biāo)識(shí)以及其在所述層級(jí)內(nèi)的存儲(chǔ)位置(例如頁面的標(biāo)識(shí))。在其他實(shí)施例中,與映射表?xiàng)l目相關(guān)聯(lián)的索引可以是在邏輯上并非所述層級(jí)本身的一部分的一個(gè)或多個(gè)不同實(shí)體。
[0055]一般來說,每一個(gè)映射表包括由各行和各列構(gòu)成的一個(gè)集合。單一記錄可以作為一行被存儲(chǔ)在映射表中。記錄也可以被稱作條目。在一個(gè)實(shí)施例中,一條記錄存儲(chǔ)至少一個(gè)包括關(guān)鍵字的元組。各個(gè)元組還可以(或者可以不)包括數(shù)據(jù)字段,所述數(shù)據(jù)字段包括例如被用來識(shí)別或定位存儲(chǔ)在存儲(chǔ)子系統(tǒng)170中的數(shù)據(jù)組成部分的指針之類的數(shù)據(jù)。應(yīng)當(dāng)提到的是,在各個(gè)實(shí)施例中,所述存儲(chǔ)子系統(tǒng)可以包括具有內(nèi)部映射機(jī)制的存儲(chǔ)設(shè)備(例如SSD)。在這樣的實(shí)施例中,元組中的指針本身可以不是實(shí)際的物理地址。相反,所述指針可以是由存儲(chǔ)設(shè)備映射到設(shè)備內(nèi)的物理位置的邏輯地址。隨著時(shí)間,邏輯地址與物理地址之間的這一內(nèi)部映射可以改變。在其他實(shí)施例中,映射表中的記錄可以僅包含關(guān)鍵字字段而沒有附加的相關(guān)聯(lián)的數(shù)據(jù)字段。與對(duì)應(yīng)于給定記錄的數(shù)據(jù)組成部分相關(guān)聯(lián)的屬性可以被存儲(chǔ)在表中的各列或字段中。例如有效指標(biāo)、數(shù)據(jù)齡期、數(shù)據(jù)尺寸之類的狀態(tài)信息可以被存儲(chǔ)在字段中,比如圖2中所示的字段O到字段N。在各個(gè)實(shí)施例中,每一列存儲(chǔ)對(duì)應(yīng)于一種給定類型的信息。在一些實(shí)施例中,可以對(duì)于所選字段利用壓縮技術(shù),從而在某些情況下可能得到其已壓縮表示的長(zhǎng)度為零個(gè)比特的字段。應(yīng)當(dāng)提到的是,雖然后面的討論通常把映射表描述為映射地址(例如虛擬到物理地址),但是在其他實(shí)施例中,在應(yīng)用所述表、方法和機(jī)制時(shí),所述關(guān)鍵字可以是文件標(biāo)識(shí)符或?qū)ο髽?biāo)識(shí)符。舉例來說,在這樣的實(shí)施例中,所述系統(tǒng)可以被用作文件服務(wù)器或?qū)ο蠓?wù)器。在各個(gè)實(shí)施例中,這里所描述的方法和機(jī)制可以被用來服務(wù)于塊、對(duì)象和文件,并且在其間動(dòng)態(tài)地移動(dòng)空間??赡茉O(shè)想到許多這樣的實(shí)施例。
[0056]關(guān)鍵字是映射表中的可能把一個(gè)數(shù)據(jù)行與另一行區(qū)分的實(shí)體。每一行也可以被稱作一個(gè)條目或記錄。一個(gè)關(guān)鍵字可以是單一列,或者可以由被用來標(biāo)識(shí)一條記錄的一組列構(gòu)成。在一些實(shí)施例中,一個(gè)關(guān)鍵字可以對(duì)應(yīng)于一定數(shù)值范圍而不是單一數(shù)值。舉例來說,對(duì)應(yīng)于一定范圍的關(guān)鍵字可以被表不為一定范圍的起始和結(jié)束,或者被表不為起始和長(zhǎng)度,或者用其他方式表示。此外,對(duì)應(yīng)于關(guān)鍵字的范圍可能與其他關(guān)鍵字重疊,其中包括范圍或者單獨(dú)的數(shù)值。在一個(gè)實(shí)例中,地址翻譯映射表可以利用包括卷標(biāo)識(shí)符(ID)、例如邏輯地址或虛擬地址之類的地址、快照ID、扇區(qū)號(hào)等等的關(guān)鍵字。所接收到的給定讀取/寫入存儲(chǔ)裝置訪問請(qǐng)求可以標(biāo)識(shí)出特定卷、扇區(qū)和長(zhǎng)度。一個(gè)扇區(qū)可以是存儲(chǔ)在一個(gè)卷中的一個(gè)邏輯數(shù)據(jù)塊。扇區(qū)在不同的卷上可以具有不同的尺寸。地址翻譯映射表可以用扇區(qū)尺寸單元來映射卷。
[0057]卷標(biāo)識(shí)符(ID)可以被用來訪問傳達(dá)卷ID和相應(yīng)的當(dāng)前快照ID的卷表。該信息連同所接收到的扇區(qū)號(hào)可以被用來訪問地址翻譯映射表。因此,在這樣的實(shí)施例中,用于訪問地址翻譯映射表的關(guān)鍵字?jǐn)?shù)值是卷ID、快照ID和所接收到的卷號(hào)的組合。在一個(gè)實(shí)施例中,地址翻譯映射表內(nèi)的各條記錄通過卷ID排序,隨后是扇區(qū)號(hào),隨后是快照ID。這一排序可以把不同快照中的數(shù)據(jù)組成部分的不同版本分組在一起。因此,在對(duì)應(yīng)于存儲(chǔ)裝置訪問讀取請(qǐng)求的查找期間,可以利用針對(duì)存儲(chǔ)設(shè)備176a-176m的更少讀取操作找到相應(yīng)的數(shù)據(jù)組成部分。
[0058]地址翻譯映射表可以傳達(dá)物理指針數(shù)值,其表明數(shù)據(jù)存儲(chǔ)子系統(tǒng)170內(nèi)的存儲(chǔ)對(duì)應(yīng)于所接收到的數(shù)據(jù)存儲(chǔ)裝置訪問請(qǐng)求的數(shù)據(jù)組成部分的位置??梢园殃P(guān)鍵字?jǐn)?shù)值與存儲(chǔ)在映射表中的一個(gè)或多個(gè)關(guān)鍵字?jǐn)?shù)值進(jìn)行比較。在所示出的實(shí)例中,為了易于說明示出了更為簡(jiǎn)單的關(guān)鍵字?jǐn)?shù)值,比如“0”、“2”、“12”等等。物理指針數(shù)值可以被存儲(chǔ)在相應(yīng)的記錄中的一個(gè)或多個(gè)字段中。
[0059]物理指針數(shù)值可以包括片段標(biāo)識(shí)符(ID)和標(biāo)識(shí)出存儲(chǔ)位置的物理地址。一個(gè)片段可以是每一個(gè)存儲(chǔ)設(shè)備176a-176m中的基本分配單元。一個(gè)片段可以具有獨(dú)立設(shè)備冗余陣列(RAID)層級(jí)和數(shù)據(jù)類型。在分配期間,一個(gè)片段可以具有一個(gè)或多個(gè)所選存儲(chǔ)設(shè)備176a-176m以用于相應(yīng)的存儲(chǔ)。在一個(gè)實(shí)施例中,一個(gè)片段可以被分配存儲(chǔ)設(shè)備176a_176m當(dāng)中的一個(gè)或多個(gè)所選存儲(chǔ)設(shè)備當(dāng)中的每一個(gè)存儲(chǔ)設(shè)備上的相等數(shù)量的存儲(chǔ)空間。數(shù)據(jù)存儲(chǔ)裝置訪問請(qǐng)求可以對(duì)應(yīng)于多個(gè)扇區(qū),從而可能導(dǎo)致多項(xiàng)并行查找。寫入請(qǐng)求可以被放置在NVRAM緩沖器(比如RAM172)中,并且寫入完成確認(rèn)可以被發(fā)送到客戶端計(jì)算機(jī)110a-119c當(dāng)中的相應(yīng)的客戶端計(jì)算機(jī)。在后來的某一時(shí)間,一項(xiàng)異步處理可以把所緩沖的寫入請(qǐng)求沖刷到存儲(chǔ)設(shè)備176a-176m。
[0060]在另一個(gè)實(shí)例中,圖2中所示的映射表可以是重復(fù)數(shù)據(jù)刪除表。重復(fù)數(shù)據(jù)刪除表可以利用包括從與存儲(chǔ)裝置訪問請(qǐng)求相關(guān)聯(lián)的數(shù)據(jù)組成部分確定的散列數(shù)值。重復(fù)數(shù)據(jù)刪除操作的初始步驟可以與其他操作同時(shí)施行,比如讀取/寫入請(qǐng)求、垃圾收集操作、trim(立即擦除)操作等等。對(duì)于給定的寫入請(qǐng)求,從其中一個(gè)客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc發(fā)送的數(shù)據(jù)可以是一個(gè)數(shù)據(jù)流,比如字節(jié)流。正如本領(lǐng)域技術(shù)人員所熟知的那樣,一個(gè)數(shù)據(jù)流可以被劃分成一個(gè)固定長(zhǎng)度或可變長(zhǎng)度組塊的序列。組塊化算法可以把數(shù)據(jù)流劃分成可被稱作“組塊”的各個(gè)離散的數(shù)據(jù)組成部分。一個(gè)組塊可以是一個(gè)子文件內(nèi)容可尋址數(shù)據(jù)單元。在各個(gè)實(shí)施例中,可以使用一個(gè)表或其他結(jié)構(gòu)來決定將對(duì)給定文件類型或數(shù)據(jù)類型使用的具體組塊化算法??梢酝ㄟ^參照其文件名擴(kuò)展、單獨(dú)的標(biāo)識(shí)信息、數(shù)據(jù)本身的內(nèi)容等等來確定文件的類型。所得到的組塊隨后可以被存儲(chǔ)在其中一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a-120b中以允許共享所述組塊。這樣的組塊可以按照多種方式被單獨(dú)存儲(chǔ)或者分組在一起。
[0061]在各個(gè)實(shí)施例中,所述組塊可以通過允許從其組塊重建更大的數(shù)據(jù)組成部分的數(shù)據(jù)結(jié)構(gòu)來表示(例如可以基于所存儲(chǔ)的數(shù)據(jù)的一個(gè)或多個(gè)更小組塊來重建特定文件)。相應(yīng)的數(shù)據(jù)結(jié)構(gòu)可以記錄其相應(yīng)的組塊,其中包括所計(jì)算的相關(guān)聯(lián)的散列數(shù)值、指向其在其中一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a-120b中的位置的指針(物理和/或邏輯)以及其長(zhǎng)度。對(duì)于每一個(gè)數(shù)據(jù)組成部分,可以使用重復(fù)數(shù)據(jù)刪除應(yīng)用來計(jì)算相應(yīng)的散列數(shù)值。舉例來說,可以使用例如消息摘要算法5 (MD5)、安全散列算法(SHA)等算法來計(jì)算相應(yīng)的散列數(shù)值。為了知道對(duì)應(yīng)于所接收到的寫入請(qǐng)求的給定數(shù)據(jù)組成部分是否已經(jīng)被存儲(chǔ)在其中一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a-120b中,可以把對(duì)于給定數(shù)據(jù)組成部分所計(jì)算的散列數(shù)值的各個(gè)比特(或者所述散列數(shù)值的一個(gè)比特子集)與存儲(chǔ)在其中一個(gè)或多個(gè)數(shù)據(jù)存儲(chǔ)陣列120a-120b中的數(shù)據(jù)組成部分的散列數(shù)值中的各個(gè)比特進(jìn)行比較。[0062]映射表可以包括如圖2中所示的一個(gè)或多個(gè)層級(jí)。映射表可以包括16到64個(gè)層級(jí),但是可能設(shè)想到在映射表中所支持的另一數(shù)目的層級(jí)。在圖2中為了易于說明示出了三個(gè)層級(jí),其分別被標(biāo)記為層級(jí)“I”、層級(jí)“2”和層級(jí)“N”。映射表內(nèi)的每一個(gè)層級(jí)可以包括一個(gè)或多個(gè)分區(qū)。在一個(gè)實(shí)施例中,每一個(gè)分區(qū)是一個(gè)4千字節(jié)(KB)頁面。舉例來說,層級(jí)“N”被顯示為包括頁面210a-210g,層級(jí)“2”包括頁面210h_210 j,并且層級(jí)“ I ”包括頁面210k-210n??赡茉O(shè)想到對(duì)于映射表內(nèi)的每一個(gè)層級(jí)還可以選擇其他分區(qū)尺寸。此外,一個(gè)或多個(gè)層級(jí)可能具有單一分區(qū),即該層級(jí)本身。
[0063]在一個(gè)實(shí)施例中,通過時(shí)間將映射表內(nèi)的多個(gè)層級(jí)排序。舉例來說,在圖2中,層級(jí)“I”可能早于層級(jí)“2”。類似地,層級(jí)“2”可能早于層級(jí)“N”。在一個(gè)實(shí)施例中,當(dāng)檢測(cè)到對(duì)應(yīng)于在映射表中插入一個(gè)或多個(gè)新條目的條件時(shí),可以創(chuàng)建新的層級(jí)。在各個(gè)實(shí)施例中,在創(chuàng)建新的層級(jí)時(shí),為該新層級(jí)給出的編號(hào)/標(biāo)示大于為在時(shí)間上先于該新層級(jí)的各個(gè)層級(jí)給出的編號(hào)。舉例來說,如果最近創(chuàng)建的層級(jí)被指派了數(shù)值8,則可以為新創(chuàng)建的層級(jí)指派數(shù)值9。按照這種方式,可以建立或確定各個(gè)層級(jí)之間的時(shí)間關(guān)系??梢哉J(rèn)識(shí)到,各個(gè)數(shù)字?jǐn)?shù)值不需要是嚴(yán)格地順序的。此外,替換實(shí)施例可以反轉(zhuǎn)編號(hào)方案,從而使得更新的層級(jí)具有更小的數(shù)字標(biāo)示。此外,其他實(shí)施例可以利用非數(shù)字標(biāo)示在各個(gè)層級(jí)之間進(jìn)行區(qū)分??赡茉O(shè)想到許多這樣的實(shí)施例。每一個(gè)接下來的更早層級(jí)具有從前一個(gè)更晚層級(jí)的標(biāo)記整數(shù)數(shù)值遞減I的標(biāo)記??梢允褂靡粋€(gè)未示出的單獨(dú)的表在邏輯上描述映射表。舉例來說,所述單獨(dú)的表的每一個(gè)條目可以包括給定的層級(jí)ID以及存儲(chǔ)在所述給定的層級(jí)ID內(nèi)的頁面ID的列表。
[0064]通過創(chuàng)建用于插入新記錄的新的最高層級(jí),通過附加新記錄而更新映射表。在一個(gè)實(shí)施例中,創(chuàng)建單一層級(jí)以作為新的最高層級(jí),并且每一個(gè)新記錄被插入到該單一層級(jí)中。在另一個(gè)實(shí)施例中,在插入到映射表中之前,可以在新記錄中搜索重復(fù)關(guān)鍵字??梢詣?chuàng)建單一層級(jí)以作為新的最高層級(jí)。當(dāng)找到存儲(chǔ)重復(fù)關(guān)鍵字的給定記錄時(shí),可以把在該給定記錄之前緩沖的每一條記錄插入到該單一層級(jí)中。可以緩沖新的記錄以保留存儲(chǔ)器排序,比如各條請(qǐng)求的按次序完成。隨后可以創(chuàng)建另一個(gè)單一層級(jí),并且除非找到存儲(chǔ)重復(fù)關(guān)鍵字的另一條記錄,否則可以把其余的新記錄插入到該另一個(gè)單一層級(jí)中。如果找到這樣的記錄,則重復(fù)所述步驟。映射表內(nèi)的存儲(chǔ)與其中一條新記錄相同的關(guān)鍵字?jǐn)?shù)值的已有記錄不被編輯或者通過插入新記錄而原位覆寫。
[0065]雖然所述層級(jí)的尺寸被顯示為隨著更低層級(jí)大于更新層級(jí)而增大,但是更高層級(jí)可以在大于或小于相鄰層級(jí)之間交替。將要插入到映射表中的更新記錄的數(shù)目可以隨時(shí)間改變,并且產(chǎn)生波動(dòng)的層級(jí)尺寸。由于更低層級(jí)的平臺(tái)化,更低層級(jí)可能大于更新層級(jí)。在檢測(cè)到特定條件時(shí),可以把兩個(gè)或多更低層級(jí)平坦化成單一層級(jí)。后面將提供進(jìn)一步的細(xì)節(jié)。
[0066]在對(duì)于存儲(chǔ)在映射表中的記錄沒有原位編輯的情況下,被放置在更高層級(jí)中的更新記錄可以覆蓋位于更低層級(jí)中的存儲(chǔ)相同關(guān)鍵字的記錄。舉例來說,當(dāng)通過給定關(guān)鍵字?jǐn)?shù)值訪問映射表時(shí),可以找到存儲(chǔ)有保存與給定關(guān)鍵字?jǐn)?shù)值匹配的關(guān)鍵字?jǐn)?shù)值的記錄的一個(gè)或多個(gè)層級(jí)。在這種情況下,所述一個(gè)或多個(gè)層級(jí)當(dāng)中的最高層級(jí)可以被選擇來提供存儲(chǔ)在其相應(yīng)記錄中的信息以作為所述訪問的結(jié)果。后面將提供進(jìn)一步的細(xì)節(jié)。此外,后面將提供與對(duì)應(yīng)于將一條或多條新記錄插入到映射表中的所檢測(cè)到的條件以及信息存儲(chǔ)有關(guān)的進(jìn)一步細(xì)節(jié)。
[0067]在一個(gè)實(shí)施例中,可以通過關(guān)鍵字對(duì)給定頁面內(nèi)的各個(gè)條目進(jìn)行排序。舉例來說,可以按照根據(jù)包括在條目中的關(guān)鍵字的升序?qū)Ω鱾€(gè)條目進(jìn)行排序。此外,在各個(gè)實(shí)施例中,可以根據(jù)任何所希望的排序順序?qū)σ粋€(gè)層級(jí)內(nèi)的各個(gè)頁面進(jìn)行排序。在各個(gè)實(shí)施例中,還可以對(duì)一個(gè)層級(jí)內(nèi)的各個(gè)頁面進(jìn)行排序(例如根據(jù)關(guān)鍵字?jǐn)?shù)值等等)。在圖2的實(shí)例中,層級(jí)N的頁面210a包括根據(jù)關(guān)鍵字?jǐn)?shù)值以升序排序的各條記錄。在各個(gè)實(shí)施例中,可以使用一個(gè)或多個(gè)列來存儲(chǔ)關(guān)鍵字?jǐn)?shù)值。在圖2的實(shí)例中,在每一個(gè)元組中示出了兩個(gè)列或字段以用于存儲(chǔ)關(guān)鍵字?jǐn)?shù)值。利用這樣的關(guān)鍵字?jǐn)?shù)值,隨后可以按照所期望的順序?qū)Ω鳁l記錄進(jìn)行排序??梢愿鶕?jù)對(duì)應(yīng)于記錄的任何關(guān)鍵字?jǐn)?shù)值或者對(duì)應(yīng)于記錄的任何關(guān)鍵字?jǐn)?shù)值組合來施行排序。在所示出的實(shí)例中,第一條記錄存儲(chǔ)包括存儲(chǔ)在兩列中的O和8的關(guān)鍵字?jǐn)?shù)值,并且最后一條記錄存儲(chǔ)包括12和33的關(guān)鍵字?jǐn)?shù)值。在所示出的該例中,頁面210a中的處于第一條和最后一條記錄之間的每一條經(jīng)過排序的記錄在第一列中存儲(chǔ)處于O到12之間的關(guān)鍵字?jǐn)?shù)值,并且各條記錄被設(shè)置成按照從O到12的升序(至少部分地)基于第一列來存儲(chǔ)關(guān)鍵字?jǐn)?shù)值。類似地,頁面210b包括經(jīng)過排序的記錄,其中第一條記錄存儲(chǔ)關(guān)鍵字?jǐn)?shù)值12和39,最后一條記錄存儲(chǔ)關(guān)鍵字?jǐn)?shù)值31和19。在所示出的該例中,頁面210b中的處于第一條和最后一條記錄之間的每一條經(jīng)過排序的記錄在第一列中存儲(chǔ)處于12到31之間的關(guān)鍵字?jǐn)?shù)值,并且各條記錄被設(shè)置成按照從12到31的升序存儲(chǔ)關(guān)鍵字?jǐn)?shù)值。
[0068]除了前述內(nèi)容之外,還根據(jù)所期望的順序?qū)蛹?jí)N內(nèi)的各個(gè)頁面進(jìn)行排序。在各個(gè)實(shí)施例中,對(duì)一個(gè)層級(jí)內(nèi)的各個(gè)頁面進(jìn)行排序的方式可以反映出對(duì)一個(gè)頁面內(nèi)的各個(gè)條目進(jìn)行排序的順序。舉例來說,可以根據(jù)關(guān)鍵字?jǐn)?shù)值的升序?qū)σ粋€(gè)層級(jí)內(nèi)的各個(gè)頁面進(jìn)行排序。由于頁面210b中的第一個(gè)關(guān)鍵字?jǐn)?shù)值大于頁面210a中的最后一個(gè)關(guān)鍵字?jǐn)?shù)值,因此頁面210b在排序順序中跟隨在頁面210a之后。于是頁面210g將包括其關(guān)鍵字?jǐn)?shù)值大于包括在頁面210a-210f中的那些關(guān)鍵字?jǐn)?shù)值的條目(未示出)。按照這種方式,根據(jù)共同的方案對(duì)一個(gè)層級(jí)內(nèi)的所有條目進(jìn)行排序。各個(gè)條目被簡(jiǎn)單地細(xì)分成頁面或其他尺寸單位??梢哉J(rèn)識(shí)到,可以按照期望使用其他排序方案。
[0069]現(xiàn)在參照?qǐng)D3A,其中示出了被用來訪問映射表的初級(jí)索引的一個(gè)實(shí)施例的一般化方塊圖。關(guān)鍵字生成器304可以接收一項(xiàng)或多項(xiàng)所請(qǐng)求的數(shù)據(jù)輸入302。在一個(gè)實(shí)施例中,映射表是地址翻譯目錄表。所接收到的給定讀取/寫入請(qǐng)求可以標(biāo)識(shí)出特定卷、扇區(qū)和長(zhǎng)度。關(guān)鍵字生成器304可以產(chǎn)生查詢關(guān)鍵字?jǐn)?shù)值306,其包括卷標(biāo)識(shí)符(ID)、邏輯或虛擬地址、快照ID以及扇區(qū)號(hào)。其他組合也是可能的,并且也可以利用其他的或附加的數(shù)值??梢园巡樵冴P(guān)鍵字?jǐn)?shù)值306的不同部分與存儲(chǔ)在映射表內(nèi)的可能是或者可能不是鄰接的各列中的數(shù)值進(jìn)行比較。在所示出的實(shí)例中,為了易于說明使用了關(guān)鍵字?jǐn)?shù)值“22”。
[0070]如前所述,與關(guān)鍵字生成器304相關(guān)聯(lián)的組塊化算法和/或分段算法可以接收對(duì)應(yīng)于存儲(chǔ)裝置訪問請(qǐng)求的數(shù)據(jù)302。這些算法可以產(chǎn)生一個(gè)或多個(gè)數(shù)據(jù)組成部分,并且對(duì)于每一個(gè)數(shù)據(jù)組成部分選擇用以計(jì)算相應(yīng)的散列數(shù)值或查詢關(guān)鍵字?jǐn)?shù)值306的散列函數(shù)。所得到的散列數(shù)值可以被用來對(duì)重復(fù)數(shù)據(jù)刪除表進(jìn)行索引。
[0071]如圖3A中所示的初級(jí)索引310可以提供對(duì)應(yīng)于存儲(chǔ)在存儲(chǔ)設(shè)備176a_176m中的數(shù)據(jù)的位置標(biāo)識(shí)信息。舉例來說,再次參照?qǐng)D2,相應(yīng)的初級(jí)索引310(或其一部分)可以被邏輯地包括在每一個(gè)層級(jí)“I”、層級(jí)“2”和層級(jí)“N”中。同樣地,每一個(gè)層級(jí)和每一個(gè)相應(yīng)的初級(jí)索引可以按照隨機(jī)存取方式被物理地存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m中。
[0072]在一個(gè)實(shí)施例中,初級(jí)索引310可以被劃分成各個(gè)分區(qū),比如分區(qū)312a_312b。在一個(gè)實(shí)施例中,所述分區(qū)的尺寸范圍可以是從4千字節(jié)(KB)頁面到256KB,但是也可能設(shè)想到其他尺寸。初級(jí)索引310的每一個(gè)條目可以存儲(chǔ)一個(gè)關(guān)鍵字?jǐn)?shù)值。此外,每一個(gè)條目可以存儲(chǔ)相應(yīng)的唯一虛擬頁面標(biāo)識(shí)符(ID)和對(duì)應(yīng)于關(guān)鍵字?jǐn)?shù)值的層級(jí)ID。每一個(gè)條目可以存儲(chǔ)例如有效性信息之類的相應(yīng)的狀態(tài)信息。當(dāng)利用一個(gè)查詢關(guān)鍵字?jǐn)?shù)值訪問初級(jí)索引310時(shí),可以在索引310內(nèi)的各個(gè)條目當(dāng)中搜索與所述關(guān)鍵字?jǐn)?shù)值匹配或者以其他方式與之對(duì)應(yīng)的一個(gè)或多個(gè)條目。隨后可以使用來自匹配條目的信息來定位及取回標(biāo)識(shí)出作為所接收到的讀取或?qū)懭胝?qǐng)求的目標(biāo)的存儲(chǔ)位置的映射。換句話說,索引310標(biāo)識(shí)出映射的位置。在一個(gè)實(shí)施例中,所述索引中的命中提供標(biāo)識(shí)出存儲(chǔ)設(shè)備176a-176m內(nèi)的一個(gè)頁面的相應(yīng)的頁面ID,其中所述頁面存儲(chǔ)所述關(guān)鍵字?jǐn)?shù)值和相應(yīng)的物理指針數(shù)值??梢岳盟鲫P(guān)鍵字?jǐn)?shù)值來搜索由相應(yīng)的頁面ID所標(biāo)識(shí)的頁面,以便找到物理指針數(shù)值。
[0073]在圖3A的實(shí)例中,所接收到的請(qǐng)求對(duì)應(yīng)于關(guān)鍵字“22”。該關(guān)鍵字隨后被用來訪問索引310。對(duì)于索引310的搜索導(dǎo)致命中分區(qū)312b內(nèi)的一個(gè)條目。本例中的匹配條目包括例如頁面28和層級(jí)3之類的信息。基于這一結(jié)果,在被標(biāo)識(shí)為映射表的層級(jí)3內(nèi)的頁面28的頁面中找到對(duì)應(yīng)于所述請(qǐng)求的所期望的映射。利用這一信息,隨后可以對(duì)映射表進(jìn)行訪問以便取回所期望的映射。如果針對(duì)初級(jí)索引310的訪問需要訪問存儲(chǔ)裝置,則將需要至少兩次存儲(chǔ)裝置訪問以便獲得所期望的映射。因此,在后面所描述的各個(gè)實(shí)施例中,初級(jí)索引的各個(gè)部分被高速緩存或者被存儲(chǔ)在相對(duì)快速存取的存儲(chǔ)器中,以便消除針對(duì)存儲(chǔ)設(shè)備的一次訪問。在各個(gè)實(shí)施例中,對(duì)應(yīng)于映射表的整個(gè)初級(jí)索引被高速緩存。在一些實(shí)施例中,如果初級(jí)索引已變得過大從而無法整體高速緩存或者大于所期望的情況,則可以在高速緩存中使用次級(jí)、三級(jí)或其他索引部分以減小其尺寸。后面將討論次級(jí)類型索引。除了前述內(nèi)容之外,在各個(gè)實(shí)施例中,對(duì)應(yīng)于最近的命中的映射頁面也被高速緩存至少一段時(shí)間。按照這種方式,可以更加快速地服務(wù)于表現(xiàn)出具有時(shí)間局部性的訪問的處理(也就是說最近訪問的位置的映射將被高速緩存并且很容易獲得)。
[0074]現(xiàn)在參照?qǐng)D3B,其中示出了被用來訪問映射表的被高速緩存的初級(jí)索引的一個(gè)實(shí)施例的一般化方塊圖。對(duì)應(yīng)于圖3A的那些電路和邏輯部分由完全相同的附圖標(biāo)記表示。被高速緩存的初級(jí)索引314可以包括存儲(chǔ)在對(duì)應(yīng)于映射表中的多個(gè)層級(jí)的每一個(gè)初級(jí)索引310中的信息的拷貝。初級(jí)索引314可以被存儲(chǔ)在以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng)中:RAM172,控制器174內(nèi)的緩沖器,存儲(chǔ)器介質(zhì)130,以及處理器122內(nèi)的高速緩存。在一個(gè)實(shí)施例中,初級(jí)索引314可以通過關(guān)鍵字?jǐn)?shù)值被排序,但是其他排序也是可能的。初級(jí)索引314還可以被劃分成各個(gè)分區(qū),比如分區(qū)316a-316b。在一個(gè)實(shí)施例中,分區(qū)316a_316b的尺寸可以與初級(jí)索引310內(nèi)的分區(qū)312a-312b的尺寸相同。
[0075]類似于初級(jí)索引310,初級(jí)索引314的每一個(gè)條目可以存儲(chǔ)以下各項(xiàng)當(dāng)中的一項(xiàng)或多項(xiàng):關(guān)鍵字?jǐn)?shù)值,相應(yīng)的唯一虛擬頁面標(biāo)識(shí)符(ID),對(duì)應(yīng)于關(guān)鍵字?jǐn)?shù)值的層級(jí)ID,以及例如有效信息之類的狀態(tài)信息。當(dāng)利用查詢關(guān)鍵字?jǐn)?shù)值306來訪問初級(jí)索引314時(shí),其可以傳達(dá)標(biāo)識(shí)出存儲(chǔ)設(shè)備176a-176m內(nèi)的一個(gè)頁面的相應(yīng)的頁面ID,其中所述頁面同時(shí)存儲(chǔ)所述關(guān)鍵字?jǐn)?shù)值和相應(yīng)的指針數(shù)值。可以利用所述關(guān)鍵字?jǐn)?shù)值來搜索由相應(yīng)的頁面ID所標(biāo)識(shí)的頁面,以便找到指針數(shù)值。如圖所示,初級(jí)索引314可以具有存儲(chǔ)相同關(guān)鍵字?jǐn)?shù)值的多條記錄。因此,對(duì)于給定的關(guān)鍵字?jǐn)?shù)值從所述搜索可能得到多項(xiàng)命中。在一個(gè)實(shí)施例中,可以選擇具有最高層級(jí)ID數(shù)值(或者被用來標(biāo)識(shí)最晚層級(jí)或最近條目的任何指標(biāo))的命中??梢酝ㄟ^未在這里示出的合并邏輯來從多項(xiàng)命中當(dāng)中選擇一項(xiàng)命中。后面將提供關(guān)于合并邏輯的進(jìn)一步描述。
[0076]現(xiàn)在參照?qǐng)D4,其中示出了映射表和被用來訪問映射表的初級(jí)索引的另一個(gè)實(shí)施例的一般化方塊圖。對(duì)應(yīng)于圖3A中的那些電路和邏輯部分由完全相同的附圖標(biāo)記表示。映射表340可以具有類似于圖2中所示的映射表的結(jié)構(gòu)。但是沒有示出對(duì)應(yīng)于每一個(gè)層級(jí)的相應(yīng)的初級(jí)索引310的存儲(chǔ)。其中一個(gè)或多個(gè)初級(jí)索引部分310a-310i的一份拷貝可以被包括在索引拷貝330 (例如被高速緩存的拷貝)中??截?30通??梢詫?duì)應(yīng)于圖3B中所描繪的被高速緩存的索引。索引拷貝330中的信息可以被存儲(chǔ)在RAM172、控制器174內(nèi)的緩沖器、存儲(chǔ)器介質(zhì)130以及處理器122內(nèi)的高速緩存中。在所示出的實(shí)施例中,初級(jí)索引310a-310i中的信息可以與映射頁面一起被存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m中。此外還示出了次級(jí)索引320,其可以被用來訪問初級(jí)索引,比如圖中所示的初級(jí)索引310i。類似地,映射表340的訪問和更新可以按照前面所描述的那樣發(fā)生。
[0077]映射表340包括多個(gè)層級(jí),比如層級(jí)“I”到層級(jí)“N”。在所示出的實(shí)例中,每一個(gè)層級(jí)包括多個(gè)頁面。層級(jí)“N”被顯示為包括頁面“O”到“D”,層級(jí)N-1包括頁面“E”到“G”,后面以此類推。同樣地,映射表340內(nèi)的各個(gè)層級(jí)可以通過時(shí)間被排序。層級(jí)“N”可以晚于層級(jí)“N-1”,后面以此類推??梢灾辽偻ㄟ^關(guān)鍵字?jǐn)?shù)值來訪問映射表340。在所示出的實(shí)例中,通過關(guān)鍵字?jǐn)?shù)值“27”和頁面ID “32”來訪問映射表340。舉例來說,在一個(gè)實(shí)施例中,層級(jí)ID “8”可以被用來標(biāo)識(shí)將要搜索的映射表340的特定層級(jí)(或“子表”)。在標(biāo)識(shí)出所期望的子表之后,隨后可以使用頁面ID來標(biāo)識(shí)出該子表內(nèi)的所期望的頁面。最后,可以使用關(guān)鍵字來標(biāo)識(shí)所期望的頁面內(nèi)的所期望的條目。
[0078]正如前面所討論的那樣,對(duì)于被高速緩存的索引330的訪問可能會(huì)導(dǎo)致多項(xiàng)命中。在一個(gè)實(shí)施例中,所述多項(xiàng)命中的結(jié)果被提供到合并邏輯350,所述合并邏輯350識(shí)別出哪一項(xiàng)命中被用來訪問映射表340。合并邏輯350可以代表包括在存儲(chǔ)控制器內(nèi)的硬件和/或軟件。在一個(gè)實(shí)施例中,合并邏輯350被配置成識(shí)別出對(duì)應(yīng)于最近(最新)的映射的命中。這樣的識(shí)別可以是基于識(shí)別出對(duì)應(yīng)于一個(gè)條目的相應(yīng)層級(jí)等等。在所示出的實(shí)例中,接收到對(duì)應(yīng)于層級(jí)8、頁面32、關(guān)鍵字27的查詢。響應(yīng)于所述查詢,訪問層級(jí)8的頁面32。如果在頁面32內(nèi)找到關(guān)鍵字27 (命中),則返回相應(yīng)的結(jié)果(例如所示出的實(shí)例中的指針XF3209B24)。如果在頁面32內(nèi)沒有找到關(guān)鍵字27,則返回未中指示??梢詮挠成浔?40輸出該物理指針數(shù)值以便服務(wù)于與關(guān)鍵字?jǐn)?shù)值“27”對(duì)應(yīng)的存儲(chǔ)裝置訪問請(qǐng)求。
[0079]在一個(gè)實(shí)施例中,映射表340支持在線映射。舉例來說,可以在沒有實(shí)際的物理扇區(qū)把用戶數(shù)據(jù)存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m內(nèi)的情況下表示被檢測(cè)為具有足夠小的目標(biāo)的映射。一個(gè)實(shí)例可以是用戶數(shù)據(jù)內(nèi)的重復(fù)模式。取代把作為用戶數(shù)據(jù)的重復(fù)模式(例如一系列零)的多份拷貝實(shí)際存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m內(nèi),相應(yīng)的映射可以具有在狀態(tài)信息中標(biāo)記出的指示,比如在映射表中的字段O到字段N當(dāng)中的一個(gè)字段內(nèi)標(biāo)記出的指示,其表明對(duì)于讀取請(qǐng)求將返回哪一個(gè)數(shù)據(jù)數(shù)值。但是在存儲(chǔ)設(shè)備176a-176m內(nèi)的目標(biāo)位置處沒有該用戶數(shù)據(jù)的實(shí)際存儲(chǔ)。此外,可以在初級(jí)索引310的狀態(tài)信息內(nèi)存儲(chǔ)一個(gè)指示,并且可以使用任何附加的索引(這里未示出)。[0080]除了前述內(nèi)容之外,在各個(gè)實(shí)施例中,所述存儲(chǔ)系統(tǒng)可以同時(shí)支持多個(gè)版本的數(shù)據(jù)組織、數(shù)據(jù)方案等等。舉例來說,隨著系統(tǒng)硬件和軟件的演進(jìn),可以合并或者通過其他方式提供新的特征。更新的數(shù)據(jù)、索引和(例如)映射可以利用這些新特征。在圖4的實(shí)例中,新的層級(jí)N可以對(duì)應(yīng)于所述系統(tǒng)的一個(gè)版本,而更早的層級(jí)N-1可以對(duì)應(yīng)于先前的版本。為了適應(yīng)這些不同的版本,可以與每一個(gè)層級(jí)相關(guān)聯(lián)地存儲(chǔ)元數(shù)據(jù),其表明該層級(jí)使用了哪一個(gè)版本、哪些特征、壓縮方案等等。該元數(shù)據(jù)可以被存儲(chǔ)為所述索引、頁面本身或者全部二者的一部分。在進(jìn)行訪問時(shí),該元數(shù)據(jù)于是表明應(yīng)當(dāng)如何正確地應(yīng)對(duì)數(shù)據(jù)。此外,可以動(dòng)態(tài)地應(yīng)用新的方案和特征而不需要停頓系統(tǒng)。按照這種方式,系統(tǒng)的升級(jí)更加靈活,并且沒有必要重構(gòu)較早的數(shù)據(jù)以反映新的方案和方法。
[0081]現(xiàn)在參照?qǐng)D5A,其中示出了用于為讀取訪問服務(wù)的方法的一個(gè)實(shí)施例。在如前所述的網(wǎng)絡(luò)架構(gòu)100和映射表340中具體實(shí)現(xiàn)的組件可以總體上根據(jù)方法500操作。出于討論的目的,按照先后順序示出了該實(shí)施例中的各個(gè)步驟。但是在另一個(gè)實(shí)施例中,一些步驟可以按照不同于所示出的順序發(fā)生,一些步驟可以被同時(shí)施行,一些步驟可以與其他步驟組合,并且可以缺少一些步驟。
[0082]可以從其中一個(gè)客戶端IlOa-1lOc向其中一個(gè)數(shù)據(jù)存儲(chǔ)陣列120a_120b傳達(dá)讀取和存儲(chǔ)(寫入)請(qǐng)求。在所示出的實(shí)例中,接收到讀取請(qǐng)求500,并且在方塊502中生成相應(yīng)的查詢關(guān)鍵字?jǐn)?shù)值。在一些實(shí)施例中,所述請(qǐng)求本身可以包括被用來訪問索引的關(guān)鍵字,并且不需要“生成”關(guān)鍵字502。如前所述,所述查詢關(guān)鍵字?jǐn)?shù)值可以是虛擬地址索引,其包括卷ID、與所接收到的請(qǐng)求相關(guān)聯(lián)的邏輯地址或虛擬地址、快照ID、扇區(qū)號(hào)等等。在被用于重復(fù)數(shù)據(jù)刪除的實(shí)施例中,可以利用散列函數(shù)或其他函數(shù)生成查詢關(guān)鍵字?jǐn)?shù)值。對(duì)于被用來訪問映射表的查詢關(guān)鍵字?jǐn)?shù)值可能設(shè)想到其他數(shù)值。
[0083]在方塊504中,所述查詢關(guān)鍵字?jǐn)?shù)值可以被用來訪問一個(gè)或多個(gè)被高速緩存的索弓丨,以便識(shí)別出可能存儲(chǔ)對(duì)應(yīng)于所述關(guān)鍵字?jǐn)?shù)值的映射的映射表的一個(gè)或多個(gè)部分。此外還可以搜索已被高速緩存的最近被使用的映射。如果在被高速緩存的映射上檢測(cè)到命中(方塊505),則可以使用所述被高速緩存的映射來施行所請(qǐng)求的訪問(方塊512)。如果在被高速緩存的映射上沒有命中,則可以做出關(guān)于在被高速緩存的索引上是否有命中的確定(方塊506)。如果是的話,則使用對(duì)應(yīng)于所述命中的結(jié)果來識(shí)別及訪問映射表(方塊508)。舉例來說,利用初級(jí)索引310,存儲(chǔ)所述查詢關(guān)鍵字?jǐn)?shù)值的條目還可以存儲(chǔ)標(biāo)識(shí)出映射表內(nèi)的單一特定頁面的唯一虛擬頁面ID。該單一特定頁面可以同時(shí)存儲(chǔ)查詢關(guān)鍵字?jǐn)?shù)值和相關(guān)聯(lián)的物理指針數(shù)值。在方塊508中,可以訪問所識(shí)別出的映射表部分并且利用查詢關(guān)鍵字?jǐn)?shù)值施行搜索。隨后可以返回映射表結(jié)果(方塊510),并且將其用來施行對(duì)應(yīng)于原始讀取請(qǐng)求的目標(biāo)位置的存儲(chǔ)裝置訪問(方塊512)。
[0084]在一些實(shí)施例中,響應(yīng)于讀取請(qǐng)求的索引查詢可能會(huì)導(dǎo)致未中。這樣的未中可能是由于僅有所述索引的一部分被高速緩存,或者是由于錯(cuò)誤狀況(例如針對(duì)不存在的位置的讀取訪問、地址破壞等等)。在這種情況下,可以施行針對(duì)所存儲(chǔ)的索引的訪問。如果針對(duì)所存儲(chǔ)的索引的訪問導(dǎo)致命中(方塊520),則可以返回結(jié)果(方塊522),其被用來訪問映射表(方塊508)。另一方面,如果針對(duì)所存儲(chǔ)的索引的訪問導(dǎo)致未中,則可以檢測(cè)到錯(cuò)誤狀況??梢酝ㄟ^多種所期望的方式當(dāng)中的任一種來應(yīng)對(duì)錯(cuò)誤狀況。在一個(gè)實(shí)施例中,可以生成異常(方塊524),并且隨后按照所期望的方式來應(yīng)對(duì)。在一個(gè)實(shí)施例中,在方塊510中返回映射表的一部分。在各個(gè)實(shí)施例中,該部分是一個(gè)頁面,其可以是4KB頁面等等。正如前面所討論的那樣,可以對(duì)一個(gè)頁面內(nèi)的各條記錄進(jìn)行排序,以便促進(jìn)對(duì)于包括在其中的內(nèi)容的更快搜索。
[0085]在一個(gè)實(shí)施例中,映射表利用傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng)方法來進(jìn)行每一個(gè)頁面中的信息存儲(chǔ)。舉例來說,映射表內(nèi)的每一條記錄(或者行或條目)被一個(gè)緊接一個(gè)地存儲(chǔ)。這種方法可以被使用在面向行或者行存儲(chǔ)數(shù)據(jù)庫(kù)中,并且可以附加地用于關(guān)聯(lián)數(shù)據(jù)庫(kù)。這些類型的數(shù)據(jù)庫(kù)利用基于數(shù)值的存儲(chǔ)結(jié)構(gòu)?;跀?shù)值的存儲(chǔ)(VBS)架構(gòu)僅把唯一的數(shù)據(jù)數(shù)值存儲(chǔ)一次,并且自動(dòng)生成的索引系統(tǒng)保持對(duì)應(yīng)于所有數(shù)值的情境。在各個(gè)實(shí)施例中,可以按照行來存儲(chǔ)數(shù)據(jù),并且可以對(duì)于一行內(nèi)的各列(字段)使用壓縮。在一些實(shí)施例中,所使用的技術(shù)可以包括存儲(chǔ)基礎(chǔ)數(shù)值并且具有對(duì)應(yīng)于偏移量的較小字段尺寸,以及/或者具有一個(gè)基礎(chǔ)數(shù)值集合,其中一行中的一列由基礎(chǔ)選擇器和與該基礎(chǔ)的偏移量構(gòu)成。在全部?jī)煞N情況下,壓縮信息都可以被存儲(chǔ)在分區(qū)內(nèi)(例如存儲(chǔ)在分區(qū)起始處)。
[0086]在一些實(shí)施例中,所述映射表對(duì)于每一個(gè)頁面中的信息存儲(chǔ)利用面向列的數(shù)據(jù)庫(kù)系統(tǒng)(列存儲(chǔ))方法。列存儲(chǔ)單獨(dú)存儲(chǔ)每一個(gè)數(shù)據(jù)庫(kù)表列。此外,可以鄰接地、壓縮并且密集包裝的屬于同一列的各個(gè)屬性值。相應(yīng)地,可以相對(duì)快速地施行對(duì)于例如一個(gè)頁面內(nèi)的一個(gè)表列子集的讀取。列數(shù)據(jù)可以屬于均勻類型,并且可以允許使用可能在面向行的數(shù)據(jù)中不可用的存儲(chǔ)尺寸優(yōu)化。例如Lempe1-Ziv-Welch(LZ)和游程長(zhǎng)度編碼(RLE)之類的一些壓縮方案利用所檢測(cè)到的鄰近數(shù)據(jù)的相似性來進(jìn)行壓縮。此外,正如前面更加全面地描述的那樣,其他壓縮方案可以將一個(gè)數(shù)值編碼為與基礎(chǔ)數(shù)值的差異,從而與表示完整數(shù)值原本所需要的情況相比需要更少比特來表示所述差異??梢赃x擇允許識(shí)別并索引頁面內(nèi)的各條單獨(dú)記錄的壓縮算法。通過壓縮映射表內(nèi)的各條記錄可以實(shí)現(xiàn)細(xì)粒度映射。在各個(gè)實(shí)施例中,對(duì)于特定數(shù)據(jù)部分所使用的壓縮類型可以與所述數(shù)據(jù)相關(guān)聯(lián)地被存儲(chǔ)。舉例來說,壓縮類型可以被存儲(chǔ)在索引中,以作為與已壓縮數(shù)據(jù)相同的頁面的一部分(例如在某種類型的報(bào)頭中),或者以其他方式被存儲(chǔ)。按照這種方式,可以在存儲(chǔ)系統(tǒng)內(nèi)一同使用多種壓縮技術(shù)和算法。此外,在各個(gè)實(shí)施例中,可以在存儲(chǔ)數(shù)據(jù)時(shí)動(dòng)態(tài)地確定用于存儲(chǔ)頁面數(shù)據(jù)的壓縮類型。在一個(gè)實(shí)施例中,可以至少部分地基于正被壓縮的數(shù)據(jù)的性質(zhì)和類型以及/或者對(duì)應(yīng)于壓縮技術(shù)的預(yù)期資源需求和系統(tǒng)中的當(dāng)前可用資源來選擇多種壓縮技術(shù)當(dāng)中的一種。在一些實(shí)施例中將會(huì)施行多種壓縮技術(shù),并且隨后將選擇表現(xiàn)出最佳壓縮的一種以用于壓縮數(shù)據(jù)??赡茉O(shè)想到許多此類方法。
[0087]如果在映射表的任何層級(jí)中找到查詢關(guān)鍵字?jǐn)?shù)值306的匹配(方塊508),則在方塊510中,可以向合并邏輯350傳達(dá)關(guān)于命中的一項(xiàng)或多項(xiàng)指示。舉例來說,如圖4中所示,可以從層級(jí)“I”到“J”傳達(dá)一項(xiàng)或多項(xiàng)命中指示。合并邏輯350可以選擇傳達(dá)命中指示的層級(jí)“I”到“J”當(dāng)中的最高層級(jí),其也可以是最晚層級(jí)。作為訪問結(jié)果,所選層級(jí)可以提供存儲(chǔ)在相應(yīng)的記錄中的信息。
[0088]在方塊512中,可以讀取所選頁面的匹配記錄內(nèi)的一個(gè)或多個(gè)相應(yīng)的字段,以便處理相應(yīng)的請(qǐng)求。在一個(gè)實(shí)施例中,當(dāng)所述頁面內(nèi)的數(shù)據(jù)按照已壓縮格式被存儲(chǔ)時(shí),對(duì)所述頁面進(jìn)行解壓縮并且讀出相應(yīng)的物理指針數(shù)值。在另一個(gè)實(shí)施例中,只有所述匹配記錄被解壓縮,并且讀出相應(yīng)的物理指針數(shù)值。在一個(gè)實(shí)施例中,可以將一個(gè)完整的物理指針數(shù)值分解在映射表與相應(yīng)的目標(biāo)物理位置之間。因此可以訪問多個(gè)存儲(chǔ)用戶數(shù)據(jù)的物理位置,以便完成數(shù)據(jù)存儲(chǔ)訪問請(qǐng)求。
[0089]現(xiàn)在參照?qǐng)D5B,其中示出了對(duì)應(yīng)于所接收到的寫入請(qǐng)求的方法的一個(gè)實(shí)施例。響應(yīng)于所接收到的寫入請(qǐng)求(方塊530),可以創(chuàng)建對(duì)應(yīng)于所述請(qǐng)求的新的映射表?xiàng)l目(方塊532)。在一個(gè)實(shí)施例中,可以將新的虛擬到物理地址映射添加(方塊534)到映射表中,其把所述寫入請(qǐng)求的虛擬地址與存儲(chǔ)相應(yīng)的數(shù)據(jù)組成部分的物理位置配對(duì)。在各個(gè)實(shí)施例中,可以將所述新的映射與其他新的映射一起高速緩存,并且將其添加到新的最高層級(jí)的映射表?xiàng)l目中。隨后可以施行針對(duì)永久性存儲(chǔ)裝置的寫入操作(方塊536)。在各個(gè)實(shí)施例中,可以直到后來的某一時(shí)間點(diǎn)才把所述新的映射表?xiàng)l目寫入到永久性存儲(chǔ)裝置中的映射表(方塊538),這種做法被認(rèn)為更加高效。正如前面所討論的那樣,在利用固態(tài)存儲(chǔ)設(shè)備的存儲(chǔ)系統(tǒng)中,針對(duì)存儲(chǔ)裝置的寫入比來自存儲(chǔ)裝置的讀取慢很多。相應(yīng)地,按照最小化對(duì)于總體系統(tǒng)性能的影響的方式來調(diào)度針對(duì)存儲(chǔ)裝置的寫入。在一些實(shí)施例中,可以把新記錄到映射表中的插入與其他更大的數(shù)據(jù)更新相組合。通過按照這種方式組合更新可以提供更加高效的寫入操作。應(yīng)當(dāng)提到的是,在5B的方法中,與這里所描述的每一種方法一樣,為了易于討論將各項(xiàng)操作描述為按照特定順序發(fā)生。但是所述操作實(shí)際上可以按照不同順序發(fā)生,并且在某些情況下其中的各項(xiàng)操作可以同時(shí)發(fā)生。所有這樣的實(shí)施例都被設(shè)想到。
[0090]除了前述內(nèi)容之外,在一些實(shí)施例中可以使用重復(fù)數(shù)據(jù)刪除機(jī)制。圖5B描繪出總體上可以對(duì)應(yīng)于重復(fù)數(shù)據(jù)刪除系統(tǒng)和方法的操作550。在所示出的實(shí)例中,可以生成對(duì)應(yīng)于所接收到的寫入請(qǐng)求的散列(方塊540),其被用來訪問重復(fù)數(shù)據(jù)刪除表(方塊542)。如果在重復(fù)數(shù)據(jù)刪除表中命中(方塊544)(即在系統(tǒng)內(nèi)已經(jīng)存在所述數(shù)據(jù)的拷貝),則可以向重復(fù)數(shù)據(jù)刪除表添加一個(gè)新條目(方塊548)以反映新的寫入。在這種情況下,不需要把所述數(shù)據(jù)本身寫入到存儲(chǔ)裝置,并且可以丟棄所接收到的寫入數(shù)據(jù)。替換地,如果在重復(fù)數(shù)據(jù)刪除表中未命中,則創(chuàng)建對(duì)應(yīng)于新數(shù)據(jù)的新條目并且將其存儲(chǔ)在重復(fù)數(shù)據(jù)刪除表中(方塊546)。此外,施行針對(duì)存儲(chǔ)裝置的數(shù)據(jù)寫入(方塊536)。此外,可以在所述索引中創(chuàng)建一個(gè)新條目以反映所述新數(shù)據(jù)(方塊538)。在一些實(shí)施例中,如果在在線重復(fù)數(shù)據(jù)刪除操作期間發(fā)生未命中,則此時(shí)不在重復(fù)數(shù)據(jù)刪除表中施行插入。相反,在在線重復(fù)數(shù)據(jù)刪除操作期間,可以僅對(duì)于整個(gè)重復(fù)數(shù)據(jù)刪除表的一部分(例如重復(fù)數(shù)據(jù)刪除表的被高速緩存的一部分)發(fā)生具有散列數(shù)值的查詢。如果發(fā)生未命中,則可以創(chuàng)建一個(gè)新條目并且將其存儲(chǔ)在所述高速緩存中。隨后在后處理重復(fù)數(shù)據(jù)刪除操作(比如在垃圾收集期間發(fā)生的操作)期間,可以對(duì)于整個(gè)重復(fù)數(shù)據(jù)刪除表發(fā)生具有散列數(shù)值的查詢。未命中可以表明所述散列數(shù)值是獨(dú)有的散列數(shù)值。因此,可以把例如散列到物理指針映射之類的新條目插入到重復(fù)數(shù)據(jù)刪除表中。替換地,如果在后處理重復(fù)數(shù)據(jù)刪除期間檢測(cè)到命中(即檢測(cè)到復(fù)制品),則可以施行重復(fù)數(shù)據(jù)刪除以消除其中一份或多份所檢測(cè)到的拷貝。
[0091]如前所述,可以使用各種壓縮方案來編碼與映射表有關(guān)的數(shù)據(jù),以便減少所需的存儲(chǔ)裝置的數(shù)量?,F(xiàn)在參照?qǐng)D5C,其中示出了用于壓縮一個(gè)元組集合的方法的一個(gè)實(shí)施例。這種方法可以被用來向映射表或其他表寫入條目。首先可以選擇對(duì)應(yīng)于將要存儲(chǔ)的已編碼元組集合的目標(biāo)尺寸(方塊560)以及默認(rèn)編碼算法(方塊561)。隨后基于所選擇的尺寸和算法來選擇用于編碼并且存儲(chǔ)在所述表中的元組(方塊562)。在這樣的實(shí)施例中,利用當(dāng)前選擇的編碼方法來計(jì)算每一個(gè)元組的已編碼尺寸。如果正被添加的元組將導(dǎo)致所述集合中的當(dāng)前累積元組超出目標(biāo)尺寸(條件方塊564),則系統(tǒng)可以嘗試找出對(duì)應(yīng)于至此所累積的所有元組的更好的編碼算法,以便減少對(duì)于已編碼元組所需的總空間(方塊565)。如果沒有找到更小的編碼(方塊565),則忽略最近的元組,并且利用當(dāng)前的編碼方法寫入其余的元組(方塊567)。如果找到更小的編碼(方塊565),則確定新的更小編碼是否落在目標(biāo)尺寸內(nèi)(方塊566)。如果新的編碼沒有落在目標(biāo)尺寸內(nèi),則可以忽略最近提供的元組,并且利用當(dāng)前的編碼方法編碼及寫入其余的元組(方塊567)。如果所考慮的當(dāng)前元組沒有使得所述集合中的當(dāng)前累積元組超出目標(biāo)尺寸(條件方塊564),則可以進(jìn)行添加另一個(gè)元組的嘗試(方塊562)。類似地,如果在條件方塊466中找到滿足所述要求的新的編碼,則可以進(jìn)行添加另一個(gè)元組的嘗試(方塊562)。
[0092]圖示出了用于編碼元組的方法的一個(gè)實(shí)施例。在該例中描繪出原始的未編碼元組584,并且描繪出編碼在已編碼頁面568中的已編碼元組580。通常來說,所示出的實(shí)例利用一個(gè)或兩個(gè)數(shù)值來表示表中的每一個(gè)字段。第一個(gè)數(shù)值是被用來選擇基礎(chǔ)數(shù)值的基礎(chǔ)數(shù)值選擇器,第二個(gè)數(shù)值是與所選基礎(chǔ)數(shù)值的偏移量。在一個(gè)實(shí)施例中,基礎(chǔ)選擇器包括b個(gè)比特,并且所述偏移量包括k個(gè)比特,其中b和k是整數(shù)??梢詫?duì)于每一個(gè)字段分開選擇數(shù)值b和k,并且b和k的其中之一或全部二者可以是零。對(duì)于每一個(gè)已編碼字段可以存儲(chǔ)b和k的數(shù)值連同多達(dá)2b個(gè)基礎(chǔ),其中每一個(gè)可以具有表示所述基礎(chǔ)數(shù)值所需的比特?cái)?shù)目。如果b是零,則只存儲(chǔ)一個(gè)基礎(chǔ)。按照這種方式編碼的每一個(gè)字段于是需要至多編碼b+k個(gè)比特。編碼器可以考慮對(duì)應(yīng)于b和k的不同數(shù)值,以便最小化對(duì)應(yīng)于該字段的總的已編碼尺寸,其中b的更大數(shù)值通常需要k的更小數(shù)值。
[0093]圖示出了已編碼元組584的一個(gè)樣本和所得到的已編碼頁面568。所述頁面包括報(bào)頭570,其中的前兩個(gè)數(shù)值包含每一個(gè)元組中的字段的數(shù)目(572)以及頁面中的元組的數(shù)目(574)。報(bào)頭570于是具有對(duì)應(yīng)于每一個(gè)字段的一個(gè)表或數(shù)值集合。該表首先列出了對(duì)應(yīng)于給定字段的基礎(chǔ)的數(shù)目,隨后是被用來編碼與所述基礎(chǔ)的偏移量的比特?cái)?shù)目k。隨后所述頁面存儲(chǔ)利用報(bào)頭中的信息編碼的每一個(gè)元組。舉例來說,報(bào)頭570中的第一個(gè)數(shù)值(572)表明對(duì)于每一個(gè)元組有3個(gè)字段。第二個(gè)數(shù)值(574)表明在頁面568中有84個(gè)元組。后面的三個(gè)表576A-576C隨后提供對(duì)應(yīng)于所述三個(gè)字段當(dāng)中的每一個(gè)的基礎(chǔ)數(shù)值和編碼信息。表576A表明第一字段具有I個(gè)基礎(chǔ),其中4個(gè)比特被用來編碼偏移量。對(duì)應(yīng)于第一字段的唯一基礎(chǔ)是12 (即b是零)。第二個(gè)表576B表明對(duì)于第二字段有3個(gè)基礎(chǔ),并且將使用3個(gè)比特來編碼偏移量。對(duì)應(yīng)于第二字段576B的三個(gè)基礎(chǔ)是5、113和203。最后,第三個(gè)表576C表明第三字段具有2個(gè)基礎(chǔ),并且O個(gè)比特被用來編碼偏移量。
[0094]查看已編碼元組580,可以確定各個(gè)數(shù)值。在所示出的實(shí)例中,已編碼元組580中的給定行/列中的數(shù)值對(duì)應(yīng)于原始元組的相同行/列中的數(shù)值??梢哉J(rèn)識(shí)到,該圖中的各個(gè)數(shù)值的排序和位置僅僅是示例性的。各個(gè)數(shù)值和相應(yīng)的已編碼數(shù)值的實(shí)際排序可以與所描繪的情況有很大的不同。第一元組582中的第一字段被編碼為3,這是因?yàn)閿?shù)值15(未編碼數(shù)值)可以被表示為與基礎(chǔ)12的偏移量3(即15-12 = 3)。在該例中應(yīng)當(dāng)注意到,僅有一個(gè)基礎(chǔ),并且b是零。因此沒有比特被用來編碼對(duì)應(yīng)于該字段的基礎(chǔ)選擇器數(shù)值。偏移量數(shù)值3利用4個(gè)比特被編碼,從而與可能需要8、32或64個(gè)比特的典型編碼相比顯著減少。第一元組582A中的第二個(gè)數(shù)值被編碼為1,3。I表明在表576B中選擇了基礎(chǔ)I (即選擇基礎(chǔ)113),并且3表明與基礎(chǔ)113的偏移量3。所述數(shù)值I被編碼在2個(gè)比特中(22是大于或等于所述基礎(chǔ)數(shù)目的2的最小乘冪),并且所述數(shù)值3被編碼在3個(gè)比特中,從而總共是5個(gè)比特。這同樣遠(yuǎn)小于所述字段的樸素編碼。最后,最后一個(gè)字段被編碼為表明應(yīng)當(dāng)使用哪一個(gè)基礎(chǔ)的索引。在本例中,沒有比特被用來表示偏移量。第一元組在這里具有O,這是因?yàn)樗鎯?chǔ)的數(shù)值是4927,其是所述表中的對(duì)應(yīng)于報(bào)頭570中的字段576C的條目(基礎(chǔ))0。因此,對(duì)應(yīng)于每一個(gè)元組的總的已編碼空間是(0+4) + (2+3) + (1+0) = 10個(gè)比特,從而與所需的未編碼空間相比大大減少。
[0095]在各個(gè)實(shí)施例中,如果字段的最大尺寸被增大,正如為了容許更大的虛擬地址或LUN標(biāo)識(shí)符所可能采取的做法,則不需要對(duì)頁面進(jìn)行重新編碼。在最壞情況下,可能需要略微修改報(bào)頭以便容許更大的基礎(chǔ)數(shù)值,但是這方面只需要最小的努力。此外還有可能通過簡(jiǎn)單地修改所述基礎(chǔ)而將許多數(shù)值修改固定數(shù)量,正如在把一定塊范圍拷貝到新位置時(shí)所可能采取的做法,而不需要解壓縮以及隨后重新編碼每一個(gè)受到影響的元組。
[0096]應(yīng)當(dāng)提到的是,存在幾種不同的方法以用來找到最優(yōu)的或者在其他方面符合期望的對(duì)應(yīng)于特定字段的b和k的數(shù)值。圖5E示出了用于從多種可能性當(dāng)中評(píng)估和選擇一種編碼方案的方法的一個(gè)實(shí)施例。在所示出的方法中,將被記錄在頁面的字段中的每一個(gè)獨(dú)有數(shù)值被記錄在一個(gè)列表中(方塊585)。為了找到更加高效的編碼,所述方法開始于這樣的表示:其中b是零(一個(gè)基礎(chǔ))并且k足夠大(最小的必要比特?cái)?shù)目),以把所述列表中的最大數(shù)值編碼為與該列表中的最小數(shù)值的差異或偏移量(方塊586)。編碼器隨后嘗試k的相繼更小的數(shù)值,從而得到b的更大數(shù)值(更多基礎(chǔ))。隨著評(píng)估b和k的每一種組合,保留產(chǎn)生被視為更好(例如更小)的編碼的那些組合,以便與將來的可能編碼進(jìn)行比較。所述算法隨后可以選擇導(dǎo)致更小總體尺寸的編碼,其中既包括報(bào)頭中的表也包括對(duì)于元組中的已編碼字段所需的總空間。舉例來說,開始于作為基礎(chǔ)的最小數(shù)值(方塊587),找到所述列表中的至少比當(dāng)前基礎(chǔ)大2k的最小數(shù)值(方塊588)。如果這樣的數(shù)值存在(條件方塊589),則選擇該數(shù)值作為下一個(gè)基礎(chǔ)(方塊594)。如果這樣的數(shù)值不存在(條件方塊589),則利用當(dāng)前選擇的基礎(chǔ)和k的數(shù)值確定對(duì)應(yīng)于報(bào)頭和各個(gè)已編碼字段的總的已編碼尺寸。如果這種編碼符合期望(例如是目前為止最小的)(條件方塊591),則保留這種編碼(方塊592)。不管是否保留所述編碼,都可以把k的數(shù)值遞減I (方塊593),并且如果k大于或等于零(條件方塊595),則可以通過回到方塊587而重復(fù)所述處理。如果通過遞減k而導(dǎo)致k低于零,則所述處理結(jié)束,并且選擇至此所找到的最佳編碼(方塊596)。
[0097]現(xiàn)在參照?qǐng)D6,其中示出了具有共享映射表的多節(jié)點(diǎn)網(wǎng)絡(luò)的一個(gè)實(shí)施例的一般化方塊圖。在所示出的實(shí)例中,三個(gè)節(jié)點(diǎn)360a-360c被用來形成一個(gè)映射節(jié)點(diǎn)的集群。在一個(gè)實(shí)施例中,每一個(gè)節(jié)點(diǎn)360a_360c可以對(duì)一個(gè)或多個(gè)邏輯單兀號(hào)(LUN)負(fù)責(zé)。在所描繪的實(shí)施例中示出了一定數(shù)目的映射表層級(jí)1-N。層級(jí)I可以對(duì)應(yīng)于最早層級(jí),而層級(jí)N則可以對(duì)應(yīng)于最新層級(jí)。對(duì)于由特定節(jié)點(diǎn)管理的各個(gè)LUN的映射表?xiàng)l目,該特定節(jié)點(diǎn)自身可能具有存儲(chǔ)在該節(jié)點(diǎn)自身上的更新的條目。舉例來說,節(jié)點(diǎn)360a被顯示為存儲(chǔ)映射子表362a和364a。這些子表362a和364b可以對(duì)應(yīng)于節(jié)點(diǎn)360a通常為之負(fù)責(zé)的LUN。類似地,節(jié)點(diǎn)360b包括子表362b和364b,其可以對(duì)應(yīng)于由該節(jié)點(diǎn)所管理的LUN,節(jié)點(diǎn)360c則包括子表362c和364c,其可以對(duì)應(yīng)于由該節(jié)點(diǎn)所管理的LUN。在這樣的實(shí)施例中,這些“更新”層級(jí)映射表?xiàng)l目?jī)H由其相應(yīng)的管理節(jié)點(diǎn)保持,并且通常不會(huì)在其他節(jié)點(diǎn)上找到。
[0098]與前面討論的相對(duì)更新的層級(jí)不同,更早層級(jí)(即層級(jí)N-2向下到層級(jí)I)代表可以由所有節(jié)點(diǎn)360a-360c共享的映射表?xiàng)l目,其含義在于任何所述節(jié)點(diǎn)都可以存儲(chǔ)這些條目的拷貝。在所示出的實(shí)例中,這些更早層級(jí)370、372和374被統(tǒng)一標(biāo)識(shí)為共享表380。此外,正如前面所討論的那樣,在各個(gè)實(shí)施例中,除了后面所討論的合并或類似操作之外,這些更早層級(jí)是靜態(tài)的。通常來說,靜態(tài)層是不會(huì)受到修改的一層(也就是說其是“固定的”)。鑒于這樣的層級(jí)在此含義下是固定的,因此可以對(duì)這些更低層級(jí)的任何拷貝進(jìn)行訪問,而無需擔(dān)心另一份所述拷貝是否已被或者正被修改。因此,任何所述節(jié)點(diǎn)都可以安全地存儲(chǔ)共享表380的一份拷貝,并且在確信針對(duì)這些表的請(qǐng)求可以被正確地服務(wù)的情況下服務(wù)于所述請(qǐng)求。通過在多個(gè)節(jié)點(diǎn)360上存儲(chǔ)共享表380的拷貝可以允許在施行查找或者以其他方式服務(wù)于請(qǐng)求時(shí)使用各種負(fù)載平衡方案。
[0099]除了前述內(nèi)容之外,在各個(gè)實(shí)施例中,可以按照反映節(jié)點(diǎn)360自身的方式來組織可以被共享的層級(jí)380。舉例來說,節(jié)點(diǎn)360a可以負(fù)責(zé)LUNl和2,節(jié)點(diǎn)360b可以負(fù)責(zé)LUN3和4,并且節(jié)點(diǎn)360c可以負(fù)責(zé)LUN5和6。在各個(gè)實(shí)施例中,所述映射表?xiàng)l目可以包括其自身標(biāo)識(shí)出相應(yīng)的LUN的元組。在這樣的實(shí)施例中,可以根據(jù)關(guān)鍵字?jǐn)?shù)值、存儲(chǔ)空間的絕對(duì)寬度或數(shù)量或者通過其他方式對(duì)共享映射表380進(jìn)行分類。如果層級(jí)380中的映射表?xiàng)l目的分類至少部分地是基于LUN,則條目370a可以對(duì)應(yīng)于LUNl和2,條目370b可以對(duì)應(yīng)于LUN3和4,并且條目370c可以對(duì)應(yīng)于LUN5和6。這樣的組織可以通過有效地減少所需搜索的數(shù)據(jù)量而加速由給定節(jié)點(diǎn)對(duì)于以特定LUN為目標(biāo)的請(qǐng)求所進(jìn)行的查找,其中允許協(xié)調(diào)器直接選擇對(duì)作為請(qǐng)求目標(biāo)的特定LUN負(fù)責(zé)的節(jié)點(diǎn)。前述和其他組織和分類方案都可能被設(shè)想至IJ。此外,如果希望把針對(duì)某一 LUN的責(zé)任從一個(gè)節(jié)點(diǎn)移動(dòng)到另一個(gè)節(jié)點(diǎn),則可以把對(duì)應(yīng)于該節(jié)點(diǎn)的原始節(jié)點(diǎn)映射沖刷到共享層級(jí)(并且例如合并)。針對(duì)該LUN的責(zé)任隨后被轉(zhuǎn)移到新的節(jié)點(diǎn),其隨后開始服務(wù)于該LUN。
[0100]現(xiàn)在參照?qǐng)D7,其中示出了被用來訪問映射表的次級(jí)索引的一個(gè)實(shí)施例的一般化方塊圖。如前所述,請(qǐng)求者數(shù)據(jù)輸入302可以被關(guān)鍵字生成器304接收到,關(guān)鍵字生成器304產(chǎn)生查詢關(guān)鍵字?jǐn)?shù)值306。關(guān)鍵字?jǐn)?shù)值306被用來訪問映射表。在一些實(shí)施例中,圖3中所示的初級(jí)索引對(duì)于存儲(chǔ)在RAM172或存儲(chǔ)器介質(zhì)130中可能過大(或者大于所期望的情況)。舉例來說,更早的索引層級(jí)可能會(huì)由于后面在圖10和11中描述的合并和平坦化操作而變得非常大。因此,可以對(duì)于初級(jí)索引的至少一部分高速緩存次級(jí)索引320而不是初級(jí)索引310的相應(yīng)部分。次級(jí)索引320可以提供存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m中的數(shù)據(jù)的更粗粒度層級(jí)的位置標(biāo)識(shí)。因此,次級(jí)索引320可以小于初級(jí)索引310的與之對(duì)應(yīng)的部分。相應(yīng)地,次級(jí)索引320可以被存儲(chǔ)在RAM172或存儲(chǔ)器介質(zhì)130中。
[0101]在一個(gè)實(shí)施例中,次級(jí)索引320被劃分成各個(gè)分區(qū),比如分區(qū)322a_322b。此外,可以根據(jù)層級(jí)對(duì)次級(jí)索引進(jìn)行組織,其中更加近來的層級(jí)首先出現(xiàn)。在一個(gè)實(shí)施例中,更早層級(jí)具有更低編號(hào),并且更晚層級(jí)具有更高編號(hào)(例如層級(jí)ID可以隨著每一個(gè)新層級(jí)而遞增)。次級(jí)索引320的每一個(gè)條目可以標(biāo)識(shí)一個(gè)關(guān)鍵字?jǐn)?shù)值范圍。舉例來說,在該例中示出的第一個(gè)條目可以表示層級(jí)22中的從O到12的關(guān)鍵字?jǐn)?shù)值范圍。這些關(guān)鍵字?jǐn)?shù)值可以對(duì)應(yīng)于與初級(jí)索引310的給定頁面內(nèi)的第一條記錄和最后一條記錄相關(guān)聯(lián)的關(guān)鍵字?jǐn)?shù)值。換句話說,次級(jí)索引中的條目可以簡(jiǎn)單地存儲(chǔ)關(guān)鍵字O的標(biāo)識(shí)和關(guān)鍵字12的標(biāo)識(shí),以表明相應(yīng)的頁面包含處在該范圍內(nèi)的條目。再次參照?qǐng)D3A,分區(qū)312a可以是一個(gè)頁面,并且其第一條記錄和最后一條記錄的關(guān)鍵字?jǐn)?shù)值分別是O和12。因此,如圖7中所示,次級(jí)索引320內(nèi)的一個(gè)條目存儲(chǔ)范圍O到12。由于重映射被保持在映射表內(nèi)的各個(gè)層級(jí)中,因此一個(gè)關(guān)鍵字?jǐn)?shù)值范圍可以對(duì)應(yīng)于多個(gè)頁面和相關(guān)聯(lián)的層級(jí)。如圖7中所示,次級(jí)索引320內(nèi)的各個(gè)字段可以存儲(chǔ)這一信息。每一個(gè)條目可以存儲(chǔ)一個(gè)或多個(gè)相應(yīng)的唯一虛擬頁面標(biāo)識(shí)符(ID)以及對(duì)應(yīng)于所述關(guān)鍵字?jǐn)?shù)值范圍的相關(guān)聯(lián)的層級(jí)ID。每一個(gè)條目還可以存儲(chǔ)例如有效性信息之類的相應(yīng)的狀態(tài)信息。所保持的頁面ID相關(guān)聯(lián)的層級(jí)ID的列表可以表明給定的查詢關(guān)鍵字?jǐn)?shù)值可能被存儲(chǔ)的位置,但是并不證實(shí)所述關(guān)鍵字?jǐn)?shù)值存在于該頁面和層級(jí)中。次級(jí)索引320小于初級(jí)索引310,但是也具有存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m中的數(shù)據(jù)的粗粒度層級(jí)的位置標(biāo)識(shí)。次級(jí)索引320可以小到足以存儲(chǔ)在RAM172或存儲(chǔ)器介質(zhì)130中。
[0102]當(dāng)利用查詢關(guān)鍵字?jǐn)?shù)值306訪問次級(jí)索引320時(shí),其可以傳達(dá)一個(gè)或多個(gè)相應(yīng)的頁面ID和相關(guān)聯(lián)的層級(jí)ID。這些結(jié)果隨后被用來訪問及取回所存儲(chǔ)的初級(jí)索引的各個(gè)部分。隨后可以利用所述查詢關(guān)鍵字?jǐn)?shù)值來搜索所述一個(gè)或多個(gè)所識(shí)別出的頁面,以便找到一個(gè)物理指針數(shù)值。在一個(gè)實(shí)施例中,所述層級(jí)ID可以被用來確定同樣存儲(chǔ)查詢關(guān)鍵字?jǐn)?shù)值306的所識(shí)別出的一個(gè)或多個(gè)層級(jí)當(dāng)中的最晚層級(jí)。隨后可以取回相應(yīng)的頁面內(nèi)的一條記錄,并且可以讀取一個(gè)獨(dú)立指針數(shù)值以用于處理存儲(chǔ)裝置訪問請(qǐng)求。在所示出的實(shí)例中,查詢關(guān)鍵字?jǐn)?shù)值27處在關(guān)鍵字范圍16到31內(nèi)。利用所述查詢關(guān)鍵字?jǐn)?shù)值向映射表傳達(dá)存儲(chǔ)在相應(yīng)的條目中的頁面ID和層級(jí)ID。
[0103]現(xiàn)在參照?qǐng)D8,其中示出了被用來訪問映射表的三級(jí)索引的一個(gè)實(shí)施例的一般化方塊圖。對(duì)應(yīng)于圖4的那些電路和邏輯部分具有完全相同的附圖標(biāo)記。如前所述,圖3中的初級(jí)索引310對(duì)于存儲(chǔ)在RAM172或存儲(chǔ)器介質(zhì)130中可能過大。此外,隨著映射表340增長(zhǎng),次級(jí)索引320對(duì)于存儲(chǔ)在這些存儲(chǔ)器中也可能變得過大。因此,可以在次級(jí)索引320之前訪問三級(jí)索引330,這可能仍然比訪問初級(jí)索引310更快。
[0104]三級(jí)索引330可以提供關(guān)于存儲(chǔ)在存儲(chǔ)設(shè)備176a_176m中的數(shù)據(jù)的比次級(jí)索引320更粗粒度層級(jí)的位置標(biāo)識(shí)。因此,三級(jí)索引330可以小于次級(jí)索引320的與之對(duì)應(yīng)的部分。應(yīng)當(dāng)提到的是,初級(jí)索引310、次級(jí)索引320、三級(jí)索引330等等當(dāng)中的每一項(xiàng)可以被存儲(chǔ)在已壓縮格式中。所選擇的已壓縮格式可以是被用來在映射表340內(nèi)存儲(chǔ)信息的相同的已壓縮格式。
[0105]在一個(gè)實(shí)施例中,三級(jí)索引330可以包括多個(gè)分區(qū),比如分區(qū)332a、332b等等??梢岳貌樵冴P(guān)鍵字?jǐn)?shù)值306來訪問三級(jí)索引330。在所示出的實(shí)例中,發(fā)現(xiàn)查詢關(guān)鍵字?jǐn)?shù)值306 “27”處在從O到78的關(guān)鍵字?jǐn)?shù)值范圍之間。三級(jí)索引330中的第一個(gè)條目對(duì)應(yīng)于該關(guān)鍵字?jǐn)?shù)值范圍。三級(jí)索引330中的一列可以表明將要訪問次級(jí)索引320內(nèi)的哪一個(gè)分區(qū)。在所示出的實(shí)例中,O到78的關(guān)鍵字?jǐn)?shù)值范圍對(duì)應(yīng)于次級(jí)索引320內(nèi)的分區(qū)O。
[0106]還應(yīng)當(dāng)注意到,可以訪問一個(gè)過濾器(未示出),以便確定某一查詢關(guān)鍵字?jǐn)?shù)值是否不處在任一個(gè)索引310-330內(nèi)。該過濾器可以是確定某一元素是否是某一集合的成員的概率性數(shù)據(jù)結(jié)構(gòu)??赡軙?huì)發(fā)生錯(cuò)誤肯定,但是可能不會(huì)發(fā)生錯(cuò)誤否定。這樣的過濾器的一個(gè)實(shí)例是Bloom過濾器。如果對(duì)于這樣的過濾器的訪問確定特定數(shù)值不處在完整索引142中,則不把查詢發(fā)送到存儲(chǔ)裝置。如果對(duì)于所述過濾器的訪問確定所述查詢關(guān)鍵字?jǐn)?shù)值處在相應(yīng)的索引中,則可能不知道相應(yīng)的物理指針數(shù)值是否被存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m中。
[0107]除了前述內(nèi)容之外,在各個(gè)實(shí)施例中,可以使用一個(gè)或多個(gè)覆蓋表來修改或取消響應(yīng)于查詢由映射表提供的元組。這樣的覆蓋表可以被用來應(yīng)用過濾條件以供響應(yīng)于針對(duì)映射表的訪問而使用,或者用于在創(chuàng)建新層級(jí)的平坦化操作期間使用。在一些實(shí)施例中,所述覆蓋表可以按照類似于前面描述的映射表的方式被組織成各個(gè)時(shí)間排序?qū)蛹?jí)。在其他實(shí)施例中,可以對(duì)其進(jìn)行不同的組織。對(duì)應(yīng)于覆蓋表的關(guān)鍵字不需要匹配對(duì)應(yīng)于底層映射表的關(guān)鍵字。舉例來說,覆蓋表可以包含聲明特定一列已被刪除或者因?yàn)槠渌蚨豢稍L問的單一條目(例如不存在用以查詢?cè)撛M的自然訪問路徑),并且針對(duì)與涉及該列標(biāo)識(shí)符的元組相對(duì)應(yīng)的查詢的響應(yīng)相反是無效的。在另一個(gè)實(shí)施例中,覆蓋表中的一個(gè)條目可以表明某一存儲(chǔ)位置已被釋放,并且涉及該存儲(chǔ)位置的任何元組都是無效的,從而使得所述查找的結(jié)果而不是由映射表使用的關(guān)鍵字無效化。在一些實(shí)施例中,覆蓋表可以響應(yīng)于針對(duì)底層映射表的查詢來修改各個(gè)字段。在一些實(shí)施例中,可以使用一個(gè)關(guān)鍵字范圍(關(guān)鍵字?jǐn)?shù)值的范圍)來高效地標(biāo)識(shí)出將為之應(yīng)用相同操作(取消或修改)的多個(gè)數(shù)值。按照這種方式,可以通過在覆蓋表中創(chuàng)建“取消”條目而從映射表中(有效地)“刪除”元素,并且無需修改映射表。在這種情況下,覆蓋表可以包括不具有相關(guān)聯(lián)的非關(guān)鍵字?jǐn)?shù)據(jù)字段的關(guān)鍵字。
[0108]現(xiàn)在參照?qǐng)D9,其中示出了用于在包括映射和覆蓋表的系統(tǒng)中處理讀取請(qǐng)求的方法的一個(gè)實(shí)施例。響應(yīng)于接收到讀取請(qǐng)求(方塊900),生成對(duì)應(yīng)于所述請(qǐng)求的映射表關(guān)鍵字(方塊908)和第一覆蓋表關(guān)鍵字(方塊902)。在該例中,針對(duì)覆蓋和映射表的訪問被顯示為同時(shí)發(fā)生。但是在其他實(shí)施例中,針對(duì)各表的訪問可以按照任何所期望的順序被非同時(shí)地施行(例如順序地或者以其他方式在時(shí)間上分開真實(shí)性)。利用為映射表生成的關(guān)鍵字,可以從映射表取回相應(yīng)的元組(方塊910)。如果第一覆蓋表包含對(duì)應(yīng)于覆蓋表關(guān)鍵字的“取消”條目(條件方塊906),則在映射表中找到的任何元組被視為無效,并且可以向請(qǐng)求者返回表明這一點(diǎn)的指示。另一方面,如果覆蓋表包含對(duì)應(yīng)于覆蓋表關(guān)鍵字的“修改”條目(條件方塊912),則第一覆蓋表?xiàng)l目中的數(shù)值可以被用來修改從映射表取回的兀組中的一個(gè)或多個(gè)字段(方塊922)。一旦這一處理完成,則給予來自映射表的元組(不管其是否被修改)生成第二覆蓋表關(guān)鍵字(方塊914),并且在第二覆蓋表中進(jìn)行第二項(xiàng)查找(方塊916),其中第二覆蓋表可以是或者可以不是與第一覆蓋表相同的表。如果在第二覆蓋表總找到“取消”條目(條件方塊920),則來自映射表的元組被視為無效(方塊918)。如果在第二覆蓋表中找到“修改”條目(條件方塊924),則可以修改來自映射表的元組的一個(gè)或多個(gè)字段(方塊926)。這樣的修改可以包括丟棄元組、歸一化元組等等。經(jīng)過修改的元組隨后可以被返回給請(qǐng)求者。如果第二覆蓋表不包含修改條目(條件方塊924),則所述元組在未經(jīng)修改的情況下被返回給請(qǐng)求者。在一些實(shí)施例中,可以高速緩存(多個(gè))覆蓋表的至少一些部分,以便提供對(duì)其內(nèi)容的更加快速的訪問。在各個(gè)實(shí)施例中,在第一覆蓋表中檢測(cè)到的取消條目可以用來短路任何相應(yīng)的查找(例如方塊914、916等等)。在其他實(shí)施例中,可以并行地施行各項(xiàng)訪問并且“競(jìng)賽”??赡茉O(shè)想到許多這樣的實(shí)施例。
[0109]現(xiàn)在參照?qǐng)D10,其中示出了對(duì)應(yīng)于映射表內(nèi)的各個(gè)層級(jí)的平坦化操作的一個(gè)實(shí)施例的一般化方塊圖。在各個(gè)實(shí)施例中,可以響應(yīng)于檢測(cè)到一項(xiàng)或多項(xiàng)條件而施行平坦化操作。舉例來說,隨著映射表340由于新記錄的插入而隨著時(shí)間增長(zhǎng)并且累積層級(jí),對(duì)于一個(gè)查詢關(guān)鍵字?jǐn)?shù)值搜索更多層級(jí)的成本可能會(huì)不合期望地變高。為了約束將要搜索的層級(jí)數(shù)目,可以把多個(gè)層級(jí)平坦化成單一新層級(jí)。舉例來說,在時(shí)間順序上邏輯地鄰近或鄰接的兩個(gè)或多層級(jí)可以被選擇用于平坦化操作。如果兩條或多條記錄對(duì)應(yīng)于相同的關(guān)鍵字?jǐn)?shù)值,則可以保留最晚的記錄,而其他記錄則不被包括在新的“平坦化”層級(jí)中。在這樣的實(shí)施例中,對(duì)于給定關(guān)鍵字?jǐn)?shù)值的搜索,所述新近平坦化的層級(jí)將返回原本將由針對(duì)相應(yīng)的多個(gè)層級(jí)的搜索所提供的相同結(jié)果。由于新的平坦化層級(jí)中的搜索結(jié)果與其所替代的兩個(gè)或多層級(jí)相比不會(huì)發(fā)生改變,因此不需要把所述平坦化操作與針對(duì)映射表的更新操作同步。換句話說,可以關(guān)于針對(duì)一個(gè)表的更新在該表上異步施行平坦化操作。
[0110]如前所述,更早層級(jí)是固定的含義在與,其映射不會(huì)被修改(也就是說從A到B的映射保持不變)。因此,不會(huì)(例如由于用戶寫入)而對(duì)正被平坦化的層級(jí)做出修改,并且不需要各個(gè)層級(jí)的同步鎖定。此外,在基于節(jié)點(diǎn)的集群環(huán)境中,每一個(gè)節(jié)點(diǎn)可以存儲(chǔ)索引的更早層級(jí)的一份拷貝(例如正如關(guān)于圖6所討論的那樣),從而可以在一個(gè)節(jié)點(diǎn)上進(jìn)行平坦化操作而無需鎖定其他節(jié)點(diǎn)中的相應(yīng)層級(jí)。因此,當(dāng)在任何節(jié)點(diǎn)上以異步方式發(fā)生平坦化時(shí),處理可以在所有節(jié)點(diǎn)中繼續(xù)。在后來的某一時(shí)間點(diǎn),其他節(jié)點(diǎn)可以對(duì)各個(gè)層級(jí)進(jìn)行平坦化,或者使用一個(gè)已經(jīng)被平坦化的層級(jí)。在一個(gè)實(shí)施例中,可以出于錯(cuò)誤恢復(fù)、鏡像或其他目的而保留被用來形成一個(gè)平坦化層級(jí)的所述兩個(gè)或多層級(jí)。除了前述內(nèi)容之外,在各個(gè)實(shí)施例中,已被取消的記錄不會(huì)被重新插入到所述新層級(jí)中。前面描述的平坦化例如可以響應(yīng)于檢測(cè)到映射表中的層級(jí)數(shù)目已達(dá)到給定閾值而被施行?;蛘呖梢皂憫?yīng)于檢測(cè)到一個(gè)或多個(gè)層級(jí)的尺寸已超出某一閾值而施行所述平坦化??梢钥紤]的另一項(xiàng)條件是系統(tǒng)上的負(fù)載。除了單獨(dú)考慮這些條件之外,關(guān)于是否對(duì)各個(gè)層級(jí)進(jìn)行平坦化的決定還可以考慮這些條件的組合。關(guān)于是否要進(jìn)行平坦化的決定還可以考慮對(duì)應(yīng)于所述條件的當(dāng)前數(shù)值以及對(duì)應(yīng)于所述條件的未來預(yù)測(cè)數(shù)值。有可能設(shè)想到可以為之施行平坦化的其他條件。
[0111]在所示出的實(shí)例中,各條記錄被簡(jiǎn)單地顯示為關(guān)鍵字和指針對(duì)。為了易于說明,各個(gè)頁面被顯示為包括四條記錄。層級(jí)“F”及其下一個(gè)鄰接邏輯鄰居層級(jí)“F-1”可以被考慮進(jìn)行平坦化操作。層級(jí)“F”可以晚于層級(jí)“F-1”。雖然在這里示出了對(duì)兩個(gè)層級(jí)的平坦化,但是有可能設(shè)想到可以選擇三個(gè)或多層級(jí)以進(jìn)行平坦化。在所示出的實(shí)例中,層級(jí)“F-1”可以具有存儲(chǔ)在層級(jí)“F”中找到的相同關(guān)鍵字?jǐn)?shù)值的記錄。使用雙向箭頭來標(biāo)識(shí)出跨越兩個(gè)鄰接層級(jí)存儲(chǔ)相同關(guān)鍵字?jǐn)?shù)值的記錄。
[0112]新層級(jí)“新F”包括對(duì)應(yīng)于在層級(jí)“F”和層級(jí)“F-1”中找到的重復(fù)關(guān)鍵字?jǐn)?shù)值的一個(gè)關(guān)鍵字。此外,新層級(jí)“新F”包括對(duì)應(yīng)于存儲(chǔ)所述重復(fù)關(guān)鍵字?jǐn)?shù)值的各條記錄當(dāng)中的最晚(或者在本例中是更晚)記錄的指針數(shù)值。舉例來說,層級(jí)“F”和層級(jí)“F-1”當(dāng)中的每一個(gè)包括一條存儲(chǔ)關(guān)鍵字?jǐn)?shù)值4的記錄。所述更晚記錄處在層級(jí)“F”中,并且該記錄還存儲(chǔ)指針數(shù)值512。相應(yīng)地,層級(jí)“F-1”包括一條存儲(chǔ)關(guān)鍵字?jǐn)?shù)值4還有指針數(shù)值512的記錄,而不是在更早層級(jí)“F-1”中找到的指針數(shù)值656。此外,新層級(jí)“新F”包括具有在層級(jí)“F”與層級(jí)“F-1”之間找到的唯一關(guān)鍵字?jǐn)?shù)值的記錄。舉例來說,層級(jí)“F-1”包括具有在層級(jí)“F”中找到的關(guān)鍵字和指針對(duì)6和246以及在層級(jí)“F-1”中找到的關(guān)鍵字和指針對(duì)2和398的記錄。如圖所示,各個(gè)層級(jí)內(nèi)的每一個(gè)頁面通過關(guān)鍵字?jǐn)?shù)值被分類。
[0113]如前所述,在各個(gè)實(shí)施例中,可以使用覆蓋表來修改或取消對(duì)應(yīng)于底層映射表中的關(guān)鍵字?jǐn)?shù)值的元組。這樣的(多個(gè))覆蓋表可以按照類似于映射表的方式被管理。舉例來說,覆蓋表可以被平坦化,并且鄰近條目可以被合并在一起以節(jié)省空間。或者可以按照不同于被用來管理映射表的方式來管理覆蓋表。在一些實(shí)施例中,覆蓋表可以包含涉及一定覆蓋表關(guān)鍵字范圍的單一條目。通過這種方式,可以限制覆蓋表的尺寸。舉例來說,如果映射表包含k個(gè)有效條目,則覆蓋表(在平坦化之后)需要包含將各個(gè)范圍標(biāo)記為無效的不多于k+1的條目,所述范圍對(duì)應(yīng)于映射表中的有效條目之間的間隙。相應(yīng)地,覆蓋表可以被用來按照相對(duì)高效的方式標(biāo)識(shí)出可以從映射表中丟棄的元組。除了前述內(nèi)容之外,雖然前面的討論描述了使用覆蓋表來取消會(huì)修改針對(duì)來自(多個(gè))映射表的請(qǐng)求的響應(yīng),但是覆蓋表還可以被用來在映射表的平坦化操作設(shè)備取消或修改數(shù)值。相應(yīng)地,當(dāng)在映射表的平坦化操作期間創(chuàng)建一個(gè)新層級(jí)時(shí),可以取消原本可能被插入到所述新層級(jí)中的某一關(guān)鍵字?jǐn)?shù)值。或者可以在插入到新層級(jí)之前修改某一數(shù)值。這樣的修改可以導(dǎo)致(在所述新層級(jí)中)用多條記錄替代對(duì)應(yīng)于映射表中的給定關(guān)鍵字?jǐn)?shù)值范圍的單一記錄,其中所述多條記錄當(dāng)中的每一條對(duì)應(yīng)于原始記錄的一個(gè)子范圍。此外,可以用對(duì)應(yīng)于一個(gè)更小范圍的一條新記錄來替代某一條記錄,或者可以用其范圍覆蓋各條原始記錄的所有范圍的單一記錄來替代多條記錄。所有這樣的實(shí)施例都被設(shè)想到。
[0114]現(xiàn)在參照?qǐng)D11,其中示出了對(duì)應(yīng)于映射表內(nèi)的各個(gè)層級(jí)的平坦化操作的一個(gè)實(shí)施例的一般化方塊圖。如前所述,可以對(duì)各個(gè)層級(jí)進(jìn)行時(shí)間排序。在所示出的實(shí)例中,包括一條或多條索引和相應(yīng)的映射的層級(jí)“F”在邏輯上處于更早層級(jí)“F-1”上方。此外,層級(jí)“F”在邏輯上處于更晚層級(jí)“F+1 ”下方。類似地,層級(jí)“F-2”在邏輯上處于更晚層級(jí)“F-1 ”上方,并且層級(jí)“F+2”在邏輯上處于更早層級(jí)“F+1”下方。在一個(gè)實(shí)施例中,對(duì)于平坦化操作可以考慮層級(jí)“F”和“F-1”。雙向箭頭被用來圖示出存在跨越這兩個(gè)鄰接層級(jí)存儲(chǔ)相同關(guān)鍵字?jǐn)?shù)值的記錄。
[0115]如前所述,新層級(jí)“新F”包括對(duì)應(yīng)于在層級(jí)“F”和層級(jí)“F-1 ”中找到的重復(fù)關(guān)鍵字?jǐn)?shù)值的關(guān)鍵字?jǐn)?shù)值。此外,新層級(jí)“新F”包括對(duì)應(yīng)于存儲(chǔ)所述重復(fù)關(guān)鍵字?jǐn)?shù)值的各條記錄當(dāng)中的最晚(或者在本例中是更晚)記錄的指針數(shù)值。在完成平坦化操作之后,層級(jí)“F”和層級(jí)“F-1”可能尚未被從映射表中移除。同樣地,在基于節(jié)點(diǎn)的集群中,每一個(gè)節(jié)點(diǎn)可以驗(yàn)證其已經(jīng)準(zhǔn)備好利用新的單一層級(jí),比如層級(jí)“新F”,并且不再使用其所替代的所述兩個(gè)或多層級(jí)(比如層級(jí)“F”和層級(jí)“F-1”)。可以在新層級(jí)成為所述替代之前施行這一驗(yàn)證。在一個(gè)實(shí)施例中,可以把所述兩個(gè)或多被替代的層級(jí)(比如層級(jí)“F”和層級(jí)“F-1”)保持在存儲(chǔ)裝置中以用于錯(cuò)誤恢復(fù)、鏡像或其他目的。為了保持各個(gè)層級(jí)及其映射的時(shí)間排序,新的平坦化層級(jí)F在邏輯上被置于各個(gè)更晚層級(jí)(例如層級(jí)F+1)下方,并且被置于其所替代的原始層級(jí)(例如層級(jí)F和層級(jí)F-1)上方。
[0116]現(xiàn)在參照?qǐng)D12,其中示出了用于對(duì)映射表內(nèi)的各個(gè)層級(jí)進(jìn)行平坦化的方法1000的一個(gè)實(shí)施例。具體實(shí)現(xiàn)在如前所述的網(wǎng)絡(luò)架構(gòu)100和映射表340中的各個(gè)組件可以總體上根據(jù)方法1000來操作。出于討論的目的,按照先后順序示出了本實(shí)施例中的各個(gè)步驟。但是在另一實(shí)施例中,一些步驟可以按照不同于所示出的順序發(fā)生,一些步驟可以被同時(shí)施行,一些步驟可以與其他步驟組合,并且可以缺少一些步驟。
[0117]在方塊1002中,為映射表和相應(yīng)的索引分配存儲(chǔ)空間。在方塊1004中,確定對(duì)應(yīng)于平坦化映射表內(nèi)的兩個(gè)或多層級(jí)的一項(xiàng)或多項(xiàng)條件。舉例來說,搜索映射表內(nèi)的當(dāng)前層級(jí)數(shù)目的成本可能大于施行平坦化操作的成本。此外,成本可以是基于以下各項(xiàng)的至少其中之一:所述結(jié)構(gòu)中的將被平坦化的當(dāng)前(或預(yù)測(cè))層級(jí)數(shù)目,一個(gè)或多個(gè)層級(jí)中的條目的數(shù)目,將被取消或修改的映射條目的數(shù)目,以及系統(tǒng)上的負(fù)載。成本還可以包括:用于施行相應(yīng)操作的時(shí)間,一條或多條總線的占用,在相應(yīng)的操作期間使用的存儲(chǔ)空間,一個(gè)層級(jí)集合中的重復(fù)條目的數(shù)目已達(dá)到某一閾值等等。此外,每一個(gè)層級(jí)內(nèi)的記錄數(shù)目的計(jì)數(shù)可以被用來估計(jì)對(duì)于兩個(gè)鄰接層級(jí)施行的平坦化操作何時(shí)可以產(chǎn)生其條目數(shù)目等于下一個(gè)先前層級(jí)內(nèi)的條目數(shù)目的兩倍的新的單一層級(jí)。有可能設(shè)想到單獨(dú)地或者按照任意組合采取的這些條件以及其他條件。
[0118]在方塊1006中,在存儲(chǔ)數(shù)據(jù)并且找到新的映射時(shí)訪問并更新索引和映射表。隨著新的記錄被插入到映射表中,映射表內(nèi)的層級(jí)數(shù)目增加。如果檢測(cè)到對(duì)應(yīng)于平坦化映射表內(nèi)的兩個(gè)或多層級(jí)的條件(條件方塊1008),則在方塊1010中,標(biāo)識(shí)出用于平坦化的一個(gè)或多個(gè)層級(jí)組。一個(gè)層級(jí)組可以包括兩個(gè)或多層級(jí)。在一個(gè)實(shí)施例中,所述兩個(gè)或多層級(jí)是鄰接層級(jí)。雖然最低層級(jí)或最早層級(jí)可能是用于平坦化的最佳候選,但是也可以選擇更晚的組。
[0119]在方塊1012中,對(duì)于每一組產(chǎn)生包括相應(yīng)的組內(nèi)的各條最新記錄的新的單一層級(jí)。在前面的實(shí)例中,新的單一層級(jí)“新F”包括層級(jí)“F”和層級(jí)“F+1”當(dāng)中的最晚記錄。在方塊1014中,在基于節(jié)點(diǎn)的集群中,可以從所述集群內(nèi)的每一個(gè)節(jié)點(diǎn)請(qǐng)求確認(rèn),以表明對(duì)應(yīng)的節(jié)點(diǎn)已準(zhǔn)備好利用通過平坦化操作而產(chǎn)生的各個(gè)新層級(jí)。當(dāng)每一個(gè)節(jié)點(diǎn)確認(rèn)其可以利用所述新層級(jí)時(shí),在方塊1016中,利用所述新層級(jí)來替代所標(biāo)識(shí)出的各組內(nèi)的當(dāng)前層級(jí)。在其他實(shí)施例中,不需要跨越節(jié)點(diǎn)的同步。在這樣的實(shí)施例中,一些節(jié)點(diǎn)可以在其他節(jié)點(diǎn)之前開始使用新層級(jí)。此外,即使在新近平坦化的層級(jí)可用之后,一些節(jié)點(diǎn)仍然可以繼續(xù)使用原始層級(jí)。舉例來說,特定節(jié)點(diǎn)可能具有高速緩存的原始層級(jí)數(shù)據(jù)并且優(yōu)選地使用該數(shù)據(jù),而不是使用新近平坦化的層級(jí)的未被高速緩存的數(shù)據(jù)。有可能設(shè)想到許多這樣的實(shí)施例。
[0120]現(xiàn)在參照?qǐng)D13,其中示出了用于高效地處理映射表內(nèi)的批量陣列任務(wù)的方法1100的一個(gè)實(shí)施例。與所描述的其他方法類似,在如前所述的網(wǎng)絡(luò)架構(gòu)100和映射表340中具體實(shí)現(xiàn)的各個(gè)組件可以總體上根據(jù)方法1100操作。此外,按照先后順序示出了本實(shí)施例中的各個(gè)步驟。但是在另一實(shí)施例中,一些步驟可以按照不同于所示出的順序發(fā)生,一些步驟可以被同時(shí)施行,一些步驟可以與其他步驟組合,并且可以缺少一些步驟。
[0121]通過按照已壓縮格式把信息存儲(chǔ)在映射表內(nèi)可以實(shí)現(xiàn)細(xì)粒度映射,從而可以允許直接操縱映射表內(nèi)的映射信息以作為針對(duì)常見的批量陣列任務(wù)的一種替換方案。直接映射操縱可以減少I/o網(wǎng)絡(luò)和總線通信量。如前所述,閃存具有較低“尋道時(shí)間”,從而允許在少于來自旋轉(zhuǎn)盤的單一操作的時(shí)間內(nèi)發(fā)生一定數(shù)目的從屬讀取操作。這些從屬讀取可以被用來施行在線細(xì)粒度映射,以便集成例如壓縮和重復(fù)數(shù)據(jù)刪除之類的空間節(jié)省特征。此外,這些從屬讀取操作可以允許存儲(chǔ)控制器174完全在映射表內(nèi)施行批量陣列任務(wù),而不是訪問(讀取和寫入)存儲(chǔ)在存儲(chǔ)設(shè)備176a-176m內(nèi)的用戶數(shù)據(jù)。
[0122]在方塊1102中接收到大型或批量陣列任務(wù)。舉例來說,除了正由數(shù)十個(gè)或者數(shù)百個(gè)虛擬機(jī)執(zhí)行和更新的企業(yè)應(yīng)用數(shù)據(jù)之外,批量拷貝或移動(dòng)請(qǐng)求還可以對(duì)應(yīng)于所述虛擬機(jī)的備份。對(duì)于所接收到的與所有這一數(shù)據(jù)的移動(dòng)、分支、克隆或拷貝相關(guān)聯(lián)的請(qǐng)求,相關(guān)聯(lián)的數(shù)據(jù)量可能大到16千兆字節(jié)(GB)或更大。如果訪問用戶數(shù)據(jù)以處理該請(qǐng)求,則可能要把大量處理時(shí)間花費(fèi)在所述請(qǐng)求上,并且系統(tǒng)性能會(huì)降低。此外,與物理環(huán)境相比,虛擬化環(huán)境的總輸入/輸出(I/O)資源通常更少。
[0123]在方塊1104中,存儲(chǔ)控制器174可以存儲(chǔ)對(duì)應(yīng)于所接收到的把一定新關(guān)鍵字范圍與一定舊關(guān)鍵字范圍相關(guān)的請(qǐng)求的指示,其中全部?jī)蓚€(gè)關(guān)鍵字范圍都對(duì)應(yīng)于所接收到的請(qǐng)求。舉例來說,如果所接收到的請(qǐng)求是拷貝16GB的數(shù)據(jù),則可以存儲(chǔ)對(duì)應(yīng)于所述16GB數(shù)據(jù)的起始關(guān)鍵字?jǐn)?shù)值和結(jié)束關(guān)鍵字?jǐn)?shù)值。同樣地,每一個(gè)所述起始和結(jié)束關(guān)鍵字?jǐn)?shù)值可以包括卷ID、所接收到的請(qǐng)求內(nèi)的邏輯或虛擬地址、快照ID、扇區(qū)號(hào)等等。在一個(gè)實(shí)施例中,可以把該信息與存儲(chǔ)在索引中的信息分開存儲(chǔ),所述索引比如有初級(jí)索引310、次級(jí)索引320、三級(jí)索引330等等。但是在對(duì)于后來的請(qǐng)求的處理期間,在訪問所述索引時(shí)可以訪問該信息。
[0124]在方塊1106中,數(shù)據(jù)存儲(chǔ)控制器174可以在沒有對(duì)于用戶數(shù)據(jù)的先前訪問的情況下向客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc的相應(yīng)客戶端傳達(dá)表明完成所接收到的請(qǐng)求的響應(yīng)。因此,存儲(chǔ)控制器174可以在只有很低或者沒有停機(jī)時(shí)間并且在處理器112上沒有負(fù)載的情況下處理所接收到的請(qǐng)求。
[0125]在方塊1108中,存儲(chǔ)控制器174可以設(shè)定一項(xiàng)條件、指示或標(biāo)志或者緩沖更新操作,以用于更新映射表中的一條或多條記錄,其對(duì)應(yīng)于用新關(guān)鍵字替代映射表中的舊關(guān)鍵字。對(duì)于移動(dòng)請(qǐng)求和拷貝請(qǐng)求全部二者,可以把對(duì)應(yīng)于新關(guān)鍵字的一條或多條新記錄插入到映射表中。如前所述,可以把所述關(guān)鍵字插入到所創(chuàng)建的新的最高層級(jí)中。對(duì)于移動(dòng)請(qǐng)求,可以在相應(yīng)的新記錄已被插入到映射表中之后,從映射表中移除一條或多條舊記錄。映射表中的記錄立即或者在后來的某一時(shí)間被實(shí)際更新。
[0126]對(duì)于歸零或擦除請(qǐng)求,可以存儲(chǔ)表明某一關(guān)鍵字?jǐn)?shù)值范圍現(xiàn)在對(duì)應(yīng)于一系列二進(jìn)制零的指示。此外,正如前面所討論的那樣,可以使用覆蓋表來標(biāo)識(shí)出并非(或者不再)有效的關(guān)鍵字?jǐn)?shù)值。用戶數(shù)據(jù)可以不被覆寫。對(duì)于擦除請(qǐng)求,可以在分配“所釋放的”存儲(chǔ)位置時(shí)的后來的某一時(shí)間利用對(duì)應(yīng)于后續(xù)的存儲(chǔ)(寫入)請(qǐng)求的新數(shù)據(jù)來覆寫用戶數(shù)據(jù)。對(duì)于外部指導(dǎo)的碎片整理請(qǐng)求,可以選擇鄰接的地址以用于扇區(qū)重組,從而可以有益于在客戶端計(jì)算機(jī)系統(tǒng)IlOa-1lOc的客戶端上執(zhí)行的應(yīng)用。
[0127]如果存儲(chǔ)控制器174接收到對(duì)應(yīng)于其中一個(gè)新關(guān)鍵字的數(shù)據(jù)存儲(chǔ)裝置訪問請(qǐng)求(條件方塊1110),并且該新關(guān)鍵字已經(jīng)被插入到映射表中(條件方塊1112),則在方塊1114中,可以利用該新關(guān)鍵字來訪問索引和映射表。舉例來說,可以利用該新關(guān)鍵字來訪問初級(jí)索引310、次級(jí)索引320或三級(jí)索引330。當(dāng)通過索引識(shí)別出映射表的一個(gè)或多個(gè)頁面時(shí),隨后可以訪問所識(shí)別出的這些頁面。在方塊1116中,可以利用在映射表中找到的與所述新關(guān)鍵字相關(guān)聯(lián)的物理指針數(shù)值來服務(wù)于所述存儲(chǔ)裝置訪問請(qǐng)求。
[0128]如果存儲(chǔ)控制器174接收到對(duì)應(yīng)于其中一個(gè)新關(guān)鍵字的數(shù)據(jù)存儲(chǔ)裝置訪問請(qǐng)求(條件方塊1110),并且該新關(guān)鍵字尚未被插入到映射表中(條件方塊1112),則在方塊1118中,可以利用相應(yīng)的舊關(guān)鍵字來訪問索引和映射表??梢栽L問保存所述舊關(guān)鍵字范圍和新關(guān)鍵字范圍的存儲(chǔ)裝置以確定相應(yīng)的舊關(guān)鍵字?jǐn)?shù)值。當(dāng)通過索引識(shí)別出映射表的一個(gè)或多個(gè)頁面時(shí),隨后可以訪問所識(shí)別出的這些頁面。在方塊1120中,可以利用在映射表中找到的與所述舊關(guān)鍵字相關(guān)聯(lián)的物理指針數(shù)值來服務(wù)于所述存儲(chǔ)裝置訪問請(qǐng)求。
[0129]現(xiàn)在參照?qǐng)D14,其中示出了存儲(chǔ)設(shè)備內(nèi)的數(shù)據(jù)布局架構(gòu)的一個(gè)實(shí)施例的一般化方塊圖。在一個(gè)實(shí)施例中,存儲(chǔ)設(shè)備176a-176m內(nèi)的數(shù)據(jù)存儲(chǔ)位置可以被設(shè)置成獨(dú)立設(shè)備冗余陣列(RAID)陣列。如圖所示,可以根據(jù)數(shù)據(jù)布局架構(gòu)將不同類型的數(shù)據(jù)存儲(chǔ)在存儲(chǔ)設(shè)備176a_176k中。在一個(gè)實(shí)施例中,每一個(gè)存儲(chǔ)設(shè)備176a_176k是一個(gè)SSD。SSD內(nèi)的一個(gè)分配單元可以包括SSD內(nèi)的一個(gè)或多個(gè)擦除塊。[0130]用戶數(shù)據(jù)1230可以被存儲(chǔ)在包括在其中一個(gè)或多個(gè)存儲(chǔ)設(shè)備176a_176k內(nèi)的一個(gè)或多個(gè)頁面內(nèi)。在RAID條帶與其中一個(gè)存儲(chǔ)設(shè)備176a-176k的每一個(gè)交叉點(diǎn)內(nèi),所存儲(chǔ)的信息可以被格式化為一系列邏輯頁面。每一個(gè)邏輯頁面又可以包括對(duì)應(yīng)于該頁面中的數(shù)據(jù)的報(bào)頭和校驗(yàn)和。當(dāng)發(fā)出讀取時(shí),所述讀取可以是對(duì)應(yīng)于一個(gè)或多個(gè)邏輯頁面,并且可以利用所述校驗(yàn)和來查驗(yàn)每一個(gè)頁面中的數(shù)據(jù)。由于每一個(gè)邏輯頁面可以包括頁面報(bào)頭并且所述頁面報(bào)頭包含對(duì)應(yīng)于該頁面的校驗(yàn)和(其可以被稱作“介質(zhì)”校驗(yàn)和),因此對(duì)應(yīng)于數(shù)據(jù)的實(shí)際頁面尺寸可以小于一個(gè)邏輯頁面。在一些實(shí)施例中,對(duì)于存儲(chǔ)設(shè)備間恢復(fù)數(shù)據(jù)1250(比如RAID奇偶校驗(yàn)信息)的頁面,頁面報(bào)頭可以更小,從而使得奇偶校驗(yàn)頁面保護(hù)數(shù)據(jù)頁面中的頁面校驗(yàn)和。在其他實(shí)施例中,可以計(jì)算存儲(chǔ)設(shè)備間恢復(fù)數(shù)據(jù)1250的奇偶校驗(yàn)頁面中的校驗(yàn)和,從而使得數(shù)據(jù)頁面校驗(yàn)和的校驗(yàn)和與覆蓋相應(yīng)的數(shù)據(jù)頁面的奇偶校驗(yàn)頁面的校驗(yàn)和相同。在這樣的實(shí)施例中,對(duì)應(yīng)于奇偶校驗(yàn)頁面的報(bào)頭不需要小于對(duì)應(yīng)于數(shù)據(jù)頁面的報(bào)頭。
[0131]設(shè)備間ECC數(shù)據(jù)1250可以是從保存用戶數(shù)據(jù)的其他存儲(chǔ)設(shè)備上的一個(gè)或多個(gè)頁面生成的奇偶校驗(yàn)信息。舉例來說,設(shè)備間ECC數(shù)據(jù)1250可以是用在RAID數(shù)據(jù)布局架構(gòu)中的奇偶校驗(yàn)信息。雖然所存儲(chǔ)的信息在存儲(chǔ)設(shè)備176a-176k中被顯示為鄰接邏輯頁面,但是在本領(lǐng)域內(nèi)所公知的是,可以按照隨機(jī)順序來設(shè)置各個(gè)邏輯頁面,其中每一個(gè)存儲(chǔ)設(shè)備 176a-176k 是 SSD。
[0132]設(shè)備內(nèi)ECC數(shù)據(jù)1240可以包括由設(shè)備內(nèi)冗余方案使用的信息。設(shè)備內(nèi)冗余方案利用給定存儲(chǔ)設(shè)備內(nèi)的ECC信息,比如奇偶校驗(yàn)信息。該設(shè)備內(nèi)冗余方案及其ECC信息對(duì)應(yīng)于給定設(shè)備,并且可以被保持在給定設(shè)備內(nèi),但是與可以由該設(shè)備自身內(nèi)部生成并保持的ECC不同。通常來說,設(shè)備內(nèi)部生成并保持的ECC對(duì)于該設(shè)備被包括在其中的系統(tǒng)不可見。
[0133]設(shè)備內(nèi)ECC數(shù)據(jù)1240還可以被稱作設(shè)備內(nèi)錯(cuò)誤恢復(fù)數(shù)據(jù)1240。設(shè)備內(nèi)錯(cuò)誤恢復(fù)數(shù)據(jù)1240可以被用來保護(hù)給定存儲(chǔ)設(shè)備免于潛在的扇區(qū)錯(cuò)誤(LSE)。LSE是直到訪問給定扇區(qū)才檢測(cè)到的錯(cuò)誤。因此,先前存儲(chǔ)在給定扇區(qū)中的任何數(shù)據(jù)都可能丟失。當(dāng)在存儲(chǔ)設(shè)備故障之后的RAID重建期間遇到時(shí),單一 LSE可能導(dǎo)致數(shù)據(jù)丟失。術(shù)語“扇區(qū)”通常指代HDD上的基本存儲(chǔ)單元,比如盤上的給定軌道內(nèi)的一個(gè)片段。在這里,術(shù)語“扇區(qū)”還可以指代SSD上的基本分配單元。當(dāng)存儲(chǔ)設(shè)備內(nèi)的給定扇區(qū)或其他存儲(chǔ)單元不可訪問時(shí),會(huì)發(fā)生潛在扇區(qū)錯(cuò)誤(LSE)。讀取或?qū)懭氩僮骺赡軐?duì)于所述給定扇區(qū)無法完成。此外,可能會(huì)發(fā)生不可校正的糾錯(cuò)碼(ECC)錯(cuò)誤。
[0134]包括在給定存儲(chǔ)設(shè)備內(nèi)的設(shè)備內(nèi)錯(cuò)誤恢復(fù)數(shù)據(jù)1240可以被用來提高給定存儲(chǔ)設(shè)備內(nèi)的數(shù)據(jù)存儲(chǔ)可靠性。設(shè)備內(nèi)錯(cuò)誤恢復(fù)數(shù)據(jù)1240是作為可以被包括在另一個(gè)存儲(chǔ)設(shè)備內(nèi)的其他ECC信息的補(bǔ)充,所述其他ECC信息比如有利用在RAID數(shù)據(jù)布局架構(gòu)中的奇偶校
驗(yàn)信息。
[0135]在每一個(gè)存儲(chǔ)設(shè)備內(nèi),設(shè)備內(nèi)錯(cuò)誤恢復(fù)數(shù)據(jù)1240可以被存儲(chǔ)在一個(gè)或多個(gè)頁面中。正如本領(lǐng)域技術(shù)人員所公知的那樣,設(shè)備內(nèi)錯(cuò)誤恢復(fù)數(shù)據(jù)1240可以通過在用戶數(shù)據(jù)1230內(nèi)的所選信息比特上施行一項(xiàng)函數(shù)來獲得。可以使用基于XOR(異或)的運(yùn)算來導(dǎo)出奇偶校驗(yàn)信息以便存儲(chǔ)在設(shè)備內(nèi)錯(cuò)誤恢復(fù)數(shù)據(jù)1240中。設(shè)備內(nèi)冗余方案的其他實(shí)例包括單奇偶校驗(yàn)(SPC)、最大距離可分(MDS)擦除碼、交織奇偶校驗(yàn)碼(IPC)、混合SPC和MDS碼(MDS+SPC)以及列對(duì)角線奇偶校驗(yàn)(CDP)。所述各種方案取決于計(jì)算數(shù)據(jù)1240的方式在所給出的可靠性和開銷方面有所不同。
[0136]除了前面描述的錯(cuò)誤恢復(fù)信息之外,所述系統(tǒng)還可以被配置成計(jì)算對(duì)應(yīng)于設(shè)備上的一個(gè)區(qū)段的校驗(yàn)和數(shù)值。舉例來說,在向設(shè)備寫入信息時(shí)可以計(jì)算一個(gè)校驗(yàn)和。該校驗(yàn)和由系統(tǒng)存儲(chǔ)。在從設(shè)備讀回信息時(shí),系統(tǒng)可以再次計(jì)算校驗(yàn)和,并且將其與原始存儲(chǔ)的數(shù)值進(jìn)行比較。如果兩個(gè)校驗(yàn)和不同,則所述信息未被正確讀取,并且系統(tǒng)可以使用其他方案來恢復(fù)所述數(shù)據(jù)。校驗(yàn)和函數(shù)的實(shí)例包括循環(huán)冗余校驗(yàn)(CRC)、MD5和SHA-1。
[0137]SSD內(nèi)的一個(gè)擦除塊可以包括幾個(gè)頁面。一個(gè)頁面可以包括4KB的數(shù)據(jù)存儲(chǔ)空間。一個(gè)擦除塊可以包括64個(gè)頁面或者256KB。在其他實(shí)施例中,一個(gè)擦除塊可以大到I兆字節(jié)(MB),并且包括256個(gè)頁面??梢园凑胀瑫r(shí)提供足夠大尺寸的單元和相對(duì)較低單元數(shù)目的方式來選擇分配單元尺寸,以便減少跟蹤分配單元的開銷。在一個(gè)實(shí)施例中,一個(gè)或多個(gè)狀態(tài)表可以保持一個(gè)分配單元的狀態(tài)(已分配、自由、已擦除、錯(cuò)誤)、耗損水平以及在該分配單元內(nèi)已發(fā)生的錯(cuò)誤數(shù)目的計(jì)數(shù)(可校正和/或不可校正)。在一個(gè)實(shí)施例中,一個(gè)分配單元與SSD的總存儲(chǔ)容量相比相對(duì)較小??赡茉O(shè)想到對(duì)應(yīng)于頁面、擦除塊和其他單元設(shè)置的數(shù)據(jù)存儲(chǔ)空間的其他數(shù)量。
[0138]元數(shù)據(jù)1260可以包括頁面報(bào)頭信息、RAID條帶標(biāo)識(shí)信息、對(duì)應(yīng)于一個(gè)或多個(gè)RAID條帶的日志數(shù)據(jù)等等。在各個(gè)實(shí)施例中,每一個(gè)條帶的開頭處的單一元數(shù)據(jù)頁面可以從其他條帶報(bào)頭重建?;蛘咴擁撁婵梢蕴幵谄媾夹r?yàn)分片中的不同偏移量處,從而可以通過設(shè)備間奇偶校驗(yàn)來保護(hù)數(shù)據(jù)。在一個(gè)實(shí)施例中,元數(shù)據(jù)1260可以存儲(chǔ)表明該數(shù)據(jù)不應(yīng)被復(fù)制的特定標(biāo)志數(shù)值或者與之相關(guān)聯(lián)。
[0139]除了設(shè)備間奇偶校驗(yàn)保護(hù)和設(shè)備內(nèi)奇偶校驗(yàn)保護(hù)之外,存儲(chǔ)設(shè)備176a_176k中的每一個(gè)頁面可以包括附加的保護(hù),比如存儲(chǔ)在給定頁面內(nèi)的校驗(yàn)和。所述校驗(yàn)和(8字節(jié)、4字節(jié)或其他尺寸)可以被放置在頁面內(nèi)部的報(bào)頭之后和相應(yīng)數(shù)據(jù)之前,其可以被壓縮。對(duì)于另一層級(jí)的保護(hù),可以把數(shù)據(jù)位置信息包括在校驗(yàn)和數(shù)值中。每一個(gè)所述頁面中的數(shù)據(jù)可以包括該信息。該信息可以包括虛擬地址和物理地址全部二者。扇區(qū)數(shù)目、數(shù)據(jù)組塊和偏移量數(shù)目、軌道數(shù)目、平面數(shù)目等等也可以被包括在該信息中。這一映射信息還可以被用來在地址翻譯映射表的內(nèi)容丟失的情況下重建所述表。
[0140]在一個(gè)實(shí)施例中,存儲(chǔ)設(shè)備176a_176k中的每一個(gè)頁面存儲(chǔ)特定類型的數(shù)目,t匕如數(shù)據(jù)類型1230-1260?;蛘吒鱾€(gè)頁面可以存儲(chǔ)多于一個(gè)字節(jié)的數(shù)據(jù)。頁面報(bào)頭可以存儲(chǔ)標(biāo)識(shí)對(duì)應(yīng)于相應(yīng)頁面的數(shù)據(jù)類型的信息。在一個(gè)實(shí)施例中,設(shè)備內(nèi)冗余方案把一個(gè)設(shè)備劃分成用于存儲(chǔ)用戶數(shù)據(jù)的各個(gè)位置組。舉例來說,一個(gè)分部可以是設(shè)備內(nèi)的對(duì)應(yīng)于RAID布局內(nèi)的一個(gè)條帶的一組位置。在所示出的實(shí)例中,為了易于說明僅示出了兩個(gè)條帶1270a和 1270b。
[0141]在一個(gè)實(shí)施例中,存儲(chǔ)控制器174內(nèi)的RAID引擎可以確定對(duì)于存儲(chǔ)設(shè)備176a-176k使用的保護(hù)層級(jí)。舉例來說,RAID引擎可以確定對(duì)于存儲(chǔ)設(shè)備176a_176k利用RAID雙奇偶校驗(yàn)。設(shè)備間冗余數(shù)據(jù)1250可以表示從相應(yīng)的用戶數(shù)據(jù)生成的RAID雙奇偶校驗(yàn)數(shù)值。在一個(gè)實(shí)施例中,存儲(chǔ)設(shè)備176j和176k可以存儲(chǔ)所述雙奇偶校驗(yàn)信息。應(yīng)當(dāng)理解的是,有可能設(shè)想到其他層級(jí)的RAID奇偶校驗(yàn)保護(hù)。此外,在其他實(shí)施例中,對(duì)于雙奇偶校驗(yàn)信息的存儲(chǔ)可以在各個(gè)存儲(chǔ)設(shè)備之間輪轉(zhuǎn),而不是被存儲(chǔ)在對(duì)應(yīng)于每一個(gè)RAID條帶的存儲(chǔ)設(shè)備176j和176k內(nèi)。為了易于說明和描述,對(duì)于雙奇偶校驗(yàn)信息的存儲(chǔ)被顯示為存儲(chǔ)在存儲(chǔ)設(shè)備176 j和176k中。雖然每一個(gè)存儲(chǔ)設(shè)備176a-176k包括多個(gè)頁面,但是為了易于說明僅標(biāo)記出頁面1212和頁面1220。
[0142]應(yīng)當(dāng)提到的是,前面描述的實(shí)施例可以包括軟件。在這樣的實(shí)施例中,可以在計(jì)算機(jī)可讀介質(zhì)上傳送或存儲(chǔ)實(shí)施各種方法和/或機(jī)制的程序指令??梢垣@得被配置成存儲(chǔ)程序指令的多種類型的介質(zhì),其中包括硬盤、軟盤、⑶_R0M、DVD、閃存、可編程ROM(PROM)、隨機(jī)存取存儲(chǔ)器(RAM)以及各種其他形式的易失性或非易失性存儲(chǔ)裝置。
[0143]在各個(gè)實(shí)施例中,這里所描述的各種方法和機(jī)制的一個(gè)或多個(gè)部分可以構(gòu)成云計(jì)算環(huán)境的一部分。在這樣的實(shí)施例中,可以根據(jù)一種或多種模型通過因特網(wǎng)作為服務(wù)來提供資源。這樣的模型可以包括作為服務(wù)的基礎(chǔ)設(shè)施(IaaS)、作為服務(wù)的平臺(tái)(Paas)以及作為服務(wù)的軟件(SaaS)。在IaaS中,作為服務(wù)給出計(jì)算機(jī)基礎(chǔ)設(shè)施。在這種情況下,計(jì)算裝備通常由服務(wù)提供商所有及操作。在PaaS模型中,由開發(fā)者使用來開發(fā)軟件解決方案的軟件工具和底層裝備可以由服務(wù)提供商作為服務(wù)來提供和寄放。SaaS通常包括由服務(wù)提供商作為服務(wù)按需授予軟件執(zhí)照。服務(wù)提供商可以寄放軟件,或者可以對(duì)于給定時(shí)間段為顧客布置軟件。有可能設(shè)想到前述模型的許多組合。
[0144]雖然前面以可觀的細(xì)節(jié)描述了各個(gè)實(shí)施例,但是一旦完全理解前面的公開內(nèi)容,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到許多變型和修改。所附權(quán)利要求書應(yīng)當(dāng)被解釋成涵蓋所有這樣的變型和修改。
【權(quán)利要求】
1.一種計(jì)算機(jī)系統(tǒng),其包括: 數(shù)據(jù)存儲(chǔ)介質(zhì); 耦合到數(shù)據(jù)存儲(chǔ)介質(zhì)的數(shù)據(jù)存儲(chǔ)控制器;以及 包括多個(gè)條目的映射表,每一個(gè)映射表?xiàng)l目包括元組,所述元組包括關(guān)鍵字; 其中,數(shù)據(jù)存儲(chǔ)控制器被配置成利用可變長(zhǎng)度編碼對(duì)映射表中的每一個(gè)元組進(jìn)行編碼。
2.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述映射表被組織成多個(gè)時(shí)間排序?qū)蛹?jí),每一個(gè)層級(jí)包括一個(gè)或多個(gè)映射表?xiàng)l目。
3.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,至少部分地基于未編碼的給定元組的尺寸、已編碼的給定元組的尺寸以及用以編碼給定元組的時(shí)間來選擇針對(duì)給定元組的多種編碼當(dāng)中的特定編碼。
4.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述數(shù)據(jù)存儲(chǔ)控制器被配置成對(duì)給定元組施行多種編碼,并且選擇所述多種編碼當(dāng)中的一種以作為最終編碼。
5.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述數(shù)據(jù)存儲(chǔ)控制器被配置成在不首先解碼給定的映射表?xiàng)l目的情況下檢查該條目,以便查看其是否滿足查詢。
6.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述映射表存儲(chǔ)其關(guān)鍵字對(duì)應(yīng)于系統(tǒng)中的虛擬塊的條目。
7.如權(quán)利要求6所述的計(jì)算機(jī)系統(tǒng),其中,對(duì)于給定虛擬塊范圍的條目存儲(chǔ)促進(jìn)查找包括塊的范圍的數(shù)據(jù)的位置的信息。
8.如權(quán)利要求6所述的計(jì)算機(jī)系統(tǒng),其中,對(duì)于給定虛擬塊范圍的條目存儲(chǔ)在給定虛擬塊范圍內(nèi)的數(shù)據(jù)上計(jì)算的散列數(shù)值。
9.如權(quán)利要求6所述的計(jì)算機(jī)系統(tǒng),其中,對(duì)于給定虛擬塊范圍的條目存儲(chǔ)能夠被用來在無需進(jìn)一步訪問存儲(chǔ)裝置的情況下重建虛擬塊范圍的數(shù)據(jù)模式。
10.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述映射表包括作為頁面被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)介質(zhì)中的數(shù)據(jù),并且所述數(shù)據(jù)存儲(chǔ)控制器被配置成對(duì)于至少其中一些頁面使用不同的數(shù)據(jù)編碼。
11.如權(quán)利要求10所述的計(jì)算機(jī)系統(tǒng),其中,一元組的已編碼表示的尺寸與該元組的未編碼表示的尺寸之間的比例可以對(duì)于每一個(gè)頁面而有所不同。
12.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,被用來表示未編碼的元組的最大比特?cái)?shù)目可以在無需重新編碼該元組的情況下被更改。
13.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述映射表的尺寸與為之存在有效映射的空間的數(shù)量成比例。
14.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述可變長(zhǎng)度編碼包括基礎(chǔ)和偏移量。
15.一種用在存儲(chǔ)系統(tǒng)中的方法,所述方法包括: 存儲(chǔ)被組織成多個(gè)層級(jí)的映射表,所述多個(gè)層級(jí)當(dāng)中的每一個(gè)層級(jí)包括一個(gè)或多個(gè)映射表?xiàng)l目,其中所述多個(gè)條目當(dāng)中的每一個(gè)包括元組,所述元組包括關(guān)鍵字;以及 利用可變長(zhǎng)度編碼對(duì)映射表中的每一個(gè)元組進(jìn)行編碼。
16.如權(quán)利要求15中所述的方法,其中,所述映射表被組織成多個(gè)時(shí)間排序?qū)蛹?jí),每一個(gè)層級(jí)包括一個(gè)或多個(gè)映射表?xiàng)l目。
17.如權(quán)利要求15中所述的方法,其還包括:至少部分地基于未編碼的給定元組的尺寸、已編碼的給定元組的尺寸以及用以編碼給定元組的時(shí)間來選擇針對(duì)給定元組的多種編碼當(dāng)中的特定編碼。
18.如權(quán)利要求15中所述的方法,其還包括:對(duì)給定元組施行多種編碼,并且選擇所述多種編碼當(dāng)中的一種以作為最終編碼。
19.如權(quán)利要求15中所述的方法,其還包括:對(duì)于至少其中一些頁面使用不同的數(shù)據(jù)編碼。
20.如權(quán)利要求15中所述的方法,其中,被用來表示未編碼的元組的最大比特?cái)?shù)目可以在無需重新編碼該元組的情況下被更改。
21.如權(quán)利要求15中所述的方法,其中,所述映射表的尺寸與為之存在有效映射的空間的數(shù)量成比例。
22.—種存儲(chǔ)程序指令的非瞬時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述程序指令可由處理器執(zhí)行以: 存儲(chǔ)被組織成多個(gè)層級(jí)的映射表,所述多個(gè)層級(jí)當(dāng)中的每一個(gè)層級(jí)包括一個(gè)或多個(gè)映射表?xiàng)l目,其中所述多個(gè)條目當(dāng)中的每一個(gè)包括元組,所述元組包括關(guān)鍵字;以及利用可變長(zhǎng)度編碼對(duì)映射表中的每一個(gè)元組進(jìn)行編碼。
【文檔編號(hào)】G06F17/30GK104025010SQ201280053506
【公開日】2014年9月3日 申請(qǐng)日期:2012年9月27日 優(yōu)先權(quán)日:2011年9月30日
【發(fā)明者】J·科爾格洛夫, J·海斯, E·米勒 申請(qǐng)人:凈睿存儲(chǔ)股份有限公司