星期日, 3月 04, 2007

令我日思夜想的檔案系統

奇怪,怎麼都沒人想到呢?

先前提到說,適當的將檔案系統壓縮,可以提高磁碟的存取效率 - 尤其是 CPU 速度與 IO 速度差很多的時候。雖然沒有完整的數據顯示到底快多少,不過 RANMA K 兄有初步測試過不壓縮與壓縮時的寫入、讀取速度。況且還有個良好的副作用 - 同樣大的硬碟空間裡,可以裝的東西更多了,而且完全不會變重

根據用屁股思考就可以領悟的常識,我們知道:

  1. CPU 的 IO 速度非常快(相對於硬碟)
  2. Disk 的 IO 速度非常慢(相對於 CPU)
  3. 大部分人的 Desktop PC,CPU 使用率並不會常保 100%...
  4. 越大的檔案越有機會產生 Fragmentation,而 Fragmentation 會增加 Seek Time。
  5. 若資料已經壓縮過了,再壓一次只是浪費時間。(呃... 廢話! = =)

所以,希望有一種檔案系統的,會根據檔案的狀態來選擇性的壓縮檔案,大概像這樣:

  1. 首先有個選項來針對檔案設定是否壓縮,例如 compress_attribute:
    • Always:總是壓縮
    • Automatic:根據下述規則決定是否壓縮
    • Never:絕對不要壓縮
  2. 如果檔案太小,就不壓縮。
  3. 如果檔案已經被壓縮過,就不壓縮。例如:
    • 一般壓縮檔:ace, bz2, gz, rar, tbz2, tgz, zip... etc.
    • 壓縮過的多媒體檔案:avi, mpg, mpeg, mp3, wma, wmv... etc.
    • 壓縮過的圖片檔:gif, jpg, mng, png... etc.
  4. 其他還沒想到的規則...

當然,這個檔案系統要有現代檔案系統該有的功能,例如:

  • Journaling
  • Online Repacker
  • POSIX ACL
  • Online resizing (grow and shrink)
  • 其他還沒想到的功能...

如果有相關的資料或論文,還請不吝留個言... 多謝!

1 則留言:

JackieKu 提到...

你的看法很有趣,聽起來似乎是可行的。不過自己做一個file system應該是相當大的工程,而且file system這種東西一定要穩定要不然意義不大,所以又更難了。不過Reiser4本身的壓縮加密部分似乎是plugin的形式,我在想是不是開發一個Reiser4的plugin就能達到這樣的需求呢?