两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

恢復固態(tài)存儲器內的存儲空間的裝置、系統(tǒng)和方法

文檔序號:6457069閱讀:410來源:國知局
專利名稱:恢復固態(tài)存儲器內的存儲空間的裝置、系統(tǒng)和方法
技術領域
本發(fā)明涉及固態(tài)存儲器,更具體地,涉及恢復固態(tài)存儲器內的存儲空間。
背景技術
由于在特定位置存取的數(shù)據(jù)可以被修改,然后被放回同 一位置,所以數(shù) 據(jù)存儲設備通常是隨機存取設備??煞指钗募驅ο?,并將其分塊地放入數(shù) 據(jù)存儲設備中的未存儲數(shù)據(jù)或數(shù)據(jù)被標記為無效的不同位置。這種方法對于 諸如硬盤驅動器("HDD")的設備是行之有效的,然而對于固態(tài)存儲器,隨 機存取可能效率低下并且可導致過早損壞。
對固態(tài)存儲器采用隨機存取可能效率低下,這是因為通常情況下,寫入 數(shù)據(jù)常常比讀取數(shù)據(jù)需要更長的時間。對于閃存(一種類型的固態(tài)存儲器),
通常,將一位從"o"狀態(tài)("o")改變?yōu)?r,狀態(tài)(t)比將一位從i改為o需要 更長的時間。對于采用電容器作為單元的典型的閃存就是這樣的情況,在該
單元中,O等同于單元中的放電的電容器,而l等同于單元中的充電的電容器。
通常,給電容器充電比給電容器放電需要更長的時間。
對固態(tài)存儲器采用隨機存取可導致固態(tài)存儲器的過早損壞,這是因為通 常情況下,固態(tài)存儲設備中的每個單元僅能寫入一定的次數(shù),然后單元就會開始失效。隨機存取通常不在固態(tài)存儲器中均衡地分配寫入數(shù)據(jù),所以一些 區(qū)域或地址比其他區(qū)域更加頻繁地被使用。 一些區(qū)域的過度使用可導致固態(tài) 存儲設備的整體或部分過早損壞。
通常,固態(tài)存儲設備恢復未使用的存儲空間的方法與非固態(tài)存儲器的方 法大體一致,即按隨機存取處理固態(tài)存儲設備并將未使用的存儲空間標記為 可被再次使用。這種方法是有弊端的,這是因為應用到固態(tài)存儲器的典型的 存儲空間恢復方法遭遇了上述的效率低下和易于損壞的問題。

發(fā)明內容
如上所述,顯而易見,存在有效地恢復固態(tài)存儲設備內的存儲空間和數(shù) 據(jù)的裝置、系統(tǒng)和方法的需求。有利地是,這種裝置、系統(tǒng)和方法可以在固 態(tài)存儲設備的其他內存庫執(zhí)行其他讀取和寫入操作時,自主地固態(tài)存儲設備 內的內存庫中的存儲空間。
本發(fā)明是針對現(xiàn)有技術的現(xiàn)況開發(fā)出來的,具體地,是針對現(xiàn)有技術中 通過現(xiàn)有的存儲空間恢復方法并未完全解決的問題和需要。因此,本發(fā)明已 經(jīng)被開發(fā)出來以提供克服現(xiàn)有技術中的上述多數(shù)或全部缺陷的為存儲器恢復 存儲空間的裝置、系統(tǒng)和方法。
恢復固態(tài)存儲器中的存儲空間的裝置具有多個配置成功能性地執(zhí)行下述
必要步驟的模塊順序地存儲數(shù)據(jù)包、選擇恢復的存儲部、讀取選定的存儲 部中的有效數(shù)據(jù)并將所述有效數(shù)據(jù)復制到下一可用存儲位置、和將選定的存 儲部標記為可以恢復。描述的實施方式中的這些模塊包括將數(shù)據(jù)包順序地寫 入存儲部的順序存儲模塊。所述存儲部包括固態(tài)存儲設備中的固態(tài)存儲器的 一部分。所述數(shù)據(jù)包源于對象并且按照處理的順序順序地存儲所述數(shù)據(jù)包。
所述裝置包括選擇恢復的存儲部的存儲部選擇模塊。所述裝置包括數(shù)據(jù) 恢復模塊,該數(shù)據(jù)恢復模塊實現(xiàn)如下功能從選定為恢復的存儲部中讀取有 效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他將要由所述順序存儲模塊順序地寫入的 數(shù)據(jù)包排隊并更新具有由所述順序存儲模塊寫入的有效數(shù)據(jù)的新物理地址的 索引。所述索引包括從存儲在所述固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對應 于所述數(shù)據(jù)包的對象標識符之間的映射。所述裝置包括存儲部恢復模塊,該 存儲部恢復模塊將所述選定為恢復的存儲部標記為對所述順序存儲模塊可用,以順序地寫入數(shù)據(jù)包。所述存儲部被標記為恢復以響應所述數(shù)據(jù)恢復模 塊完成從所述存儲部中復制有效數(shù)據(jù)。
在一種實施方式中,所述順序存儲模塊、所述存儲部選擇模塊、所述數(shù) 據(jù)恢復模塊和所迷存儲部恢復模塊位于所述固態(tài)存儲設備內的固態(tài)存儲設備 控制器中,并且所述固態(tài)存儲設備控制器創(chuàng)建并保持對象索引,且所述對象 索引位于所迷固態(tài)存儲設備內。
在另一種實施方式中,所述存儲部包括擦除塊,所述裝置包括擦除模塊, 該擦除模塊在所述存儲部恢復模塊將所述擦除塊標記為可恢復之前擦除選定 為恢復的擦除塊。擦除選定為恢復的擦除塊以響應所述數(shù)據(jù)恢復模塊從選定 的擦除塊中復制有效數(shù)據(jù)包。在相關的實施方式中,所述固態(tài)存儲器布置在 兩個或更多個內存庫內,并且當所述順序存儲模塊將數(shù)據(jù)包寫入第二內存庫 中的存儲部時,所述擦除模塊擦除第一內存庫中的擦除塊。在另一種相關的 實施方式中,所述固態(tài)存儲器布置在兩個或更多個內存庫內,并且當從第二
內存庫中的存儲部讀取數(shù)據(jù)時,所述擦除;^莫塊擦除第一內存庫中的擦除塊。 在另一種實施方式中,所述存儲部選擇模塊、所述數(shù)據(jù)恢復模塊和所述存儲 部恢復模塊自主地運行。
在一種實施方式中,所述裝置包括垃圾標記模塊,該垃圾標記模塊將存 儲部中的數(shù)據(jù)包識別為無效,以響應指示所述數(shù)據(jù)包不再有效的操作。在相 關的實施方式中,所述存儲部內的所述數(shù)據(jù)包是第一數(shù)據(jù)包,指示所述第一 數(shù)據(jù)包不再有效的操作包括當所述第 一 數(shù)據(jù)包無效時,將第二數(shù)據(jù)包寫入所 述固態(tài)存儲設備。在另一種相關的實施方式中,指示所述數(shù)據(jù)包不再有效的 操作包括刪除操作或讀-修改-寫操作,其中,所述刪除操作預示著所述數(shù)據(jù)包 將被刪除,而所述讀-修改-寫操作包括讀取所述數(shù)據(jù)包、修改所述數(shù)據(jù)包并將 修改過的數(shù)據(jù)包寫入另 一位置。由所述順序存儲模塊將所述修改過的數(shù)據(jù)包 寫入另一位置。在另一種相關的實施方式中,將數(shù)據(jù)包識別為無效包括修改 所述對象索引中的項以指示所述數(shù)據(jù)包為無效。
在一種實施方式中,所迷存儲部選擇;漠塊通過識別具有低額損耗的存儲 部來選擇恢復的存儲部。在另一種實施方式中,識別具有低額損耗的存儲部 包括識別具有少量無效數(shù)據(jù)的存儲部。在另一種實施方式中,識別具有低額 損耗的存儲部包括識別擦除擦除時間少的和/或編程時間少的存儲部。在另一種實施方式中,識別具有低額損耗的存儲部包括識別程序計數(shù)低的存儲部,其中,程序包括將數(shù)據(jù)包寫入所述存儲部內的指定頁。在又一種實施方式中,識別具有低額損耗的存儲部包括識別位出錯率低的存儲部。
在一種實施方式中,所述存儲部選擇模塊通過識別具有高額損耗的存儲部來選擇恢復的存儲部。在另一種實施方式中,識別具有高額損耗的存儲部包括識別擦除重復次數(shù)多的存儲部。在另一種實施方式中,所述存儲部恢復模塊將所述選定為恢復的存儲部標記為可存儲數(shù)據(jù)。在另一種實施方式中,識別具有高額損耗的存儲部包括識別位出錯率高的存儲部。在相關的實施方
式中,識別位出錯率高的存儲部包括識別具有不可恢復的糾錯碼("ECC")
塊的存儲部。在另一種實施方式中,識別位出錯率高的存儲部包括識別擦除時間長和編程時間長的存儲部。
在一種實施方式中,所述存儲部選擇;溪塊通過識別具有大量無效數(shù)據(jù)的存儲部來選擇恢復的存儲部。在另一種實施方式中,所述存儲部選擇模塊通過識別使用下述參數(shù)中的兩個或更多個的組合的存儲部來選擇恢復的存儲部程序計數(shù)、擦除周期計數(shù)、位出錯率、無效數(shù)據(jù)的量、擦除重復的次數(shù)及不可恢復的ECC塊的數(shù)量。在又一種實施方式中,所述固態(tài)存儲器布置在存儲元件的陣列中,并且存儲部包括虛擬存儲部,該虛擬存儲部包括一起存取的存儲元件行中的每一個存儲元件內的存儲部。
還擔出了本發(fā)明的一種系統(tǒng),以恢復固態(tài)存儲器內的存儲空間。所述系統(tǒng)可由具有固態(tài)存儲器的固態(tài)存儲設備來實現(xiàn)。所述固態(tài)存儲器包括一個或
分。具體地,所述固態(tài)存儲設備包括將數(shù)據(jù)包順序地寫入存儲部的順序存儲模塊。所迷數(shù)據(jù)包源于對象并且按照處理的順序順序地存儲所述數(shù)據(jù)包。
所述固態(tài)存儲設備包括存儲部選擇模塊,該存儲部選擇模塊選擇恢復的存儲部。所述固態(tài)存儲設備包括數(shù)據(jù)恢復模塊,該數(shù)據(jù)恢復模塊實現(xiàn)如下功能從選定為恢復的存儲部中讀取有效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他將要由所述順序存儲模塊順序地寫入的數(shù)據(jù)包排隊并更新具有由所述順序存儲模塊寫入的有效數(shù)據(jù)的新物理地址的索引。所述索引包括索引包括從存儲在所述固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對應于所迷數(shù)據(jù)包的對象標識符之間的映射。所述固態(tài)存儲設備包括存儲部恢復模塊,該存儲部恢復模塊將所述選定為恢復的存儲部標記為對所述順序存儲模塊可用,以順序地寫入數(shù)據(jù)包。所述存儲部被標記為恢復以響應所述數(shù)據(jù)恢復模塊完成從所述存儲部中復制有效數(shù)據(jù)。
還提出了本發(fā)明的一種方法,用于恢復固態(tài)存儲器中的存儲空間。在公開的實施方式中的該方法大體上包括實現(xiàn)上述與所述裝置和系統(tǒng)的運行有關的功能的必要步驟。在一種實施方式中,該方法包括將數(shù)據(jù)包順序地寫入存儲部。所述存儲部包括固態(tài)存儲設備中的固態(tài)存儲器的一部分。所述數(shù)據(jù)包源于對象,按照處理的順序順序地存儲所迷數(shù)據(jù)包。所述方法包括選擇恢復的存儲部。
所述方法包括從選定為恢復的存儲部中讀取有效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他為順序地寫入而排隊的數(shù)據(jù)包排隊及更新具有由順序存儲模塊寫
入的有效數(shù)據(jù)的新物理地址的索引。所述索引包括從存儲在所述固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對應于所述數(shù)據(jù)包的對象標識符之間的映射。所述方法包括將所述選定為恢復的存儲部標記為可用,以順序地寫入數(shù)據(jù)包,其中,所述存儲部被標記為恢復以響應完成從所述存儲部中復制有效數(shù)據(jù)。
在另一種實施方式中,所迷存儲部為擦除塊,所述方法包括在存儲部恢復模塊將所述擦除塊標記為可恢復之前擦除選定為恢復的擦除塊,其中,擦除選定為恢復的擦除塊以響應數(shù)據(jù)恢復模塊從選定的擦除塊中復制有效數(shù)據(jù)包。在這種實施方式中,所述方法包括將存儲部中的數(shù)據(jù)包識別為無效,以響應指示所述數(shù)據(jù)包不再有效的操作。
本說明書全文所提到的特征、優(yōu)點或者類似措辭并不意味著可在本發(fā)明包含在本發(fā)明的任一單獨的實施方式中的情況下實現(xiàn)所有的特征和優(yōu)點。當
然,涉及特征和優(yōu)點的措辭被理解為意味著與實施方式一起描述的特定的特征、優(yōu)點或者特點包括在本發(fā)明的至少一種實施方式中。因此,在本說明書全文中,關于特征、優(yōu)點和類似措辭的討論可(但未必)涉及同一實施方式。
此外,描述的本發(fā)明的特征、優(yōu)點和特點可釆用任何合適的方式與一個或多個實施方式結合。相關領域的技術人員可意識到本發(fā)明可在不具備特定實施方式的一個或多個具體特征或優(yōu)點的情況下被實施。在其他例子中,可意識到附加特征和優(yōu)點出現(xiàn)在某些實施方式中,而不是在本發(fā)明的所有實施方式中都出現(xiàn)。
通過下面的說明和附加的權利要求,本發(fā)明的這些特征和優(yōu)點將變得更加充分的顯而易見,或者可以通過按下文所闡述的實施本發(fā)明的方法而獲悉。


