本發(fā)明屬于數(shù)據(jù)存儲領域,更具體地,涉及一種優(yōu)化頁級閃存轉換層的方法。
背景技術:
NAND閃存(Flash Memory)具有體積小、低功耗、高性能等優(yōu)點,因此作為一種存儲介質被廣泛應用于嵌入式系統(tǒng)、筆記本電腦、數(shù)據(jù)中心等。閃存按照存儲密可以分為SLC(Single-Level Cell),MLC(Multi-Level Cell)和TLC(Triple-Level Cell)等,其中SLC的性能和可靠性最高,因此被廣泛應用于企業(yè)級和工業(yè)級固態(tài)盤。然而,閃存介質本身也存在著一些獨特的限制,例如不支持覆蓋寫、讀寫操作按頁為單位執(zhí)行,而擦除操作按塊執(zhí)行(每個塊包含多個頁)、以及擦出次數(shù)有限等等。為了克服這些限制,閃存轉換層(Flash Translation Layer,FTL)被用來管理閃存介質,使應用程序可以方便的對閃存介質進行傳統(tǒng)的基于塊的讀寫操作。
由于閃存頁不能直接覆蓋寫,而是需要先進行擦除。閃存的擦除操作時延較大,因此閃存轉換層通常會將被更新的數(shù)據(jù)寫到新的閃存頁,而將舊的閃存頁標記為無效頁。這就需要閃存轉換層能夠將存儲中的邏輯地址映射到閃存中的物理地址,這個過程被稱為地址轉換。隨著無效頁的增加,閃存中的空閑塊就會不斷變少,因此閃存轉換層需要進行垃圾回收,就是將塊中的有效頁拷貝到新的空閑塊,然后對舊的閃存塊執(zhí)行擦除操作。地址轉換和垃圾回收對閃存的性能和壽命都起著關鍵的作用。
閃存轉換層中的地址映射按照粒度的不同,可以分為頁級映射、塊級映射、以及混合映射。對于頁級映射的閃存轉換層,每個邏輯頁可以靈活的映射到閃存中的任何物理頁,不僅能夠提高閃存物理塊的利用率,而且減小了垃圾回收的開銷,因此得到廣泛的應用。然而采用頁級映射會使得地址映射表過于龐大,出于性能成本效益以及能耗的考慮,現(xiàn)代的頁級閃存轉換層算法通常利用小容量的動態(tài)隨機存取存儲器(Dynamic Random Access Memory,DRAM)或靜態(tài)隨機存取存儲器(Static Random Access Memory,SRAM)作為映射緩存,用來存放最近訪問的映射條目從而加速地址轉換過程。而整體的地址映射表則被持久化地存放在閃存中的物理頁之中,這些頁被稱為閃存映射頁。然而,緩存替換以及垃圾回收等操作會帶來大量的閃存映射頁讀取和更新操作,這些訪問不僅影響了固態(tài)盤的性能,而且會造成額外的擦除操作進而降低固態(tài)盤的壽命。
技術實現(xiàn)要素:
針對現(xiàn)有技術的以上缺陷或改進需求,本發(fā)明提供了一種優(yōu)化頁級閃存轉換層的方法,其目的在于利用SLC閃存支持部分寫的特性,采用原地日志寫的機制減少閃存映射頁訪問的開銷,從而提高固態(tài)盤的性能和壽命。
為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種優(yōu)化頁級閃存轉換層的方法,該方法包括以下步驟:
(1)當一個I/O請求到達時,在映射表緩存中查找該請求對應的閃存數(shù)據(jù)頁的物理地址,如果沒有在緩存中找到則進入步驟(2),否則跳轉到步驟(13);
(2)判斷緩存空間是否已滿,若是則進入步驟(3),否則跳轉到步驟(9);
(3)根據(jù)緩存置換算法選擇將要被逐出緩存的目標緩存單元,并判斷該緩存單元是否含有臟映射條目,若有則進入步驟(4),否則進入步驟(8);
(4)從全局映射目錄中查找臟映射條目所在的映射頁地址及映射頁內日志區(qū)的信息;
(5)判斷是否日志區(qū)空間不足或日志區(qū)寫入次數(shù)超過寫入閾值,若是則進入步驟(6),否則跳轉到步驟(7);所述日志區(qū)空間不小于閃存映射頁的12.5%,不大于閃存映射頁的25%,優(yōu)選值為閃存映射頁的25%;所述寫入閾值根據(jù)閃存顆粒的供應廠商設定;
(6)先將日志中的映射條目的映射關系更新到映射區(qū)中,之后將臟映射條目的映射關系更新到映射區(qū)中,最后所有映射條目寫入到新分配的閃存映射頁,然后將該頁的日志寫入次數(shù)清零,并更新緩存中全局轉換目錄中的映射頁地址;之后執(zhí)行步驟(8);
(7)將映射頁在緩存中的所有臟映射條目構建一個日志單元寫入映射頁的日志區(qū),然后將日志寫入次數(shù)加1;
(8)釋放緩存單元從而回收緩存空間;
(9)從全局轉換目錄中查找該請求映射條目所在的閃存映射頁物理地址,并將該頁讀入臨時緩存;
(10)判斷該閃存映射頁是否含有該映射條目的更新日志,若有則進入步驟(11),否則跳轉到步驟(12);
(11)將日志區(qū)中的最新版本映射條目加載到映射表緩存;執(zhí)行步驟(13);
(12)將對應的映射條目加載到映射表緩存;
(13)如果上層請求為讀請求則進入步驟(14),否則跳轉到步驟(15);
(14)根據(jù)緩存中的映射信息讀取閃存數(shù)據(jù)頁返回給上層,請求結束;
(15)分配新的閃存數(shù)據(jù)頁進行寫入操作,并更新映射表緩存中的映射條目,請求結束。
進一步地,所述臟映射條目具體指在緩存內被修改過映射關系的映射條目,但是這個修改的映射關系并沒有被更新到閃存映射頁。
進一步地,所述閃存映射頁被劃分出一部分區(qū)域作為日志區(qū),用于寫入臟映射條目,剩下的區(qū)域定為映射區(qū),用于保存映射條目。
總體而言,通過本發(fā)明所構思的以上技術方案與現(xiàn)有技術相比,具有以下技術特征及有益效果:
(1)本發(fā)明將緩存臟映射條目批量寫回閃存映射頁,從而減少了閃存映射頁的寫入次數(shù);
(2)本發(fā)明利用SLC閃存支持部分寫入的特性,使用原地日志寫技術代替?zhèn)鹘y(tǒng)FTL算法中的非原地寫機制,從而減少了閃存映射頁垃圾回收的開銷;
(3)綜合以上原因,本發(fā)明能夠提升固態(tài)盤的性能和壽命。
附圖說明
圖1是本發(fā)明方法的流程圖;
圖2是本發(fā)明方法中閃存映射頁結構示意圖。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術特征只要彼此之間未構成沖突就可以相互組合。
如圖1所示,本發(fā)明方法的流程包括以下步驟:
(1)當一個I/O請求到達時,在映射表緩存中查找該請求對應的閃存數(shù)據(jù)頁的物理地址,如果沒有在緩存中找到則進入步驟(2),否則跳轉到步驟(13);
(2)判斷緩存空間是否已滿,若是則進入步驟(3),否則跳轉到步驟(9);
(3)根據(jù)緩存置換算法選擇將要被逐出緩存的目標緩存單元,并判斷該緩存單元是否含有臟映射條目,若有則進入步驟(4),否則進入步驟(8);
(4)從全局映射目錄中查找臟映射條目所在的映射頁地址及映射頁內日志區(qū)的信息;
(5)判斷是否日志區(qū)空間不足或日志區(qū)寫入次數(shù)超過寫入閾值,若是則進入步驟(6),否則跳轉到步驟(7);所述日志區(qū)空間不小于閃存映射頁的12.5%,不大于閃存映射頁的25%,優(yōu)選值為閃存映射頁的25%;所述寫入閾值根據(jù)閃存顆粒的供應廠商設定;
(6)先將日志中的映射條目的映射關系更新到映射區(qū)中,之后將臟映射條目的映射關系更新到映射區(qū)中,最后所有映射區(qū)中映射條目寫入到新分配的閃存映射頁,然后將該頁的日志寫入次數(shù)清零,并更新緩存中全局轉換目錄中的映射頁地址;之后執(zhí)行步驟(8);
(7)將映射頁在緩存中的所有臟映射條目構建一個日志單元寫入映射頁的日志區(qū),然后將日志寫入次數(shù)加1;
(8)釋放緩存單元從而回收緩存空間;
(9)從全局轉換目錄中查找該請求映射條目所在的閃存映射頁物理地址,并將該頁讀入臨時緩存;
(10)判斷該閃存映射頁是否含有該映射條目的更新日志,若有則進入步驟(11),否則跳轉到步驟(12);
(11)將日志區(qū)中的最新版本映射條目加載到映射表緩存;執(zhí)行步驟(13);
(12)將對應的映射條目加載到映射表緩存;
(13)如果上層請求為讀請求則進入步驟(14),否則跳轉到步驟(15);
(14)根據(jù)緩存中的映射信息讀取閃存數(shù)據(jù)頁返回給上層,請求結束;
(15)分配新的閃存數(shù)據(jù)頁進行寫入操作,并更新映射表緩存中的映射條目,請求結束。
如圖2所示,本發(fā)明中所述閃存映射頁被劃分出一部分區(qū)域作為日志區(qū),用于寫入臟映射條目,剩下的區(qū)域定為映射區(qū),用于保存映射條目。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。