專利名稱:一種實(shí)現(xiàn)Nand Flash磨損均衡的方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于存儲(chǔ)技術(shù)領(lǐng)域,具體涉及一種實(shí)現(xiàn)Nand Flash磨損均衡的方法及其系統(tǒng)。
背景技術(shù):
閃存(Flash Memory)是嵌入式系統(tǒng)中一種常用的存儲(chǔ)介質(zhì),它是一種非易失、防震、節(jié)能的存儲(chǔ)設(shè)備。Nand Flash是現(xiàn)在市場(chǎng)上主要的非易失閃存芯片,其特有的結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,同時(shí)其寫入和擦除的速度也較快。一個(gè)閃存通常是由若干個(gè)閃存塊(block)組成的,每個(gè)閃存塊又分成若干個(gè)物理 頁(yè)(page)。頁(yè)是寫入數(shù)據(jù)的最小單位,塊是擦除數(shù)據(jù)的最小單位。頁(yè)內(nèi)數(shù)據(jù)不能被反復(fù)寫入,只有當(dāng)包含該頁(yè)的塊被擦除后才能重新寫入。而每個(gè)閃存塊的擦除次數(shù)是有限制的,一般是在十萬(wàn)次到一百萬(wàn)次之間,只要其中有一個(gè)閃存塊的擦除次數(shù)達(dá)到了上限,數(shù)據(jù)存儲(chǔ)就會(huì)變得不可靠,會(huì)影響到整個(gè)閃存的壽命。為了避免對(duì)Nand Flash某一 Block的頻繁讀寫造成該快的老化加速,目前最常用的算法是磨損均衡算法。磨損均衡包括兩大類算法一類是針對(duì)數(shù)據(jù)寫入過(guò)程中通過(guò)控制寫入的物理塊,動(dòng)態(tài)均衡所有物理塊擦除次數(shù)的動(dòng)態(tài)磨損均衡算法;動(dòng)態(tài)磨損均衡算法可以確保我們?cè)诜峙鋲K進(jìn)行寫入時(shí)采取較優(yōu)的策略,實(shí)現(xiàn)整體上的負(fù)載均衡??墒窃摲椒ê雎粤死鋽?shù)據(jù)存在,如果有的塊上存放著冷數(shù)據(jù),那么該塊就永遠(yuǎn)不會(huì)被擦除;另一類是通過(guò)調(diào)整物理塊上存儲(chǔ)的數(shù)據(jù)(經(jīng)常被擦寫的熱數(shù)據(jù)和不經(jīng)常被擦寫的冷數(shù)據(jù)),靜態(tài)地均衡所有物理塊擦除次數(shù)的靜態(tài)磨損均衡算法,周期性地交換冷數(shù)據(jù)和熱數(shù)據(jù),靜態(tài)磨損均衡算法解決了動(dòng)態(tài)算法忽略冷數(shù)據(jù)的問(wèn)題,但是頻繁的調(diào)整冷熱數(shù)據(jù)無(wú)疑會(huì)增加系統(tǒng)的開銷,同時(shí)也會(huì)帶來(lái)很多額外的磨損。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)所存在的上述技術(shù)缺陷,本發(fā)明提供了一種實(shí)現(xiàn)Nand Flash磨損均衡的方法及其系統(tǒng),能夠更好的均衡Nand Flash中各Block的擦除次數(shù),提高Nand Flash的使用壽命。一種實(shí)現(xiàn)Nand Flash磨損均衡的方法統(tǒng)計(jì)Nand Flash中每個(gè)Block的擦除次數(shù),并計(jì)算出各Block的熱度;根據(jù)Block的數(shù)據(jù)存儲(chǔ)信息以及熱度將各Block分配至以下三個(gè)鏈表中熱數(shù)據(jù)塊鏈表、冷數(shù)據(jù)塊鏈表和空閑塊鏈表;定時(shí)啟動(dòng)冷塊處理程序;當(dāng)Nand Flash有數(shù)據(jù)寫入時(shí),以擦除次數(shù)少作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出若干個(gè)Block,將數(shù)據(jù)寫入這些Block中,并對(duì)這些Block重新分配;當(dāng)對(duì)臟塊進(jìn)行回收時(shí),擦除其所存放的數(shù)據(jù),并使其擦除次數(shù)加I,進(jìn)而根據(jù)其擦除次數(shù)將臟塊放入空閑塊鏈表中相應(yīng)位置;根據(jù)公式R = D/Dmax計(jì)算Block的熱度;其中,R為Block的熱度,D為Block的擦除次數(shù),Dmax為Nand Flash中擦除次數(shù)最大的Block的擦除次數(shù)。根據(jù)以下標(biāo)準(zhǔn)對(duì)各Block進(jìn)行分配將存有有用數(shù)據(jù)且當(dāng)前熱度大于給定閾值的Block分配至熱數(shù)據(jù)塊鏈表中;將存有有用數(shù)據(jù)且當(dāng)前熱度小于或等于給定閾值的Block分配至冷數(shù)據(jù)塊鏈表中;將未存有任何數(shù)據(jù)的Block分配至空閑塊鏈表中且按擦除次數(shù)由少到多進(jìn)行排列。所述的臟塊為Nand Flash中存有無(wú)用數(shù)據(jù)的Block。所述的有用數(shù)據(jù)為存儲(chǔ)在Nand Flash中未被用戶刪除且能被讀取的數(shù)據(jù);所述的無(wú)用數(shù)據(jù)為存儲(chǔ)在Nand Flash中已被用戶刪除且不能被讀取的數(shù)據(jù)。所述的冷塊處理程序?yàn)槭紫?,以擦除次?shù)多作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出η個(gè)Block,η為冷數(shù)據(jù)塊鏈表中Block的個(gè)數(shù);然后,將冷數(shù)據(jù)塊鏈表中各Block上存放的數(shù)據(jù)對(duì)應(yīng)復(fù)制給空閑塊鏈表中挑選出的η個(gè)Block ;最后,將冷數(shù)據(jù)塊鏈表中各Block歸為臟塊并從冷數(shù)據(jù)塊鏈表中移除,并對(duì)空閑塊鏈表中寫入數(shù)據(jù)的這η個(gè)Block·重新分配?!N用于實(shí)現(xiàn)上述方法的系統(tǒng),包括熱數(shù)據(jù)塊鏈表,用于存放存有有用數(shù)據(jù)且當(dāng)前熱度大于給定閾值的Block ;冷數(shù)據(jù)塊鏈表,用于存放存有有用數(shù)據(jù)且當(dāng)前熱度小于或等于給定閾值的Block ;空閑塊鏈表,用于按擦除次數(shù)由少到多的次序存放未存有任何數(shù)據(jù)的Block ;統(tǒng)計(jì)模塊,用于統(tǒng)計(jì)Nand Flash中每個(gè)Block的擦除次數(shù),并計(jì)算各Block的熱度;數(shù)據(jù)寫入模塊,用于當(dāng)Nand Flash有數(shù)據(jù)寫入時(shí),以擦除次數(shù)少作為優(yōu)先挑選原貝U,依次從空閑塊鏈表中挑選出若干個(gè)Block,并將數(shù)據(jù)寫入這些Block中;臟塊回收模塊,用于擦除臟塊所存放的數(shù)據(jù),并使其擦除次數(shù)加I ;冷塊處理模塊,用于定時(shí)啟動(dòng)冷塊處理程序以擦除次數(shù)多作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出η個(gè)Block,將冷數(shù)據(jù)塊鏈表中各Block上存放的數(shù)據(jù)對(duì)應(yīng)復(fù)制給空閑塊鏈表中挑選出的η個(gè)Block,將冷數(shù)據(jù)塊鏈表中各Block歸為臟塊并從冷數(shù)據(jù)塊鏈表中移除;分配模塊,用于根據(jù)Block的數(shù)據(jù)存儲(chǔ)信息以及熱度將各Block分配至熱數(shù)據(jù)塊鏈表、冷數(shù)據(jù)塊鏈表或空閑塊鏈表中;并當(dāng)Block的數(shù)據(jù)存儲(chǔ)信息發(fā)生變化時(shí),對(duì)Block進(jìn)行重新分配。本發(fā)明方法能夠有效地均衡Nand Flash中各Block的擦除次數(shù),提高NandFlash的使用壽命;其使用的數(shù)據(jù)結(jié)構(gòu)以及算法的開銷小,且實(shí)現(xiàn)簡(jiǎn)單和方便,不需要排序等冗余操作,節(jié)約了 CPU資源;本發(fā)明系統(tǒng)中的鏈表使用的是靜態(tài)鏈表,解決了許多實(shí)時(shí)操作系統(tǒng)不支持動(dòng)態(tài)內(nèi)存管理的問(wèn)題。
圖I為ED0L、HSL和CSL的示意圖。圖2為數(shù)據(jù)寫入時(shí)Block從EDOL轉(zhuǎn)移至HSL的示意圖。圖3為臟塊回收時(shí)臟塊插入至EDOL的示意圖。
圖4為CSL的Block數(shù)據(jù)復(fù)制至EDOL中對(duì)應(yīng)Block的示意圖。圖5為本發(fā)明系統(tǒng)的結(jié)構(gòu)示意圖。 圖6 (a)為采用傳統(tǒng)動(dòng)態(tài)磨損均衡方法各Block的擦除次數(shù)示意圖。圖6 (b)為采用傳統(tǒng)靜態(tài)磨損均衡方法各Block的擦除次數(shù)示意圖。圖6(c)為采用本發(fā)明磨損均衡方法各Block的擦除次數(shù)示意圖。
具體實(shí)施例方式為了更為具體地描述本發(fā)明,下面結(jié)合附圖及具體實(shí)施方式
對(duì)本發(fā)明方法及系統(tǒng)進(jìn)行詳細(xì)說(shuō)明。一種實(shí)現(xiàn)Nand Flash磨損均衡的方法,在開始前我們需要定義ME,用來(lái)記錄最大塊擦除次數(shù),最大塊擦除次數(shù)為Nand Flash中擦除次數(shù)最大的Block的擦除次數(shù);設(shè)置冷熱度的閾值R以及冷塊處理程序的啟動(dòng)頻率F ;閾值的選取非常重要,若閾值選取過(guò)大,則可能導(dǎo)致需要替換的冷塊大于空閑塊的數(shù)量,不能全部替換;若閾值選取過(guò)小,會(huì)導(dǎo)致冷塊得不到及時(shí)釋放,影響磨損均衡的效果;本實(shí)施方式中R為0. 18,F(xiàn)為3X 10_4Ηζ。首先,統(tǒng)計(jì)Nand Flash中每個(gè)Block的擦除次數(shù),并根據(jù)公式R = D/Dmax計(jì)算出各Block的熱度;其中,R為Block的熱度,D為Block的擦除次數(shù),Dmax為最大塊擦除次數(shù);根據(jù)數(shù)據(jù)存儲(chǔ)信息以及熱度將各Block分配至以下三個(gè)鏈表中熱數(shù)據(jù)塊鏈表、冷數(shù)據(jù)塊鏈表和空閑塊鏈表;其中將存有有用數(shù)據(jù)且當(dāng)前熱度大于閾值R的Block(熱塊,HotBlock)分配至熱數(shù)據(jù)塊鏈表中;將存有有用數(shù)據(jù)且當(dāng)前熱度小于或等于閾值R的Block(冷塊,ColdBlock)分配至冷數(shù)據(jù)塊鏈表中;將未存有任何數(shù)據(jù)的Block(空閑塊,EmptyBlock)分配至空閑塊鏈表中且按擦除次數(shù)由少到多進(jìn)行排列,有用數(shù)據(jù)為存儲(chǔ)在Nand Flash中未被用戶刪除且能被讀取的數(shù)據(jù)。如圖I所示,我們要維護(hù)的3個(gè)數(shù)據(jù)結(jié)構(gòu)熱數(shù)據(jù)塊鏈表HSL、冷數(shù)據(jù)塊鏈表CSL、空閑塊鏈表ED0L。HSL和CSL中的Block沒(méi)有順序,EDOL中的Block按照擦除次數(shù)從少到多的順序進(jìn)行排列。當(dāng)Nand Flash有數(shù)據(jù)寫入時(shí),以擦除次數(shù)少作為優(yōu)先挑選原則,依次從EDOL中挑選出若干個(gè)Block,將數(shù)據(jù)寫入這些Block中,并對(duì)這些Block重新分配,即根據(jù)熱度將這些Block插入至HSL或CSL中,圖2以插入HSL為例。當(dāng)對(duì)臟塊進(jìn)行回收時(shí),擦除其所存放的數(shù)據(jù),并使其擦除次數(shù)加I (若該臟塊的擦除次數(shù)值大于最大塊擦除次數(shù)ME,則更新ME),進(jìn)而根據(jù)其擦除次數(shù)將臟塊放入EDOL中相應(yīng)位置,如圖3所示;臟塊為Nand Flash中存有無(wú)用數(shù)據(jù)的Block,無(wú)用數(shù)據(jù)為存儲(chǔ)在NandFlash中已被用戶刪除且不能被讀取的數(shù)據(jù)。在Nand Flash正常運(yùn)行過(guò)程中,根據(jù)啟動(dòng)頻率F定時(shí)啟動(dòng)冷塊處理程序,如圖4所示首先,以擦除次數(shù)多作為優(yōu)先挑選原則,依次從EDOL中挑選出η個(gè)Block,η為CSL中Block的個(gè)數(shù);然后,將CSL中各Block上存放的數(shù)據(jù)對(duì)應(yīng)復(fù)制給EDOL中挑選出的η個(gè)Block ;最后,將CSL中各Block歸為臟塊并從CSL中移除,并對(duì)空閑塊鏈表中寫入數(shù)據(jù)的這η個(gè)Block重新分配(即根據(jù)熱度將這些Block插入至HSL或CSL中)。如圖5所示,本實(shí)施方式對(duì)應(yīng)的系統(tǒng),包括ED0L、HSL、CSL、統(tǒng)計(jì)模塊、數(shù)據(jù)寫入模塊、臟塊回收模塊、冷塊處理模塊和分配模塊;其中
HSL用于存放存有有用數(shù)據(jù)且當(dāng)前熱度大于給定閾值的Block ;CSL用于存放存有有用數(shù)據(jù)且當(dāng)前熱度小于或等于給定閾值的Block ;EDOL用于按擦除次數(shù)由少到多的次序存放未存有任何數(shù)據(jù)的Block ;統(tǒng)計(jì)模塊用于統(tǒng)計(jì)Nand Flash中每個(gè)Block的擦除次數(shù),并計(jì)算各Block的熱度;數(shù)據(jù)寫入模塊用于當(dāng)Nand Flash有數(shù)據(jù)寫入時(shí),以擦除次數(shù)少作為優(yōu)先挑選原貝U,依次從空閑塊鏈表中挑選出若干個(gè)Block,并將數(shù)據(jù)寫入這些Block中; 臟塊回收模塊用于擦除臟塊所存放的數(shù)據(jù),并使其擦除次數(shù)加I ;冷塊處理模塊用于定時(shí)啟動(dòng)冷塊處理程序以擦除次數(shù)多作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出η個(gè)Block,將冷數(shù)據(jù)塊鏈表中各Block上存放的數(shù)據(jù)對(duì)應(yīng)復(fù)制給空閑塊鏈表中挑選出的η個(gè)Block,將冷數(shù)據(jù)塊鏈表中各Block歸為臟塊并從冷數(shù)據(jù)塊鏈表中移除;分配模塊用于根據(jù)Block的數(shù)據(jù)存儲(chǔ)信息以及熱度將各Block分配至熱數(shù)據(jù)塊鏈表、冷數(shù)據(jù)塊鏈表或空閑塊鏈表中;并當(dāng)Block的數(shù)據(jù)存儲(chǔ)信息發(fā)生變化時(shí),對(duì)Block進(jìn)行重新分配。統(tǒng)計(jì)模塊、數(shù)據(jù)寫入模塊、臟塊回收模塊、冷塊處理模塊和分配模塊均通過(guò)計(jì)算機(jī)編程實(shí)現(xiàn)。為了驗(yàn)證本實(shí)施方式的實(shí)際效果,我們搭建了一個(gè)計(jì)算機(jī)仿真測(cè)試平臺(tái),其包含一個(gè)容量為8MB的閃存仿真模型,指定閃存的物理頁(yè)大小為4KB,每個(gè)Block包含64個(gè)物理頁(yè),那么總共有32個(gè)Block,每個(gè)塊的可擦除次數(shù)設(shè)置上限為20萬(wàn)次,初始化時(shí)已經(jīng)放入了4MB的數(shù)據(jù)。測(cè)試的方法為每次請(qǐng)求對(duì)一個(gè)邏輯頁(yè)進(jìn)行更新操作,直到有任意Block達(dá)到了可擦除次數(shù)的上限值。從實(shí)驗(yàn)結(jié)果可以看出,單純的動(dòng)態(tài)磨損均衡算法各塊的擦除次數(shù)起伏比較大,原因就在于其沒(méi)有考慮到冷數(shù)據(jù)的存在,如圖6(a)所示;單純靜態(tài)磨損均衡算法跟動(dòng)態(tài)更新相比,各Block的擦除次數(shù)起伏小,但是由于頻繁的進(jìn)行冷塊和熱塊的交換,其消耗的內(nèi)存等資源比較多,同時(shí)也有一些擦除次數(shù)源于其不停的交換,如圖6(b)所示;本實(shí)施方式所采用的動(dòng)靜結(jié)合方法跟單純的靜態(tài)或動(dòng)態(tài)相比有明顯的優(yōu)勢(shì),不僅整體利用率的提升,同時(shí)也不存在各Block之間有大的起伏,如圖6(c)所示。
權(quán)利要求
1.一種實(shí)現(xiàn)Nand Flash磨損均衡的方法,其特征在于統(tǒng)計(jì)Nand Flash中每個(gè)Block的擦除次數(shù),并計(jì)算出各Block的熱度;根據(jù)Block的數(shù)據(jù)存儲(chǔ)信息以及熱度將各Block分配至以下三個(gè)鏈表中熱數(shù)據(jù)塊鏈表、冷數(shù)據(jù)塊鏈表和空閑塊鏈表;定時(shí)啟動(dòng)冷塊處理程序; 當(dāng)Nand Flash有數(shù)據(jù)寫入時(shí),以擦除次數(shù)少作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出若干個(gè)Block,將數(shù)據(jù)寫入這些Block中,并對(duì)這些Block重新分配; 當(dāng)對(duì)臟塊進(jìn)行回收時(shí),擦除其所存放的數(shù)據(jù),并使其擦除次數(shù)加1,進(jìn)而根據(jù)其擦除次數(shù)將臟塊放入空閑塊鏈表中相應(yīng)位置。
2.根據(jù)權(quán)利要求I所述的實(shí)現(xiàn)NandFlash磨損均衡的方法,其特征在于根據(jù)公式R=D/Dmax計(jì)算Block的熱度;其中,R為Block的熱度,D為Block的擦除次數(shù),Dmax為NandFlash中擦除次數(shù)最大的Block的擦除次數(shù)。
3.根據(jù)權(quán)利要求I所述的實(shí)現(xiàn)NandFlash磨損均衡的方法,其特征在于根據(jù)以下標(biāo)準(zhǔn)對(duì)各Block進(jìn)行分配將存有有用數(shù)據(jù)且當(dāng)前熱度大于給定閾值的Block分配至熱數(shù)據(jù)塊鏈表中;將存有有用數(shù)據(jù)且當(dāng)前熱度小于或等于給定閾值的Block分配至冷數(shù)據(jù)塊鏈表中;將未存有任何數(shù)據(jù)的Block分配至空閑塊鏈表中且按擦除次數(shù)由少到多進(jìn)行排列。
4.根據(jù)權(quán)利要求I所述的實(shí)現(xiàn)NandFlash磨損均衡的方法,其特征在于所述的冷塊處理程序?yàn)槭紫?,以擦除次?shù)多作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出η個(gè)Block,η為冷數(shù)據(jù)塊鏈表中Block的個(gè)數(shù);然后,將冷數(shù)據(jù)塊鏈表中各Block上存放的數(shù)據(jù)對(duì)應(yīng)復(fù)制給空閑塊鏈表中挑選出的η個(gè)Block ;最后,將冷數(shù)據(jù)塊鏈表中各Block歸為臟塊并從冷數(shù)據(jù)塊鏈表中移除,并對(duì)空閑塊鏈表中寫入數(shù)據(jù)的這η個(gè)Block重新分配。
5.一種用于實(shí)現(xiàn)如權(quán)利要求I所述的方法的系統(tǒng),包括 熱數(shù)據(jù)塊鏈表,用于存放存有有用數(shù)據(jù)且當(dāng)前熱度大于給定閾值的Block ; 冷數(shù)據(jù)塊鏈表,用于存放存有有用數(shù)據(jù)且當(dāng)前熱度小于或等于給定閾值的Block ; 空閑塊鏈表,用于按擦除次數(shù)由少到多的次序存放未存有任何數(shù)據(jù)的Block ; 統(tǒng)計(jì)模塊,用于統(tǒng)計(jì)Nand Flash中每個(gè)Block的擦除次數(shù),并計(jì)算各Block的熱度; 數(shù)據(jù)寫入模塊,用于當(dāng)Nand Flash有數(shù)據(jù)寫入時(shí),以擦除次數(shù)少作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出若干個(gè)Block,并將數(shù)據(jù)寫入這些Block中; 臟塊回收模塊,用于擦除臟塊所存放的數(shù)據(jù),并使其擦除次數(shù)加I ; 冷塊處理模塊,用于定時(shí)啟動(dòng)冷塊處理程序以擦除次數(shù)多作為優(yōu)先挑選原則,依次從空閑塊鏈表中挑選出η個(gè)Block,將冷數(shù)據(jù)塊鏈表中各Block上存放的數(shù)據(jù)對(duì)應(yīng)復(fù)制給空閑塊鏈表中挑選出的η個(gè)Block,將冷數(shù)據(jù)塊鏈表中各Block歸為臟塊并從冷數(shù)據(jù)塊鏈表中移除; 分配模塊,用于根據(jù)Block的數(shù)據(jù)存儲(chǔ)信息以及熱度將各Block分配至熱數(shù)據(jù)塊鏈表、冷數(shù)據(jù)塊鏈表或空閑塊鏈表中;并當(dāng)Block的數(shù)據(jù)存儲(chǔ)信息發(fā)生變化時(shí),對(duì)Block進(jìn)行重新分配。
全文摘要
本發(fā)明公開了一種實(shí)現(xiàn)Nand Flash磨損均衡的方法統(tǒng)計(jì)當(dāng)前Nand Flash中每個(gè)Block的擦除次數(shù),并計(jì)算出各Block的熱度;根據(jù)數(shù)據(jù)存儲(chǔ)信息以及熱度將各Block分配至EDOL、HSL或CSL中;定時(shí)啟動(dòng)冷塊處理程序;當(dāng)NandFlash有數(shù)據(jù)寫入時(shí),從空閑塊鏈表中挑選出擦除次數(shù)最少的若干Block,將數(shù)據(jù)寫入這些Block中。本發(fā)明還公開了實(shí)現(xiàn)上述方法的系統(tǒng),包括EDOL、HSL、CSL、統(tǒng)計(jì)模塊、數(shù)據(jù)寫入模塊、臟塊回收模塊、冷塊處理模塊和分配模塊;本發(fā)明能夠有效地均衡Nand Flash中各Block的擦除次數(shù),提高Nand Flash的使用壽命。
文檔編號(hào)G06F12/06GK102880556SQ20121033527
公開日2013年1月16日 申請(qǐng)日期2012年9月12日 優(yōu)先權(quán)日2012年9月12日
發(fā)明者李紅, 姜旭峰, 李坤, 程士慶, 陳浩杰, 吳朝暉 申請(qǐng)人:浙江大學(xué)