同一資料夾中的檔案數量如何影響 ext4 檔案系統中的 I/O 效能

同一資料夾中的檔案數量如何影響 ext4 檔案系統中的 I/O 效能

我在用著京都內閣(一個鍵值存儲)用於我的項目。我使用的具體資料庫類型是目錄資料庫它在目錄中創建很多檔案來儲存鍵值對。我運行這個專案的伺服器有 ext4 檔案系統。我遇到的問題是 I/O 延遲隨著目錄中檔案數量的增加而增加。另外,當目錄中有太多文件(例如超過 100 萬個文件)時,當我嘗試刪除整個資料夾時,它會花費很長時間(已經超過 5 小時並且仍在運行)。有人可以解釋為什麼 I/O 延遲隨著檔案數量的增加而增加以及為什麼 rm 需要永遠刪除資料夾嗎?

答案1

最簡單的延遲範例是,顯然,列出整個目錄的時間將根據目錄的大小而變化。

其次,根據檔案系統設置,ext4 使用鍊錶或雜湊 b 樹進行目錄查找。您只需查看這兩種資料結構的工作原理,即可了解不正確的配置可能造成的差異。簡而言之,鍊錶非常慢,並且只適合小目錄,而散列要快得多,並且更適合大目錄。

處理鍊錶意味著遍歷清單中的每一項,因為大多數時候,只有第 n-1 項知道第 n 項在哪裡,所以必須先讀取第 n 項。

處理哈希樹涉及計算記憶體中的數字,並根據該數字直接跳到詳細資訊。儘管對於大目錄可能需要執行幾次,但它比處理每個節點要快得多。

無論如何,如果您確實想了解詳細信息,所有文件都可以在線獲取。例如,您可以從這裡開始:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Hash_Tree_Directories

相關內容