汽車(chē)信息娛樂(lè )系統中的閃存設備的管理設計
汽車(chē)信息娛樂(lè )和遠程電子信息處理系統需要從閃存器件中讀寫(xiě)海量數據,因此這些器件必須能長(cháng)期可靠、無(wú)錯地保存數據。例如,嵌入到汽車(chē)導航系統中的閃存芯片必須在若干年的頻繁使用條件下可靠工作。用戶(hù)不希望丟失數據以及很長(cháng)的啟動(dòng)時(shí)間,或者忍受很長(cháng)的數據恢復時(shí)間。這些都對控制閃存芯片中數據的文件系統技術(shù)提出了非常嚴格的要求。
使問(wèn)題更加復雜的是,汽車(chē)嵌入式設計必須使成本絕對最低。材料清單中通常不能增加管理電源波動(dòng)或不受控關(guān)斷的硬件,而這兩種情況中的任何一種都會(huì )導致閃存損壞,并導致業(yè)務(wù)丟失。因此,閃存文件系統技術(shù)不能簡(jiǎn)單地提供高吞吐量的讀/寫(xiě)功能;它還必須具有自恢復功能,并且在啟動(dòng)之后的若干毫秒之內能被完全訪(fǎng)問(wèn)。(參見(jiàn)“快速啟動(dòng)技術(shù)可以滿(mǎn)足汽車(chē)信息娛樂(lè )/遠程信息系統的需求”一文)
基于事務(wù)的文件系統
解決這些需求的方法之一是采用基于純事務(wù)的模型。例如QNX嵌入式事務(wù)文件系統(ETFS)就遵循這種模型,完全是由事務(wù)組成。無(wú)論是文件系統的元數據還是用戶(hù)數據的每一次寫(xiě)操作都是由一個(gè)“原子”事務(wù)組成。一個(gè)事務(wù)要么獲得成功,要么就當成什么事也沒(méi)有發(fā)生。
這種方法可以確保文件系統在電源故障的條件下也能完好無(wú)損,即使電源故障發(fā)生在閃存寫(xiě)入或塊刪除期間。為避免文件破壞,事務(wù)從來(lái)不會(huì )覆蓋現有的“有效”數據。在文件升級中間的寫(xiě)入操作總是會(huì )寫(xiě)入到一個(gè)新的未用區域。因此如果這次操作因為突發(fā)事故或電源故障不能完成,現有的數據將保持不變。重新啟動(dòng)后,文件系統可以重新執行和正確完成寫(xiě)操作,這樣就可以從可能損壞傳統文件系統的狀態(tài)中恢復過(guò)來(lái)。
事務(wù)文件系統可以通過(guò)處理設備中的事務(wù)日志來(lái)動(dòng)態(tài)建立文件系統的層次結構。這種操作發(fā)生在系統啟動(dòng)之時(shí),應設計成只有很少部分的數據需要讀取和CRC校驗。這樣一來(lái),文件系統可以獲得高的數據完整性和快速的重啟時(shí)間。例如QNX ETFS可以在數十毫秒內恢復,而傳統的文件系統需要數百毫秒。
圖1:這種車(chē)載導航系統是要求大容量可靠閃存文件系統(用于三維映射、動(dòng)態(tài)路由等)的一個(gè)實(shí)例。
如圖2所示,在純粹基于事務(wù)的文件系統中,每個(gè)事務(wù)由頭和用戶(hù)數據組成。事務(wù)頭被放在閃存陣列的空閑字節中。例如,一個(gè)具有2112字節頁(yè)的NAND器件可以由64字節的頭和2048字節的用戶(hù)數據組成。事務(wù)頭標識數據所屬的文件以及其邏輯偏移,并包含一個(gè)序列號來(lái)確定事務(wù)的順序。頭部還包括CRC和 ECC字段,用于誤碼檢測和糾正。
圖2:這張器件圖表明了它相對于純事務(wù)文件系統中物理媒介的獨立性。
在系統啟動(dòng)時(shí),文件系統掃描這些事務(wù)頭來(lái)快速重構存儲器中的文件系統結構。除了確保高的數據完整性和快速的重新啟動(dòng)時(shí)間,一個(gè)閃存文件系統還必須具有可以延長(cháng)閃存壽命的特性,進(jìn)而增加整個(gè)嵌入式系統的長(cháng)期可靠性。這些特性包括讀取性能劣化監測、動(dòng)態(tài)和靜態(tài)損耗平衡以及避免文件碎片的技術(shù)。
恢復丟失的比特
在NAND閃存塊內的每一次讀操作都會(huì )使保持數據位的電荷減弱。因而,在大約10萬(wàn)次讀操作后閃存塊就會(huì )丟失數據。為了解決這個(gè)問(wèn)題,一個(gè)設計完善的文件系統會(huì )跟蹤讀操作,并在塊的讀次數達到極限之前標記出弱電荷塊以便進(jìn)行刷新。文件系統隨后執行一次刷新操作,該操作將數據拷貝到一個(gè)新的閃存塊,并擦除該弱塊。這種擦除實(shí)現了對閃存塊的再充電。
文件系統還應該對所有的讀寫(xiě)操作執行ECC運算,以便從可能發(fā)生的任何單比特差錯中恢復。然而,盡管ECC對于那些本身丟失了單個(gè)比特的閃存效果很好,但是對于在寫(xiě)操作期間因為電源故障而導致的很多比特損壞則無(wú)能為力。因此,文件系統應該對每個(gè)事務(wù)執行一次CRC檢驗,以快速檢測出損壞的數據。如果CRC 檢測到一個(gè)錯誤,文件 系統就可以使用ECC糾錯功能將數據恢復到一個(gè)新塊上,然后標記出弱電荷塊以便擦除。
動(dòng)態(tài)和靜態(tài)損耗平衡
每個(gè)閃存塊在其失效之前的擦除次數是有限的。在某些器件中,這個(gè)數字可以低到10萬(wàn)次擦除。為了解決這個(gè)問(wèn)題,文件系統必須實(shí)現動(dòng)態(tài)損耗平衡,它通過(guò)將擦除次數均勻地分散到設備中來(lái)延長(cháng)閃存壽命。
差異可能很大:從沒(méi)有損耗平衡幾天就產(chǎn)生故障的使用情形到利用損耗平衡超過(guò)40年的情形。為實(shí)現動(dòng)態(tài)損耗平衡,文件系統會(huì )跟蹤每個(gè)塊的擦除次數,然后優(yōu)先使用那些較少使用的塊。
通常,閃速存儲器包含大量的靜態(tài)文件,這些文件經(jīng)常被讀取,但不會(huì )再寫(xiě)入。這些文件占用的閃存塊沒(méi)有理由被擦除。如果閃存中大部分文件是靜態(tài)的,剩余部分包含動(dòng)態(tài)數據的塊的損耗將戲劇性地加快。對于NAND存儲器來(lái)說(shuō)這方面的問(wèn)題更大,因為NAND每個(gè)塊的讀次數相當有限。
因此,一個(gè)設計優(yōu)秀的文件系統應提供靜態(tài)損耗平衡功能,它將較少使用的靜態(tài)塊中的數據拷貝到過(guò)量使用的塊中,從而實(shí)現塊的平衡使用。這種方法可以讓過(guò)量使用的塊休息,因為它們現在存儲的是靜態(tài)數據,并將使用較少的靜態(tài)塊移動(dòng)到動(dòng)態(tài)塊組中。
盡量減少文件碎片
文件碎片也是閃存器件的一個(gè)問(wèn)題。然而,支持去碎片技術(shù)只是解決方案的一部分。因為NAND閃存具有有限的寫(xiě)次數,文件系統必須盡可能避免碎片產(chǎn)生,以延長(cháng)閃存的壽命。
基于日志的文件系統經(jīng)常受碎片的影響,因為對已有的文件進(jìn)行刷新或寫(xiě)入會(huì )產(chǎn)生一個(gè)新的事務(wù)。為減少很多小事務(wù)產(chǎn)生的碎片,QNX ETFS使用寫(xiě)緩沖來(lái)將小的寫(xiě)入合并成大的寫(xiě)入事務(wù)。文件系統還能監視每個(gè)文件的碎片水平,并對那些已經(jīng)嚴重碎片化的文件進(jìn)行后臺去碎片處理。這種后臺活動(dòng)應該總是能被用戶(hù)活動(dòng)占先,以便確保對正在進(jìn)行去碎片處理的文件進(jìn)行立刻訪(fǎng)問(wèn)。
正確的組合
完全可能構建一個(gè)能提供高吞吐量、高可靠性和快速啟動(dòng)時(shí)間的閃存文件系統。通過(guò)整合事務(wù)級的設計、成熟的糾錯以及損耗平衡方法,閃存文件系統完全可以解決當前嵌入式汽車(chē)信息娛樂(lè )設備提出的復雜要求。
評論