當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]本文簡要介紹了常用的NAND Flash文件系統(tǒng)YAFFS,并針對YAFFS在均勻損耗和掉電恢復(fù)方面進行在線測試。在給出測試結(jié)果的同時,著重研究嵌入式軟件測試方案和方法;對測試結(jié)果進行分析,并提出改進方案和適用環(huán)境。

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


引 言
    隨著嵌入式技術(shù)在各種電子產(chǎn)品中的廣泛應(yīng)用,嵌入式系統(tǒng)中的數(shù)據(jù)存儲和管理已經(jīng)成為一個重要的研究課題。Flash存儲器具有速度快、容量大、成本低等很多優(yōu)點,因此在嵌入式系統(tǒng)中被廣泛用作外存儲器件。嵌入式系統(tǒng)中的Flash存儲器需要有自己的文件系統(tǒng),而不能直接移植通用文件系統(tǒng),主要有兩個原因:第一,嵌入式系統(tǒng)的應(yīng)用條件惡劣,電源電壓不穩(wěn)定,突發(fā)性斷電以及非法插拔都容易造成災(zāi)難性的影響,通用文件系統(tǒng)對于可靠性的設(shè)計考慮不足;第二,通用文件系統(tǒng)的記錄信息(如FAT表)需要被多次修改,而記錄信息放在Flash存儲器固定的區(qū)塊中,將導(dǎo)致該區(qū)塊的頻繁操作,從而縮短Flash器的使用壽命。這樣就對軟件技術(shù)提出了更高的要求。
    為了管理復(fù)雜的存儲硬件,同時提供可靠高效的存儲環(huán)境,出現(xiàn)了基于NAND和NOR的文件系統(tǒng)。目前主流的FFS(Flash File System)有如下3種:TrueFFS、JFFSx以及YAFFS。YAFFS(Yet Another Flash File System)是專門為NAND Flash設(shè)計的嵌入式文件系統(tǒng),適用于大容量的存儲設(shè)備。它是日志結(jié)構(gòu)的文件系統(tǒng),提供了損耗平衡和掉電保護等機制,可以有效地減小上述原因?qū)ξ募到y(tǒng)一致性和完整性的影響。本文正是基于這樣的前提,介紹了關(guān)于嵌入式Y(jié)AFFS文件系統(tǒng)測試方案,針對文件系統(tǒng)中損耗平衡和掉電保護兩個重要的系統(tǒng)性能指標進行實時在線的測試與分析,不同的應(yīng)用環(huán)境使用該文件系統(tǒng)應(yīng)進行相應(yīng)的修改。

1 YAFFS文件系統(tǒng)概述
    YAFFS文件系統(tǒng)類似于JFFS/JFFS2文件系統(tǒng)。不同的是,JFFSl/2文件系統(tǒng)最初是針對NOR Flash的應(yīng)用場合設(shè)汁的,而NOR Flash和NAND Flash本質(zhì)上有較大的區(qū)別。盡管JFFSl/2文件系統(tǒng)也能應(yīng)用于NANDFlash,但由于它在內(nèi)存占用和啟動時間方面針對NOR的特性做了一些取舍,所以對NAND來說通常并不是最優(yōu)的方案。
1.1 NOR和NAND的比較
    基本上NOR比較適合存儲程序代碼,其容量一般較小(比如小于32 MB),且價格較高;而NAND容量可達lGB以上,價格也相對便宜,適合存儲數(shù)據(jù)。一般來說,128 MB以下容量NAND Flash芯片的一頁大小為512字節(jié),用來存放數(shù)據(jù),每一頁還有16字節(jié)的備用空間(SpareData),充當(dāng)OOB(Out Of Band)區(qū)域,用來存儲ECC(Error Correction Codc)校驗/壞塊標志等信息;再由若干頁組成一個塊,通常一塊為32頁(16 KB)。與NOR相比,NAND不是完全可靠的。每塊芯片出廠時允許有一定比例的壞塊存在,對數(shù)據(jù)的存取不是使用線性地址映射,而是通過寄存器的操作串行存取數(shù)據(jù)。
