由于工控設備漸進變化的基本特征,Windows CE5.0仍然被大量的應用在當前的嵌入式主板中。英創公司的EM9160、EM9360等型號的工控主板也都繼續預裝CE5.0操作系統。由于CE5.0文件系統是基于微軟的Windows95/98內核的FAT文件系統,當基于FAT的CE5.0文件系統應用到NAND Flash器件上時,NandFlash的以扇區為單元的讀寫方式、以及塊為單元的擦除方式,有可能讓CE5.0文件系統產生很大的NandFlash存儲單元整理工作量。大規模的NandFlash整理將消耗很大一部分CPU時間,如果此時應用程序又有很重的數據存儲的任務,在非常極端情況下,有可能導致CE5.0文件系統的FAT表損壞。本文則是針對這種情況,提出兩種解決方法。
目前我們通常使用的NandFlash的邏輯結構有兩種,一種是扇區(Sector)大小為512字節,一個塊(Block)包括32個扇區,被稱為小扇區結構;另一種是扇區大小為2048字節(即2KB),一個塊包括64個扇區,這種結構的NandFlash通常稱為大扇區。可以容易算出,文件系統對NandFlash的整理,大扇區的工作量是小扇區的8倍。因此在同樣的運行條件下,大扇區結構的NandFlash對文件系統的負載就高得多。為了確定CE5.0文件系統的這個潛在問題,我們選用了EM9160的精簡版,其基本配置為16-bit數據寬度 32MB內存+128MB大扇區NandFlash作為實驗平臺。采用16-bit數據寬度是讓CPU的處理能力至少降低一倍,而128MB大扇區NandFlash為文件系統只提供了768個Block,從而更容易觸發文件系統的后臺整理進程。
我們的基本測試程序(即應用程序)是以低效率的小文件(一個文件大小不超過512字節,試驗文件大小為180字節)為單位,256個小文件存放在一個目錄中,總共256個目錄循環寫。同時在測試程序中啟動一個定時線程,定時時間為5s – 100s之間的隨機數,定時到時該線程強制重啟系統,這樣對文件系統施加一個隨機重啟的沖擊。為了觀察CPU的基本工作情況,測試程序主線程每2s從調試串口輸出CPU負載率等系統信息。基本的試驗情況如下:
1、CPU常規負載率在65%水平,當系統進行NandFlash整理時,負載率會上升至95%的水平,且最長時間會持續近10s。
2、經過連續24小時試驗,大約有3%的主板的FAT表會損壞,導致系統啟動失敗。
在測試程序中采用的文件寫方式是最直接的流程:
// CreateFile -> WriteFile -> CloseHandle
當所寫的文件已經存在于NandFlash時,CE5.0的TFAT文件系統會以某種方式保留原文件,這樣若在寫文件過程中遇到系統重啟,重啟后系統還能恢復原來的文件。但這樣做的代價是CE5.0文件系統會啟動后臺線程并行來處理這些老文件。經過大量的試驗分析,我們相信正是這種類似的并行操作NandFlash的機制,可能存在某種缺陷,導致在極端情況下FAT的損壞。
根據上面的分析,我們的第一種處理方法,就是在應用程序中增加刪除同名文件,再進行常規文件寫流程,即:
// 第一種方法:
// DeleteFile -> CreateFile -> WriteFile -> CloseHandle
就可把原來需要后臺并行處理的任務變成了應用程序線程順序執行,從而大幅度減少多個線程并行操作NandFlash的情況。修改后的試驗表明,FAT損壞率至少降低一個數量級以上,在目前的試驗規模上已完全不能檢測到FAT損壞的情況。
第一種方法是通過應用程序調整,來降低NandFlash操作的并行度,從而避免觸發CE5.0文件的缺陷顯現。但第一種方法還不能完全消除對NandFlash的并行操作,因為后臺的整理總是存在的。由此產生第二種方法,就是通過監視CPU負載率,一旦CPU負載超過某個閾值,應用線程就暫停文件寫操作,這樣就能主動避免應用程序與后臺并行操作NandFlash。其基本流程變成:
// 第二種方法:
bRet = g_pNandMonitor->EnterNandAccess(dwTimeout); // 獲取NAND訪問權
// 若bRet = TRUE,進入正常NAND操作:
// DeleteFile -> CreateFile -> WriteFile -> CloseHandle
g_pNandMonitor->LeaveNandAccess(); // 歸還NAND訪問權
在上述流程中,使用了我們構造的一個CPU負載率監控類NandFlashMonitor,當CPU負載率超過指定閾值時,應用線程調用EnterNandAccess函數,將導致應用線程阻塞(掛起)直至超時或CPU負載率低于指定閾值。采用CPU負載率監測手段后,可以看到在后臺整理時段,CPU負載率從原來的95%的水平下降到85%的水平,說明在這個時段的應用程序的NandFlash確實是停掉了,同時也說明在這個時段分配給應用程序的資源實際是很少的,所以寫文件的效率是很低的。采用延時寫的方法,是不會對總體性能影響的。需要檢測類NandFlashMonitor代碼的客戶,可郵件向英創技術支持索取。
總之,通過試驗表明,CE5.0的TFAT文件系統對NandFlash管理策略上確實存在某種缺陷,在大扇區NandFlash及頻繁文件操作的應用中,這種缺陷就可能對設備產生威脅。但我們也可以有充分的手段徹底規避這樣的風險,同時又不降低系統的整體性能。
-
WINDOWS
+關注
關注
4文章
3551瀏覽量
88911 -
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35439
發布評論請先 登錄
相關推薦
評論