NAND閃存的自適應(yīng)閃存映射層設(shè)計(jì)
順序鏈表的項(xiàng)數(shù)設(shè)有上限值,該值為系統(tǒng)中分配的順序日記塊數(shù)目。當(dāng)表項(xiàng)超過(guò)上限值時(shí),將從順序鏈表的最近最少訪問(wèn)端刪除數(shù)據(jù)塊,合并日記塊和數(shù)據(jù)塊中的有效數(shù)據(jù)。當(dāng)順序日記塊完全更新時(shí),即數(shù)據(jù)塊內(nèi)的數(shù)據(jù)完全無(wú)效,采用切換操作,用順序日記塊替換數(shù)據(jù)塊,并將該塊從順序鏈表中刪除。在本文中始終保留了一定數(shù)據(jù)的順序日記塊,以優(yōu)化系統(tǒng)的順序?qū)憽?br />
位于隨機(jī)鏈表中的數(shù)據(jù)組,當(dāng)需要新的存儲(chǔ)空間時(shí),將為其分配新的隨機(jī)日記塊。隨機(jī)鏈表的項(xiàng)數(shù)也設(shè)有上限值,當(dāng)超過(guò)上限值時(shí),將從最近最少訪問(wèn)端刪除數(shù)據(jù)組,將隨機(jī)日記塊和數(shù)據(jù)塊中的數(shù)據(jù)合并,生成新的數(shù)據(jù)塊,同時(shí)重設(shè)數(shù)據(jù)塊的狀態(tài)位,當(dāng)再一次進(jìn)行數(shù)據(jù)更新時(shí),將重新進(jìn)行訪問(wèn)模式判斷。采用該方法能夠?qū)⒗鋽?shù)據(jù)及時(shí)從鏈表刪除,回收日記塊占用的存儲(chǔ)空間和頁(yè)映射表占用的內(nèi)存空間。
1.3垃圾回收機(jī)制
由于采用日記結(jié)構(gòu)進(jìn)行存儲(chǔ)管理,在長(zhǎng)時(shí)間運(yùn)行時(shí)需要進(jìn)行垃圾回收。進(jìn)行垃圾回收時(shí)需要考慮的問(wèn)題是回收時(shí)機(jī)和回收對(duì)象選擇,以及回收方法。垃圾回收機(jī)制是建立在地址映射方法基礎(chǔ)上,主要由兩部分構(gòu)成:擦寫進(jìn)程和回收進(jìn)程。擦寫進(jìn)程是專門負(fù)責(zé)擦寫操作,它的優(yōu)先級(jí)比較低。在系統(tǒng)空閑的時(shí)候,擦寫進(jìn)程才會(huì)輪到執(zhí)行,每次該進(jìn)程啟動(dòng),只負(fù)責(zé)擦寫一個(gè)塊,以免影響到正常的I/O性能?;厥者M(jìn)程是當(dāng)系統(tǒng)中的日記塊消耗完或閃存中的空閑塊低于某閾值,將從日記塊和數(shù)據(jù)塊中選擇回收對(duì)象,將有效數(shù)據(jù)復(fù)制到其他空閑區(qū)域中,將其交給擦寫進(jìn)程處理,回收存儲(chǔ)空間。
本文回收進(jìn)程主要包括兩部分,對(duì)順序日記塊的回收和對(duì)隨機(jī)日記塊的回收。當(dāng)系統(tǒng)中的順序日記塊消耗完全時(shí),將從順序鏈表的最近最少訪問(wèn)端選擇日記塊,利用數(shù)據(jù)塊和順序日記塊內(nèi)數(shù)據(jù)組織有序的特點(diǎn),采用如圖4所示的方法,將數(shù)據(jù)塊中的有效數(shù)據(jù)復(fù)制到日記塊中,用日記塊來(lái)替換數(shù)據(jù)塊,擦除數(shù)據(jù)塊,回收數(shù)據(jù)塊占用的空間。對(duì)于隨機(jī)日記塊,將從隨機(jī)鏈表中選擇具有最多無(wú)效數(shù)據(jù)的數(shù)據(jù)組,回收方法是從數(shù)據(jù)組中選擇兩個(gè)或多個(gè)具有較多無(wú)效數(shù)據(jù)的日記塊,將日記塊中的有效數(shù)據(jù)復(fù)制到數(shù)據(jù)組的其他隨機(jī)日記塊中,如圖5所示,擦除選中日記塊,回收日記塊空間。
通過(guò)根據(jù)順序日記塊和隨機(jī)日記塊數(shù)據(jù)組織特點(diǎn)分別采用不同的回收方法,從而優(yōu)化了垃圾回收的性能。對(duì)于順序日記塊,將數(shù)據(jù)塊與日記塊內(nèi)有效數(shù)據(jù)合并,用日記塊替換數(shù)據(jù)塊,從而減少回收過(guò)程中的有效數(shù)據(jù)復(fù)制。而對(duì)于隨機(jī)日記通過(guò)選擇無(wú)效數(shù)據(jù)最多的塊進(jìn)行回收,同時(shí)利用本文的多日記塊機(jī)制,將有效數(shù)據(jù)存儲(chǔ)到其他日記塊。從而不需要合并數(shù)據(jù)塊和日記塊的數(shù)據(jù),減少了小數(shù)據(jù)更新情況下的有效數(shù)據(jù)的復(fù)制和塊擦寫次數(shù),優(yōu)化了垃圾回收的性能。
2 試驗(yàn)結(jié)果與分析
在Linux系統(tǒng)中實(shí)現(xiàn)了本文的存儲(chǔ)管理方法,同時(shí)利用Linux自帶的閃存模擬器,模擬閃存存儲(chǔ)器的功能,在該模擬器上對(duì)本文的閃存映射方法展開研究,并與NFTL和混合映射方法進(jìn)行比較,NFTL是Linux系統(tǒng)實(shí)現(xiàn)的塊映射方法。在實(shí)驗(yàn)中采用額外寫操作次數(shù)和擦除操作次數(shù)來(lái)衡量閃存系統(tǒng)性能的標(biāo)準(zhǔn),其中額外寫操作次數(shù)由實(shí)驗(yàn)中閃存的實(shí)際寫次數(shù)減去用戶請(qǐng)求的寫次數(shù)來(lái)獲取,主要是由垃圾回收時(shí)有效數(shù)據(jù)的復(fù)制產(chǎn)生的。額外擦寫操作次數(shù)是指閃存系統(tǒng)的塊擦寫次數(shù),是由于日記塊的消耗引起的。采用這兩個(gè)指標(biāo)能夠直接反應(yīng)垃圾回收的性能。首先研究了在進(jìn)行文件和圖像等存取操作下系統(tǒng)的性能。由于僅進(jìn)行圖像存取操作時(shí),系統(tǒng)的大部分操作是順序?qū)?。圖6所示是三種方法的額外寫操作次數(shù)和擦寫操作次數(shù)對(duì)比情況。從圖6中可以看出本文方法與NFTL方法接近,需要較少的有效數(shù)據(jù)復(fù)制和塊擦寫,而混合映射方法表現(xiàn)較差,尤其是有效數(shù)據(jù)的復(fù)制次數(shù),明顯多于其他兩種方法。主要是由于本文方法與NFTL能夠利用塊映射方法來(lái)處理順序?qū)懩J?,在進(jìn)行垃圾回收時(shí),能夠通過(guò)將數(shù)據(jù)塊的有效數(shù)據(jù)復(fù)制到日記塊中,用日記塊替換數(shù)據(jù)塊,而不需要分配新的數(shù)據(jù)塊,減少有效數(shù)據(jù)復(fù)制和塊擦寫。而混合映射方法在進(jìn)行垃圾回收時(shí),需要分配新的數(shù)據(jù)塊來(lái)合并舊數(shù)據(jù)塊和日記塊中的數(shù)據(jù),導(dǎo)致系統(tǒng)進(jìn)行大量的復(fù)制操作和擦寫操作,降低垃圾回收的性能。
圖7的實(shí)驗(yàn)結(jié)果是在進(jìn)行圖像存取操作的同時(shí)加入對(duì)局部數(shù)據(jù)進(jìn)行隨機(jī)訪問(wèn)來(lái)獲取的。從結(jié)果可以看出,NFTL方法與混合映射方法的性能接近,都需要較多的額外寫次數(shù)和塊擦寫次數(shù)。本文的方法由于采用寫模式判別機(jī)制,能夠?qū)㈦S機(jī)寫從順序?qū)懼蟹蛛x出來(lái),對(duì)順序?qū)懖捎脡K映射方法,對(duì)隨機(jī)寫采用混合映射方法進(jìn)行存儲(chǔ)管理,從而垃圾回收次數(shù)較少,優(yōu)化系統(tǒng)性能。
3 結(jié) 語(yǔ)
在本文中給出一種閃存映射方法,通過(guò)對(duì)數(shù)據(jù)寫模式進(jìn)行區(qū)分,為不同的寫模式提供不同粒度的地址映射方法進(jìn)行存儲(chǔ)管理,從而減少了垃圾回收過(guò)程有效數(shù)據(jù)復(fù)制和塊擦寫,提高了閃存存儲(chǔ)系統(tǒng)的性能。在將來(lái),還需要進(jìn)一步研究訪問(wèn)屬性的判別方法,減少判斷錯(cuò)誤的情況,進(jìn)一步提升垃圾回收的性能。本文引用地址:http://www.ex-cimer.com/article/151826.htm
評(píng)論