用于用內(nèi)容條目表格存儲數(shù)據(jù)的系統(tǒng)和方法
【專利摘要】一種用于存儲數(shù)據(jù)的方法包括:接收將用第一對象ID和第一偏移量ID定義的第一數(shù)據(jù)寫至永久存儲器的請求。該方法進一步包括:確定所述永久存儲器中的第一物理地址,其中所述第一物理地址包括第一塊ID和第一子塊ID。該方法進一步包括:將所述第一數(shù)據(jù)寫至所述第一物理地址;產(chǎn)生內(nèi)容條目(TE)的第一表格,其包括所述第一對象ID、所述第一偏移量ID和所述第一子塊ID;以及將所述第一TE寫至所述永久存儲器中的第二物理地址,其中所述第二物理地址包括所述第一塊ID和第二子塊ID,其中第二子塊ID對應(yīng)于所述第二子塊ID,且其中所述第二子塊位于同所述第一塊ID相對應(yīng)的第一塊內(nèi)。存儲系統(tǒng)具有自描述數(shù)據(jù)。
【專利說明】用于用內(nèi)容條目表格存儲數(shù)據(jù)的系統(tǒng)和方法 背景
[0001] 在系統(tǒng)的整體性能中,系統(tǒng)能將數(shù)據(jù)寫至永久存儲器以及從永久存儲器讀取數(shù)據(jù) 的速度常常是一個關(guān)鍵因素。向永久存儲器讀取和寫入數(shù)據(jù)的傳統(tǒng)方法需要通過系統(tǒng)核心 中的多個層以及硬件中的多個實體進行處理。結(jié)果,向永久存儲器讀取和寫入數(shù)據(jù)導致系 統(tǒng)中的明顯延遲,且最終降低系統(tǒng)的整體性能。
【發(fā)明內(nèi)容】
[0002] -般而言,在一個方面中,一種用于存儲數(shù)據(jù)的方法。該方法包括:接收將第一數(shù) 據(jù)寫至永久存儲器的請求,其中該第一數(shù)據(jù)是用第一邏輯地址定義的;確定該永久存儲器 中的第一物理地址,其中該第一物理地址包括第一塊ID和第一子塊ID ;將該第一數(shù)據(jù)寫至 該第一物理地址;產(chǎn)生內(nèi)容條目(TE)的第一表格,其包括有該第一邏輯地址和該第一子塊 ID ;以及將該第一 TE寫至該永久存儲器中的第二物理地址,其中該第二物理地址包括該第 一塊ID和第二子塊ID,其中第二子塊對應(yīng)于該第二子塊ID,且其中該第二子塊位于同該第 一塊ID相對應(yīng)的第一塊內(nèi)。
[0003] -般而言,在一個方面中,本發(fā)明涉及一種用于存儲數(shù)據(jù)的方法,包括:接收將第 一數(shù)據(jù)寫至永久存儲器的請求,其中該第一數(shù)據(jù)是用第一邏輯地址定義的;確定該永久存 儲器中的第一物理地址,其中該第一物理地址包括第一塊ID和第一頁面ID ;將包含該第一 數(shù)據(jù)的副本的第一碎片寫至該第一物理地址;產(chǎn)生內(nèi)容條目(TE)的第一表格,其包括有該 第一邏輯地址和該第一頁面ID ;接收將第二數(shù)據(jù)寫至該永久存儲器的請求,其中該第二數(shù) 據(jù)是用第二邏輯地址定義的;確定該永久存儲器中的第二物理地址,其中該第二物理地址 包括第一塊ID和第二頁面ID ;將包含該第二數(shù)據(jù)的副本的第二碎片寫至該第二物理地址; 產(chǎn)生包含該第一邏輯地址和該第二頁面ID的第二TE ;產(chǎn)生內(nèi)容表格(TOC)頁面,其中該 TOC頁面包括第一 TE和第二TE ;以及將該TOC頁面寫至該永久存儲器中的第三物理地址, 其中該第三物理地址包括該第一塊ID和第三頁面ID。
[0004] 一般而言,在一個方面中,本發(fā)明涉及一種用于填充存儲器內(nèi)(in-memory)數(shù)據(jù) 結(jié)構(gòu)的方法。該方法包括:(a)選擇永久存儲器中的第一塊;(b)提取該第一塊中的最后頁 面,其中該第一塊與第一塊ID相關(guān)聯(lián);(c)從該第一塊中的最后頁面提取內(nèi)容條目(TE)的 第一表格,其中該第一 TE包括針對第一數(shù)據(jù)的第一邏輯地址以及第一頁面ID,第一頁面ID 與第一數(shù)據(jù)所位于的第一塊中的頁面相對應(yīng);(d)使用第一塊ID和第一頁面ID產(chǎn)生針對 第一數(shù)據(jù)的第一物理地址;(e)散列該第一邏輯地址以獲得第一散列值;以及(f)用該第一 散列值和該第一物理地址之間的第一映射填充該存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
[0005] 本發(fā)明的其他方面將從下面的說明和所附權(quán)利要求是顯而易見的。
【專利附圖】
【附圖說明】
[0006] 圖1A-1E示出根據(jù)本發(fā)明的一個或多個實施例的系統(tǒng)。
[0007] 圖2A-2D示出根據(jù)本發(fā)明的一個或多個實施例的存儲裝置。
[0008] 圖3示出了根據(jù)本發(fā)明的一個或多個實施例的存儲模塊。
[0009] 圖4A示出根據(jù)本發(fā)明的一個或多個實施例的存儲模塊。
[0010] 圖4B示出根據(jù)本發(fā)明的一個或多個實施例的塊。
[0011] 圖4C示出根據(jù)本發(fā)明的一個或多個實施例的碎片頁面。
[0012] 圖4D示出根據(jù)本發(fā)明的一個或多個實施例的TOC頁面。
[0013] 圖4E示出根據(jù)本發(fā)明的一個或多個實施例的一塊。
[0014] 圖4F不出根據(jù)本發(fā)明的一個或多個實施例的內(nèi)容表格(TOC)條目。
[0015] 圖5示出根據(jù)本發(fā)明的一個或多個實施例的數(shù)據(jù)結(jié)構(gòu)。
[0016] 圖6A-6C示出根據(jù)本發(fā)明的一個或多個實施例的流程圖。
[0017] 圖7A-7E示出根據(jù)本發(fā)明的一個或多個實施例的示例。
[0018] 圖8示出了根據(jù)本發(fā)明的一個或多個實施例的流程圖。
【具體實施方式】 現(xiàn)在將參考附圖詳細描述本發(fā)明的具體實施方案。在以下本發(fā)明實施例的詳細描述 中,提出了許多具體的細節(jié),以提供本發(fā)明的更深入的理解。然而,對本領(lǐng)域的普通技術(shù)人 員明顯的是,本發(fā)明可以在沒有這些具體的細節(jié)的情況下實施。在其他情況下,公知的特征 未被詳細描述,以避免使描述不必要地復(fù)雜化。
[0019] 在以下圖1A-8的描述中,在本發(fā)明的各種實施例中,針對某一附圖描述的任何組 件可等同于針對任何其他附圖描述的一個或多個同名組件。為簡潔起見,這些組件的描述 將不在針對每一附圖而重復(fù)。因此,每一附圖的諸組件的每一和每個實施例都被結(jié)合作為 引用,并被假定為可選地出現(xiàn)于具有一個或多個同名組件的所有其他附圖之內(nèi)。另外,根據(jù) 本發(fā)明的各種實施例,某一附圖的諸組件的任何描述要被解釋為一個可選實施例,該可選 實施例可以除了、連同或代替結(jié)合任何其他附圖中的相應(yīng)同名組件所描述的那些實施例。
[0020] 在一般情況下,本發(fā)明的實施例涉及存儲系統(tǒng)。更具體地說,本發(fā)明的實施例涉及 包括自描述數(shù)據(jù)的存儲系統(tǒng)。此外,本發(fā)明的實施例涉及其中需要存取存儲在存儲系統(tǒng)中 的用戶數(shù)據(jù)的所有元數(shù)據(jù)是用它所描述的用戶數(shù)據(jù)來定位的。此外,該元數(shù)據(jù)是用來填充 (populate)存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu),該存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)允許存儲系統(tǒng)僅使用該存儲器內(nèi)數(shù)據(jù) 結(jié)構(gòu)來直接存取用戶數(shù)據(jù)。
[0021] 圖1A-1E示出根據(jù)本發(fā)明的一個或多個實施例的系統(tǒng)。參考圖1A,該系統(tǒng)包括可 操作地連接到存儲裝置(102)的一個或多個客戶端(客戶端A(IOOA)、客戶端M(IOOM))。
[0022] 在本發(fā)明的一個實施例中,客戶端(100AU00M)對應(yīng)于包括發(fā)出一讀取請求至存 儲裝置(102)和/或發(fā)出一寫入請求至存儲裝置(102)的功能的任何系統(tǒng)。雖然未示出于 圖IA中,客戶端(100AU00M)中的每一個都可包括客戶端處理器和客戶端存儲器。以下圖 ID描述了有關(guān)客戶端中的諸組件的附加細節(jié)。在本發(fā)明的一個實施例中,客戶端(100A、 100M)被配置為與存儲裝置(102)通信,該通信使用以下協(xié)議中的一個或多個:外圍組件 互連(PCI)、PCI Express (PCIe)、PCI-eXtended(PCI-X)、非易失性存儲器快線(UVMe)、 PCI-Express架構(gòu)(Fabric)上的非易失性存儲器快線(UVMe)、以太網(wǎng)架構(gòu)上的非易失性存 儲器快線(UVMe)以及無限帶寬(Infiniband)架構(gòu)上的非易失性存儲器快線(UVMe)。本領(lǐng) 域技術(shù)人員會明白:本發(fā)明并不限于上述協(xié)議。
[0023] 在本發(fā)明的一個或多個實施例中,如果客戶端實現(xiàn)PCI、PCI Express或UVMe,則 該客戶端包括根組件(root complex)(未示出)。在本發(fā)明的一個實施例中,根組件是將客 戶端處理器和客戶端存儲器連接至PCIe架構(gòu)的設(shè)備。在本發(fā)明的一個實施例中,根組件被 集成入客戶端處理器。
[0024] 在本發(fā)明的一個實施例中,PCIe架構(gòu)包括經(jīng)由交換機(例如,圖ID中的客戶端交 換機(116)和交換機架構(gòu)內(nèi)的交換機,交換機架構(gòu)是例如圖2A中的交換機架構(gòu)(206))連 接的根組件和端點。在本發(fā)明的一個實施例中,端點是除了根組件或交換機之外的可以始 發(fā)PCI交換(例如,讀取請求、寫入請求)或者作為PCI交換的目標的設(shè)備。
[0025] 在本發(fā)明的一個實施例中,單個客戶端和單個存儲裝置可以被視為單個PCIe架 構(gòu)的一部分。在本發(fā)明的另一實施例中,一個或多個客戶端以及一個或多個存儲裝置的任 何組合可以被視作是單個PCIe架構(gòu)的一部分。此外,如果存儲裝置內(nèi)的個別組件使用PCIe 進行通信,且客戶端中的個別組件(參見圖1D)使用PCIe進行通信,則存儲裝置和客戶端 中的所有組件可以被視為單個PCIe架構(gòu)的一部分。本領(lǐng)域技術(shù)人員會明白:可以使用另一 類型的架構(gòu)來實現(xiàn)本發(fā)明的各種實施例,而不脫離本發(fā)明。
[0026] 繼續(xù)圖1A,在本發(fā)明的一個實施例中,存儲裝置(102)是一個系統(tǒng),該系統(tǒng)包括易 失性存儲器和永久存儲器并被配置成服務(wù)來自一個或多個客戶端(100AU00M)的讀取請 求和/或?qū)懭胝埱蟆T摯鎯ρb置(102)的各種實施例在以下圖2A-2D中描述。
[0027] 參考圖1B,圖IB示出了其中客戶端(100AU00M)連接到網(wǎng)格組態(tài)(在圖IB中標 示為存儲裝置網(wǎng)格(104))中設(shè)置的多個存儲裝置(104A、104B、104C、104D)的系統(tǒng)。如圖 IB所示,該存儲裝置網(wǎng)格(104)被顯示在一個完全連接的網(wǎng)格組態(tài)中一即,存儲裝置網(wǎng)格 (104)中的所有存儲裝置(104A、104B、104C、104D)直接連接到存儲裝置網(wǎng)格(104)中的所 有其他存儲裝置(l〇4A、104B、104C、104D)。在本發(fā)明的一個實施例中,每一客戶端(100A、 100M)可以直接連接到存儲裝置網(wǎng)格(104)中的一個或多個存儲裝置(104A、104B、104C、 104D)。本領(lǐng)域技術(shù)人員會明白:存儲裝置網(wǎng)格可以使用其他網(wǎng)格組態(tài)(例如,部分連接的 網(wǎng)格)來實現(xiàn),而不背離本發(fā)明。
[0028] 參考圖1C,圖IC示出一系統(tǒng),在該系統(tǒng)中,客戶端(100AU00M)連接到按扇出 (fan-out)組態(tài)排列的多個存儲裝置(104A、104B、104C、104D)。在這種組態(tài)中,每一客戶端 (100A、100M)被連接到存儲裝置(104A、104B、104C、104D)中的一個或多個;然而,各個存儲 裝置(104A、104B、104C、104D)之間沒有通信。
[0029] 參考圖1D,圖ID示出了根據(jù)本發(fā)明的一個或多個實施例的客戶端。如圖ID所示, 客戶端(110)包括客戶端處理器(112)、客戶端存儲器(114)和客戶端交換機(116)。這些 組件中的每一個描述如下。
[0030] 在本發(fā)明的一個實施例中,客戶端處理器(112)是一組具有被配置成執(zhí)行指令的 單核或多核的電子電路。在本發(fā)明的一個實施例中,客戶端處理器(112)可以使用復(fù)雜指 令集體系(CISC)體系結(jié)構(gòu)或精簡指令集(RISC)體系結(jié)構(gòu)實現(xiàn)。在本發(fā)明的一個或多個實 施例中,客戶端處理器(112)包括根組件(如通過PCIe協(xié)議定義的)(未示出)。在本發(fā)明 的一個實施例中,如果客戶端(110)包括根組件(其可以被集成入客戶端處理器(112)),則 客戶端存儲器(114)經(jīng)由該根組件連接到客戶端處理器(112)?;蛘?,客戶端存儲器(114) 使用另一個點對點的連接機制直接連接到客戶端處理器(112)。在本發(fā)明的一個實施例 中,客戶端存儲器(114)對應(yīng)于任何易失性存儲器,包括,但不限于,動態(tài)隨機存取存儲器 (DRAM)、同步 DRAM、SDR SDRAM 和 DDR SDRAM。
[0031] 在本發(fā)明的一個實施例中,客戶端存儲器(114)包括下列一個或多個:客戶端處 理器的提交隊列和客戶處理器的完成隊列。在本發(fā)明的一個實施例中,該存儲裝置存儲器 包括客戶端處理器的一個或多個提交隊列,其通過架構(gòu)(fabric)對客戶端可見,且該客戶 端存儲器包括客戶端處理器的一個或多個完成隊列,其通過架構(gòu)對存儲裝置可見。在本發(fā) 明的一個實施例中,客戶端處理器的提交隊列被用于向客戶端處理器發(fā)送命令(例如,讀 取請求、寫入請求)。在本發(fā)明的一個實施例中,客戶端處理器的完成隊列被用于向該客戶 端處理器信令,告知它發(fā)出至另一實體的命令已被完成??梢允褂闷渌耐ㄖ獧C制來實現(xiàn) 本發(fā)明的諸實施例,而不背離本發(fā)明。
[0032] 在本發(fā)明的一個實施例中,客戶端交換機(116)只包括單個交換機。在本發(fā)明的 另一實施例中,客戶端交換機(116)包括多個互連的交換機。如果客戶端交換機(116)包 括多個交換機,則每一交換機可以連接到所有其他的交換機,可連接到交換架構(gòu)中的諸交 換機的一個子集,或者只連接到一個其他交換機。在本發(fā)明的一個實施例中,客戶端交換機 (116)中的每一交換機都是硬件和邏輯(例如,使用集成電路實現(xiàn))的組合(如通過交換機 架構(gòu)實現(xiàn)的協(xié)議定義的交換機架構(gòu)),其被配置為允許數(shù)據(jù)和消息在客戶端(110)和存儲 裝置(未示出)之間傳遞。
[0033] 在本發(fā)明的一個實施例中,當客戶端(100A、100M)實施下列協(xié)議中的一個或多 個:PCI、PCIe或PCI-X,時,客戶端交換機(116)是PCI交換機。
[0034] 在這種實施例中,客戶端交換機(116)包括許多端口,其中每一端口可被配置為 透明橋或非透明橋。實現(xiàn)為透明橋的端口允許根組件繼續(xù)發(fā)現(xiàn)連接(直接或間接)至該端 口的設(shè)備(可以是其他根組件、交換機、PCI橋或端點)。相反,當根組件遇到實現(xiàn)為非透明 橋的端口時,該根組件無法繼續(xù)發(fā)現(xiàn)連接到該端口的設(shè)備,相反該根組件將這樣的端口當 作端點處理。
[0035] 當端口被實現(xiàn)為非透明橋時,非透明橋的任一側(cè)上的設(shè)備只能使用郵箱系統(tǒng)和門 鈴中斷(由客戶端交換機實現(xiàn))進行通信。該門鈴中斷允許該非透明橋的一側(cè)上的處理器 發(fā)出一個中斷至該非透明橋的另一側(cè)上的處理器。此外,該郵箱系統(tǒng)包括一個或多個寄存 器,該寄存器對于交換機架構(gòu)的任一側(cè)上的處理器是可讀和可寫的。上述寄存器使客戶端 交換機的任一側(cè)上的處理器能夠跨該非透明橋傳遞控制和狀態(tài)信息。
[0036] 在本發(fā)明的一個實施例中,為了把PCI交換從非透明橋的一側(cè)上的設(shè)備發(fā)送至 該非透明橋的另一側(cè)上的設(shè)備,該PCI交換必須尋址到實現(xiàn)該非透明橋的端口。在接收 到該PCI交換時,客戶端切換執(zhí)行地址翻譯(使用直接地址翻譯機制或基于查找表的翻 譯機制)。隨后,由此獲得的地址被用于向該非透明橋的另一側(cè)上的合適設(shè)備路由分組 (packet)〇
[0037] 在本發(fā)明的一個實施例中,客戶端交換機(116)被配置成使得客戶端存儲器 (114)的至少一部分為存儲裝置直接可存取。換言之,客戶端交換機的一側(cè)上的存儲裝置可 以經(jīng)由客戶端交換機直接存取客戶端交換機的另一側(cè)上的客戶端存儲器。
[0038] 在本發(fā)明的一個實施例中,客戶端交換機(116)包括DM引擎(118)。在本發(fā)明的 一個實施例中,該DM引擎(118)可以由連接到客戶端交換機的客戶端處理器或存儲裝置 編程。如上面所討論的,客戶端交換機(116)被配置為使得客戶端存儲器(114)的至少一 部分對于存儲裝置或存儲模塊是可存取的。因此,DM引擎(118)可以被編程以從存儲裝 置可存取的客戶端存儲器的該部分中的地址讀取數(shù)據(jù)并且將這種數(shù)據(jù)的副本直接寫至存 儲裝置或存儲模塊中的存儲器。此外,DM引擎(118)可以被編程為從存儲裝置讀取數(shù)據(jù) 并且將這種數(shù)據(jù)的副本直接寫至存儲裝置可存取的客戶端存儲器的該部分。
[0039] 在本發(fā)明的一個實施例中,DM引擎(118)支持組播。在這種實施例中,存儲裝置 中的處理器(參見圖2A)可創(chuàng)建組播組,其中該組播組的每一成員對應(yīng)于存儲裝置上的存 儲器中的唯一目的地地址。該組播組的每一成員同一個描述符相關(guān)聯(lián),該描述符指定:(i) 目的地地址;(ii)源地址;(iii)傳遞大小字段;以及(iv)控制字段。每個描述符的源地 址保持不變,同時目的地地址對于每個描述符而改變。一旦創(chuàng)建了該組播組,通過靶向該組 播組地址的交換機的任何數(shù)據(jù)傳遞(包括由DM引擎啟動的傳遞)將該數(shù)據(jù)的相同副本置 于同該組播組相關(guān)聯(lián)的所有目的地端口。在本發(fā)明的一個實施例中,交換機并行處理所有 的組播組描述符。
[0040] 繼續(xù)圖ID的討論,本領(lǐng)域技術(shù)人員將會理解:雖然圖ID示出了位于客戶端(110) 中的客戶端交換機(116),但該客戶端交換機(116)可以位于客戶端外部,而不背離本發(fā) 明。此外,本領(lǐng)域技術(shù)人員將會理解 :DMA引擎(118)可以位于客戶端交換機(116)外部, 而不背離本發(fā)明。
[0041] 參考圖1E,圖IE示出一系統(tǒng),其中客戶端(100A、100M)經(jīng)由客戶端交換機(108) 連接至按照網(wǎng)格組態(tài)(圖IE中標示為存儲裝置網(wǎng)格(104))排列的多個存儲裝置(104A、 104B、104C、104D)。在圖IE所示的實施例中,每一客戶端(100A、100M)不包括其自己的客 戶端交換機-相反,所有的客戶端共享一個客戶端交換機(108)。如圖IE所示,存儲裝置 網(wǎng)格(104)按完全連接的網(wǎng)格組態(tài)加以顯示一即存儲裝置網(wǎng)格(104)中的所有存儲裝置 (104A、104B、104C、104D)直接連接到該存儲裝置網(wǎng)格(104)中的所有其他存儲裝置(104A、 104B、104C、104D)。在本發(fā)明的一個實施例中,客戶端交換機(108)可以直接連接到存儲裝 置網(wǎng)格(104)中的一個或多個存儲裝置(104A、104B、104C、104D)。本領(lǐng)域技術(shù)人員將會理 解:存儲裝置網(wǎng)格可以使用其他網(wǎng)格組態(tài)(例如,部分連接的網(wǎng)格)實現(xiàn),而不背離本發(fā)明。
[0042] 雖然未在圖IE中示出,但每一客戶端可包括自己的客戶端交換機(如圖ID所 示),但可以使用交換機架構(gòu)(定義見下文)連接到存儲裝置網(wǎng)格(104)。
[0043] 本領(lǐng)域的技術(shù)人員將會理解:雖然圖1A-1E示出了存儲裝置連接至有限數(shù)量的客 戶端,但存儲裝置可以連接到任何數(shù)量的客戶端,而不背離本發(fā)明。本領(lǐng)域技術(shù)人員將會理 解:雖然圖1A-1E示出了各種系統(tǒng)配置,但本發(fā)明并不限于上述的系統(tǒng)配置。此外,本領(lǐng)域 技術(shù)人員將會理解:客戶端(不管系統(tǒng)的配置如何)可以使用交換機架構(gòu)(未示出)連接 到(多個)存儲裝置(如下所述),而不背離本發(fā)明。
[0044] 圖2A-2D示出了根據(jù)本發(fā)明的一個或多個實施例的存儲裝置的實施例。參考圖 2A,存儲裝置包括控制模塊(200)和存儲模塊組(202)。這些組件中的每一個描述如下。在 一般情況下,控制模塊(200)被配置成管理來自一個或多個客戶端的讀取和寫入請求的服 務(wù)。特別是,該控制模塊被配置為經(jīng)由IOM(下面討論)從一個或多個客戶端接收請求、處 理該請求(該處理可包括發(fā)送請求到存儲模塊),以及在請求已被服務(wù)之后向客戶端提供 響應(yīng)。以下包括了有關(guān)控制模塊中的諸組件的附加細節(jié)。此外,下面參考圖4A-7C來描述 相對于服務(wù)讀取和寫入請求的控制模塊的操作。
[0045] 繼續(xù)圖2A的討論,在本發(fā)明的一個實施例中,該控制模塊(200)包括輸入/輸出 模塊(IOM) (204)、交換機架構(gòu)(206)、處理器(208)、存儲器(210)和,任選地,現(xiàn)場可編程門 陣列(FPGA) (212)。在本發(fā)明的一個實施例中,I0M(204)是在客戶端(圖1A-1E中的100A、 100M)和存儲裝置中的其他組件之間的物理接口。該IOM支持以下協(xié)議中的一個或多個: PCI、PCIe、PCI-X、以太網(wǎng)(包括,但不限于,在IEEE 802.3a-802.3bj下定義的各種標準)、 無限帶寬技術(shù)(Infiniband)和融合以太網(wǎng)(RoCE)上的遠程直接存儲器存取(RDMA)。本領(lǐng) 域技術(shù)人員將會理解:該IOM可使用除了以上列舉以外的其他協(xié)議實現(xiàn),而不背離本發(fā)明。
[0046] 繼續(xù)圖2A的討論,交換機架構(gòu)(206)僅包括單個交換機。在本發(fā)明的另一實施例 中,交換機架構(gòu)(206)包括多個互連的交換機。如果交換機架構(gòu)(206)包括多個交換機, 每一交換機可以連接到所有其他的交換機,可以連接到交換機架構(gòu)中的諸交換機的子集, 或可以僅連接到交換機架構(gòu)中的一個其他交換機。在本發(fā)明的一個實施例中,在交換機架 構(gòu)(206)中的每一交換機是硬件和邏輯(例如,使用集成電路實現(xiàn))的組合(如由交換機 架構(gòu)實現(xiàn)的協(xié)議定義交換機架構(gòu)),其被配置為在存儲裝置中將各種部件連接在一起并在 各種連接的組件之間路由分組(使用邏輯)。在本發(fā)明的一個實施例中,交換機架構(gòu)(206) 物理連接到IOM(204)、處理器(208)、存儲模塊組(202)和,如果存在,F(xiàn)PGA(212)。在本發(fā) 明的一個實施例中,控制模塊(200)中的所有組件間通信(除了在處理器(208)和存儲器 (210)之間)通過交換機架構(gòu)(206)。此外,該控制模塊(200)和存儲模塊組(202)之間的 所有通信通過該交換機架構(gòu)(206)。在本發(fā)明的一個實施例中,交換機架構(gòu)(206)采用PCI 協(xié)議(例如,PCI、PCIe、PCI-X或另一個PCI協(xié)議)實現(xiàn)。在這種實施例中,通過交換機架 構(gòu)(206)的所有通信使用相應(yīng)的PCI協(xié)議。
[0047] 在本發(fā)明的一個實施例中,如果交換機架構(gòu)實現(xiàn)PCI協(xié)議,交換機結(jié)構(gòu)(206)包括 用于處理器的端口(或者,更具體地說,用于集成在處理器(208)中的根組件或用于連接到 處理器的根組件的端口)、用于存儲模塊組(202)中的存儲模塊(214A、214N)(見圖3)的一 個或多個端口、用于FPGA(212)(如果存在的話)的端口以及用于I0M(204)的端口。在本 發(fā)明的一個或多個實施例中,上述端口中的每一個可以配置為透明橋或非透明橋(如以上 所討論的)。本領(lǐng)域技術(shù)人員將會理解:雖然已聯(lián)系PCI實現(xiàn)來描述交換機架構(gòu)(206),但 該交換機架構(gòu)(206)可以使用其他協(xié)議來實現(xiàn),而不背離本發(fā)明。
[0048] 在本發(fā)明的一個實施例中,交換機結(jié)構(gòu)(206)中的至少一個交換機被配置為實現(xiàn) 組播。更具體地說,在本發(fā)明的一個實施例中,處理器(208)被配置為產(chǎn)生組播組,其中該 組播組包括兩個或更多成員,每一成員指定存儲器(210)和/或存儲模塊(214A、214N)中 的一地址。當創(chuàng)建該組播組時,將該組播組同組播地址相關(guān)聯(lián)。為了實現(xiàn)組播,交換機架構(gòu) 中的至少一個交換機被配置為:當接收到將該組播地址指定為目的地地址的寫入時,交換 機被配置成為該組播組中的每一成員產(chǎn)生一個新的寫入并發(fā)出該寫入至存儲裝置中的合 適地址。在本發(fā)明的一個實施例中,通過將特定偏移量(offset)加到該組播地址來確定由 交換機產(chǎn)生的用于每一寫入的地址。
[0049] 繼續(xù)圖2A,處理器(208)是一組具有被配置成執(zhí)行指令的單核或多核的電子電 路。在本發(fā)明的一個實施例中,處理器(208)可以使用復(fù)雜指令集(CISC)體系結(jié)構(gòu)或精簡 指令集(RISC)體系結(jié)構(gòu)實現(xiàn)。在本發(fā)明的一個或多個實施例中,處理器(208)包括根組件 (如通過PCIe協(xié)議定義)。在本發(fā)明的一個實施例中,如果控制模塊(200)包括根組件(其 可以被集成入處理器(208)),則存儲器(210)經(jīng)由該根組件連接到處理器(208)?;蛘撸?儲器(210)使用另一個點對點連接機制直接連接到處理器(208)。在本發(fā)明的一個實施例 中,存儲器(210)對應(yīng)于任何易失性存儲器,包括,但不限于,動態(tài)隨機存取存儲器(DRAM)、 同步 DRAM、SDR SDRAM 和 DDR SDRAM。
[0050] 在本發(fā)明的一個實施例中,處理器(208)被配置為創(chuàng)建和更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu) (未不出),其中該存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)被存儲于存儲器(210)中。在本發(fā)明的一個實施例 中,存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)包括存儲模塊組中的邏輯地址與物理存儲地址之間的映射(直接或 間接)。在本發(fā)明的一個實施例中,邏輯地址是從客戶端的角度來看數(shù)據(jù)似乎駐留在此處 的地址。在本發(fā)明的一個實施例中,邏輯地址是(或包括)通過將散列函數(shù)(例如SHA-1、 MD-5等等)應(yīng)用于η元組所產(chǎn)生的散列值。在本發(fā)明的一個實施例中,該η元組是<對象 ID,偏移量ID>,其中在對象ID定義一文件且偏移量ID定義相對于文件的起始地址的位置。 在本發(fā)明的另一實施例中,η元組是<對象ID,偏移量ID,出生時間〉,其中出生時間對應(yīng)于 創(chuàng)建(使用對象ID標識)文件時的時間?;蛘撸壿嫷刂房砂ㄟ壿媽ο驣D和邏輯字節(jié) 地址,或邏輯對象ID和邏輯地址偏移量。在本發(fā)明的另一實施例中,邏輯地址包括對象ID 和偏移量ID。本領(lǐng)域技術(shù)人員將會理解:多個邏輯地址可被映射到單個物理地址且邏輯地 址不限于上述的實施例。
[0051] 在本發(fā)明的一個實施例中,物理地址可對應(yīng)于:(i)存儲器(210)中的位置,(ii) 在彎曲存儲器(vaulted memory)(例如圖3中的324)中的位置,或(iii)在固態(tài)存儲器模 塊(例如圖3中的330A)中的位置。在本發(fā)明的一個實施例中,如果存儲裝置中有數(shù)據(jù)的 多個副本,則存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)可將單個散列值映射至多個物理地址。
[0052] 在本發(fā)明的一個實施例中,存儲器(210)包括以下的一個或多個:用于處理器的 提交隊列、用于處理器的完成隊列、用于存儲裝置中的每一存儲模塊的提交隊列以及用于 存儲裝置中的每一存儲模塊的完成隊列。在本發(fā)明的一個實施例中,該用于處理器的提交 隊列被用于發(fā)送命令(例如,讀取請求和寫入請求)至處理器。在本發(fā)明的一個實施例中, 該用于處理器的完成隊列被用于向該處理器發(fā)信號,告知它向另一實體發(fā)出的命令已被完 成。用于存儲模塊的提交隊列和完成隊列以類似的方式運行。
[0053] 在本發(fā)明的一個實施例中,處理器(經(jīng)由交換機架構(gòu))被配置為卸下對FPGA(212) 的各種類型的處理。在本發(fā)明的一個實施例中,該FPGA(212)包括計算正被寫入至存儲模 塊的數(shù)據(jù)和/或正從存儲模塊讀取的數(shù)據(jù)的校驗和的功能。此外,F(xiàn)PGA(212)可以包括出 于用RAID方案(例如,RAID2-RAID 6)將數(shù)據(jù)存入存儲模塊的目的而計算P和/或Q的奇 偶信息的功能和/或執(zhí)行恢復(fù)使用RAID方案(例如,RAID2-RAID6)存儲的損壞數(shù)據(jù)所必 要的各種計算的功能。在本發(fā)明的一個實施例中,存儲模塊組(202)包括一個或多個存儲 模塊(214A、214N),其中每一個存儲模塊都被配置用于存儲數(shù)據(jù)。存儲模塊以下在圖3中加 以描述。
[0054] 在本發(fā)明的一個實施例中,處理器(208)被配置為編程系統(tǒng)中的一個或多個DMA 引擎。例如,處理器(208)被配置為編程客戶端交換機中的DMA引擎(參見圖ID)。處理 器(208)也可以被配置成編程存儲模塊中的DM引擎(參見圖3)。在本發(fā)明的一個實施例 中,編程客戶端交換機中的DM引擎可以包括創(chuàng)建組播組和為該組播組中的每一成員產(chǎn)生 描述符。
[0055] 轉(zhuǎn)向圖2B,圖2B示出了根據(jù)本發(fā)明的一個或多個實施例的存儲裝置。存儲裝置 包括控制模塊(216)和至少兩個存儲模塊組(236, 238)??刂颇K(216)包括交換機架 構(gòu)(234),其直接連接到IOM A(218)、I0M B(220)、處理器A(222)、處理器B(224)、(如果 存在的話)FPGA A (230)、(如果存在的話)FPGA B (232)、存儲模塊組A (236)中的存儲模塊 (2364,236沁以及存儲模塊組8(238)中的存儲模塊(238八,238沁。上述組件之間的所有通 信(除了在處理器A(222)和處理器B(224)之間)通過交換機架構(gòu)(234)。在本發(fā)明的一 個實施例中,控制模塊(216)內(nèi)的處理器(222, 224)能夠使用例如點對點互連技術(shù)(比如 英特爾⑩QuickPath互連)直接通信。本領(lǐng)域技術(shù)人員將會理解:其他的點對點通信機制 可以用于允許處理器(222, 224)之間的直接通信,而不背離本發(fā)明。
[0056] 繼續(xù)圖2B,在本發(fā)明的一個實施例中,控制模塊(216)基本上類似于圖2A中的控 制模塊(200)。在本發(fā)明的一個實施例中,交換機架構(gòu)(234)基本上類似于圖2A中的交換 機架構(gòu)(206)。本發(fā)明的一個實施例中,每一處理器(222,224)基本上類似于圖2A中的處 理器(208)。在本發(fā)明的一個實施例中,存儲器(226,228)基本類似于的圖2A中的存儲器 (210)。在本發(fā)明的一個實施例中,I0M(218,220)基本上類似于圖2A中的I0M(204)。在本 發(fā)明的一個實施例中,F(xiàn)PGA(230,232)基本上類似于圖2A中的FPGA(212)。最后,存儲模塊 組(236, 238)基本上類似于圖2A中的存儲模塊組(202)。
[0057] 在本發(fā)明的一個實施例中,控制模塊(216)中的兩個IOM (218, 220)使用于控制模 塊(216)的I/O帶寬加倍(相比具有單個IOM的控制模塊的I/O帶寬)。此外,第二IOM的 添加(或附加的Ι0Μ)增加了可以連接至給定控制模塊的客戶端的數(shù)量,以及通過擴展,可 以連接至存儲裝置的客戶端的數(shù)量。在本發(fā)明的一個實施例中,使用交換機架構(gòu)(234)來 處理各種連接的組件之間的通信(如上所述)允許處理器(222,224)中的每一個直接存取 (經(jīng)由交換機架構(gòu)(234))連接到交換機架構(gòu)(234)的所有FPGA (230, 232)以及所有存儲模 塊(236A,236N,238A,238N)。
[0058] 參考圖2C,圖2C示出了一存儲裝置,其包括連接(經(jīng)由交換機架構(gòu)(246))至存儲 模塊組(256, 258, 260, 262)中的多個存儲模塊(未示出)的控制模塊(240)。如圖2C所示, 控制模塊(240)包括兩個IOM (242, 244)、兩個處理器(248, 250)以及存儲器(252, 254)。在 本發(fā)明的一個實施例中,在控制模塊(240)中的所有組件可以經(jīng)由交換機架構(gòu)(246)進行 通信。此外,處理器(248, 250)可以使用交換機架構(gòu)(246)或直接連接(如圖2C所示)彼 此通信。在本發(fā)明的一個實施例中,控制模塊(240)內(nèi)的處理器(248,250)能夠使用例如 點對點互連技術(shù)(諸如英特^K?QuickPath互連)直接通信。本領(lǐng)域技術(shù)人員將會理解: 其他的點對點通信機制可以被用于允許處理器(248,250)之間的直接通信,而不背離本發(fā) 明。
[0059] 在本發(fā)明的一個實施例中,處理器A (248)被配置為主要處理與來自存儲模塊組A 和B (256, 258)的數(shù)據(jù)的存儲和檢索相關(guān)的請求,同時處理器B (250)被配置為主要處理與 來自存儲模塊組C和D (260, 262)的數(shù)據(jù)的存儲和檢索相關(guān)的請求。然而,處理器(248, 250) 被配置為(經(jīng)由交換機架構(gòu)(246))與所有的存儲模塊組(256,258,260,262)通信。這種 配置使控制模塊(240)能在處理器之間傳播I/O請求的處理和/或提供內(nèi)置的冗余度來處 理諸處理器之一發(fā)生故障的情況。
[0060] 繼續(xù)圖2C,在本發(fā)明的一個實施例中,該控制模塊(240)基本上類似于圖2A中的 控制模塊(200)。在本發(fā)明的一個實施例中,交換機架構(gòu)(246)基本上類似于圖2A中的交 換機架構(gòu)(206)。本發(fā)明的一個實施例中,每一處理器(248,250)基本上類似于圖2A中的 處理器(208)。在本發(fā)明的一個實施例中,存儲器(252,254)基本類似于圖2A中的存儲器 (210)。在本發(fā)明的一個實施例中,I0M(242,244)基本上類似于圖2A中的I0M(204)。最 后,存儲模塊組(256, 258, 260, 262)基本上類似于圖2A中的存儲模塊組(202)。
[0061] 參考圖2D,圖2D示出了一存儲裝置,其包括兩個控制模塊(264, 266)。每一控制 模塊包括 IOM (296, 298, 300, 302)、處理器(268, 270, 272, 274)、存儲器(276, 278, 280, 282) 和FPGA (如果存在的話)(288, 290, 292, 294)??刂颇K(264, 266)中的每一個包括交換機 架構(gòu)(284, 286),控制模塊內(nèi)的諸組件通過該交換機架構(gòu)(284, 286)進行通信。
[0062] 在本發(fā)明的一個實施例中,控制模塊內(nèi)的處理器(268, 270, 272, 274)可以使用例 如點對點互連技術(shù)(諸如:英特爾?QuickPath互連)直接彼此通信。本領(lǐng)域技術(shù)人員將會 理解:其他的點對點通信機制可以用于允許處理器(268, 270, 272, 274)之間的直接通信, 而不背離本發(fā)明。此外,控制模塊A中的處理器(268,270)可以經(jīng)由與控制模塊B中的交 換機架構(gòu)(286)的直接連接同控制模塊B中的諸組件進行通信。類似地,控制模塊B中的 處理器(272, 274)可以經(jīng)由與控制模塊A中的交換機架構(gòu)(284)的直接連接同控制模塊A 中的諸組件進行通信。
[0063] 在本發(fā)明的一個實施例中,每一控制模塊連接到各種存儲模塊(由存儲模塊組 (304,306,308,310)表示)。如圖2D所示,每一控制模塊可以與連接到控制模塊中的交換 機架構(gòu)的存儲模塊通信。此外,控制模塊A(264)中的處理器可以使用交換機架構(gòu)B(286) 與連接到控制模塊B (266)的存儲模塊進行通信。類似地,控制模塊B (266)中的處理器可 以使用交換機架構(gòu)A(284)與連接到控制模塊A (264)的存儲模塊進行通信。
[0064] 控制模塊之間的互連允許存儲控制來跨存儲裝置分配I/O負載,而無論哪個控制 模塊接收該I/O請求。此外,控制模塊的互連使存儲裝置能處理大量的I/O請求。此外,控 制模塊的互連在控制模塊(或其中的一個或多個組件)發(fā)生故障的情況下提供內(nèi)置的冗余 度。
[0065] 參考圖2B-2D,在本發(fā)明的一個或多個實施例中,存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)跨控制模塊中 的存儲器被鏡像(mirrored)。在這種情況下,控制模塊中的諸處理器發(fā)出必要的命令來更 新存儲裝置內(nèi)的所有存儲器,以使該存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)跨所有存儲器被鏡像。在這種方式 中,任何處理器可以使用自己的存儲器來確定數(shù)據(jù)在存儲裝置中的位置(如由η元組定義, 如以上討論的)。此功能允許任何處理器來服務(wù)有關(guān)存儲模塊內(nèi)的數(shù)據(jù)位置的I/O請求。 此外,通過鏡像該存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu),存儲裝置可以在存儲器之一發(fā)生故障時繼續(xù)工作。 [0066] 本領(lǐng)域技術(shù)人員將會理解:雖然圖2A-2D示出了連接到有限數(shù)量的存儲模塊的控 制模塊,但該控制模塊可以連接到任何數(shù)目的存儲模塊,而不背離本發(fā)明。本領(lǐng)域技術(shù)人員 將會理解:雖然圖2A-2D示出了存儲裝置的各種配置,但該存儲裝置可以使用其他配置來 實現(xiàn),而不背離本發(fā)明。
[0067] 圖3示出了根據(jù)本發(fā)明的一個或多個實施例的存儲模塊。存儲模塊(320)包括存 儲模塊控制器(322)、存儲器(324)以及一個或多個固態(tài)存儲器模塊(330Α,330Ν)。這些組 件中的每一個描述如下。
[0068] 在本發(fā)明的一個實施例中,存儲模塊控制器(322)被配置為接收從一個或多個控 制模塊讀取數(shù)據(jù)和/或?qū)懭霐?shù)據(jù)到一個或多個控制模塊的請求。此外,存儲模塊控制器 (322)被配置為使用存儲器(324)和/或固態(tài)存儲器模塊(330A,330N)來服務(wù)該讀取和寫 入請求。雖然圖3中未示出,存儲模塊控制器(322)可以包括DM引擎,其中該DM引擎被 配置為從存儲器(324)或從固態(tài)存儲器模塊(330A,330N)之一讀取數(shù)據(jù)并將該數(shù)據(jù)的副本 寫入到客戶端存儲器(圖ID中的114)的物理地址。此外,該DM引擎可以被配置為將來自 存儲器(324)的數(shù)據(jù)寫入至固態(tài)存儲器模塊中的一個或多個。在本發(fā)明的一個實施例中, DMA引擎被配置成由處理器(例如圖2A中的208)編程。本領(lǐng)域技術(shù)人員將會理解:存儲 模塊可以包括在存儲模塊控制器外部的DM引擎,而不背離本發(fā)明。
[0069] 在本發(fā)明的一個實施例中,存儲器(324)對應(yīng)于任何易失性存儲器,包括,但不限 于,動態(tài)隨機存取存儲器(DRAM)、同步DRAM、SDR SDRAM和DDR SDRAM。
[0070] 在本發(fā)明的一個實施例中,存儲器(324)可以在邏輯上或物理上劃分成彎曲存儲 器(326)和高速緩存(328)。在本發(fā)明的一個實施例中,存儲模塊控制器(322)被配置為: 在通知存儲模塊中的電源故障的情況下(或者存儲模塊可能損失電力的另一種情況下) 將彎曲存儲器(326)的全部內(nèi)容寫出至固態(tài)存儲器模塊(330A,330N)中的一個或一個以 上。在本發(fā)明的一個實施例中,存儲模塊控制器(322)被配置成:在通知電源故障的時間 和存儲模塊實際斷電的時間之間將彎曲存儲器(326)的全部內(nèi)容寫入至固態(tài)存儲器模塊 (330A,330N)中的一個或一個以上。相反,高速緩存(328)的內(nèi)容在電源故障的情況下(或 在存儲模塊可能損失電力的另一種情況下)是丟失的。
[0071] 在本發(fā)明的一個實施例中,該固態(tài)存儲器模塊對應(yīng)于任何使用固態(tài)存儲器存儲 持久性數(shù)據(jù)的數(shù)據(jù)存儲裝置。在本發(fā)明的一個實施例中,固態(tài)存儲器可以包括,但不限 于,NAND閃存、NOR Flash存儲器、磁隨機存取存儲器(M-RAM)、自旋磁隨機存取存儲器 (ST-MRAM)、相變存儲器(PCM)或任何其他被定義為非易失性存儲級存儲器(SCM)的存儲 器。
[0072] 在本發(fā)明的一個實施例中,下列的存儲位置是統(tǒng)一地址空間的一部分:(i)經(jīng)由 客戶端交換機可存取的客戶端存儲器的一部分,(ii)控制模塊中的存儲器,(iii)存儲模 塊中的存儲器以及(iv)固態(tài)存儲器模塊。因此,從存儲裝置中的處理器的角度來看,上述 存儲位置(在物理上分開時)出現(xiàn)作為物理地址的單個池(pool)。換言之,該處理器可以 發(fā)出針對存儲于該統(tǒng)一地址空間中的任何物理地址的數(shù)據(jù)的讀取和/或?qū)懭胝埱?。上述?儲位置可稱為使用統(tǒng)一地址空間可存取的存儲架構(gòu)。
[0073] 在本發(fā)明的一個實施例中,部分通過客戶端交換機中的非透明橋來創(chuàng)建統(tǒng)一地址 空間,允許控制模塊中的處理器"看見"該客戶端存儲器的一部分。因此,控制模塊中的處 理器可以在它可以"看見"的那部分客戶端存儲器中執(zhí)行讀取和/或?qū)懭胝埱蟆?br>
[0074] 圖4A示出了根據(jù)本發(fā)明的一個或多個實施例的存儲模塊。固態(tài)存儲器模塊(400) 包括一個或多個塊。在本發(fā)明的一個實施例中,塊是固態(tài)存儲器模塊(400)內(nèi)的最小可擦 除存儲單位。
[0075] 圖4B示出了根據(jù)本發(fā)明的一個或多個實施例的塊。更具體地,每一塊(402)包括 一或多個頁面。在本發(fā)明的一個實施例中,頁面是固態(tài)存儲器模塊中用于讀取和編程操作 (包括對頁面的初始寫入)的最小可尋址單位。在本發(fā)明的一個實施例中,重寫塊內(nèi)的頁面 要求整個塊被重寫。在本發(fā)明的一個實施例中,塊內(nèi)的每一頁面是碎片頁面(Frag Page) (參見圖4C)或者TOC頁面(參見圖4D)。
[0076] 圖4C示出了根據(jù)本發(fā)明的一個或多個實施例的碎片頁面。在本發(fā)明的一個實施 例中,該碎片頁面包括一個或多個碎片。在本發(fā)明的一個實施例中,碎片對應(yīng)于有限量的用 戶數(shù)據(jù)。此外,給定頁面內(nèi)的碎片可以是統(tǒng)一大小或者不統(tǒng)一大小。此外,給定頁面內(nèi)的碎 片可以是統(tǒng)一大小或者不統(tǒng)一大小。在本發(fā)明的一個實施例中,給定碎片可以小于頁面的 大小,可以正好是頁面的大小,或者可以超出一個或多個頁面。在本發(fā)明的一個實施例中, 碎片頁面僅包括碎片。在本發(fā)明的一個實施例中,每一碎片包括用戶數(shù)據(jù)(即,客戶端提供 的用于存儲在存儲裝置中的數(shù)據(jù))。出于描述的目的,術(shù)語"碎片"和"用戶數(shù)據(jù)"是可交換 地使用的。
[0077] 圖4D示出了根據(jù)本發(fā)明的一個或多個實施例的TOC頁面。在本發(fā)明的一個實施 例中,該TOC頁面(406)包括一個或多個TOC條目,其中每一 TOC條目包括用于給定碎片的 元數(shù)據(jù)。此外,該TOC頁面(406)可以包括對塊(402)中的另一 TOC頁面的引用。在本發(fā) 明的一個實施例中,TOC頁面僅包括TOC條目(以及,任選地,對塊中的另一 TOC頁面的引 用),但不包括任何碎片。在本發(fā)明的一個實施例中,每一 TOC條目對應(yīng)于塊(402)中的一 碎片(參見圖4C)。TOC條目僅僅對應(yīng)于塊內(nèi)的多個碎片。換言之,該TOC頁面與一塊相關(guān) 聯(lián)并僅包括用于該塊中的多個碎片的TOC條目。在本發(fā)明的一個實施例中,每一固態(tài)存儲 器模塊內(nèi)的每一塊中的沒有缺陷的最后頁面是TOC頁面。
[0078] 圖4E示出了根據(jù)本發(fā)明的一個或多個實施例的塊。更具體地,圖4E示出了塊 (408),它包括1'0(:頁面(410、412、414)和碎片頁面(416、418、422、420、424、426)。在本發(fā) 明的一個實施例中,塊(408)在概念上從"頂"向"底"填充。此外,一旦碎片頁面中的碎片 的TOC條目的累計大小等于頁面的大小,就產(chǎn)生和存儲TOC頁面。例如,轉(zhuǎn)到圖4E,碎片頁 面0 (416)和碎片頁面1 (418)存儲在塊(408)中。用于碎片頁面0 (416)和碎片頁面1 (418) 的多個碎片(未示出)的相應(yīng)TOC條目(未示出)的總累計大小等于該塊中頁面的大小。 因此,TOC頁面(414)被產(chǎn)生(使用對應(yīng)于塊中的碎片的TOC條目)并被存儲在塊(408) 中。碎片頁面2(420)隨后被寫入至塊(408)。因為對應(yīng)于碎片頁面2(420)中的多個碎片 (未示出)的TOC條目的總累計大小等于塊中頁面的大小,所以TOC頁面(412)被創(chuàng)建并被 存儲在塊(408)中。此外,因為塊(408)中已經(jīng)有TOC頁面,因此TOC頁面(412)也包括對 TOC頁面(414)的引用。
[0079] 重復(fù)該過程直到在塊(408)中只留有一個頁面待填充。在這一點,TOC頁面(410) 被創(chuàng)建并被存儲在塊(408)的最后頁面中。本領(lǐng)域技術(shù)人員將會理解:T0C頁面(410) 中的TOC條目的總累計大小可以小于頁面大小。在這種情況中,TOC頁面可以包括填充 (padding)以解決TOC條目的累計大小和頁面大小之間的差。最后,因為塊(408)中有其他 TOC頁面,TOC頁面(410)包括對一個其他TOC頁面(412)的引用。
[0080] 如圖4E所示,將TOC頁面從該塊的"底"鏈接到頁面的"頂",以便可以通過跟隨來 自該TOC頁面下面的TOC頁面的引用獲得TOC頁面。例如,TOC頁面(412)可以用TOC頁 面(410)中的引用來存取。
[0081] 本領(lǐng)域技術(shù)人員將會理解:雖然塊(408)僅包括碎片頁面和TOC頁面,但塊(408) 可以包括除了碎片頁面和TOC頁面之外的其他頁面(例如,包括奇偶校驗數(shù)據(jù)的頁面),而 不背離本發(fā)明。這種其他頁面可位于塊內(nèi),且根據(jù)實施方式在TOC頁面和碎片頁面之間交 叉存取。
[0082] 圖4F示出了根據(jù)本發(fā)明的一個或多個實施例的TOC條目。在本發(fā)明的一個實施例 中,每一 TOC條目(430)包括用于碎片的元數(shù)據(jù)(且特別是片段中的用戶數(shù)據(jù)),并可以包 括以下字段中的一個或多個:(i)對象ID (432),其標識正被存儲的對象(例如文件);(ii) 出生時間(434),其指定對應(yīng)于TOC條目的碎片被寫入至彎曲存儲器的時間(例如,控制模 塊中的處理器的處理器時鐘值);(iii)偏移量ID(436),其相對于對象(由對象ID標識) 開始而標識碎片中的用戶數(shù)據(jù)的起始點;(iv)片段(fragment)大?。?38),其指定了碎片 的大??;(V)頁面ID(440),其標識其中存儲了碎片的塊中的頁面;(vi)字節(jié)(442),其標識 頁面(由頁面ID標識)中碎片的起始位置;(vii)邏輯長度(444),其指定碎片中的用戶數(shù) 據(jù)的未壓縮長度;(vii)類型(type) (446),其指定碎片中的用戶數(shù)據(jù)的類型(例如,壞頁面 (badpage)、數(shù)據(jù)、快照、池);(ix)種類(kind) (448),其指定該碎片是有效用戶數(shù)據(jù)還是裁 減(trim)(其表明在固態(tài)存儲器模塊執(zhí)行無用存儲單元收集(garbage collection)時可 以擦除該碎片);以及(ix)保留(450),其對應(yīng)于可用于存儲其他用戶數(shù)據(jù)的TOC條目中的 空間。
[0083] 在本發(fā)明的一個實施例中,〈對象ID,偏移量ID>或〈對象ID,偏移量ID,出生時 間〉標識客戶端提供的用戶數(shù)據(jù)。此外,〈對象ID,偏移量ID>或〈對象ID,偏移量ID,出 生時間〉由客戶端用來標識特定用戶數(shù)據(jù),同時存儲裝置使用物理地址來標識存儲裝置內(nèi) 的用戶數(shù)據(jù)。本領(lǐng)域技術(shù)人員將會理解:客戶端可提供邏輯地址來代替對象ID和偏移量 ID。
[0084] 本領(lǐng)域技術(shù)人員將會理解:TOC條目可以包括與圖4F所示的相比更多或更少的字 段,而不背離本發(fā)明。此外,TOC條目中的字段可以按照不同的順序和/或組合來安排,而 不背離本發(fā)明。此外,雖然在圖4F所示的TOC條目中的字段看起來都是相同的大小,但TOC 條目中的各字段的大小可以是不統(tǒng)一的,其中任何給定字段的大小根據(jù)TOC條目的實現(xiàn)方 式而變化。
[0085] 圖5示出了根據(jù)本發(fā)明的一個或多個實施例的數(shù)據(jù)結(jié)構(gòu)。如以上所討論的,控制 模塊中的存儲器包括存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。在本發(fā)明的一個實施例中,該存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu) 包括η元組(例如,〈對象ID,偏移量ID>(500),〈對象ID,偏移量ID,出生時間 >(未示 出))和固態(tài)存儲器模塊中的碎片的物理地址(502)之間的映射。在本發(fā)明的一個實施例 中,該映射是η元組的散列和物理地址之間的映射。在本發(fā)明的一個實施例中,碎片的物理 地址被定義為以下的η元組:〈存儲模塊,通道,芯片使能,LUN,平面,塊,頁面,字節(jié)〉。
[0086] 在本發(fā)明的一個實施例中,該控制模塊還跟蹤每個塊(504)的TOC條目(506)的 數(shù)量。更具體地說,每次碎片被寫入至拱形存儲體時,就創(chuàng)建用于該碎片的TOC條目??刂?模塊跟蹤新創(chuàng)建的TOC條目與哪個塊相關(guān)聯(lián),并使用該信息來產(chǎn)生TOC頁面。例如,控制模 塊使用該信息決定與給定塊相關(guān)聯(lián)的所有未被寫入到TOC頁面的TOC條目的累計大小是否 等于塊中的頁面大小。如果與給定塊相關(guān)聯(lián)的所有未被寫入到TOC頁面的TOC條目的累計 大小等于塊中的頁面大小,則控制模塊可以使用上述條目產(chǎn)生TOC頁面并發(fā)起將該TOC頁 面寫入到存儲模塊。
[0087] 圖6A-6C示出了根據(jù)本發(fā)明的一個或多個實施例的流程圖。更具體地說,圖6A-6C 示出根據(jù)本發(fā)明的一個或多個實施例的用于將用戶數(shù)據(jù)存儲于存儲裝置的方法。雖然流程 圖中的各個步驟被順序地呈現(xiàn)和描述,但本領(lǐng)域的普通技術(shù)人員將會理解:這些步驟中的 一些或者全部都可以按不同的次序執(zhí)行,可以被組合或省略,且一些或所有的步驟可以并 行執(zhí)行。在本發(fā)明的一個實施例中,圖6A所示的步驟可以同圖6B中所示的步驟和圖6C中 所示的步驟并行執(zhí)行。另外,圖6B中所示的步驟可以同圖6C中所示的步驟并行執(zhí)行。
[0088] 參考圖6A,在步驟600中,客戶端將寫入命令(寫入請求)寫至控制模塊(圖2A 中的208)中的處理器的提交隊列(SQ)。在本發(fā)明的一個實施例中,該寫入命令指定客戶端 存儲器中的用戶數(shù)據(jù)的邏輯地址(也可稱為"源地址")。在本發(fā)明的一個實施例中,該寫 入命令可以使用〈對象ID,偏移量ID>指定用戶數(shù)據(jù)。在本發(fā)明的一個實施例中,寫入命令 在到達處理器的SQ之前至少通過客戶端交換機和交換機架構(gòu)。
[0089] 在步驟602中,客戶端將新的SQ尾部寫至SQ尾部門鈴寄存器。在本發(fā)明的一個 實施例中,通過寫至SQ尾部門鈴寄存器,客戶端通知處理器在其SQ中有新的命令要處理。
[0090] 在步驟604中,處理器獲得來自SQ的寫入命令。在步驟606中,處理器確定要將 用戶數(shù)據(jù)(作為碎片的一部分)要寫至的(多個)物理地址。在本發(fā)明的一個實施例中, (多個)物理地址對應(yīng)于固態(tài)存儲器模塊中的位置。在本發(fā)明的一個實施例中,處理器選擇 在這兩個物理地址中寫入用戶數(shù)據(jù)的副本,其中該物理地址中的每一個是在分開的固態(tài)存 儲器模塊中。
[0091] 在步驟608中,處理器編程DM引擎以發(fā)出一寫入至一組播地址。在本發(fā)明的一 個實施例中,該組播地址與組播組相關(guān)聯(lián),其中該組播組指定控制模塊中的存儲器中的第 一存儲器位置、第一彎曲存儲器中的第二存儲器位置以及第二彎曲存儲器中的第三存儲器 位置。在本發(fā)明的一個實施例中,第一彎曲存儲器與固態(tài)存儲器模塊位于同一存儲模塊中, 固態(tài)存儲器模塊包括由處理器指定的物理地址。在本發(fā)明的一個實施例中,第二彎曲存儲 器按類似的方式確定。在本發(fā)明的一個實施例中,有一個在步驟606中為處理器所標識的 每一物理地址選擇的彎曲存儲器位置。
[0092] 在步驟610中,DM引擎從客戶端存儲器中的源地址讀取用戶數(shù)據(jù),并將該數(shù)據(jù)寫 入到組播地址,如由控制模塊所引導的。在本發(fā)明的一個實施例中,交換機架構(gòu)中的交換機 與組播地址相關(guān)聯(lián)。在收到該地址時,交換機對該組播地址進行必要翻譯,以獲得三個地 址一上述每一個存儲器位置各一個。隨后,交換機發(fā)送用戶數(shù)據(jù)的副本至該三個存儲器位 置。本領(lǐng)域技術(shù)人員將會理解:實現(xiàn)組播的特定交換機可以基于交換機架構(gòu)的實現(xiàn)方式而 變化。在這個實施例中,在客戶端和存儲裝置之間只發(fā)出一個寫入。
[0093] 在本發(fā)明的另一實施例中,在步驟608中,處理器編程DMA引擎以并行發(fā)出三個寫 入請求一上述每一存儲器位置各一個。在這個實施例中,在步驟610中,DM引擎并行發(fā) 出三個寫入請求。在這個實施例中,客戶端和存儲裝置之間發(fā)出三個寫入。
[0094] 繼續(xù)圖6A,在步驟612中,為彎曲存儲器中存儲的用戶數(shù)據(jù)的每一副本創(chuàng)建TOC條 目。另外,每一 TOC條目中指定的頁面和字節(jié)對應(yīng)于在步驟606中標識的相應(yīng)物理地址的 頁面和字節(jié)部分。因此,雖然在創(chuàng)建該相應(yīng)TOC條目時該碎片不被寫至固態(tài)存儲器模塊中 的物理地址,但該碎片(作為碎片頁面的一部分)意圖在稍后的時間點被寫至該物理地址。 如上面所討論的,每個TOC條目都被存儲在TOC頁面中,且該TOC頁面最終被寫入至固態(tài)存 儲器模塊。然而,在創(chuàng)建TOC頁面之前,TOC條目被創(chuàng)建并被暫時存儲在控制模塊中的存儲 器中并被存儲在固態(tài)存儲模塊之一上的彎曲存儲器中。
[0095] 繼續(xù)圖6A,在步驟614中,步驟612中所創(chuàng)建的TOC條目被存入彎曲存儲器中。更 具體地說,每一 TOC條目被存儲在存儲模塊的彎曲存儲器中,并包括相應(yīng)的碎片將在稍后 的時間點被寫入其中的物理地址。
[0096] 在步驟616中,處理器更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu),以反映用戶數(shù)據(jù)的三個副本被存 儲在存儲裝置中。該處理器還可更新該數(shù)據(jù)結(jié)構(gòu),其跟蹤每個塊的TOC條目(參見圖5)。 在步驟618中,處理器將SQ標識符(其標識處理器的SQ)和寫入命令標識符(其標識客戶 端向處理器發(fā)出的特定寫入命令)寫入至客戶端的完成隊列(CQ)。
[0097] 在步驟620中,處理器產(chǎn)生用于客戶端處理器的中斷。在本發(fā)明的一個實施例中, 處理器使用由非透明橋提供的門鈴中斷以發(fā)出一中斷至客戶端處理器。在步驟622中,客 戶端處理其CQ中的數(shù)據(jù)。在這個階段,客戶端已被通知該寫入請求已被服務(wù)。在步驟624 中,一旦客戶端已處理在完成隊列頭部處的數(shù)據(jù),則該客戶端將新的CQ頭部寫入至CQ頭部 門鈴。這向處理器預(yù)示CQ中的下一個位置要用于在未來給客戶的通知。
[0098] 參考圖6B,在步驟626中,控制模塊中的處理器發(fā)起將來自彎曲存儲器的用戶數(shù) 據(jù)的副本寫至步驟608中標識的物理地址。在本發(fā)明的一個實施例中,控制模塊中的處理 器編程存儲模塊控制器中的DM引擎以從彎曲存儲器讀取用戶數(shù)據(jù)并將該用戶數(shù)據(jù)的副 本寫入至固態(tài)存儲器模塊中的物理地址。如上所述,要將用戶數(shù)據(jù)的副本寫入其中的物理 地址是先前在步驟606中由處理器確定的物理地址。
[0099] 在步驟628中,緊接著步驟626,控制模塊中的處理器請求移除彎曲存儲器中的用 戶數(shù)據(jù)的與步驟626中被寫入至固態(tài)存儲器模塊的用戶數(shù)據(jù)相對應(yīng)的全部副本。在步驟 630中,通過將用戶數(shù)據(jù)的副本包括在其各自彎曲存儲器中(在步驟626中寫入)的每一個 存儲模塊,將移除確認發(fā)送至控制模塊中的處理器。
[0100] 參考圖6C,圖6C示出了每次創(chuàng)建TOC條目時執(zhí)行的方法。在步驟632中,確定塊 中是否剩余有一個以上的空白頁。換言之,確定用戶數(shù)據(jù)是否已被寫入到除了塊中的最后 頁面之外的所有其它頁面。如果塊中剩余有一個以上的空白頁,該過程行進至步驟636 ;否 則該過程行進至步驟634。正如上面所討論的,如果只有一個空白頁面在要寫入用戶數(shù)據(jù)的 塊中,則TOC頁面必須被寫入至該塊的最后一個頁面。
[0101] 在步驟634中,確定與塊(其未被寫入到塊中的TOC頁面)相關(guān)聯(lián)的TOC條目的 累積大小是否大于或等于頁面大小。如果與該塊(其未被寫入到塊中的TOC頁面)相關(guān)聯(lián) 的TOC條目的累積大小大于或等于頁面大小,則該過程行進到步驟636 ;否則該過程結(jié)束。
[0102] 在步驟636中,將用于塊(其未被寫入到塊中的TOC頁面)的TOC條目結(jié)合,以創(chuàng) 建TOC頁面。在本發(fā)明的一個實施例中,如果要寫入用戶數(shù)據(jù)的塊中只有一個空白頁面,則 這種情況下創(chuàng)建的TOC頁面可包括填充(如上所述)。在步驟638中,確定該塊是否包括另 一個TOC頁面。如果該塊包括另一個TOC頁面,則該過程行進到步驟640 ;否則該過程行進 到步驟642。在步驟640中,對塊中最近存儲的TOC頁面的引用被包含在步驟636中創(chuàng)建的 TOC頁面中(例如,圖4E中的TOC頁面(410)引用TOC頁面(412))。
[0103] 在步驟642中,該處理器發(fā)起將TOC頁面寫入至固態(tài)存儲器模塊。更具體地說,由 處理器編程的DM引擎將TOC頁面的副本寫入至固態(tài)存儲器模塊中的包括與TOC頁面中的 TOC條目相對應(yīng)的碎片的塊。
[0104] 在步驟644中,處理器請求包括這樣的TOC條目的所有存儲模塊:這些TOC條目被 包含于在步驟642中被寫入至固態(tài)存儲器模塊的TOC頁面中,以便從它們各自的彎曲存儲 器中移除這種TOC條目。在步驟646中,處理器從存儲模塊接收上述TOC條目已被移除的 確認。
[0105] 圖7A-7E示出根據(jù)本發(fā)明的一個或多個實施例的將用戶數(shù)據(jù)存入存儲裝置的示 例。該示例并非旨在限制本發(fā)明的范圍。
[0106] 轉(zhuǎn)向圖7A,考慮一種情況,其中客戶端(700)發(fā)出將用戶數(shù)據(jù)(由黑色圓圈標注) 寫至存儲裝置的請求。響應(yīng)于該請求,控制模塊(704)中的處理器(714)確定:用戶數(shù)據(jù)的 第一副本應(yīng)被寫至存儲模塊A(718)中的固態(tài)存儲器模塊A(726)中的第一物理位置,且用 戶數(shù)據(jù)的第二副本應(yīng)被寫至存儲模塊B (720)中的固態(tài)存儲器模塊B (728)中的第二物理位 置。
[0107] 處理器(714)在接收到該寫入請求之前創(chuàng)建具有三個成員的組播組。第一成員具 有彎曲存儲器A(722)中的目的地地址,第二成員具有彎曲存儲器B(724)中的目的地地址, 且第三成員具有存儲器(712)中的目的地地址。處理器(714)隨后編程交換機架構(gòu)(716) 中的交換機(未示出)以實現(xiàn)該組播組。
[0108] DMA引擎繼續(xù)發(fā)出一寫入至與該組播組相關(guān)聯(lián)的組播地址。該寫入被發(fā)送到交換 機架構(gòu)并最終到達實現(xiàn)該組播組的交換機(未示出)。隨后,該交換機創(chuàng)建三個寫入(每一 個都指向由組播組指定的一個目的地)并將這些寫入發(fā)出至這些目標存儲器位置。在本發(fā) 明的一個實施例中,這三個寫入是并行發(fā)生的。
[0109] 要在各種目的地地址處被寫入的碎片經(jīng)過交換機架構(gòu)(716)。一旦這些寫入完成, 該存儲裝置中就會有用戶數(shù)據(jù)的三份副本。一旦這些寫入完成,更新存儲器(712)中的存 儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)(未示出)以反映出用戶數(shù)據(jù)已被存入存儲裝置內(nèi)的三個位置。此外,向 客戶端(700)通知這些寫入已完成。
[0110] 參考圖7B,一旦這些碎片都被寫入至彎曲存儲器,處理器就在存儲器(712)中 為彎曲存儲器中存儲的每一碎片產(chǎn)生一 TOC條目(TE 1,TE 2)。TE 1是來自彎曲存儲器 A(722)中存儲的碎片的TOC條目,且TE2是用于彎曲存儲器B(724)中存儲的碎片的TOC條 目。隨后,處理器(經(jīng)由DMA引擎,未示出)將TE 1的副本寫至彎曲存儲器A(722)并將TE 2的副本寫至彎曲存儲器B (724)。正如上面所討論的,在這一階段,TOC條目(TE 1和TE 2)被暫時存儲在上述的彎曲存儲器中,直到它們被添加到TOC頁面并被寫入到合適的固態(tài) 存儲器模塊。
[0111] 此外,獨立于存儲裝置的操作,客戶端(700)可以將用戶數(shù)據(jù)(已經(jīng)被寫入存儲裝 置)從客戶端存儲器(708)移除。
[0112] 參考圖7C,在稍后的某一時間點,處理器(714)發(fā)出一請求到存儲模塊A(718),以 將當前在彎曲存儲器A(722)中的用戶數(shù)據(jù)的副本寫入至固態(tài)存儲器模塊(726)中的物理 地址。響應(yīng)于該請求,存儲模塊控制器(未示出)將彎曲存儲器A(722)中的用戶數(shù)據(jù)的副 本寫入至固態(tài)存儲器模塊A(726)。一旦該寫入完成,就通知處理器(714)。處理器(714) 可在接收到來自存儲模塊A(718)的通知后更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
[0113] 參考圖7D,在稍后的某一時間點,處理器(714)確定TE 1和用于同一塊(即,其中 存儲有對應(yīng)于TE 1的碎片的塊)中的碎片的其他TOC條目(未示出)的累計總大小等于 頁面大小。基于該確定,處理器創(chuàng)建TOC頁面,且隨后(經(jīng)由DMA引擎(未示出))將TOC 頁面寫入至固態(tài)存儲器模塊中包括與TE 1相對應(yīng)的碎片的塊(未示出)。
[0114] 參考圖7E,在稍后的某一時間點,一旦碎片已被寫入固態(tài)存儲器模塊A,處理器 (714)發(fā)出一請求至包括彎曲存儲器中的用戶數(shù)據(jù)的副本的所有存儲模塊,以將該用戶數(shù) 據(jù)的副本從它們各自的彎曲存儲器中移除。此外,一旦TOC頁面已被寫入固態(tài)存儲器模塊 A,處理器(714)發(fā)出一請求至包括前述TOC頁面中寫入的任何TOC條目的副本的所有存儲 模塊,以從它們各自的彎曲存儲器中移除這種TOC條目。當這些請求完成時,存儲模塊的每 一個通知控制模塊。圖7E示出在所有存儲模塊已完成上述請求后的系統(tǒng)狀態(tài)。在接收到來 自存儲模塊的告知彎曲存儲器中的用戶數(shù)據(jù)的所有副本已被移除的通知后,處理器(714) 可更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
[0115] 在本發(fā)明的一個或多個實施例中,為用戶數(shù)據(jù)的每一副本創(chuàng)建TOC條目,且該TOC 條目被存儲在彎曲存儲器中,以便在TOC條目之一損壞、丟失或者其他不可用的情況下可 以存取用戶數(shù)據(jù)的每一副本。此外,在發(fā)生電力故障的情況下,彎曲存儲器內(nèi)的所有TOC條 目都被寫入到相應(yīng)的固態(tài)存儲器模塊。此外,對應(yīng)于前述TOC條目的碎片被寫入到在客戶 端的寫入請求被處理時處理器原始確定的物理地址。
[0116] 圖8示出了根據(jù)本發(fā)明的一個或多個實施例的流程圖。更具體地,圖8示出了根 據(jù)本發(fā)明的一個或多個實施例的一種產(chǎn)生存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)的方法。雖然流程圖中的各個 步驟按照順序被呈現(xiàn)和描述,但本領(lǐng)域的普通技術(shù)人員將會理解:一些或所有的步驟都可 以按不同的次序執(zhí)行,可以被組合或省略,且一些或所有的步驟可以并行執(zhí)行。
[0117] 在步驟800中,選擇一塊。在步驟802中,獲得該塊中的最后頁面。例如,該處理 器讀取最后頁面的內(nèi)容。如以上所討論的,固態(tài)存儲模塊中的每個塊的最后頁面是TOC頁 面。在步驟804中,TOC條目是從TOC頁面中提取的。
[0118] 在步驟806中,步驟804中獲得的每一 TOC條目都被處理以填充存儲器內(nèi)數(shù)據(jù)結(jié) 構(gòu)。更具體地說,處理每一 TOC條目可包括以下的一個或多個:(i)從TOC條目中提取頁面 ID和字節(jié)信息;(ii)結(jié)合(i)中的信息和〈存儲模塊,通道,芯片使能,LUN,平面,塊〉,以 獲得物理地址;(iii)從TOC條目提取對象ID和偏移量ID(且可選的出生時間);(iv)將 散列函數(shù)應(yīng)用于〈對象ID,偏移量ID> (或,任選的,〈對象ID,偏移量ID,出生時間 >),以 產(chǎn)生一個散列值;以及(V)用散列值和物理地址的映射填充存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
[0119] 在本發(fā)明的一個實施例中,處理器已經(jīng)包括關(guān)于〈存儲模塊,通道,芯片使能, LUN,平面,塊〉的信息,因為處理器需要這個信息來獲得塊的最后頁面。在本發(fā)明的一個實 施例中,處理器可以(i)使用TOC條目中的類型字段來確定該碎片是否在壞頁面中。如果該 碎片被存儲在壞頁面中,處理器可以不產(chǎn)生用于TOC條目的存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)中的映射。
[0120] 在步驟808中,一旦TOC頁面中的所有TOC條目已被處理,確定TOC頁面是否包括 對塊(即,步驟800中選擇的塊)中的另一個TOC頁面的引用。如果TOC頁面包含對該塊 中的另一個TOC頁面的引用,則該過程行進到步驟810 ;否則該過程結(jié)束。在步驟810中, 獲得引用的TOC頁面。在步驟812中,TOC條目是從TOC頁面中提取的。然后,該過程行進 到步驟806。
[0121] 在本發(fā)明的一個實施例中,在啟動系統(tǒng)的時候,圖8中的方法可以對存儲裝置內(nèi) 的所有塊(或塊的子集)并行執(zhí)行。緊接著該處理,在將新的用戶數(shù)據(jù)寫入到存儲裝置時, 所得到的存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)可以由處理器更新。
[0122] 本領(lǐng)域技術(shù)人員將會理解:雖然已相對于被保留作為TOC頁面的每一塊中的最 后頁面描述了本發(fā)明,但本發(fā)明的實施例也可以通過設(shè)置塊中的另一個頁面作為經(jīng)保留的 TOC頁面實施,而不背離本發(fā)明。
[0123] 在本發(fā)明的一個實施例中,在對固態(tài)存儲器模塊中存儲的任何數(shù)據(jù)進行的任何操 作(例如,讀取操作、寫入操作和/或擦除操作)之前產(chǎn)生存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
[0124] 本發(fā)明的一個或多個實施例提供一種系統(tǒng)和方法,其中存儲裝置中存儲的所有用 戶數(shù)據(jù)是與元數(shù)據(jù)共處的。在這種方式中,存儲裝置中存儲的所有用戶數(shù)據(jù)是自描述的。通 過根據(jù)本發(fā)明的各種實施例來安排用戶數(shù)據(jù)和相應(yīng)的元數(shù)據(jù),可以更好地保護存儲裝置, 應(yīng)對給定固態(tài)存儲器模塊(或其子集)的故障。換句話說,如果給定固態(tài)存儲器模塊(或 其子集)故障,則該系統(tǒng)中的其他固態(tài)存儲器模塊中的用戶數(shù)據(jù)仍可存取,因為存取其他 固態(tài)存儲器模塊中的用戶數(shù)據(jù)所需的元數(shù)據(jù)本身就位于其他固態(tài)存儲器模塊中。
[0125] 進一步,本發(fā)明的實施例使能在存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)的建立,其允許控制模塊在單 個查找步驟中存取用戶數(shù)據(jù)。換言之,控制模塊可使用存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)來直接確定存儲 裝置中的用戶數(shù)據(jù)的(多個)物理地址。使用此信息,控制模塊能夠直接存取用戶數(shù)據(jù)而 不需要為了獲取用戶數(shù)據(jù)而通過任何中間元數(shù)據(jù)層次。
[0126] 本發(fā)明的一個或多個實施例可以使用由系統(tǒng)中的一個或多個處理器執(zhí)行的指令 實現(xiàn)。另外,這種指令可對應(yīng)于存儲在一個或多個非暫時性計算機可讀介質(zhì)上的計算機可 讀指令。
[0127] 雖然已相對有限數(shù)量的實施例來描述本發(fā)明,但本領(lǐng)域技術(shù)人員,受益于該公開 內(nèi)容,將會理解:也可設(shè)計不背離這里所公開的本發(fā)明的范圍的其它實施例。因此,本發(fā)明 的范圍應(yīng)僅由所附的權(quán)利要求書限定。
【權(quán)利要求】
1. 一種用于存儲數(shù)據(jù)的方法,包括: 接收將第一數(shù)據(jù)寫至永久存儲器的請求,其中所述第一數(shù)據(jù)是用第一邏輯地址定義 的; 確定所述永久存儲器中的第一物理地址,其中所述第一物理地址包括第一塊ID和第 一子塊ID ; 將所述第一數(shù)據(jù)寫至所述第一物理地址; 產(chǎn)生內(nèi)容條目(TE)的第一表格,其包括所述第一邏輯地址和所述第一子塊ID,其中所 述第一 TE不被存儲于由所述第一子塊ID標識的子塊中;以及 將所述第一 TE寫至所述永久存儲器中的第二物理地址,其中所述第二物理地址包括 所述第一塊ID和第二子塊ID,其中第二子塊對應(yīng)于所述第二子塊ID,且其中所述第二子塊 位于同所述第一塊ID相對應(yīng)的第一塊內(nèi),且其中由所述第二子塊ID標識的子塊不包括所 述第一數(shù)據(jù)。
2. 如權(quán)利要求1所述的方法,進一步包括: 接收將第二數(shù)據(jù)寫至所述永久存儲器的請求,其中所述第二數(shù)據(jù)是用第二邏輯地址定 義的; 確定所述永久存儲器中的第三物理地址,其中所述第三物理地址包括所述第一塊ID 和第三子塊ID ; 將所述第二數(shù)據(jù)寫至所述第三物理地址; 產(chǎn)生第二TE,所述第二TE包括所述第二邏輯地址和所述第三子塊ID,其中所述第二TE 不被存儲于由所述第三子塊ID標識的子塊中; 將所述第二TE寫至所述永久存儲器中的第四物理地址,其中所述第四物理地址包括 所述第一塊ID和第四子塊ID,其中第四子塊對應(yīng)于所述第四子塊ID,且其中所述第四子塊 位于所述第一塊內(nèi),且其中由所述第四子塊ID標識的子塊不包括所述第一數(shù)據(jù)。
3. 如權(quán)利要求1所述的方法,其特征在于,所述永久存儲器是固態(tài)存儲器,且其中所述 第一塊是NAND塊,且所述第一子塊是NAND頁面。
4. 如權(quán)利要求1所述的方法,其特征在于,所述第四子塊包括對所述第二子塊的引用。
5. -種用于存儲數(shù)據(jù)的方法,包括: 接收將第一數(shù)據(jù)寫至永久存儲器的請求,其中所述第一數(shù)據(jù)是用第一邏輯地址定義 的; 確定所述永久存儲器中的第一物理地址,其中所述第一物理地址包括第一塊ID和第 一頁面ID ; 將包含所述第一數(shù)據(jù)的副本的第一碎片寫至所述第一物理地址; 產(chǎn)生內(nèi)容條目(TE)的第一表格,其包括所述第一邏輯地址和所述第一頁面ID,其中所 述第一 TE不被存儲于由所述第一頁面ID標識的頁面中; 接收將第二數(shù)據(jù)寫至所述永久存儲器的請求,其中所述第二數(shù)據(jù)是用第二邏輯地址定 義的; 確定所述永久存儲器中的第二物理地址,其中所述第二物理地址包括所述第一塊ID 和第二頁面ID ; 將包含所述第二數(shù)據(jù)的副本的第二碎片寫至所述第二物理地址; 產(chǎn)生包含所述第二邏輯地址和所述第二頁面ID的第二TE,其中所述第二TE不被存儲 于由所述第二頁面ID標識的頁面中; 產(chǎn)生內(nèi)容表格(TOC)頁面,其中所述TOC頁面包括所述第一 TE和所述第二TE,且其中 所述TOC頁面不包括所述第一數(shù)據(jù)和所述第二數(shù)據(jù);以及 將所述TOC頁面寫至所述永久存儲器中的第三物理地址,其中所述第三物理地址包括 所述第一塊ID和第三頁面ID。
6. 如權(quán)利要求5所述的方法,進一步包括: 接收將第三數(shù)據(jù)寫至所述永久存儲器的請求,其中所述第三數(shù)據(jù)是用第三邏輯地址定 義的; 確定所述永久存儲器中的第四物理地址,其中所述第四物理地址包括所述第一塊ID 和第四頁面ID ; 將包含所述第三數(shù)據(jù)的副本的第三碎片寫至所述第四物理地址; 產(chǎn)生第三TE,所述第三TE包括所述第三邏輯地址和所述第四頁面ID,其中所述第三TE 不被存儲于由所述第三頁面ID標識的頁面中; 產(chǎn)生包含所述第三TE的第二TOC頁面; 將所述第二TOC頁面寫至所述永久存儲器中的第五物理地址,其中所述第五物理地址 包括所述第一塊ID和第五頁面ID,且其中所述第二TOC頁面不包括所述第三數(shù)據(jù)。
7. 如權(quán)利要求6所述的方法,其特征在于,對應(yīng)于所述第五頁面ID的第五頁面是所述 第一塊中的最后頁面。
8. 如權(quán)利要求7所述的方法,其特征在于,所述第二TOC頁面包括對所述第一 TOC頁面 的引用。
9. 如權(quán)利要求8所述的方法,其特征在于,所述引用位于所述第二TOC頁面的末尾處。
10. 如權(quán)利要求5所述的方法,其特征在于,在將所述第一碎片寫至所述永久存儲器中 的第一物理地址之前,所述第一碎片的第一副本被存入第一存儲器且所述第一碎片的第二 副本被存入第二存儲器,其中為所述第一碎片的所述第二副本產(chǎn)生第三TE,其中一旦將所 述TOC頁面寫至所述第三物理存儲器地址,就擦除所述第三TE。
11. 如權(quán)利要求10所述的方法,其特征在于,所述第一存儲器位于所述第一存儲模塊 中且所述第二存儲器位于所述第二存儲模塊中,且其中所述永久存儲器位于所述第一存儲 模塊中。
12. 如權(quán)利要求5所述的方法,其特征在于,所述第一TE進一步包括選自由出生時間字 段、類型字段、邏輯長度字段和種類字段所構(gòu)成的群組中的至少一個。
13. 如權(quán)利要求5所述的方法,其特征在于,所述第一邏輯地址包括對象ID和偏移量 ID。
14. 一種用于填充存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)的方法,包括: (a) 選擇永久存儲器中的第一塊; (b) 提取所述第一塊中的最后頁面,其中所述第一塊與第一塊ID相關(guān)聯(lián); (c) 從所述第一塊中的最后頁面提取內(nèi)容條目(TE)的第一表格,其中所述第一TE包括 針對第一數(shù)據(jù)的第一邏輯地址以及第一頁面ID,所述第一頁面ID標識所述第一數(shù)據(jù)所位 于的第一塊中的頁面,其中所述頁面不是最后頁面且其中所述第一邏輯地址不包括所述頁 面ID ; (d) 使用所述第一塊ID和從所述第一 TE提取的第一頁面ID產(chǎn)生針對所述第一數(shù)據(jù)的 第一物理地址,其中所述第一物理地址包括所述第一頁面ID ; (e) 散列所述第一邏輯地址以獲得第一散列值;以及 (f) 用所述第一散列值和所述第一物理地址之間的第一映射填充所述存儲器內(nèi)數(shù)據(jù)結(jié) 構(gòu)。
15. 如權(quán)利要求14所述的方法,進一步包括: (g) 選擇所述永久存儲器中的第二塊; (h) 提取所述第二塊中的最后頁面,其中所述第二塊與第二塊ID相關(guān)聯(lián); (i) 從所述第二塊中的所述最后頁面中提取第二TE,其中所述第二TE包括針對第二數(shù) 據(jù)的第二邏輯地址以及第二頁面ID,所述第二頁面ID與所述第二數(shù)據(jù)所位于的第二塊中 的頁面相對應(yīng); (j) 使用所述第二塊ID和從所述第二TE提取的所述第二頁面ID產(chǎn)生針對所述第二數(shù) 據(jù)的第二物理地址; (k) 散列所述第二邏輯地址以獲得第二散列值;以及 (l) 用所述第二散列值和所述第二物理地址之間的第二映射填充所述存儲器內(nèi)數(shù)據(jù)結(jié) 構(gòu)。
16. 如權(quán)利要求15所述的方法,其特征在于,(a)-(c)和(g)-(i)并行發(fā)生。
17. 如權(quán)利要求15所述的方法,其特征在于,所述第一塊位于第一存儲模塊中,所述第 二塊位于所述第二存儲模塊中,且其中所述存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)位于所述第一存儲模塊和所 述第二存儲模塊外部的存儲器中。
18. 如權(quán)利要求14所述的方法,其特征在于,還包括: 確定所述第一塊中的所述最后頁面包括對所述第一塊中的所述第二頁面的引用,其中 所述第二頁面包括第二TE,其中所述第二TE包括針對第二數(shù)據(jù)的第二邏輯地址以及第二 頁面ID,所述第二頁面ID與所述第二數(shù)據(jù)所位于的第一塊中的頁面相對應(yīng); 使用所述第一塊ID和所述第二頁面ID產(chǎn)生針對所述第二數(shù)據(jù)的第二物理地址; 散列所述第二邏輯地址以獲得第二散列值;以及 用所述第二散列值和所述第二物理地址之間的第二映射填充所述存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
19. 如權(quán)利要求14所述的方法,其特征在于,所述永久存儲器是固態(tài)存儲器。
20. 如權(quán)利要求14所述的方法,其特征在于,在由對永久存儲器中存儲的任何數(shù)據(jù)執(zhí) 行的讀操作、寫操作和擦除操作構(gòu)成的群組中的任何操作之前,用所述永久存儲器中的所 有TE填充所述存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
21. 如權(quán)利要求14所述的方法,其特征在于,所述第一邏輯地址包括對象ID和偏移量 ID〇
22. -種用于存儲數(shù)據(jù)的方法,包括: 接收將第一數(shù)據(jù)寫至永久存儲器的請求,其中所述第一數(shù)據(jù)是用第一邏輯地址定義 的; 確定所述永久存儲器中的第一物理地址,其中所述第一物理地址包括第一塊ID和第 一頁面ID ; 在將第一碎片寫至所述永久存儲器中的第一物理地址之前: 將所述第一碎片的第一副本存入第一存儲器中并將所述第一碎片的第二副本存入第 二存儲器中; 將包含所述第一數(shù)據(jù)的副本的第一碎片寫至所述第一物理地址; 產(chǎn)生內(nèi)容條目(TE)的第一表格,其包括所述第一邏輯地址和所述第一頁面ID; 接收將第二數(shù)據(jù)寫至所述永久存儲器的請求,其中所述第二數(shù)據(jù)是用第二邏輯地址定 義的; 確定所述永久存儲器中的第二物理地址,其中所述第二物理地址包括所述第一塊ID 和第二頁面ID ; 將包含所述第二數(shù)據(jù)的副本的第二碎片寫至所述第二物理地址; 產(chǎn)生包含所述第二邏輯地址和所述第二頁面ID的第二TE ; 產(chǎn)生內(nèi)容表格(TOC)頁面,其中所述TOC頁面包括所述第一 TE和所述第二TE;以及 將所述TOC頁面寫至所述永久存儲器中的第三物理地址,其中所述第三物理地址包括 所述第一塊ID和第三頁面ID,其中為所述第一碎片的第二副本產(chǎn)生第三TE,其中一旦將所 述TOC頁面寫至所述第三物理存儲器地址就擦除所述第三TE。
【文檔編號】G06F12/00GK104246724SQ201380015085
【公開日】2014年12月24日 申請日期:2013年3月21日 優(yōu)先權(quán)日:2012年3月23日
【發(fā)明者】J·S·邦威克, M·W·夏皮羅 申請人:Dssd股份有限公司