對儲(chǔ)存系統(tǒng)中數(shù)據(jù)高效存儲(chǔ)與檢索的組相關(guān)哈希表組織的制作方法
【技術(shù)領(lǐng)域】
[0001] 本公開涉及儲(chǔ)存系統(tǒng),并且特別涉及一種對儲(chǔ)存系統(tǒng)中的數(shù)據(jù)進(jìn)行高效存儲(chǔ)與檢 索的元數(shù)據(jù)組織。
【背景技術(shù)】
[0002] 儲(chǔ)存系統(tǒng)通常包括一個(gè)或多個(gè)存儲(chǔ)裝置,例如具體化為硬盤驅(qū)動(dòng)器(HDD)或者固 態(tài)驅(qū)動(dòng)器(SSD)的磁盤。根據(jù)需要可以將信息輸入存儲(chǔ)裝置以及從存儲(chǔ)裝置中獲取。儲(chǔ)存系 統(tǒng)可以實(shí)施諸如文件系統(tǒng)之類的高層模塊以將儲(chǔ)存在磁盤上的信息從邏輯上組織為諸如 文件或者邏輯單元(LUN)之類的存儲(chǔ)對象。每個(gè)儲(chǔ)存容器可以被實(shí)施為諸如數(shù)據(jù)塊和元數(shù) 據(jù)塊之類的一組數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)塊用于儲(chǔ)存器的數(shù)據(jù),元數(shù)據(jù)塊描述儲(chǔ)存容器的數(shù)據(jù)。例 如,元數(shù)據(jù)可以描述(例如識別)用于該數(shù)據(jù)在磁盤上的存儲(chǔ)位置。
[0003] 在傳統(tǒng)的文件系統(tǒng)中,在處理諸如讀取或?qū)懭胝埱笾惖妮斎?輸出(I/O)請求 時(shí),可能引起大量元數(shù)據(jù)更新(變化)。也就是說,與相關(guān)聯(lián)的I/O請求的(待寫入)數(shù)據(jù)量成 正比(即,高寫入放大)的相對大量的元數(shù)據(jù)可能被寫入。例如,在具有改變LUN的數(shù)據(jù)(用戶 數(shù)據(jù))的寫入數(shù)據(jù)的寫入請求的情況下,該請求在儲(chǔ)存系統(tǒng)處的處理可能需要對大量地存 取磁盤以獲取并且更新與變化的用戶數(shù)據(jù)相關(guān)聯(lián)的一個(gè)或多個(gè)間接塊(元數(shù)據(jù))。間接塊的 更新可能導(dǎo)致大量元數(shù)據(jù)變化,由此造成高寫入放大。在讀取請求的情況下,如果在存取磁 盤上的所請求的用戶數(shù)據(jù)前需要存取磁盤上的元數(shù)據(jù),可能引起大的延遲。例如,如果需要 針對每讀取請求對兩次磁盤存取進(jìn)行平均,所產(chǎn)生的讀取放大使性能減半。此外,如果I/O 請求需要打開目錄以存取文件系統(tǒng)元數(shù)據(jù),這可能需要大量存取磁盤,由此引起高讀取放 大。通過降低處理I/O請求所需要的元數(shù)據(jù)量并且保持在儲(chǔ)存系統(tǒng)的存儲(chǔ)器例如RAM中需要 的元數(shù)據(jù)的基本量,可以降低磁盤存取(讀取和寫入)的量,因此降低讀取放大和寫入放大。
【附圖說明】
[0004] 通過結(jié)合附圖引用以下描述可以更好地理解在本文中的實(shí)施例的上述的和進(jìn)一 步優(yōu)點(diǎn),其中相同附圖標(biāo)記表示相同或者功能上類似的部件,其中:
[0005] 圖1是互連為群集的多個(gè)節(jié)點(diǎn)的框圖;
[0006] 圖2是節(jié)點(diǎn)的框圖;
[0007] 圖3是節(jié)點(diǎn)的存儲(chǔ)器輸入/輸出(I/O)堆棧的框圖;
[0008] 圖4示出了存儲(chǔ)器I/O堆棧的寫入路徑;
[0009] 圖5示出了存儲(chǔ)器I/O堆棧的讀取路徑;
[0010] 圖6是范圍哈希技術(shù)的框圖;
[0011] 圖7是桶映射技術(shù)的框圖;
[0012]圖8a是哈希表?xiàng)l目選擇技術(shù)的框圖;
[0013]圖8b是哈希表槽的框圖;
[0014]圖9是范圍密鑰重構(gòu)技術(shù)的框圖;以及
[0015] 圖10是哈希沖突技術(shù)的框圖。
【具體實(shí)施方式】
[0016] 在本文中所描述的實(shí)施例涉及將哈希算法用于文件系統(tǒng)元數(shù)據(jù)配置中,哈希算法 的使用降低儲(chǔ)存在群集的節(jié)點(diǎn)的存儲(chǔ)器中的元數(shù)據(jù)的量并且降低在節(jié)點(diǎn)處處理輸入/輸出 (I/O)請求所需要的元數(shù)據(jù)的量。說明性地,實(shí)施例針對布谷鳥哈希算法,并且特別針對布 谷鳥哈希算法(cuckoo hashing)可以被修改并且應(yīng)用于構(gòu)造文件系統(tǒng)元數(shù)據(jù)配置的方式。 在一實(shí)施例中,文件系統(tǒng)元數(shù)據(jù)配置可以說明性地配置為具體化為數(shù)據(jù)結(jié)構(gòu)(例如,布谷鳥 哈希表)的密鑰值范圍儲(chǔ)存,其中,諸如哈希表索引之類的值可以配置為索引并且應(yīng)用于布 谷鳥哈希表以獲取諸如范圍密鑰之類的密鑰,該密鑰配置為引用在一個(gè)或多個(gè)諸如固態(tài)驅(qū) 動(dòng)器(SSD)之類的存儲(chǔ)裝置上的范圍(extent)的位置。因此,布谷鳥哈希表使描述范圍得范 圍元數(shù)據(jù)具體化,并且由此可以被組織以將 SSD上的位置與索引相關(guān)聯(lián),即與哈希表索引關(guān) 聯(lián)的值識別SSD上的位置。有利地,文件系統(tǒng)元數(shù)據(jù)配置實(shí)現(xiàn)高度元數(shù)據(jù)壓縮,從而降低讀 取和寫入放大以及存儲(chǔ)器需求。
[0017] 鍾 [0018] 存儲(chǔ)器群集
[0019]圖1是互連為群集100并且配置為提供與存儲(chǔ)裝置上的信息組織有關(guān)的存儲(chǔ)器服 務(wù)的多個(gè)節(jié)點(diǎn)200的框圖。節(jié)點(diǎn)200可以由群集互連構(gòu)架110互連并且包括協(xié)作地提供群集 100的分布式存儲(chǔ)器架構(gòu)的功能部件,其可以在存儲(chǔ)器區(qū)域網(wǎng)(SAN)中使用。正如在本文中 所描述的,每個(gè)節(jié)點(diǎn)200的部件包括硬件和軟件功能,該硬件和軟件功能使節(jié)點(diǎn)能夠經(jīng)由計(jì) 算機(jī)網(wǎng)絡(luò)130連接到一個(gè)或多個(gè)主機(jī)120上以及經(jīng)由存儲(chǔ)器互連140連接到存儲(chǔ)裝置的一個(gè) 或多個(gè)存儲(chǔ)器陣列150上,由此使得存儲(chǔ)服務(wù)符合分布式存儲(chǔ)器架構(gòu)。
[0020]每個(gè)主機(jī)120可以被具體化為通用計(jì)算機(jī),該通用計(jì)算機(jī)配置為根據(jù)消息傳遞的 客戶端/服務(wù)器模型與任何節(jié)點(diǎn)200交互。也就是說,該客戶端(主機(jī))可以請求節(jié)點(diǎn)的服務(wù), 并且該節(jié)點(diǎn)可以通過在網(wǎng)絡(luò)130上交換數(shù)據(jù)包返回由主機(jī)請求的服務(wù)的結(jié)果。主機(jī)在存取 以的例如文件和目錄的儲(chǔ)存器形式時(shí)的節(jié)點(diǎn)上的信息時(shí)可以發(fā)出包括基于文件的存取協(xié) 議,例如在傳輸控制協(xié)議/網(wǎng)絡(luò)協(xié)議(TCP/IP)上的網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議。然而,在一個(gè)實(shí) 施例中,在存取以諸如邏輯段元(LUN)之類的存儲(chǔ)容器形式的信息時(shí),主機(jī)120說明性地發(fā) 出包括基于塊的存取協(xié)議的數(shù)據(jù)包,該基于塊的存取協(xié)議例如為在TCP( iSCSI)上封裝的小 型計(jì)算機(jī)系統(tǒng)接口(SCSI)協(xié)議和在FC上封裝的SCSI(FCP)。尤其,任何節(jié)點(diǎn)200可以提供針 對指向儲(chǔ)存在群集100上的儲(chǔ)存器的請求的服務(wù)。
[0021]圖2是說明性地具體化為存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)200的框圖,該存儲(chǔ)系統(tǒng)具有經(jīng)由存儲(chǔ)器 總線215耦接到存儲(chǔ)器220上的一個(gè)或多個(gè)中央處理器(CPU)210<XPU 210還經(jīng)由系統(tǒng)互連 270耦接到網(wǎng)絡(luò)適配器230、存儲(chǔ)器控制器240、群集互連接口 250以及非易失性隨機(jī)存取存 儲(chǔ)器(NVRAM 280)。網(wǎng)絡(luò)適配器230可以包括適用于將節(jié)點(diǎn)200經(jīng)由計(jì)算機(jī)網(wǎng)絡(luò)130耦接至主 機(jī)120上的一個(gè)或多個(gè)端口,該計(jì)算機(jī)網(wǎng)路可以包括點(diǎn)到點(diǎn)鏈路、廣域網(wǎng)、在公用網(wǎng)(因特 網(wǎng))上實(shí)施的虛擬專用網(wǎng)絡(luò)或者局域網(wǎng)。網(wǎng)絡(luò)適配器230因此包括將節(jié)點(diǎn)連接至網(wǎng)絡(luò)130所 需要的機(jī)械、電學(xué)以及信號電路,其說明性地具體化為以太網(wǎng)或者光纖通道(FC)網(wǎng)絡(luò)。 [0022]存儲(chǔ)器220可以包括通過可由CPU 210尋址的的存儲(chǔ)器位置,用于儲(chǔ)存與在本文中 所描述的實(shí)施例關(guān)聯(lián)的軟件程序和數(shù)據(jù)結(jié)構(gòu)。CPU 210則可以包括處理部件和/或邏輯電 路,其配置為諸如存儲(chǔ)器輸入/輸出(I/O)堆棧300之類的執(zhí)行軟件程序并對數(shù)據(jù)結(jié)構(gòu)進(jìn)行 操作。說明性地,存儲(chǔ)器I/O堆棧300可以被實(shí)施為可以被分解成多個(gè)線程的一組用戶模式 處理。操作系統(tǒng)內(nèi)核224通過特別地調(diào)用支持由節(jié)點(diǎn)并且具體地由存儲(chǔ)器I/O堆棧300所實(shí) 施的存儲(chǔ)器服務(wù)的操作來在功能上組織該節(jié)點(diǎn),操作系統(tǒng)內(nèi)核224的一部分通常駐留在存 儲(chǔ)器220(核內(nèi),in-core)中并且由處理部件(即,CPU 210)執(zhí)行。合適的操作系統(tǒng)內(nèi)核224可 以包括通用操作系統(tǒng),例如,UNIX?系列或者微軟^Windows?系列的操作系統(tǒng)或者具有 例如微核和嵌入式內(nèi)核的可配置功能的操作系統(tǒng)。然而,在本文中所描述的實(shí)施例中,操作 系統(tǒng)內(nèi)核是說明性地Linux?操作系統(tǒng)。對于本領(lǐng)域技術(shù)人員顯然的是,包括各種計(jì)算機(jī) 可讀介質(zhì)的其它處理和存儲(chǔ)器裝置可以用來儲(chǔ)存和執(zhí)行關(guān)于本文中的實(shí)施例的程序指令。 [0023]每個(gè)存儲(chǔ)器控制器240與在節(jié)點(diǎn)200上執(zhí)行的存儲(chǔ)器I/O堆棧300協(xié)作以存取由主 機(jī)120請求的信息。該信息優(yōu)選儲(chǔ)存在存儲(chǔ)器陣列150的存儲(chǔ)裝置上,該存儲(chǔ)裝置例如為說 明性地被具體化為閃存裝置的固態(tài)驅(qū)動(dòng)器(SSD)260。在實(shí)施例中,閃存裝置可以基于NAND 閃存部件,例如單層單元(SLC)閃存、多層單元(MLC)閃存或者三倍層單元(TLC)閃存,盡管 對于本領(lǐng)域技術(shù)人員要理解的是其它非易失性,固態(tài)電子裝置(例如,基于存儲(chǔ)器類存儲(chǔ)器 部件的驅(qū)動(dòng)器)可以有利地采用本文中所描述的實(shí)施例。因此,存儲(chǔ)裝置可以或者不是面向 塊的(例如,塊存?。4鎯?chǔ)器控制器240包括一個(gè)或多個(gè)端口,該端口具有經(jīng)由存儲(chǔ)器互連 140耦接到SSD 260上的I/0接口電路,其說明性地具體化為串行連接SCSI (SAS)拓?fù)洹?蛇x 地,可以使用其它點(diǎn)對點(diǎn)I /〇互連配置,例如常規(guī)的串行ATA (SATA)拓?fù)浠蛘逷C I拓?fù)洹O到y(tǒng) 互連270也可以將節(jié)點(diǎn)200耦接至諸如SSD之類的本地服務(wù)存儲(chǔ)裝置248,本地服務(wù)存儲(chǔ)裝置 248配置為例如作為群集數(shù)據(jù)庫(DB)244來在本地儲(chǔ)存群集相關(guān)配置信息,其可以復(fù)制至群 集100中的其它節(jié)點(diǎn)200。
[0024]群集互連接口 250可以包括適用于將節(jié)點(diǎn)200耦接至群集100的其它節(jié)點(diǎn)上的一個(gè) 或多個(gè)端口。在實(shí)施例中,盡管對于本領(lǐng)域技術(shù)人員顯然可將諸如無限帶寬技術(shù) (Infiniband)之類的其它類型的協(xié)議和互連用于本申請所述的實(shí)施例中,但是以太網(wǎng)可以 用作群集協(xié)議和互連結(jié)構(gòu)介質(zhì)。NVRAM 280可以包括考慮到在節(jié)點(diǎn)和群集環(huán)境故障情況下 能夠保持?jǐn)?shù)據(jù)的備用電池或者其它內(nèi)建的最后狀態(tài)滯留容量(例如非易失性半導(dǎo)體存儲(chǔ) 器,例如存儲(chǔ)類存儲(chǔ)器)。說明性地,一部分NVRAM 280可以配置為一個(gè)或多個(gè)非易失性記錄 (NVLogs 285),其配置為暫時(shí)記錄("以日志方式記錄(log)")從主機(jī)接收到的例如寫入請 求的I/O請求。
[0025] 存儲(chǔ)器I/O堆棧
[0026] 圖3是可以利用本文中所描述的一個(gè)或多個(gè)實(shí)施例有利地使用的存儲(chǔ)器I/O堆棧 300的框圖。存儲(chǔ)器I/O堆棧300包括與節(jié)點(diǎn)200的其它功能部件協(xié)作以提供群集100的分布 式存儲(chǔ)器架構(gòu)的多個(gè)軟件模塊或者層。在一個(gè)實(shí)施例中,分布式存儲(chǔ)器架構(gòu)表示單個(gè)儲(chǔ)存 器的抽象,例如,用于全部群集100的節(jié)點(diǎn)200的所有存儲(chǔ)器陣列150組織為一個(gè)大的存儲(chǔ)器 池。換句話說,該結(jié)構(gòu)在群集(經(jīng)由群集寬密鑰可檢索的)各處使存儲(chǔ)器固定,例如,陣列150 的SSD 260以啟用LUNs的存儲(chǔ)器。儲(chǔ)存容量和性能兩者然后可以通過增加節(jié)點(diǎn)200至群集 100來放大。
[0027] 說明性地,存儲(chǔ)器I/O堆棧300包括管理層310、協(xié)議層320、持久層330、卷層340、范 圍儲(chǔ)存層350、冗余陣列的獨(dú)立磁盤(RAID)存儲(chǔ)器層360、存儲(chǔ)器層365以及與消息內(nèi)核370 相互連接的NVRAM(儲(chǔ)存NVLogs)。消息內(nèi)核370可以提供基于消息(或者基于事件)的調(diào)度模 型(例如異步調(diào)度),其使用消息作為在層之中的工作交換(例如傳遞)的基本單位。由消息 內(nèi)核提供以在存儲(chǔ)器I/O堆棧300的層之間傳送信息的合適的消息傳遞機(jī)制可以包括,例如 針對節(jié)點(diǎn)內(nèi)通信:i)在線程池上執(zhí)行的消息;ii)通過該存儲(chǔ)器I/O堆棧作為操作進(jìn)行的單 線程上執(zhí)行的消息;iii)使用進(jìn)程間通信(IPC)機(jī)制的消息,以及,例如針對節(jié)點(diǎn)間通信