吳京洪,曾學文,李明哲,陳 君
(1.中國科學院聲學研究所國家網絡新媒體工程技術研究中心,北京100190;2.中國科學院大學,北京100039)
面向流式數據的嵌入式文件系統
吳京洪1,2,曾學文1,李明哲1,2,陳 君1
(1.中國科學院聲學研究所國家網絡新媒體工程技術研究中心,北京100190;2.中國科學院大學,北京100039)
嵌入式服務器相對于傳統服務器具有一定的特殊性和專用性,傳統的文件系統難以滿足特定嵌入式平臺高效存儲的需求。針對某特定嵌入式平臺下大容量流式數據存儲效率低下的問題,提出一種面向大容量流式數據的嵌入式文件系統SEFS,其中創建文件時借助三層樹狀統計結構為新文件快速預分配存儲空間,采用基于磁盤飽和度的均衡存儲策略。實驗結果表明,SEFS創建單個文件用時59 ms,與Ext2和MSFS文件系統相比,讀文件速率分別提升了8.63%和6.45%,寫文件速率分別提升了6.48%和2.94%,并且具有較好的存儲均衡性和穩定性。
大容量;流式數據;嵌入式文件系統;預分配;磁盤飽和度
隨著網絡應用的發展,大量的流式數據在世界各地產生并共享,從而對海量可擴展的存儲系統的需求也快速增長,基于流服務的網絡應用快速增長,對大容量、高可靠性、高可用性、高性能、動態可擴展性、易維護性和開放性等眾多方面提出更高的需求,現有存儲技術已受到空前的挑戰。同時,流式數據存儲系統往往存儲大量的大文件,典型的文件有幾百MB,甚至一些文件達到幾GB,因此要重點考慮大文件的存儲[1-2]。
傳統的嵌入式系統資源有限,結構和功能比較簡單,通用的文件系統因不能發揮其優勢而不再適用于某些嵌入式系統。鑒于嵌入式系統的局限性、特殊性和專用性,很少采用完備的文件系統,而是需要為這樣的嵌入式系統定制文件系統。本文結合嵌入式系統的特點,提出一種面向流式數據的嵌入式文件系統,以滿足流式應用的存儲需求。
現有主流的商用嵌入式文件系統包括QNX提供的POSIX文件系統、VxWorks提供的快速文件系統(FFS)、pSOS文件管理系統pHILE+和VRTX提供的文件系統IFX,以上4種嵌入式文件系統是現在商用嵌入式文件系統的主流,占領大部分的市場,也代表了這個領域的先進技術。但是由于商業機密的限制,源代碼和核心技術不可能公開,購買和維護的費用昂貴。而且由于嵌入式系統的專用性,無法形成統一的標準[3-4]。在自由軟件方面,嵌入式Linux和LynxOS均提供了實時的類UNIX層次結構文件系統和虛擬文件系統體系結構,因此,嵌入式Linux[5]得到了廣泛應用,也產生了很多基于嵌入式Linux的專用文件系統[6],包括Rom fs[7],Cram fs,Ram fs,JFFS2和YAFFS,其特點及缺陷如表1所示。

表1 常見嵌入式Linux文件系統優勢與缺陷
嵌入式系統的應用范圍非常廣泛,不可能有一種文件系統在所有嵌入式系統中一統天下,適用于大到嵌入式服務器,小到嵌入式機頂盒等的所有情況,應根據系統應用環境和目標等來選擇構建合適的文件系統[8]。
現有的面向流式數據的文件系統往往應用于集群中,主要解決的問題集中在并發服務能力、磁盤I/O、QoS方面[9],以滿足流服務中用戶對流式數據實時性、連續性、同步性的需求,其中,磁盤I/O性能往往是服務能力的關鍵體現,而現有技術尚未完全解決面向流式數據的文件系統的I/O性能低下的問題。
本文對嵌入式文件系統的需求分析一方面考慮了嵌入式存儲系統內在與外在的環境要求,另一方面考慮了目前存在的問題[10]。通過將這兩方面結合,根據流式數據的特點,設計適用于大容量流式數據的嵌入式文件系統。
本文設計并開發出了一種面向大容量流式數據的嵌入式文件系統(Stream ing based Embedded File System,SEFS),該文件系統實現了特定嵌入式平臺下大容量流式數據可靠、穩定的存儲。SEFS整體結構如圖1所示。

