新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式設(shè)備上的文件系統(tǒng)優(yōu)化設(shè)計(jì)

嵌入式設(shè)備上的文件系統(tǒng)優(yōu)化設(shè)計(jì)

作者: 時(shí)間:2013-11-11 來源:網(wǎng)絡(luò) 收藏

1.5 系統(tǒng)MAKE_REQUEST[1-4]

經(jīng)過上述各個(gè)步驟的計(jì)算,在實(shí)現(xiàn)中,將文件讀操作轉(zhuǎn)化為若干個(gè)不同的Block讀需求,最后向下層驅(qū)動(dòng)程序?qū)影l(fā)起具體的命令Request。上述的轉(zhuǎn)化,基本上是根據(jù)底層配置以及內(nèi)存管理的需求,將大的/整體的命令細(xì)分/拆分為更加細(xì)小的動(dòng)作。

而在實(shí)際執(zhí)行過程中,肯定存在較多的過度拆分的情況,以致于產(chǎn)生過多低效率的命令,因此,在具體實(shí)現(xiàn)過程中,為了避免這種情況,在實(shí)際發(fā)出Request之前,需要對(duì)其進(jìn)行相應(yīng)的檢查,合并相關(guān)的Request,以提高系統(tǒng)實(shí)現(xiàn)性能。這個(gè)過程將由submit_bh來完成。

圖3所示是submit_bh函數(shù)中的主體調(diào)用子函數(shù)_make_request的實(shí)現(xiàn)過程。在實(shí)現(xiàn)中,_make_request根據(jù)獲得的Block大小、存儲(chǔ)設(shè)備的sector number,準(zhǔn)備好內(nèi)存空間后,向IDE發(fā)出具體的Request。而具體的Request合并將發(fā)生在發(fā)出Request之前。其實(shí)現(xiàn)原理根據(jù)當(dāng)前隊(duì)列中Request的地址相關(guān)性來判斷。


2 優(yōu)化策略分析

面對(duì)提高訪問性能的需求,經(jīng)過分析系統(tǒng)如何處理用戶發(fā)起的讀命令,觀察read( )命令從VFS到具體的的實(shí)現(xiàn),轉(zhuǎn)化為具體的每一個(gè)Request的整個(gè)過程,系統(tǒng)的優(yōu)化可從以下幾個(gè)方面進(jìn)行。

2.1 Block讀操作改進(jìn)

根據(jù)1.4節(jié)針對(duì)block_read_full_page( )的描述,實(shí)際上是根據(jù)實(shí)際文件系統(tǒng)定義的Block大小,將一個(gè)page轉(zhuǎn)化為多個(gè)Block的讀動(dòng)作。而在的具體實(shí)現(xiàn)中,根據(jù)/linux-2.4.x/fs/fat/inode.c文件中的描述,Block size等于logic_sector_size的大小,即邏輯扇區(qū)大小。

在FAT文件系統(tǒng)的定義中,邏輯扇區(qū)是為了統(tǒng)一不同硬盤的物理扇區(qū)而設(shè)置的。由于一般物理扇區(qū)最小為512B,因此在FAT32普遍實(shí)現(xiàn)中,邏輯扇區(qū)設(shè)置為512B。

而當(dāng)前大容量的硬盤系統(tǒng),其物理扇區(qū)普遍大于4KB。在這種情形下,根據(jù)上的FAT32實(shí)現(xiàn),一個(gè)4KB或者以上的物理扇區(qū)的讀,被人為地劃分為8次512B邏輯扇區(qū)的讀命令。而由于物理原因,可知道物理扇區(qū)將是磁盤上最小的尋址單位,也就是說,在最壞的情況下(即下層__make_request沒有及時(shí)判斷出這些buffer是可以合并的),向一個(gè)以4KB為扇區(qū)的硬盤發(fā)出一個(gè)page(4KB)的讀命令,最后將由8次同一個(gè)扇區(qū)的讀動(dòng)作來實(shí)現(xiàn)。

針對(duì)block_read_full_page劃分的不合理,可以嘗試用重寫block_read_full_page來實(shí)現(xiàn),即擴(kuò)大Block為4KB。這樣即可以認(rèn)為,一個(gè)的page讀將按照一次Block讀來完成。同時(shí)由于內(nèi)存管理都以4KB大小的page作為基本單位,這樣在所有文件系統(tǒng)的內(nèi)部,將以4KB為最小單位進(jìn)行讀取,把跨4KB的特殊情況留給下層驅(qū)動(dòng)來完成拆分(由于大容量硬盤的應(yīng)用目標(biāo),這種情況幾乎不會(huì)出現(xiàn))。因此,Block改進(jìn)就是通過改進(jìn)Block的大小,進(jìn)行合并過多的拆分,來達(dá)到提高系統(tǒng)的讀性能的作用。

2.2 預(yù)讀機(jī)制控制

Linux系統(tǒng)上的FAT32文件系統(tǒng)實(shí)現(xiàn),依然強(qiáng)烈依賴著預(yù)讀機(jī)制來完成實(shí)際的讀操作。這是由于Linux最初是以PC機(jī)為設(shè)計(jì)目標(biāo)的,即存在內(nèi)存交換文件和各種緩沖機(jī)制來對(duì)有限的資源進(jìn)行無限的邏輯擴(kuò)展[5]。
這種多重緩沖的設(shè)計(jì)機(jī)制,非常適合應(yīng)用程序/控制命令流存儲(chǔ)的磁盤管理。然而,在本嵌入式系統(tǒng)設(shè)計(jì)中,F(xiàn)AT32作為數(shù)據(jù)存儲(chǔ)空間,數(shù)據(jù)存儲(chǔ)相對(duì)有序,并且可預(yù)測(cè)性比較強(qiáng)。因此,這種抽象帶來的好處不是特別的明顯。同時(shí)由于存在多級(jí)緩沖,尤其是硬盤系統(tǒng)的多級(jí)緩沖,會(huì)造成以下幾個(gè)缺點(diǎn):

