本發(fā)明涉及固態(tài)盤的地址映射方法,具體涉及一種基于壓縮算法的固態(tài)盤地址映射方法。
背景技術:
頁映射算法維護一個頁映射表,頁映射表中的每一條映射關系由邏輯頁號和物理頁號組成。頁映射是一種極為靈活的地址映射策略,采用頁映射機制的固態(tài)盤內邏輯頁和物理頁之間是全相聯(lián)的映射關系,即寫請求的數(shù)據(jù)可以寫入flash中任意頁,即使是頻繁的隨機寫請求也不會引起過多的垃圾回收。頁映射策略可以高效的處理隨機寫請求,并且只有很低的垃圾回收開銷。
頁映射表中每條映射關系占用的存儲空間反應了該映射關系的尋址能力。對于基于2kb頁slcnandflash的固態(tài)盤來說,當為每條映射關系分配4個字節(jié)時,其尋址能力為8tb,而分配3個字節(jié)時,其尋址能力只有32gb。面向企業(yè)級應用和高性能計算的固態(tài)盤的容量正向tb級發(fā)展,因此,為了適應高性能固態(tài)盤容量的需求,在頁映射中一條映射關系一般至少分配4個字節(jié)。
基于頁映射的ftl雖然具有高效、靈活、垃圾回收開銷低的優(yōu)點,但是隨著固態(tài)盤容量的不斷增長,頁映射表的容量也隨之線性增加。頁映射表作為每次讀寫操作必須的元數(shù)據(jù),在固態(tài)盤運行時需要將其加載到緩存中。對于基于2kb頁512gb容量的固態(tài)盤來說,其頁映射表所需存儲空間大小為1gb,而當前所有固態(tài)盤設計中,為保證地址轉換過程高效,地址映射表都需要存儲在緩存中。頁映射表對緩存空間的需求導致頁映射的成本極高。頁映射表對緩存空間的依賴直接限制了基于頁映射機制的ftl(flashtranslationlayer,閃存轉換層)在實際固態(tài)盤中的應用。
技術實現(xiàn)要素:
為解決上述問題,本發(fā)明提供一種基于壓縮算法的固態(tài)盤地址映射方法。
本發(fā)明的技術方案是:一種固態(tài)盤地址映射方法,包括以下步驟:
s1:將原始地址映射表分成若干個映射塊;
s2:對每個映射塊執(zhí)行壓縮得到壓縮塊;
s3:將壓縮塊和相關塊信息合并,并保存到flash中;
s4:固態(tài)盤啟動時,將flash中的壓縮塊和相關塊信息加載到內存中,并在內存中根據(jù)壓縮塊構造出壓縮塊鏈表;內存中包含激活鏈表;
s5:進行地址映射時,根據(jù)邏輯地址檢測相應地址映射表是否在激活鏈表中,若相應地址映射表在激活鏈表中,則在激活鏈表中查找到物理地址;若相應地址映射表不在激活鏈表中,則根據(jù)邏輯地址在壓縮塊鏈表中找到需要被解壓的壓縮塊,并將該壓縮塊解壓得到映射塊,從該映射塊的地址映射表中查詢得到物理地址,并將該映射塊掛入激活鏈表。
進一步地,固態(tài)盤的內存中還包含回收鏈表;
地址映射方法還包括以下步驟:
s6:當激活鏈表中的映射塊使用頻率低于預設頻率閾值時,將該映射塊重新壓縮得到壓縮塊,并將重新壓縮后的壓縮塊移動到回收鏈表;
s7:定期將回收鏈表中的壓縮塊刷新到壓縮塊鏈表。
進一步地,步驟s6中,通過lru算法對映射塊重新壓縮。
進一步地,步驟s1中,每個映射塊大小相等。
進一步地,步驟s2中,通過lzw算法對每個映射塊執(zhí)行壓縮。
本發(fā)明提供的固態(tài)盤地址映射方法,對頁映射表采用先分塊再壓縮的處理方式,采用lzw算法對分塊后的映射表進行壓縮,這樣可以使映射表占用的內存空間大大減小,使地址映射表大小至少壓縮50%,地址映射時再根據(jù)算法對相應塊進行解壓縮,再進行地址映射操作。本發(fā)明擁有頁映射靈活、高效、垃圾回收開銷低的優(yōu)點,使映射表占用的內存空間大幅減小,節(jié)省大量內存空間,且降低外部保存映射表flash空間的大小。
附圖說明
圖1是本發(fā)明具體實施例方法流程圖。
具體實施方式
下面結合附圖并通過具體實施例對本發(fā)明進行詳細闡述,以下實施例是對本發(fā)明的解釋,而本發(fā)明并不局限于以下實施方式。
本發(fā)明提供的固態(tài)盤地址映射方法,首先將原始地址映射表分成大小相等的n塊,假如原始地址映射表大小為1gb,每塊大小為1m,則有1024塊,對每一塊執(zhí)行適當?shù)膲嚎s算法,比如lzw算法,然后將壓縮后的映射塊和相關塊信息保存到flash中;固態(tài)盤啟動時,將壓縮后的映射塊和相關塊信息加載到內存中,并構造出壓縮塊鏈表。
內存中共存在三個鏈表:壓縮塊鏈表,激活鏈表和回收鏈表。壓縮塊鏈表:根據(jù)flash中的壓縮數(shù)據(jù)塊信息在系統(tǒng)啟動的時候建立;激活鏈表:保存使用過的解壓的映射表塊;回收鏈表:保存通過lru算法從激活鏈表摘除的需要重新寫回壓縮塊鏈表的映射表塊?;厥真湵碇械膲嚎s塊會定時刷新到壓縮塊鏈表中,保持同步。
當進行地址映射時,先檢查邏輯地址所對應的地址映射表是否在在激活鏈表中,若在激活鏈表中,則從激活鏈表中的映射塊找到物理地址;若不在激活鏈表中,則根據(jù)邏輯地址計算得到壓縮鏈表中需要被解壓的壓縮塊,然后對該壓縮塊執(zhí)行解壓縮,再從解壓后的映射表中找到物理地址,并把此壓縮塊掛入激活鏈表;當解壓塊,即激活鏈表中的映射塊不再需要時,通過lru算法將其重新執(zhí)行壓縮,保存到壓縮塊鏈表中。
如圖1所示,本方法具體包括以下步驟:
s1:將原始地址映射表分成若干個映射塊;
s2:對每個映射塊執(zhí)行壓縮得到壓縮塊;
s3:將壓縮塊和相關塊信息合并,并保存到flash中;
s4:固態(tài)盤啟動時,將flash中的壓縮塊和相關塊信息加載到內存中,并在內存中根據(jù)壓縮塊構造出壓縮塊鏈表;內存中包含激活鏈表;
s5:進行地址映射時,根據(jù)邏輯地址檢測相應地址映射表是否在激活鏈表中,若相應地址映射表在激活鏈表中,則在激活鏈表中查找到物理地址;若相應地址映射表不在激活鏈表中,則根據(jù)邏輯地址在壓縮塊鏈表中找到需要被解壓的壓縮塊,并將該壓縮塊解壓得到映射塊,從該映射塊的地址映射表中查詢得到物理地址,并將該映射塊掛入激活鏈表;
s6:當激活鏈表中的映射塊使用頻率低于預設頻率閾值時,將該映射塊重新壓縮得到壓縮塊,并將重新壓縮后的壓縮塊移動到回收鏈表;
s7:定期將回收鏈表中的壓縮塊刷新到壓縮塊鏈表。
步驟s2中,可通過lzw算法對每個映射塊執(zhí)行壓縮;步驟s6中,可通過lru算法對映射塊重新壓縮。
以上公開的僅為本發(fā)明的優(yōu)選實施方式,但本發(fā)明并非局限于此,任何本領域的技術人員能思之的沒有創(chuàng)造性的變化,以及在不脫離本發(fā)明原理前提下所作的若干改進和潤飾,都應落在本發(fā)明的保護范圍內。