Bigalloc¶
目前,塊的預設大小是 4KiB,這是大多數支援 MMU 的硬體上普遍支援的頁大小。這是幸運的,因為 ext4 程式碼尚未準備好處理塊大小超過頁大小的情況。然而,對於主要由大檔案組成的 檔案系統,希望能夠以多個塊為單位分配磁碟塊,以減少碎片和元資料開銷。bigalloc 功能正是提供了這種能力。
bigalloc 功能 (EXT4_FEATURE_RO_COMPAT_BIGALLOC) 將 ext4 更改為使用叢集分配,使得 ext4 塊分配點陣圖中的每個位都定址 2 的冪次個塊。例如,如果檔案系統主要儲存 4-32 兆位元組範圍的大檔案,那麼將叢集大小設定為 1 兆位元組可能是有意義的。這意味著塊分配點陣圖中的每個位現在定址 256 個 4k 塊。這將一個 2T 檔案系統的塊分配點陣圖總大小從 64 兆位元組縮小到 256 千位元組。這也意味著一個塊組定址 32 千兆位元組而不是 128 兆位元組,同樣減少了檔案系統元資料的開銷。
管理員可以在 mkfs 時設定塊叢集大小(儲存在超級塊中的 s_log_cluster_size 欄位);此後,塊點陣圖跟蹤叢集而不是單個塊。這意味著塊組可以達到數千兆位元組的大小(而不僅僅是 128MiB);然而,最小分配單位變成了叢集,而不是塊,即使是對於目錄也是如此。淘寶有一個補丁集,用於將“使用叢集單位而非塊單位”擴充套件到範圍樹,儘管不清楚這些補丁去了哪裡——它們最終演變為“extent tree v2”,但截至 2015 年 5 月,該程式碼尚未落地。