本發(fā)明涉及信息處理領(lǐng)域,具體涉及一種基于閃存存儲(chǔ)設(shè)備的糾刪方法及裝置。
背景技術(shù):
閃存存儲(chǔ)具有很高的讀寫帶寬,是當(dāng)前存儲(chǔ)領(lǐng)域中的熱點(diǎn),但是閃存本身的特點(diǎn)決定了它的誤碼率要高于普通存儲(chǔ)很多。在底層一個(gè)閃存存儲(chǔ)單元內(nèi),一般使用ecc即糾錯(cuò)碼技術(shù)來(lái)保證本單元內(nèi)數(shù)據(jù)的準(zhǔn)確性。在系統(tǒng)較高層次上,通常采用raid或者糾刪碼來(lái)保證系統(tǒng)存儲(chǔ)的可靠。
但是raid系列不是占用的開銷較大,就是糾錯(cuò)能力不強(qiáng)。而rs實(shí)現(xiàn)的糾刪碼,實(shí)現(xiàn)所需資源較多,糾刪延時(shí)很大,一般需要數(shù)百個(gè)時(shí)鐘周期。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明提出了一種適用于閃存存儲(chǔ)設(shè)備的糾刪方法及裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種適用于閃存存儲(chǔ)設(shè)備的糾刪方法,包括以下步驟:
s1、在編碼端,將16個(gè)輸入數(shù)據(jù)塊的對(duì)應(yīng)字節(jié)位置進(jìn)行異或得到第一校驗(yàn)數(shù)據(jù)塊,將所述16個(gè)輸入數(shù)據(jù)塊按照對(duì)應(yīng)字節(jié)的順序輸入到16個(gè)迦洛華域乘法器中,將16個(gè)乘法器輸出的16個(gè)數(shù)據(jù)塊的對(duì)應(yīng)字節(jié)位置進(jìn)行異或得到第二校驗(yàn)數(shù)據(jù)塊;
s2、在解碼端,先將接收到的16塊原數(shù)據(jù)進(jìn)行異或操作,其中丟失的部分用0補(bǔ)充,再將異或結(jié)果分別與所述第一校驗(yàn)數(shù)據(jù)塊和第二校驗(yàn)數(shù)據(jù)塊進(jìn)行異或操作,得到第一中間數(shù)據(jù)和第二中間數(shù)據(jù);
s3、將第一中間數(shù)據(jù)分別通過(guò)兩個(gè)迦洛華域乘法器,得到第一中間乘法結(jié)果和第一中間乘法結(jié)果,其中兩個(gè)迦洛華域乘法器的系數(shù)是與數(shù)據(jù)塊的缺失位置對(duì)應(yīng)的;
s4、將所述第一中間乘法結(jié)果和第一中間乘法結(jié)果分別異或所述第二中間數(shù)據(jù),得到第一中間乘法異或結(jié)果和第二中間乘法異或結(jié)果;
s5、將步驟s3中的兩個(gè)乘法器系數(shù)進(jìn)行異或操作,得到迦洛華域到自然數(shù)域映射表的索引,用所述索引查詢迦洛華域到自然數(shù)域映射表,得到第一映射表查詢結(jié)果;
s6、用256減去所述第一映射表查詢結(jié)果,得到自然數(shù)域到迦洛華域映射表索引,用所述索引查詢自然數(shù)域到迦洛華域映射表,得到第二映射表查詢結(jié)果;
s7、將第一中間乘法異或結(jié)果和第二中間乘法異或結(jié)果分別通過(guò)兩個(gè)迦洛華域乘法器,得到最終恢復(fù)數(shù)據(jù),所述兩個(gè)迦洛華域乘法器的系數(shù)為所述第二映射表查詢結(jié)果。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種適用于閃存存儲(chǔ)設(shè)備的糾刪裝置,包括編碼模塊及解碼模塊,其中:
編碼模塊,用于將16個(gè)輸入數(shù)據(jù)塊的對(duì)應(yīng)字節(jié)位置進(jìn)行異或得到第一校驗(yàn)數(shù)據(jù)塊,將所述16個(gè)輸入數(shù)據(jù)塊按照對(duì)應(yīng)字節(jié)的順序輸入到16個(gè)迦洛華域乘法器中,將16個(gè)乘法器輸出的16個(gè)數(shù)據(jù)塊的對(duì)應(yīng)字節(jié)位置進(jìn)行異或得到第二校驗(yàn)數(shù)據(jù)塊;
解碼模塊,用于利用接收到的兩個(gè)校驗(yàn)數(shù)據(jù)塊對(duì)接收到的數(shù)據(jù)進(jìn)行糾刪,具體為,
先將接收到的16塊原數(shù)據(jù)進(jìn)行異或操作,其中丟失的部分用0補(bǔ)充,再將異或結(jié)果分別與所述第一校驗(yàn)數(shù)據(jù)塊和第二校驗(yàn)數(shù)據(jù)塊進(jìn)行異或操作,得到第一中間數(shù)據(jù)和第二中間數(shù)據(jù);
將第一中間數(shù)據(jù)分別通過(guò)兩個(gè)迦洛華域乘法器,得到第一中間乘法結(jié)果和第一中間乘法結(jié)果,其中兩個(gè)迦洛華域乘法器的系數(shù)是與數(shù)據(jù)塊的缺失位置對(duì)應(yīng)的;
將所述第一中間乘法結(jié)果和第一中間乘法結(jié)果分別異或所述第二中間數(shù)據(jù),得到第一中間乘法異或結(jié)果和第二中間乘法異或結(jié)果;
將所述兩個(gè)迦洛華域乘法器的系數(shù)進(jìn)行異或操作,得到迦洛華域到自然數(shù)域映射表的索引,用所述索引查詢迦洛華域到自然數(shù)域映射表,得到第一映射表查詢結(jié)果;
用256減去所述第一映射表查詢結(jié)果,得到自然數(shù)域到迦洛華域映射表索引,用所述索引查詢自然數(shù)域到迦洛華域映射表,得到第二映射表查詢結(jié)果;
以所述第二映射表查詢結(jié)果分別為兩個(gè)迦洛華域乘法器的系數(shù),將第一中間乘法異或結(jié)果和第二中間乘法異或結(jié)果分別通過(guò)所述兩個(gè)迦洛華域乘法器,得到最終恢復(fù)數(shù)據(jù)。
本發(fā)明與現(xiàn)有技術(shù)相比,其糾錯(cuò)能力為m+2,即任意m塊存儲(chǔ)單元可以同時(shí)容納2塊單元出錯(cuò)。其保護(hù)能力強(qiáng)于傳統(tǒng)的raid,占用資源較少,同時(shí)糾刪延時(shí)低于傳統(tǒng)的rs糾刪碼,編碼僅需2個(gè)時(shí)鐘周期,解碼僅4個(gè)時(shí)鐘周期。同時(shí)支持?jǐn)帱c(diǎn)續(xù)傳,不需要等到全部數(shù)據(jù)塊都準(zhǔn)備好才能計(jì)算,數(shù)據(jù)隨到隨算,從而大大降低了對(duì)系統(tǒng)緩存的要求。
附圖說(shuō)明
圖1示出本發(fā)明的糾刪裝置示意圖。
圖2示出本發(fā)明的編碼過(guò)程示意圖。
圖3示出本發(fā)明的解碼過(guò)程示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述。
參見(jiàn)圖1,為本發(fā)明的糾刪裝置示意圖。裝置包括編碼模塊與解碼模塊兩部分,編碼模塊將16個(gè)輸入數(shù)據(jù)塊進(jìn)行處理得到兩個(gè)校驗(yàn)數(shù)據(jù)塊,解碼模塊利用接收到的兩個(gè)校驗(yàn)數(shù)據(jù)塊對(duì)接收到的部分缺失數(shù)據(jù)進(jìn)行糾刪。
參見(jiàn)圖2,為本發(fā)明的具體編碼過(guò)程示意圖。
編碼部分的功能是由不多于m=16塊原數(shù)據(jù)(輸入),生成2塊校驗(yàn)塊(輸出)。在閃存中,每個(gè)數(shù)據(jù)塊是16kb,當(dāng)然也可以是其他大小。
其中,第一個(gè)數(shù)據(jù)塊由16個(gè)原數(shù)據(jù)塊對(duì)應(yīng)字節(jié)位置異或得到。
若原數(shù)據(jù)塊數(shù)不足16,則剩余輸入位置補(bǔ)零。
若在斷點(diǎn)續(xù)傳模式下,則第一次將異或后的結(jié)果數(shù)據(jù)放入輸出緩存1中,后續(xù)的數(shù)據(jù)異或完成后,與輸出緩存1中的數(shù)據(jù)再異或一次,將結(jié)果覆蓋寫到輸出緩存1中,反復(fù)執(zhí)行直到全部原數(shù)據(jù)塊到達(dá)并計(jì)算完成。
第二個(gè)數(shù)據(jù)塊的計(jì)算過(guò)程由16個(gè)8bit迦洛華域乘法器構(gòu)成(該乘法器輸入是2個(gè)數(shù)據(jù),其中一個(gè)接原數(shù)據(jù),一個(gè)接固定系數(shù),輸出一個(gè)8bit數(shù)據(jù)結(jié)果),16個(gè)輸入數(shù)據(jù)塊,按照對(duì)應(yīng)字節(jié)的順序,輸入到16個(gè)迦洛華域乘法器中,將乘法器的16個(gè)輸出,異或后,寫到輸出緩存2中。
這16個(gè)迦洛華域乘法器的固定系數(shù)依次是:0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1e,0x3a,0x74,0xe8,0xce,0x87,0x13,0x26。
若在斷點(diǎn)續(xù)傳模式下,則第一次將異或后的結(jié)果數(shù)據(jù)放入輸出緩存2中,后續(xù)的數(shù)據(jù)異或完成后,與輸出緩存2中的數(shù)據(jù)再異或一次,將結(jié)果覆蓋寫到輸出緩存2中,反復(fù)執(zhí)行直到全部元數(shù)據(jù)塊到達(dá)并計(jì)算完成。需要指出的是,在計(jì)算輸出數(shù)據(jù)塊2的時(shí)候,斷點(diǎn)模式下,來(lái)的每個(gè)數(shù)據(jù)塊應(yīng)該按照其在16個(gè)數(shù)據(jù)塊中的位置,進(jìn)入對(duì)應(yīng)的迦洛華域乘法器中,其余乘法器的輸出端補(bǔ)0。
至此,輸出緩存1和輸出緩存2就是編碼后的結(jié)果。
解碼部分的是由16塊原數(shù)據(jù)(丟失部分補(bǔ)0)+2塊校驗(yàn)數(shù)據(jù)(輸入),和任意兩個(gè)丟失數(shù)據(jù)的位置0~17(輸入),恢復(fù)出丟失的2塊數(shù)據(jù)(輸出)
由于系統(tǒng)不關(guān)心校驗(yàn)數(shù)據(jù)的丟失,因此如果丟失的兩塊全是校驗(yàn)數(shù)據(jù),則無(wú)需恢復(fù),直接將原數(shù)據(jù)讀出即可。如丟失的兩塊中有一塊是原始數(shù)據(jù),一塊是校驗(yàn)數(shù)據(jù),則也只需要恢復(fù)出一塊原始數(shù)據(jù)即可。
若系統(tǒng)僅丟失一塊原始數(shù)據(jù),則第二個(gè)丟失位置給出一個(gè)校驗(yàn)塊的位置即可。
解碼模塊第一步先將16塊原數(shù)據(jù)(丟失部分補(bǔ)0)異或起來(lái),再分別與校驗(yàn)數(shù)據(jù)塊1和校驗(yàn)數(shù)據(jù)塊2異或,得到兩個(gè)中間數(shù)據(jù),中間數(shù)據(jù)1和中間數(shù)據(jù)2。從中間數(shù)據(jù)1、2開始的解碼過(guò)程參見(jiàn)圖3。
第二步將中間數(shù)據(jù)1分別通過(guò)兩個(gè)迦洛華域乘法器,得到兩個(gè)中間乘法結(jié)果1、2。
其中兩個(gè)迦洛華域乘法器的系數(shù)是由缺失位置對(duì)應(yīng)的,編碼部分時(shí),16個(gè)乘法器對(duì)應(yīng)的是:0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1e,0x3a,0x74,0xe8,0xce,0x87,0x13,0x26。假設(shè)丟失的數(shù)據(jù)塊是0和7(數(shù)據(jù)塊編號(hào)從0開始數(shù)),那么這里兩個(gè)乘法器的系數(shù)就是0和7對(duì)應(yīng)的系數(shù),即0x01和0x80,記作輸出乘法器系數(shù)1和輸出乘法器系數(shù)2。
將中間乘法結(jié)果,分別異或所述中間數(shù)據(jù)2,得到2個(gè)中間乘法異或結(jié)果1、2。
將輸出乘法器系數(shù)1和輸出乘法器系數(shù)2異或起來(lái),得到迦洛華域到自然數(shù)域映射表索引1。
用索引1查詢迦洛華域到自然數(shù)域映射表,得到映射表查詢結(jié)果1。
用256減去映射表查詢結(jié)果1,得到自然數(shù)域到迦洛華域映射表索引2,用索引2查詢自然數(shù)域到迦洛華域映射表,得到映射表查詢結(jié)果2。
將2個(gè)中間乘法異或結(jié)果1、2分別通過(guò)兩個(gè)迦洛華域乘法器,得到的結(jié)果就是最終恢復(fù)數(shù)據(jù)。該處2個(gè)乘法器的系數(shù),就是映射表查詢結(jié)果2。
斷點(diǎn)續(xù)傳和不足16塊的情況,與編碼處理方式相同,但斷點(diǎn)續(xù)傳要在第一步將數(shù)據(jù)湊齊,方可進(jìn)入下一步。
其中8bit的迦洛華域到自然數(shù)域映射表和自然數(shù)域到迦洛華域映射表在數(shù)學(xué)上是固定的,自然數(shù)域到迦洛華域映射表是由自然數(shù)的0~255查找(映射到)迦洛華域的0~255,反之類似。另外8bit的迦洛華域乘法器,在數(shù)學(xué)上也是固定的。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。