NAND閃存存儲(chǔ)器的自適應(yīng)閃存映射層設(shè)計(jì)
閃存存儲(chǔ)器主要分為NAND和XOR兩種類型,其中NAND型是專為數(shù)據(jù)存儲(chǔ)設(shè)計(jì)。本文的閃存映射方法主要是針對(duì)NAND類型的閃存芯片。一個(gè)NAND類型的閃存芯片的存儲(chǔ)空間是由塊(Block)構(gòu)成,每個(gè)塊又劃分為固定大小的頁,塊是擦寫操作的最小單元,頁是讀寫操作的最小單元。由于閃存存儲(chǔ)器的硬件特性,閃存的更新操作有自己的特點(diǎn),在對(duì)數(shù)據(jù)進(jìn)行更新前需要先進(jìn)行擦寫操作,然后才能將新數(shù)據(jù)寫入,并且擦寫操作是以塊為單位,讀寫操作是以頁為單位。由于擦寫操作涉及的最小單元遠(yuǎn)大于讀寫操作的最小單元,需要對(duì)一個(gè)擦寫塊內(nèi)不需要更新的數(shù)據(jù)提供有效的保護(hù)。在閃存存儲(chǔ)管理中普遍采用的數(shù)據(jù)更新方法是非本地更新的方法(Out-place Update),通過構(gòu)建閃存映射層,在進(jìn)行更新操作時(shí),將更新的數(shù)據(jù)寫到其他空閑的存儲(chǔ)位置,利用內(nèi)存中的地址映射表記錄數(shù)據(jù)存儲(chǔ)位置的變化。非本地更新的方法避免了更新時(shí)整塊數(shù)據(jù)的讀出寫入,從而減少數(shù)據(jù)復(fù)制次數(shù)和塊擦寫次數(shù),提高系統(tǒng)的整體性能。閃存映射層是閃存進(jìn)行非本地更新存儲(chǔ)管理的關(guān)鍵,主要由地址映射和垃圾回收機(jī)制兩部分構(gòu)成。
根據(jù)地址映射粒度的不同,可以將地址映射方法分為三種:頁映射(Page Mapping)、塊映射(BlockingMapping)和混合映射(Hybrid Mapping)。頁映射是以頁為單位進(jìn)行地址映射,在內(nèi)存中保存基手頁的映射表,每一邏輯頁都有一項(xiàng)與之對(duì)應(yīng)的物理頁,頁映射方法具有靈活性高的優(yōu)點(diǎn),但由于需要為每個(gè)邏輯頁面建立地址映射表項(xiàng),需要占用大量?jī)?nèi)存空間。塊映射算法是以塊為單位進(jìn)行地址映射,邏輯塊內(nèi)地址偏移與物理塊內(nèi)偏移保持一致。該方法僅需要在內(nèi)存中保留塊映射表,建立從邏輯塊到物理塊的映射關(guān)系,塊映射算法優(yōu)點(diǎn)是內(nèi)存占用量少,不受閃存容量增大的影響,缺點(diǎn)是在處理小數(shù)據(jù)更新上性能較差,一小塊數(shù)據(jù)的更新會(huì)引起對(duì)整個(gè)塊內(nèi)容的復(fù)制。混合映射方法結(jié)合了塊映射和頁映射的優(yōu)點(diǎn),首先以塊映射方法建立邏輯塊和物理塊的映射關(guān)系,同時(shí)對(duì)塊內(nèi)數(shù)據(jù)采用頁映射方法組織?;旌嫌成渌惴▋?nèi)存空間占用量少,同時(shí)對(duì)小數(shù)據(jù)更新比塊映射算法更加靈活、代價(jià)少。
垃圾回收是閃存存儲(chǔ)系統(tǒng)特有的空間管理機(jī)制。在閃存存儲(chǔ)管理中,由于采用非本地更新的方法,當(dāng)閃存的存儲(chǔ)空間消耗完時(shí),就需要回收無效數(shù)據(jù)占用的空間。為了回收無效數(shù)據(jù)占用的空間,必須先將擦寫單位內(nèi)的有效數(shù)據(jù)轉(zhuǎn)移到其他空閑區(qū)域,然后擦寫整個(gè)單元,回收過程主要涉及有效數(shù)據(jù)復(fù)制和塊擦寫兩個(gè)耗時(shí)耗能的操作。垃圾回收工作需要從閃存中選擇回收對(duì)象,轉(zhuǎn)移有效數(shù)據(jù),最后完成對(duì)象擦除。進(jìn)行垃圾回收時(shí)選擇不同的區(qū)域進(jìn)行擦除,代價(jià)是不同的,垃圾回收器設(shè)計(jì)的目就是要減少有效數(shù)據(jù)復(fù)制和塊擦寫次數(shù),以提高系統(tǒng)性能。不同粒度的地址映射方法在不同寫模式下,垃圾回收的性能有較大差異。在此給出了一種能夠根據(jù)寫模式進(jìn)行自適應(yīng)判斷的閃存映射方法。通過對(duì)順序?qū)懞碗S機(jī)寫進(jìn)行判斷,將順序?qū)憦碾S機(jī)寫中分離,對(duì)順序?qū)懖捎脡K映射組織日記塊數(shù)據(jù),對(duì)隨機(jī)寫采用混合映射方法,并為熱數(shù)據(jù)分配多個(gè)日記塊,延遲對(duì)熱數(shù)據(jù)的垃圾回收,以提高垃圾回收的性能。通過實(shí)驗(yàn)表明這里構(gòu)建的閃存映射方法能夠在不需要占用大量的內(nèi)存空間前提下,減少垃圾回收過程的有效數(shù)據(jù)復(fù)制和塊擦寫,從而優(yōu)化閃存系統(tǒng)的性能。
1 閃存存儲(chǔ)系統(tǒng)的體系結(jié)構(gòu)
本文構(gòu)建的閃存存儲(chǔ)管理的體系結(jié)構(gòu)見圖1,將系統(tǒng)分為文件系統(tǒng)層、閃存管理層和閃存驅(qū)動(dòng)層。閃存映射層負(fù)責(zé)對(duì)閃存設(shè)備進(jìn)行存儲(chǔ)管理,通過地址映射和垃圾回收技術(shù)將閃存轉(zhuǎn)換為塊設(shè)備。地址映射主要完成閃存塊的分配和地址映射信息管理,負(fù)責(zé)處理文件系統(tǒng)層的讀寫請(qǐng)求,將文件系統(tǒng)提供的邏輯地址轉(zhuǎn)換為閃存的物理地址;垃圾回收則負(fù)責(zé)回收無效數(shù)據(jù)占用的空間,主要涉及有效數(shù)據(jù)復(fù)制和塊擦寫兩個(gè)耗時(shí)耗能的過程。
1.1地址映射結(jié)構(gòu)
閃存映射層的作用是將文件系統(tǒng)的邏輯地址轉(zhuǎn)換為閃存的物理地址,因此需要在內(nèi)存建立邏輯地址和物理地址的映射關(guān)系,同時(shí)管理物理地址的狀態(tài)變換。本文通過圖2所示的地址映射結(jié)構(gòu)進(jìn)行地址映射管理,將文件系統(tǒng)提供的邏輯地址分為四部分:邏輯組號(hào)、組內(nèi)塊號(hào)、塊內(nèi)頁號(hào)和頁內(nèi)偏移地址。其中邏輯頁和邏輯塊大小分別與閃存存儲(chǔ)器的讀寫頁和擦寫塊大小相同。每個(gè)邏輯組是由N個(gè)連續(xù)的邏輯塊構(gòu)成,N可以根據(jù)應(yīng)用類型進(jìn)行設(shè)置,在圖2中N的數(shù)目為2。將閃存存儲(chǔ)器中的物理塊分為數(shù)據(jù)塊和日記塊,數(shù)據(jù)塊用于存放原數(shù)據(jù),日記塊用于存放更新數(shù)據(jù),同時(shí)又將日記塊劃分為順序日記塊和隨機(jī)日記塊。數(shù)據(jù)塊和順序日記塊內(nèi)的內(nèi)容是以塊映射方法組織,而隨機(jī)日記塊采用混合映射粒度組織數(shù)據(jù)。邏輯塊和數(shù)據(jù)塊通過內(nèi)存中的塊映射表建立對(duì)應(yīng)關(guān)系,每一個(gè)邏輯塊都有惟一的數(shù)據(jù)塊與之對(duì)應(yīng)。與邏輯組對(duì)應(yīng)的N個(gè)數(shù)據(jù)塊構(gòu)成一個(gè)數(shù)據(jù)組。每個(gè)順序日記塊對(duì)應(yīng)惟一的數(shù)據(jù)塊,在對(duì)數(shù)據(jù)塊進(jìn)行順序更新操作時(shí),為其分配順序日記塊存儲(chǔ)更新數(shù)據(jù)。每個(gè)數(shù)據(jù)組可以根據(jù)需求動(dòng)態(tài)分配多個(gè)隨機(jī)日記塊,日記塊的數(shù)目是由該組數(shù)據(jù)訪問的冷熱屬性來決定的,對(duì)于有頻繁更新數(shù)據(jù)的組會(huì)動(dòng)態(tài)分配較多的日記塊。隨機(jī)日記塊是組內(nèi)共享的,對(duì)組內(nèi)任一數(shù)據(jù)塊的隨機(jī)更新數(shù)據(jù)都可以存儲(chǔ)到隨機(jī)日記塊中,從而提高空間利用率。為了提高查找效率,對(duì)有隨機(jī)日記塊的數(shù)據(jù)組,在內(nèi)存中構(gòu)建組內(nèi)頁映射表,記錄邏輯地址對(duì)應(yīng)的更新數(shù)據(jù)在隨機(jī)日記塊內(nèi)的存儲(chǔ)位置,通過組內(nèi)頁映射表,在進(jìn)行讀取時(shí)不需要遍歷日記塊來獲取數(shù)據(jù)的存儲(chǔ)位置,從而提高系統(tǒng)性能。
1.2寫請(qǐng)求處理過程
地址映射的主要作用是通過在內(nèi)存中構(gòu)建地址映射表,將文件系統(tǒng)的邏輯地址轉(zhuǎn)換為物理地址,在系統(tǒng)進(jìn)行讀請(qǐng)求時(shí),利用地址映射表查找到存儲(chǔ)在閃存設(shè)備中的數(shù)據(jù),在系統(tǒng)進(jìn)行寫請(qǐng)求時(shí)在閃存設(shè)備上查找空閑位置存儲(chǔ)數(shù)據(jù),更新地址映射表,記錄數(shù)據(jù)的新存儲(chǔ)位置,同時(shí)將舊數(shù)據(jù)標(biāo)記為無效。
在本文中為每個(gè)數(shù)據(jù)塊設(shè)定狀態(tài)位來標(biāo)記該塊當(dāng)前的訪問模式,將每個(gè)數(shù)據(jù)塊訪問模式分為順序?qū)懞碗S機(jī)寫。在進(jìn)行寫請(qǐng)求時(shí),首先計(jì)算出數(shù)據(jù)所屬的邏輯塊和塊內(nèi)偏移地址,判斷數(shù)據(jù)所在塊的訪問模式,如果所在塊是順序?qū)?,利用塊映射表,將數(shù)據(jù)寫到順序日記塊中。如果所在塊為隨機(jī)寫,將更新數(shù)據(jù)寫到數(shù)據(jù)組的隨機(jī)日記塊中。訪問模式主要是根據(jù)過去的數(shù)據(jù)存儲(chǔ)訪問行為進(jìn)行判斷的,如果對(duì)某一邏輯地址在短時(shí)間內(nèi)進(jìn)行了多次更新,認(rèn)為系統(tǒng)對(duì)該地址進(jìn)行的是隨機(jī)寫,對(duì)其所屬塊將采用混合映射方法進(jìn)行存儲(chǔ)管理,以優(yōu)化小數(shù)據(jù)頻繁更新導(dǎo)致的性能問題。訪問模式的判斷是通過內(nèi)存中的雙鏈表來實(shí)現(xiàn)的,如圖3所示。在內(nèi)存中構(gòu)建兩定長(zhǎng)的地址鏈表,一個(gè)鏈表為順序鏈表,另一個(gè)鏈表為隨機(jī)鏈表。順序鏈表中保存最近進(jìn)行順序?qū)懙臄?shù)據(jù)塊,而隨機(jī)鏈表中保留最近進(jìn)行隨機(jī)寫的數(shù)據(jù)組。兩鏈表都根據(jù)最后一次訪問時(shí)間進(jìn)行排序,將鏈表分為最近最少訪問端(LRU)和最近最多訪問端(MRU),在每次進(jìn)行更新操作時(shí),將更新數(shù)據(jù)所在的塊或組提升到鏈表的最近最多訪問端。當(dāng)對(duì)數(shù)據(jù)塊首次進(jìn)行更新操作時(shí),判斷該數(shù)據(jù)塊進(jìn)行的是順序?qū)?,?biāo)記該塊的訪問狀態(tài)為順序?qū)懀⒃摂?shù)據(jù)塊添加到順序鏈表中。如果數(shù)據(jù)塊內(nèi)已更新過的數(shù)據(jù)在短時(shí)間內(nèi)再一次被更新,即順序日記塊內(nèi)對(duì)應(yīng)的存儲(chǔ)空間已填充數(shù)據(jù),判斷該數(shù)據(jù)塊的訪問模式為隨機(jī)寫,將其從順序鏈表中刪除,標(biāo)記該塊的訪問狀態(tài)為隨機(jī)寫,同時(shí)添加該塊所在的數(shù)據(jù)組到隨機(jī)鏈表中,以后對(duì)該塊的更新數(shù)據(jù)將存儲(chǔ)到隨機(jī)日記塊中,直到該數(shù)據(jù)組從隨機(jī)鏈表中刪除。
評(píng)論