bcache vs dm-cache:Linux SSD 快取比較

11 分鐘閱讀 - 2026年5月28日

hero section cover
目錄
  • bcache 對比 dm-cache:Linux 上的 SSD 快取
  • bcache 的運作原理
  • dm-cache 的運作原理
  • 快取模式
  • bcache 與 dm-cache:該選用哪一個
  • 結論
分享

比較 bcache 和 dm-cache 在 Linux 上的 SSD 快取。設定、效能、快取模式,以及何時使用兩者。

bcache 對比 dm-cache:Linux 上的 SSD 快取

SSD 速度快,但每 GB 單價較高;HDD 價格低廉,但速度較慢。Linux 提供兩種內核級工具來結合這兩者:bcachedm-cache。兩者皆將 SSD 作為大型 HDD 前端的透明快取,但在架構、設定要求以及最佳運作情境方面有所不同。


 

bcache 的運作原理

Bcache 自 Linux 核心 3.10 版(2013 年 6 月)起便已內建。它運作於區塊層,因此可與任何支援 UUID 的檔案系統配合使用。

在內部,bcache 採用混合式的 B+ 樹/日誌結構。它將 SSD 儲存空間分割為固定大小的區塊(128K 至 2MB),並對齊至擦除區塊邊界。此機制將隨機寫入轉換為順序寫入,從而降低寫入放大效應並延長 SSD 使用壽命。超過 4MB 的順序 I/O 操作會自動繞過快取,使 SSD 專注於其最具價值的隨機存取模式。

Bcache 還會即時監控 SSD 的延遲。若讀取延遲超過 2 毫秒或寫入延遲超過 20 毫秒,系統便會限制流量,以防止快取裝置成為瓶頸。

設定

安裝 bcache-tools,然後格式化您的後端裝置與快取裝置:

make-bcache -B /dev/sdb          # format HDD as backing device
make-bcache -C /dev/sdc          # format SSD as cache device
echo <UUID> > /sys/block/bcache0/bcache/attach   # attach cache

運行時調校可透過 /sys/block/bcache<N>/bcache/ sysfs 介面進行,您可在其中調整快取模式、順序 I/O 閾值及延遲目標。對於 RAID 陣列,請使用 --data-offset 來對齊您的條帶寬度。

注意事項:此設定會造成資料遺失。兩個裝置都必須格式化為 bcache 目標,因此您無法在不先清除現有檔案系統的情況下,將 bcache 新增至該檔案系統。此外,bcache 裝置在建立後亦無法調整大小。

效能

Bcache 的寫入整合功能使其具備強大的隨機寫入表現。在基準測試中,其隨機 4K 寫入 IOPS 約達 18,500,相較於單純使用原始 SSD 時的 12,200 IOPS。若搭配效能足夠的硬體,隨機讀取吞吐量可達約 1,000,000 IOPS。

針對加密工作負載,建議在 /dev/bcache<N> ,而非分別加密底層硬碟。此方式通常效能更佳,因為 Bcache 仍可在加密前進行寫入整合。

dm-cache 的運作原理

dm-cache 是一種位於現有邏輯卷之上層的 Device Mapper 目標。它使用三個子裝置:原始裝置(HDD)、快取裝置(SSD 或 NVMe),以及用於追蹤區塊位置和髒資料狀態的元資料裝置。預設的快取策略為 smq(隨機多佇列),可在混合工作負載中識別熱資料。

關鍵優勢在於:dm-cache 可在不破壞現有資料的情況下,疊加於正在運作的 LVM 卷上。您亦可透過標準 LVM 指令調整其大小。

透過 LVM 進行設定

配置 dm-cache 的實用方法是透過 lvmcache。手動 dmsetup 配置雖可行,但容易出錯且無法在重新開機後保留設定。LVM 方法如下:

  1. 在 HDD 和 SSD 上分別建立實體卷 (PV)。
  2. 將兩個 PV 加入同一個卷組 (VG) 中。
  3. 建立三個邏輯卷:一個用於儲存資料(HDD)、一個用於快取(SSD)、一個用於元資料(SSD)。
  4. 將快取與元資料邏輯卷組合成一個快取池:
    lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv>
  5. 將快取池掛載至原始資料源:
    lvconvert --type cache --cachepool <pool_lv> <data_lv>

