Filesystems

如何記憶體或以其他方式加速“du”摘要?

  • December 10, 2021

我們有一個大型文件系統,完整的du(磁碟使用情況)摘要需要兩分鐘以上。我想找到一種方法來加快該文件系統上任意目錄的磁碟使用摘要。

對於小型分支,我注意到du結果似乎以某種方式被記憶體,因為重複請求要快得多,但在大型分支上,速度可以忽略不計。

有沒有一種簡單的加速方法du,或者更積極地記憶體自上次搜尋以來未修改的分支的結果?

或者是否有可以更快地提供磁碟使用摘要的替代命令?

重新執行 du 命令時看到的是磁碟緩衝的效果。一旦你讀取了一個塊,它的磁碟緩衝區就會保存在緩衝區記憶體中,直到需要該塊為止。對於 du,您需要讀取目錄和目錄中每個文件的 inode。在這種情況下,du 結果不會被記憶體,但可以用更少的磁碟 IO 導出。

雖然可以強制系統記憶體此資訊,但整體性能會受到影響,因為所需的緩衝區空間無法用於主動訪問的文件。

目錄本身不知道文件有多大,因此需要訪問每個文件的 inode。為了在每次文件更改大小時使記憶體值保持最新,需要更新記憶體值。由於一個文件可以在 0 個或多個目錄中列出,這將要求每個文件的 inode 知道它在哪些目錄中列出。這將大大復雜化 inode 結構並降低 IO 性能。此外,由於 du 允許您在假設不同的塊大小的情況下獲得結果,記憶體中所需的數據需要為每個可能的塊大小增加或減少記憶體值,從而進一步降低性能。

引用自:https://unix.stackexchange.com/questions/8485