本發(fā)明涉及存儲,具體地說是一種存儲設備中的多級ecc方法。
背景技術:
1、隨著存儲技術的進步,固態(tài)硬盤(solid-state?drives,ssd)已逐漸成為個人、企業(yè)以及數(shù)據(jù)中心數(shù)據(jù)存儲的主要媒介,相對于傳統(tǒng)的機械磁盤(hard-disk?drives,hdd),極大地緩解了存儲端的壓力并釋放了整體系統(tǒng)的性能潛力。近年來,固態(tài)硬盤內(nèi)也開始使用透明壓縮的方案,通過在硬盤內(nèi)集成數(shù)據(jù)壓縮功能,進一步降低了數(shù)據(jù)對物理存儲空間的占用。
2、ssd的主要存儲介質(zhì)是nand。通常情況下,寫入nand的數(shù)據(jù)塊,一般都會對應一個多個邏輯塊地址(logical?block?address,lba),每個邏輯塊地址對應固定的大小,如512b或者4kb。lba的大小,由主機在對ssd進行格式化的時候指明。由于nand不能進行原址更新,因此數(shù)據(jù)寫入nand之后,其lba和物理塊地址(physical?block?address,pba)之間的映射不是固定的,所以ssd中需要閃存轉(zhuǎn)換層(flash?translation?layer,ftl)來記錄和維護lba與pba之間的映射關系。
3、當前ssd的設計中,lba和pba的映射,一般采用固定大小的映射單位,如4kb。為了最大化ssd的性能,該映射表一般保存在ssd內(nèi)部的ddr中。當lba的大小小于映射單位的大小且主機端的寫請求為非對齊(即寫請求的初始lba或者結(jié)尾lba,與映射單位沒有對齊)時,在ssd內(nèi)部就需要執(zhí)行讀-改-寫(read-modify-write,rmw)操作來解決lba和映射單位之間的不匹配問題,如,當lba大小為512b且映射單位大小為4kb時,若主機端執(zhí)行一個512b的寫操作,則ssd內(nèi)部需要先從映射表中查找該512b數(shù)據(jù)所在的lba所對應的4kb?pba,然后從pba中讀取4kb數(shù)據(jù),并使用主機端寫入的512b數(shù)據(jù)替換掉原先對應位置的512b數(shù)據(jù),最后將整個4kb數(shù)據(jù)寫入nand,并更新映射表。此外,ssd一般會使用定長的ecc(errorcorrection?coding)碼字來對數(shù)據(jù)進行保護,例如采用(4kb原始數(shù)據(jù)+0.5kb校驗數(shù)據(jù))的ldpc碼字來保護4kb的用戶數(shù)據(jù)。此時,若要讀取512b的數(shù)據(jù),則需要將整個4.5kb的ldpc碼字從nand中讀取出來,經(jīng)過解碼后返回所需的512b數(shù)據(jù),此時就會造成讀放大問題,而且ldpc解碼引擎也會帶來更多的功耗;當寫入512b數(shù)據(jù)時,ssd同樣需要將對應的4kb用戶數(shù)據(jù)從nand中讀取出來,經(jīng)過ldpc解碼后用新的512b數(shù)據(jù)替換掉舊的512b數(shù)據(jù),然后重新經(jīng)過ldpc編碼后寫入nand,此時還會造成寫放大問題,以及l(fā)dpc編解碼引擎的功耗問題。
4、在實際的某些場景中,應用對ssd的讀寫訪問大多數(shù)都是小的數(shù)據(jù)塊,如200b或者400b,因此往往會涉及大量的讀改寫操作,從而降低了ssd和應用的性能。一種解決小數(shù)據(jù)塊訪問性能的方法,是在硬盤的不同分區(qū)內(nèi)使用不同粒度的映射單位,使得映射單位的粒度盡量貼近主機訪問數(shù)據(jù)的粒度,但由于ecc編碼引擎仍然是較大的粒度,所以仍然存在讀放大問題以及ecc編解碼引擎的功耗問題。
技術實現(xiàn)思路
1、本發(fā)明為克服現(xiàn)有技術的不足,提供一種存儲設備中的多級ecc方法,采用更短的碼字來減小讀放大問題以及ecc編解碼引擎的功耗。
2、為實現(xiàn)上述目的,設計一種存儲設備中的多級ecc方法,將存儲設備內(nèi)部劃分為單ecc碼字區(qū)域、多ecc碼字區(qū)域,并將多ecc碼字區(qū)域內(nèi)劃分短ecc碼字、長ecc碼字。
3、劃分單ecc碼字區(qū)域、多ecc碼字區(qū)域的劃分條件為數(shù)據(jù)塊lba地址的映射單位粒度;當數(shù)據(jù)塊lba地址的映射單位粒度較大時,劃分為單ecc碼字區(qū)域,當數(shù)據(jù)塊lba地址的映射單位粒度較小時,劃分為多ecc碼字區(qū)域。
4、所述的單ecc碼字區(qū)域內(nèi)的數(shù)據(jù)塊,具有單一長度的ecc碼字且ecc碼字較長;多ecc碼字區(qū)域內(nèi)的數(shù)據(jù)塊,具有不同的ecc碼字長度。
5、所述的多ecc碼字區(qū)域內(nèi),短ecc碼字中的用戶數(shù)據(jù)長度采用存儲設備中的最小地址映射單位。
6、所述的多ecc碼字區(qū)域內(nèi),多個完整的短ecc碼字組成了長ecc碼字的用戶數(shù)據(jù)部分。
7、所述的多ecc碼字區(qū)域內(nèi),短ecc碼字的碼率低于長ecc碼字的碼率,長ecc碼字的長度與單ecc碼字區(qū)域中ecc碼字的長度相同。
8、當主機端寫入數(shù)據(jù)時,包括如下步驟:
9、s1,獲取數(shù)據(jù)塊的大小,判斷該數(shù)據(jù)塊被劃分至單ecc碼字區(qū)域或多ecc碼字區(qū)域,如果被劃分至單ecc碼字區(qū)域,對該數(shù)據(jù)塊進行長ecc碼字的編碼并寫入存儲介質(zhì);如果被劃分至多碼字ecc區(qū)域,進行步驟s2,
10、s2,確定寫請求中數(shù)據(jù)塊的lba所對應的長ecc碼字以及長ecc碼字所對應的pba,讀取長ecc碼字并進行解碼;
11、s3,對寫請求lba中的數(shù)據(jù)進行短ecc碼字的編碼,編碼后替換長ecc碼字中對應的短ecc碼字;
12、s4,對長ecc碼字進行重新編碼,并將編碼后的長ecc碼字寫入存儲介質(zhì);
13、s5,根據(jù)數(shù)據(jù)寫入的物理位置更新地址映射表。
14、當主機端讀取數(shù)據(jù)時,包括如下步驟:
15、s1,獲取數(shù)據(jù)塊的大小,判斷該數(shù)據(jù)塊被劃分至單ecc碼字區(qū)域或多ecc碼字區(qū)域,如果被劃分至單ecc碼字區(qū)域,對該數(shù)據(jù)塊進行長ecc碼字的解碼;如果被劃分至多碼字ecc區(qū)域,進行步驟s2;
16、s2,確定讀請求中數(shù)據(jù)塊的lba所包含的短ecc碼字及其對應的pba;
17、s3,讀取相應的短ecc碼字并進行解碼,如果解碼正確,則返回對應的用戶數(shù)據(jù);如果解碼失敗,則進行步驟s4,
18、s4,讀取包含解碼失敗的短ecc碼字的長ecc碼字,并進行長ecc碼字的解碼;
19、s5,從解碼后的長ecc碼字中返回解碼失敗的短ecc碼字所對應的用戶數(shù)據(jù)。
20、當主機端讀取數(shù)據(jù)時,若短ecc碼字的解碼引擎已完全飽和,即數(shù)據(jù)讀取的速度已達到短ecc碼字的解碼引擎的上限,則可以輔助以長ecc碼字的解碼引擎,來進一步提升解碼的吞吐。
21、當主機端讀取多ecc碼字區(qū)域的數(shù)據(jù)時,若一個長ecc碼字中一次數(shù)據(jù)讀取的比例較高時,則可以直接讀取長ecc碼字進行解碼。
22、本發(fā)明同現(xiàn)有技術相比,具有以下有益效果:
23、1.在小數(shù)據(jù)塊訪問時,降低了數(shù)據(jù)的讀放大問題以及ecc編解碼所產(chǎn)生的功耗。
24、2.使用長短兩級的ecc方法,減少了更多ecc碼字長度帶來的硬件開銷問題。
25、3.通過在多ecc碼字區(qū)域使用與單ecc碼字區(qū)域相同的長ecc碼字,保證了ecc最終的糾錯能力不受短ecc碼字的影響。
1.一種存儲設備中的多級ecc方法,其特征在于:將存儲設備內(nèi)部劃分為單ecc碼字區(qū)域、多ecc碼字區(qū)域,其中多ecc碼字區(qū)域內(nèi)劃分短ecc碼字、長ecc碼字。
2.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:劃分單ecc碼字區(qū)域、多ecc碼字區(qū)域的劃分條件為數(shù)據(jù)塊lba地址的映射單位粒度;當數(shù)據(jù)塊lba地址的映射單位粒度較大時,劃分為單ecc碼字區(qū)域,當數(shù)據(jù)塊lba地址的映射單位粒度較小時,劃分為多ecc碼字區(qū)域。
3.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:所述的單ecc碼字區(qū)域內(nèi)的數(shù)據(jù)塊,具有單一長度的ecc碼字且ecc碼字較長,多ecc碼字區(qū)域內(nèi)的數(shù)據(jù)塊,具有不同的ecc碼字長度。
4.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:所述的多ecc碼字區(qū)域內(nèi),短ecc碼字中的用戶數(shù)據(jù)長度采用存儲設備中的最小地址映射單位。
5.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:所述的多ecc碼字區(qū)域內(nèi),多個完整的短ecc碼字組成了長ecc碼字的用戶數(shù)據(jù)部分。
6.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:所述的多ecc碼字區(qū)域內(nèi),短ecc碼字的碼率低于長ecc碼字的碼率,長ecc碼字的長度與單ecc碼字區(qū)域中ecc碼字的長度相同。
7.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:當主機端寫入數(shù)據(jù)時,包括如下步驟:
8.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:當主機端讀取數(shù)據(jù)時,包括如下步驟:
9.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:當主機端讀取數(shù)據(jù)時,若短ecc碼字的解碼引擎已完全飽和,即數(shù)據(jù)讀取的速度已達到短ecc碼字的解碼引擎的上限,則可以輔助以長ecc碼字的解碼引擎,來進一步提升解碼的吞吐。
10.根據(jù)權利要求1所述的一種存儲設備中的多級ecc方法,其特征在于:當主機端讀取多ecc碼字區(qū)域的數(shù)據(jù)時,若一個長ecc碼字中一次數(shù)據(jù)讀取的比例較高時,則可以直接讀取長ecc碼字進行解碼。