發明領域
本發明涉及用于存儲和訪問閃存系統中的數據的系統和方法。
發明背景
一般閃存包括很多數據塊(最小可擦除單元)。每個數據塊包括幾個數據頁面(最小可編程單元)。讀和寫操作可在頁面級被執行。擦除操作僅在塊級被執行。由于閃存的內部特征,閃存頁面不能被蓋寫。它需要在編程操作之前被擦除。因為擦除操作是非常時間密集的(它是塊級操作)且也減小閃存塊壽命(每個閃存塊與固定數量的擦除循環相關),閃存供應商常常執行閃存頁面蓋寫操作,例如1)寫新閃存頁面,2)使舊閃存頁面無效。
這導致同一頁面的很多版本,一旦數據被修改,除了頁面的最新版本以外的所有這些版本都是無效的。同一頁面的幾個無效拷貝將增加設備空間消耗,這導致寫放大(WA)的增加。
具有很多無效頁面的塊仍然不適合于重新使用,因為有效頁面不能被擦除。設備無用單元收集(GC)負責通過將有效頁面移動到新塊來回收無效頁面,一旦塊沒有所有有效頁面、它被擦除以及這個塊現在可由即將發生的寫使用。
設備GC不非常頻繁地運行,因為GC過程將干擾設備吞吐量。在具有很多無效頁面的很多塊中,只有某些塊(犧牲塊)由無用單元收集過程拾取用于清理。如果塊具有最大數量的無效頁面,則識別犧牲塊通常被完成。由于所有這些閾值和限制,所寫入的物理信息的實際量是多倍的被預期寫入的邏輯量。因此,寫暗示由設備GC=(被寫到閃存的數據/由主機寫的實際數據)引起。
某些對象存儲應用例如levelDB和rocksDB被設計為日志結構合并樹(LSM)系統。類似于SSD(固態驅動器),這些應用具有不再被需要的對象的很多無效版本。稱為壓縮的過程常常運行,其將通過移除對象的無效版本來壓縮數據庫。在SSD上運行的這些應用將同樣通過存儲無效對象來創建寫放大。由數據庫引起的WA是(被寫到閃存的數據/被寫到數據庫的實際數據)。系統的總WA因此是閃存驅動器的WA乘以數據庫的WA。
本文公開的裝置和方法提供用于避免閃存系統中的寫放大的改進的方法。
附圖的簡要說明
為了使本發明的優點被更容易理解,將通過參考在附圖中示出的特定實施方式來描寫在上面簡要描述的本發明的更特定的描述。理解了這些附圖只描繪本發明的一般實施方式且因此不應被考慮為其范圍的限制后,將通過附圖的使用以額外的特殊性和細節來描述和解釋本發明,其中:
圖1是適合于實現根據本發明的實施方式的方法的計算系統的示意性方框圖;
圖2是根據現有技術的存儲系統的部件的示意性方框圖;
圖3是根據本發明的實施方式的存儲系統的示意性方框圖;
圖4是根據本發明的實施方式的用于執行寫操作的方法的過程流程圖;
圖5是根據本發明的實施方式的用于刪除數據塊的方法的過程流程圖;以及
圖6是根據本發明的實施方式的用于執行讀操作的方法的過程流程圖;
詳細描述
將容易理解,可在各種不同的配置中布置并設計如通常在本文的附圖中所述和所示的本發明的部件。因此,如在附圖中表示的本發明的實施方式的下面的更詳細描述并不意欲限制如所主張的本發明的范圍,而是僅僅代表根據本發明的目前設想的實施方式的某些例子。通過參考附圖將最好地理解目前描述的實施方式,其中相似的部件始終由相似的數字表示。
響應于最新技術水平且特別是響應于在本領域中的還沒有被當前可用的裝置和方法完全解決的問題和需要來發展本發明。
根據本發明的實施方式可被體現為裝置、方法或計算機程序產品。相應地,本發明可采取完全硬件實施方式、完全軟件實施方式(包括固件、常駐軟件、微代碼等)或組合通常都可在本文被稱為“模塊”或“系統”的軟件和硬件方面的實施方式的形式。此外,本發明可采取體現在任何有形表達介質中的計算機程序產品的形式,有形表達介質具有體現在介質中的計算機可用的程序代碼。
可利用一個或多個計算機可用或計算機可讀介質的任何組合。例如,計算機可讀介質可包括便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)設備、只讀存儲器(ROM)設備、可擦除可編程只讀存儲器(EPROM或閃存)設備、便攜式光盤只讀存儲器(CDROM)、光學存儲設備和磁性存儲設備中的一個或多個。在所選擇的實施方式中,計算機可讀介質可包括可包含、存儲、傳遞、傳播或傳送用于由或結合指令執行系統、裝置或設備來使用的程序的任何非臨時介質。
可以用一種或多種編程語言——包括面向對象的編程語言例如Java、Smalltalk、C++等和常規過程編程語言例如“C”編程語言或類似的編程語言——的任何組合來寫用于執行本發明的操作的計算機程序代碼。程序代碼可完全在計算機系統上作為獨立軟件封裝、在獨立硬件單元上、部分地在與計算機間隔開某個距離的遠程計算機上、或完全在遠程計算機或服務器上執行。在后一情形中,遠程計算機可通過任何類型的網絡——包括局域網(LAN)或廣域網(WAN)——連接到計算機,或到外部計算機的連接可被做出(例如使用互聯網服務提供商通過互聯網)。
下面參考根據本發明的實施方式的方法、裝置(系統)和計算機程序產品的流程圖圖示和/或方框圖來描述本發明。將理解,流程圖圖示和/或方框圖的每個框和在流程圖圖示和/或方框圖中的框的組合可由計算機程序指令或代碼實現。這些計算機程序指令可被提供到通用計算機、專用計算機的處理器或其它可編程數據處理裝置以產生機器,使得經由計算機的處理器或其它可編程數據處理裝置執行的指令創建用于實現在流程圖和/或一個或多個方框圖中規定的功能/行動的模塊。
這些計算機程序指令還可存儲在可指導計算機或其它可編程數據處理裝置以特定的方式運行的非臨時計算機可讀介質中,使得存儲在計算機可讀介質中的指令產生制造物品,包括實現在流程圖和/或一個或多個方框圖中規定的功能/行動的模塊。
計算機程序指令還可被裝到計算機或其它可編程數據處理裝置上以使一系列操作步驟在計算機或其它可編程裝置上被執行以產生計算機實現的過程,使得在計算機或其它可編程裝置上執行的指令提供用于實現在流程圖和/或一個或多個方框圖中規定的功能/行動的過程。
圖1是示出示例計算設備100的方框圖。計算設備100可用于執行各種過程,例如在本文討論的過程。計算設備100可以起服務器、客戶端或任何其它計算實體的作用。計算設備可執行如本文討論的各種監控功能,并可執行一個或多個應用程序,例如本文所述的應用程序。計算設備100可以是各種計算設備例如桌上型計算機、筆記本計算機、服務器計算機、手持計算機、平板計算機等中的任一個。
計算設備100包括一個或多個處理器102、一個或多個存儲器設備104、一個或多個接口106、一個或多個大容量設備108、一個或多個輸入/輸出(I/O)設備110和顯示設備130,所有設備都耦合到總線112。處理器102包括執行存儲在存儲器設備104和/或大容量存儲設備108中的指令的一個或多個處理器或控制器。處理器102還可包括各種類型的計算機可讀介質,例如高速緩存存儲器。
存儲器設備104包括各種計算機可讀介質,例如易失性存儲器(例如隨機存取存儲器(RAM)114)和/或非易失性存儲器(例如只讀存儲器(ROM)116)。存儲器設備104還可包括可寫ROM,例如閃存。
大容量存儲設備108包括各種計算機可讀介質,例如磁帶、磁盤、光盤、固態存儲器(例如閃存)等。如圖1所示,特定的大容量存儲設備是硬盤驅動器124。各種驅動器也可被包括在大容量存儲設備108中以能夠從各種計算機可讀介質讀取和/或寫到各種計算機可讀介質。大容量存儲設備108包括可移動介質126和/或不可移動介質。
I/O設備110包括允許數據和/或其它信息被輸入到計算設備100或從計算設備100取回的各種設備。示例I/O設備110包括光標控制設備、鍵盤、袖珍鍵盤、麥克風、監視器或其它顯示設備、揚聲器、打印機、網絡接口卡、調制解調器、透鏡、CCD或其它圖像捕獲設備等。
顯示設備130包括能夠向計算設備100的一個或多個用戶顯示信息的任何類型的設備。顯示設備130的例子包括監視器、顯示終端、視頻投影設備等。
接口106包括允許計算設備100與其它系統、設備或計算環境交互作用的各種接口。示例接口106包括任何數量的不同網絡接口120,例如本地局域網(LAN)、廣域網(WAN)、無線網絡和互聯網的接口。其它接口包括用戶接口118和外圍設備接口122。接口106還可包括一個或多個用戶接口元件118。接口106還可包括一個或多個外圍接口,例如打印機、指示設備(鼠標、跟蹤板等)、鍵盤等的接口。
總線112允許處理器102、存儲器設備104、接口106、大容量存儲設備108和I/O設備110與彼此以及耦合到總線112的其它設備或部件通信。總線112代表幾種類型的總線結構中的一種或多種,例如系統總線、PCI總線、IEEE 1394總線、USB總線等。
為了說明的目的,程序和其它可執行程序部件在本文被示為分立的塊,但是應理解,這樣的程序和部件可在各種時間存在于計算設備100的不同存儲部件中,并由處理器102執行。可選地,本文所述的系統和過程可在硬件或硬件、軟件和/或固件的組合中實現。例如,一個或多個專用集成電路(ASIC)可被編程以執行本文所述的一個或多個系統和過程。
參考圖2,包括固態驅動器(SSD)200的閃存系統200一般可包括多個NAND閃存設備202。一個或多個NAND設備202可與NAND接口204通過接口連接,NAND接口204與SSD控制器206交互作用。SSD控制器206可從主機接口208接收讀和寫指令,主機接口208在主機設備例如包括計算設備100的一些或所有屬性的設備上或為主機設備實現。主機接口208可以是數據總線、存儲器控制器或計算設備例如圖1的計算設備100的輸入/輸出系統的其它部件。在常規系統中,無用單元收集由NAND接口204或SSD控制器206執行。如上面提到的,這導致由于無用單元收集和數據庫管理功能引起的寫放大。
圖3示出根據本發明的實施方式的改進的存儲系統。特別是,SSD控制器206可以相對于現有技術的SSD控制器極大地簡化。SSD控制器206可包括常規部件,例如用于存儲來自主機系統的指令的隊列300、從隊列300取回命令并通過NAND接口204以常規方式執行它們的命令處理器302。
在所示實施方式中,SSD控制器206留存邏輯到物理塊映射306和空閑塊池308。SSD控制器206可將邏輯塊標識符分配到在NAND閃存202內的存儲器塊。相應地,SSD控制器206可存儲將每個邏輯塊標識符映射到物理塊標識符、即在NAND閃存202中的物理塊的地址的邏輯到物理塊映射306。
SSD控制器206還可維持空閑塊池308。特別是,在存儲器塊被擦除之后,對那個存儲器塊的引用(例如邏輯標識符或物理地址)可被添加到空閑塊池308。當接收到寫指令時,條目由SSD控制器206從空閑塊池308刪除,且在寫指令中的數據塊然后將在由所刪除的條目引用的存儲器塊處被寫到NAND閃存202。
SSD控制器206可從主機接口208接收指令。主機接口208可包括輸入/輸出(I/O)模塊310和高速緩存器312。高速緩存器312可緩存來自一個或多個應用的指令,且I/O模塊310可將這些指令提交到SSD控制器206,接收對指令的響應(例如寫操作的確認、響應于讀操作的數據讀取等)。
訪問NAND閃存202的應用可具有應用314的一些或所有功能。應用314可有利地是數據庫應用。如上面提到的,很多數據庫應用具有顯著的寫放大。相應地,如由本文公開的系統和方法提供的在SSD控制器206處的寫放大的消除在提高數據庫應用的性能方面特別有幫助。
應用314可以是從存儲器讀取并由計算機系統的中央處理單元或處理單元組執行的應用。應用314不是固件、基本輸入輸出系統(BIOS)的部分、由SSD控制器206或介于主機系統的中央處理單元和NAND閃存202之間的其它設備執行的固件的部分。應用314可定義用于接收用戶指令并將信息(例如在顯示器130上)輸出給用戶的用戶接口。應用314可定義被編程為接收輸入和呈現包括用戶界面元件并向用戶顯現信息的界面的圖形用戶界面。
應用314可包括存儲管理模塊316。存儲管理模塊可包括映射模塊318。映射模塊318可將應用內的數據對象映射到數據對象被存儲于的邏輯塊,即相應于數據對象被存儲于的物理存儲器塊的邏輯塊。然而,映射模塊318優選地不維持邏輯存儲器塊到相應的物理存儲器塊的映射。同樣,映射模塊可例如以在邏輯塊內的偏移的形式將數據的頁面映射到在邏輯塊內的存儲器的頁面。相應地,引用頁面或其它數據對象的讀和寫操作可由映射模塊318映射到在邏輯塊內的地址。映射模塊318可接著對于每個讀和寫操作輸出引用邏輯塊和在邏輯塊內的位置的相應的讀和寫操作。相應的讀和寫操作可接著例如通過主機接口208被輸入到SSD控制器206。
存儲管理模塊316可包括寫聚集模塊320。在一些實施方式中,寫僅對數據的完整塊執行。相應地,寫聚集模塊320可聚集由應用314在其執行期間調用的寫命令,每個寫命令包括數據對象。寫聚集模塊320可聚集寫命令,直到所聚集的寫命令的數據對象足以填充數據的至少一個塊為止。在那時,寫聚集模塊322可接著向SSD控制器206發出寫命令,寫命令包括足以占據整個存儲器塊的所聚集的寫命令的數據對象。
存儲管理模塊316可包括修剪模塊(trim module)322。修剪模塊322可在應用314的執行期間檢測刪除數據對象的指令。修剪模塊322可存儲對所刪除的對象的引用,即指示所刪除的對象是無效的條目。一旦在存儲器塊例如相應于邏輯塊標識符的存儲器塊中的所有對象被確定為無效的,修剪模塊322就可接著發送引用那個邏輯塊標識符的修剪命令。修剪命令指示SSD控制器206擦除由邏輯塊標識符引用的存儲器的物理塊。SSD控制器206可將修剪命令加入隊列并根據使修剪命令與更緊急讀和寫命令交錯的算法來執行它們,以便提高SSD控制器206的吞吐量。
圖4示出可由應用314和SSD控制器206執行的方法400。方法400可包括接收寫命令402。寫命令可由應用314、即應用314的某個部件、功能或模塊調用并由存儲管理模塊316接收。應用314例如通過在緩沖器中創建描述寫命令的條目來緩存寫命令404。該條目可包括待寫入的數據,即頁面或其它數據對象或對調用寫命令的功能或模塊的引用。方法400可包括評估緩沖器是否包括關于足以至少占據整個存儲器塊的數據對象的寫命令406。如果否,則該方法在步驟402以接收隨后的寫命令而繼續。
如果緩沖器被發現包括關于足以占據整個存儲器塊的數據對象的寫命令,則在步驟408應用314將寫命令調用到SSD控制器206,寫命令包括在緩沖器中的寫命令的數據對象。寫命令可包括單個寫命令,其包括在寫命令中的所有數據對象,或可包括單獨的寫命令的集合。
響應于例如通過主機接口208接收到在步驟408調用的寫命令,SSD控制器206可從空閑塊池308選擇一存儲器塊410。可使用邏輯或物理塊標識符在池308中引用存儲器的空閑塊。在任一情況下,來自步驟408的寫命令的數據被寫到相應于在步驟410選擇的邏輯或物理塊標識符的存儲器的物理塊412。將數據寫到物理塊412可包括對數據編碼(例如使用糾錯碼(ECC)編碼),且所編碼的數據接著被寫入412。
相應于存儲器的物理塊的邏輯塊標識符可接著返回(步驟414)到應用314,其接收邏輯塊標識符416并將寫命令的數據映射到那個邏輯塊標識符418。特別是,在步驟402接收的寫命令中包括的數據對象由應用314映射到在步驟416接收的邏輯塊標識符418。例如,每個數據對象的變量名稱或其它引用可映射到邏輯塊標識符和可能映射到存儲每個數據對象的由邏輯塊標識符引用的存儲器塊內的偏移418。數據對象被存儲在存儲器塊內的偏移可由SSD控制器206返回或由應用314確定,即遵循在步驟408發送的寫命令中的數據對象的排序。
參考圖5,所示方法500可由應用314和SSD控制器206執行,以便擦除存儲器塊。方法500可包括接收刪除或以其他方式無效化數據對象(在下文中“所刪除的數據對象”)的命令502。刪除命令可由應用314、即應用314的某個部件、功能或模塊調用,并由存儲管理模塊316接收。響應于在步驟502接收的命令,使在命令中引用的數據對象無效504。例如,在數據對象到邏輯塊標識符和相應于邏輯塊標識符的存儲器塊內的位置的映射中,可在所刪除的數據對象的映射中設置標志以指示所刪除的數據對象是無效的。
方法500可包括評估數據對象被映射到的邏輯塊標識符是否包含任何有效的數據對象506。如果包含,則該方法可在步驟502以接收另一刪除命令而繼續。如果邏輯塊標識符被發現沒有被映射到其的任何有效的數據對象506,則方法500可包括輸出引用該邏輯塊標識符的修剪命令508。修剪命令可例如通過主機接口208被輸出到SSD控制器206。
當接收到修剪命令510時,SSD控制器206可識別相應于在修剪命令中的邏輯塊標識符的物理塊標識符。引用那個物理塊標識符的修剪命令可接著被加入隊列并最終由SSD控制器206執行514。如上面提到的,當修剪命令被執行時,可由在讀和寫命令和任何未決的修剪命令當中區分優先次序的優先化算法確定。當擦除相應于邏輯塊標識符的存儲器的物理塊時,存儲器的物理塊返回(步驟516)到空閑塊池308,即引用所擦除的存儲器塊的物理或邏輯塊標識符被添加到空閑塊池308。
如在圖5中明顯的,SSD控制器206不執行無用單元收集,以便擦除存儲器的物理塊。在一些實施方式中,應用314可通過將有效數據對象從邏輯塊移動,使得邏輯塊不再包含任何有效的數據對象,并可在修剪命令中被引用來執行無用單元收集。例如,邏輯塊可由應用314識別為包含小于閾值的多個有效數據對象或大于閾值的多個無效對象,并且作為響應,將有效對象移動到新邏輯塊并為所識別的邏輯塊調用修剪命令。
從SSD控制器206的功能移除無用單元收集提高了SSD控制器206的性能,特別是其吞吐量。在現有技術SSD控制器中,執行很多優先化以管理無用單元收集,以便提高設備的性能并延長它的壽命。通過從SSD控制器206移除無用單元收集,對這些復雜過程的需要被消除了,從而提高性能。
參考圖6,所示方法600可由應用314和SSD控制器206執行,以便從NAND閃存讀取數據。方法600可包括接收引用數據對象的讀命令(在下文中“讀數據對象”)600。讀命令可由應用314、即應用314的某個部件、功能或模塊調用并由存儲管理模塊316接收。響應于在步驟602接收的讀命令,應用314傳輸引用讀數據對象的讀命令604。例如,應用314可使用映射模塊318來識別邏輯塊標識符和在相應于數據對象的邏輯塊標識符內的偏移。應用314可接著例如通過主機接口208將引用那個邏輯塊標識符和偏移的讀指令傳輸到SSD控制器206。
SSD控制器206接收在步驟604傳輸的讀命令606并識別由讀命令的邏輯塊標識符引用的存儲器的物理塊608。SSD控制器206接著執行關于NAND閃存202的讀命令610以取回在被包括在讀命令中的偏移處的數據對象,并將數據對象返回(步驟612)到應用314。執行讀命令610可包括從在讀命令中引用的位置讀取所編碼的數據以及將所編碼的數據解碼以得到所存儲的數據。將所編碼的數據解碼可包括將ECC編碼數據解碼,使得可能出現的誤差使用在所編碼的數據中的信息例如使用在本領域中已知的任何ECC方案被校正。應用314接收所讀取的數據614并將它返回到在步驟602調用讀命令的應用的部件、功能、模塊或其它實體。
本發明可體現在其它特定的形式中而不偏離它的精神或基本特征。所述實施方式應在所有方面中被考慮為僅僅例證性的而不是限制性的。特別是,雖然關于NAND閃存SSD描述了方法,其它SSD設備或非易失性存儲設備例如硬盤驅動器也可受益于本文公開的方法。本發明的范圍因此由所附權利要求而不是由前述描述指示。出現在權利要求的等效形式的含義和范圍內的所有變化應被包括在它們的范圍內。