1.2 YAFFs數(shù)據(jù)在NAND上的存儲方式
    YAFFS根據(jù)NAND閃存以頁為單位存取的特點,將文件組織成固定大小的數(shù)據(jù)段。利用NAND閃存提供的每頁16字節(jié)的備用空間來存放ECC檢驗信息和文件系統(tǒng)的組織信息,不僅能夠?qū)崿F(xiàn)錯誤檢測和壞塊處理,而且能夠提高文件系統(tǒng)的加載速度。
    YAFFS將文件組織成固定大小(512字節(jié))的數(shù)據(jù)段。每個文件都有一個頁面專門存放文件頭,文件頭保存了文件的模式、所有者id、組id、長度、文件名等信息。為了提高文件數(shù)據(jù)塊的查找速度,文件的數(shù)據(jù)段組織成樹形結(jié)構(gòu)。YAFFS在文件進行改寫時,總是先寫入新的數(shù)據(jù)塊,然后將舊的數(shù)據(jù)塊從文件中刪除。YAFFS使用存放在頁面?zhèn)溆每臻g中的ECC進行錯誤檢測,出現(xiàn)錯誤后會進行一定次數(shù)的重試;多次重試失敗后,該頁面就被停止使用。以(512+16)字節(jié)為一頁的NAND Flash芯片為例,YAFFS文件系統(tǒng)數(shù)據(jù)的存儲布局如圖1所示。

2 YAFFS文件系統(tǒng)測
2.1 測試總體說明
    YAFFS文件系統(tǒng)是開源的,測試基于白盒測試。在所關(guān)心的代碼段中,插入測試代碼。為保證測試代碼不對原代碼造成影響,測試后可立即恢復(fù)為原代碼,所有測試代碼(包括測試用變量和函數(shù))均嵌入到#define FS_TEST宏定義中。
2.2 模擬文件的生成
   
嵌入式環(huán)境下對文件系統(tǒng)進行大量、長時間的測試存在很多問題,不易實現(xiàn),對測試代碼的插入和數(shù)據(jù)的監(jiān)視也比較困難。這里采用PC模擬測試的形式,用文件的讀/寫模擬NAND器件,并在PC上對模擬文件監(jiān)視,以達到測試的目的。代碼定義了各種NAND器件的類型,以適應(yīng)不同的器件。模擬器件時,也用這些信息生成相應(yīng)的模擬文件。
    指明要模擬的NAND器件的大小(FILE_SIZE_IN_MEG)和結(jié)構(gòu)(BLOCKS_PER_MEG,BLOCK_SIZE)后,按照相應(yīng)的大小和結(jié)構(gòu)生成文件g_filedisk。


3 均勻損耗測試
3.1 測試目的
    NAND Flash器件每個Block區(qū)塊的擦寫次數(shù)有限。在需要實時記錄的應(yīng)用環(huán)境中,為保證器件壽命,應(yīng)盡量使每個區(qū)塊的擦寫次數(shù)相對平均.以最大程度地延長NAND Flash器件的使用壽命。此項測試記錄每個Block區(qū)塊的擦寫次數(shù),以測試YAFFS文件系統(tǒng)在均勻損耗方面的性能。
3.2 測試方法
   
測試代碼在器件模擬文件的每一頁的Spare區(qū)后,增加了字節(jié),用于記錄該頁的擦寫次數(shù)。由于擦寫是以Block為單位進行的,因此每個Block各頁的擦寫記錄數(shù)是相同的。在以后的測試中,可以只使用第一頁的該Block空間記錄擦寫次數(shù),其他空間作其他測試用。
    測試代碼插入到CheckInit()和yaffs_FEEraseBlockInNAND()(yaffs_fileem.cpp)中,在初始化器件模擬文件時,生成(新模擬文件)或讀取(己有模擬文件)擦寫次數(shù);并在程序執(zhí)行擦寫函數(shù)時,對擦寫次數(shù)進行累加和保存。
    測試程序甩到的測試變量;記錄擦寫次數(shù)的數(shù)組-g_ersNumArray[FILE_SIZE_IN_MEG*BLOCKS_PER_MEG]、指向擦寫的最大值-g_pErsMax和指向擦寫的最小值-g_pErsMin。
    測試程序用WireOut0.log和WireOutl.log兩個文件記錄每個Block區(qū)塊的擦寫次數(shù),查看這兩個文件,可以看到每個區(qū)塊的擦寫次數(shù)以及最大/最小值。兩個文件是等同的,因測試時間比較長,取兩個文件以避免系統(tǒng)在寫記錄文件時出錯,而丟失所有的記錄;兩個文件輪流寫,保證至少有一個文件的內(nèi)容是系統(tǒng)出錯前最近的記錄。
