一種用於SSD的RAID編解碼系統及方法與流程
2023-04-23 21:31:27

本發明特別涉及一種用於SSD的RAID編解碼系統及方法。
背景技術:
SSD(Solid State Drive, 固態硬碟)是一種以固態電子存儲器件作為存儲介質,通過內嵌主控晶片實現數據訪問和存儲介質管理的存儲設備。SSD具有響應速度快、功耗低、噪音小等特點,被廣泛應用於國防、金融、消費電子等領域,具有替代傳統機械硬碟的局勢。
NAND Flash作為當前主流SSD產品採用的存儲介質,由於受到器件漂移效應、用戶讀寫操作和惡劣工作環境等因素影響出現比特反轉現象,導致用戶數據丟失,影響SSD產品數據可靠性。
為了解決SSD中NAND Flash中產生的數據丟失問題,現有技術中引入了用於SSD的RAID(Redundant Arrays of Independent Disks, 獨立磁碟冗餘陣列)編解碼系統,包括RAID編解碼模塊,其一方面可以將片外緩存中的待編碼數據進行編碼計算,再將編碼計算結果送至片內緩存存儲。更重要的一點是,當出現系統異常或磁碟暴露等原因引起的錯誤數據時,可以通過RAID編解碼模塊對錯誤數據進行解碼,將錯誤數據恢復成正確數據送至片內緩存或片外緩存。
現有SSD中的RAID編解碼系統具有以下缺點:編碼過程不能被中斷,因而當在RAID編碼過程中出現更高優先級別的編碼需求或在用戶取數據出現錯誤需要立刻恢復時,需要等待當前編碼過程執行完成,因而重要數據無法優先編碼、錯誤數據無法有效及時恢復,極大程度影響系統效率。
技術實現要素:
現有用於SSD的RAID編解碼系統無法優先編碼重要數據、無法有效及時恢復錯誤數據,系統效率較低。本發明的目的在於,針對上述現有技術的不足,提供一種改進了的用於SSD的RAID編解碼系統及方法,能夠在SSD中實現RAID編碼的中斷和恢復,能夠在任意RAID編碼過程中暫停並且釋放硬體資源處理更高優先級別的編碼需求,在任意RAID解碼請求時中斷編碼操作,優先解碼重要數據,有效及時恢復錯誤數據,提高數據可靠性和系統響應速度。
為解決上述技術問題,本發明所採用的技術方案是:
一種用於SSD的RAID編解碼系統,包括RAID編解碼模塊,其結構特點是還包括第一DMA(Direct Memory Access,直接內存存取)模塊和第二DMA模塊,RAID編解碼模塊通過第一DMA模塊與片外緩存相連,RAID編解碼模塊通過第二DMA模塊與片內緩存或片外緩存相連;其中,第一DMA模塊用於向RAID編解碼模塊發送命令,所述命令包括中斷命令和恢復命令;在RAID編解碼模塊響應中斷命令時將RAID編解碼模塊中正在處理的編碼命令的中間編碼結果搬移至片外緩存,在RAID編解碼模塊響應恢復命令時將片外緩存中的中間編碼結果搬移至RAID編解碼模塊;第二DMA模塊用於向RAID編解碼模塊發送命令,包括編碼命令和編碼輸出命令;並在RAID編解碼模塊響應編碼命令時將待編碼數據從片外緩存搬移到RAID編解碼模塊中,在RAID編解碼模塊響應編碼輸出命令時將編碼結果從RAID編解碼模塊搬移到片內緩存或片外緩存。
藉由上述結構,當在RAID編碼過程中出現更高優先級別的編碼需求時,可以中斷當前編碼過程,將高優先級別的編碼需求優先編碼,最後再繼續編碼執行中斷了的編碼過程,優先編碼重要數據,數據可靠性高,耗時短,效率高。
進一步地,還包括第三DMA模塊,RAID編解碼模塊通過第三DMA模塊分別與片外緩存和片內緩存相連;其中,第三DMA模塊用於向RAID編解碼模塊發送解碼命令,並將SSD中的待解碼數據送至RAID編解碼模塊,將RAID編解碼模塊中的解碼結果搬移至片外緩存或片內緩存。
藉由上述結構,當在RAID編碼過程中出現數據錯誤需要立刻恢復時,可以中斷當前編碼過程,立即執行解碼操作,最後再繼續編碼執行中斷了的編碼過程,有效及時恢復地錯誤數據,數據可靠性高,耗時短,效率高。
進一步地,還包括仲裁單元,所述RAID編解碼模塊通過仲裁單元分別與第一DMA模塊和第二DMA模塊相連;其中,第二DMA模塊還用於向RAID編解碼模塊發送命令,所述命令包括中斷命令或恢復命令;在RAID編解碼模塊響應中斷命令時將RAID編解碼模塊中的中間編碼結果搬移至片外緩存,在RAID編解碼模塊響應恢復命令時將片外緩存中的中間編碼結果搬移至RAID編解碼模塊;仲裁單元用於選擇由第一DMA模塊或第二DMA模塊向RAID編解碼模塊發送命令;當仲裁單元選擇由第一DMA模塊向RAID編解碼模塊發送命令時,由第一DMA模塊將RAID編解碼模塊中的中間編碼結果搬移至片外緩存,或者由第一DMA模塊將片外緩存中的中間編碼結果搬移至RAID編解碼模塊;當仲裁單元選擇由第二DMA模塊向RAID編解碼模塊發送命令時,由第二DMA模塊將RAID編解碼模塊中的中間編碼結果搬移至片外緩存,或者由第二DMA模塊將片外緩存中的中間編碼結果搬移至RAID編解碼模塊。
仲裁單元可以選擇由第一DMA模塊或第二DMA模塊發送命令或搬移數據,第二DMA模塊同樣可以發起中斷和恢復命令,數據搬移方向與第一DMA模塊相同,增加了系統的靈活性。
進一步地,所述第二DMA模塊還用於將數據從片外緩存搬移到片內緩存中。
第二DMA模塊能夠根據需要實現RAID旁路功能,即用戶數據不需要進行RAID編碼時,可以旁路RAID編解碼模塊,直接將數據從片外緩存搬移到片內緩存中。
基於同一個發明構思,本發明還提供了一種用於SSD的RAID編解碼方法,採用所述的RAID編解碼系統,包括以下方法:若第二DMA模塊中待編碼數據的優先級別高於RAID編解碼模塊中正在編碼的數據,通過第一DMA模塊向RAID編解碼模塊發送中斷命令,RAID編解碼模塊響應中斷命令後,由第一DMA模塊將RAID編解碼模塊中的中間編碼結果搬移至片外緩存;在RAID編解碼模塊將第二DMA模塊中高優先級別的待編碼數據編碼完成後,首先通過第二DMA模塊將RAID編解碼模塊中的編碼結果搬移至片內緩存或片外緩存,再通過第一DMA模塊向RAID編解碼模塊發送恢復命令,RAID編解碼模塊響應恢復命令後,由第一DMA模塊將片外緩存中的中間編碼結果搬移至RAID編解碼模塊;最後RAID編解碼模塊繼續編碼中間編碼結果。
進一步地,還包括以下方法:當第三DMA模塊向RAID編解碼模塊發送解碼命令時,若此時RAID編解碼模塊正在執行編碼操作,則通過第一DMA模塊向RAID編解碼模塊發送中斷命令,RAID編解碼模塊響應中斷命令後,由第一DMA模塊將RAID編解碼模塊中的中間編碼結果搬移至片外緩存,最後RAID編解碼模塊對第三DMA模塊中的待解碼數據進行解碼操作;在RAID編解碼模塊將第三DMA模塊中的待解碼數據解碼完成後,首先通過第三DMA模塊將RAID編解碼模塊中的編碼結果搬移至片外緩存或片內緩存;再通過第一DMA模塊向RAID編解碼模塊發送恢復命令,RAID編解碼模塊響應恢復命令後,由第一DMA模塊將片外緩存中的中間編碼結果搬移至RAID編解碼模塊;最後RAID編解碼模塊繼續編碼中間編碼結果。
進一步地,還包括利用仲裁單元選擇由第一DMA模塊或第二DMA模塊向RAID編解碼模塊發送命令;當仲裁單元選擇由第一DMA模塊向RAID編解碼模塊發送命令時,由第一DMA模塊將RAID編解碼模塊中的中間編碼結果搬移至片外緩存,或者由第一DMA模塊將片外緩存中的中間編碼結果搬移至RAID編解碼模塊;當仲裁單元選擇由第二DMA模塊向RAID編解碼模塊發送命令時,由第二DMA模塊將RAID編解碼模塊中的中間編碼結果搬移至片外緩存,或者由第二DMA模塊將片外緩存中的中間編碼結果搬移至RAID編解碼模塊。
與現有技術相比,本發明能夠在SSD中實現RAID編碼的中斷和恢復,能夠在任意RAID編碼過程中暫停並且釋放硬體資源處理更高優先級別的編碼需求,在任意RAID解碼請求時中斷編碼操作,優先恢復錯誤數據,數據可靠性高,耗時短,效率高。
附圖說明
圖1為本發明RAID編解碼系統的結構示意圖。
圖2為圖1中RAID編解碼模塊的狀態機描述圖。
圖3為本發明RAID編解碼方法流程圖。
其中,1為RAID編解碼模塊,2為第一DMA模塊,3為第二DMA模塊,4為片外緩存,5為片內緩存,6為第三DMA模塊,7為仲裁單元,M為第二DMA模塊暫停控制位。
具體實施方式
如圖1所示,本發明RAID編解碼系統的一實施例包括RAID編解碼模塊1、第一DMA模塊2和第二DMA模塊3,RAID編解碼模塊1通過第一DMA模塊2與片外緩存4相連,RAID編解碼模塊1通過第二DMA模塊3與片外緩存4相連,RAID編解碼模塊1通過第二DMA模塊3與片內緩存5相連;其中,第一DMA模塊2用於向RAID編解碼模塊1發送命令,所述命令包括中斷命令或恢復命令;在RAID編解碼模塊1響應中斷命令時將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4,在RAID編解碼模塊1響應恢復命令時將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1;第二DMA模塊3用於向RAID編解碼模塊1發送編碼命令,並將待編碼數據從片外緩存4搬移至RAID編解碼模塊1,以及將RAID編解碼模塊1中的編碼結果搬移至片內緩存5或片外緩存4。所述第二DMA模塊3還用於將數據從片外緩存4搬移到片內緩存5中。
RAID編解碼系統還包括第三DMA模塊6,RAID編解碼模塊1通過第三DMA模塊6分別與片外緩存4和片內緩存5相連;其中,第三DMA模塊6用於向RAID編解碼模塊1發送解碼命令,並將SSD中的待解碼數據送至RAID編解碼模塊1,將RAID編解碼模塊1中的解碼結果搬移至片外緩存4或片內緩存5。
RAID編解碼系統還包括仲裁單元7,所述RAID編解碼模塊1通過仲裁單元7分別與第一DMA模塊2和第二DMA模塊3相連;其中,第二DMA模塊3還用於向RAID編解碼模塊1發送命令,所述命令包括中斷命令或恢復命令;在RAID編解碼模塊1響應中斷命令時將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4,在RAID編解碼模塊1響應恢復命令時將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1;仲裁單元7用於選擇由第一DMA模塊2或第二DMA模塊3向RAID編解碼模塊1發送命令;當仲裁單元7選擇由第一DMA模塊2向RAID編解碼模塊1發送命令時,由第一DMA模塊2將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4,或者由第一DMA模塊2將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1;當仲裁單元7選擇由第二DMA模塊3向RAID編解碼模塊1發送命令時,由第二DMA模塊3將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4,或者由第二DMA模塊3 將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1。具體地,本發明RAID編解碼系統以RAID編解碼模塊1(RAID Codec)為核心,輔以三個DMA模塊(第一DMA模塊2、第二DMA模塊3和第三DMA模塊6)和一塊片外緩存4(DRAM或Flash等各種易失/非易失存儲器件)一塊片內緩存5(SRAM)配合實現RAID編碼(Encode)、解碼(Decode)、中斷(Terminate)和恢復(Resume)等操作。
第一DMA模塊2用於將因高優先級編碼或解碼需求而中斷的當前RAID編碼命令中間編碼結果從RAID編解碼模塊1搬移到片外緩存4,以及在恢復操作時將中間編碼結結果從片外緩存4搬移到RAID編解碼模塊1中。
第二DMA模塊3完成三個任務,一個是將待編碼數據從片外緩存4搬移到RAID編解碼模塊1中執行編碼計算,以及將計算結果從RAID編解碼模塊1搬移到片內緩存5中;另一個與第一DMA模塊2類似,在執行中斷操作時將中間編碼結果從RAID編解碼模塊1搬移到片外緩存4,以及在執行恢復操作時將中間編碼結果從片外緩存4搬移到RAID編解碼模塊1中;第三個是RAID旁路,即將數據不經過RAID編解碼而直接從片外緩存4搬移到片內緩存5中。
第三DMA模塊6用於將待解碼數據(錯誤數據)搬移到RAID編解碼模塊1中進行解碼恢復,並將解碼恢復結果搬移到片內緩存5或片外緩存4中。
RAID編解碼模塊1支持五種命令類型:「編碼命令」、「解碼命令」、「中斷命令」、「恢復命令」和「編碼輸出命令」。相應的RAID編解碼模塊1狀態機包含「初始狀態」、「編碼狀態」、「解碼狀態」、「中斷狀態」、「恢復狀態」和「編碼完成狀態」,狀態跳轉關係如圖2所示:
下面對RAID編解碼模塊1狀態和跳轉條件進行描述:
初始狀態:
系統上電復位後RAID編解碼模塊1處於初始狀態,內部中間變量清零。當發起編碼/解碼命令時進入編碼/解碼狀態,此時需要設置RAID編解碼模塊1為編碼/解碼模式,設置「組/頁」大小和糾錯能力。另外,執行恢復命令之前也需要使RAID編解碼模塊1進入初始狀態,清空存放中間變量的內部寄存器,並設置「組/頁」大小、中斷時刻下一個頁編號。
編碼狀態:
編碼狀態時,如果當前編碼命令完整執行,RAID編解碼模塊1進入編碼完成狀態;如果當前編碼命令被中斷,通過發送中斷命令使RAID編解碼模塊1進入中斷狀態。
解碼狀態:
解碼狀態時,由於解碼命令有完整性約束,因此無法中斷。完成解碼命令後RAID編解碼模塊1輸出解碼結果,清空中間變量,並進入初始狀態。
中斷狀態:
中斷狀態時,如果需要執行後續高優先級的編碼命令或解碼命令或恢復前一個編碼命令時,RAID編解碼模塊1都需要先進入初始狀態,清空中間變量。
恢復狀態:
恢復狀態時,如果出現新的更高優先級的編碼需求或解碼需求,發送中斷命令並進入中斷狀態,否則返回編碼狀態,繼續執行此前被中斷的編碼命令。
編碼完成狀態:
當完成編碼命令後,RAID編解碼模塊1進入編碼完成狀態。此時輸出編碼結果,清空中間變量。完成上述行為後RAID編解碼模塊1進入初始狀態,準備接收新的RAID命令。
本發明還提供了一種用於SSD的RAID編解碼方法,採用所述的RAID編解碼系統,包括以下方法:若第二DMA模塊3中待編碼數據的優先級別高於RAID編解碼模塊1中正在編碼的數據,通過第一DMA模塊2向RAID編解碼模塊1發送中斷命令,RAID編解碼模塊1響應中斷命令後,由第一DMA模塊2將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4;在RAID編解碼模塊1將第二DMA模塊3中高優先級別的待編碼數據編碼完成後,首先通過第二DMA模塊3將RAID編解碼模塊1中的編碼結果搬移至片內緩存5或片外緩存4,再通過第一DMA模塊2向RAID編解碼模塊1發送恢復命令,RAID編解碼模塊1響應恢復命令後,由第一DMA模塊2將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1,繼續進行剩下的編碼工作;當RAID編解碼模塊1完成被中斷命令剩餘的編碼工作後,通過第二DMA模塊3將編碼結果搬移到片外緩存4或片內緩存5中。
RAID編解碼方法還包括:當第三DMA模塊6向RAID編解碼模塊1發送解碼命令時,若此時RAID編解碼模塊1正在執行編碼操作,則通過第一DMA模塊2向RAID編解碼模塊1發送中斷命令,RAID編解碼模塊1響應中斷命令後,由第一DMA模塊2將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4,最後RAID編解碼模塊1對第三DMA模塊6中的待解碼數據進行解碼操作;在RAID編解碼模塊1將第三DMA模塊6中的待解碼數據解碼完成後,首先通過第三DMA模塊6將RAID編解碼模塊1中的編碼結果搬移至片外緩存4或片內緩存5;再通過第一DMA模塊2向RAID編解碼模塊1發送恢復命令,RAID編解碼模塊1響應恢復命令後,由第一DMA模塊2將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1;最後RAID編解碼模塊1繼續編碼中間編碼結果,並通過第二DMA模塊3將編碼結果搬移到片外緩存4或片內緩存5中。
RAID編解碼方法還包括利用仲裁單元7選擇由第一DMA模塊2或第二DMA模塊3向RAID編解碼模塊1發送命令;當仲裁單元7選擇由第一DMA模塊2向RAID編解碼模塊1發送命令時,由第一DMA模塊2將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4,或者由第一DMA模塊2將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1;當仲裁單元7選擇由第二DMA模塊3向RAID編解碼模塊1發送命令時,由第二DMA模塊3將RAID編解碼模塊1中的中間編碼結果搬移至片外緩存4,或者由第二DMA模塊3將片外緩存4中的中間編碼結果搬移至RAID編解碼模塊1。
RAID編解碼模塊1在執行編碼命令過程中,會告知第一DMA模塊2和第二DMA模塊3每一個允許打斷當前正在執行編碼命令的時間點。軟體能夠控制第一DMA模塊2和第二DMA模塊3選擇在哪個時間點打斷當前正在執行的編碼命令。
如圖3所示,假設當前RAID編解碼模塊1處於待機狀態,結合圖1闡述中斷和恢復流程:
1.當第二DMA模塊3發起編碼命令,由於RAID編解碼模塊1此時並無命令執行,所以計算編碼結果。由於沒有編碼命令被中斷,所以當後面沒有新的編碼命令到來時,RAID編解碼模塊1輸出編碼結果並重新處於待機狀態。此過程中第二DMA模塊3從片外緩存4搬移數據進入RAID編解碼模塊1進行編碼計算,並將計算結果搬移到片外緩存4或片內緩存5中,供後續模塊使用。
2.如果RAID編解碼模塊1正在執行編碼命令,第二DMA模塊3又有新的更高優先級的編碼需求或第三DMA模塊6有解碼需求,仲裁單元7通過第二DMA模塊暫停控制位M選擇由第一DMA模塊2或第二DMA模塊3發起中斷命令。如果配置第一DMA模塊2發起中斷請求,仲裁單元7首選控制暫停第二DMA模塊3的運行,並由第一DMA模塊2將已經完成計算的中間編碼結果從RAID編解碼模塊1搬移到片外緩存4;如果配置第二DMA模塊3發起中斷請求,第二DMA模塊3會中斷未完成的命令發送,並將已經完成計算的中間編碼結果從RAID編解碼模塊1搬移到片外緩存4。
3.如果發起中斷命令的原因是執行更高優先級的編碼命令,RAID編解碼模塊1會完整的執行該命令。此時第二DMA模塊3從片外緩存4搬移新的待編碼數據進入RAID編解碼模塊1進行編碼計算,並將計算結果搬移到片外緩存4或片內緩存5供後續模塊使用。
如果發起中斷命令的原因是執行解碼命令,RAID編解碼模塊1會完整的執行該命令。此時第三DMA模塊6將待解碼數據搬移到RAID編解碼模塊1進行數據解碼恢復,並將恢復後數據送入片內緩存5或片外緩存4中。
4.當執行完更高優先級的編碼命令或解碼命令後,查詢是否有命令被中斷。如果有命令被中斷,仲裁單元7通過第二DMA模塊暫停控制位M選擇由第一DMA模塊2或第二DMA模塊3進行現場恢復,並繼續搬移片外緩存4中的中間編碼數據進入RAID編解碼模塊1,進行編碼計算並輸出計算結果。否則,進入待機狀態等待新的RAID命令請求。
如果仲裁單元7控制第一DMA模塊2執行現場恢復,第一DMA模塊2會向RAID編解碼模塊1發起恢復命令,並從片外緩存4將中間編碼結果搬移到RAID編解碼模塊1中。然後由仲裁單元7激活第二DMA模塊3,並控制第二DMA模塊3將剩餘未編碼數據從片外緩存4搬移到RAID編解碼模塊1中進行編碼計算,並輸出完整編碼結果到片外緩存4或片內緩存5。
如果仲裁單元7控制第二DMA模塊3執行現場恢復,第二DMA模塊3會向RAID編解碼模塊1發起恢復命令,並從片外緩存4將中間編碼結果搬移到RAID編解碼模塊1中。然後由軟體控制第二DMA模塊3將剩餘未編碼數據從片外緩存4搬移到RAID編解碼模塊1中進行編碼計算,並輸出完整的編碼結果到片外緩存4或片內緩存5。
綜上可見,本發明的特點在於:
(1)允許軟體控制不同的DMA模塊發起中斷和恢復,硬體自動執行數據搬移,提高性能和系統靈活性。
(2)SSD中RAID命令的中斷和恢復觸發因素不局限於異常狀況,如果RAID編碼過程中需要相同的硬體資源處理更高優先級事物,允許隨時中斷當前RAID編碼操作。
(3)支持使用SSD主控晶片內部存儲單元(SRAM)和片外存儲器件(例如DRAM/FLASH等易失和非易失性存儲器件)存儲RAID中斷涉及的中間數據(包括已經參與編碼的原始數據和該部分數據計算出來的中間結果,以及這部分數據在條帶中的索引信息等);具體緩存方式軟體可控制。
(4)數據恢復過程中,不需要重新從頭開始輸入數據計算校驗碼,只需要將中間結果通過硬體手段快速搬移到RAID編解碼模塊1中,節省重新計算的時間開銷,提高總線效率。
(5)支持軟硬體協同處理RAID編碼中斷的多重嵌套,例如當前RAID編碼數據尚未準備好,可以中斷當前編碼命令,並執行新的編碼命令,提高總線利用率。
(6)中斷和恢復過程中完成中間數據緩存後,軟體控制或硬體自動完成RAID編解碼模塊1中中間數據的清除。