• 沒有找到結果。

RAM-Space Requirements

在文檔中 嵌入式儲存系統效能評估 (頁 30-35)

四、 Flash-Memory-Based File-System Benchmarks

4.2 RAM-Space Requirements

這一個章節我們要探討的便是在這眾多的檔案系統中,我們要探討的是三種 檔案系統在一般的工作量(workload)下和一些特殊的情況下,為了維持系統運作 所要佔用的記憶體空間的多寡。

由於在使用快閃記憶體為主要儲存體的嵌入式系統中,大部分的嵌入式系統 只用於某些特定用途,通常系統整體的大小不大,加上為了節省成本和降低電力 消耗量(power consumption),導致嵌入式系統使用的資源相當有限(低頻率的

CPU,少許的記憶體)。一般的情形下,嵌入式系統所擁有的記憶體,不管是 ROM 記憶體或是 RAM 記憶體都局限在 64MB 以下,所以在資源有限的情形下,一個 設計良好的嵌入式儲存系統運作時是不應該佔據太多 RAM。優良的快閃記憶體 檔案系統應該盡可能節省維持運作所佔用的 RAM 量,並將絕大部分資源都給使 用者進程(process)去運用。

4.2.1 Performance issues

本章節針對為一個快閃記憶體檔案系統所需要的各種 RAM-resident 資料 結構作一討論。這些需求往往與快閃記憶體的物理特性有關,因此與以往之磁碟 檔案系統之需求大不相同。基於這些影響 RAM 空間使用量的因素,我們後續章 節會接著討論如何對這些因素做效能評比。

4.2.1.1 Address Translation

由之前章節 3 所提及的觀念位址轉換可知,快閃記憶體檔案系統為了實現位 址轉換都會利用一些儲存在記憶體中的位址對應表。相對於各檔案系統所使用的 對應階層不同,所需的位址對應表大小和佔用的記憶體空間也就大不相同,會使 得影響記憶體使用量的因素不僅僅祇有檔案系統中儲存檔案的個數,例如:JFFS2 中類似 node-level 的對應關係,使得 JFFS2 的記憶體使用量是和檔案系統中儲存 的 raw node 個數有絕對的關系,而且影響的效果相當顯著。所以在之後的三種 檔案系統實作位址轉換的段落中,我們會一一的介紹 JFFS2,YAFFS 和 NFTL 中 實踐位址對應表(address translation mapping table)的觀念,並在之後的實驗中,再 借由這些原理來設計實驗範例,來探討這 3 種檔案系統在特定情形和工作量 (workload)下,所使用的記憶體大小和利弊關係。

4.2.1.2 File-system management structure

在這三種記憶體檔案系統中,使用記憶體的地方,除了上一段提到的實現位 址轉換功能所使用的資料結構之外,快閃記憶體檔案系統儲存在記憶體的資料結 構還有哪些呢?扣除一些 read/write 時讀入的使用者的檔案資料之外,其他還有 管理檔案系統所必須的 metadata 資訊。這些 metadata 資訊會紀錄著每個檔案系 統的運作時的即時資訊,例如:JFFS2 中有使用三種以上不同的串列來區別檔案 系統中每個區塊的使用狀態,依照區塊內含無效資料的多寡區分成 clean_list、

dirty_list、very_dirty_list 和 erasable_list 等狀態不同的區塊,方便之後垃圾回收 挑選目標區塊時,能快速區分出較有回收效益的區塊。而這些 metadata 通常是 在檔案系統掛載完畢後,就一定會存在於記憶體的資料結構,不管檔案系統中是 否存有任何的檔案,也就是檔案系統天生擁有的最低記憶體消耗的資料結構,不 過這些 metadata 佔有的記憶體空間差異不大,而且不管在那一種情況中都是消 耗固定的記憶體,不會隨著使用者使用的情況的改變而產生大變化,因此我們對

這部份的探討便不太深入的探究,因為我們對會依照情況改變而有大程度改變的 項目較有興趣。

4.2.1.2 Directory hierarchy structure

在記憶體中的資料結構,還有微詞目錄階層架構的功能,例如:YAFFS 使用 yaffs_object 的資料結構來建構出整個檔案系統的目錄架構。JFFS2 在記憶體中的 資料結構除了位址轉換的功能之外,也提供了類似目錄階層架構的關係,可以使 得檔案系統迅速的找到所屬目錄和檔案在檔案系統中相對映的親子(parent-child) 關係。這也是檔案系統中必須的功能之一,但在 NFTL 只提供了邏輯位址和實體 位址的對應關係,其檔案系統中的目錄結構關係,必須藉由底下搭配的 FAT 和 EXT2 等檔案系統去管理和控制,所以在之後實驗記憶體使用量上的比較,我們 也就必須考量到 NFTL 底下搭配的檔案系統所使用的記憶體量。

4.2.2 File-System Implementations

