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