<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 網(wǎng)絡(luò )與存儲 > 設計應用 > NAND Flash上均勻損耗與掉電恢復在線(xiàn)測試

NAND Flash上均勻損耗與掉電恢復在線(xiàn)測試

作者: 時(shí)間:2008-03-09 來(lái)源: 收藏

  摘要 NAND Flash以其大容量、低價(jià)格等優(yōu)勢迅速成為嵌入式系統存儲的新寵,因此其上的文件系統研究也日益廣泛,本文簡(jiǎn)要介紹了常用的NAND Flash文件系統YAFFS,并針對YAFFS在均勻損耗和掉電恢復方面進(jìn)行在線(xiàn)測試。在給出測試結果的同時(shí),著(zhù)重研究嵌入式軟件測試方案和方法;對測試結果進(jìn)行分析,并提出改進(jìn)方案和適用環(huán)境。

本文引用地址:http://dyxdggzs.com/article/79812.htm

  關(guān)鍵詞

  引 言

  隨著(zhù)嵌入式技術(shù)在各種電子產(chǎn)品中的廣泛應用,嵌入式系統中的數據存儲和管理已經(jīng)成為一個(gè)重要的研究課題。Flash存儲器具有速度快、容量大、成本低等很多優(yōu)點(diǎn),因此在嵌入式系統中被廣泛用作外存儲器件。嵌入式系統中的Flash存儲器需要有自己的文件系統,而不能直接移植通用文件系統,主要有兩個(gè)原因:第一,嵌入式系統的應用條件惡劣,電源電壓不穩定,突發(fā)性斷電以及非法插拔都容易造成災難性的影響,通用文件系統對于可靠性的設計考慮不足;第二,通用文件系統的記錄信息(如FAT表)需要被多次修改,而記錄信息放在Flash存儲器固定的區塊中,將導致該區塊的頻繁操作,從而縮短Flash器的使用壽命。這樣就對軟件技術(shù)提出了更高的要求。

  為了管理復雜的存儲硬件,同時(shí)提供可靠高效的存儲環(huán)境,出現了基于NAND和NOR的文件系統。目前主流的FFS(Flash File System)有如下3種:TrueFFS、JFFSx以及YAFFS。YAFFS(Yet Another Flash File System)是專(zhuān)門(mén)為NAND Flash設計的嵌入式文件系統,適用于大容量的存儲設備。它是日志結構的文件系統,提供了損耗平衡和掉電保護等機制,可以有效地減小上述原因對文件系統一致性和完整性的影響。本文正是基于這樣的前提,介紹了關(guān)于嵌入式YAFFS文件系統測試方案,針對文件系統中損耗平衡和掉電保護兩個(gè)重要的系統性能指標進(jìn)行實(shí)時(shí)在線(xiàn)的測試與分析,不同的應用環(huán)境使用該文件系統應進(jìn)行相應的修改。

  1 YAFFS文件系統概述

  YAFFS文件系統類(lèi)似于JFFS/JFFS2文件系統。不同的是,JFFSl/2文件系統最初是針對NOR Flash的應用場(chǎng)合設汁的,而NOR Flash和NAND Flash本質(zhì)上有較大的區別。盡管JFFSl/2文件系統也能應用于NANDFlash,但由于它在內存占用和啟動(dòng)時(shí)間方面針對NOR的特性做了一些取舍,所以對NAND來(lái)說(shuō)通常并不是最優(yōu)的方案。

  1.1 NOR和NAND的比較

  基本上NOR比較適合存儲程序代碼,其容量一般較小(比如小于32 MB),且價(jià)格較高;而NAND容量可達lGB以上,價(jià)格也相對便宜,適合存儲數據。一般來(lái)說(shuō),128 MB以下容量NAND Flash芯片的一頁(yè)大小為512字節,用來(lái)存放數據,每一頁(yè)還有16字節的備用空間(SpareData),充當OOB(Out Of Band)區域,用來(lái)存儲ECC(Error Correction Codc)校驗/壞塊標志等信息;再由若干頁(yè)組成一個(gè)塊,通常一塊為32頁(yè)(16 KB)。與NOR相比,NAND不是完全可靠的。每塊芯片出廠(chǎng)時(shí)允許有一定比例的壞塊存在,對數據的存取不是使用線(xiàn)性地址映射,而是通過(guò)寄存器的操作串行存取數據。

  1.2 YAFFs數據在NAND上的存儲方式

  YAFFS根據NAND閃存以頁(yè)為單位存取的特點(diǎn),將文件組織成固定大小的數據段。利用NAND閃存提供的每頁(yè)16字節的備用空間來(lái)存放ECC檢驗信息和文件系統的組織信息,不僅能夠實(shí)現錯誤檢測和壞塊處理,而且能夠提高文件系統的加載速度。

  YAFFS將文件組織成固定大小(512字節)的數據段。每個(gè)文件都有一個(gè)頁(yè)面專(zhuān)門(mén)存放文件頭,文件頭保存了文件的模式、所有者id、組id、長(cháng)度、文件名等信息。為了提高文件數據塊的查找速度,文件的數據段組織成樹(shù)形結構。YAFFS在文件進(jìn)行改寫(xiě)時(shí),總是先寫(xiě)入新的數據塊,然后將舊的數據塊從文件中刪除。YAFFS使用存放在頁(yè)面備用空間中的ECC進(jìn)行錯誤檢測,出現錯誤后會(huì )進(jìn)行一定次數的重試;多次重試失敗后,該頁(yè)面就被停止使用。以(512+16)字節為一頁(yè)的NAND Flash芯片為例,YAFFS文件系統數據的存儲布局如圖1所示。

  

  2 YAFFS文件系統測

  2.1 測試總體說(shuō)明

  YAFFS文件系統是開(kāi)源的,測試基于白盒測試。在所關(guān)心的代碼段中,插入測試代碼。為保證測試代碼不對原代碼造成影響,測試后可立即恢復為原代碼,所有測試代碼(包括測試用變量和函數)均嵌入到#define FS_TEST宏定義中。

  2.2 模擬文件的生成

  嵌入式環(huán)境下對文件系統進(jìn)行大量、長(cháng)時(shí)間的測試存在很多問(wèn)題,不易實(shí)現,對測試代碼的插入和數據的監視也比較困難。這里采用PC模擬測試的形式,用文件的讀/寫(xiě)模擬NAND器件,并在PC上對模擬文件監視,以達到測試的目的。代碼定義了各種NAND器件的類(lèi)型,以適應不同的器件。模擬器件時(shí),也用這些信息生成相應的模擬文件。

  指明要模擬的NAND器件的大小(FILE_SIZE_IN_MEG)和結構(BLOCKS_PER_MEG,BLOCK_SIZE)后,按照相應的大小和結構生成文件g_filedisk。

  3 均勻損耗測試

  3.1 測試目的

  NAND Flash器件每個(gè)Block區塊的擦寫(xiě)次數有限。在需要實(shí)時(shí)記錄的應用環(huán)境中,為保證器件壽命,應盡量使每個(gè)區塊的擦寫(xiě)次數相對平均.以最大程度地延長(cháng)NAND Flash器件的使用壽命。此項測試記錄每個(gè)Block區塊的擦寫(xiě)次數,以測試YAFFS文件系統在均勻損耗方面的性能。

  3.2 測試方法

  測試代碼在器件模擬文件的每一頁(yè)的Spare區后,增加了字節,用于記錄該頁(yè)的擦寫(xiě)次數。由于擦寫(xiě)是以Block為單位進(jìn)行的,因此每個(gè)Block各頁(yè)的擦寫(xiě)記錄數是相同的。在以后的測試中,可以只使用第一頁(yè)的該Block空間記錄擦寫(xiě)次數,其他空間作其他測試用。

  測試代碼插入到CheckInit()和yaffs_FEEraseBlockInNAND()(yaffs_fileem.cpp)中,在初始化器件模擬文件時(shí),生成(新模擬文件)或讀取(己有模擬文件)擦寫(xiě)次數;并在程序執行擦寫(xiě)函數時(shí),對擦寫(xiě)次數進(jìn)行累加和保存。

  測試程序甩到的測試變量;記錄擦寫(xiě)次數的數組-g_ersNumArray[FILE_SIZE_IN_MEG*BLOCKS_PER_MEG]、指向擦寫(xiě)的最大值-g_pErsMax和指向擦寫(xiě)的最小值-g_pErsMin。

  測試程序用WireOut0.log和WireOutl.log兩個(gè)文件記錄每個(gè)Block區塊的擦寫(xiě)次數,查看這兩個(gè)文件,可以看到每個(gè)區塊的擦寫(xiě)次數以及最大/最小值。兩個(gè)文件是等同的,因測試時(shí)間比較長(cháng),取兩個(gè)文件以避免系統在寫(xiě)記錄文件時(shí)出錯,而丟失所有的記錄;兩個(gè)文件輪流寫(xiě),保證至少有一個(gè)文件的內容是系統出錯前最近的記錄。

  3.3 測試結果

  YAFFS文件系統按“順序”使用未分配的空間用于新的寫(xiě)入操作,并以同樣“順序”擦除廢棄的區塊。寫(xiě)入和擦除操作,均按順序在未分配的空間或廢棄的空間中進(jìn)行。當系統未用空間小于某一預設值后,系統將對存在廢棄頁(yè)的區塊進(jìn)行回收。這種寫(xiě)入和擦除策略在一定程度上保證了損耗的均勻性。

  這種機制雖然在一定程度上滿(mǎn)足均勻損耗的要求,但還是存在問(wèn)題,并不適用于所有的嵌入式應用環(huán)境。假設在一塊16MB的NAND器件上,有10MB空間用來(lái)存放相對固定、不經(jīng)常修改的數據文件,則經(jīng)常修改的文件只能在剩下的6 MB空間上重復擦寫(xiě),在這6 MB空間上做到“均勻損耗”。對整個(gè)器件來(lái)說(shuō),系統并沒(méi)有合適的搬移策略對固定文件進(jìn)行搬移,整個(gè)器件做不到均勻損耗。在實(shí)時(shí)記錄信息量比較大的應用環(huán)境中,應編寫(xiě)相應的搬移策略函數,對固定文件進(jìn)行定期的搬移,以確保整個(gè)NAND器件的均勻損耗。

  4 掉電恢復性能測試

  4.1 測試目的

  文件系統應能保證在系統突然斷電的情況下,最大限度地恢復(保護)有用數據。如果在修改一個(gè)文件時(shí)掉電,那么掉電后的文件保護方式根據實(shí)際情況可分為3種:

 ?、儆门f文件完全代替新寫(xiě)文件,新寫(xiě)文件(沒(méi)寫(xiě)完)被忽略。這種保護方式應用比較多,比如在更新設置時(shí)掉電,使用掉電前的設置,用戶(hù)是可以接受的。

 ?、谟眯挛募耆媾f文件(新文件寫(xiě)了多少就保留多少)。這種保護方式適合應用于文本的情況,比如短信。新短信雖然不完整,但根據情況用戶(hù)可以得到部分信息,如果發(fā)送方信息完整或屬于可猜測的情況,則可以要求發(fā)送方重發(fā)。

 ?、奂簩?xiě)部分用新文件,未寫(xiě)部分用老文件,所謂“新加舊”的保護方式。這種保護方式可以應用在動(dòng)態(tài)更新的文件上。但是,對于使用偏移量進(jìn)行的文件讀寫(xiě)操作,采用這種保護方式,會(huì )產(chǎn)生亂碼。

  4.2 測試方法

  測試代碼隨機產(chǎn)生掉電消息,模擬一次掉電行為。測試代碼插入到yaffs_FEWriteChunkToNAND()(yaffs_fileem.cpp)中,在寫(xiě)Data區和Spare區時(shí)分別產(chǎn)生隨機掉電位置,模擬掉電行為。掉電后,程序重新掛接文件系統,并讀取掉電時(shí)正在更新的文件,與原文件相比給出判定結果。

  程序用到的測試變量:掉電類(lèi)別-g_tstPowerOff,1為Data區掉電,2為Spare區掉電。在完全模擬時(shí),掉電類(lèi)別隨機產(chǎn)生。程序用TestLog.log記錄掉電后判定的結果。TestLog.log為增加方式打開(kāi),新記錄寫(xiě)在最后,不影響原有的記錄結果。

  4.3 測試手段

  模擬一次“掉電”行為,需要進(jìn)行特殊的處理。實(shí)際的掉電行為在電源重新供給后,整個(gè)系統會(huì )重新開(kāi)始,包括重薪啟動(dòng)文件系統。掉電前系統的所有參數、系統堆棧以及現場(chǎng)均失效。在測試中模擬掉電行為有一定的難度,直接斷電既不安全,也不現實(shí),可用exit()函數中止程序來(lái)模擬。在執行寫(xiě)操作時(shí),寫(xiě)入隨機的字節數后,用exit()函數立即中止程序的運行;再重新啟動(dòng)程序,讀取掉電時(shí)寫(xiě)入的文件,分析文件以檢查文件系統新的掉電保護功能。

  上述測試手段不適用于自動(dòng)測試,也不可能手工進(jìn)行大量的測試。筆者在該項測試中,巧妙地使用了try{}和catch(}結構,既模擬了實(shí)際的掉電行為,又保證了自動(dòng)測試的順利進(jìn)行。

  模擬掉電行為的核心代碼如下:

   

  4.4 測試結果

  YAFFS-NAND文件系統,只提供上述的②和③兩種文件保護方式。在打開(kāi)文件時(shí),若以“截短為0”的方式打開(kāi)已有文件,則保護方式為第②種,使用新文件完全代替舊文件。若以修改的方式打開(kāi)己有文件,則保護方式為第③種,使用新加舊的保護方式。

  需要注意的是:在數據區掉電的情況下,以上兩種保護方式完好,測試通過(guò)。但在Spare區掉電的情況下,文件系統有很大的概率讀不出掉電時(shí)的文件,幾乎不能正常使用。在實(shí)際掉電情況中,按Data區和Spare區的比例關(guān)系(512:16),寫(xiě)操作掉電時(shí)發(fā)生在Spare區的概率為3.03%,不可接受。另外,文件系統不提供舊文件的保護方式,對于這類(lèi)應用(還是比較多的)需要另外實(shí)現。

  4.5 對Yaffs-NAND在掉電保護方面的改進(jìn)

  4.5.1 增加保護方式

  Yaffs-NAND文件系統在原理上決定了只能有上述的②和③兩種文件保護方式。要提供第一種保護方式,需要對文件系統進(jìn)行擴展,增加2個(gè)函數和2個(gè)結構體:

  

  EOnlyOld、EOnlyNew、ENewOld和EDefault分別表示3種不同的保護方式和默認保護方式(由原文件系統提供)。SProInfo結構不僅記錄保護方式,還記錄了該文件名,供關(guān)閉文件時(shí)使用。

  yaffs_openEx()根據傳入的保護方式,修改打開(kāi)文件的標志,以顯式地設置原有的②、③兩種保護方式。當保護方式為EOnIyold時(shí),yaffs—openEx()將打開(kāi)另一個(gè)新的臨時(shí)文件,并返回給用戶(hù)使用。傳入的SProlnfo結構的指針,將帶回文件名和文件句柄,供關(guān)閉文件時(shí)用。yaffs_closeEx()函數在關(guān)閉文件時(shí),檢查文件的保護方式。若為第②、③種情況,則直接關(guān)閉;若為第一種情況,則先刪除原文件,再把新文件重新命名,以達到文件保護的目的。

  使用方法如下:

 ?、偈褂媚J方式,則與原文件系統使用方法相同。新參數默認為NULL,可以直接兼容己有代碼。

 ?、谑褂脭U展方式,則要先生成一個(gè)SProInfo的對象,但將其指針傳給yafffs_openEx()。關(guān)閉時(shí)同樣要將其指針傳給yaffs_closeEx()。例如:

  

  對進(jìn)行上述改進(jìn)后的擴展方法進(jìn)行測試,結果同改進(jìn)前;但增加了只保留舊文件的第一種保護方式,程序運行良好。

  4.5.2 Spare區掉電不能恢復的修改

  對源代碼進(jìn)行深入研究,發(fā)現在Spare區掉電不能恢復的問(wèn)題出在Spare區的Tag信息自檢驗部分。yaffs_GetTagsFromSpare()函數從Spare區讀取Tag信息的過(guò)程中,調用yaffs_CheckECCOnTags()檢驗Tag信息。但是,原代碼對ECC校驗錯誤的Spare區,只是將錯誤修正,并返回到}層函數;上層函數僅記錄’Fag出錯次數,并不做處理。因此,在SpareⅨ掉電時(shí).會(huì )出現不可恢復的錯誤。

  修改yaffs_GetTagsFromSpare()函數的返回類(lèi)型為int,以返回Spare區的ECC校驗錯誤信息。當yaffs_CheckECCOnTags()返回Tag校驗錯誤時(shí),yaffs_Get-TagsFromSpare()函數將此錯誤返回。在調用此函數的地方,進(jìn)行相應的修改:當Spare區ECC出錯時(shí),調用yaffs_DeleteChunk(),刪除該頁(yè)。因掉電引發(fā)的Spare錯誤不可恢復的問(wèn)題,經(jīng)修改后運行良好。

  結語(yǔ)

  YAFFS文件系統是專(zhuān)門(mén)為NAND閃存而設計的,它使得價(jià)格低廉的NAND閃存芯片具有了高效性和健壯性;但YAFFS文件系統在性能上還存在著(zhù)問(wèn)題,并不完全適用于對性能苛求的嵌入式系統。本文針對YAFFS文件系統中均勻損耗和掉電恢復兩個(gè)重要指標進(jìn)行測試,給出了測試結果,并針對測試過(guò)程中存在的部分問(wèn)題提出了改進(jìn)方案。實(shí)際測試表明,改進(jìn)后系統性能有明顯改善,能適應更多的應用環(huán)境。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>