圖1 SEFS整體結構
3.1 數據區
數據區的組成單元是數據塊,用來存放流文件內容,每一個數據塊對應若干個物理上連續的磁盤扇區,如圖2所示,從而將對扇區的物理尋址轉換成對數據塊的邏輯地址空間的尋址,數據塊的大小取決于文件系統管理的流文件的容量,在HDFS中數據塊大小為64 MB[11],本文所述的SEFS中采用同樣大小的數據塊。

圖2 數據塊和扇區映射圖
數據區占據了絕大多數存儲空間,海量的數據塊中既有已存儲流式數據的“忙碌”數據塊,也有尚未被使用的“空閑”數據塊,為保障已存文件的數據安全,也為了更好的利用空閑存儲空間,文件系統需要對這些數據塊的狀態進行準確、高效的管理。
3.2 位圖區
位圖的作用是標記數據塊的使用狀態。其中,忙碌的數據塊用“1”標識,而空閑的數據塊則用“0”標識,如圖3所示。

圖3 位圖示意圖
數據塊的數量極其龐大,當需要為新文件分配存儲空間時,需找到一系列空閑數據塊[12],若輪詢整個位圖區將會大大降低創建文件的效率。考慮將數據塊分組管理[13-14],每個組的數據塊狀態用一個位圖塊來表征,只在單個組內為一個新文件分配存儲空間,從而創建文件時只需要輪詢一個位圖塊而不是整個位圖區,可大大提高創建文件的效率。
3.3 統計塊
一個位圖塊表征了一個數據塊組內所有數據塊的使用狀態,而統計塊則對每個位圖塊中“0”的數量和最大“連續0的數量”進行統計,分別表示組內空閑數據塊總數和最大連續空閑數據塊的數量。
為新文件分配存儲空間時,首先計算出需要分配的數據塊數量,查詢統計塊中各數據塊組的統計信息,找到一個能滿足分配需求的數據塊組,最終將新文件創建和分配定向到該數據塊組內進行。
3.4 索引區
索引區由若干索引節點組成,索引節點中存儲著流文件的元數據,包括文件大小、文件所在磁盤編號、文件索引號、文件類型、文件創建時間和存儲文件的數據塊位置信息等。其中,索引節點中采用若干區段的形式記錄數據塊位置信息,每個區段包含起始數據塊編號和連續存放文件內容的數據塊的數目,區段信息和數據塊位置的映射關系如圖4所示。

圖4 數據塊區段映射
3.5 文件目錄
本文所述文件系統未采用傳統的樹狀文件目錄結構,而是采用了扁平式目錄結構,簡化后的扁平式目錄結構易于管理和維護。文件目錄作為文件系統的入口,將文件名映射成索引節點號,如圖5所示。

圖5 文件目錄映射
通過索引節點號可直接訪問文件元數據(索引節點),再通過索引節點信息可查詢文件和讀寫文件數據。
文件名的長度不可預知,一般從幾字節(Byte)到幾十字節不等,有的甚至上百字節,若文件系統中直接存儲文件名,則需要為其預留不小的存儲空間,這不僅會造成空間浪費,且當文件名長度超過預留的空間時文件系統還將無法響應創建新文件的請求。通過選取合適的哈希算法(MD5摘要算法)可將長度不可控的文件名映射成長度固定為16 Byte的MD5碼,既避免了浪費空間,又能解除對文件名長度的限制。
3.6 超級塊
超級塊中記錄了磁盤扇區大小、扇區數、索引節點總數及空閑索引節點數、數據塊大小、物理磁盤信息及磁盤邏輯卷信息等,超級塊中的信息對文件系統至關重要,當系統異常或崩潰時,需要借助超級塊中信息來完成恢復。因此,超級塊中數據需寫入磁盤的特殊位置進行保護,還需有多個備份以確保數據安全。
SEFS主要提供創建文件、刪除文件、讀寫文件、查詢文件的功能。
4.1 文件的創建及刪除
本文所述文件系統采取為新文件預分配存儲空間的策略,即創建文件時便為文件指定大小,且創建后文件大小不再更改。文件創建和刪除時最主要的操作就是為文件分配和釋放存儲文件內容的數據塊。
新建文件時,根據指定的文件大小,計算出存儲該文件需要的數據塊數目,查詢如圖6所示樹狀統計結構,便能在最短時間內找到能滿足分配需求的數據塊組,繼而將新文件創建定向到找到的數據塊組內。