需注意一點:請透過其 /dev/mapper/ 路徑掛載,而非透過 UUID。若透過 UUID 掛載,可能會繞過快取層並直接讀取原始裝置。

效能與記憶體

在 90/10 讀寫比例的 Zipf 工作負載下,dm-cache 的寫回模式已達到約 193 MB/s 的讀取速度與約 21 MB/s 的寫入速度。在另一項基準測試中,透過 10 GB NVMe 分區對 100 GB HDD 進行快取,隨機寫入 IOPS 從 118 提升至 798。

其代價在於記憶體消耗。dm-cache 的元資料開銷取決於區塊大小。若採用 512 位元組的區塊大小,每 100 GB 快取可能消耗超過 16 GB 的 RAM;若將區塊大小提升至 4,096 位元組,每 100 GB 的記憶體使用量則會降至約 2 GB。 請選擇接近平均 I/O 大小(64 KB 是個合理的起點)的區塊大小,並確保其為 64 個磁區(32 KB)的倍數,且落在 32 KB 至 1 GB 的範圍內。

元資料會在每次執行 FLUSH 或 FUA 寫入時進行刷新,或至少每秒刷新一次。為確保高可用性,請對元資料裝置進行鏡像,以避免單點故障。

快取模式

bcache 與 dm-cache 均支援相同的核心快取模式。選擇哪種模式將同時影響效能與資料安全性。

模式運作原理速度風險
寫入直通寫入資料會同時寫入 SSD 和 HDD僅讀取加速低。HDD 始終擁有最新資料。
寫回寫入資料先存入 SSD,稍後再寫入 HDD讀寫加速較高。若 SSD 在資料寫入硬碟前發生故障,將導致資料遺失。
繞過寫入 / 直通寫入完全繞過快取僅提升讀取效能,減少 SSD 磨損低。HDD 始終保留最新資料。

對這兩款工具而言,寫入直通是安全的預設選項。寫入回傳雖然速度較快,但會帶來實際風險:若 SSD 在保留未寫入資料時發生故障,該資料將永久遺失,且檔案系統可能受損。僅在您擁有冗餘 SSD 或能容忍偶發性資料遺失時,才應使用寫入回傳。

bcache 與 dm-cache:該選用哪一個

考量因素bcachedm-cache
在現有資料上設定破壞性(需清除資料)非破壞性(線上轉換)
調整大小不支援透過 LVM 支援
隨機寫入優化強力 (順序寫入整合)標準
順序 I/O 繞過自動 (>4MB)由 smq 政策管理
記憶體開銷低(B+ 樹)較高(取決於區塊大小)
元資料位於快取裝置上獨立裝置,可進行鏡像

當您從頭建置新系統且希望獲得最佳隨機 I/O 效能時,請使用 bcache。對於資料庫和虛擬機器儲存等寫入密集型工作負載,以及隨機寫入開銷嚴重的 RAID 6 陣列,這是更佳的選擇。

若需為已投入生產的伺服器新增快取功能,請使用 dm-cache。其與 LVM 的整合意味著您可在無需停機或資料遷移的情況下掛載快取裝置。此方案更適合讀取密集型工作負載,以及需要靈活調整儲存空間大小或即時重新配置儲存環境的場景。

結論

這兩款工具雖解決相同的問題,但適用於不同的情境。對於全新建置的系統,Bcache 是性能的首選;對於現有的 LVM 系統,dm-cache 則是實用的選擇。無論您選擇哪一款,建議先從寫入直通模式開始,直到您確信 SSD 的可靠性後,若需要寫入性能,再切換至寫入回寫模式。

若您需要具備 SSD 快取配置的專用伺服器,歡迎探索 FDC 的專用伺服器方案

博客

本周特色

更多文章
Linux 封包處理的 XDP 與 eBPF

Linux 封包處理的 XDP 與 eBPF

XDP 和 eBPF 如何在 NIC 驅動程式層級處理每秒數百萬個封包。基準、DDoS 使用案例、工具鏈設定和硬體需求。

14 分鐘閱讀 - 2026年5月27日

為什麼擁有強大且不計費的 VPS 是很重要的?

3 分鐘閱讀 - 2025年5月9日

更多文章