淺談一種在嵌入式核心中測試exfat檔案系統性能的方法的論文
淺談一種在嵌入式核心中測試exfat檔案系統性能的方法的論文
隨著嵌入式技術的發展,利用各種開源的嵌入式平臺來開發電子產品,已經成為大部分公司的首選。要使執行嵌入式系統的電子產品實現音訊、影片、圖片等多媒體資訊的儲存及處理,幾乎離不開檔案系統的支援,那麼在嵌入式平臺下開發各種檔案系統也是必然。其中具備優越效能的exfat 檔案系統由於微軟的不開源性,也常常需要在核心中自主開發。
在嵌入式系統中,如linux、ucos,實現exfat 檔案系統的功能已經不難。嵌入式開發者在具備嵌入式開發經驗及exfat 檔案系統的知識基礎上,即可完成。但是在實現了exfat 檔案系統的'功能後,要如何驗證其效能卻不是那麼容易。
1 測試工具的侷限性
嵌入式軟體由於記憶體有限、實時性、開發工具昂貴等特點,測試非常困難。嵌入式軟體從下到上,分為硬體層、驅動層、核心層、應用層,而核心層由於結構複雜、程式碼龐大,是嵌入式軟體中最難測試的部分,本文中待測的exfat 檔案系統正處於核心層。雖然嵌入式軟體有一些整合的測試軟體,但是一般的測試軟體只能用於標準的嵌入式核心,只能測試規定的功能,不能進行二次開發,而對於很多嵌入式產品來說,嵌入式核心原始碼需要修改,也需要測試更多特定的功能,這就需要特定的測試方式。
因此本文要探索的是在核心層的檔案系統的測試方式。按照測試方式來分類,該測試屬於白盒測試的範疇。
2 測試體系
檔案系統是一種儲存系統,對於儲存系統來說,需要關注的效能有訪問介面效能、資料讀寫效能、聚合頻寬、最大併發數、任務數、最大吞吐率、可擴充套件能力等,本文中的測試任務是測試嵌入式系統核心層檔案系統的效能,因此需要測試的效能也相對單一,著重測試訪問介面效能和資料讀寫效能。其中訪問介面效能是指各個操作元資料和資料的API 返回速度,單位為API 運算元/s。以Open 函式為例,在應用層新建檔案,呼叫Open函式,就可以透過核心檔案函式FS_Open 函式呼叫驅動層函式,從而呼叫硬體,完成具體的功能。那麼該API的返回速度指傳送Open 命令到返回成功所花的時間;資料讀寫效能是指測定不同檔案大小,資料塊大小和讀寫比例的資料讀寫效能,單位為MB/s,以Read 函式為例,預先在系統中插入儲存裝置,呼叫Read 函式來讀取該儲存裝置中的特定大小的檔案,透過檔案的大小除以讀取的時間即可獲得讀取的速度;當然也可以用time 命令來測試時間,手動去計算速度,測試程式碼如下:
#define size 1024*1024*200
#define LEN 1024
#include
int main()
{
FILE *fp1;
char *buf=new char[LEN];
int i,j;
fp1=fopen(“data.in”,”rb”);
for(j=0;j<1024*500;j++)
{
fread(buf,1024,1,fp1);
}
printf(“ok!/n”);
fclose(fp1);
}
綜上所述,測試體系如下所示:其中應用層的測試程式碼作用是呼叫相關的APP 函式,核心層對應函式指的是exfat 檔案系統的功能函式,驅動層函式指的是與硬體相連的操作函式。
Exfat 檔案系統的介面函式有:
unsigned int fsapitbl[]={
(unsigned int)FOpen,
(unsigned int)FClose,
(unsigned int)FRead,
(unsigned int)FWrite,
(unsigned int)GetLength,
(unsigned int)GetTime,
(unsigned int)ConvertName,
......
};
針對所有的APP 都需要完成介面效能測試,測試其響應時間以及功能的正確性;針對包含Read 和Write的APP 還需要完成讀寫效能測試,測試其讀寫速度,並且針對不同的儲存裝置,不同的檔案大小要有不同的測試資料。對於儲存系統的其他測試效能,需要聯合整個嵌入式系統來測試。
3 測試資料
在ucos 嵌入式平臺上測試exfat 的讀寫效能所得。其中ReadDIO 指用DirectIO 的方式來完成讀操作,速度比一般的Read 更快,當然針對不同的應用需求,可能會對核心檔案系統系統進行不同的修改,測試時要根據檔案系統需求文件和設計文件來設計測試樣例。
4 測試結果
透過測試資料的分析,可以看出本文提出的測試方法可以快速全面地測試核心層exfat 檔案系統的效能。雖然本文提出的測試方法目前只針對exfat 檔案系統,但因為exfat、fat、ntfs 等檔案系統基本介面APP 的類似性,本問提出的測試方法也可以拓展到其他檔案系統的測試。不過本文的測試方法還未實現全自動的測試,這還需要後續透過配置指令碼來實現。