圖6 三層樹狀統計結構
具體來說,先通過超級塊中信息定位到某統計塊,再通過統計塊中信息定位到某位圖塊,找到一個位圖塊即找到了一個數據塊組,在該組內為該新文件分配存儲空間,分配時采用盡可能連續分配的策略,以保證文件的快速讀寫。
刪除文件時,通過將位圖塊中與該文件對應的位“1”置為“0”來回收存儲文件的數據塊,重新掃描該位圖塊,將位圖塊中最新統計信息更新到統計塊中,再掃描對應統計塊,并將其統計信息更新到超級塊中,以此維護位圖信息。最后,清空文件索引節點數據,并刪除文件目錄中對應項。
4.2 文件訪問
訪問文件包括對文件的讀、寫和查詢操作,首先需要通過文件目錄將文件名映射到索引號,通過索引號找到文件對應的索引節點,該索引節點中存儲了文件相關元數據,即可實現對文件的訪問。
如需查詢文件大小,訪問文件對應索引節點相關字段,可直接從該文件元數據中獲取;若需讀/寫文件,則需要索引節點中的區段信息進行引導,通過區段信息找到存儲文件的數據塊,進一步通過計算可以把文件讀/寫的位置偏移映射到具體某個磁盤扇區和扇區內偏移,最后調用底層I/O接口便可讀/寫文件。
4.3 均衡存儲
在流式數據應用場景中,流文件最終被存儲到磁盤陣列中,每一個新文件被存儲到哪塊磁盤完全由文件系統(SEFS)決定,考慮存儲的均衡性是很有必要的,否則可能造成某些磁盤存儲大量數據而其他磁盤被浪費的情況,且當存儲大量數據的磁盤損壞時大量數據丟失會帶來災難性損失。
為實現均衡存儲,首先定義磁盤飽和度C,由磁盤已使用容量和存放文件數量共同決定。存放文件數量越多,磁盤已使用容量越大,則磁盤飽和度越高。計算飽和度采用對已使用容量和已存儲文件數歸一化后加權的方法,詳細定義如下:

其中,Vu表示已使用容量;V表示磁盤總容量;表示已存儲文件的數量,表示按典型文件大小存儲,磁盤最多能存儲的文件數,和的值均不能超過1,和為調節因子。
新建文件時查詢各磁盤使用情況,得到各磁盤已使用容量和已存文件數量,計算各磁盤飽和度,將飽和度最低的磁盤作為本次分配的目標磁盤,創建成功后更新該磁盤使用情況,供下一次新建文件時查詢,以此實現均衡存儲的目標。
本文設計的文件系統所基于的嵌入式平臺是以Cavium OCTEON CN5860為核心的多核嵌入式網絡處理器[15],每個多核網絡處理器具有16個處理核心,每個處理核心主頻為800 MHz,物理內存大小配置為4 GB。本文在上述嵌入式平臺下針對SEFS創建文件的效率、I/O性能、存儲均衡性及穩定性方面做了測試。
5.1 創建效率測試
實驗記錄了創建一批大小隨機的文件所用的時間,測試結果如圖7所示。

