2010-12-05 77 views
1

我正在嘗試修改ext3文件系統。基本上我想確保文件的inode與其存儲元數據的文件保存在相同的(或相鄰的)塊中。這應該可以幫助磁盤訪問性能更改inode行爲

我抓住內核源代碼,編譯它,讀了一堆關於節點,並期待在FS子目錄中的文件inode.c中。然而,我只是不確定如何確保任何正在創建的新文件以及該文件的inode可以保存在相同或相鄰的塊中。任何幫助或指向進一步閱讀將不勝感激。謝謝!

回答

0

有趣的想法。

我不是深深熟悉的ext3,但我可以給你一些一般的指針。

當前ext3在預定位置存儲inode。每個塊組都有自己的inode表,這是一個inode數組。所以當你有一個索引節點號時(例如,作爲在一個目錄中查找文件名的結果),你可以通過首先使用索引節點編號來選擇正確的塊組然後索引到該塊組的inode表。

如果你想要把inode的旁邊,相應的文件數據,你需要尋找在磁盤上一個inode一項新的計劃。如果您願意爲每個inode分配一個塊,則可能的方案是每次需要inode時分配一個新塊,然後使用該塊號作爲inode編號。這可能有好處,對於小文件,您可以將數據存儲在同一個塊中。

爲了做到這樣的事情,創建一個新文件(即分配一個inode)必須與當前的ext3文件系統非常不同。不必使用位圖來查找未使用,預分配和預初始化的inode,您將不得不分配空白塊並自行初始化它。因此,您可能需要考慮文件系統在寫入文件時如何分配塊,然後模擬分配inode的情況。

另一種方案是將索引節點店內的目錄。因此,保存I/O不是因爲inode位於其數據旁邊,而是因爲在查找文件名時還讀取了inode。這是在90年代作爲BSD的FFS文件系統中的一個實驗完成的,並且寫成了非常好的USENIX Paper。這些想法從來沒有將其引入FFS或我意識到的任何其他主流文件系統,所以看看它們如何在ext3中工作可能很有趣。

無論您是追求這些方案中的一種或拿出自己的東西,你也必須修改mke2fs的來初始化磁盤上的文件系統的方式,新的文件系統變種就會明白。

祝你好運!這聽起來像一個有趣的項目。

0

進入文件系統設計的榮譽!

首先,有些工程諮詢你之前也深入到黑客:使ext3的樹的副本和文件系統重命名爲別的東西。我發現,在將實驗性更改引入文件系統時,您確實不希望將其用於主系統。即使你引入了一個隨機丟失文件的錯誤(它最終會發生),你的系統仍應該啓動。你還需要分支ext3用戶空間工具來處理你的新系統。

其次,去了播威和Cesati得到Understanding the Linux Kernel, 3 ed.副本。它展示了內核子系統的組織視圖,我發現它的解釋是值得的。它是爲較舊的內核編寫的(2.6。x對於某些x < 15;我完全忘記了),但它在許多地方仍然是準確的。通讀它對文件系統的描述。我相信它涵蓋了ext3。

第三,關於你的實際項目,你不是在對ext3進行簡單的修改。該文件系統有一個非常簡單的將inode編號映射到磁盤塊的方法。你需要找到一個做這種映射的新方法。我不會預料到其他ext3的任何變化。解決這一挑戰可能是您架構的關鍵設計要點之一。請注意,保留大量inode - >磁盤塊映射並不能解決您的問題:它可能不會比現有的ext3更好。