五、 Experiment Design and Experiment Result
5.1.3 Numerical Result
5.1.3.1 Black-Box test
Normal Case (normal distribution)
實驗結果如下列表格 3和圖表 23所示,可以觀察出JFFS2,YAFFS和NFTL之 間各項數值都相差不遠,除了在fragment的部份。這是由於實驗環境下的頁面大 小為 512bytes,然而YAFFS中的用來儲存資料的部份是以chunk的大小 (等同於 一個page size的大小)為單位,因此在檔案的資料量小於 512bytes的情況下,資料 量無法填滿一個chunk,因此剩餘的空間變成了無法使用的fragment space。由於 這個normal case中有 23.4%的file小於等於 512bytes,所以迫使YAFFS和NFTL產 生不少的fragment。相對於YAFFS和NFTL而言,JFFS2 的儲存是利用許多個 jffs2_raw_inode和jffs2_raw_dirent去儲存,每一個raw node size會根據其後跟隨的 資料量影響而變動,但最終不會大於一個頁面的大小。因此對於細小的檔案而言 在JFFS2 的管理機制比較節省空間,不會產生過大的fragment。
JFFS2 中 fragment 產生的原因除了在 node align 所填入的 00x00 之外,還有 當區塊中最後一個 page 沒有足夠的空間去填入下一個 node 時,會採取捨去剩餘 的空間(設成 waste size),找下一個區塊來填入。所以在這個實驗範例中,相對之 下 JFFS2 產生 fragment 機會和浪費的 size 都較 YAFFS 小,所以浪費的空間也較 小。不過也由於 JFFS2 的 node 可以很細小(不見得是以 page 為單位),比較容易 產生同樣檔案散亂在不同區塊中的各處的結果,所以要用來管理紀錄 file 的 metadata 也相對的複雜,所以其所需的 metadata 的量會多一些。
在 NFTL 中由於底下掛載的系統為 FAT32 所以會有 fat table 的使用,共有約
2000 個檔案,所以 Fat table 至少要更新 2000 次以上,所以儲存 FAT TABLE 的 區塊會被不斷地串接起來。(後面會不斷看到這個策略所造成的影響,不但儲存 table 耗費固定的空間並且也是產生垃圾回收的主要原因。) 除了 FAT TABLE 的 影響之外,再加上 NFTL 和 YAFFS 相同是以 page 為單位寫入資料,所以對於那 23.4%的小檔案也會有 page size 未寫滿的 fragment 產生,因此耗費較多的可用空 間。
表格 3 The experiment result of Normal case
Normal case (file size 2Bytes~4MB) JFFS2 YAFFS NFTL Total space (Kbytes) 131072
Free space (Kbytes) 84738.5 84700.5 8279.3 Used space (Kbytes) 46333.5 46371.52 122792.7 User data (Kbytes) 45075.09 45075.09 45075.09 Metadata (Kbytes) 1241.8 1183.94 2669.95 Fragment (Kbytes) 16.6 112.5 75047.66 % of used space is user data 97.3% 97.2% 36.71%
Normal Case_NFTL
圖表 23. Result of Normal case
5.1.3.2 White-Box test
Case.1 Large File (All Large file>page size)
實驗結果如表格 4和圖表 24所示,可以看得出來在大檔案為多數時,YAFFS 由於使用的metadata object較少而有優勢,主要是每一個檔案只需要一個object
Normal case_JFFS2 0.01%
0.95%
34.39%
64.65%
Free space (Kbytes) User data (Kbytes) Metadata (Kbytes) Fragment (Kbytes) 34%
2%
6%
58%
Free space (Kbytes) User data (Kbytes) Metadata (Kbytes) Fragment (Kbytes)
Free space (Kbytes) User data (Kbytes) Metadata (Kbytes) Fragment (Kbytes)
header(Chunk 0),其他的都是儲存使用者 資料。而JFFS2 由於每一個raw node的 大小被限制不能超出一個page,所以每一個page中都會有raw node header的 overhead,所以在空間使用上略多於YAFFS2。在NFTL中由於底下掛載的系統為 FAT的影響,在必然的fat table耗費下,依舊使用了較多的實體空間來儲存相同資 料。
表格 4. The experiment result of Large file case.
Large file case size 2KB~2MB JFFS2 YAFFS NFTL Total space (Kbytes) 131072
Free space (Kbytes) 85055 85967.8 83337.3 Used space (Kbytes) 46017 45104.2 47734.7 User data (Kbytes) 45035 45032 45088 Metadata (Kbytes) 968.87 71.25 2625.11 Fragment (Kbytes) 16.13 0.94 21.6 % of used space is user data 97.87% 99.84% 94.46%
Large file case_JFFS2
0.74% 0.01%
64.89%
34.36%
Free space (Kbytes) User data (Kbytes) Metadata (Kbytes) Fragment (Kbytes)
Large file case_YAFFS
65.59%
0.05%
0.0007%
34.36% Free space (Kbytes)
User data (Kbytes) Fragment (Kbytes) Metadata (Kbytes) Large file_NFTL
2.00%
0.02%
63.58%
34.40%
Free space (Kbytes) User data (Kbytes) Metadata (Kbytes) Fragment (Kbytes)
圖表 24. Result of Large file case
Case.2 Very Large size file
實驗結果如表格 5和圖表 25所示,可以看出YAFFS在檔案size大且檔案數量 少的情形之下,metadata所佔用的空間非常少,空間利用度非常的好,近乎 100%
都可以給予使用者使用。而JFFS2 依然還是被node size給侷限著,一樣是上一個 實驗範例的原因。即使是連續儲存的大檔案依然要切割成page大小node來存放,
並在每一個page都要加入一個jffs2_raw_inode header的負擔,所以比YAFFS更耗 費一些空間再儲存metadata。NFTL由於FAT TABLE的關係,還是保持著相同的 metadata 消耗量。
表格 5 The experiment result of Very Large file case
Very large case (file size ) 2KB~2MB JFFS2 YAFFS NFTL Total space (Kbytes) 131072
Free space (Kbytes) 85033 86012.39 83385.31 Used space (Kbytes) 46039 45059.61 47686.7 User data (Kbytes) 45056 45056 45056
Large file case_JFFS2 0.74% 0.01%
64.89%
34.36%
Free space (Kbytes) User data (Kbytes) Metadata (Kbytes) Fragment (Kbytes)
Large file case_YAFFS 0.05%
Free space (Kbytes) 0.0007%
User data (Kbytes) 34.36%
Fragment (Kbytes) Metadata (Kbytes) 65.59%
Large file_NFTL
2.00% 0.02% Free space (Kbytes) User data (Kbytes) 34.40%
Metadata (Kbytes) Fragment (Kbytes)
63.58%
的fragment就大約是寫入資料量的 4 倍左右了。在metadata方面,YAFFS由於對 每一個檔案都要建立一個object header(Chunk 0)的關係,等於每一個不到一個 page SIZE的檔案,便需要使用兩個page去儲存。加上fragment的影響,所以使用 的空間至少是存入的使用者 資料兩倍以上,加上檔案數量不少(40000 多個檔 案),所以YAFFS至少要耗費 20000Kbytes來儲存metadata,因此YAFFS在small size file 大量的寫入時,空間使用率上非常差。但JFFS2 雖然表現較好,但還是由於 檔案數量太多,檔案的資料量太小(2~32Bytes),而迫使node header的大小大於 使用者資料量(jffs2_raw_indoe 和jffs2_raw_dirent分別需要 48Bytes和 52bytes),
所以導致JFFS2 空間利用度上的表現也是偏低的 38%。
表格 6 The experiment result of Small size file
Small case (file size ) 2B~512Bytes JFFS2 YAFFS NFTL Total space (Kbytes) 131072
Free space (Kbytes) 119261 86458.42 106302.3 Used space (Kbytes) 11811 44613.58 24769.703 User data (Kbytes) 4491.211 4491.211 4491.211 Metadata (Kbytes) 7278.79 24047.17 4332.15 Fragment (Kbytes) 41 16075.2 15946.34 % of used space is user data 38.03% 10.07% 18.13%
Small File Case_JFFS2
90.99%
5.55%
3.43%
0.03%
Free space (Kbytes) User data (Kbytes)
Free space (Kbytes) User data (Kbytes) Metadata (Kbytes) Fragment (Kbytes)
Small file case_YAFFS
3% 67%
綜合以上的實驗結果,在 space utilizeation 實驗的表現中可以得知,在於儲 存大容量檔案的表現上 YAFFS 表現的最為出色,但若是系統中多數的檔案大小
小於一個 page size 的話,使用 JFFS2 會比較節省空間。