為了使本發(fā)明的優(yōu)點更加容易理解,會參考附圖中示出的特定實施方式給出上面簡要描述的本發(fā)明的更具體的說明。在理解到這些附圖僅描述了本發(fā)明的一般實施方式并且并不因此認為本發(fā)明限于此范圍的情況下,將通過
使用附圖并結合更多的具體特征和細節(jié)描述和解釋本發(fā)明,附圖中
圖1 A是示意性框圖,示出了根據(jù)本發(fā)明的用于固態(tài)存儲設備內的數(shù)據(jù)管理的系統(tǒng)的 一 種實施方式;
圖1B是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設備內的對象管理的系統(tǒng)的一種實施方式;
圖2A是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設備內的對象管理的裝置的一種實施方式;
圖2B是示意性框圖,示出了根據(jù)本發(fā)明的位于固態(tài)存儲設備內的固態(tài)存儲設備控制器的 一種實施方式;
圖3是示出了根據(jù)本發(fā)明的位于固態(tài)存儲設備內的固態(tài)存儲設備控制器的一種實施方式的示意性框圖,該固態(tài)存儲設備控制器具有寫入數(shù)據(jù)管道和讀取數(shù)據(jù)管道;
圖4A是示意性框圖,示出了根據(jù)本發(fā)明的位于固態(tài)存儲控制器內的內存庫交錯控制器的 一 種實施方式;
圖4B是示意性框圖,示出了根據(jù)本發(fā)明的位于固態(tài)存儲設備內的內存庫交錯控制器的 一種替代實施方式;
圖5是示意性流程圖,示出了根據(jù)本發(fā)明的在固態(tài)存儲設備內采用數(shù)據(jù)管道管理數(shù)據(jù)的方法的一種實施方式;
圖6是示意性流程圖,示出了根據(jù)本發(fā)明的在固態(tài)存儲設備內采用數(shù)據(jù)管道管理數(shù)據(jù)的方法的另一種實施方式;
圖7是示意性流程圖,示出了根據(jù)本發(fā)明的在固態(tài)存儲設備中利用內存庫交錯管理數(shù)據(jù)的方法的一種實施方式;圖8是示意性框圖,示出了根據(jù)本發(fā)明的利用庫交錯在固態(tài)存儲設備中
收集垃圾的裝置的一種實施方式;
圖9是示意性流程圖,示出了根據(jù)本發(fā)明的在固態(tài)存儲設備中收集垃圾的方法的一種實施方式。
具體實施例方式
為了更顯著地強調功能性單元運行的獨立性,在本說明書中描述的許多功能性單元已被標示為模塊。例如,模塊可作為硬件電路來實施,所述硬件電路包括自定義VLST電路、門陣列或成品半導體(例如邏輯芯片、晶體管或其他分立元件)。模塊也可在可編程硬件設備(如現(xiàn)場可編程門陣列、可編程陣列邏輯、可編程邏輯設備或類似設備)內實施。
模塊還可在由不同類型的處理器運行的軟件中實施。例如,可執(zhí)行代碼的識別模塊可以包括一個或多個計算機指令物理塊或邏輯塊,該計算機指令被作為對象、程序或函數(shù)來組織。然而,識別模塊的可執(zhí)行文件不必在物理上位于一起,但是可包括存儲在不同位置的不同命令,當這些命令在邏輯上連接在一起時,所述命令包括所述模塊并實現(xiàn)所述模塊的指定目標。
當然,可執(zhí)行代碼的模塊可以為一個或許多指令,并且甚至可以分布在若干不同的代碼段中、分布在不同的程序中并可分布在多個存儲設備中。類似地,可以在此在模塊內識別并示出運算數(shù)據(jù),并且可以以任何合適的形式體現(xiàn)所述運算數(shù)據(jù)并在任意合適類型的數(shù)據(jù)結構中組織所述運算數(shù)據(jù)。所迷運算數(shù)據(jù)可作為單數(shù)據(jù)集收集,或者可以分布在不同的位置(包括不同的存儲設備),并且可在系統(tǒng)或網(wǎng)絡中至少部分地僅作為電信號存在。當模塊或模塊的部分在軟件中實施時,軟件部分被存儲在一個或多個計算機可讀^某體上。
本說明書全文所提到的"一種實施方式"、"實施方式"或類似的措辭意味著與實施方式一起描述的特定的特征、結構或特點包括在本發(fā)明的至少一種實施方式中。因此,在本說明書全文中,短語"在一種實施方式中"、"在實施方式中"及類似措辭的出現(xiàn)可(但未必)涉及同一實施方式。
提及信號承載媒介可采取任何能夠生成信號、導致信號生成或者導致在數(shù)字處理設備上執(zhí)行機器可讀命令程序的形式。信號承載媒介可通過下迷設備體現(xiàn)傳輸線、光盤、數(shù)字視頻光盤、磁帶、伯努利驅動器、磁盤、穿孔卡、閃存、集成電路或其他數(shù)字處理裝置存儲設備。
此外,描述的本發(fā)明的特征、結構或特點可以以任何合適的方式合并在一種或多種實施方式中。在下文的說明中,提供了大量的具體細節(jié)以全面理解本發(fā)明的實施方式,所述具體細節(jié)比如編程、軟件模塊、用戶選擇、網(wǎng)絡事務、數(shù)據(jù)庫查詢、數(shù)據(jù)庫結構、硬件模塊、硬件電路、硬件芯片等等的實
例。然而,相關技術領域的技術人員可認識到本發(fā)明在可在不具備一個或多個具體實施方式
的具體細節(jié)的情況下被實施,或者本發(fā)明可結合其他方法、
組件、材料等實施。在其他例子中,并沒有顯示或描述公知的結構、材料或操作以使本發(fā)明變得清晰。
此處包括的示意性流程圖大體上是作為邏輯流程圖來列舉的。就這點而言,描述的順序和標記的步驟是本方法的一種實施方式的指示性說明。可設想其他在功能上、邏輯上或效果上與圖示方法的一個或多個步驟(或其中部分)相同的步驟和方法。此外,使用的格式和符號被用于解釋方法的邏輯步驟并被理解為不限制本方法的范圍。盡管在流程圖中可使用不同的箭頭類型和線條類型,但這些箭頭類型和線條類型被理解為不限制相應方法的范圍。的確, 一些箭頭或其他連接器可用于僅表示方法的邏輯流程。例如,箭頭可表示描述的方法的列舉的步驟之間的未指明間期的等待或監(jiān)測時期。此外,特定方法的步驟的順序可或可不嚴格依照所示的對應步驟的順序。
固態(tài)存儲系統(tǒng)
圖1 A是示意性框圖,示出了根據(jù)本發(fā)明的用于固態(tài)存儲設備內的數(shù)據(jù)管理的系統(tǒng)100的一種實施方式。系統(tǒng)100包括固態(tài)存儲設備102、固態(tài)存儲控制器104、寫入數(shù)據(jù)管道106、讀取數(shù)據(jù)管道108、固態(tài)存儲器IIO、計算機112、
客戶端ii4和計算機網(wǎng)絡ri6,這些裝置描述如下。
系統(tǒng)100包括至少一個固態(tài)存儲設備102。在另一種實施方式中,系統(tǒng)IOO包括兩個或更多個固態(tài)存儲設備102,每個固態(tài)存儲設備102可包括非易失性的、固態(tài)的存儲器IIO,所述非易失性的、固態(tài)的存儲器例如納米隨機存取存儲器("納米RAM"或者"NRAM")、磁電阻式RAM ("MRAM")、動態(tài)RAM("DRAM")、相變RAM ("PRAM")閃存等等。結合圖2和圖3更詳細地描述了固態(tài)存儲設備102。固態(tài)存儲設備102被描述成位于通過計算機網(wǎng)絡l 16與客戶端114相連的計算機112內。在一種實施方式中,固態(tài)存儲設備102位于計算 機112內部并且采用系統(tǒng)總線連接,所述系統(tǒng)總線例如快速外圍組件互連 ("PCI-e")總線、串行高級技術附件("串行ATA,,)總線或類似總線。在另 一種實施方式吧,固態(tài)存儲設備102位于計算機112外部,并且通過通用串行 總線("USB")、電氣與電子工程師協(xié)會("IEEE") 1394總線("火線")或 類似總線連接。在其他實施方式中,固態(tài)存儲設備102采用下述方式與計算機 112相連接:外圍組件互連("PC1") express總線、外部電或光總線擴展或者 總線網(wǎng)絡解決方案,所述總線網(wǎng)絡解決方案例如無限帶寬或快速PCI高級交換 ("PCIe-AS")或類似技術。
在不同的實施方式中,固態(tài)存儲設備102可以是雙列直插式內存模塊 ("DIMM")、子卡或微型模塊的形式。在另一種實施方式中,固態(tài)存儲設備 102是位于機架式刀片內的元件。在另一種實施方式中,固態(tài)存儲設備102包 含在直接集成到高級集成裝置(如主板、筆記本電腦、圖形處理器)的封裝 內。在另一種實施方式中,包括固態(tài)存儲設備102的單獨元件直接集成到高級 集成裝置上而不經(jīng)過中間封裝。
固態(tài)存儲設備102包括一個或多個固態(tài)存儲控制器104,每個固態(tài)存儲控 制器104可包括寫入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108,而且,每個固態(tài)存儲控 制器104還包括固態(tài)存儲器110,這將在下文中結合圖2和圖3詳細說明。
系統(tǒng)100包括一 臺或多臺連接到固態(tài)存儲設備102的計算機112。計算機 112可以是主機、服務器、存儲區(qū)域網(wǎng)絡("SAN")的存儲控制器、工作站、 個人計算機、筆記本電腦、手持式計算機、超級計算機、計算機集群、網(wǎng)絡 交換機、路由器或設備、數(shù)據(jù)庫或存儲設備、數(shù)據(jù)采集或數(shù)據(jù)采集系統(tǒng)、診 斷系統(tǒng)、測試系統(tǒng)、機器人、便攜式電子設備、無線設備或類似設備。在另 一種實施方式中,計算機112可以是客戶端,并且固態(tài)存儲設備102自主運行 以應答發(fā)送自計算機112的數(shù)據(jù)請求。在這種實施方式中,計算機112和固態(tài) 存儲設備102可采用下列方式連接計算機網(wǎng)絡、系統(tǒng)總線或其他適于在計算 機112和自主固態(tài)存儲設備102之間連接的通信手段。
在一種實施方式中,系統(tǒng)100包括一個或多個客戶端114,所述一個或多 個客戶端114通過一個或多個計算機網(wǎng)絡116連接到一臺或多臺計算機112。客 戶端114可以是主機、服務器、SAN的存儲控制器、工作站、個人計算機、筆記本電腦、手持式計算機、超級計算機、計算機集群、網(wǎng)絡交換機、路由器 或設備、數(shù)據(jù)庫或存儲設備、數(shù)據(jù)采集或數(shù)據(jù)采集系統(tǒng)、診斷系統(tǒng)、測試系 統(tǒng)、機器人、便攜式電子設備、無線設備或類似設備。計算機網(wǎng)絡116可包括
因特網(wǎng)、廣域網(wǎng)("WAN")、城域網(wǎng)("MAN")、局域網(wǎng)("LAN")、令牌 環(huán)網(wǎng)、無線網(wǎng)絡、光纖通道網(wǎng)絡、SAN、網(wǎng)絡附屬存儲("NAS") 、 ESCON 或類似網(wǎng)絡、或者是網(wǎng)絡的任意組合。計算機網(wǎng)絡116還可包括來自IEEE802 系列網(wǎng)絡技術中的網(wǎng)絡,如以太網(wǎng)、令牌環(huán)網(wǎng)、WiFi、 WiMax及類似網(wǎng)絡。
計算機網(wǎng)絡116可包括服務器、交換機、路由器、電纜、無線電和其他 用于促進計算機112和客戶端114的網(wǎng)絡連接的設備。在一種實施方式中, 系統(tǒng)100包括通過計算機網(wǎng)絡116進行對等通信的多臺計算機112。在另一種 實施方式中,系統(tǒng)100包括通過計算機網(wǎng)絡116進行對等通信的多個固態(tài)存 儲設備102。本領域技術人員可認識到其他計算機網(wǎng)絡116可包括一個或多個 計算機網(wǎng)絡116以及相關設備,所述相關設備具有一個或多個客戶端114、其 他計算機或與一臺或多臺計算機112相連的一個或多個固態(tài)存儲設備102之 間的單個或冗余連接,所述其他計算機具有一個或多個固態(tài)存儲設備102。在 一種實施方式中,系統(tǒng)100包括兩個或更多個通過計算機網(wǎng)絡118連接到客 戶端116的固態(tài)存儲設備102,而不包括計算機112。
存儲控制器管理的對象
圖1B是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設備內的對象管理的 系統(tǒng)101的一種實施方式。系統(tǒng)101包括一個或多個存儲設備150 (每一個存儲 設備150都具有存儲控制器152和一個或多個數(shù)據(jù)存儲設備154 )和一個或多個 請求設備155。存儲設備152聯(lián)網(wǎng)在一起并與一個或多個請求設備155連接。請 求設備155將對象請求發(fā)給存儲設備150a。對象請求可以是創(chuàng)建對象的請求、 向對象寫入數(shù)據(jù)的請求、從對象讀取數(shù)據(jù)的請求、刪除對象的請求、檢查對 象的請求、復制對象的請求及類似請求。本領域技術人員會認識到其他對象 請求。
在一種實施方式中,存儲控制器152和數(shù)據(jù)存儲設備154是分離的設備。 在另一種實施方式中,存儲控制器152和數(shù)據(jù)存儲設備154集成到一個存儲設 備150上。在另一種實施方式中,數(shù)據(jù)存儲設備154為固態(tài)存儲器110,而存儲 控制器為固態(tài)存儲設備控制器202。在其他實施方式中,數(shù)據(jù)存儲設備154可以為硬盤驅動器、光驅動器、磁帶存儲器或類似存儲設備。在另一種實施方
式中,存儲設備150可包括兩個或更多個不同類型的數(shù)據(jù)存儲設備154。
在一種實施方式中,數(shù)據(jù)存儲設備154為固態(tài)存儲器110,并且被布置為 固態(tài)存儲元件216、 218、 220的陣列。在另一種實施方式中,固態(tài)存儲器IIO 被布置在兩個或更多個內存庫(bank)214a-n內。下文結合圖2B更詳細地描述 了固態(tài)存儲器IIO。
存儲設備150a-n可聯(lián)網(wǎng)在一起并且可作為分布式存儲設備運行。與請求設 備155連接的存儲設備150a控制發(fā)送到所述分布式存儲設備的對象請求。在一 種實施方式中,存儲設備150和關聯(lián)的存儲控制器152管理對象并對請求設備 155來說表現(xiàn)為分布式對象文件系統(tǒng)。在這種情況下, 一類分布式對象文件系 統(tǒng)的實例是并行對象文件系統(tǒng)。在另一種實施方式中,存儲設備150和關聯(lián)的 存儲控制器152管理對象并對請求設備155來說表現(xiàn)為分布式對象文件服務器。 在這種情況下, 一類分布式對象文件服務器的實例是并行對象文件服務器。 在這些和其他實施方式中,請求設備155可只管理對象或者與存儲設備150結 合而參與管理對象,這通常并不將存儲設備150的功能限制在為其他客戶端 114充分管理對象的范圍內。在退化情況下,每個分布式存儲設備、分布式對 象文件系統(tǒng)和分布式對象文件服務器能作為單個設備獨立運行。聯(lián)網(wǎng)的存儲 設備150a-n可作為分布式存儲設備、分布式對象文件系統(tǒng)、分布式對象文件服 務器和它們的任意組合運行,所述組合具有一個或多個為一個或多個請求設 備155配置的這些功能。例如,存儲設備150可配置為為第一請求設備155a 作為分布式存儲設備運行,而請求設備155b作為分布式存儲設備和分布式對 象文件系統(tǒng)為運行。當系統(tǒng)101包括一個存儲設備150a時,存儲設備150a的存 儲控制器152a管理對象并對請求設備155來說表現(xiàn)為對象文件系統(tǒng)或對象文 件服務器。
在一種實施方式中,其中,存儲設備150作為分布式存儲設備聯(lián)網(wǎng)在一起, 存儲設備150充當由一個或多個分布式存儲控制器152管理的獨立驅動器冗余 陣列("RAID")。例如,寫入對象數(shù)據(jù)段的請求導致所述數(shù)據(jù)段根據(jù)RA1D 級別在數(shù)據(jù)存儲設備lS4a-n中被條帶化為具有奇偶校驗條帶的條帶。這種布置 的一個好處是這種對象管理系統(tǒng)可在單獨的存儲設備150 (無論是存儲控制器 152、數(shù)據(jù)存儲設備154或存儲設備150的其他組件)出現(xiàn)故障時繼續(xù)使用。當冗余網(wǎng)絡用于互連存儲設備150和請求設備155時,所述對象管理系統(tǒng)
可在出現(xiàn)網(wǎng)絡故障的情況下(只要網(wǎng)絡中的一個仍在運行)繼續(xù)使用。具有
一個存儲設備150a的系統(tǒng)101還可包括多個數(shù)據(jù)存儲設備154a,而存儲設備 150a的存儲控制器152a可作為RAID控制器運行并在存儲設備150a的數(shù)據(jù)存儲 設備154a間分割數(shù)據(jù)段,存儲設備150a的存儲控制器152a可包括根據(jù)RAID級 別的奇偶校驗條帶。
在一種實施方式中,其中, 一個或多個存儲設備150a-n是具有固態(tài)存儲設 備控制器202和固態(tài)存儲器110的固態(tài)存儲設備102,固態(tài)存儲設備102可配置 為DIMM配置、子卡、微型模塊等,并保留在計算機112內。計算機112可以是 服務器或具有固態(tài)存儲設備102的類似設備,固態(tài)存儲設備102聯(lián)網(wǎng)在一起并 作為分布式RAID控制器運行。有利地是,存儲設備102可采用PCI-e 、 PCIe-AS 、 無限帶寬或其他高性能總線、交換總線、網(wǎng)絡總線或網(wǎng)絡連接,并且可提供 極致密型、高性能的RAID存儲系統(tǒng),在該系統(tǒng)中,單獨的或分布式固態(tài)存儲 控制器202自主地在固態(tài)存儲器110a-n間條帶化數(shù)據(jù)段。
在一種實施方式中,請求設備155用于與存儲設備150通信的同一網(wǎng)絡可 被對等存儲設備l50a使用,以與對等存儲設備l50b-n通信以實現(xiàn)RAID功能。
絡。在另一種實施方式中,請求設備155可通過向存儲設備150發(fā)送冗余請求 而參與RAID進程。例如,請求設備155可向第一存儲設備150a發(fā)送第一對象寫 入請求,而向第二存儲設備150b發(fā)送具有相同數(shù)據(jù)段的第二對象寫入請求以 實現(xiàn)簡單的鏡像。
當具有在存儲設備102內進行對象處理的能力時,只有存儲控制器152具 有采用 一個RAID級別存儲一個數(shù)據(jù)段或對象的能力,而采用不同的RAID級別 或不采用RAID條帶化來存儲另 一數(shù)據(jù)段或對象。這些多個RAID群組可與存儲 設備150內的多個分區(qū)相關聯(lián)。可同時在各種RAID群組間支持RAID0、RAID1 、 RAID5、 RAID6和復合RAID類型10、 50、 60,所述RAID群組包括數(shù)據(jù)存儲設 備154a-n。本領域技術人員可認識到還可同時支持的其他RA1D類型和配置。
而且,由于存儲控制器152像RAID控制器一樣自主運行,所述RAID控 制器能夠執(zhí)行漸進RAID并能夠將在數(shù)據(jù)存儲設備154間條帶化的具有一個 RAID級別的對象或對象的某些部分轉換為另一 RAID級別,轉換時請求設備155不受影響、不參與或者甚至不探測RAID級別的變fl^在優(yōu)選實施方式中, 促進RAID配置從一個級別變?yōu)榱硪患墑e可在對象或甚至在包基上自主實 現(xiàn),并且可由運行在存儲設備150或存儲控制器152中的一個上的分布式 RAID控制模塊初始卩K通常,RArD漸進是從高性能和低效率的存儲配置(如 RAID1)轉換為低性能和高存儲效率的存儲配置(如RAID5),其中,轉換是 基于讀取頻率^L動態(tài)地初始化。但是,可以發(fā)現(xiàn),從RAID5到RAID1的漸進 也是可能的。可配置其他用于初始化RAID漸進的進程,或者可由客戶端或 外部代理(如存儲系統(tǒng)管理服務器請求)請求該進程。本領域技術人員可認 識到具有存儲控制器152的存儲設備102的其他特征和優(yōu)點,該存儲控制器 152自主管理對象。
用于存儲控制器管理的對象的裝置
圖2A是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設備內的對象管理的 裝置200的一種實施方式。裝置200包括存儲控制器152,該存儲控制器152具 有對象請求接收器模塊260、解析模塊262、命令執(zhí)行模塊264、對象索引模 塊266、對象請求排隊模塊268、具有消息模塊270的封包器302、及對象索引 重建^f莫塊272,上述模塊描述如下。
存儲控制器152大體上與圖iB中的系統(tǒng)102描述的存儲控制器152類似,并 且可以是圖2描述的固態(tài)存儲設備控制器202。裝置200包括對象請求接收器模 塊260,該對象請求接收器模塊260接收來自 一個或多個請求設備155的對象請 求。例如,對于存儲對象數(shù)據(jù)請求,存儲控制器152在數(shù)據(jù)存儲設備154中以 數(shù)據(jù)包的形式存儲數(shù)據(jù)段,該數(shù)據(jù)存儲設備154與存儲控制器152相連接。所 述對象請求通常由存儲在或將要被存儲在一個或多個對象數(shù)據(jù)包中的數(shù)據(jù)段 指令存儲控制器管理的對象。對象請求可請求存儲控制器152創(chuàng)建對象,該對 象隨后會通過可利用本地或遠程直接內存讀取("DMA"、 "RDMA")轉換的 稍后的對象請求來填充數(shù)據(jù)。
在一種實施方式中,對象請求為將對象的全部或一部分寫入先前創(chuàng)建的 對象的寫入請求。在一個實例中,所述寫入請求用于對象的數(shù)據(jù)段??蓪⑺?述對象的其他數(shù)據(jù)段寫入存儲設備150或者寫入其他存儲設備152。在另一個 實例中,所述寫入請求用于整個對象。在另一個實例中,所述對象請求為從 由存儲控制器152管理的數(shù)據(jù)段中讀取數(shù)據(jù)。在又一種實施方式中,所述對象請求為刪除請求,以刪除數(shù)據(jù)段或對象。
有利地是,存儲控制器152能接受不僅僅寫新對象或為已存在的對象添加
數(shù)據(jù)的寫入請求。例如,由對象請求接收器;f莫塊260接收的寫入請求可包括 在由存儲控制器152存儲的數(shù)據(jù)前添加數(shù)據(jù)的請求、在已存儲的數(shù)據(jù)中插入數(shù) 據(jù)的請求或者替換數(shù)據(jù)的一段的請求。由存儲控制器152保持的對象索引提供 了這些復雜寫操作所需要的靈活性,所述寫操作在其他存儲控制器內不可用, 但是目前僅在服務器和其他計算機文件系統(tǒng)內的存儲控制器外可用。
裝置200包括解析模塊262,該解析模塊262將所述對象請求解析為 一條或 多條命令。通常,解析模塊262將所述對象請求解析為一個或多個緩存。例如, 所述對象請求中的一條或多條命令可被解析為命令緩存。通常,解析模塊262 準備對象請求,以使得所述對象請求中的信息可以被存儲控制器152理解并執(zhí) 行。本領域技術人員會認識到將對象請求解析為一條或多條命令的解析模塊 262的其他功能。
裝置200包括命令執(zhí)行模塊264,該命令執(zhí)行模塊264執(zhí)行從所述對象請求 解析出的命令。在一種實施方式中,命令執(zhí)行模塊264執(zhí)行一條命令。在另一 種實施方式中,命令執(zhí)行模塊264執(zhí)行多條命令。通常,命令執(zhí)行模塊264解 釋解析自所述對象請求的命令(如寫入命令),然后創(chuàng)建、排列并且執(zhí)行子
命令。例如,解析自對象請求的寫入命令可指令存儲控制器152存儲多個數(shù)據(jù) 段。所迷對象請求還可包括必要屬性(如加密、壓縮等)。命令執(zhí)行模塊264 可命令存儲控制器152壓縮所述數(shù)據(jù)段、加密所述數(shù)據(jù)段、創(chuàng)建一個或多個數(shù) 據(jù)包并為每個數(shù)據(jù)包關聯(lián)包頭、使用媒體加密密鑰加密所述數(shù)據(jù)包、添加錯 誤修正碼并將所述數(shù)據(jù)包存儲在指定位置。在指定位置存儲所述數(shù)據(jù)包,并 且其他子命令還可被分解為其他更低級別的子命令。本領域技術人員會認識 到命令執(zhí)行模塊264能執(zhí)行一條或多條解析自對象請求的命令的其他方法。
裝置200包括對象索引模塊266,該對象索引模塊266在對象索引中創(chuàng)建對 象項,以響應創(chuàng)建對象或存儲所述對象數(shù)據(jù)段的存儲控制器152。通常,存儲 控制器152從所述數(shù)據(jù)段中創(chuàng)建數(shù)據(jù)包,并且在存儲所述數(shù)據(jù)段時,所述數(shù)據(jù) 包存儲的位置即被指定。同數(shù)據(jù)段一起接收的或作為對象請求的一部分接收 的對象元數(shù)據(jù)可采用類似方法存儲。
對象索引模塊266在存儲所述數(shù)據(jù)包和分配所述數(shù)據(jù)包的物理地址時創(chuàng)建進入對象索引的對象項。所述對象項包括所述對象的邏輯標識符和一個或 多個物理地址之間的映射,所述一個或多個物理地址對應于存儲控制器152存 儲一個或多個數(shù)據(jù)包和任何對象元數(shù)據(jù)包的位置。在另一種實施方式中,在 存儲所述對象的數(shù)據(jù)包之前在所述對象索引中創(chuàng)建項。例如,如果存儲控制器152較早地確定存儲所述數(shù)據(jù)包的物理地址,則對象索引模塊266可較早地 在所述對象索引中創(chuàng)建項。通常,當對象請求或對象請求組導致對象或數(shù)據(jù)段被修改時(可能在讀 修改寫操作期間),所述對象索引模塊266更新所述對象索引中的項以符合修 改的對象。在一種實施方式中,所述對象索引創(chuàng)建新對象并在所述對象索引 為所述修改的對象創(chuàng)建新項。通常,當僅有對象的一部分被修改時,所述對 象包括修改過的數(shù)據(jù)包和一些保持不變的數(shù)據(jù)包。在這種情況下,所述新項 包括到未變的數(shù)據(jù)包(與最初寫入它們的位置相同)的映射和到寫入新位置 的修改后的對象的映射。在另一種實施方式中,對象請求接收器模塊260接收對象請求,該對象請 求包括擦除數(shù)據(jù)塊或其他對象元的命令,存儲控制器152可至少存儲一個包 (如擦除包,該擦除包具有對象的引用、與對象的關系和擦除的數(shù)據(jù)塊的大 小的信息)。此外,這可進一步表明擦除的對象元素被填充為O。因此,擦除 對象請求可用于仿真^皮擦除的實際的內存或存儲器,并且,所述實際的內存或存儲器實際上具有合適的內存/存儲器的一部分,所述合適的內存/存儲器實 際上以O存儲在所述內存/存儲器的單元中。有利地是,創(chuàng)建具有項(該項表明了數(shù)據(jù)段和對象元數(shù)據(jù)之間的映射) 的對象索引允許存儲控制器152自主的處理和管理對象。這種能力允許在存儲 設備150中十分靈活地存儲數(shù)據(jù)。 一旦創(chuàng)建了對象的索引項,存儲控制器152 可有效地處理后繼關于所述對象的對象請求。在一種實施方式中,存儲控制器152包括對象請求排隊^t塊,該對象請求 排隊;漠塊在解析;溪塊262解析之前將一個或多個由對象請求接收器模塊260接 收到的對象排隊。對象請求排隊模塊268允許在接收對象請求時和在執(zhí)行所述 對象請時之間的靈活性。在另一種實施方式中,存儲控制器152包括封包器302,該封包器302根據(jù) 一個或多個數(shù)據(jù)段創(chuàng)建一個或多個數(shù)據(jù)包,其中,數(shù)據(jù)包的大小適于存儲在數(shù)據(jù)存儲設備154內。在下文中結合圖3更詳細地描述封包器302。在一種實施 方式中,封包器302包括為每個包創(chuàng)建包頭的消息模塊270。所述包頭包括包 標識符和包長度。所述包標識符把所述包與對象(為該對象生成所述包)聯(lián) 系起來。在一種實施方式中,由于包標識符包含足夠的信息以確定對象和在對象 內的包含在包內的對象元素之間的關系,因此每個包包括自包含的包標識符。 然而,更有效的優(yōu)選實施方式是在容器中存儲包。容器是一種數(shù)據(jù)結構,這種數(shù)據(jù)結構有助于更有效的存儲數(shù)據(jù)包并幫助 建立對象和數(shù)據(jù)包、元數(shù)據(jù)包和其他與存儲在容器內的對象有關的包之間的 關系。注意到存儲控制器152通常以處理作為對象的一部分接收的對象元數(shù)據(jù) 的類似方式處理數(shù)據(jù)段。通常,"包"可指包含數(shù)據(jù)的數(shù)據(jù)包、包含元數(shù)據(jù)的元 數(shù)據(jù)包或其他包類型的其他包。對象可存儲在一個或多個容器中,并且容器 通常包括僅用于一個唯一的對象的包。對象可分布在多個容器之間。容器通 常存儲在單個邏輯擦除塊內(存儲部)并且通常不分散在邏輯擦除塊間。在一個實例中,容器可分散在兩個或更多個邏輯/虛擬頁間。通過將容器 與對象關聯(lián)起來的容器標簽確定容器。容器可包含O個到許多個包并且容器內 的這些包通常來自一個對象。包可以有許多對象元素類型(包括對象屬性元、 對象數(shù)據(jù)元、對象索引元和類似的元素類型)??梢詣?chuàng)建包括不止一個對象 元類型的混合包。每個包可包含O個到許多個同一類型的元。容器內的每個包 通常都包含標識與對象關系的唯一標識符。每個包與一個容器相關聯(lián)。在優(yōu)選實施方式中,容器被限于擦除塊,以 使得在每個擦除塊的起始部分或在擦除塊的起始部分附近能發(fā)現(xiàn)容器包。這 有助于將數(shù)據(jù)丟失限制在具有損壞的包頭的擦除塊范圍內。在這種實施方式 中,如果對象索引不可用并且擦除塊內的包頭損壞,由于可能沒有可靠的機 制確定后繼包的位置,從損壞的包頭到擦除塊尾的內容可能會丟失。在另一 種實施方式中,更可靠的方法是采用限于頁的邊界的容器。這種實施方式需 要更多包頭開銷。在另一種實施方式中,容器可流經(jīng)頁面和擦除塊邊界。這 種方法需要較少的包頭開銷,但是,如果包頭損壞,則有可能會丟失更多部 分的數(shù)據(jù)。對這些實施方式來說,使用一些類型的RAID以進一步保證數(shù)據(jù)完 整性是可以預期的。在一種實施方式中,裝置200包括對象索引重建模塊272,該對象索引重 建模塊272采用來自存儲在數(shù)據(jù)存儲設備154中的包頭的信息重建所述對象索 引中的項。在一種實施方式中,對象索引重建模塊272通過讀取包頭(以確定 每個包所屬的對象)和序列信息(以確定數(shù)據(jù)或元數(shù)據(jù)在對象中所屬的位置) 來重建所述對象索引的項。對象索引重建模塊272采用每個包的物理地址信息 和時間戳或序列信息以創(chuàng)建包的物理地址和對象標識符和數(shù)據(jù)段序列間的映 射。對象索引重建^^莫塊272使用時間戳或序列信息以再現(xiàn)索引變更的順序并通 常因此重建最近的狀態(tài)。在另一種實施方式中,對象索引重建^^塊272采用包頭信息以及容器包信 息放置包以識別包的物理位置、對象標識符和每個包的序列號,從而在所述 對象索引中重建項。在一種實施方式中,在寫入數(shù)據(jù)包時,擦除塊被戳記上 時間,或者賦給擦除塊序列號,并且擦除塊的時間戳或序列信息和來自容器 頭和包頭的信息一起使用以重建對象索引。在另一種實施方式中,當擦除塊 恢復時,時間戳或序列信息被寫入該擦除塊。當對象索引存儲在易失性存儲器中時,如果不能重建所述對象索引,錯 誤、失電、或其他導致存儲控制器152未存儲所述對象索引而停工的因素可能 會成為問題。對象索引重建模塊272允許所述對象索引存儲在具有易失性存儲 體優(yōu)點(如快速存取)的易失性存儲體中。對象索引重建;f莫塊272允許自主地 快速重建所述對象索引,而并不需要依靠位于存儲設備150外的設備。在一種實施方式中,易失性存儲體中的所述對象索引周期性地存儲在數(shù) 據(jù)存儲設備154內。在具體的實例中,所述對象索引或"索引元數(shù)據(jù)"周期性地 存儲固態(tài)存儲器110中。在另一種實施方式中,所述索引元數(shù)據(jù)存儲在固態(tài)存 儲器110n (與固態(tài)存儲器110a-110n-l存儲包分離)中。獨立于數(shù)據(jù)和對象元 數(shù)據(jù)管理所述索引元數(shù)據(jù),所述數(shù)據(jù)和對象元數(shù)據(jù)傳送自請求設備155并且由 存儲控制器152/固態(tài)存儲控制器202管理。管理和存儲與其他來自對象的數(shù)據(jù) 和元數(shù)據(jù)分離的索引元數(shù)據(jù)允許有效的數(shù)據(jù)流,同時存儲控制器152/固態(tài)存儲 設備控制器202并不會不必要地處理對象元數(shù)據(jù)。在一種實施方式中,其中,由對象請求接收器模塊260接收到的對象請求 包括寫入請求,存儲控制器152通過本地或遠程直接存儲器存取("DMA"、 "RDMA")操作接收來自請求設備155的內存的一個或多個對象數(shù)據(jù)段。在優(yōu)選實例中,存儲控制器152在一次或多次DMA或RDMA操作中從請求設備i 55 的內存中讀取數(shù)據(jù)。在另 一實例中,請求設備l55在一次或多次DMA或RDMA 操作中將所述數(shù)據(jù)段寫入存儲控制器152。在另一種實施方式中,其中,所述 對象請求包括讀請求,存儲控制器152在一次或多次DMA或RDMA操作中將對 象的一個或多個數(shù)據(jù)段傳送給請求設備155的內存。在優(yōu)選實例中,存儲控制 器152在一次或多次DMA或RDMA操作中將數(shù)據(jù)寫入請求設備155的內存。在 另 一 實例中,請求設備在一次或多次DMA或RDMA操作中從存儲控制器152 中讀取數(shù)據(jù)。在另 一實施方式中,存儲控制器152在一次或多次DMA或RDMA 操作中從請求設備155的內存中讀取對象命令請求集。在另一實例中,請求設 備l55在一次或多次DMA或RDMA操作中將對象命令請求集寫入存儲控制器 152。在一種實施方式中,存儲控制器152仿真塊存儲,并且在請求設備155和 存儲控制器152之間通信的對象包括一個或多個數(shù)據(jù)塊。在一種實施方式中, 請求設備155包括驅動器,以使得存儲設備150表現(xiàn)為塊存儲設備。例如請求 設備155可與請求設備155期望數(shù)據(jù)存儲的物理地址一起發(fā)送特定大小的一組 數(shù)據(jù)。存儲控制器152接收所述數(shù)據(jù)塊,并將與所述數(shù)據(jù)塊一起傳送的物理塊 地址或者將物理塊地址的轉化形式作為對象標識符。然后,存儲控制器152通 過隨意地封包所述數(shù)據(jù)塊和存儲數(shù)據(jù)塊將所述數(shù)據(jù)塊存儲為對象或對象的數(shù) 據(jù)段。然后,.對象索引模塊266利用基于物理塊的對象標識符和存儲控制器152 存儲所述數(shù)據(jù)包的實際物理位置在所述對象索引中創(chuàng)建項,所述數(shù)據(jù)包包括 來自所述數(shù)據(jù)塊的數(shù)據(jù)。在另一種實施方式中,存儲控制器152通過4妻收塊對象仿真塊存儲。塊 對象可包括塊結構中的一個或多個數(shù)據(jù)塊。在一種實施方式中,存儲控制器 152像處理任意其他對象一樣處理所述塊對象。在另一種實施方式中,對象可 代表整個塊設備、塊設備的分區(qū)或塊設備的一些其他邏輯子元件或物理子元 件,所述塊設備包括磁道、扇區(qū)、通道及類似設備。值得特別注意的是將塊 設備RAID組重映射到支持不同RAID構建(如漸進RAID )的對象。本領域 技術人員會認識到將傳統(tǒng)的或未來的塊設備映射到對象的其他方法固態(tài)存儲設備圖2B是示出了根據(jù)本發(fā)明的位于固態(tài)存儲設備102內的固態(tài)存儲設備控制器202的一種實施方式201的示意性框圖,該固態(tài)存儲設備控制器202包括寫 入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108。固態(tài)存儲設備控制器202可包括若干固態(tài) 存儲控制器O-N, 104a-n,每個固態(tài)存儲控制器都控制固態(tài)存儲器]10。在描述 的實施方式中,示出了兩個固態(tài)控制器固態(tài)控制器O 104 a和固態(tài)控制器N 104n,并且它們中的每一個都控制固態(tài)存儲器110a-n。在描述的實施方式中, 固態(tài)存儲控制器O 104a控制數(shù)據(jù)通道,以使得附屬固態(tài)存儲器110a存儲數(shù)據(jù)。 固態(tài)存儲控制器N 104n控制與存儲的數(shù)據(jù)關聯(lián)的索引元數(shù)據(jù)通道,以使得關 聯(lián)的固態(tài)存儲器110n存儲索引元數(shù)據(jù)。在替代的實施方式中,固態(tài)存儲設備 控制器202包括具有單個固態(tài)存儲器110a的單個固態(tài)控制器104a。在另一種實 施方式中,存在大量的固態(tài)存儲控制器104a-n和關聯(lián)的固態(tài)存儲器110a-n。在 一種實施方式中, 一個或多個固態(tài)控制器104a-104n-l (與它們的關聯(lián)固態(tài)存 儲器110a-110n-l連接)控制數(shù)據(jù),而至少一個固態(tài)存儲控制器104n (與其關 聯(lián)固態(tài)存儲器110n連接)控制索引元數(shù)據(jù)。
在一種實施方式中,至少一個固態(tài)控制器104是現(xiàn)場可編程門陣列 ("FPGA")并且控制器功能被編入FPGA。在特定的實施方式中,F(xiàn)PGA是 Xilinx⑧公司的FPGA。在另一種實施方式中,固態(tài)存儲控制器104包括專門 設計為固態(tài)存儲控制器104的組件(如專用集成電路("ASIC")或自定義邏 輯解決方案)。每個固態(tài)存儲控制器104通常包括寫入數(shù)據(jù)管道106和讀取數(shù) 據(jù)管道108,結合圖3進一步描述了這兩個管道。在另一種實施方式中,至少 一個固態(tài)存儲控制器104由FPGA、 ASIC和自定義邏輯組件的組合組成。 固態(tài)存儲器
固態(tài)存儲器110是非易失性固態(tài)存儲元件216、 218、 220的陣列,該陣列 布置在內存庫214中并且通過雙向存儲輸入輸出(I/O)總線210并行訪問。在 一種實施方式中,存儲I/O總線210能夠在任何一個時刻進行單向通信。例如, 當將數(shù)據(jù)寫入固態(tài)存儲器110時,不能從固態(tài)存儲器110中讀取數(shù)據(jù)。在另一 種實施方式中,數(shù)據(jù)可同時雙向地流動。然而,雙向(如此處針對數(shù)據(jù)總線 使用的)指在同一時間數(shù)據(jù)僅在一個方向流動的數(shù)據(jù)通路,但是,當在雙向 數(shù)據(jù)總線上流動的數(shù)據(jù)被阻止時,數(shù)據(jù)可在所述雙向總線上沿相反方向流動。
固態(tài)存儲元件(如SSS0.0 216a)通常被配置為芯片(一個或多個小片的 封裝)或電路板上的小片。正如所描述的那樣,固態(tài)存儲元件(如216a)獨立于或半獨立于其他固態(tài)存儲元件(如218a)運行,即使這些元件被一起封
裝在芯片包、芯片包的堆?;蛞恍┢渌獍取U缢枋龅?, 一列固
態(tài)存儲元件216、 218、 220被指定為內存庫214。正如所描述的,可以有"n,,個 內存庫214a-n并且每個內存庫可以有"m"個固態(tài)存儲元件216a-m, 218a-m , 220a-m,從而在固態(tài)存儲器110中成為固態(tài)存儲元件216、218、220的n承m陣列。 在一種實施方式中,固態(tài)存儲器110a在每個內存庫214 (有8個內存庫2")中 包括20個固態(tài)存儲元件216、 218、 220,并且,固態(tài)存儲器l 10n在每個內存庫 214中(只有一個內存庫214)包括兩個固態(tài)存儲元件216、 218。在一種實施 方式中,每個固態(tài)存儲元件216、 218、 220由單層單元("SLC")設備組成。 在另一種實施方式中,每個固態(tài)存儲元件216、 218、 220由多層單元("MLC") 設備組成。
在一種實施方式中,用于多個內存庫的固態(tài)存儲元件被封包在一起,所 述多個內存庫共享公用存儲I/O總線210a行(如216b、 218b、 220b)。在一種 實施方式中,固態(tài)存儲元件216、218、220的每個芯片可具有一個或多個小片, 而一個或多個芯片垂直堆疊且每個小片可被獨立存取。在另 一種實施方式中, 固態(tài)存儲元件(如SSS0.0 216a)的每個小片可具有一個或多個虛擬小片,每 個芯片可具有一個或多個小片,而一個或多個小片中的一些或全部垂直堆疊 且每個虛擬小片可被獨立存取。
在一種實施方式中,每組有四個堆,每堆有兩個小片垂直堆疊,從而形 成8個存儲元件(如SSS0.0-SSS0.8) 216a-220a,每個存儲元件位于分離的內 存庫214a-n內。在另一種實施方式中,20個存儲元件(如SSS O.O-SSS 20.0) 216形成虛擬內存庫214a,因此八個虛擬內存庫中的每一個都具有20個存儲元 件(如SSS0.0-SSS20.8) 216、 218、 220。通過存儲I/O總線210將數(shù)據(jù)發(fā)送到 固態(tài)存儲器110,并發(fā)送到存儲元件(SSS O.O-SSS 0.8) 216a、 218a、 220a的 特定組的所有存儲元件。存儲控制總線212a用于選擇特定的內存庫(如內存 庫-0 214a),從而通過連接到所有內存庫214的存儲I/O總線210接收到的數(shù)據(jù) 僅#皮寫入選定的內存庫214a。
在優(yōu)選實施方式中,存儲I/O總線210由一個或多個獨立I/O總線(包括 210a.a-m, 210n.a-m的"IIOBa-m")組成,其中,每一行內的固態(tài)存儲元件共享 獨立I/0總線中的一條,所述獨立I/0總線中的一條平行訪問每個固態(tài)存儲元件216、 218、 220,從而使得同時訪問所有的內存庫214。例如,存儲:I/0總線210 的一個通道可同時訪問每個內存庫214a-n的第 一 固態(tài)存儲元件216a、 218a、 220a。存儲I/0總線210的第二通道可同時訪問每個內存庫214a-n的第二固態(tài)存 儲元件216b、 218b、 220b。固態(tài)存儲元件216、 218、 220的每一行都被同時訪 問。在一種實施方式中,其中,固態(tài)存儲元件216、 218、 220是多層的(物理 堆疊的),固態(tài)存儲元件216、 218、 220的所有物理層^f皮同時訪問。正如此處 所4吏用的,"同時"還包括幾乎同時的訪問,其中,以略有不同的時間間隔訪問 設備以避免切換噪聲。在這種情況下,同時被用于與連續(xù)的或系列的訪問相 區(qū)別,其中,命令和/或數(shù)據(jù)被單獨地并相繼地發(fā)送。
通常,采用存儲控制總線212獨立地選擇內存庫214a-n。在一種實施方式 中,采用芯片選通或芯片選擇來選擇內存庫214。當芯片選擇和芯片使能均可 用時,存儲控制總線212可選擇多層固態(tài)存儲元件216、 218、 220中的一層。 在其他實施方式中,存儲控制總線212使用其他命令來單獨地選擇多層固態(tài)存 儲元件216、 218、 220中的一層。還可通過控制和地址信息的結合來選擇固態(tài) 存儲元件216、 218、 220,所述控制和地址信息在存儲I/O總線210和存儲控制 總線212上傳輸。
在一種實施方式中,每個固態(tài)存儲元件216、 218、 220被分割成擦除塊, 并且每個擦除塊被分割成頁。典型的頁的容量為2000字節(jié)("2kB")。在一個 實例中,固態(tài)存儲元件(如SSS 0.0)包括兩個寄存器并能編程為兩頁,從而 雙寄存器固態(tài)存儲元件216、 218、 220具有4kB的容量。20個固態(tài)存儲元件216 、 218、 220的內存庫214就會有80kB的頁訪問容量,同時同 一地址流出存儲1/0 總線210的通道。
在固態(tài)存儲元件216、 218、 220的內存庫214中的這一組80kB大小的頁可 稱為虛擬頁。類似地,內存庫214a的每個存儲元件216a-m的擦除塊可被分組 以形成虛擬塊。在優(yōu)選實施方式中,當在固態(tài)存儲元件216、 218、 220中接收 到擦除命令時,擦除位于固態(tài)存儲元件216、 218、 220內的頁擦除塊。然而, 在固態(tài)存儲元件216、 218、 220內的擦除塊、頁、平面層或其他邏輯和物理部 分的大小和數(shù)量預計會隨著技術的進步而變化,可以預期的是,與新配置一 致的許多實施例是可能的并與本文的 一般描述相 一致。
通常,當將包寫入固態(tài)存儲元件216、 218、 220內的特定位置時,其中,擬將所述包寫入特定頁內的位置,所述特定頁對應于特定內存庫的特定元件 的特定擦除塊的頁,在發(fā)送所述包之后通過存儲I/O總線210發(fā)送物理地址。所
述物理地址包含足夠的信息,以使得固態(tài)存儲元件216、 218、 220將所述包導 入頁內的指定位置。由于存儲元件行(如SSS0.0-SSS0.N216a、 218a、 220a) 上的存儲元件通過存儲I/O總線210a.a內的合適總線同時被訪問,為了到達合 適的頁并將所述數(shù)據(jù)包寫入在存儲元件行(SSS O.O-SSS 0.N216a、 218a、 220a) 中具有相似地址的頁,存儲控制總線212同時選擇內存庫214a (包括具有要將 所述數(shù)據(jù)包寫入其內的正確頁的固態(tài)存儲元件SSS 0.0 216a)。
類似地,在存儲I/O總線210上傳輸?shù)淖x命令需要同時在存儲控制總線212 上傳輸?shù)拿?,以選擇單個的內存庫214a和內存庫214內的合適頁。在優(yōu)選實 施方式中,讀命令讀取整個頁,并且由于在內存庫214內存在許多并行的固態(tài) 存儲元件216、 218、 220,讀命令讀取整個虛擬頁。然而,所述讀命令可分割 為子命令,這將在下文中結合內存庫交錯進行解釋。還可以在寫操作中訪問 虛擬頁。
可通過存儲I/O總線210發(fā)出的擦除塊擦除命令以擦除擦除塊,該擦除塊具 有特定的擦除塊地址以擦除特定的擦除塊。通常,可通過存儲I/O總線210的并 行通路發(fā)送擦除塊擦除命令以擦除虛擬擦除塊,每個虛擬擦除塊具有特定的 擦除塊地址以擦除特定的擦除塊。同時,通過存儲控制總線212選擇特定的內 存庫(如內存庫-0 214a)以防止擦除所有的內存庫(內存庫l-N214b-n)中的 具有類似地址的擦除塊。還可采用存儲I/O總線210和存儲控制總線212的結合 將其他命令發(fā)送到特定位置。本領域技術人員會認識到采用雙向存儲I/0總線 210和存儲控制總線212選擇特定存儲單元的其他方法。
在一種實施方式中,將包順序地寫入固態(tài)存儲器110。例如,包流到存儲 元件216的內存庫214a的存儲寫入緩沖器,并且當所述緩沖器飽和時,所述包 被編程入指定的虛擬頁。然后所述包再次填充所述存儲寫入緩沖器,并且當 所述存儲緩沖器再次飽和時,所述包被寫入下一虛擬頁。所述下一個虛擬頁 可位于同一個內存庫214a內或可位于另一個內存庫(如214b)內。這個過程 (一個虛擬頁接一個虛擬頁)通常一直持續(xù)到虛擬塊被填滿時。在另一種實 施方式中,當這個過程(一個虛擬擦除塊接一個虛擬擦除塊)持續(xù)時,數(shù)據(jù) 流可繼續(xù)越過虛擬擦除塊邊界。在讀、修改、寫操作中,在讀操作中定位并讀取與所述對象關聯(lián)的數(shù)據(jù) 包。已被修改的修改對象的數(shù)據(jù)段并不寫入讀取它們的位置。取而代之,修 改的數(shù)據(jù)段再次被轉化為數(shù)據(jù)包并隨后被寫入正在被寫入的虛擬頁中的下一 個可用位置。各個數(shù)據(jù)包的所述對象索引項被修改為指向包含已修改的數(shù)據(jù) 段的包。所述對象索引中用于與同一對象(未被修改)關聯(lián)的數(shù)據(jù)包的項(或 多個項)會包括指向未被修改的數(shù)據(jù)包的源位置的指針。因此,如果源對象 保持不變(例如保持所述對象的先前版本不變),所述源對象將在所述對象 索引中具有指向所有與最初寫入的一樣的數(shù)據(jù)包的指針。新對象將在所述對 象索引中具有指向一些源數(shù)據(jù)包的指針和指向正在被寫入的虛擬頁中的修改 的數(shù)據(jù)包的指針。
在復制操作中,所述對象索引包括用于源對象的項,該源對象映射到若 干存儲在固態(tài)存儲器110中的包。當復制完拷貝時,創(chuàng)建了新對象并在所述對 象索引中創(chuàng)建將所述新對象映射到源包的新項。還將所述新對象寫入固態(tài)存
儲器rio,且所述新對象的地址映射到所述對象索引中的新項。新對象包可用 于確定在源對象中的包,該包被引用以防在未復制的源對象中發(fā)生改變并以 防對象索引丟失或損壞。
有利地是,順序地寫入包有助于更平滑地使用固態(tài)存儲器110并允許固態(tài) 存儲設備控制器202監(jiān)測固態(tài)存儲器110內的存儲熱點和不同虛擬頁的層使用
狀況。相繼地寫入包還可有助于建立強大、高效的垃圾收集系統(tǒng),這將在下 文中詳細描述。本領域技術人員會認識到順序地存儲數(shù)據(jù)包的其他好處。 固態(tài)存儲設備控制器
在不同的實施方式中,固態(tài)存儲設備控制器202還可包括數(shù)據(jù)總線204、 局部總線206、緩沖控制器208、緩沖器O-N 222a-n,主控制器224、直接存儲 器存取("DMA")控制器226、存儲器控制器228、動態(tài)存儲器陣列230、靜態(tài) 隨機存儲器陣列232、管理控制器234、管理總線236、連接系統(tǒng)總線240的網(wǎng) 橋238和雜項邏輯塊242,這些將在下文中描述。在其他實施方式中,系統(tǒng)總 線240與一個或多個網(wǎng)絡接口卡("NIC") 244相連接,這些網(wǎng)絡接口卡中的一 些可包括遠程DMA ("RDMA")控制器246、 一個或多個中央處理器("CPU") 248、 一個或多個外部存儲器控制器250和關聯(lián)的外部存儲器陣列252、 一個或 多個存儲控制器254、對等控制器256和專用處理器258,這將在下文描述。連接到系統(tǒng)總線240的組件244-258可位于計算內112內或者可以為其他設備。
通常,固態(tài)存儲控制器104通過存儲I/O總線210與固態(tài)存儲器110進行數(shù)據(jù) 通信。在典型的實施方式中,固態(tài)存儲器布置在內存庫214內,且每個內存庫 214包括多個并行訪問的存儲元件216、 218、 220,存儲I/O總線210是多條總線 的陣列,每一條總線用于內存庫214內的存儲元件216、 218、 220的每一行。 正如此處所使用的,術語"存儲I/O總線"可指一條存儲I/O總線210或多條獨立 的數(shù)據(jù)總線204的陣列。在優(yōu)選實施方式中,訪問存儲元件的行(如216、218a、 220a)的每條存儲I/O總線210可包括在存儲元件216、 218a、 220a的行中訪問 的存儲部(如擦除塊)的邏輯-物理映射。如果第一存儲部失效、部分失效、 不可訪問或出現(xiàn)一些其他問題時,這種映射允許映射到存儲部的物理地址的 邏輯地址重映射到不同的存儲部。相對于圖3中重映射模塊314進一步解釋了 重映射。
還可通過系統(tǒng)總線240、網(wǎng)橋238、局部總線206、緩沖器22并最終通過數(shù) 據(jù)總線204將數(shù)據(jù)從請求設備155傳送到固態(tài)存儲控制器104。數(shù)據(jù)總線204通 常連接到一個或多個由緩沖控制器208控制的緩沖器222a-n。緩沖控制器208 通??刂茢?shù)據(jù)從局部總線206傳遞到緩沖器222并通過數(shù)據(jù)總線204傳遞到管 道輸入緩沖器306和輸出緩沖器330。為了解決時鐘域差異、防止數(shù)據(jù)沖突等 等,緩沖控制器208通??刂圃诰彌_器222中暫時存儲來自請求設備的數(shù)據(jù)的 方式,并控制此后傳送給數(shù)據(jù)總線204 (或相反)的方式。緩沖控制器208通 常與主控制器224結合使用以協(xié)調數(shù)據(jù)流。當數(shù)據(jù)到達時,所述數(shù)據(jù)會到達系 統(tǒng)總線240并通過網(wǎng)橋23 8傳遞給局部總線206.
通常,數(shù)據(jù)在主控制器224和緩沖控制器208的控制下從局部總線206傳遞 給一個或多個數(shù)據(jù)緩沖器222。然后,所述數(shù)據(jù)通過固態(tài)控制器104從緩沖器 222流向數(shù)據(jù)總線204并到達固態(tài)存儲器l 10(如NAND閃存或其他存儲媒體)。 在優(yōu)選實施方式中,數(shù)據(jù)與與所述數(shù)據(jù)一起到達的關聯(lián)的帶外元數(shù)據(jù)("對象 元數(shù)據(jù)")釆用一個或多個的數(shù)據(jù)通道被送達,所述數(shù)據(jù)通道包括一個或多個 固態(tài)存儲控制器104a-104n-l和關聯(lián)的固態(tài)存儲器110a-110n-l,而至少一個通 道(固態(tài)存儲控制器104n、固態(tài)存儲器110n)用于帶內元數(shù)據(jù)(如索引信息 和其他固態(tài)存儲設備02內部生成的元數(shù)據(jù))。
局部總線206通常為雙向總線或總線組,所述雙向總線或總線組允許數(shù)據(jù)和命令在固態(tài)存儲設備控制器202內部的設備間通信,也允許命令和數(shù)據(jù)在固
態(tài)存儲設備102內部的設備和與系統(tǒng)總線240連接的設備244-258之間通信。網(wǎng)橋238有助于在局部總線206和系統(tǒng)總線240之間的通信。本領域技術人員會認識到其他實施方式,如總線240、 206、 204、 210和網(wǎng)橋238的環(huán)結構或交換式星形配置和功能。
系統(tǒng)總線240通常是計算機、安裝有或連接有固態(tài)存儲設備102的其他設備的總線。在一種實施方式中,系統(tǒng)總線240可以為PCl-e總線、串行高級技術附件("串行ATA")總線、并行ATA或類似總線。在另一種實施方式中,系統(tǒng)總線240為外部總線,例如小型計算機系統(tǒng)接口 ("SCSI")、防火墻、光纖通道、USB、 PCIe-As或類似總線。固態(tài)存儲設備102可被封裝為適于置于設備內部或被封裝為外部連接設備。
固態(tài)存儲設備控制器202包括在固態(tài)存儲設備102內控制較高級別功能的主控制器224。在不同的實施方式中,主控制器224通過解釋對象請求和其他請求來控制數(shù)據(jù)流,指導創(chuàng)建索引,該索引將與數(shù)據(jù)關聯(lián)的對象標識符映射到關聯(lián)的數(shù)據(jù)(或協(xié)調的DMA請求等)的物理地址。主控制器224完全地或部分地控制此處描述的許多功能。
在一種實施方式中,主控制器224采用嵌入式控制器。在另一種實施方式中,主控制器224采用局部存儲器,如動態(tài)存儲器陣列230 (動態(tài)隨機存取存儲器"DRAM")、靜態(tài)存儲器陣列323 (靜態(tài)隨機存取存儲器"SRAM")等。在一種實施方式中,采用主控制器224控制局部存儲器。在另一實施方式中,主控制器通過存儲器控制器228訪問局部存儲器。在另一種實施方式中,所述主控制器運行Linux服務器并可支持各種常用服務器接口,如萬維網(wǎng)、超文本標記語言("HTML")等。在另一種實施方式中,主控制器224采用納米處理器。可采用可編程或標準邏輯或上述控制器類型的任意組合來構建主控制器224。本領域技術人員會認識到主控制器的許多實施方式。
在一種實施方式中,其中,存儲設備152/固態(tài)存儲設備控制器202管理多個數(shù)據(jù)存儲設備/固態(tài)存儲器l 10a-n,主控制器224在內部控制器(如固態(tài)存儲控制器104a-n)之間分配工作負載。例如,主控制器224可分割將要被寫入數(shù)據(jù)存儲設備(如固態(tài)存儲器110a-n)中的對象,使得每個附屬的數(shù)據(jù)存儲設備存儲所述對象的 一部分。這種特征是允許更快地存儲和訪問對象的性能增強。在一種實施方式中,主控制器224利用FPGA實施。在另一種實施方式中,位于主控制器224內的固件可通過管理總線236、通過網(wǎng)絡連"t妾到NIC244的系統(tǒng)總線240或其他連接到系統(tǒng)總線240的設備更新。
在一種實施方式中,管理對象的主控制器224仿真塊存儲,從而使得計算機102或其他連接到存儲設備152/固態(tài)存儲設備102的設備將存儲設備152/固
120中的特定物理地址。然后,主控制器224分配塊并像存儲對象一樣存儲數(shù)據(jù)塊。然后,主控制器224將塊和與塊一起發(fā)送的物理地址映射到由主控制器224確定的實際位置。映射存儲在對象索引中。通常,對于塊仿真來說在計算機l 12、客戶端114或其他希望將存儲設備152/固態(tài)存儲設備l02當成塊存儲設備來使用的設備中提供有塊設備應用程序接口 ("API")。
在另 一種實施方式中,主控制器224與NIC控制器244和嵌入式RDMA控制器246協(xié)同運行以提供準時的RDMA數(shù)據(jù)和命令集傳輸。NIC控制器244可隱藏在非透明端口后以使得能夠使用自定義的驅動器。同樣地,客戶端114上的驅動器可通過采用標準棧API的并與NIC244結合運行的I/0存儲驅動器訪問計算機網(wǎng)絡118。
在一種實施方式中,主控制器224也是獨立驅動器冗余陣列("RA1D")控制器。當數(shù)據(jù)存儲設備/固態(tài)存儲設備120與一個或多個其他數(shù)據(jù)存儲設備/固態(tài)存儲設備120聯(lián)網(wǎng)時,主控制器224可以是用于單層RAID、多層RAID、漸進RAID等的RAID控制器。主控制器224還允許一些對象存儲在RAID陣列內而其他對象不通過RAID存儲。在另一種實施方式中,主控制器224可以是分布式RAID控制器元件。在另一種實施方式中,主控制器224可包括許多RA1D、分布式RAID和另行描述的其他功能。
在一種實施方式中,主控制器224與單個或多個網(wǎng)絡管理器(如交換機)協(xié)同運行以建立路由、平衡帶寬使用率、故障轉移等。在另一種實施方式中,主控制器224與集成專用邏輯器件(通過局部總線206 )和關聯(lián)的驅動器軟件協(xié)同運行。在另一種實施方式中,主控制器224與附屬專用處理器258或邏輯器件(通過外部系統(tǒng)總線240)和關聯(lián)的驅動器軟件協(xié)同運行。在另一種實施方式中,主控制器224與遠程專用邏輯器件(通過計算機網(wǎng)絡118)和關聯(lián)的驅動器軟件協(xié)同運行。在另一種實施方式中,主控制器224與局部總線206或附屬于硬盤驅動器("HDD")存儲控制器的外部總線協(xié)同運行。
在一種實施方式中,主控制器224與一個或多個存儲控制器254通信,其中存儲設備/固態(tài)存儲設備120可表現(xiàn)為通過SCSI總線、因特網(wǎng)SCSI( "iscsr,)、光纖通道等連接的存儲設備。同時,存儲設備/固態(tài)存儲設備120可自主地管理對象并可表現(xiàn)為對象文件系統(tǒng)或分布式對象文件系統(tǒng)。還可通過對等控制器256和/或專用處理器258訪問主控制器224。
在另一種實施方式中,主控制器224與自主集成管理控制器協(xié)同運行以周期性地驗證FPGA碼和/或控制器軟件、在運行(復位)時驗證FPGA碼和/或在通電(復位)期間驗證控制器軟件、支持外部復位請求、支持由于檢查包而超時的復位請求,并支持電壓、電流、功率、溫度及其他環(huán)境測量和閾值中斷設置。在另一種實施方式中,主控制器224管理垃圾收集以釋放擦除塊用于再次使用。在另一種實施方式中,主控制器224管理耗損均衡。在另一種實施方式中,主控制器224允許數(shù)據(jù)存儲設備/固態(tài)存儲設備102被分割成多個虛擬設備并允許基于分區(qū)的媒體加密。在又一種實施方式中,主控制器224支持具有高級的、多位的ECC修正的固態(tài)存儲控制器104。本領域技術人員會認識到位于存儲控制器152內(或更具體地說位于固態(tài)存儲設備102內)的主控制器224的其他特征和功能。
在一種實施方式中,固態(tài)存儲設備控制器202包括存儲器控制器228,該存儲器控制器228控制動態(tài)隨機存儲器陣列230和/或靜態(tài)隨機存儲器陣列232。如上所述,存儲器控制器228可獨立于主控制器224使用或與主控制器224集成使用。存儲器控制器228通??刂乞炞C一些存儲器類型,如DRAM(動態(tài)隨機存儲器陣列230)和SRAM (靜態(tài)隨機存儲器陣列232 )。在其他實例中,存儲器控制器228還控制其他存儲器類型,如電可擦可編程序只讀存儲器("EEPROM")等。在其他實施方式中,存儲器控制器228控制兩種或更多種存儲器類型且存儲器控制器228可包括不止一個控制器。通常,存儲器控制器228在可行情況下控制盡可能多的SRAM232,并且通過DRAM230補足SRAM232。
在一種實施方式中,所述對象索引存儲在存儲器230、 232中并周期性的被卸載到固態(tài)存儲器110n或其他非易失性存儲器的通道內。本領域技術人員會認識到存儲器控制器228、動態(tài)存儲器陣列230、靜態(tài)存儲器陣列232的其他運用和配置。
在一種實施方式中,固態(tài)存儲設備控制器202包括DMA控制器226,該DMA控制器226控制在下列設備之間的DMA操作存儲設備/固態(tài)存儲設備102、 一個或多個外部存儲器控制器250、關聯(lián)的外部存儲器陣列252和CPU248。應該注意到,外部存儲器控制器250和外部存儲器陣列252之所以被稱為外部是因為它們位于存儲設備/固態(tài)存儲設備102的外部。此外,DMA控制器226還可通過NIC244和關聯(lián)的RDMA控制器246控制請求設備的RDMA操作。DMA和RDMA在下文中有詳細說明。
在一種實施方式中,固態(tài)存儲設備控制器202包括連接到管理總線236的管理控制器234。通常管理控制器234管理存儲設備/固態(tài)存儲設備102的環(huán)境指標和狀態(tài)。管理控制器234可通過管理總線236監(jiān)測設備溫度、風扇轉速、電力供應設置等。管理控制器可支持電可擦可編程序只讀存儲器("EEPROM")以存儲FPGA碼和控制器軟件。通常,管理總線236連接到存儲設備/固態(tài)存儲設備102內的不同組件。管理控制器234可通過局部總線206進行警報、中斷等的通信或可包括單獨的到系統(tǒng)總線240或其他總線的連接。在一種實施方式中,管理總線236為內部集成電路("I2C")總線。本領域技術人員會認識到通過管理總線236連接到存儲設備/固態(tài)存儲設備102的組件的管理控制器234的其他功能和運用。
在一種實施方式中,固態(tài)存儲設備控制器202包括雜項邏輯塊242,該雜項邏輯塊242可被定制為專用。通常,當固態(tài)設備控制器202或主控制器224被配置為使用FPGA或其他可配置控制器時,可基于特定應用、用戶需求、存儲需求等而包括定制邏輯。
數(shù)據(jù)管道
圖3是示出了根據(jù)本發(fā)明的位于固態(tài)存儲設備102內的固態(tài)存儲設備控制器104的 一種實施方式300的示意性框圖,該固態(tài)存儲設備控制器具有寫入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108。實施方式300包括數(shù)據(jù)總線204、局部總線206和緩沖控制器208,這些設備大體上類似于相對于圖2中固態(tài)存儲設備控制器202描述的設備。所述寫入數(shù)據(jù)管道包括封包器302和糾錯碼("ECC")發(fā)生器304。在其他實施方式中,所述寫入數(shù)據(jù)管道包括輸入緩沖器306、寫入同步緩沖器308、寫入程序模塊310、壓縮模塊312、加密模塊314、垃圾收集器旁路316(部分位于所述讀取數(shù)據(jù)管道內)、々某體加密模塊318和寫入緩沖器320。 讀取數(shù)據(jù)管道108包括讀取同步緩沖器328、 ECC糾錯模塊322、解包器324、 對齊模塊326和輸出緩沖器330。在另一種實施方式中,讀取數(shù)據(jù)管道108可包 括媒體解密模塊332、垃圾收集器旁路316的一部分、解密模塊334、解壓縮模 塊336和讀取程序模塊338。固態(tài)存儲控制器]04還可包括控制與狀態(tài)寄存器 340和控制隊列342、內存庫交錯控制器344、同步緩沖器346、存儲總線控制 器348及多路轉換器("MUX") 350。固態(tài)控制器104的組件和關聯(lián)的寫入數(shù)據(jù) 管道106和讀取數(shù)據(jù)管道108描述如下。在其他實施方式中,可采用同步固態(tài) 存儲器110并且可不使用同步緩沖器308、 328。 寫入數(shù)據(jù)管道
寫入數(shù)據(jù)管道106包括封包器302 ,該封包器直接地或間接地通過另 一寫 入數(shù)據(jù)管道106的級接收將要被寫入固態(tài)存儲器的數(shù)據(jù)或元數(shù)據(jù)段,并創(chuàng)建一 個或多個大小適于固態(tài)存儲器110的包。所述數(shù)據(jù)或元數(shù)據(jù)段通常是對象的一 部分,但也可包括整個對象。在另一種實施方式中,所述數(shù)據(jù)段是數(shù)據(jù)塊的 一部分,但也可包括整個數(shù)據(jù)塊。通常,對象接收自計算機112、客戶端114 或其他計算機或設備并被以流向固態(tài)存儲設備102或計算機112的數(shù)據(jù)段的形 式傳送給固態(tài)存儲設備102。數(shù)據(jù)段也可被稱為另一名稱(如數(shù)據(jù)包裹),本 文所提及的數(shù)據(jù)段包括對象或數(shù)據(jù)塊的全部或一部分。
每個對象被存為一個或多個包。每個對象可具有一個或多個容器包。每 個包包含包頭。所述包頭可包括包頭類型字段。類型字段可包括數(shù)據(jù)、對象 屬性、元數(shù)據(jù)、數(shù)據(jù)段定界符(多包)、對象結構、對象連接及類似物。所 述包頭還可包括關于包的大小的信息(如包內的數(shù)據(jù)的字節(jié)數(shù))。所述包的 長度可由包類型確實。 一個實例可能是利用數(shù)據(jù)包包頭的偏移值來確定對象 內數(shù)據(jù)段的位置。本領域技術人員會認識到其他包含在由封包器302添加到數(shù) 據(jù)上的包頭內的信息和其他添加到數(shù)據(jù)包的信息。
每個包包括包頭,還可能包括來自所述數(shù)據(jù)和元數(shù)據(jù)段的數(shù)據(jù)。每個包 的包頭包括用于將包與包所屬對象聯(lián)系起來的相關信息。例如,所述包頭可 包括對象標識符和偏移值,該偏移值表明了用于數(shù)據(jù)包形成的數(shù)據(jù)段、對象 或數(shù)據(jù)塊。所述包頭還可包括存儲總線控制器348用以存儲包的邏輯地址。所 迷包頭還可包括關于包的大小的信息(如包內字節(jié)數(shù))。所述包頭還可包括序列號,當生建數(shù)據(jù)段或對象時,該序列號識別數(shù)據(jù)段相對于對象內的其他 包所屬的位置。所述包頭可包括包頭類型字段。類型字段可包括數(shù)據(jù)、對象 屬性、元數(shù)據(jù)、數(shù)據(jù)段定界符(多包)、對象結構、對象連接及類似物。本 領域技術人員會認識到其他包含在由封包器302加到數(shù)據(jù)上的包頭內的信息 和其他添加到數(shù)據(jù)包的信息。
寫入數(shù)據(jù)管道l06包括ECC發(fā)生器304,該ECC發(fā)生器為 一個或多個接收自 封包器302的包生成一個或多個糾錯碼("ECC") 。 ECC發(fā)生器304通常采用糾 錯算法生成ECC,該ECC與包一起存儲。與包一起存儲的ECC通常用于探測和 糾正由于傳送和存儲而引起的錯誤。在一種實施方式中,包作為長度為N的未 編碼塊流入ECC發(fā)生器304。計算并添加長度為S的并發(fā)位,并作為長度為N+S 的編碼塊輸出。N和S的值依賴于算法的特點,該算法被選擇用于實現(xiàn)特定的 性能、效率和魯棒性指標。在優(yōu)選實施方式中,在ECC塊和包之間并沒有固 定關系;包可包括不止一個ECC塊;ECC塊可包括不止一個包;且第一包可在 ECC塊內的任何位置終止而第二包可始于同一ECC塊內的第 一 包終止的位置。 在優(yōu)選實施方式中,ECC算法不能被動態(tài)修改。在優(yōu)選實施方式中,與數(shù)據(jù) 包一起存儲的ECC足夠穩(wěn)健以在兩個以上的位內糾正錯誤。
有利地是,采用允許不止一位的修正或甚至是兩位修正的穩(wěn)健ECC算法 允許延長固態(tài)存儲器110的使用壽命。例如,如果固態(tài)存儲器110內使用閃存 作為存儲媒體,閃存在每個擦除周期內可被寫入大約IOOOOO次不出現(xiàn)錯誤。 這種使用期限可通過穩(wěn)健ECC算法延長。固態(tài)存儲設備102板載有ECC發(fā)生器 304和相應的ECC糾錯才莫塊322,固態(tài)存儲設備102可在其內部糾正錯誤并具有 比采用不甚穩(wěn)健的ECC算法(如單位錯誤修正)更長的使用壽命。然而,在 其他實施方式中,ECC發(fā)生器304可采用不甚穩(wěn)健的算法并可修正單位或雙位 錯誤。在另一種實施方式中,固態(tài)存儲設備110可包括不甚可靠的存儲器以增 加容量,所述不甚可靠的存儲器例如多級單元("MLC")閃存,所述不甚可 靠的存儲器在沒有穩(wěn)健ECC算法的情況下可以不充分可靠。
在一種實施方式中,寫入數(shù)據(jù)管道包括輸入緩沖器306,該輸入緩沖器接 收將要被寫入固態(tài)存儲器l IO的數(shù)據(jù)段并存儲輸入的數(shù)據(jù)段直到寫入數(shù)據(jù)管 道106的下一級,例如封包器302 (或其他更復雜寫入數(shù)據(jù)管道106的其他級) 準備處理下一個數(shù)據(jù)段。通過使用適當容量的數(shù)據(jù)緩沖器,輸入緩沖器306通常允許寫入數(shù)據(jù)管道106接收和處理數(shù)據(jù)段之間存在速率差異。輸入緩沖器
306還允許數(shù)據(jù)總線204將數(shù)據(jù)傳送給寫入數(shù)據(jù)管道106的速率大于寫入數(shù)據(jù) 管道106能支持的速率,從而改進數(shù)據(jù)總線204運行的效率。通常,當寫入數(shù) 據(jù)管道106不包括輸入緩沖器306時,緩沖功能在別處(如固態(tài)存儲設備102) 實現(xiàn),但所述別處位于寫入數(shù)據(jù)管道106外、位于計算機內,例如當使用遠程 直接存儲器讀取("RMDA")時,如在網(wǎng)絡接口卡("NIC")內或其他設備上。
在另一種實施方式中,寫入數(shù)據(jù)管道106還包括寫入同步緩沖器308,該 寫入同步緩沖器308在將包寫入固態(tài)存儲器110之前緩沖接收自ECC發(fā)生器 304的包。寫入同步緩沖器308位于本地時鐘域和固態(tài)存儲時鐘域之間的邊界 上,并且提供緩沖以解決時鐘域差異。在其他實施方式中,可采用同步固態(tài) 存儲器110而移除同步緩沖器308、 328。
在一種實施方式中,寫入數(shù)據(jù)管道106還包括媒體加密模塊318,該媒體 加密模塊318直接地或間接地從封包器302接收一個或多個包,并在將包發(fā)送 給ECC發(fā)生器304之前利用對固態(tài)存儲設備102唯一的加密密鑰加密所述一個 或多個包。通常,整個包(包括包頭)都被加密。在另一種實施方式中,并 不加密包頭。在本文中,在一種實施方式中,加密密鑰^皮理解為意味著在外 部管理的秘密加密密鑰,這種密鑰將固態(tài)存儲器110和需要加密保護的設備集 成在一起。媒體加密模塊318和相應的媒體解密模塊332為存儲在固態(tài)存儲器 IIO中數(shù)據(jù)提供安全等級。例如,當數(shù)據(jù)利用媒體加密模塊加密時,如果固態(tài) 存儲器lIO連接到不同的固態(tài)存儲控制器104、固態(tài)存儲設備102或計算機l 12 , 通常,在不使用同一加密密鑰(在將數(shù)據(jù)寫入固態(tài)存儲器110期間使用)時, 如果不經(jīng)過合理的努力,則不能讀取固態(tài)存儲器l IO的內容。
在典型的實施方式中,固態(tài)存儲設備102不將所述加密密鑰存儲在非易失 性存儲器中并且不允許從外部訪問所述加密密鑰。在初始化期間為固態(tài)存儲 控制器104提供加密密鑰。固態(tài)存儲設備102可使用并存儲非秘密性加密臨時 值,該非秘密性加密臨時值與加密密鑰結合使用。不同的臨時值可與每個包 一起存儲。為了加強保護,加密算法可利用唯一臨時值在多個包之間分割數(shù) 據(jù)段。所述加密密鑰可接收自客戶端114、計算機112、密鑰管理器或其他管 理固態(tài)存儲控制器104使用的加密密鑰的設備。在另一種實施方式中,固態(tài)存 儲器110可具有兩個或更多個分區(qū),并且固態(tài)存儲控制器104顯得就像有兩個或更多個固態(tài)存儲控制器104 ,每一個固態(tài)存儲控制器104在固態(tài)存儲器110內 的單個分區(qū)上運行。在這種實施方式中,唯一的媒體加密密鑰可與每個分區(qū) 一起使用。
在另一種實施方式中,寫入數(shù)據(jù)管道106還包括加密;f莫塊314,該加密才莫 塊314在將數(shù)據(jù)段發(fā)送給封包器302之前直接地或間接地加密接收自輸入緩沖 器306的數(shù)據(jù)或元數(shù)據(jù)段,利用與數(shù)據(jù)段一同接收的加密密鑰來加密數(shù)據(jù)段。 加密模塊314與媒體加密模塊318不同,這是由于加密模塊318用以加密數(shù)據(jù) 的加密密鑰對存儲在固態(tài)存儲設備102內的數(shù)據(jù)來說不是共同的并在對象基 礎上可能不同,并且加密密鑰可不與數(shù)據(jù)段一起接收(如下所述)。例如, 加密模塊318用以加密數(shù)據(jù)段的加密密鑰可與數(shù)據(jù)段一起被接收或可作為將 對象寫入數(shù)據(jù)段所屬位置的命令的一部分被接收。固態(tài)存儲設備102可在每個 與加密密鑰結合使用的對象包中使用并存儲非秘密性加密臨時值。不同的臨 時值可與每個包一起存儲。為了通過加密算法加強保護,可利用唯一臨時值 在多個包之間分割數(shù)據(jù)段。在一種實施方式中,媒體加密模塊318使用的臨時 值與加密模塊314使用的臨時值相同。
加密密鑰可接收自客戶端114、計算機112、密鑰管理器或其他保存用于 加密數(shù)據(jù)段的加密密鑰的設備。在一種實施方式中,加密密鑰被從固態(tài)存儲 設備102、計算機112、客戶端114或其他外部代理中的一個傳送到固態(tài)存儲控 制器104,所述外部代理能夠執(zhí)行工業(yè)標準方法以安全地傳送并保護私有密鑰 和7>共密鑰。
在一種實施方式中,加密模塊318利用與第 一 包一起接收的第 一加密密鑰 加密第一包,并利用與第二包一起接收的第二加密密鑰加密第二包。在另一 種實施方式中,加密模塊318利用與第一包一起接收的第一加密密鑰加密第一 包,而將第二數(shù)據(jù)包傳遞給下一級(未經(jīng)加密)。有利地是,包括在固態(tài)存 儲設備102的寫入數(shù)據(jù)管道106內的加密模塊318允許對象接對象或段接段的 數(shù)據(jù)加密,而不需要單獨的文件系統(tǒng)或其他外部系統(tǒng)來追蹤不同的用于存儲 相應對象或數(shù)據(jù)段的加密密鑰。每個請求設備155或相關密鑰管理器獨立地管 理加密密鑰,該加密密鑰僅用于加密請求設備155發(fā)送的對象或數(shù)據(jù)段。
在另一種實施方式中,寫入數(shù)據(jù)管道106包括壓縮模塊312,該壓縮模塊 312在將數(shù)據(jù)段發(fā)送給封包器302之前為元數(shù)據(jù)段壓縮數(shù)據(jù)。壓縮模塊312通常利用本領域技術人員熟知的壓縮程序來壓縮數(shù)據(jù)或元數(shù)據(jù)段以減少段占用的
的存儲空間大小。例如,如果數(shù)據(jù)段包括一串512個0位,壓縮模塊312可用表 明512個0位的編碼或令牌來替換這512個0位,其中,所述編碼所占的空間比 512個0位所占的空間要小得多。
在一種實施方式中,壓縮模塊312利用第一壓縮程序壓縮第一段,而輸送 第二段(未經(jīng)壓縮)。在另一種實施方式中,壓縮模塊312利用第一壓縮程序 壓縮第一段并利用第二壓縮程序壓縮第二段。在固態(tài)存儲設備102內具有這種 靈活性是有利的,以便客戶端或其他將數(shù)據(jù)寫入固態(tài)存儲"^殳備102內的設備中 每一個都可指定壓縮程序或以便一個設備指定壓縮程序而另一個設備指定無 壓縮。還可根據(jù)每個對象類型或對象類基礎的默認設置來選擇壓縮程序。例 如,特定對象的第一對象可以能夠廢除默認壓縮程序設置,同一對象類和對 象類型的第二對象可采用默認壓縮程序,而同 一對象類和對象類型的第三對 象可不壓縮。
在一種實施方式中,寫入數(shù)據(jù)管道106包括垃圾收集器旁路316,該垃圾 收集器旁路316接收來自讀取數(shù)據(jù)管道的108 (在垃圾收集系統(tǒng)中作為數(shù)據(jù)旁 路的一部分)的數(shù)據(jù)段。垃圾收集系統(tǒng)通常標記不再有效的包,不再有效的 原因通常是由于包被標記為刪除或包已被修改且修改過的數(shù)據(jù)存儲在不同的 位置。在某一時刻,垃圾收集系統(tǒng)確定存儲器的某個區(qū)域可被恢復。之所以 確定某個區(qū)域可被恢復可能是由于缺乏可用的存儲空間、標記為無效的的 數(shù)據(jù)百分比達到閾值、有效數(shù)據(jù)的合并、存儲器的該區(qū)域錯誤檢出率達到閾 值或基于數(shù)據(jù)分布提高性能等。垃圾收集算法可考慮大量的因素以確定何時 存儲器的區(qū)域將要被恢復。
一旦存儲器的區(qū)域被標記為恢復,該區(qū)域內的有效包通常必須被重新存 放。垃圾收集器旁路316允許將包讀入讀取數(shù)據(jù)管道108,并允許然后將包直 接傳送給寫入數(shù)據(jù)管道106而不會將包路由出固態(tài)存儲控制器104。在優(yōu)選實 施方式中,垃圾收集器旁路316是運行在固態(tài)存儲設備102內的自主垃圾收集 系統(tǒng)的一部分。這允許固態(tài)存儲設備102管理數(shù)據(jù),從而數(shù)據(jù)系統(tǒng)地傳播到整 個固態(tài)存儲器110以提升性能、數(shù)據(jù)可靠性并避免過度使用和不充分使用固態(tài) 存儲器110的任何一個位置或區(qū)域,并且延長了固態(tài)存儲器110的使用壽命。
垃圾收集器旁路316協(xié)調將數(shù)據(jù)段插入寫入數(shù)據(jù)管道106而其他數(shù)據(jù)段由客戶端116或其他設備寫入。在描述的實施方式中,垃圾收集器旁路316位于 寫入數(shù)據(jù)管道106內的封包器302之前、讀取數(shù)據(jù)管道內的解包器314之后,但 也可位于寫入和讀取數(shù)據(jù)管道106、 118內的其他位置。可在清洗寫入數(shù)據(jù)管 道106期間使用垃圾收集器旁路316,以填充虛擬頁的剩余部分,從而提升固 態(tài)存儲器110內的存儲效率并因此減少垃圾收集的頻率。
在一種實施方式中,寫入數(shù)據(jù)管道106包括寫入緩沖器320,該寫入緩沖 器320為了高效的寫操作而緩沖數(shù)據(jù)。通常,寫入緩沖器320包括用于包的足 夠容量,以填充固態(tài)存儲器110內的至少一個虛擬頁。這允許寫操作將數(shù)據(jù)的 整個頁沒有中斷地發(fā)送給固態(tài)存儲器IIO。通過選擇寫入數(shù)據(jù)管道106的寫入 緩沖器320的容量并將讀取數(shù)據(jù)管道108內的緩沖器的容量選為同樣大小容量 或比固態(tài)存儲器110內存儲寫入緩沖器的容量大,由于單個寫入命令可被設計 為將數(shù)據(jù)的整個虛擬頁發(fā)送給固態(tài)存儲器110,從而以單條命令替代多條命 令,寫入和讀取數(shù)據(jù)的效率更高。
當填充寫入緩沖器320時,固態(tài)存儲器110可用于其他讀操作。這是有利 的,原因是當將數(shù)據(jù)寫入存儲寫入緩沖器時和注入數(shù)據(jù)緩沖器的數(shù)據(jù)失速 時,具有更小容量的寫入緩沖器的或不具有寫入緩沖器的其他固態(tài)設備可綁 定固態(tài)存儲器。讀操作會被攔截直到整個存儲寫入緩沖器被填充或被編程。 用于不具寫入緩沖器或具有小容量的寫入緩沖器的系統(tǒng)的另一種方法是清洗 未滿的存儲寫入緩沖器以使得能進行讀操作。同樣地,由于需要多寫入/編程 周期來填充頁,因此這種方法的效率低下。
對于描述的具有容量比虛擬頁容量大的寫入緩沖器320的實施方式,單個 的寫入命令(包括大量子命令)的后續(xù)命令可以是單個程序命令,以將來自 每個固態(tài)存儲元件216、 218、 220中的存儲寫入緩沖器的數(shù)據(jù)頁傳遞給每個固 態(tài)存儲元件216、 218、 220中的指定頁。這種技術帶來的好處是減少了部分 頁編程,眾所周知,這降低了數(shù)據(jù)的可靠性和穩(wěn)定性并在當緩沖器填充時, 為讀命令和其他命令釋放了目標內存庫。
在一種實施方式中,寫入緩沖器320為交替緩沖器,其中,所述交替緩沖 器的一側被填充,然后當所述交替緩沖器的另一側被填充時,所迷交替緩沖 器的一側被指定為在適當?shù)臅r間傳送數(shù)據(jù)。在另一種實施方式中,寫入緩沖 器320包括先進先出("FIFO")寄存器,該FIFO寄存器的容量比數(shù)據(jù)段虛擬頁的容量大。本領域技術人員會認識到允許在將數(shù)據(jù)寫入固態(tài)存儲器110之前存 儲數(shù)據(jù)虛擬頁的其他寫入緩沖器320配置。
在另一種實施方式中,寫入緩沖器320的容量比虛擬頁小,從而少于一頁 的信息可被寫入固態(tài)存儲器110內的存儲寫入緩沖器。在這種實施方式中,為 了防止寫入數(shù)據(jù)管道106的失速阻止讀操作,采用需要從一個位置移動到另一 個位置的垃圾收集系統(tǒng)將數(shù)據(jù)排隊,這個過程是垃圾收集進程的一部分。為 了防止寫入數(shù)據(jù)管道106中的數(shù)據(jù)失速,可通過垃圾收集器旁路316將所述數(shù) 據(jù)供應給寫入緩沖器320并然后將所述數(shù)據(jù)供應給固態(tài)存儲器110中的存儲寫 入緩沖器,從而在編程所述數(shù)據(jù)之前填充虛擬頁的頁面。這樣,寫入數(shù)據(jù)管 道106中的數(shù)據(jù)失速不會使讀取自固態(tài)存儲設備102的數(shù)據(jù)失速。
在另一種實施方式中,寫入數(shù)據(jù)管道106包括寫入程序模塊3]0,該寫入 程序模塊310具有寫入數(shù)據(jù)管道106內的一個或多個用戶可定義的功能。寫入 程序^t塊310允許用戶自定義寫入數(shù)據(jù)管道106。用戶可基于特定數(shù)據(jù)請求或 應用自定義寫入數(shù)據(jù)管道106。當固態(tài)存儲控制器104為FPGA時,用戶可相對 輕松地編程具有自定義命令和功能的寫入數(shù)據(jù)管道106。用戶還可利用寫入程 序模塊310以使ASIC包括自定義功能,然而自定義ASIC可能比使用FPGA時更 困難。寫入程序模塊310可包括緩沖器和旁路機制,以允許笫一數(shù)據(jù)段在寫入 程序^f莫塊310中執(zhí)行,而第二數(shù)據(jù)段通過寫入數(shù)據(jù)管道106可繼續(xù)傳送。在另 一種實施方式中,寫入程序模塊310可包括能通過軟件編程的處理器內核。
應注意,寫入程序模塊310被示為位于輸入緩沖器306和壓縮模塊312 之間,然而寫入程序^^莫塊310可位于寫入數(shù)據(jù)管道106內的任何位置,并且 可分布在不同的級302-320之間。此外,在不同的、已編程的且獨立運行的級 302-320之間可分布有多個寫入程序^f莫塊310。此外,級302-320的順序可以 改t本領域技術人員會認識到基于特定用戶需求的級302-320的順序的可行 改變。
讀取數(shù)據(jù)管道
讀取數(shù)據(jù)管道108包括ECC糾錯模塊322,該ECC糾錯模塊322通過使用與 請求包中的每個ECC塊一起存儲的ECC來確定接收自固態(tài)存儲器110的請求包 的ECC塊中是否存在錯誤。然后,如果存在任何錯誤并且所述錯誤可使用ECC 修正,貝'jECC糾錯模塊322修正請求包中的任何錯誤。例如,如果ECC能夠探煩'J6位的錯誤但只能修正3位的錯誤,那么ECC糾錯模塊322修正具有3位錯誤 的請求包ECC塊。ECC糾錯模塊322通過把出錯的位改變?yōu)檎_的1或0狀態(tài)來 修正出錯的位,從而請求數(shù)據(jù)包與其被寫入固態(tài)存儲器110并且為包生成ECC 時一致。
如果ECC糾錯模塊322確定請求包包含了比ECC能修正的位數(shù)多的出錯位, 則ECC糾錯模塊322不能修正請求包毀壞的ECC塊的錯誤并發(fā)送中斷。在一種 實施方式中,ECC糾錯模塊322發(fā)送中斷以及指示請求包出錯的消息。所述消 息可包括指出ECC糾錯模塊322不能修正錯誤或ECC糾錯模塊322沒有能力修 正錯誤的信息。在另一種實施方式中,ECC糾4晉才莫塊322與所述中斷和/或消息 一起發(fā)送請求包中毀壞的ECC塊。
在優(yōu)選的實施方式中,請求包中毀壞的ECC塊或毀壞的ECC塊的一部分 (不能被ECC糾錯模塊322修正)由主控制器224讀取,并被修正和返回給ECC 糾錯模塊322以被讀取數(shù)據(jù)管道108進一步處理。在一種實施方式中,請求包 中毀壞的ECC塊或毀壞的ECC塊的一部分被發(fā)送給請求數(shù)據(jù)的設備。請求設備 155可修正所述ECC塊或用另一拷貝替換數(shù)據(jù)(如備份或鏡像拷貝),然后可 使用請求數(shù)據(jù)包的替換的數(shù)據(jù)或將所述替換的數(shù)據(jù)返回給讀取數(shù)據(jù)管道108。 請求設備155可使用出錯請求包中的包頭信息以識別替換毀壞請求包或替換 包所屬的對象所需的數(shù)據(jù)。在另一種優(yōu)選實施方式中,固態(tài)存儲控制器104采 用一些類型的RAID存儲數(shù)據(jù)并能夠恢復毀壞的數(shù)據(jù)。在另一種實施方式中, ECC糾錯模塊322發(fā)送中斷和/或消息,并且接收設備停止與請求數(shù)據(jù)包關聯(lián)的 讀操作。本領域技術人員會認識到ECC糾錯模塊322確定請求包的一個或多個 ECC塊為毀壞的且ECC糾錯模塊322不能修正錯誤后采取的其他選擇和操作。
讀取數(shù)據(jù)管道108包括解包器324,該解包器324直接地或間接地接收來自 ECC修正才莫塊322的請求包ECC塊,并檢查和刪除一個或多個包頭。解包器324 可通過檢查包頭內的包標識符、數(shù)據(jù)長度、數(shù)據(jù)位置等驗證包頭。在一種實 施方式中,所述包頭包括散列碼,該散列碼可用于驗證傳遞給讀取數(shù)據(jù)管道 108的包為請求包。解包器324還從請求包中刪除由封包器302添加的包頭。解 包器324可被指定為不對某些包起作用而將這些包未經(jīng)修改地向前傳送。 一個 實例可以是容器標簽,當對象索引重建模塊272需要包頭信息時,該容器標簽 在重建進程期間被請求。另外的實例包括傳送不同類型的包(預定在固態(tài)存儲設備102內使用)。在另一種實施方式中,解包器324操作可以依賴于包的類型。
讀取數(shù)據(jù)管道326包括對齊模塊326,該對齊模塊326接收來自解包器324 的數(shù)據(jù)并刪除多余的數(shù)據(jù)。在一種實施方式中,發(fā)送給固態(tài)存儲器110的讀命 令恢復數(shù)據(jù)包。請求數(shù)據(jù)的設備可不需要恢復的數(shù)據(jù)包內的所有數(shù)據(jù),并且 對齊模塊326刪除多余的數(shù)據(jù)。如果恢復頁內的所有數(shù)據(jù)都是請求的數(shù)據(jù),對 齊模塊326不刪除任何數(shù)據(jù)。
對齊模塊326在數(shù)據(jù)段傳輸?shù)较乱患壷耙耘c請求數(shù)據(jù)段的設備兼容的 形式按對象的數(shù)據(jù)段重新格式化數(shù)據(jù)。通常,由于數(shù)據(jù)由讀取數(shù)據(jù)管道108處 理,數(shù)據(jù)段或包的大小在不同級間改變。對齊模塊326使用接收到的數(shù)據(jù)以將 數(shù)據(jù)格式化為適于發(fā)送給請求設備155的數(shù)據(jù)段,該數(shù)據(jù)段還適于連接在一起 以形成響應。例如,來自第一數(shù)據(jù)包的一部分的數(shù)據(jù)可與來自第二數(shù)據(jù)包的 一部分的數(shù)據(jù)結合。如果數(shù)據(jù)段比由請求設備請求的數(shù)據(jù)大,對齊模塊326可 丟棄不需要的數(shù)據(jù)。
在一種實施方式中,讀取數(shù)據(jù)管道108包括讀取同步緩沖器328,該讀取 同步緩沖器328在讀取數(shù)據(jù)管道108處理之前緩沖一個或多個讀取自固態(tài)存儲 器110的請求包。讀取同步緩沖器328位于固態(tài)存儲時鐘域和本地總線時鐘域 之間的邊界上并提供緩沖以解決時鐘域差異。
在另一種實施方式中,讀取數(shù)據(jù)管道108包括輸出緩沖器330,該輸出緩 沖器330接收來自對齊模塊326的請求包并在數(shù)據(jù)包傳送到所述請求設備前存 儲該包。輸出緩沖器330解決當從讀取數(shù)據(jù)管道108接收數(shù)據(jù)段時和當將數(shù)據(jù) 段傳送給固態(tài)存儲控制器104的其他部分或傳送給請求設備時之間的差異。輸 出緩沖器330還允許數(shù)據(jù)總線以比讀取數(shù)據(jù)管道108能夠支持的速率高的速率 接收來自讀取數(shù)據(jù)管道108的數(shù)據(jù),以提升數(shù)據(jù)總線204運行的效率。
在一種實施方式中,讀取數(shù)據(jù)管道108包括媒體解密模塊332,該媒體解 密模塊332接收一個或多個來自ECC糾錯模塊322的加密過的請求包并在將一 個或多個所述請求包發(fā)送給解包器324之前利用對于固態(tài)存儲設備102唯一的 加密密鑰解密一個或多個所述請求包。通常,媒體解密模塊332用以解密數(shù)據(jù) 的加密密鑰與媒體加密模塊318使用的加密密鑰一致。在另一種實施方式中, 固態(tài)存儲器110可具有兩個或更多個分區(qū)且固態(tài)存儲控制器104表現(xiàn)得好像有兩個或更多個固態(tài)存儲控制器104 (每個都在固態(tài)存儲器110內的單獨分區(qū)內 運行) 一樣。在這種實施方式中,可對每個分區(qū)使用唯一的媒體加密密鑰。
在另一種實施方式中,讀取數(shù)據(jù)管道108包括解密模塊334,該解密模塊 334在將數(shù)據(jù)段發(fā)送給輸出緩沖器330之前解密由解包器324格式化的所述數(shù) 據(jù)段。采用與讀請求一起接收的加密密鑰解密所述數(shù)據(jù)段,所述讀請求初始 化恢復由讀取同步緩沖器328接收的請求包。解密模塊334可利用與用于第一 包的讀請求一起接收的加密密鑰解密第一包,然后可利用不同的加密密鑰解 密第二包或可將第二包未經(jīng)解密地傳送給讀取數(shù)據(jù)管道108的下一級。通常, 解密模塊334使用與媒體解密模塊332用以解密請求數(shù)據(jù)包的加密密鑰不同的 加密密鑰解密數(shù)據(jù)段。當包與非秘密性加密臨時值一起存儲時,該臨時值與 加密密鑰一起使用以解密數(shù)據(jù)包。加密密鑰可接收自客戶端114、計算機112、 密鑰管理器或管理固態(tài)存儲控制器104使用的加密密鑰的其他設備。
在另一種實施方式中,讀取數(shù)據(jù)管道108包括解壓縮才莫塊336,該解壓縮 模塊336解壓縮由解包器324格式化的數(shù)據(jù)段。在優(yōu)選實施方式中,解壓縮模 塊336使用存儲在包頭和容器標簽中的一個或兩個中的壓縮信息以選擇補充 程序,壓縮模塊312使用該補充程序來壓縮數(shù)據(jù)。在另一種實施方式中,解壓 縮^t塊336所使用的解壓縮程序由請求解壓縮的數(shù)據(jù)段確定。在另一種實施方 式中,解壓縮模塊336根據(jù)每個對象類型或對象類基礎的默認設置選擇解壓縮 程序。第一對象的第一包可以能夠廢除默認解壓縮程序設置,具有相對的對 象類和對象類型的第二對象的第二包可采用默認解壓縮程序,而具有相同的 對象類和對象類型的第三對象的第三包可不經(jīng)過解壓縮。
在另一種實施方式中,讀取數(shù)據(jù)管道108包括讀取程序模塊338,該讀取 程序模塊338包括一個或多個在讀取數(shù)據(jù)管道108內的用戶可定義功能。讀取 程序模塊338具有與寫入程序模塊310類似的特點并允許用戶提供自定義功能 給讀取數(shù)據(jù)管道108。讀取程序^t塊338可位于圖3中所示的位置、可位于讀取 數(shù)據(jù)管道108內的其他位置、或者可包括讀取數(shù)據(jù)管道108內多個位置的多個 部分。此外,在讀取數(shù)據(jù)管道108內的多個不同位置可有多個獨立運行的讀取 程序模塊338。本領域技術人員會認識到讀取數(shù)據(jù)管道108內的讀取程序模塊 338的其他形式。正如寫入數(shù)據(jù)管道,讀取數(shù)據(jù)管道108的級可重新排序,本 領域技術人員會認識到讀取數(shù)據(jù)管道108內的級的其他排列順序。固態(tài)存儲控制器104包括控制和狀態(tài)寄存器340和相應的控制隊列342???制和狀態(tài)寄存器340和控制隊列342有助于控制并按順序排列與在寫入和讀取 數(shù)據(jù)管道106、 108內處理的數(shù)據(jù)相關聯(lián)的命令和子命令。例如,封包器302中 的數(shù)據(jù)段可具有一個或多個在與ECC發(fā)生器關聯(lián)的控制隊列342內的相應控 制命令或指令。當數(shù)據(jù)段被封包時,可在封包器302內執(zhí)行一些指令或命令中。 當從數(shù)據(jù)段建立的、最新形成的數(shù)據(jù)包被傳送給下一級時,其他命令或指令 可通過控制和狀態(tài)寄存器340直接傳送給下一個控制隊列342。
可同時將命令和指令加載到控制隊列342上以將包轉發(fā)給寫入數(shù)據(jù)管道 106,同時,由于每個管道級要執(zhí)行各自的包,因此每個管道級讀取合適的命 令或指令。類似地,可同時將命令和指令加載到控制隊列342上以從讀取數(shù)據(jù) 管道108請求包,而且,由于每個管道級要執(zhí)行各自的包,因此每個管道級讀 取合適的命令或指示。本領域技術人員會認識到控制和狀態(tài)寄存器340和控制 隊列342的其他特征和功能。
固態(tài)存儲控制器104和/或固態(tài)存儲設備102還可包括內存庫交錯控制器 344、同步緩沖器346、存儲總線控制器348及多路轉換器("MUX") 350, 這些設備相對于圖4A和圖4B描述。
內存庫交錯
圖4A是根據(jù)本發(fā)明的位于固態(tài)存儲控制器104內的內存庫交錯控制器344 一種實施方式400的示意性框圖。內存庫交錯控制器344連接到控制和狀態(tài)寄 存器340并通過MUX350、存儲總線控制器348和同步緩沖器346連接到存儲I/0 總線210和存儲控制總線212上,這在下文中有所描述。內存庫交錯控制器包 括讀耳又代理402、寫入代理404、纟察除代理406、管理代理408、讀取隊列410a-n、 寫入隊列412a-n、 4察除隊列414a-n、用于固態(tài)存儲器110中的內存庫214的管理 隊列416a-n、內存庫控制器418a-n、總線仲裁器420和狀態(tài)MUX422,這些設備 在下文中描述。存儲總線控制器348包括具有重映射;f莫塊430的映射模塊424、 狀態(tài)捕捉模塊426和NAND總線控制器438,這些設備在下文中描述。
內存庫交錯控制器344將一條或多條命令送往內存庫交錯控制器344中的 兩個或更多個隊列,并在固態(tài)存儲器110的內存庫214之間協(xié)調存儲在隊列中 的命令的執(zhí)行,以使得第一類型的命令在一個內存庫241a上執(zhí)行而第二類型 的命令在第二內存庫214b上執(zhí)行。所述一條或多條命令按命令類型分別送入隊列中。固態(tài)存儲器lIO的每個內存庫214在內存庫交錯控制器344內具有相應 的隊列集,且每個隊列集包括每個命令類型的隊列。
內存庫交錯控制器344在固態(tài)存儲器1 IO的內存庫214之間協(xié)調存儲在隊 列中的命令的執(zhí)行。例如,第一類型的命令在在一個內存庫241a上執(zhí)行而第 二類型的命令在第二內存庫214b上執(zhí)行。通常,命令類型和隊列類型包括讀 取和寫入命令和隊列410、 412,但是還可包括存儲媒介指定的其他命令和隊 列。例如,在圖4A所描述的實施方式中,擦除和管理隊列414、 416被包括在 其中且適于閃存、NRAM、 MRAM、 DRAM、 PRAM等。
對于其他類型的固態(tài)存儲器IIO,可包括其他類型的命令和相應的隊列而 不脫離本發(fā)明的范圍。FPGA固態(tài)存儲控制器104的靈活性質允許存儲媒介的 靈活性。如果將閃存換成另一種固態(tài)存儲類型,可改變內存庫交錯控制器344、 存儲總線控制器348和MUX350以適應媒介類型而不顯著地影響數(shù)據(jù)管道106、 108和其他固態(tài)存儲控制器104運行。
在圖4A所描述的實施方式中,對每個內存庫214來說,內存庫交錯控制器 344包括用于從固態(tài)存儲器110讀取數(shù)據(jù)的讀取隊列410、用于將命令寫入固 態(tài)存儲器110的寫入隊列412、用于擦除固態(tài)存儲器中的擦除塊的擦除隊列414、 用于管理命令的管理隊列416。內存庫交錯控制器344還包括相應的讀取、寫 入、#察除和管理代理402、 404、 406、 408。在另一種實施方式中,控制和狀 態(tài)寄存器340和控制隊列342或類似元件在沒有內存庫交錯控制器344的情況 為了發(fā)送給固態(tài)存儲器110的內存庫214的數(shù)據(jù)而將命令排隊。
在一種實施方式中,代理402、 404、 406、 408將預定用于特定內存庫214a 的合適類型的命令送到內存庫214a的修正隊列。例如,讀取代理402可接收用 于內存庫-1 214b的讀命令并將所述讀命令送到內存庫-l讀取隊列410b。寫入 代理404可接收將數(shù)據(jù)寫入固態(tài)存儲器110的內存庫-0 214a的寫入命令并然后 會將所述寫入命令發(fā)送給內存庫-0寫入隊列412a。類似地,擦除代理406可接 收擦除命令以擦除內存庫-1 214b中的擦除塊并然后會將所述擦除命令傳送給 內存庫-l擦除隊列414b。管理代理408通常接收管理命令、狀態(tài)請求及其類似 消息,如復位命令或讀取內存庫214(如內存庫-0 214a)的配置寄存器的請求。
代理402、 404、 406、 408通常還監(jiān)測隊列410、 412、 414、 416的狀態(tài)并當隊列402、 404、 406、 408滿、接近滿、喪失功能時,發(fā)送狀態(tài)、中斷或其 他消息。在一種實施方式中,代理402、 404、 406、 408接收命令并生成相應 的子命令。在一種實施方式中,代理402、 404、 406、 408通過控制和狀態(tài)寄 存器340接收命令并生成相應的子命令,所述子命令被轉發(fā)給隊列410、 412、 414、 416。本領域技術人員會認識到代理402、 404、 406、 408的其他功能。
隊列410、 412、 414、 416通常接收命令并存儲所述命令直到所述命令被 要求傳送給固態(tài)存儲器內存庫214。在典型的實施方式中,隊列410、412、414、 416是先進先出("FIFO")寄存器或以FIFO運行的類似組件。在另一種實施方 式中,隊列410、 412、 414、 4166按與數(shù)據(jù)、重要性或其他標準相匹配的順序 來存儲命令。
內存庫控制器4]8通常接收來自隊列410、 412、 414、 416的命令并生成合 適的子命令。例如,內存庫-0寫入隊列412a可接收將數(shù)據(jù)包的頁寫入內存庫-0 214a的命令。內存庫-0控制器418a可在合適的時間接收寫入命令并可為每個存 儲在寫入緩沖器320中的數(shù)據(jù)包生成一個或多個寫入子命令(將要被寫入內存 庫-0 214a的頁中)。例如,內存庫-0控制器418a可生成驗證內存庫-0214a和固 態(tài)存儲陣列216狀態(tài)的命令、選擇寫入一個或多個數(shù)據(jù)包的合適位置的命令、 清除位于固態(tài)存儲陣列216內的輸入緩沖器的命令、將一個或多個數(shù)據(jù)包傳送 所述輸入緩沖器的命令、將輸入緩沖器放到選定位置中的命令、檢驗數(shù)據(jù)被 正確編程的命令,并且如果發(fā)生程序故障,則一次或多次地中斷主控制器、 重試寫入同一物理地址并重試寫入不同的物理地址。此外,與實例中的寫入 命令一起,存儲總線控制器348會將一條或多條命令乘以每條存儲I/0總線 210a-n從而翻倍,而所述命令的邏輯地址映射到用于存儲I/O總線210a的第一 物理地址,并映射到用于存儲I/O總線210a的第二物理地址,下面將詳細描述。
通常,總線仲裁器420選自內存庫控制器418并從內存庫控制器418的輸出 隊列提取子命令,并且將這些子命令以最優(yōu)化內存庫214性能的序列形式發(fā)給 存儲總線控制器348。在另一種實施方式中,總線仲裁器420可響應高級中斷 并修改普通選擇標準。在另一種實施方式中,主控制器224可通過控制和狀態(tài) 寄存器340控制總線仲裁器420。本領域技術人員會認識到總線控制器420可控 制和交錯從內存庫控制器418傳送到固態(tài)存儲器110的命令序列。
通常,總線仲裁器420協(xié)調來自內存庫控制器418適當?shù)拿詈兔铑愋退璧南鄳獢?shù)據(jù)的選擇,并將所述命令和數(shù)據(jù)發(fā)送給存儲總線控制器348???線仲裁器420通常還將命令發(fā)送給存儲控制總線212以選擇合適的內存庫214。 對于閃存或其他具有異步、雙向串行的存儲I/O總線210的固態(tài)存儲器110而言, 一次只能傳送一條命令(控制信息)或數(shù)據(jù)集。例如,當將寫入命令或數(shù)據(jù) 通過存儲I/O總線210傳送給固態(tài)存儲器110時,讀取命令、讀取的數(shù)據(jù)、擦除 命令、管理命令或其他狀態(tài)命令不能在存儲I/O總線210上傳輸。例如,當從存 儲I/O總線210讀取數(shù)據(jù)時,不能向固態(tài)存儲器110寫入數(shù)據(jù)。
例如,在內存庫-O的寫操作期間,總線仲裁器420選擇在其隊列頂部具有 寫入命令或一系列寫入子命令的內存庫-0控制器4i8a,所述一系列寫入子命令 使得存儲總線控制器348執(zhí)行后繼的序列。總線仲裁器420將寫入命令轉發(fā)給 存儲總線控制器348,該存儲總線控制器348通過下列方式建立了寫入命令 通過存儲控制總線212選擇內存庫-0 214a、發(fā)送清除與內存庫-0 214a關聯(lián)的固 態(tài)存儲元件110的輸入緩沖器的命令、發(fā)送驗證與內存庫-0 214a關聯(lián)的固態(tài)存 儲元件216、 218、 220的狀態(tài)的命令。然后,存儲總線控制器348通過包含了 物理地址存儲I/O總線210傳送寫入命令,該物理地址如同映射自邏輯擦除塊地 址一樣包括用于每個單獨的物理擦除固態(tài)存儲元件216a-m的邏輯擦除塊地址。 然后,存儲總線控制器348通過多路轉換器350將寫入緩沖器經(jīng)寫入同步緩沖 器多路復用到存儲I/O總線210并使寫入數(shù)據(jù)流向合適的頁。當所述頁寫滿時, 然后,存儲總線控制器348促使與內存庫-0 214a關聯(lián)的固態(tài)存儲元件216a-m將 輸入緩沖器編入固態(tài)存儲元件216a-m的內存單元。最終,存儲總線控制器348 -瞼i正狀態(tài)以確〗呆所述頁纟皮正確編程。
讀操作與上文的寫操作實例類似。在讀操作期間,通常,總線仲裁器420 或內存庫交錯控制器344的其他組件接收數(shù)據(jù)和相應的狀態(tài)信息并將數(shù)據(jù)發(fā) 送給讀取數(shù)據(jù)管道108,同時將狀態(tài)信息發(fā)送給控制和狀態(tài)寄存器340。通常, 從總線仲裁器420傳送給存儲總線控制器348的讀數(shù)據(jù)命令會促使多路轉換器 350將讀數(shù)據(jù)通過存儲I/O總線210傳送給讀取數(shù)據(jù)管道108并通過狀態(tài)多路轉 換器422向控制和狀態(tài)寄存器340發(fā)送狀態(tài)信息。
總線仲裁器420協(xié)調不同的命令類型和數(shù)據(jù)存取^^莫式,使得在任意給定的 時間內,在總線上只有合適的命令類型或對應數(shù)據(jù)。如果總線仲裁器420已選 擇了寫入命令,且寫入子命令和對應數(shù)據(jù)正在被寫入固態(tài)存儲器IIO,總線仲裁器420不會允許在存儲I/O總線210存在其他命令類型。有利地是,總線仲裁 器420使用定時信息(如預定的命令執(zhí)行時間)以及接收到的關于內存庫214 狀態(tài)的信息,以協(xié)調總線上不同命令的執(zhí)行,這樣做的目標是最小化或消除 總線的停工時間。
通過總線仲裁器420的主控制器224通常使用存儲在隊列410、 412、 414、 416中的命令的預定完成時間以及狀態(tài)信息,使得在一個內存庫214a上執(zhí)行與 命令關聯(lián)的子命令時,而在其他內存庫241b-n上執(zhí)行其他命令的其他子命令。 當內存庫214a完全執(zhí)行完一條命令時,總線仲裁器420將其他命令傳給內存庫 214a??偩€仲裁器420還可與協(xié)調存儲在隊列410、 412、 414、 416的命令一起 協(xié)調不存儲在隊列410、 412、 414、 416的其他命令。
例如,可發(fā)出擦除命令以擦除固態(tài)存儲器110內的一組擦除塊。執(zhí)行擦除 命令可消耗比執(zhí)行寫入或讀取命令多io到iooo倍的時間,或消耗比執(zhí)行程序 命令多10到100倍的時間。對于N個內存庫214,內存庫交錯控制器可將擦除命 令分割為N條命令,每條命令擦除內存庫214a的虛擬擦除塊。當內存庫-0 214a 執(zhí)行擦除命令時,總線仲裁器420可選擇在其他內存庫214b-n上執(zhí)行的其他命 令??偩€仲裁器420還可與其他組件(如存儲總線控制器348、主控制器224等) 一起工作以在總線之間協(xié)調命令的執(zhí)行。利用總線仲裁器420、內存庫控制器 418、隊列410、 412、 414、 416、和內存庫交錯控制器的代理402、 404、 406、 408協(xié)調命令的執(zhí)行可顯著的提升性能(相比于其他沒有內存庫交錯功能的固 態(tài)存儲系統(tǒng))。
在一種實施方式中,固態(tài)控制器104包括一個內存庫交錯控制器344,該 內存庫交錯控制器344為固態(tài)存儲器110的所有存儲元件216、 218、 220提供服 務。在另一種實施方式中,固態(tài)控制器104內存庫包括用于每個存儲元件行 216a-m、 218a-m、 220a-m的交錯控制器344。例如一個內存庫交錯控制器344 服務存儲元件的一行SSS 0.0-SSS O.N 216a、 218a、 220a,第二內存庫交錯控 制器344服務存儲元件的第二行SSS 1.0-SSS 1.N216b、 218b、 220b,等等。
圖4B是示出了根據(jù)本發(fā)明的位于固態(tài)存儲設備內的內存庫交錯控制器的 一種替代實施方式401的示意性框圖。圖4B所示實施方式中描述的組件210、 212、 340、 346、 348、 350、 402-430大體上與相對于圖4A描述的內存庫交 錯裝置400類似,除了下述不同點每個內存庫214包括單獨的隊列432a-n及用于內存庫的(如內存庫-0 214a)讀取命令、寫入命令、擦除命令、管理命令 等被傳送給內存庫214的單獨隊列432a。在一種實施方式中,隊列432是FIFO。 在另一種實施方式中,隊列432可具有以不同于存儲的順序的順序從隊列432 中提取的命令。在另一種替代實施方式(未示出)中,讀取代理402、寫入代 理404、擦除代理406和管理代理408可結合成單個代理,所述單個代理將命令 分配給合適的隊列432a-n。
在另一種替代的實施方式(未示出)中,命令存儲在單獨的隊列中,其 中,可以以不同于存儲的順序的順序從隊列中提取命令,從而使得內存庫交 錯控制器344在余下的內存庫214b-n上執(zhí)行。本領域技術人員會輕易地認識到 其他能夠在一個內存庫214a上執(zhí)行命令而在其他內存庫214b-n上執(zhí)行其他命 令的隊列配置和類型。
特定存儲組件
固態(tài)存儲控制器104包括同步緩沖器346,該同步緩沖器346從固態(tài)存儲器 1 IO發(fā)送和接收的命令和狀態(tài)消息。同步緩沖器346位于固態(tài)存儲時鐘域和本 地總線時鐘域之間的邊界上,并提供緩沖以解決時鐘域差異。同步緩沖器346、 寫入同步緩沖器308和讀取同步緩沖器328可獨立地或共同運作以緩沖數(shù)據(jù)、 命令、狀態(tài)消息等等。在優(yōu)選實施方式中,同步緩沖器346所處的位置使得跨 越時鐘域的信號數(shù)量最少。本領域技術人員會認識到時鐘域間的同步可任 意運行在固態(tài)存儲設備102的其他位置,以優(yōu)化設計實施方案的某些方面。
固態(tài)存儲控制器104包括存儲總線控制器348,該存儲總線控制器348解釋 和翻譯用于發(fā)送給或讀取自固態(tài)存儲器IIO的數(shù)據(jù)的命令并基于固態(tài)存儲器 IIO的類型接收自固態(tài)存儲器110的狀態(tài)消息。例如,存儲總線控制器348可針 對不同的存儲類型、不同性能特點、不同制造商的存儲器等而具有不同的定 時要求。存儲總線控制器348還將控制命令發(fā)送給存儲控制總線212。
在優(yōu)選實施方式中,固態(tài)存儲控制器]04包括MUX350,該MUX350包括 多路轉換器350a-n的陣列,其中,每個多路轉換器用于固態(tài)存儲陣列IIO的一 行。例如,多路轉換器350a與固態(tài)存儲元件216a、 218a、 220a關聯(lián)。MUX350 通過存儲總線控制器348、同步緩沖器346和內存庫交錯控制器344將來自寫入 數(shù)據(jù)管道106的數(shù)據(jù)和來自存儲總線控制器348的命令經(jīng)存儲I/O總線210路由 至固態(tài)存儲器IIO,并將來自固態(tài)存儲器110的數(shù)據(jù)和狀態(tài)消息經(jīng)存儲I/O總線210路由至讀取數(shù)據(jù)管道108和控制和狀態(tài)寄存器340。
在優(yōu)選實施方式中,固態(tài)存儲控制器104包括用于固態(tài)存儲元件的每一行 的(如SSS 0.1 216a、 SSS0.2 218a、 SSS O.N 220a )的MUX350。固X350將 來自寫入數(shù)據(jù)管道106的數(shù)據(jù)和發(fā)送給固態(tài)存儲器H0的命令通過存儲I/O總線 210結合起來,并將需要由讀取數(shù)據(jù)管道108處理的數(shù)據(jù)從命令中分離出來。 存儲在寫入緩沖器320中的包通過用于固態(tài)存儲元件的每一行(SSS x.O to SSS x.N216、 218、 220 )的寫入緩沖器308由寫入緩沖器外的總線傳給用于固態(tài)存 儲元件的每一行(SSS x.O to SSS x.N 216、 218、 220 )的MUX350。 MUX350 從存儲I/O總線210接收命令和讀取數(shù)據(jù)。MUX350還將狀態(tài)消息傳給存儲總線 控制器348。
存儲總線控制器348包括映射;f莫塊424。映射;f莫塊424將擦除塊的邏輯地址 映射到#~除塊的一個或多個物理地址。例如,每個內存庫214a具有20個存儲 元件的陣列(如SSS O.O至SSS M.O 216)的固態(tài)存儲器l IO可具有映射到擦除
由于平行訪問存儲元件,所以位于存儲元件216a、 218a、 220a的行中的每個存 儲元件中的同一位置的擦除塊會分享物理地址。為了選擇一個擦除塊(如在 存儲元件SSS 0.0 216a中)代替行(如在存儲元件SSS 0.0、 0.1, ... O.N 216a、 218a、 220a中)中的所有擦除塊,可選擇一個內存庫(在這種情況下為內存庫 誦0 214a)。
這種用于擦除塊的邏輯到物理的映射是有好處的,這是由于如果一個擦 除塊已損壞或不可訪問,所述映射可改為映射到另一擦除塊。當一個元件的 擦除塊出錯時,這種方法減少了失去整個虛擬擦除塊的損失。重映射模塊430 將擦除塊的邏輯地址的映射改為虛擬擦除塊的一個或多個物理地址(遍布存 儲元件的陣列)。例如,虛擬擦除塊l可映射到存儲元件SSS0.0 216a的擦除塊 1、映射到存儲元件SSS 1.0 216b的擦除塊l、...和映射到存儲元件M.O 216m, 虛擬擦除塊2可映射到存儲元件SSS 0.1 218a的擦除塊2、映射到存儲元件SSS 1.1 218b的擦除塊2、...和映射到存儲元件M.l 218m,等等。
如果存儲元件SSS 0.0 216a的擦除塊l損壞、由于損耗遇到錯誤或由于一些 原因不能被使用,重映射模塊可將從邏輯到物理的映射改為指向虛擬擦除塊l 的擦除塊l的邏輯地址的映射。如果存儲元件SSS 0.0 216a的空閑擦除塊(將其稱為擦除塊221)可用且當前并未被映射,重映射模塊可改變虛擬擦除塊l的
映射為映射到指向存儲元件SSS 0.0 216的擦除塊221,而繼續(xù)指向存儲元件 SSS 1.0 216b的擦除塊l、存儲元件SSS2.0 (未示出)的擦除塊l、...和指向存 儲元件M.O 216m。映射模塊424或重映射模塊430可按固定順序映射擦除塊(虛 擬擦除塊l到存儲元件的擦除塊l,虛擬擦除塊2到存儲元件的擦除塊2,等等) 或可按基于其他一些標準的順序映射存儲元件216、 218、 220的擦除塊。
在一種實施方式中,可按訪問時間分組擦除塊。按訪問時間分組、均衡 命令執(zhí)行的時間(如將數(shù)據(jù)編入或寫入指定擦除塊的頁)可平均命令補齊, 從而使得在虛擬擦除塊的擦除塊之間執(zhí)行的命令不會由于最慢的擦除塊而被 限制。在另一種實施方式中,可按損耗程度、運行狀況來分組擦除塊。本領 域技術人員會認識到當映射或重映射擦除塊時需要考慮的其他問題。
在一種實施方式中,存儲總線控制器348包括狀態(tài)捕捉模塊426,該狀態(tài) 捕捉模塊426接收來自固態(tài)存儲器110的狀態(tài)消息并將該狀態(tài)消息發(fā)送給狀態(tài) MUX422。在另一種實施方式中,當固態(tài)存儲器110為閃存時,存儲總線控制 器348包括NAND總線控制器428。 NANA總線控制器428將命令從讀取和寫入 數(shù)據(jù)管道106、 108傳送給固態(tài)存儲器110中的正確位置,并根據(jù)所述閃存的特 點協(xié)調命令執(zhí)行的時間,等等。如果固態(tài)存儲器110為另一種類型的固態(tài)存儲 器,則將NAND總線控制器428替換為針對存儲類型的總線控制器。本領域技 術人員會認識到NAND總線控制器428的其他功能。
流程圖
圖5是根據(jù)本發(fā)明的在固態(tài)存儲設備102內采用數(shù)據(jù)管道管理數(shù)據(jù)的方法 500的一種實施方式的示意性流程圖。方法500始于步驟502,輸入緩沖器306 接收一個或多個將要被寫入固態(tài)存儲器110的數(shù)據(jù)段(步驟504 )。封包器302 可創(chuàng)建一個或多個對象指定包以及對象。封包器302為每個包添加包頭,所述 包頭通常包括包的長度和對象內包的序列號。封包器302接收一個或多個存儲 在輸入緩沖器306的數(shù)據(jù)或元數(shù)據(jù)段(步驟504 ),并通過創(chuàng)建一個或多個大 小適于固態(tài)存儲器110的包來封包所述一個或多個數(shù)據(jù)或元數(shù)據(jù)段(步驟506 ), 其中,每個包包括一個包頭和來自一個或個段的數(shù)據(jù)。
通常,第一包包括對象標識符,該對象標識符確定對象,為了該對象而 創(chuàng)建包。第二包可包括具有信息的包頭,該信息由固態(tài)存儲設備102用于關聯(lián)第二包和第一包中確定的對象,該包頭還具有在對象內定位第二包的偏移信
息和數(shù)據(jù)。固態(tài)存儲設備控制器202管理內存庫214和包流向的物理區(qū)域。
ECC發(fā)生器304接收來自封包器302的包并為數(shù)據(jù)包生成ECC(步驟508 )。 通常,在包和ECC塊之間沒有固定關系。ECC塊可包括一個或多個包。包可包 括一個或多個ECC塊。包可始于ECC塊內的任意位置并可在ECC塊內的任意位 置結束。包可始于第一ECC塊內的任意位置并可在相繼的ECC塊中的任意位置 結束。
寫入同步緩沖器308在將ECC塊寫入固態(tài)存儲器110之前緩沖分布在對應 ECC塊中的包(步驟510),然后固態(tài)存儲控制器104在考慮到時鐘域差異的 適當?shù)臅r間寫入數(shù)據(jù)(步驟512),方法500終止于步驟514。寫入同步緩沖器 308位于本地時鐘域和固態(tài)存儲器110時鐘域的邊界上。注意到為方便起見, 方法500描述了接收一個或多個數(shù)據(jù)段并寫入一個或多個數(shù)據(jù)包,但通常接收 數(shù)據(jù)段流或組。通常,若干包括完整固態(tài)存儲器110的虛擬頁的ECC塊被寫入 固態(tài)存儲器IIO。通常,封包器302接收某個大小的數(shù)據(jù)段并生成另一大小的 包。這必然需要數(shù)據(jù)或元數(shù)據(jù)段或數(shù)據(jù)或元數(shù)據(jù)段的部分結合起來,以形成 將段的所有數(shù)據(jù)捕捉進包的數(shù)據(jù)包。
圖6是根據(jù)本發(fā)明的在固態(tài)存儲設備102內采用數(shù)據(jù)管道管理數(shù)據(jù)的方法 600的再一種實施方式的示意性流程圖。方法600始于步驟602,輸入緩沖器306 接收一個或多個將要被寫入固態(tài)存儲器110的數(shù)據(jù)或元數(shù)據(jù)段(步驟604 )。 封包器302為每個包添加包頭,所述包頭通常包括對象內包的長度。封包器302 接收一個或多個存儲在輸入緩沖器306中的段(步驟604 ),并通過創(chuàng)建一個 或多個大小適于固態(tài)存儲器110的包來封包一個或多個段(步驟606),其中 每個包包括包頭和來自一個或多個段的數(shù)據(jù)。
ECC發(fā)生器304接收來自封包器302的包并生成一個或多個用于包的ECC 塊(步驟608)。寫入同步緩沖器308在將ECC塊寫入固態(tài)存儲器110之前緩沖 分布在對應ECC塊中的包(步驟610),然后固態(tài)存儲控制器104在考慮到時 鐘域差異的合適的時間寫入數(shù)據(jù)(步驟612)。當從固態(tài)存儲器110請求數(shù)據(jù) 時,包括一個或多個數(shù)據(jù)包的ECC塊被讀入讀取同步緩沖器328并被緩沖(步 驟614)。通過存儲I/O總線210接收包的ECC塊。由于存儲I/O總線210是雙向, 當讀取數(shù)據(jù)時,寫操作、命令操作等被停止。ECC糾錯模塊322接收暫存在讀取同步緩沖器328中的請求包的ECC塊,并 在必要時修正每個ECC塊中的錯誤(步驟616 )。如果ECC糾錯模塊322確定在 ECC塊中存在一個或多個錯誤并且錯誤可利用ECC—并修正,ECC糾錯模塊 322修正ECC塊中的錯誤(步驟616)。如果ECC糾錯模塊322確定探測到的錯 誤不可用ECC修正,則ECC糾錯模塊322發(fā)送中斷。
解包器324在ECC糾錯模塊322修正任何錯誤之后接收請求包(步驟618 ) 并通過檢查和刪除每個包的包頭解包所述包(步驟618)。對齊^t塊326接收 經(jīng)過解包的包、刪除多余的數(shù)據(jù)、并采用與請求數(shù)據(jù)段的設備兼容的形式按 對象的數(shù)據(jù)段重新格式化所述數(shù)據(jù)(步驟620)。輸入緩沖器330接收經(jīng)過解 包的請求包,并在包傳送給請求設備之間緩沖包(步驟622),方法600終止 于步驟624。
圖7是示意性流程圖,示出了根據(jù)本發(fā)明的在固態(tài)存儲設備102內利用 內存庫交錯管理數(shù)據(jù)的方法700的一種實施方式。方法600始于步驟602,內 存庫交錯控制器344將一條或多條命令傳給兩個或多個隊列410、 412、 414、 416(步驟604)。通常,代理402、 404、 406、 408根據(jù)命令類型將所述命令 傳給隊列410、 412、 414、 416 (步驟604 )。隊列410、 412、 414、 416的每 個集包括用于每個命令類型的隊列。內存庫交錯控制器344在內存庫214之 間協(xié)調存儲在隊列410、 412、 414、 416的所述命令的執(zhí)行(步驟606),以使 得第一類型的命令在一個內存庫214a上執(zhí)行,而第二類型的命令在第二內存 庫214b上執(zhí)行,方法600結束于步驟608。
存儲空間的恢復
圖8是示意性框圖,示出了根據(jù)本發(fā)明的在固態(tài)存儲設備102中收集垃 圾的裝置800的一種實施方式。裝置800包括順序存儲模塊802、存儲部選擇 模塊804、數(shù)據(jù)恢復模塊806及存儲部恢復模塊808,這些模塊將在下文中描 述。在其他實施方式中,裝置800包括垃圾標記模塊812和擦除模塊810。
裝置800包括順序存儲才莫塊802,該順序存儲才莫塊802將數(shù)據(jù)包順序地寫 入存儲部內的頁。無論是新的包還是修改過的包,這些包都按順序存儲。在 這種實施方式中,通常不將修改過的包寫回其先前存儲的位置。在一種實施 方式中,順序存儲^^塊802將包寫入存儲部的頁中的第一位置,然后寫入該 頁中的下一個位置,并繼續(xù)寫入下一個位置和再下一個位置,直到該頁被寫滿。然后,順序存儲模塊802開始填充所述存儲部中的下一頁。這個過程一 直持續(xù)到所述存儲部被寫滿。
在優(yōu)選實施方式中,順序存儲;f莫塊802開始將包寫入內存庫(內存庫-0 214a)的存儲元件(如SSSO.O到SSSM.0216)中的存儲寫入緩沖器。當所 述存儲寫入緩沖器寫滿時,固態(tài)存儲控制器104使得所述存儲寫入緩沖器中 的數(shù)據(jù)被編入內存庫214a的存儲元件216中的指定頁。然后,另一個內存庫 (如內存庫-l 214b)被選定,并且當一個內存庫-0編程所述指定頁時,順序 存儲模塊802開始將包寫入內存庫214b的存儲元件218的存儲寫入緩沖器。 當內存庫214b的存儲寫入緩沖器寫滿時,該存儲寫入緩沖器中的內容被編入 每個存儲元件218中的另一指定頁。這個過程是有效率的,這是因為當一個 內存庫214a編程頁時,可填充另一個內存庫214b的存儲寫入緩沖器。
所迷存儲部包括固態(tài)存儲設備102中的固態(tài)存儲器110的一部分。通常, 所述存儲部為擦除塊。對于閃存來說,擦除塊上的擦除操作通過為每個單元 充電將1寫入所述擦除塊中的每一位。相比于始于全為1的位置的程序操作, 這是一個冗長過程,并且,當數(shù)據(jù)被寫入時, 一些位通過給被寫為0的單元 放電而改變?yōu)?。然而,當固態(tài)存儲器110不是閃存時或固態(tài)存儲器110具有 擦除周期消耗的時間和其他操作(如讀取或編程)消耗的時間差不多的閃存 時,所述存儲部可不需要被擦除。
正如此處所使用的,存儲部在大小上與擦除塊等同,但可(或可不)被 擦除。當在此處使用擦除塊時,擦除塊可指存儲元件(如SSS0.0 2:16a)內指 定大小的特定區(qū)域,并通常包括一定數(shù)量的頁。當"擦除塊"與閃存結合使 用時,擦除塊通常是在寫入之前被擦除的存儲部。當"擦除塊"與"固態(tài)存 儲器"一起使用時,擦除塊可(或可不)被擦除。正如此處所使用的,擦除 塊可包括一個#~除塊或擦除塊組,存儲元件(如SSS 0.0到SSS M.O 216a-n ) 的每一行都具有該擦除塊組中的一個擦除塊,擦除塊或擦除塊組在此處還可 被稱為虛擬擦除塊。當擦除塊指與所述虛擬擦除塊關聯(lián)的邏輯構建時,所述 擦除塊在此處可被稱為邏輯擦除塊("LEB,,)。
通常,按照處理的順序順序地存儲所述包。在一種實施方式中,當使用 寫入數(shù)據(jù)管道106時,順序存儲模塊802按照包從寫入數(shù)據(jù)管道106出來的 順序存儲包。這種順序可能是由于下述原因來自請求設備155的數(shù)據(jù)段與 讀取自另一存儲部的有效數(shù)據(jù)包(正如在下述的恢復操作期間從存儲部恢復數(shù)據(jù)一樣)混合。將恢復的、有效的數(shù)據(jù)包重路由到寫入數(shù)據(jù)管道可包括如
上文中相對于圖3的固態(tài)存儲控制器104描述的垃圾收集器旁路316。
裝置800包括選擇恢復的存儲部的存儲部選擇模塊804。選擇恢復的存儲 部可以使順序存儲模塊802將所述存儲部重新用于寫入數(shù)據(jù),因此將所述恢 復的存儲部添加到存儲池中,或者所述存儲部被重新用于在確定下述條件后 從所述存儲部中恢復有效數(shù)據(jù)所述存儲部失效、不可靠、應該纟皮刷新、或 其他將所述存儲部暫時地或永久地移出所述存儲池的理由。在另 一種實施方 式中,存儲部選才奪沖莫塊804通過識別具有大量無效數(shù)據(jù)的存儲部或擦除塊來 選擇恢復的存儲部。
在另一種實施方式中,存儲部選擇模塊804通過識別具有低額損耗的存 儲部或擦除塊來選擇恢復的存儲部。例如,識別具有低額損耗的存儲部或擦 除塊可包括識別無效數(shù)據(jù)少、擦除重復的次數(shù)少、位出錯率低或程序計數(shù)低 (緩沖器中 一頁數(shù)據(jù)寫入所述存儲部中的頁的次數(shù)少;程序計數(shù)可從下列情 況開始被測量制造設備時、所述存儲部最近一次被擦除時、其他任意事件 發(fā)生時及這些情況的組合)的存儲部。存儲部選擇;溪塊804還可使用上述參 數(shù)中的任意組合或其他參數(shù)以確定具有低額損耗的存儲部。通過確定具有低 額損耗的存儲部來選擇恢復的存儲部可有助于發(fā)現(xiàn)未充分利用的存儲部,還 可由于損耗均衡而被恢復,等等。
在另一種實施方式中,存儲部選擇-漠塊804通過識別具有高額損耗的存 儲部或擦除塊來選擇恢復的存儲部。例如,識別具有高額損耗的存儲部或擦 除塊來選擇恢復的存儲部包括識別擦除重復次數(shù)多、位出錯率高、具有不可 恢復的ECC塊或程序計數(shù)高的存儲部。存儲部選擇模塊804還可使用上述參 數(shù)的任意組合或其他參數(shù)以確定具有高額損耗的存儲部。通過確定具有高額 損耗的存儲部來選擇恢復的存儲部可有助于發(fā)現(xiàn)被過度使用的存儲部,還可 通過利用擦除周期刷新所述存儲部而被恢復等等,或者使所述存儲部像不能 使用那樣不提供服務。
裝置800包括數(shù)據(jù)恢復模塊806,該數(shù)據(jù)恢復模塊806從選定為恢復的存 儲部中讀取有效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他將要由順序存儲模塊802 順序地寫入的數(shù)據(jù)包排隊并更新具有由順序存儲模塊802寫入的有效數(shù)據(jù)的 新物理地址的索引。通常,所述索引為對象索引,該對象索引將對象的數(shù)據(jù) 對象標識符映射到形成包的位置的物理地址,所述數(shù)據(jù)對象存儲在固態(tài)存儲器110中。
在一種實施方式中,裝置800包括存儲部恢復模塊808,該存儲部恢復模 塊808為使用或再使用而準備所述存儲部并將所述存儲部標記為對順序存儲 模塊802可用,以在數(shù)據(jù)恢復模塊806完成從所述存儲部中復制有效數(shù)據(jù)之 后順序地寫入數(shù)據(jù)包。在另一種實施方式中,裝置800包括存儲部恢復模塊 808,該存儲部恢復模塊808將選定為恢復的存儲部標記為無法存儲數(shù)據(jù)。通 常,這是由于存儲部選擇模塊804識別具有高額損耗的存儲部或擦除塊來選 擇恢復的存儲部,從而使得所述存儲部或擦除塊沒有條件被用于可靠的數(shù)據(jù) 存儲。
在一種實施方式中,裝置800位于固態(tài)存儲設備102的固態(tài)存儲設備控 制器202內。在另一種實施方式中,裝置800控制固態(tài)存儲設備控制器202。 在另一種實施方式中,裝置800的一部分位于固態(tài)存儲設備控制器202內。 在另一種實施方式中,由數(shù)據(jù)恢復模塊806更新的對象索引也位于固態(tài)存儲 設備控制器202內。
在一種實施方式中,所述存儲部為擦除塊,并且裝置800包括擦除模塊 810,該擦除模塊810在數(shù)據(jù)恢復模塊806完成從所述選定的擦除塊中復制有 效數(shù)據(jù)包之后并在存儲部恢復模塊808將所述擦除塊標記為可用之前,擦除 選定為恢復的擦除塊。對于閃存和其他擦除操作消耗的時間比讀取或寫入操 作消耗的時間長得多的固態(tài)存儲器來說,在使數(shù)據(jù)塊可以寫入新數(shù)據(jù)之前擦 除所述數(shù)據(jù)塊有助于高效的操作。當固態(tài)存儲器110布置在內存庫214內時, 擦除模塊810的擦除操作可在一個內存庫上執(zhí)行,而另一個內存庫可執(zhí)行讀 取、寫入或其他操作。
在一種實施方式中,裝置800包括垃圾標記模塊812,該垃圾標記模塊 812將存儲部中的數(shù)據(jù)包識別為無效,以響應指示所述數(shù)據(jù)包不再有效的操 作。例如,如果數(shù)據(jù)包被刪除,垃圾標記模塊812可將所迷數(shù)據(jù)包識別為無 效。讀-修改-寫操作是用于將數(shù)據(jù)包識別為無效的另一種方法。在一種實施方 式中,垃圾標記才莫塊812可通過更新索引將所述數(shù)據(jù)包識別為無效。在另一 種實施方式中,垃圾標記模塊812可通過存儲另一數(shù)據(jù)包將所述數(shù)據(jù)包識別 為無效,所述另一數(shù)據(jù)包指示無效的數(shù)據(jù)包已經(jīng)被刪除。這種方法是有利的, 這是由于在固態(tài)存儲器110中存儲所述數(shù)據(jù)包已被刪除的信息允許對象索引 重建才莫塊262或類似模塊重建具有項的對象索引,所述項指示所述無效的數(shù)椐包已經(jīng)被刪除。
在一種實施方式中,裝置800可被用于在清洗命令之后填充數(shù)據(jù)的虛擬 頁中的剩余部分,以提升整體的性能,其中,所述清洗命令使數(shù)據(jù)停止流入
寫入數(shù)據(jù)管道106,直到寫入數(shù)據(jù)管道106為空且所有的包已被永久地寫入非 易失性固態(tài)存儲器110。這具有以下好處降低了需要的垃圾收集的量、減少 了用于擦除存儲部的時間并減少了編程虛擬頁所需的時間。例如,可僅在準 備將一個小包寫入固態(tài)存儲器100的虛擬頁內時,接收清洗命令。編程這個 幾乎為空的頁可能會引起下述結果需要立即恢復浪費的空間;導致所述存 儲部內的有效數(shù)據(jù)被當作垃圾不必要的收集;及擦除、恢復所述存儲空間并 將所述存儲空間返回到可用空間池以被順序存儲模塊802寫入。
將所述數(shù)據(jù)包標記為無效而不是實際上擦除無效的數(shù)據(jù)包是有效率的, 這是因為,如上所迷,對于閃存和其他類似存儲器來說,擦除操作消耗相當 長的時間。允許垃圾收集系統(tǒng)(如裝置800中所述的)在固態(tài)存儲器110內 自主地運行提供了 一種將擦除操作與讀取、寫入或其他更快的操作分開的方 法,從而使得固態(tài)存儲設備102能比其他許多固態(tài)存儲系統(tǒng)或數(shù)據(jù)存儲設備 運行得快得多。
圖9是示意性流程圖,示出了根據(jù)本發(fā)明的用于存儲恢復的方法900的 一種實施方式。方法900始于步驟902,順序存儲模塊802將數(shù)據(jù)包順序地寫
入存儲部(步驟904)。所述存儲部是固態(tài)存儲設備102中的固態(tài)存儲器no
的一部分。通常,存儲部為擦除塊。所述數(shù)據(jù)包源于對象,而且所述數(shù)據(jù)包 按處理的順序被順序地存儲。
存儲部選擇模塊804選擇恢復的存儲部(步驟906),并且數(shù)據(jù)恢復才莫塊 806從選定為恢復的存儲部中讀取有效的數(shù)據(jù)包(步驟908)。通常,有效的 數(shù)據(jù)包為未被標記為擦除、刪除或其他一些無效數(shù)據(jù)標識符的數(shù)據(jù)包,所述 數(shù)據(jù)包被視為有效或"好"的數(shù)據(jù)。數(shù)據(jù)恢復模塊806將有效的數(shù)據(jù)包與其 他預定由順序存儲模塊802順序地寫入的數(shù)據(jù)包排隊(步驟910 )。數(shù)據(jù)恢復 模塊806更新具有由順序存儲模塊802所寫入的數(shù)據(jù)的新物理地址的索引(步 驟912)。所述索引包括從數(shù)據(jù)包的物理地址到對象標識符的映射。這些數(shù)據(jù) 包存儲在固態(tài)存儲器110中,并且所述對象標識符對應于所述數(shù)據(jù)包。
在數(shù)據(jù)恢復模塊806完成從所述存儲部復制有效數(shù)據(jù)后,存儲部恢復模 塊將選定為恢復的存儲部標記為對順序存儲模塊S02可用(步驟914),以順序地寫入數(shù)據(jù)包,方法900結束于步驟916。
本發(fā)明可采用其他指定形式實施而不脫離本發(fā)明的宗旨或本質特點。描 迷的實施方式在各個方面被視為僅僅是示例性而不是限制性的。因此,本發(fā) 明的范圍由附屬的權利要求確定,而不是由上述說明書確定。在本發(fā)明的權 利要求的含義和等價范圍內的所有改變被包含在本發(fā)明的保護范圍內。
權利要求
1、一種用于存儲恢復的裝置,該裝置包括將數(shù)據(jù)包順序地寫入存儲部的順序存儲模塊,所述存儲部包括固態(tài)存儲設備中的固態(tài)存儲器的一部分,所述數(shù)據(jù)包源于對象,按照處理的順序順序地存儲所述數(shù)據(jù)包;存儲部選擇模塊,該存儲部選擇模塊選擇恢復的存儲部;數(shù)據(jù)恢復模塊,該數(shù)據(jù)恢復模塊實現(xiàn)如下功能從選定為恢復的存儲部中讀取有效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他將要由所述順序存儲模塊順序地寫入的數(shù)據(jù)包排隊并更新具有由所述順序存儲模塊寫入的有效數(shù)據(jù)的新物理地址的索引,所述索引包括從存儲在所述固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對應于所述數(shù)據(jù)包的對象標識符之間的映射;及存儲部恢復模塊,該存儲部恢復模塊將所述選定為恢復的存儲部標記為對所述順序存儲模塊可用,以順序地寫入數(shù)據(jù)包,所述存儲部被標記為恢復以響應所述數(shù)據(jù)恢復模塊完成從所述存儲部中復制有效數(shù)據(jù)。
2、 如權利要求l所述的裝置,其中,所述順序存儲^t塊、所述存儲部選擇模塊、所述數(shù)據(jù)恢復模塊和所述存儲部恢復模塊位于所述固態(tài)存儲設備內的固態(tài)存儲設備控制器中,并且所述固態(tài)存儲設備控制器創(chuàng)建并保持對象索引,且所述對象索引位于所述固態(tài)存儲設備內。
3、 如權利要求l所迷的裝置,其中,所述存儲部包括擦除塊,所述裝置進一步包括擦除模塊,該擦除模塊在所述存儲部恢復模塊將所述擦除塊標記為可恢復之前擦除選定為恢復的擦除塊,擦除選定為恢復的擦除塊以響應所述數(shù)據(jù)恢復模塊從選定的擦除塊中復制有效數(shù)據(jù)包。
4、 如權利要求3所述的裝置,其中,所述固態(tài)存儲器布置在兩個或更多個內存庫內,并且當所述順序存儲模塊將數(shù)據(jù)包寫入第二內存庫中的存儲部時,所述擦除模塊擦除第 一 內存庫中的擦除塊。
5、 如權利要求3所述的裝置,其中,所述固態(tài)存儲器布置在兩個或更多個內存庫內,并且當從第二內存庫中的存儲部讀取數(shù)據(jù)時,所迷擦除模塊擦除第一內存庫中的擦除塊。
6、 如權利要求l所迷的裝置,其中,所述存儲部選擇模塊、所述數(shù)據(jù)恢復模塊和所述存儲部恢復;^莫塊自主地運行。
7、 如權利要求l所述的裝置,進一步包括垃圾標記才莫塊,該垃圾標記模塊將存儲部中的數(shù)據(jù)包識別為無效,以響應指示所述數(shù)據(jù)包不再有效的操作。
8、 如權利要求7所述的裝置,其中,所述存儲部內的所述數(shù)據(jù)包是第一數(shù)據(jù)包,指示所述第一數(shù)據(jù)包不再有效的操作包括當所述第一數(shù)據(jù)包無效時,將第二數(shù)據(jù)包寫入所述固態(tài)存儲設備。
9、 如權利要求7所述的裝置,其中,指示所述數(shù)據(jù)包不再有效的操作包括刪除操作和讀-修改-寫操作中的 一種,所述刪除操作預示著所述數(shù)據(jù)包將被刪除,而所述讀-修改-寫操作包括讀取所述數(shù)據(jù)包、修改所述數(shù)據(jù)包并將修改過的數(shù)據(jù)包寫入另 一位置,由所述順序存儲模塊將所述修改過的數(shù)據(jù)包寫入另一位置。
10、 如權利要求7所述的裝置,其中,將數(shù)據(jù)包識別為無效包括修改所述對象索引中的項以指示所述數(shù)據(jù)包為無效。
11、 如權利要求1所述的裝置,其中,所述存儲部選擇模塊通過識別具有低額損耗的存儲部來選擇恢復的存儲部。
12、 如權利要求11所述的裝置,其中,識別具有低額損耗的存儲部包括識別具有少量無效數(shù)據(jù)的存儲部。
13、 如權利要求11所述的裝置,其中,識別具有低額損耗的存儲部包括識別擦除重復次數(shù)少的存儲部。
14、 如權利要求11所述的裝置,其中,識別具有低額損耗的存儲部包括識別程序計數(shù)低的存儲部,其中,程序包括將數(shù)據(jù)包寫入所述存儲部內的指定頁。
15、 如權利要求11所述的裝置,其中,識別具有低額損耗的存儲部包括識別位出錯率低的存儲部。
16、 如權利要求1所述的裝置,其中,所述存儲部選擇模塊通過識別具有高額損耗的存儲部來選擇恢復的存儲部。
17、 如權利要求16所迷的裝置,其中,識別具有高額損耗的存儲部包括識別擦除重復次數(shù)多的存儲部。
18、 如權利要求17所迷的裝置,其中,所述存儲部恢復模塊將所述選定為恢復的存儲部標記為不可存儲數(shù)據(jù)。
19、 如權利要求17所述的裝置,其中,識別具有高額損耗的存儲部包括識別位出錯率高的存儲部。
20、 如權利要求19所述的裝置,其中,識別位出錯率高的存儲部包括識別具有不可恢復的糾錯碼("ECC")塊的存儲部。
21、 如權利要求1所述的裝置,其中,所述存儲部選擇模塊通過識別具有大量無效數(shù)據(jù)的存儲部來選擇恢復的存儲部。
22、 如權利要求1所述的裝置,其中,所述存儲部選擇模塊通過識別使用下述參數(shù)中的兩個或更多個的組合的存儲部來選擇恢復的存儲部程序計數(shù)、擦除周期計數(shù)、位出錯率、無效數(shù)據(jù)的量、擦除重復的次數(shù)及不可恢復的ECC塊的數(shù)量。
23、 如權利要求1所述的裝置,其中,所述固態(tài)存儲器布置在存儲元件的陣列中,并且存儲部包括虛擬存儲部,該虛擬存儲部包括一起存取的存儲元件行中的每一個存儲元件內的存儲部。
24、 一種用于存儲恢復的系統(tǒng),該系統(tǒng)包括包括固態(tài)存儲器的固態(tài)存儲設備,所述固態(tài)存儲器包括一個或多個存儲部,每個存儲部包括所述固態(tài)存儲設備中的所述固態(tài)存儲器的一部分,所述固態(tài)存儲設備包括將數(shù)據(jù)包順序地寫入存儲部的順序存儲模塊,所述數(shù)據(jù)包源于對象,按照處理的順序順序地存儲所述數(shù)據(jù)包;存儲部選擇模塊,該存儲部選擇模塊選擇恢復的存儲部;數(shù)據(jù)恢復模塊,該數(shù)據(jù)恢復模塊實現(xiàn)如下功能從選定為恢復的存儲部中讀取有效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他將要由所述順序存儲模塊順序地寫入的數(shù)據(jù)包排隊并更新具有由所述順序存儲模塊寫入的有效數(shù)據(jù)的新物理地址的索引,所述索引包括從存儲在所述固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對應于所述數(shù)據(jù)包的對象標識符之間的映射;及存儲部恢復模塊,該存儲部恢復模塊將所述選定為恢復的存儲部標記為對所述順序存儲模塊可用,以順序地寫入數(shù)據(jù)包,所述存儲部被標記為恢復以響應所述數(shù)據(jù)恢復模塊完成從所述存儲部中復制有效數(shù)據(jù)。
25、 一種計算機程序制品,包括計算機可讀媒體,該計算機可讀媒體具有計算機可用的程序代碼,可執(zhí)行該程序代碼以完成存儲恢復的操作,所述計算機程序制品的操作包括將數(shù)據(jù)包順序地寫入存儲部,所述存儲部包括固態(tài)存儲設備中的固態(tài)存儲器的一部分,所述數(shù)據(jù)包源于對象,按照處理的順序順序地存儲所述數(shù)據(jù)包;選擇恢復的存儲部;從選定為恢復的存儲部中讀取有效數(shù)據(jù)包;將所述有效數(shù)據(jù)包與其他為順序地寫入而排隊的數(shù)據(jù)包排隊;更新具有由順序存儲模塊寫入的有效數(shù)據(jù)的新物理地址的索引,所述索引包括從存儲在所述固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對應于所述數(shù)據(jù)包的對象標識符之間的映射;及將所述選定為恢復的存儲部標記為可用,以順序地寫入數(shù)據(jù)包,所述存儲部被標記為恢復以響應完成從所述存儲部中復制有效數(shù)據(jù)。
26、如權利要求25所述的計算機程序制品,其中,所述存儲部包括擦除塊,所述計算機程序制品的操作進一步包括在存儲部恢復模塊將所述擦除塊標記為可恢復之前擦除選定為恢復的擦除塊,擦除選定為恢復的擦除塊以響應數(shù)據(jù)恢復模塊從選定的擦除塊中復制有效數(shù)據(jù)包;及將存儲部中的數(shù)據(jù)包識別為無效,以響應指示所述數(shù)據(jù)包不再有效的操作。
全文摘要
本發(fā)明公開了一種恢復固態(tài)存儲器110內的存儲空間的裝置、系統(tǒng)和方法。順序存儲模塊802將數(shù)據(jù)包順序地寫入存儲部。所述存儲部包括固態(tài)存儲器110的一部分。所述數(shù)據(jù)包源于對象。按照處理的順序順序地存儲所述數(shù)據(jù)包。存儲部選擇模塊804選擇恢復的存儲部。數(shù)據(jù)恢復模塊806從選定為恢復的存儲部中讀取有效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他將要被順序地寫入的數(shù)據(jù)包排隊并更新具有所述有效數(shù)據(jù)的新物理地址的索引。所述索引包括從數(shù)據(jù)包的物理地址到對象標識符的映射。存儲部恢復模塊808將選定為恢復的存儲空間標記為可用,以順序地寫入數(shù)據(jù)包,以響應從所述存儲部完成復制有效數(shù)據(jù)。
文檔編號G06F3/06GK101646993SQ200780050969
公開日2010年2月10日 申請日期2007年12月6日 優(yōu)先權日2006年12月6日
發(fā)明者喬納森·撒切爾, 伯特·拉格斯特德特, 大衛(wèi)·弗林, 約翰·斯特拉瑟, 約翰·沃克, 邁克爾·扎佩 申請人:弗森多系統(tǒng)公司(dba弗森-艾奧)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
深圳市| 沙雅县| 个旧市| 凉城县| 太仆寺旗| 利津县| 鄂托克旗| 甘肃省| 永福县| 原阳县| 星座| 岫岩| 高平市| 高邮市| 新邵县| 陇南市| 会宁县| 黑山县| 龙南县| 郎溪县| 桑日县| 句容市| 富蕴县| 山西省| 子长县| 易门县| 江源县| 阳朔县| 易门县| 射阳县| 穆棱市| 拉萨市| 嫩江县| 克东县| 朝阳区| 延川县| 新兴县| 湖北省| 嫩江县| 察雅县| 阿坝县|