1. 程式人生 > >TFS:新一代開原始檔系統

TFS:新一代開原始檔系統

譯者注:這篇文章主要對TFS的設計目標和一些常見的問題進行了描述,結尾部分提供了部分與TFS相關的資源供讀者參考。

TFS是一款模組化,快速且功能豐富的新一代檔案系統,採用現代技術使其具有高效能,高空間使用率和高擴充套件性,程式碼託管在Github上。

TFS是由於需要一個用於Redox OS的現代檔案系統而被建立的,作為ZFS的替代品,由於其整合設計思想而被證明不會很快的實現。靈感來源於ZFS,同時它的目標是模組化和易於實現。

TFS與terminalcloud的同名檔案系統無關。

設計目標

TFS 的設計目標如下:

併發

 TFS 包含很少的鎖,目的是儘可能適用於多執行緒系統。它利用多個真正的併發結構來管理資料,並按核心的數量進行線性擴充套件。這也許是 TFS 最重要的特性。

非同步

 TFS 是非同步的:操作可以獨立進行, 並且從磁碟寫入和讀取不需要阻塞。

全磁碟壓縮

 TFS是第一個通過我們稱之為RACC(隨機訪問叢集壓縮)的方案來整合的全盤壓縮的檔案系統。這意味著每個群集都被壓縮, 只會略微影響效能。據估計,可以獲得60-120%的可用空間。

修訂記錄

 TFS儲存每個檔案的修訂歷史記錄,而不會增加額外的開銷。 這意味著你可以將任何檔案還原到較早的版本,自動備份系統,而不會造成複製的開銷。

即寫即拷語義(寫時複製語義)

 與Btrfs和ZFS類似,TFS使用CoW語義,這意味著不會直接覆蓋叢集,而是複製並寫入新的叢集。

(1) 遞迴拷貝

 與一些檔案系統一樣,TFS 可以在不變的時間內執行遞迴拷貝,但是還有一個獨特的補充: TFS 即使在突變之後也不會複製。 那是怎樣工作的呢?它單獨維護檔案的各個部分, 這樣只需要複製更新的段。

保證原子性

 系統永遠不會進入不一致狀態 (除非硬體出現故障), 這意味著意外斷電不會損壞系統。

快取改進

 TFS在快取磁碟時提高了磁碟訪問的速度。它使用機器學習方式來學習模式和預測未來的使用, 以減少快取遺漏的數量。TFS 還壓縮記憶體中的快取,,減少了所需的記憶體量。

更好的檔案監控

 CoW非常適合高效能,可擴充套件的檔案監控,但不幸的是,只有很少的檔案系統包含在內。 TFS是其中之一。

所有記憶體安全

 TFS只使用在Rust中編寫的元件。 因此,記憶體不安全只能在標記為不安全的程式碼中進行,這是非常仔細的檢查。

全面覆蓋測試

 TFS旨在全面覆蓋測試。 通過立即顯示大類的錯誤,這對正確性提供了相對較強的保證。

SSD友好設計

 TFS試圖通過重新定位死區來避免SSD中的寫入限制。

改進的垃圾回收

 TFS使用Bloom過濾器進行空間高效和快速的垃圾回收。 TFS允許FS垃圾回收器在後臺執行,而不會阻塞檔案系統的其餘部分。

常見問題

為什麼使用SPECK作為預設密碼?

 SPECK是一個相對較新的密碼,但它已經受到了很多 (無效) 的密碼分析,所以它是相對安全的。它有非常棒效能和簡單的實現。可移植性是 TFS 設計的一個重要部分, 真正可移植的 AES 實現沒有旁道攻擊, 這比許多人想象的要難 (特別是,大多數便攜實現中都存在 SubBytes 問題)。SPECK沒有這個問題,因此可以通過最小的努力安全地實現移植。

TFS 和 ZFS 的相似程度?

 實際上並不那麼相似,它們有許多基本的思想類似,但除此之外,它們本質上是不相干的。但ZFS的設計對TFS的形成起了很大的助推作用 。

TFS是否只有Redox-only?

 不,它從來沒有計劃僅僅是 Redox-only。

整個磁碟壓縮如何工作?

 根據我的瞭解,全盤壓縮是TFS專有的。它通過將多個“頁面”(虛擬資料塊)收集到“叢集”(分配單元)中起作用。這樣,可以通過簡單地解壓縮各個叢集來讀取頁資料。

為什麼 ZMicro 這麼慢?它會影響 TFS 的效能嗎?

 ZMicro這麼慢的原因是因為它在一定程度上起作用,為效能提供了出色的壓縮比。這種可怕的緩慢效能是由減少寫入次數為代價的。事實上,ZMicro的50%以上的分配只會寫入一個扇區,而不是3個。其次,無論磁碟的速度有多快,它都不會接近 ZMicro 的效能,因為磁碟操作本質上是緩慢的,從這點來看, 壓縮的表現確實不重要。

可擴充套件雜湊或B+樹?

都不是。 TFS使用樹和雜湊表的組合:巢狀的雜湊表,一種雜湊樹的形式。 其思想是,在Bucket(譯者注:可理解為容器)中建立一個新的子表,而不是重新分配。

設計資源

一些關於 tfs 設計的文章:

規範

完整的規範可以在specification.tex中找到。若要呈現它,請安裝 pdflatex, 然後執行。

  pdflatex --shell-escape specification.tex 

然後開啟名為 specification.pdf 的檔案。