圖7 文件創建效率測試結果
對于文件系統而言,創建文件的速率是衡量其好壞的一項重要指標,從圖中數據可以看出,創建一批文件所用時間跟文件數成正比,創建4 096個文件用時242 s,計算可得創建一個新文件平均用時為59 ms,此創建效率在流式數據應用中較高。
鑒于SEFS創建文件時已為文件預分配存儲空間,它創建文件的機制與通用文件系統有很大差異,因此,它與通用文件系統在創建文件的效率上不具有可比性。
5.2 I/O性能測試
Linux的主流文件系統是Ext2/Ext3,其中Ext3是日志文件系統,比Ext2功能更健全,但在文件讀寫速率方面兩者相差無幾;MSFS[10]是一種基于μCinux的大容量媒體文件系統,它較傳統的嵌入式文件系統有更好的存儲性能和穩定性。所以本文選取Ext2和MSFS分別作為嵌入式Linux文件系統和嵌入式流媒體文件系統的代表,與SEFS進行I/O性能對比。實驗使用不同的緩存區(32 KB、64 KB等)對不同大小文件(512 MB、1 GB等)進行了多次讀寫測試,統計3種文件系統的平均讀寫速率,對比結果如圖8所示。

圖8 I/O性能測試結果
測試結果顯示,SEFS的I/O性能優于其他2種嵌入式文件系統,讀文件的速率分別比Ext2和MSFS快8.63%和6.45%,寫文件的速率分別比Ext2和MSFS快6.48%和2.94%,實驗證明SEFS具有較好的I/O性能,能支持大容量流式數據的快速讀寫。
5.3 均衡存儲測試
實驗創建了2 048個大小隨機的文件,對應于64個磁盤,統計各磁盤中文件數量和消耗的磁盤容量,測試結果如圖9所示。

圖9 均衡存儲測試結果
從圖9中可以看出2 048個文件被相對均勻地創建到各磁盤中,每個磁盤中文件數在32左右波動;由于新建的文件大小隨機,在文件數和每個文件大小均具有一定隨機性的前提下,各磁盤中消耗的容量在96 GB左右波動。綜上所述,圖9的測試結果顯示SEFS具有很好的均衡存儲性。
5.4 穩定性測試
實際使用場景中,系統會頻繁地創建新文件和刪除舊文件,使用一段時間后系統中會產生一定數量的磁盤碎片,位圖信息也會變得復雜凌亂。這時候系統是否還能正常工作或性能是否會有明顯下降,這在很大程度上取決于文件系統的穩定性。
實驗中模擬實際場景中的用戶行為,周期性地隨機創建和刪除一批文件,記錄總共創建過的文件數和刪除過的文件數,每次創建或刪除文件后更新磁盤中數據塊使用的理論值,直到磁盤使用率達到設定的飽和狀態時才結束,統計實際使用的數據塊數目,通過對比被使用數據塊的理論值和實際值來判斷系統是否正常工作。測試結果如表2所示。

