本發(fā)明涉及用于存取快閃存儲器系統(tǒng)中的經(jīng)壓縮數(shù)據(jù)的系統(tǒng)。
固態(tài)驅(qū)動器,也稱為SSD,是利用“與非”快閃存儲器裝置以作為存儲元件的數(shù)據(jù)存儲裝置。通常此類裝置具有SSD控制器,其在一端上接受主機命令,并且在另一端上向“與非”快閃通信?!芭c非”快閃是這樣一種類型的非易失性存儲裝置,它在斷電時會保持數(shù)據(jù)。SSD控制器通過“與非”接口存取“與非”快閃裝置?!芭c非”裝置具有有限數(shù)目的寫入/編程循環(huán)。對于“與非”快閃中的數(shù)據(jù)寫入操作包含兩個階段。數(shù)據(jù)傳送階段和存儲器編程階段。類似地,數(shù)據(jù)讀取分解為兩個階段。第一存儲器讀取階段和第二數(shù)據(jù)傳送階段。相比于數(shù)據(jù)的讀出時間,存儲器讀取階段為控制器引入很大的延遲(~60μs)。
“與非”快閃裸片的物理層級分解為平面、塊和頁?!芭c非”快閃裸片可以含有多個平面,每個平面劃分成塊,并且每個塊含有N個頁。典型的“與非”將具有2個平面,~4K個塊以及每個塊256個頁。
容易顯而易見的是,頁是讀取和寫入操作的最小存儲器單元,即編程或讀取操作是對頁執(zhí)行的。典型的“與非”頁大小是~4千字節(jié)、~8千字節(jié)和~16千字節(jié)。頁面大小可以稍微大于4千字節(jié)、8千字節(jié)或16千字節(jié)以容納ECC奇偶校驗數(shù)據(jù)。典型的“與非”接口數(shù)據(jù)速率可以是200MBps到400MBps。對于讀取,存儲器讀取時間將為~60μs并且數(shù)據(jù)傳出對于~16KB數(shù)據(jù)將為~40μs,對于8KB數(shù)據(jù)將為~20μs,并且對于4KB將為~10μs。
邏輯塊尋址(LBA)是用于指定存儲于計算機存儲裝置上的數(shù)據(jù)塊的位置的常見方案,所述計算機存儲裝置總體上是例如硬盤驅(qū)動器和SSD的系統(tǒng)(參照例如http://en.wikipedia.org/wiki/Computer_storage)。
典型的主機LBA粒度是512字節(jié)并且在SSD感知主機中是4KB。SSD控制器可以選擇根據(jù)4千字節(jié)操作并且管理512字節(jié)的主機LBA數(shù)目與4千字節(jié)控制器LBA數(shù)目之間的映射。系統(tǒng)中的每個LBA需要映射成獨特數(shù)據(jù)單元。這個數(shù)據(jù)單元的大小限定物理地址指針有多大。因此,LBA指針的大小將隨裸片數(shù)目、塊的數(shù)目、頁的數(shù)目和數(shù)據(jù)單元的大小根據(jù)頁中的數(shù)據(jù)單元大小而變。
舉例來說,在一個實例配置中,SSD如下配置:
系統(tǒng)中的裸片數(shù)目:128個裸片=2^7
每個裸片的塊的數(shù)目:4K+塊=2^13
每個塊的頁的數(shù)目:256頁=2^8
LBA數(shù)據(jù)單元大?。骸?KB
16KB頁中的4KB LBA的數(shù)目:4
物理裝置容量:128*4K(+)*256*16KB+=2^43
邏輯裝置容量:128*4K*256*16KB=2^41=2TB
裝置中的LBA位置的數(shù)目:2TB/4KB=2^29
指向物理位置的LBA表的一個條目中的總位=7(對于裸片)+13(對于塊)+8(對于頁)+2(對于4個LBA)=30位
存儲物理LBA位置的總LBA表大小=30位*2^29個條目=1.875千兆字節(jié)。
對于每個固件管理模式,LBA條目通常舍入成字節(jié)粒度。因此,對于每個LBA條目使用4個字節(jié)并且總LBA表大小變成4B*2^29個條目=2千兆字節(jié)。在這種情況下,4KB的主機數(shù)據(jù)作為4KB數(shù)據(jù)和奇偶校驗位經(jīng)編碼和映射到“與非”快閃中。
本文中所揭示的設備和方法提供了用于在“與非”快閃SSD或其它非易失性存儲裝置中存儲數(shù)據(jù)的改進的設備和方法。所揭示的設備和方法既增加了可以存儲于SSD中的數(shù)據(jù)量,又減小了用于存取SSD的LBA表的大小。
附圖說明
為了使得將容易理解本發(fā)明的優(yōu)點,將參照附圖中所圖示的具體實施例呈現(xiàn)對上文簡述的本發(fā)明的更具體的描述。在理解這些圖式僅描繪本發(fā)明的典型實施例且因此不應認為其限制本發(fā)明的范圍的情況下,將通過使用附圖來以額外特殊性及細節(jié)來描述并解釋本發(fā)明,在附圖中:
圖1是適合于實施根據(jù)本發(fā)明的實施例的方法的計算系統(tǒng)的示意性框圖;
圖2是根據(jù)現(xiàn)有技術的存儲系統(tǒng)的組件的示意性框圖;
圖3A至3D說明數(shù)據(jù)存儲模式,包含根據(jù)本發(fā)明的實施例的存儲模式;
圖4是根據(jù)本發(fā)明的實施例的硬件解碼器的示意性框圖;
圖5是根據(jù)本發(fā)明的實施例的用于讀取經(jīng)壓縮數(shù)據(jù)的方法的過程流程圖;
圖6是根據(jù)本發(fā)明的實施例的數(shù)據(jù)讀取的時間線;
圖7是根據(jù)本發(fā)明的實施例的用于讀取經(jīng)壓縮數(shù)據(jù)的方法的過程流程圖;以及
圖8是根據(jù)本發(fā)明的實施例的用于垃圾收集的方法的過程流程圖。
具體實施方式
將容易理解,本文中通過圖中的實例總體描述和圖示的本發(fā)明的組件可以用多種多樣的不同配置來布置和設計。因此,圖中表示的本發(fā)明的實施例和實例的以下更詳細描述并不意圖限制所要求的本發(fā)明的范圍,而是僅表示根據(jù)本發(fā)明的當前設想的實施例的某些實例。參照圖式將最好地理解當前所描述的實施例,其中通篇中用相同數(shù)字標示相同部分。
已響應于技術現(xiàn)狀并且具體來說響應于本領域中通過當前可用的設備和方法尚未完全解決的問題和需要研發(fā)了本發(fā)明。因此,已研發(fā)本發(fā)明以提供用于在快閃存儲器中存儲和存取經(jīng)壓縮數(shù)據(jù)的設備和方法。
根據(jù)本發(fā)明的實施例可以具體實施為設備、方法或計算機程序產(chǎn)品。因此,本發(fā)明可以采用全部硬件的實施例、全部軟件的實施例(包含固件、駐留軟件、微碼等)或者組合的在本文中可以全部總體上稱為“模塊”或“系統(tǒng)”的軟件方面與硬件方面的實施例的形式。此外,本發(fā)明可以采用具體實施在任何有形表達媒體中的計算機程序產(chǎn)品的形式,所述有形表達媒體具有具體實施于媒體中的計算機可用程序代碼。
可以利用一或多個計算機可用或計算機可讀媒體的任何組合。舉例來說,計算機可讀媒體可以包含便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)裝置、只讀存儲器(ROM)裝置、可擦除可編程只讀存儲器(EPROM或快閃存儲器)裝置、便攜式只讀光盤(CDROM)、光學存儲裝置和磁性存儲裝置中的一或多個。在所選的實施例中,計算機可讀媒體可包括任何非暫時性媒體,其可以容納、存儲、傳送、傳播或傳送供指令執(zhí)行系統(tǒng)、設備或裝置使用或者配合指令執(zhí)行系統(tǒng)、設備或裝置使用的程序。
用于執(zhí)行本發(fā)明的操作的計算機程序代碼可以用一或多種編程語言的任何組合編寫,包含面向?qū)ο蟮木幊陶Z言,例如Java、Smalltalk、C++等等,以及常規(guī)程序編程語言,例如“C”編程語言或類似的編程語言。程序代碼可以作為單獨軟件包完全在計算機系統(tǒng)上執(zhí)行、在單獨的硬件單元上執(zhí)行、部分地在與計算機間隔開一段距離的遠程計算機上執(zhí)行、或完全在遠程計算機或服務器上執(zhí)行。在后一種場景中,遠程計算機可以通過任何類型的網(wǎng)絡(包含局域網(wǎng)(LAN)或廣域網(wǎng)(WAN))連接到計算機,或者可以對外部計算機進行連接(舉例來說,使用因特網(wǎng)服務提供商通過因特網(wǎng))。
下文參看根據(jù)本發(fā)明的實施例的方法、設備(系統(tǒng))和計算機程序產(chǎn)品的流程圖示例和/或框圖描述本發(fā)明。應理解,流程圖示例和/或框圖的每個框,以及流程圖示例和/或框圖中的框的組合,可以通過計算機程序指令或代碼實施??梢詫⑦@些計算機程序指令提供到通用計算機、專用計算機或其它可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生機器,使得經(jīng)由計算機或其它可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令創(chuàng)建用于實施在流程圖和/或框圖框中指定的功能/動作的裝置。
這些計算機程序指令還可存儲于非暫時性計算機可讀媒體中,所述非暫時性計算機可讀媒體可以指導計算機或其它可編程數(shù)據(jù)處理設備用特定方式運轉(zhuǎn),使得存儲于計算機可讀媒體中的指令產(chǎn)生包含實施在流程圖和/或框圖框中指定的功能/動作的指令裝置的制品。
計算機程序指令也可以加載到計算機或其它可編程數(shù)據(jù)處理設備上以引起一系列操作步驟在所述計算機或其它可編程設備上執(zhí)行以產(chǎn)生計算機實施過程,使得在所述計算機或其它可編程設備上執(zhí)行的指令提供用于實施在流程圖和/或框圖框中指定的功能/動作的過程。
圖1是說明實例計算裝置100的框圖。計算裝置100可以用于執(zhí)行各種程序,例如本文中論述的那些程序。計算裝置100可以充當服務器、客戶端或任何其它計算實體。計算裝置可以執(zhí)行本文中論述的各種監(jiān)視功能,并且可以執(zhí)行一或多個應用程序,例如本文所述的應用程序。計算裝置100可以是多種多樣的計算裝置中的任一種,例如桌上型計算機、筆記本計算機、服務器計算機、手持型計算機、平板計算機等等。
計算裝置100包含一或多個處理器102、一或多個存儲器裝置104、一或多個接口106、一或多個大容量存儲裝置108、一或多個輸入/輸出(I/O)裝置110、和顯示裝置130,其全部耦合到總線112。處理器102包含執(zhí)行存儲于存儲器裝置104和/或大容量存儲裝置108中的指令的一或多個處理器或控制器。處理器102還可包含各種類型的計算機可讀媒體,例如高速緩沖存儲器。
存儲器裝置104包含各種計算機可讀媒體,例如易失性存儲器(例如隨機存取存儲器(RAM)114)和/或非易失性存儲器(例如只讀存儲器(ROM)116)。存儲器裝置104還可包含可重寫ROM,例如快閃存儲器。
大容量存儲裝置108包含各種計算機可讀媒體,例如磁帶、磁盤、光盤、固態(tài)存儲器(例如快閃存儲器)等。如圖1中所示,特定大容量存儲裝置是硬盤驅(qū)動器124。大容量存儲裝置108中還可包含各種驅(qū)動器以使得能夠從各種計算機可讀媒體讀取和/或?qū)懭氲礁鞣N計算機可讀媒體。大容量存儲裝置108包含可裝卸媒體126和/或不可裝卸媒體。
I/O裝置110包含各種允許向計算裝置100輸入數(shù)據(jù)和/或其它信息或從計算裝置100檢索數(shù)據(jù)和/或其它信息的裝置。實例I/O裝置110包含光標控制裝置、鍵盤、小鍵盤、麥克風、監(jiān)視器或其它顯示裝置、揚聲器、打印機、網(wǎng)絡接口卡、調(diào)制解調(diào)器、鏡頭、CCD或其它圖像俘獲裝置等等。
顯示裝置130包含任何類型的能夠向計算裝置100的一或多個用戶顯示信息的裝置。顯示裝置130的實例包含監(jiān)視器、顯示終端、視頻投影裝置等等。
接口106包含允許計算裝置100與其它系統(tǒng)、裝置或計算環(huán)境交互的各種接口。實例接口106包含許多種不同網(wǎng)絡接口120,例如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、無線網(wǎng)絡和因特網(wǎng)接口。其它接口包含用戶接口118和外圍裝置接口122。接口106還可包含一或多個用戶接口元件118。接口106還可包含一或多個外圍接口,例如用于打印機、指向裝置(鼠標、軌跡墊等)、鍵盤的接口等等。
總線112允許處理器102、存儲器裝置104、接口106、大容量存儲裝置108和I/O裝置110以及耦合到總線112的其它裝置或組件彼此通信??偩€112表示幾種類型的總線結(jié)構中的一或多者,例如系統(tǒng)總線、PCI總線、IEEE 1394總線、USB總線等。
出于說明的目的,本文中將程序和其它可執(zhí)行程序組件展示為離散塊,但是應理解,這些程序和組件可以在各種時間駐留在計算裝置100的不同存儲組件中,并且通過處理器102執(zhí)行。替代地,本文所述的系統(tǒng)和程序可以在硬件或硬件、軟件和/或固件的組合中實施。舉例來說,一或多個專用集成電路(ASIC)可以經(jīng)編程以執(zhí)行本文所述的系統(tǒng)和程序中的一或多者。
參看圖2,在一些實施例中,包含SSD 200的系統(tǒng)200可以包含多個“與非”快閃存儲器裝置202。一或多個“與非”裝置202可以與“與非”接口204介接,“與非”接口204與SSD控制器206交互。SSD控制器206可以從實施在主機裝置(例如包含計算裝置100的屬性中的一些或全部的裝置)上或?qū)τ谒鲋鳈C裝置實施的主機接口208接收讀取和寫入指令。主機接口208可以是數(shù)據(jù)總線、存儲器控制器或計算裝置的輸入/輸出系統(tǒng)的其它組件。
本文中所揭示的系統(tǒng)和方法可以通過插置在主機接口208和“與非”接口204之間的SSD控制器206實施。在其它實施例中,“與非”接口204可以實施其中所揭示的功能性中的一些或全部。在另外其它實施例中,額外組件可以插置在常規(guī)“與非”接口204和SSD控制器206之間,以便實施本文中所揭示的功能的全部或部分。
本文中所揭示的系統(tǒng)和方法有利地用于“與非”快閃存儲器202內(nèi)存儲的數(shù)據(jù)的壓縮,同時還減少映射和存取經(jīng)壓縮數(shù)據(jù)所必需的數(shù)據(jù),所述經(jīng)壓縮數(shù)據(jù)例如是存儲于“與非”快閃存儲器、SSD控制器、主機計算裝置的RAM或一些其它存儲器裝置中的LBA表。
本文中作為下面的實例提供示范性使用情況
情況1:原始數(shù)據(jù)壓縮方法
壓縮的一個固有優(yōu)點是其增加了總邏輯系統(tǒng)容量并且降低了讀取和寫入操作期間的總功耗。具體來說,相比于未經(jīng)壓縮數(shù)據(jù),相同數(shù)目的主機LBA可以占據(jù)更少空間。因此,對于相同的物理空間,可以存儲在“與非”內(nèi)部的LBA(即數(shù)據(jù))數(shù)目增加。如果最大壓縮率是50%,則可以為相同容量指派至多兩倍的數(shù)據(jù)(和LBA)。在以上實例中,假設所有LBA都具有這個壓縮率,這意味著可以在一個16KB物理頁中存儲8個壓縮LBA而不是4個未經(jīng)壓縮的LBA。壓縮率限定寫入到頁中的數(shù)據(jù)的長度。
如果不同LBA數(shù)據(jù)具有不同壓縮率(這對于壓縮算法是典型的),則這些壓縮LBA數(shù)據(jù)的最終長度是不同的?,F(xiàn)在粒度不是4KB,而是取決于最小單位并且每個壓縮LBA數(shù)據(jù)大小是可變的。在一些實施例中,它可以是1字節(jié)粒度以恰好偏移到經(jīng)編碼碼字數(shù)據(jù)的開頭,或者是1KB,如果假設1KB是最小單位的話(這一點不同于本文所述的其它情況)。這會直接暗示LBA指針的大小。現(xiàn)在不是需要2位指示位置,而是需要保存15位以在16KB+(=2^15字節(jié))的頁中精確定點LBA數(shù)據(jù)的確切開頭,或在1KB粒度的情況下需要5位。這樣不但會使LBA映射表所需的物理空間增加50%(如下面的計算中所示),而且使得LBA指針大于32位(未對準)(LBA表需要更多幾個位用于固件管理)。這在SRAM空間方面和LBA查表方面對于系統(tǒng)是巨大的開銷,因為32位上的任何存取需要多次讀取和管理重疊數(shù)據(jù)。
因為可以向每個LBA指派單獨的碼字,所以這需要為LBA表中的LBA中的每一個提供開始位置。因為壓縮LBA長度可能是可變的,所以每個LBA的開始位置可能必須具體到一個字節(jié)或2個字節(jié)的程度,即,對于16KB+頁,偏移值可以在0~2^15的范圍內(nèi),并且指向頁內(nèi)的地址指針將是15位。假設至多25%的壓縮率,每4KB的用戶數(shù)據(jù)可以壓縮到1KB加碼字位。在極端的情況下,所有LBA經(jīng)過25%的壓縮,并且每個16KB+的頁可以含有16個LBA。因此,表征情況1的模式的值如下:
邏輯裝置容量:128*4K*256*16KB=2^41=2TB
裝置中的LBA位置的數(shù)目:2TB/4KB=2^29個條目
考慮跨越16KB+頁長度的可變偏移的LBA表的一個條目中的總位=7(對于裸片)+13(對于塊)+8(對于頁)+15(跨越16KB+頁大小的可變LBA偏移)=每個條目43位
存儲物理LBA位置的總LBA表大?。?3位*2^29個條目=2.6875千兆字節(jié)
當將每個條目舍入到字節(jié)邊界時的總LBA表大小,每個條目6個字節(jié)=6個字節(jié)*2^29=3千兆字節(jié)。
對于情況1,可以如下執(zhí)行LBA的經(jīng)壓縮數(shù)據(jù)的存取:
1)固件(例如主機裝置的固件)讀出LBA表條目連同對于LBA偏移分配的N位(例如43)。
2)對于整個LBA碼字的“與非”讀出。
3)解碼碼字。
4)為了主機傳送或比如垃圾收集之類的內(nèi)部操作獲得的LBA用戶數(shù)據(jù)。
情況1的原始方法的問題是LBA表大小很大。處理這個問題的一種方法將是將每個LBA的指針保存到“與非”頁本身而不是LBA表中。這種方法在下文更詳細地論述(情況3、4和5)。如果使用標頭存儲指針信息,則這將需要讀出標頭信息以獲得物理頁中的LBA開始位置或LBA偏移。這個標頭信息還需要用與用戶數(shù)據(jù)相同的校正能力編碼。這種方法可以用兩種方式進行以檢索LBA數(shù)據(jù)。第一種方式是首先讀取標頭以獲得指針信息,并且在第二讀取中讀出LBA數(shù)據(jù)。以此方式,必需從“與非”(見下面的情況3)的兩個讀取。第二種方式是在一個讀取中一起讀取標頭和LBA數(shù)據(jù)兩者,并且稍后定位LBA數(shù)據(jù)。這種第二方法會引發(fā)從“與非”的冗余數(shù)據(jù)讀出,因為在找到指針信息之前無法確定LBA數(shù)據(jù)的位置(見下面的情況4)。
情況2:“與非”裝置中的LBA指針存儲
另一方法是在碼字中編碼指針信息連同用戶數(shù)據(jù)。在這種情況下,讀出指針信息將涉及讀出含有用戶數(shù)據(jù)的整個碼字,將其解碼,接著找到LBA數(shù)據(jù)的指針信息。在這種方法中,LBA表必須存儲每個LBA的碼字位置和碼字數(shù)目以便讀出指針信息和LBA數(shù)據(jù)。對于至多25%的壓縮率,16KB+物理頁中的LBA的數(shù)目將在從4LBA直到16LBA的范圍內(nèi)。LBA表中的分配給碼字識別的位數(shù)目將取決于經(jīng)編碼碼字的大小。對于2KB碼字,16KB物理頁中的碼字總數(shù)將是8并且將需要LBA表中的3位。碼字大小越大,每個碼字將含有的LBA越多。因為壓縮LBA可以越過多個碼字,例如4KB數(shù)據(jù)可以越過三個2KB碼字。因而需要3位再加2位(即5位)以指向經(jīng)編碼碼字中的LBA內(nèi)容。
參看圖3A,在常規(guī)方法中,頁包含多個LBA A-D,其各自具有相同寬度。對于指針存儲于LBA表中的原始壓縮方法(情況1),頁可以包含多個LBA A-D,其具有可變長度,如圖3B中所示。由于LBA A-D具有可變長度,所以可以在相同碼字中編碼LBA A-D中的多個。舉例來說,由于LBA A較小,所以可以在單個碼字中編碼壓縮LBA A和LBA B,用于錯誤校正的目的。例如,可以在單個碼字CWAB中編碼LBA A和LBA B,單個碼字CWAB可以被解碼以獲得LBA A和LBA B兩者。
參看圖3C,情況2可以存儲每個LBA A-D與對應的標頭HA-HD。每個LBA A-D和其對應的標頭HA-HD可以在單個碼字CWA-CWD中編碼。
對于情況2的存儲方案,表征值如下:
邏輯裝置容量:128*4K*256*16KB=2^41=2TB
裝置中的LBA位置的數(shù)目:2TB/4KB=2^29個條目
考慮跨越16KB+頁長度的可變偏移的LBA表的一個條目中的總位=7(對于裸片)+13(對于塊)+8(對于頁)+5(2KB碼字偏移和2KB碼字內(nèi)的多達4KB的數(shù)據(jù)偏移。)=每個條目33位
存儲物理LBA位置的總LBA表大?。?3位*2^29條目=2.0625千兆字節(jié)
將每個條目舍入到字節(jié),每個條目5字節(jié)=5字節(jié)*2^29=2.5千兆字節(jié)。
對于情況2,可以如下執(zhí)行LBA的經(jīng)壓縮數(shù)據(jù)的存?。?/p>
1)固件讀出LBA表條目連同對于碼字分配的N位,其中N是碼字中的位數(shù)目。
2)對于整個碼字的“與非”讀出(~60μs的“與非”快閃讀取時間加~10μs的數(shù)據(jù)傳送時間)。
3)解碼碼字。
4)獲得指向LBA開頭的指針信息。
5)使用這個位置的數(shù)據(jù)作為LBA用戶數(shù)據(jù)以用于主機傳送目的或用于比如垃圾收集之類的內(nèi)部操作。
情況2的不足之處是讀出的數(shù)據(jù)多于必需的數(shù)據(jù),即,如果碼字含有8個LBA,則要讀出1個LBA包括還讀出其余的7個LBA。這樣會消耗傳送功率和“與非”傳送時間。而且,需要對8個LBA+標頭信息執(zhí)行解碼,因而會消耗額外的解碼器功率(比必需的功率多了7倍)。并且,解碼8個LBA而不是1個LBA會花費額外時間,因而影響到性能。使用這種方法(情況2),LBA表大小增加25%,并且讀出LBA會引發(fā)整個碼字的額外讀出和標頭信息的后處理計算以獲得LBA偏移。
情況3:在單獨的碼字中單獨存儲指針
在另一個實例中,每個LBA編碼為獨立的碼字,并且在“與非”內(nèi)部作為單獨的碼字保存指針信息。舉例來說,如圖3D中所示,對應于LBA A-D的標頭HA-HD存儲于與LBA A-D自身不同的單獨的一個或多個碼字中。舉例來說,HA和HB可以編碼在碼字CWH1中,而碼字CWH2編碼標頭HC和HD。LBA A-D分別編碼到一或多個碼字CWA-CWD中。至于本文中所揭示的其它實施例,可以在單個碼字中表示多個LBA A-D。舉例來說,LBA A和LBA B可以表示為相同碼字CWA。替代地,每個LBA A-D可以由其自身的碼字CWA-CWD表示。
對于情況3,從特定LBA讀取數(shù)據(jù)可以如下繼續(xù):
1)固件讀出不含對特定的LBA數(shù)據(jù)的指針的LBA表條目。
2)發(fā)布“與非”讀取和讀出標頭碼字(~60μs存儲器讀取時間+數(shù)據(jù)傳送時間)。
2)解碼標頭碼字。
3)對經(jīng)過解碼的標頭碼字進行后處理以獲得指向LBA開頭的指針信息。
4)再次發(fā)布頁讀取,從而引發(fā)另一~60μs“與非”讀取時間+數(shù)據(jù)傳送時間。
5)解碼LBA數(shù)據(jù)。
6)使用這個位置的數(shù)據(jù)作為LBA用戶數(shù)據(jù)以用于主機傳送目的或用于比如垃圾收集之類的內(nèi)部操作。
情況4:讀出標頭和LBA兩者,以及后續(xù)的數(shù)據(jù)提取
在另一方法中,如圖3D中所示存儲的數(shù)據(jù)可以如下存取:
1)發(fā)布“與非”頁讀取并且讀出整個頁內(nèi)容(~60μs存儲器讀取時間+數(shù)據(jù)傳送時間)。
2)解碼整個頁內(nèi)容,包含標頭指針碼字,對經(jīng)過解碼的標頭碼字進行后處理以獲得指向LBA開頭的指針信息。
3)使用指針信息從經(jīng)過解碼的頁內(nèi)容獲得LBA數(shù)據(jù)。
4)使用這個位置的數(shù)據(jù)作為LBA用戶數(shù)據(jù)以用于主機傳送目的或用于比如垃圾收集之類的內(nèi)部操作。
情況5:對于單個頁讀取實施單獨的標頭和LBA數(shù)據(jù)傳送的硬件解碼器
下文描述的情況5的方法彌補了前述方法的不足。具體來說,情況5可以有利地是:
1)從LBA表中移除LBA偏移位。LBA表僅僅需要含有達到物理頁等級的LBA的位置,而不是頁內(nèi)部的偏移;
2)將必需讀出和解碼的數(shù)據(jù)減少成所請求的LBA加標頭部分,因而節(jié)省傳送時間和傳送功率;
3)僅僅需要對特定的LBA和標頭部分執(zhí)行解碼,因而節(jié)省解碼功率,這包含解碼器引擎功率和dram存取功率;
4)實現(xiàn)高性能,而且不需要固件進行后處理和分解標頭和數(shù)據(jù),因為這是由硬件解碼器執(zhí)行的;以及
5)在垃圾收集或系統(tǒng)數(shù)據(jù)回收過程期間不需要重新編碼LBA。
參看圖4,所圖示的系統(tǒng)可并入到SSD控制器206或“與非”接口204中,以便根據(jù)本文中所揭示的系統(tǒng)和方法提供對經(jīng)壓縮數(shù)據(jù)的存取。硬件解碼器404可以插置在讀出引擎402與主機接口410之間。讀出引擎402可以可操作以響應來自硬件解碼器404的頁讀取,并且,作為響應,從“與非”快閃存儲器202檢索所請求的頁,并將其存儲在內(nèi)部緩沖器中。讀出引擎402可以進一步可操作以通過從內(nèi)部緩沖器讀取傳送指令所參考的數(shù)據(jù)并且將數(shù)據(jù)提供到硬件解碼器而響應來自所述硬件解碼器的傳送指令。
硬件解碼器404可以包含標頭解碼器模塊406、LBA偏移計算模塊408和LBA/標頭末尾檢測模塊410。標頭解碼器模塊406可操作以解碼標頭碼字。偏移計算模塊408可經(jīng)配置以計算每個LBA碼字的偏移并且確定由硬件解碼器404從主機接口412接收的讀取指令中所請求的特定LBA的偏移。LBA/標頭末尾檢測模塊410使用由標頭確定的偏移來確定所請求的LBA的頁內(nèi)的實際偏移。這可以包含確定標頭部分的末尾以便獲得基本偏移。接著可將由標頭確定的偏移加到這個基本偏移以便獲得所請求的LBA的頁內(nèi)的偏移。
硬件解碼器404可經(jīng)配置以自動發(fā)布針對所請求的LBA所確定的偏移下的LBA的適當LBA讀出。在其中通過硬件執(zhí)行這整個操作的一些實施例中,不需要主機裝置的固件對數(shù)據(jù)進行后處理。而且,當硬件解碼器404解碼標頭并且計算偏移時,使用相同頁讀取操作來讀出標頭碼字和LBA數(shù)據(jù)碼字兩者,從而不再需要第二頁讀取操作。下文更詳細地描述頁中的標頭和數(shù)據(jù)的格式以及操作序列。
參看圖5,可以使用系統(tǒng)400相對于來自主機裝置的讀取指令執(zhí)行所圖示的方法500,所述讀取指令參考“與非”快閃存儲裝置內(nèi)的頁的LBA。讀出引擎402作為響應在對于LBA的請求中接收標頭數(shù)據(jù)傳送,并且從“與非”快閃接收頁數(shù)據(jù)502。如上所述,讀出引擎402可以執(zhí)行頁讀取請求,其從“與非”快閃裝置請求頁數(shù)據(jù)502,并且將其存儲在內(nèi)部緩沖器中。讀出引擎402可以將標頭數(shù)據(jù)506提供到標頭解碼器模塊406。可以響應于來自硬件解碼器404的數(shù)據(jù)傳送指令提供標頭數(shù)據(jù)506。標頭解碼器模塊406解碼標頭數(shù)據(jù)以獲得解碼標頭510。LBA偏移計算模塊408使用解碼標頭510確定相對于其執(zhí)行方法500的讀取指令中所參考的特定LBA的偏移514。LBA/標頭末尾檢測模塊410使用偏移514確定所請求的LBA開始處的頁內(nèi)的偏移。舉例來說,可以將偏移514加到被發(fā)現(xiàn)是存儲于頁中的數(shù)據(jù)的標頭部分的末尾的基地址。LBA/標頭末尾檢測模塊410可使用偏移514確定所請求的LBA的頁內(nèi)的偏移??梢詫⒖歼@個偏移的請求518提交給讀出引擎402,讀出引擎402接著輸出LBA數(shù)據(jù)520,即所請求的LBA的LBA碼字。
可以使用圖4的系統(tǒng)和圖5的方法讀取數(shù)據(jù),其將每個LBA編碼成獨立碼字,如圖3D中所示。這意味著每個碼字的大小可以根據(jù)經(jīng)壓縮數(shù)據(jù)結(jié)果而可變。在一個例子中,對于25%的壓縮,具有4KB的未經(jīng)壓縮大小的每個碼字可以在從1KB(25%的原始數(shù)據(jù))到4KB(100%的原始數(shù)據(jù))的范圍內(nèi)。如上文相對于圖3D所述將物理頁內(nèi)部的所有LBA的標頭(例如32KB頁)在物理頁內(nèi)部分組,并且編碼到標頭碼字中。每個標頭對應于存儲于其中存儲標頭的頁中的LBA中的一個。每個標頭可以包含其參考的LBA的識別符,其參考的LBA的長度和固件數(shù)據(jù)。
響應于來自主機接口的讀取請求并且在指令讀出引擎將頁讀取到其內(nèi)部緩沖器中之后,硬件引擎可以首先讀出標頭碼字并且解碼這些標頭碼字。解碼可以與來自“與非”快閃的其余的數(shù)據(jù)傳送并行發(fā)生。在解碼這些碼字和獲得標頭之后,偏移模塊408在標頭內(nèi)積聚長度以產(chǎn)生經(jīng)編碼LBA碼字的偏移值(即開始位置的指針)。舉例來說,LBA N的開始地址/偏移將是Header_codeword_size*Number_of_Header碼字+長度(LBA M)。硬件解碼器404可以將來自固件(例如主機接口)的所請求的LBA與解碼標頭內(nèi)容匹配以去掉LBA偏移,因為標頭含有壓縮LBA數(shù)據(jù)流中的每一個的長度。
一旦獲得LBA偏移,硬件解碼器404就可以發(fā)布數(shù)據(jù)傳送命令以讀出LBA碼字,LBA碼字接著被發(fā)送到解碼器,例如硬件解碼器。當硬件解碼器執(zhí)行識別和讀出物理頁中的LBA碼字時,它不需要重新發(fā)布頁讀取,因而實現(xiàn)了從單個頁讀取存儲器存取(~55μs)讀取標頭和LBA兩者。
標頭碼字可以足夠小,并且相比于讀出和解碼LBA碼字,標頭碼字的讀出和解碼花費的時間量較短。因此,相比于簡單地基于LBA表中的偏移讀出未經(jīng)壓縮LBA碼字性能影響極小。在大多數(shù)情況下,性能實際上更好,因為相比于未經(jīng)壓縮的數(shù)據(jù),壓縮使得要處理的數(shù)據(jù)量減少。舉例來說,圖6說明根據(jù)情況5的方法的讀取操作的時間線。如圖所示,用于頁讀取的大約60μs的第一延遲602之后是大約1.5μs的將標頭數(shù)據(jù)傳送到硬件解碼器404的延遲604。解碼標頭可能會引入大約2μs的延遲606。在延遲606期間,硬件解碼器404或讀出引擎202可能會阻擋對裸片的頁讀取。具體來說,延遲606可能會占用“與非”閑置循環(huán)。接著可傳送所請求的LBA碼字,從而導致取決于LBA碼字的長度的延遲608(對于1KB的~2.5μs到對于4KB的~10μs)。可以解碼LBA碼字,從而導致大約2μs的延遲610。
圖7說明用于處理讀取命令的方法700。方法600可以由硬件解碼器404結(jié)合讀出引擎402執(zhí)行。方法700前面可以是從主機接口或者例如垃圾收集之類的某個其它內(nèi)部過程接收的從“與非”快閃裝置讀取特定LBA的指令,所述指令參考找到LBA的頁并且識別要讀取頁的哪個LBA。
所述方法700可以包含針對來自主機接口的讀取指令中參考的頁發(fā)布702對“與非”快閃裝置的頁讀取。作為響應,讀出引擎402可以從存儲頁數(shù)據(jù)的“與非”快閃裝置(例如適當?shù)摹芭c非”裸片)讀取所述頁的頁數(shù)據(jù),并且在緩沖器中存儲頁數(shù)據(jù)。
所述方法700可以包含從頁數(shù)據(jù)讀取704一或多個標頭碼字,并且解碼706標頭碼字以獲得標頭。接著可分析標頭以獲得708LBA中的一些或全部的偏移信息。舉例來說,如果讀取指令中參考了LBA N,則可以將LBA 0至N-1的長度求和以獲得LBA N的偏移。替代地,可以執(zhí)行遞歸方法,借此計算LBA N-1的偏移,接著將其與LBA N-1的長度求和以獲得LBA N的偏移??梢杂孟嗤姆绞交贚BA N-1的偏移及其長度獲得LBA N-1的偏移,以此類推,直到LBA 0的偏移(是0)或標頭部分的最后一個位。
一旦獲得偏移,方法700就可以包含讀取710所述偏移地址處的LBA。舉例來說,在請求LBA N的情況下,可以評估對應的標頭以確定LBA N的碼字的長度L。接著可傳送在步驟708中確定的LBA N的偏移之后的L位。
接著可解碼712在步驟708處傳送的LBA碼字并且可以將LBA的用戶數(shù)據(jù)傳回714到主機接口或其它請求組件或過程。解碼712可以包含解壓縮LBA,或者可以在將壓縮LBA提供到主機接口或發(fā)布讀取指令的其它請求實體之后解壓縮LBA,或者可以通過某個其它干預實體或過程解壓縮LBA。
表征情況5的方法的值如下:
邏輯裝置容量:128*4K*256*16KB=2^41=2TB
裝置中的LBA位置的數(shù)目:2TB/4KB=2^29個條目
考慮跨越16KB+頁長度的可變偏移的LBA表的一個條目中的總位=7(對于裸片)+13(對于塊)+8(對于頁)+0(標頭含有LBA碼字偏移信息)=每個條目28位
存儲物理LBA位置的總LBA表大?。?8位*2^29條目=1.75千兆字節(jié)
將每個條目舍入到字節(jié),每個條目4個字節(jié)=4字節(jié)*2^29=2千兆字節(jié)
相比其它方法(情況1-4)顯而易見的是,情況5的方法即使與未經(jīng)壓縮的數(shù)據(jù)相比每個條目也有更多的空閑位。下面的表1示出了情況5相比于其它三種情況的減少的位要求。這樣使得硬件存儲器資源直接節(jié)省并且降低了管理LBA表條目的復雜度。具體來說,要將每個LBA寫入到頁,可以創(chuàng)建或者維持LBA表中的對應的條目,其不存儲每個LBA的長度或每個LBA的頁內(nèi)偏移。
表1:LBA大小和表條目比較
參看圖8,圖3D中所示的壓縮LBA的存儲方案可以使得能夠?qū)BA進行簡單并且高效的垃圾收集或碎片整理。舉例來說,硬件解碼器404、讀出引擎402或其它組件可以執(zhí)行所圖示的方法800。舉例來說,方法800可以包含從頁中讀取802有效LBA的碼字,并且省去讀取無效LBA。無效LBA可以是已經(jīng)被擦除并且不再表示有待存儲的數(shù)據(jù)的LBA。方法800接著可包含重寫804僅僅包含有效LBA的頁并且省去無效LBA。圖3D的存儲模式的優(yōu)點是可以在垃圾收集過程期間讀取和重寫有效碼字的LBA,無需在垃圾收集過程期間解碼和重新編碼有效碼字的LBA或者解壓縮和壓縮有效碼字的LBA。
方法800可進一步包含更新806頁的標頭部分,這是方法800的主題。具體來說,可以將對應于有效LBA中的每一個的標頭編碼到一或多個標頭碼字中,并且還將其寫入到頁。標頭可以包含上文方法中指出的信息,包含例如LBA識別符和長度之類的信息。
本文中所揭示的系統(tǒng)和方法提供用于智能標頭和檢索以使得能夠?qū)⒔?jīng)壓縮數(shù)據(jù)存儲到“與非”快閃裝置中的硬件技術。解碼標頭、獲得“與非”頁中的LBA位置和執(zhí)行LBA碼字的自動讀出的硬件自動技術提供了在系統(tǒng)中真實利用壓縮的獨特優(yōu)點。這些方法的組合得到系統(tǒng)以及主機操作的電力節(jié)省和性能增益。
在不脫離本發(fā)明精神或基本特征的情況下,可以其它特定形式實施本發(fā)明。所描述的實施例應視為在所有方面均僅為說明性而非限制性的。具體來說,雖然是相對于“與非”快閃SSD描述所述方法,但是例如硬盤驅(qū)動器之類的其它SSD裝置或非易失性存儲裝置也可得益于本文中所揭示的方法。因此,本發(fā)明的范圍由所附權利要求書而不是由前述描述指示。在權利要求書等效物的含義和范圍內(nèi)的所有變化均涵蓋在權利要求書的范圍內(nèi)。