接下來我們會依序介紹 3 個快閃記憶體檔案系統,是如何實作位址轉換的機 制,以便實現 out-place 策略來管理快閃記憶體的空間。

4.2.2.1 JFFS2

在 JFFS2 中使用的資料結構相當的多,簡單的分類介紹一下。首先是一般常 備在 filesystem 的資料結構,主要是每一個檔案和目錄都會有一個 inode 去表示,

而 JFFS2 會在這些 indoe 的附加資訊中加入 jffs2_indoe_info 的資料結構,其中會 連接著一個 jffs2_full_dirent 的 list 和一個 jffs2_inode_cache,而這個

jffs2_inode_cache 中又會指向一個 jffs2_raw_node_ref 構成的 list。這些 jffs2_raw_node_ref 主要是用來指向儲存在 flash 上 jffs2_raw_inode 和

jffs2_raw_dirent 的實體位址。在檔案系統剛建立的時候,系統會掃描整個快閃記 憶體來建構這些資料結構,再利用這些資料結構來組成系統初期的目錄階層關 係。

JFFS2 為了實作位址轉換的機制,所使用記憶體映成(memory mapping)的關 係,大致上可以分作兩種。一種是當 inode 為開啟的檔案的時候,另一種情形 indoe 是一般目錄。這兩種情況下的對應關係圖,分別為圖表 11 和圖表 12 所表示。

首先當 inode 用來表示 file 時,在 jffs2_indoe_info 中會有一個指向由

jffs2_inode_frag 所構成的 list,當開啟檔案時會利用這個串列(list)建立 frag tree,

而這個 frag tree 是依照所對應的 raw node 的版本(version)大小所建立,所以參照 這個 frag tree 可以建構出擁有最新版本(version)的檔案內容。而每一個

jffs2_inode_frag 會對應到一個 jffs2_raw_node_ref,並紀錄所對應到的

jffs2_raw_node_ref 中的實體位址的偏移量(physical address offset)為何以及被多 少個 frag nodes 參照到,沒被任何 frag node 參照到的 jffs2_full_dnode 便會被刪 除。因此每當檔案更新片段的資料,除了新增一個 jffs2_raw_node_ref 之外,還 要新建對應的 jffs2_node_frag 和 jffs2_full_dnode 這兩個資料結構。(圖表 11)

圖表 11. The JFFS2 structure when open a file.

當 inode 為目錄時,jffs2_indoe_info 中 jffs2_full_dirent 的 list 便是表示著這 個目錄底下所擁有的子目錄或檔案,每一個 jffs2_full_dirent 又會指向一個 jffs2_raw_node_ref,這些 jffs2_raw_node_ref 就指向 flash 中儲存 jffs2_raw_dirent 的實體位址。jffs2_indoe_info 會另外對應到一個 jffs2_full_dnode,再尋線(透過 jffs2_raw_node_ref)可找到對應的 jffs2_raw_inode 的實體位址。這些

jffs2_raw_node_ref 會構成 jffs2_indoe_info 上指向 jffs2_inode_cache 中的 jffs2_raw_node_ref 的串列。 (圖表 12)

圖表 12. The JFFS2 structure of opening directory.

4.2.2.2 YAFFS

YAFFS 儲存在主記憶體上的資料結構主要有 3 種:yaffs_Object, yaffs_Tnode 和 yaffs_Device。Yaffs_Device 是類似 Superblock 的資料結構,用來紀錄整個儲 存裝置的上下對應關係(EX:紀錄對應到的 MTD device 和讀寫所需的運算函 數)。Yaffs_nodes 是 YAFFS 中主要用來處理邏輯位址(logical address)和實體位址 (physical address)之間關係的資料結構(如圖表 13 所示),每一個檔案可以視為許 多的 yaffs_tnode,而底層 LEVEL 0 的 yaffs_tnode 會指向快閃記憶體中真正儲存 資料的 yaffs_object 的實體位址。

圖表 13. YAFFS 的 address translation (Tndoe-tree)

4.2.2.3 NFTL

NFTL在RAM上的資料結構只有NFTLrecond,而NFTLrecond的大小是 固定的佔用 364bytes的memory,其中主要是利用兩張表格(EUNtable和

RepUnitable)來模擬Virtual Unit Chain7進而達到位址轉換的關係,其中EUNtable 是一個logical to physical的表格,紀錄每一個block所屬的串鏈(chain)的起始實體 位址,而ReplUnitTable是一個physical to physical的表格,紀錄每一個在串鏈中 的區塊,以及之後的區塊的實體位址,以維持Virtual Unit Chain的結構。NFTL 管理所有的區塊的對應關係和運作如圖表 14.所示,圖表 14 有兩條virtual unit chain 分別為 4-6-8-5 和 2-0-7-1-3。

圖表 14. NFTL address translation

在文檔中 嵌入式儲存系統效能評估 (頁 30-35)

相關文件