本發(fā)明涉及靜電存儲器,特別涉及一種存儲設(shè)備中的ecc方法。
背景技術(shù):
1、固態(tài)硬盤(solid-statedrives,ssd)已逐漸成為個人、企業(yè)以及數(shù)據(jù)中心數(shù)據(jù)存儲的主要媒介,相對于傳統(tǒng)的機(jī)械磁盤(hard-diskdrives,hdd),極大地緩解了存儲端的壓力并釋放了整體系統(tǒng)的性能潛力,近年來,固態(tài)硬盤內(nèi)也開始使用透明壓縮的方案,通過在硬盤內(nèi)集成數(shù)據(jù)壓縮功能,進(jìn)一步降低了數(shù)據(jù)對物理存儲空間的占用。
2、ssd的主要存儲介質(zhì)是nand,通常情況下,寫入nand的數(shù)據(jù)塊,一般都會對應(yīng)一個多個邏輯塊地址(logicalblockaddress,lba),每個邏輯塊地址對應(yīng)固定的大小,如512b或者4kb,lba的大小,由主機(jī)在對ssd進(jìn)行格式化的時候指明,由于nand不能進(jìn)行原址更新,因此數(shù)據(jù)寫入nand之后,其lba和物理塊地址(physicalblockaddress,pba)之間的映射不是固定的,所以ssd中需要閃存轉(zhuǎn)換層(flashtranslationlayer,ftl)來記錄和維護(hù)lba與pba之間的映射關(guān)系。
3、當(dāng)前ssd的設(shè)計中,lba和pba的映射,一般采用固定大小的映射單位,如4kb,為了最大化ssd的性能,該映射表一般保存在ssd內(nèi)部的ddr中,當(dāng)lba的大小小于映射單位的大小且主機(jī)端的寫請求為非對齊(即寫請求的初始lba或者結(jié)尾lba,與映射單位沒有對齊)時,在ssd內(nèi)部就需要執(zhí)行讀-改-寫(read-modify-write,rmw)操作來解決lba和映射單位之間的不匹配問題,如,當(dāng)lba大小為512b且映射單位大小為4kb時,若主機(jī)端執(zhí)行一個512b的寫操作,則ssd內(nèi)部需要先從映射表中查找該512b數(shù)據(jù)所在的lba所對應(yīng)的4kbpba,然后從pba中讀取4kb數(shù)據(jù),并使用主機(jī)端寫入的512b數(shù)據(jù)替換掉原先對應(yīng)位置的512b數(shù)據(jù),最后將整個4kb數(shù)據(jù)寫入nand,并更新映射表。
4、在實(shí)際的一些場景中,應(yīng)用對ssd的讀寫訪問大多數(shù)都是小的數(shù)據(jù)塊,如200b或者400b;由于ssd內(nèi)部則采用了更大的映射單位,如4kb,因此會涉及大量的讀改寫操作,從而降低了ssd和應(yīng)用的性能,因此需要一種解決小數(shù)據(jù)塊訪問性能的方法,是在硬盤的不同分區(qū)內(nèi)使用不同粒度的映射單位,使得映射單位的粒度盡量貼近主機(jī)訪問數(shù)據(jù)的粒度,用于解決現(xiàn)有方案中小數(shù)據(jù)塊訪問所帶來的讀寫放大問題以及由此造成的性能和功耗問題。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于至少解決現(xiàn)有技術(shù)中存在的技術(shù)問題之一,提供一種存儲設(shè)備中的ecc方法,能夠解決現(xiàn)有方案中小數(shù)據(jù)塊訪問所帶來的讀寫放大問題以及由此造成的性能和功耗的問題。
2、為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:一種存儲設(shè)備中的ecc方法,包括以下步驟:
3、所述步驟一:ssd內(nèi)部分為通用的透明壓縮區(qū)域和專用的小數(shù)據(jù)塊訪問區(qū)域;
4、步驟二:在通用的透明壓縮區(qū)域,ssd內(nèi)的壓縮引擎首先對來自于主機(jī)端的數(shù)據(jù)塊進(jìn)行壓縮得到壓縮后數(shù)據(jù)塊,壓縮后數(shù)據(jù)塊進(jìn)行緊密排列后,由ecc編碼引擎按照預(yù)設(shè)的默認(rèn)碼長進(jìn)行編碼,并寫入存儲介質(zhì),從而最大化硬盤的物理空間利用率;
5、步驟三:在小數(shù)據(jù)塊訪問區(qū)域,使用較小的地址映射粒度,并通過保存截短ecc碼字,降低硬盤訪問時的讀寫放大問題以及壓縮/解壓縮的功耗;
6、步驟四:對于通用的透明壓縮區(qū)域的讀操作,ssd首先根據(jù)地址映射表判斷讀命令包含的lba所對應(yīng)的pba,然后根據(jù)pba從nand中讀取相應(yīng)的數(shù)據(jù)塊;進(jìn)行ecc解碼后,從解碼后的數(shù)據(jù)中截取對應(yīng)的壓縮數(shù)據(jù)塊并進(jìn)行解壓縮,最后返回解壓縮后的數(shù)據(jù);
7、步驟五:對于小數(shù)據(jù)塊訪問區(qū)域的讀操作,ssd首先根據(jù)地址映射表判斷讀命令包含的lba所對應(yīng)的pba以及原始數(shù)據(jù)末尾0的長度,然后根據(jù)pba從nand中讀取相應(yīng)的數(shù)據(jù)塊(即截短ecc碼字)并附加原始數(shù)據(jù)末尾的0,得到完整的ecc碼字;最后經(jīng)過ecc解碼后返回解碼后的數(shù)據(jù)。
8、優(yōu)選的,所述步驟一可知ssd內(nèi)包含專用的小數(shù)據(jù)塊訪問區(qū)域和通用的透明壓縮區(qū)域;
9、其中,通用的透明壓縮區(qū)域采用4kb的地址映射單位,而專用的小數(shù)據(jù)塊訪問區(qū)域采用小于4kb的地址映射單位。
10、優(yōu)選的,所述步驟二可知每個lba對應(yīng)的數(shù)據(jù)塊,經(jīng)過壓縮引擎壓縮后,得到相應(yīng)的壓縮數(shù)據(jù)塊;壓縮數(shù)據(jù)塊緊密排列后,由ecc編碼引擎按照預(yù)設(shè)的碼長進(jìn)行編碼;
11、其中,編碼后的每個ecc碼字,長度均相同(校驗(yàn)數(shù)據(jù)的長度也相同);每個ecc碼字中,根據(jù)lba數(shù)據(jù)塊壓縮比的不同,可能包含不同個數(shù)的壓縮數(shù)據(jù)塊,如圖中第一個ecc碼字,包含lba0和lba1對應(yīng)的完整的壓縮數(shù)據(jù)塊,且包含lba2對應(yīng)的壓縮數(shù)據(jù)塊的一部分。
12、優(yōu)選的,所述步驟三可知主機(jī)端對寫入的小數(shù)據(jù)塊進(jìn)行對齊操作,即通過補(bǔ)0操作,將小數(shù)據(jù)塊按照小數(shù)據(jù)塊訪問區(qū)域的地址映射粒度進(jìn)行對齊,然后下發(fā)寫命令;通過圖3可看出,主機(jī)端原本寫入的數(shù)據(jù)塊為小數(shù)據(jù)塊,即長度小于一個lba的大小,此時主機(jī)端直接通過補(bǔ)0的操作,將小數(shù)據(jù)塊和lba的大小進(jìn)行對齊;
13、ssd內(nèi)的ecc編碼引擎,按照預(yù)設(shè)的小數(shù)據(jù)塊對應(yīng)的碼長,對寫命令對應(yīng)的數(shù)據(jù)塊進(jìn)行編碼操作;通過圖3可看出,ecc編碼引擎按照lba的大小(lba大小通常為地址映射粒度的大小,在小數(shù)據(jù)塊訪問區(qū)域lba大小可以為512b、1kb或者2kb等等)對寫入的數(shù)據(jù)塊進(jìn)行編碼,得到一個較小(相對于透明壓縮區(qū)域)的完整的ecc碼字。
14、優(yōu)選的,所述步驟三可知在編碼后的ecc碼字中,截去原始數(shù)據(jù)中末尾的0,得到截短ecc碼字;
15、將截短ecc碼字依次緊密排列寫入nand;
16、根據(jù)截短ecc碼字所占用的實(shí)際物理地址(包括在nand物理頁中的偏移及長度),以及原始數(shù)據(jù)中末尾0的長度,更新地址映射表。
17、與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
18、1、該存儲設(shè)備中的ecc方法,透明壓縮區(qū)域使用較大的ecc碼字長度,數(shù)據(jù)塊經(jīng)過壓縮引擎進(jìn)行壓縮并緊密排列后,由ecc編碼引擎進(jìn)行編碼,從而最大化硬盤的物理空間利用率;小數(shù)據(jù)塊訪問區(qū)域使用較小的ecc碼字長度,并且通過保存截短ecc碼字,實(shí)現(xiàn)小數(shù)據(jù)塊的高效訪問,從而降低硬盤訪問時的讀寫放大問題,并避免壓縮/解壓縮引擎帶來的功耗問題。
19、2、該存儲設(shè)備中的ecc方法,通過使用截短ecc碼字對數(shù)據(jù)塊進(jìn)行存儲,省去了壓縮/解壓縮的步驟(以及壓縮/解壓縮所需要的功耗),也通過截去0的操作盡量減少對物理存儲空間的占用;同時,通過使用較小的ecc碼字,使得小數(shù)據(jù)塊的讀寫可以僅限制在其所對應(yīng)的單個ecc碼字內(nèi),降低了常見實(shí)現(xiàn)中的數(shù)據(jù)讀寫放大問題。
1.一種存儲設(shè)備中的ecc方法,其特征在于:包括以下步驟:
2.根據(jù)權(quán)利要求1所述的一種存儲設(shè)備中的ecc方法,其特征在于:所述步驟一可知ssd內(nèi)包含專用的小數(shù)據(jù)塊訪問區(qū)域和通用的透明壓縮區(qū)域;
3.根據(jù)權(quán)利要求1所述的一種存儲設(shè)備中的ecc方法,其特征在于:所述步驟二可知每個lba對應(yīng)的數(shù)據(jù)塊,經(jīng)過壓縮引擎壓縮后,得到相應(yīng)的壓縮數(shù)據(jù)塊;壓縮數(shù)據(jù)塊緊密排列后,由ecc編碼引擎按照預(yù)設(shè)的碼長進(jìn)行編碼;
4.根據(jù)權(quán)利要求1所述的一種存儲設(shè)備中的ecc方法,其特征在于:所述步驟三可知主機(jī)端對寫入的小數(shù)據(jù)塊進(jìn)行對齊操作,即通過補(bǔ)0操作,將小數(shù)據(jù)塊按照小數(shù)據(jù)塊訪問區(qū)域的地址映射粒度進(jìn)行對齊,然后下發(fā)寫命令;主機(jī)端原本寫入的數(shù)據(jù)塊為小數(shù)據(jù)塊,即長度小于一個lba的大小,此時主機(jī)端直接通過補(bǔ)0的操作,將小數(shù)據(jù)塊和lba的大小進(jìn)行對齊;
5.根據(jù)權(quán)利要求1所述的一種存儲設(shè)備中的ecc方法,其特征在于:所述步驟三可知在編碼后的ecc碼字中,截去原始數(shù)據(jù)中末尾的0,得到截短ecc碼字;