3.3 測試結(jié)果
    YAFFS文件系統(tǒng)按“順序”使用未分配的空間用于新的寫入操作,并以同樣“順序”擦除廢棄的區(qū)塊。寫入和擦除操作,均按順序在未分配的空間或廢棄的空間中進行。當(dāng)系統(tǒng)未用空間小于某一預(yù)設(shè)值后,系統(tǒng)將對存在廢棄頁的區(qū)塊進行回收。這種寫入和擦除策略在一定程度上保證了損耗的均勻性。
    這種機制雖然在一定程度上滿足均勻損耗的要求,但還是存在問題,并不適用于所有的嵌入式應(yīng)用環(huán)境。假設(shè)在一塊16MB的NAND器件上,有10MB空間用來存放相對固定、不經(jīng)常修改的數(shù)據(jù)文件,則經(jīng)常修改的文件只能在剩下的6 MB空間上重復(fù)擦寫,在這6 MB空間上做到“均勻損耗”。對整個器件來說,系統(tǒng)并沒有合適的搬移策略對固定文件進行搬移,整個器件做不到均勻損耗。在實時記錄信息量比較大的應(yīng)用環(huán)境中,應(yīng)編寫相應(yīng)的搬移策略函數(shù),對固定文件進行定期的搬移,以確保整個NAND器件的均勻損耗。

4 掉電恢復(fù)性能測試
4.1 測試目的
   
文件系統(tǒng)應(yīng)能保證在系統(tǒng)突然斷電的情況下,最大限度地恢復(fù)(保護)有用數(shù)據(jù)。如果在修改一個文件時掉電,那么掉電后的文件保護方式根據(jù)實際情況可分為3種:
    ①用舊文件完全代替新寫文件,新寫文件(沒寫完)被忽略。這種保護方式應(yīng)用比較多,比如在更新設(shè)置時掉電,使用掉電前的設(shè)置,用戶是可以接受的。
    ②用新文件完全代替舊文件(新文件寫了多少就保留多少)。這種保護方式適合應(yīng)用于文本的情況,比如短信。新短信雖然不完整,但根據(jù)情況用戶可以得到部分信息,如果發(fā)送方信息完整或?qū)儆诳刹聹y的情況,則可以要求發(fā)送方重發(fā)。
    ③己寫部分用新文件,未寫部分用老文件,所謂“新加舊”的保護方式。這種保護方式可以應(yīng)用在動態(tài)更新的文件上。但是,對于使用偏移量進行的文件讀寫操作,采用這種保護方式,會產(chǎn)生亂碼。
4.2 測試方法
   
測試代碼隨機產(chǎn)生掉電消息,模擬一次掉電行為。測試代碼插入到y(tǒng)affs_FEWriteChunkToNAND()(yaffs_fileem.cpp)中,在寫Data區(qū)和Spare區(qū)時分別產(chǎn)生隨機掉電位置,模擬掉電行為。掉電后,程序重新掛接文件系統(tǒng),并讀取掉電時正在更新的文件,與原文件相比給出判定結(jié)果。
    程序用到的測試變量:掉電類別-g_tstPowerOff,1為Data區(qū)掉電,2為Spare區(qū)掉電。在完全模擬時,掉電類別隨機產(chǎn)生。程序用TestLog.log記錄掉電后判定的結(jié)果。TestLog.log為增加方式打開,新記錄寫在最后,不影響原有的記錄結(jié)果。
4.3 測試手段
   
模擬一次“掉電”行為,需要進行特殊的處理。實際的掉電行為在電源重新供給后,整個系統(tǒng)會重新開始,包括重薪啟動文件系統(tǒng)。掉電前系統(tǒng)的所有參數(shù)、系統(tǒng)堆棧以及現(xiàn)場均失效。在測試中模擬掉電行為有一定的難度,直接斷電既不安全,也不現(xiàn)實,可用exit()函數(shù)中止程序來模擬。在執(zhí)行寫操作時,寫入隨機的字節(jié)數(shù)后,用exit()函數(shù)立即中止程序的運行;再重新啟動程序,讀取掉電時寫入的文件,分析文件以檢查文件系統(tǒng)新的掉電保護功能。
    上述測試手段不適用于自動測試,也不可能手工進行大量的測試。筆者在該項測試中,巧妙地使用了try{}和catch(}結(jié)構(gòu),既模擬了實際的掉電行為,又保證了自動測試的順利進行。