表2 穩定性測試結果
上表測試結果表明,頻繁地在系統中創建和刪除文件,系統運行較長時間后,數據塊被使用數的實際值和理論值吻合,系統工作正常,數據塊管理準確無誤,說明SEFS具有較高的系統穩定性。
與通用文件系統不同,本文設計的文件系統(SEFS)結構簡單,易于維護,主要用于特定嵌入式系統中大容量流式數據的存儲。在流式數據應用場景中,存儲后的文件不需要改變文件大小,因此文件系統創建新文件時采用為其預分配存儲空間的策略,且按盡可能連續分配的思想,最大限度保障文件存儲的連續性,以實現文件的高速吞吐和高效存儲。實驗結果顯示SEFS創建單個文件平均用時59 ms,考慮到該創建過程完成了新文件注冊、存儲空間分配、元數據管理等諸多操作,可認為SEFS創建新文件的效率較高,SEFS讀寫文件的速率相比于嵌入式文件系統Ext2也分別有8.63%和6.48%的提升;此外,SEFS具有很好的存儲均衡性和穩定性,能滿足嵌入式系統中大容量流式數據的存儲需求。下一步目標是完善SEFS對外提供的接口,為用戶提供可靠穩定的文件操作服務,進一步優化文件系統內部的I/O調度機制,支持流式數據的高并發讀寫,并盡可能地降低系統開銷。
[1] 萬繼光,詹 玲.集群多媒體存儲系統的兩級元數據管理[J].小型微型計算機系統,2009,30(4):752-756.
[2] Sun Yanhua,Fang Jun,Han Yanbo.A Distributed Realtime Storage Method for Stream Data[C]//Proceedings of Web Information System and Application Conference. Washington D.C.,USA:IEEE Press,2013:314-317.
[3] 余婷婷.嵌入式文件系統的研究與設計[D].武漢:武漢理工大學,2007.
[4] 徐 晟.嵌入式文件系統的研究與實現[D].成都:電子科技大學,2006.
[5] 吳 嫻.嵌入式Linux文件系統的設計和實踐[D].蘇州:蘇州大學,2003.
[6] 余東東.基于μC/OS II的嵌入式文件系統的研究與實現[D].上海:上海交通大學,2007.
[7] 徐 菲,胡迪青.對ROMFS文件系統的分析和改進[J].微計算機信息,2007,23(12-2):75-77.
[8] 姜春茂,段 瑩,黃春梅.嵌入式Linux文件系統剪裁方法研究[J].計算機科學,2008,35(9):282-284.
[9] 胡國棟.基于網絡存儲的流媒體服務器系統[D].杭州:浙江大學,2012.
[10] 欒德杰,倪 宏,潘 梁,等.基于μClinux的大容量媒體文件系統[J].計算機工程,2011,37(6):32-34.
[11] 付東華.基于HDFS的海量分布式文件系統的研究與優化[D].北京:北京郵電大學,2012.
[12] 欒德杰,倪 宏,潘 梁,等.一種基于啟發式算法的數據塊擴展預分配策略[J].微計算機信息,2010,26(12-2):70-71,101.
[13] 黃 華,張建剛,許 魯.藍鯨分布式文件系統的分布式分層資源管理模型[J].計算機研究與發展,2005,42(6):1034-1038.
[14] 楊德志,黃 華,張建剛,等.大容量、高性能、高擴展能力的藍鯨分布式文件系統[J].計算機研究與發展,2005,42(6):1028-1033.
[15] Cavium.OCTEON Plus CN58XX Multi-core M IPS64 Processors[EB/OL].[2014-07-25].http://www.cavium.com/Table.html#Octeonplus.
編輯 金胡考
Em bedded File System Oriented to Stream ing Data
WU Jinghong1,2,ZENG Xuewen1,LIM ingzhe1,2,CHEN Jun1
(1.National Network New Media Engineering Research Center,Institute of Acoustics,Chinese Academy of Sciences,Beijing 100190,China;2.University of Chinese Academy of Sciences,Beijing 100039,China)
Embedded servers have some specificities com pared with traditional servers.Traditional file systems can no longermeet the demands of efficient storage for some specific embedded systems.This paper proposes a Streaming Embedded File System(SEFS),which is oriented to large capacity of streaming data,for a particular embedded system to solve the problem of low efficiency storage.In SEFS,storage space is rapidly pre-allocated in virtue of a three-layers tree structure of statistics while creating new files.In addition,it applies disk saturability-based strategies to guarantee storage balance of SEFS.Testing results show that this system creating a new file by SEFS costs 59 ms,the reading rate of SEFS is faster than Ext2 and MSFS by 8.63%and 6.45%respectively,and the writing rate of SEFS is faster than Ext2 and MSFS by 6.48%and 2.94%.Testing results also demonstrates SEFS has better storage balance and stability.
large capacity;stream ing data;embedded file system;pre-allocation;disk saturability
吳京洪,曾學文,李明哲,等.面向流式數據的嵌入式文件系統[J].計算機工程,2015,41(9):92-96.
英文引用格式:Wu Jinghong,Zeng Xuewen,Li Mingzhe,et al.Embedded File System Oriented to Stream ing Data[J]. Computer Engineering,2015,41(9):92-96.
1000-3428(2015)09-0092-05
A
TP311
10.3969/j.issn.1000-3428.2015.09.016
國家科技支撐計劃基金資助項目“新媒體資源編解碼與高密度內容實時適配關鍵技術研究及原型系統”(2012BAH18B04);中國科學院重點部署基金資助項目“NGB智能接入網關關鍵技術研究與驗證”(KGZD-EW-103-4)。
吳京洪(1988-),男,博士研究生,主研方向:網絡存儲,新媒體技術;曾學文,研究員;李明哲,博士研究生;陳 君(通訊作者),副研究員。
2014-09-13
2014-11-11 E-m ail:chenj@dsp.ac.cn