一種NandFlash磨損均衡方法、裝置及存儲器與流程
2023-04-23 21:28:22
本發明涉及計算機系統及存儲領域,特別涉及一種Nand Flash磨損均衡方法、裝置及存儲器。
背景技術:
隨著現代社會科技的發展,計算機已經廣泛應用於各種領域,隨之而來的是各種圍繞計算機系統的存儲器在飛速發展。Nand Flash是一種新型的非易失存儲器件,具有速度快,體積小,存儲密度大,功耗低等特點,以它為存儲介質的固態硬碟(SSD)已經得到廣泛應用。
一個SSD由很多個獨立的Nand Flash晶片組成,每個Nand Flash由多個target構成,每個target由多個LUN組成,每個LUN包含多個block,每個block包含多個page。
現有技術中,Nand Flash除了上述提到的優點以外,本身有一些固有的缺陷:第一,Nand Flash的寫入是out-of-place,即寫入操作不能在本地更新,必須寫入到新的空白頁,同時舊的數據所在頁會被標記為無效,等待擦除後才能重新使用;第二,Nand Flash的讀寫操作是以物理頁(page)為單位,而擦除是以物理塊(block)為單位,並且擦除操作所用時間遠遠大於讀寫操作所用時間;第三,Nand Flash的擦除次數有限制,根據介質材料的不同,通常在幾千次到十萬次之間。
正是由於上述原因,Nand Flash需要設計磨損均衡算法,保證所有block的擦寫次數均衡,防止出現某個block擦寫次數過大,導致整個Nand Flash失效的情況。磨損均衡操作可以大致分為兩大類,a)動態磨損均衡,當寫入的數據發生更改,新的數據會寫入到新的位置,舊的數據會被標記成無效,等待垃圾回收擦除;b)靜態磨損均衡,當寫入的數據長時間沒有發生改變,該數據所在block無法被垃圾回收,需要強制把該block數據進行搬移和擦除。
如今所說的磨損均衡,是指動態磨損均衡,但如果對長時間沒有讀寫操作的靜態數據沒有進行靜態磨損均衡操作,就會導致頻繁讀寫數據所在的動態block的擦除次數與靜態數據所在靜態block的擦除次數相差太大,沒有實現Nand Flash擦除次數的整體均衡,從而影響Nand Flash壽命。因此,對Nand Flash做包含靜態均衡在內的全局均衡,成為增加Nand Flash使用壽命的重要因素。
技術實現要素:
本發明的目的是提供一種Nand Flash磨損均衡方法、裝置及存儲器,以對Nand Flash進行包含靜態均衡在內的全局均衡,增加Nand Flash的使用壽命,提高用戶體驗。
為解決上述技術問題,本發明提供一種Nand Flash磨損均衡方法,該方法包括:
根據所述Nand Flash中每個block的擦除次數計算每個所述block的擦除優先級P;其中,所述Nand Flash中包括靜態block和動態block;
對所述擦除優先級P進行動態排序,獲取動態排序位置;
按照所述動態排序位置對所述block進行擦除。
可選的,通過所述block的擦除次數和所述block所在LUN的平均擦除次數的差值,計算每個所述block的擦除次數距離;
通過所述擦除次數距離的絕對值加1除以預先設置的擦除優先級的個數後與所述擦除次數距離相乘,計算出每個所述block的擦除次數權重;
將所述擦除次數權重、所述block的有效頁個數和基礎擦除優先級相加,得到每個所述block的所述擦除優先級P。
可選的,對所述擦除優先級P進行動態排序,獲取動態排序位置,包括:
將所述擦除優先級P與所述block所在LUN的平均擦除次數的和與預先設置的擦除優先級的個數求餘,獲取所述擦除優先級P的動態排序位置。
可選的,對所述擦除優先級P進行動態排序,獲取動態排序位置之後,還包括:
將所述擦除優先級P的排序位置作為索引位置添加到對應的擦除優先級雙向鍊表的末尾;
按照所述擦除優先級雙向鍊表對所述block進行擦除。
此外,本發明還提供了一種Nand Flash磨損均衡裝置,該裝置包括:
計算模塊,用於根據所述Nand Flash中每個block的擦除次數計算每個所述block的擦除優先級P;其中,所述Nand Flash中包括靜態block和動態block;
排序模塊,用於對所述擦除優先級P進行動態排序,獲取動態排序位置;
擦除模塊,用於按照所述動態排序位置對所述block進行擦除。
可選的,所述計算模塊,包括:
距離計算單元,用於通過所述block的擦除次數和所述block所在LUN的平均擦除次數的差值,計算每個所述block的擦除次數距離;
權重計算單元,用於通過所述擦除次數距離的絕對值加1除以預先設置的擦除優先級的個數後與所述擦除次數距離相乘,計算出每個所述block的擦除次數權重;
擦除優先級計算單元,用於將所述擦除次數權重、所述block的有效頁個數和基礎擦除優先級相加,得到每個所述block的所述擦除優先級P。
可選的,所述排序模塊,包括:
位置計算單元,用於將所述擦除優先級P與所述block所在LUN的平均擦除次數的和與預先設置的擦除優先級的個數求餘,獲取所述擦除優先級P的動態排序位置。
可選的,所述排序模塊,還包括:
添加單元,用於將所述擦除優先級P的排序位置作為索引位置添加到對應的擦除優先級雙向鍊表的末尾。
本發明還提供了一種存儲器,包括:
處理器,用於根據所述Nand Flash中每個block的擦除次數計算每個所述block的擦除優先級P;其中,所述Nand Flash中包括靜態block和動態block;對所述擦除優先級P進行動態排序;按照所述動態排序位置對所述block進行擦除。
可選的,所述存儲器具體為Nand Flash。
本發明所提供的一種Nand Flash磨損均衡方法,包括根據所述Nand Flash中每個block的擦除次數計算每個所述block的擦除優先級P;其中,所述Nand Flash中包括靜態block和動態block;對所述擦除優先級P進行動態排序;按照所述動態排序位置對所述block進行擦除;
可見,本發明通過根據Nand Flash中每個block的擦除次數計算每個block的擦除優先級P,可以獲取Nand Flash中每個block進行擦除的優先級,通過對所述擦除優先級P進行動態排序,可以將每個block進行擦除的順序排列出來,從而能夠按照該順序對每個block進行擦除,使得Nand Flash進行的全局均衡包含了對動態block的動態均衡和對靜態block的靜態均衡,進而增加了Nand Flash的使用壽命,提高了用戶體驗。此外,本發明還提供了一種Nand Flash磨損均衡裝置及存儲器,同樣具有上述有益效果。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據提供的附圖獲得其他的附圖。
圖1為本發明實施例所提供的一種Nand Flash磨損均衡方法的流程圖;
圖2為本發明實施例所提供的另一種Nand Flash磨損均衡方法的流程圖;
圖3為本發明實施例所提供的另一種Nand Flash磨損均衡方法的擦除優先級雙向鍊表的示意圖;
圖4為本發明實施例所提供的一種Nand Flash磨損均衡裝置的結構圖。
具體實施方式
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
請參考圖1,圖1為本發明實施例所提供的一種Nand Flash磨損均衡方法的流程圖。該方法可以包括:
步驟101:根據所述Nand Flash中每個block的擦除次數計算每個所述block的擦除優先級P;其中,所述Nand Flash中包括靜態block和動態block。
可以理解的是,靜態block可以為長時間沒有讀寫操作的靜態數據所在的block;動態block頻繁讀寫的數據所在的block。根據Nand Flash中每個block的擦除次數計算每個block的擦除優先級P可以是在使用本方法開始時,對Nand Flash中每個block計算每個block的擦除優先級P,然後再計算進行擦除操作後的block的擦除優先級P。
需要說明的是,對於計算block的擦除優先級P的方式,可以是只考慮block的擦除次數,如根據block的擦除次數計算該block的擦除次數距離,也就是計算該block的擦除次數和該block所在LUN的平均擦除次數的差值,將該block的擦除次數距離的絕對值作為該block的擦除優先級P;也可以是考慮block的擦除次數和該block的有效頁個數,如根據block的擦除次數計算該block的擦除次數距離,再計算該block的擦除次數權重,將擦除次數權重、該block的有效頁個數和基礎擦除優先級相加的和作為該block的擦除優先級P。本實施例對此不受任何限制。
步驟102:對所述擦除優先級P進行動態排序,獲取動態排序位置。
其中,動態排序對於只考慮block的擦除次數的block的擦除優先級P計算方式,可以是將計算出的擦除優先級P的絕對值按照由小到大的順序排列,每計算出一個擦除優先級P便將其絕對值加入到此排列隊伍中;也可以是建立優先級雙向鍊表,將計算出的擦除優先級P的絕對值添加到對應優先級雙向鍊表的末尾。
動態排序對於考慮block的擦除次數和該block的有效頁個數的block的擦除優先級P計算方式,可以是將計算出的block的擦除優先級P與block所在LUN的平均擦除次數的結果與預先設置的擦除優先級的個數求餘,對於求餘的結果按照由小到大的順序排列,每計算出一個block的求餘結果變將其加入到此排列隊伍中;或者根據預先設置的擦除優先級的個數建立該個數的優先級雙向鍊表,將計算出的求餘結果添加到對應優先級雙向鍊表的末尾。只要可以將擦除優先級P根據實用場景或用戶需求進行動態排序,對於動態排序的方式本實施例不做任何限制。
可以理解的是,對擦除優先級P直接進行排列時,每計算出一個新的擦除優先級P可以導致原本的排列隊伍需要進行重新排列,使得處理器需要一直進行排列,增加了處理器的運算量。因此,可以建立優先級雙向鍊表,使每個擦除優先級P添加到對應優先級雙向鍊表的末尾,能夠減少處理器的排序過程,增加本方法的運算速度。
步驟103:按照所述動態排序位置對所述block進行擦除。
其中,按照動態排序位置對所述block進行擦除可以為按照排列隊伍的順序對對應的block進行擦除,也可以為按照優先級雙向鍊表的順序對對應的block進行擦除。本實施例對此不受任何限制。
本實施例中,本發明實施例通過根據Nand Flash中每個block的擦除次數計算每個block的擦除優先級P,可以獲取Nand Flash中每個block進行擦除的優先級,通過對所述擦除優先級P進行動態排序,可以將每個block進行擦除的順序排列出來,從而能夠按照該順序對每個block進行擦除,使得Nand Flash進行的全局均衡包含了對動態block的動態均衡和對靜態block的靜態均衡,進而增加了Nand Flash的使用壽命,提高了用戶體驗。
請參考圖2、圖3,圖2為本發明實施例所提供的另一種Nand Flash磨損均衡方法的流程圖;圖3為本發明實施例所提供的另一種Nand Flash磨損均衡方法的擦除優先級雙向鍊表的示意圖。該方法可以包括:
步驟201:通過所述block的擦除次數和所述block所在LUN的平均擦除次數的差值,計算每個所述block的擦除次數距離。
其中,block的擦除次數距離也就是該block的擦除次數與該block所在LUN的平均擦除次數的距離。
例如,一個block的擦除次數為EC,該block所在LUN中所有block的平均擦除次數為AVREC,該block的擦除次數距離EC_DISTANCE的計算可以為:EC_DISTANCE=EC–AVREC,它的絕對值記作ABS(EC_DISTANCE)。EC_DISTANCE可以描述該block的擦除次數EC與該block所在LUN的平均擦除次數AVREC的差值,如果EC_DISTANCE為負數且ABS(EC_DISTANCE)數值較大,說明該block很有可能是一個長時間沒有讀寫的靜態數據塊。
步驟202:通過所述擦除次數距離的絕對值加1除以預先設置的擦除優先級的個數後與所述擦除次數距離相乘,計算出每個所述block的擦除次數權重。
其中,預先設置的擦除優先級的個數可以為本實施例中擦除優先級雙向鍊表的個數,對於擦除優先級的個數的具體數值的設置可以根據實用場景和用戶需求設置,本實施例對此不做任何限制。
需要說明的是,對於本實施例提供的方法來說,可以將擦除優先級的個數設置為block中物理頁個數的兩倍,使本實施例提供的方法達到最優效果,當然設置成block中物理頁個數的其他整數倍或設置成其他數值,也可以達到本實施例的目的,本實施例對此不受任何限制。
例如,上述block包含N個物理頁,block的擦除次數權重EC_WEIGHT的計算可以為:EC_WEIGHT=(ABS(EC_DISTANCE)+1)/(2*N)*EC_DISTANCE。EC_WEIGHT可以描述該block擦除次數在優先級計算中的權重,如果EC_WEIGHT為負數且其絕對值較大,說明該block很有可能是一個長時間沒有讀寫的靜態數據塊,需要加大其在優先級計算中的權重。
步驟203:將所述擦除次數權重、所述block的有效頁個數和基礎擦除優先級相加,得到每個所述block的所述擦除優先級P。
其中,基礎擦除優先級可以為block中的物理頁的數值。
例如,上述block包含N個物理頁,有效頁個數為VPC,記錄N為基礎優先級PRIORITY_BASE,該block的擦除優先級P的計算可以為:P=VPC+EC_WEIGHT+PRIORITY_BASE。P可以描述該block經過全局磨損均衡算法計算得到結果,綜合考慮了有效頁個數VPC和擦除次數權重EC_WEIGHT,如果P為負數,說明該block很有可能是一個長時間沒有讀寫的靜態數據塊,需要優先處理。
可以理解的是,步驟201至步驟203為block的擦除優先級P計算過程,在具體實施中只需要在本方法開始時對每個block進行擦除優先級P的計算,之後只需對進行擦除後的block進行擦除優先級P的計算,並不需要每擦除一個block便對全部block進行擦除優先級P的計算。
步驟204:將所述擦除優先級P與所述block所在LUN的平均擦除次數的和與預先設置的擦除優先級的個數求餘,獲取所述擦除優先級P的動態排序位置。
需要說明的是,對於本實施例來說,因為建立了擦除優先級的個數的擦除優先級雙向鍊表,所以擦除優先級P的動態排序位置也就可以為擦除優先級P的索引位置。
例如,上述block的擦除優先級P的索引位置INDEX的計算為:INDEX=(P+AVREC)%(2*N)。其中,INDEX的數值可以為0到2*N-1之間。
步驟205:將所述擦除優先級P的排序位置作為索引位置添加到對應的擦除優先級雙向鍊表的末尾。
需要說明的是,擦除優先級雙向鍊表的結構可以如圖3所示,每個擦除優先級可以對應一個雙向鍊表,同一擦除優先級的block通過雙向鍊表連接在一起。
步驟206:按照所述擦除優先級雙向鍊表對所述block進行擦除。
可以理解的是,擦除模塊需要對block進行擦除時,可以通過查找擦除優先級雙向鍊表的按索引位置由小到大的順序對對應的block進行擦除。
本實施例中,本發明實施例通過計算block的擦除次數權重的過程計算block的擦除優先級P,進一步考慮了block中的有效頁個數,可以更加準確獲取Nand Flash中每個block進行擦除的優先級,通過使用擦除優先級雙向鍊表,可以將每個block進行擦除的順序更加方便排列出來,從而能夠按照該順序對每個block進行擦除,使得Nand Flash進行的全局均衡包含了對動態block的動態均衡和對靜態block的靜態均衡,進而增加了Nand Flash的使用壽命,提高了用戶體驗。
請參考圖4,圖4為本發明實施例所提供的一種Nand Flash磨損均衡裝置的結構圖。該裝置可以包括:
計算模塊100,用於根據所述Nand Flash中每個block的擦除次數計算每個所述block的擦除優先級P;其中,所述Nand Flash中包括靜態block和動態block;
排序模塊200,用於對所述擦除優先級P進行動態排序,獲取動態排序位置;
擦除模塊300,用於按照所述動態排序位置對所述block進行擦除。
可選的,所述計算模塊100,包括:
距離計算單元,用於通過所述block的擦除次數和所述block所在LUN的平均擦除次數的差值,計算每個所述block的擦除次數距離;
權重計算單元,用於通過所述擦除次數距離的絕對值加1除以預先設置的擦除優先級的個數後與所述擦除次數距離相乘,計算出每個所述block的擦除次數權重;
擦除優先級計算單元,用於將所述擦除次數權重、所述block的有效頁個數和基礎擦除優先級相加,得到每個所述block的所述擦除優先級P。
可選的,所述排序模塊200,包括:
位置計算單元,用於將所述擦除優先級P與所述block所在LUN的平均擦除次數的和與預先設置的擦除優先級的個數求餘,獲取所述擦除優先級P的動態排序位置。
可選的,所述排序模塊200,還包括:
添加單元,用於將所述擦除優先級P的排序位置作為索引位置添加到對應的擦除優先級雙向鍊表的末尾。
本實施例中,本發明實施例通過計算模塊100根據Nand Flash中每個block的擦除次數計算每個block的擦除優先級P,可以獲取Nand Flash中每個block進行擦除的優先級,通過排序模塊200對所述擦除優先級P進行動態排序,可以將每個block進行擦除的順序排列出來,從而能夠通過擦除模塊300按照該順序對每個block進行擦除,使得Nand Flash進行的全局均衡包含了對動態block的動態均衡和對靜態block的靜態均衡,進而增加了Nand Flash的使用壽命,提高了用戶體驗。
此外,本發明實施例還提供了一種存儲器,包括:
處理器,用於根據所述Nand Flash中每個block的擦除次數計算每個所述block的擦除優先級P;其中,所述Nand Flash中包括靜態block和動態block;對所述擦除優先級P進行動態排序;按照所述動態排序位置對所述block進行擦除。
其中,所述存儲器具體為Nand Flash。
說明書中各個實施例採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對於實施例公開的裝置和存儲器而言,由於其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。
專業人員還可以進一步意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬體、計算機軟體或者二者的結合來實現,為了清楚地說明硬體和軟體的可互換性,在上述說明中已經按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬體還是軟體方式來執行,取決於技術方案的特定應用和設計約束條件。專業技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本發明的範圍。
結合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬體、處理器執行的軟體模塊,或者二者的結合來實施。軟體模塊可以置於隨機存儲器(RAM)、內存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬碟、可移動磁碟、CD-ROM、或技術領域內所公知的任意其它形式的存儲介質中。
以上對本發明所提供的Nand Flash磨損均衡方法、裝置及存儲器進行了詳細介紹。本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本發明的方法及其核心思想。應當指出,對於本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以對本發明進行若干改進和修飾,這些改進和修飾也落入本發明權利要求的保護範圍內。