模擬掉電行為的核心代碼如下:


4.4 測試結(jié)果
    YAFFS-NAND文件系統(tǒng),只提供上述的②和③兩種文件保護方式。在打開文件時,若以“截短為0”的方式打開已有文件,則保護方式為第②種,使用新文件完全代替舊文件。若以修改的方式打開己有文件,則保護方式為第③種,使用新加舊的保護方式。
    需要注意的是:在數(shù)據(jù)區(qū)掉電的情況下,以上兩種保護方式完好,測試通過。但在Spare區(qū)掉電的情況下,文件系統(tǒng)有很大的概率讀不出掉電時的文件,幾乎不能正常使用。在實際掉電情況中,按Data區(qū)和Spare區(qū)的比例關(guān)系(512:16),寫操作掉電時發(fā)生在Spare區(qū)的概率為3.03%,不可接受。另外,文件系統(tǒng)不提供舊文件的保護方式,對于這類應(yīng)用(還是比較多的)需要另外實現(xiàn)。
4.5 對Yaffs-NAND在掉電保護方面的改進
4.5.1 增加保護方式
    Yaffs-NAND文件系統(tǒng)在原理上決定了只能有上述的②和③兩種文件保護方式。要提供第一種保護方式,需要對文件系統(tǒng)進行擴展,增加2個函數(shù)和2個結(jié)構(gòu)體:


    EOnlyOld、EOnlyNew、ENewOld和EDefault分別表示3種不同的保護方式和默認保護方式(由原文件系統(tǒng)提供)。SProInfo結(jié)構(gòu)不僅記錄保護方式,還記錄了該文件名,供關(guān)閉文件時使用。
    yaffs_openEx()根據(jù)傳入的保護方式,修改打開文件的標志,以顯式地設(shè)置原有的②、③兩種保護方式。當(dāng)保護方式為EOnIyold時,yaffs—openEx()將打開另一個新的臨時文件,并返回給用戶使用。傳入的SProlnfo結(jié)構(gòu)的指針,將帶回文件名和文件句柄,供關(guān)閉文件時用。yaffs_closeEx()函數(shù)在關(guān)閉文件時,檢查文件的保護方式。若為第②、③種情況,則直接關(guān)閉;若為第一種情況,則先刪除原文件,再把新文件重新命名,以達到文件保護的目的。
    使用方法如下:
    ①使用默認方式,則與原文件系統(tǒng)使用方法相同。新參數(shù)默認為NULL,可以直接兼容己有代碼。
    ②使用擴展方式,則要先生成一個SProInfo的對象,但將其指針傳給yafffs_openEx()。關(guān)閉時同樣要將其指針傳給yaffs_closeEx()。例如:


    對進行上述改進后的擴展方法進行測試,結(jié)果同改進前;但增加了只保留舊文件的第一種保護方式,程序運行良好。
4.5.2 Spare區(qū)掉電不能恢復(fù)的修改
    對源代碼進行深入研究,發(fā)現(xiàn)在Spare區(qū)掉電不能恢復(fù)的問題出在Spare區(qū)的Tag信息自檢驗部分。yaffs_GetTagsFromSpare()函數(shù)從Spare區(qū)讀取Tag信息的過程中,調(diào)用yaffs_CheckECCOnTags()檢驗Tag信息。但是,原代碼對ECC校驗錯誤的Spare區(qū),只是將錯誤修正,并返回到}層函數(shù);上層函數(shù)僅記錄’Fag出錯次數(shù),并不做處理。因此,在SpareⅨ掉電時.會出現(xiàn)不可恢復(fù)的錯誤。
    修改yaffs_GetTagsFromSpare()函數(shù)的返回類型為int,以返回Spare區(qū)的ECC校驗錯誤信息。當(dāng)yaffs_CheckECCOnTags()返回Tag校驗錯誤時,yaffs_Get-TagsFromSpare()函數(shù)將此錯誤返回。在調(diào)用此函數(shù)的地方,進行相應(yīng)的修改:當(dāng)Spare區(qū)ECC出錯時,調(diào)用yaffs_DeleteChunk(),刪除該頁。因掉電引發(fā)的Spare錯誤不可恢復(fù)的問題,經(jīng)修改后運行良好。

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

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