這讓我很困惑,我不知道如何深入了解 ZFS 實際上在做什麼。
我使用全新安裝的 FreeNAS 11.1 和快速 ZFS 池(快速 7200 上的導入鏡像)以及單獨的 UFS SSD 進行測試。配置幾乎是“開箱即用”。
SSD 包含 4 個大小為 16 -120 GB 的文件,使用控制台將其複製到池中。該池已進行重複資料刪除(值得:節省 4 倍、磁碟大小為 12TB),並且系統擁有充足的 RAM (128GB ECC) 和快速的 Xeon。記憶體充足 -zdb
顯示該池總共有 121M 區塊(磁碟上每個區塊 544 位元組,RAM 中每個區塊 175 位元組),因此整個 DDT 僅約為 20.3 GB(每 TB 資料約 1.7 GB)。
但是當我將文件複製到池中時,我在以下位置看到zpool iostat
:
它執行長達一分鐘的低階讀取和短暫的突發寫入週期。讀取的部分如圖所示。此任務的整體寫入速度也不是很好 - 池有 45%/10TB 為空,本機寫入速度約為 300 - 500 MB/s。
在不知道如何檢查的情況下,我懷疑低階讀取來自讀取 DDT 和其他元數據,因為它們沒有預先載入到 ARC 中(或透過寫入檔案資料不斷從 ARC 推出)。或許。
也許它發現重複資料刪除命中,所以沒有太多的文字,只是我不記得這些檔案的任何重複版本,並且它與我記得的/dev/random 中的內容相同(我會檢查這個並很快更新) 。或許。沒有真正的想法。
我可以做些什麼來更準確地挖掘正在發生的事情,以期對其進行優化?
RAM 和重複資料刪除更新:
我已根據最初的評論更新了 Q 以顯示 DDT 大小。重複資料刪除 RAM 通常被引用為每 TB x 4 5GB,但這是基於一個實際上不太適合重複資料刪除的範例。您必須計算區塊計數乘以每個條目的位元組數。經常引用的「x 4」只是一個「軟」預設限制(預設情況下,ZFS 將元資料限制為ARC 的25%,除非被告知使用更多- 該系統指定用於重複資料刪除,我新增了64GB ,這是全部可用於加速元資料快取)。
因此,在這個池中zdb
,確認整個DDT 每TB 只需要1.7 GB,而不是每TB 5 GB(總共20G),並且我很高興為元數據提供ARC 的70%,而不是25%(123G 中的80G )。
在這個尺寸下,它不需要彈出任何事物除了 ARC 中的“死”文件內容之外。因此,我希望實際探測ZFS 以找到它認為正在發生的情況,這樣我就可以看到我所做的任何更改的效果,因為我真的對其巨大的“低級讀取”量感到非常驚訝,並尋找一種探索和確認其認為自己正在做的事情的真實性的方法。