(1)因多次數(shù)據(jù)搬移,造成性能下降。對(duì)于嵌入式系統(tǒng)尤其是消費(fèi)類設(shè)備,由于成本的原因,其總線帶寬(包括內(nèi)存總線與外部總線)都是相對(duì)有限的,因此,在這類總線中的數(shù)據(jù)搬移造成的延遲,是不能忽略的(而PC機(jī)的設(shè)計(jì)中,由于高速的內(nèi)存吞吐量,往往這個(gè)延遲是可以忽略的)。

(2)緩沖和cache的存在,會(huì)造成具體動(dòng)作更多不可預(yù)測(cè)性,這違反了實(shí)時(shí)系統(tǒng)的需求。因?yàn)榍度胧较到y(tǒng)很多層面都有一定的實(shí)時(shí)性要求;其次,增加了硬盤電源管理的難度,即硬盤狀態(tài)將頻繁切換,減少有機(jī)會(huì)進(jìn)入省電的Idle模式及更加省電的Sleep模式,浪費(fèi)了硬盤自身APM(Advanced Power Management)帶來的好處。
因此,在本設(shè)計(jì)中需要對(duì)預(yù)讀機(jī)制進(jìn)行管理,甚至去除預(yù)讀機(jī)制。實(shí)際上是對(duì)文件讀實(shí)現(xiàn)中的do_generic_file_read( )函數(shù)進(jìn)行改造,去除了預(yù)讀判斷機(jī)制,采用直接調(diào)用方式。

2.3 Page機(jī)制改進(jìn)

整個(gè)文件系統(tǒng)的讀操作,將以page為單位進(jìn)行相應(yīng)的規(guī)劃,即以4 096B為考慮對(duì)象。而在真實(shí)的磁盤系統(tǒng)中,由于大容量磁盤的普及,4 096B幾乎成了最小的物理扇區(qū)。面對(duì)這樣的磁盤系統(tǒng),其FAT文件讀寫具體實(shí)現(xiàn),實(shí)際上不能充分利用底層硬件以及驅(qū)動(dòng)程序提供的各種優(yōu)化措施,如DMA等[6-7]。

針對(duì)這樣的思路,需要引入多個(gè)page讀操作的相關(guān)性,即在fat_readpage( )之前增加多個(gè)page合并的判斷??梢越梃bRequest合并的方式進(jìn)行page合并,即通過目標(biāo)地址判斷的方式進(jìn)行合并部分Page讀動(dòng)作。

3 優(yōu)化實(shí)例

在實(shí)際優(yōu)化中,采用了前面提到的三種優(yōu)化策略,在某一個(gè)實(shí)際的系統(tǒng)上進(jìn)行相應(yīng)的測(cè)試,取得了較好的效果。
圖4是一個(gè)ARM嵌入式系統(tǒng)的詳細(xì)測(cè)試結(jié)果。該測(cè)試的物理實(shí)施條件是:

ARM7TDMI的系統(tǒng),CPU頻率88MHz,8KB i-cache/no d-cache;硬盤掛接的EMIF為44MHz,16bit位寬;SDRAM為32bit位寬,運(yùn)行在88MHz下;硬盤為4 200轉(zhuǎn),20GB;系統(tǒng)采用μCLinux 2.4.18。

測(cè)試采用發(fā)起read( )用戶讀操作進(jìn)行相應(yīng)的測(cè)試。其中每個(gè)測(cè)試采用不同大小的buffer來觀察實(shí)際優(yōu)化前/后的訪問速率比較。

從測(cè)試結(jié)果可以看出,在采用buffer為8KB進(jìn)行文件讀時(shí),可以取得超過50%以上的訪問性能的提升。同時(shí)在這種測(cè)試條件下,也獲得了最好的讀性能,達(dá)到2MB/s以上的測(cè)試性能。這個(gè)讀性能基本上已可以滿足很多多媒體系統(tǒng)所需要的數(shù)據(jù)流要求。

同時(shí)在這種優(yōu)化策略下,應(yīng)用系統(tǒng)可以有針對(duì)性地優(yōu)化應(yīng)用程序中的各種讀操作。建議采用4KB或者8KB的buffer,使系統(tǒng)運(yùn)行在最佳的狀態(tài)。

本文仔細(xì)分析了Linux的FAT32實(shí)現(xiàn)中讀操作的具體實(shí)現(xiàn)過程,針對(duì)FAT32系統(tǒng)實(shí)現(xiàn)的缺陷,提出了多種優(yōu)化策略,并在某一個(gè)嵌入式設(shè)備中進(jìn)行具體的優(yōu)化和測(cè)試,取得了一定的性能提升。最后給出了對(duì)應(yīng)用程序設(shè)計(jì)的建議。

文件系統(tǒng)優(yōu)化是一個(gè)非常深?yuàn)W的課題,尤其是嵌入式系統(tǒng)的文件系統(tǒng)設(shè)計(jì),針對(duì)不同的應(yīng)用,應(yīng)有不同的優(yōu)化目標(biāo)。本文介紹了初步的優(yōu)化方法,在某一個(gè)具體的嵌入式設(shè)備上進(jìn)行相應(yīng)的實(shí)踐,取得了良好的效果。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 文件系統(tǒng) Linux FAT32

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