
Ceph 的快取分層效能表現如何?
介紹 :
在本文中,我們分享一項基準測試,示範如何透過設定以 NVMe 儲存池作為後盾的快取層,來提升 HDD 儲存池的效能。
什麼是 Ceph 快取分層及其運作原理?
Ceph 快取分層允許使用較快的儲存裝置作為較慢裝置的快取。這需要建立一個由快速/高成本的儲存裝置(例如 NVMe SSD)組組成並設定為「快取層」的儲存池;同時,也需要一個由較慢/低成本的裝置(例如 HDD)組成的後端儲存池,這個後端層可以選擇使用糾刪碼(erasure-coded)或較慢的裝置,將其配置為經濟實惠的儲存層。快取層會儲存來自後端層中頻繁存取的資料,並處理客戶端的讀寫請求。快取分層代理程式(cache tiering agent)會根據特定策略,定期將物件從快取層回寫(flushes)或驅逐(evicts)出去。
Ceph 快取分層示範
過去,當使用 SATA SSD 作為快取分層的儲存裝置時,快取分層帶來的效能提升並不顯著。如今,NVMe SSD 的價格相較於幾年前已大幅下降,且其效能遠高於 HDD。我們想知道,若使用 NVMe SSD 作為快取層是否能大幅提升 HDD 池的效能。
為了測試 NVMe 快取層的效能,我們設計並執行了一項測試,以確認快取層是否能提升以 HDD 為基礎的儲存池效能。
叢集設定
NVMe 主機 | 3台 Ambedded Mars500 Ceph 儲存設備 |
每台 Mars 500 儲存設備的規格 | |
CPU | 1x Ampere Altra Arm 64-Core 3.0 Ghz |
記憶體 | 96 GiB DDR4 |
網路 | 2 個連接埠 25Gbps Mellanox ConnectX-6 網卡 |
OSD 磁碟 | 8 x Micron 7400 960GB |
HDD 主機 | 3台 Ambedded Mars400 Ceph 儲存設備 |
每台 Mars 400 儲存設備的規格 | |
CPU | 8個節點 Quad-Cores Arm64 1.2 GHz |
記憶體 | 每節點 4 GiB;每台設備 32 GiB |
網路 | 每個節點 2個 2.5Gbps 連接埠。透過機箱內交換器提供 2個 10 Gb 上行鏈路 |
OSD 磁碟 | 8 x 6 TB Seagate Exos HDD |
Ceph 叢集資訊
- 24 個基於 NVMe SSD 的 OSD (3 台 Ambedded Mars500 儲存設備)
- 24 個基於 HDD 的 OSD (3 台 Ambedded Mars400 設備)
- HDD 與 NVMe 伺服器分屬不同的 CRUSH 根目錄中
測試客戶端
- 兩台實體伺服器,各配備 2 個 25Gbps 網路介面卡
- 每台伺服器運行 7 個虛擬機 (VM)
- 每個虛擬機配備 4 核心和 8 GB 記憶體。
使用 Ambedded UVS Manager 設定快取分層
1. 使用 HDD OSD 建立基礎儲存池
2. 使用 NVMe SSD 的 OSD 建立 NVMe 儲存池
3. 將 NVMe 儲存池加入為 HDD 儲存池的快取層
預設的快取分層設定::
- Cache mode: writeback
- hit_set_count = 12
- hit_set_period = 14400 sec (4 hours)
- target_max_byte = 2 TiB
- target_max_objects = 1 million
- min_read_recency_for_promote & min_write_recency_for_promote = 2
- cache_target_dirty_ratio = 0.4
- cache_target_dirty_high_ratio = 0.6
- cache_target_full_ratio = 0.8
- cache_min_flush_age = 600 sec.
- cache_min_evict_age = 1800 sec.
我們在新增快取層前後,對 HDD 儲存池進行測試,並使用多達 14 個客戶端來產生測試負載。每個客戶端都掛載了一個 RBD 進行 fio 測試。測試負載從一個客戶端開始,並在每個測試任務完成後,逐步增加客戶端的數量。每個測試循環持續五分鐘,並由 Jenkins 自動控制。單次測試的效能為所有客戶端結果的總和。在測試快取分層之前,我們向 RBD 寫入資料,直到快取層儲存池的佔用率超過 Ceph 快取目標填滿比例(0.8)為止。
圖表顯示,在加入 NVMe 快取池後,純 HDD 儲存池的效能顯著提升。
在快取層測試期間,我們使用 ceph osd pool stats 指令觀察了儲存池的統計數據。快取池和基礎池都發生了回寫 (flushing)、逐出 (evicting) 和晉升 (promoting) 等活動。我們在快取層測試的不同時間點,擷取了這些儲存池的統計數據。
資料已寫入到快取層
pool cache id 84
client io 21 MiB/s wr, 0 op/s rd, 5.49k op/s wr
pool mars400_rbd id 86
nothing is going on
快取正在進行晉升 (promote) 和逐出 (evict)
pool cache id 84
client io 42 MiB/s wr, 0 op/s rd, 10.79k op/s wr
cache tier io 179 MiB/s evict, 17 op/s promote
pool mars400_rbd id 86
client io 0 B/s rd, 1.4 MiB/s wr, 18 op/s rd, 358 op/s wr
快取正在回寫 (flushing)
pool cache id 84
client io 3.2 GiB/s rd, 830 op/s rd, 0 op/s wr
cache tier io 238 MiB/s flush, 14 op/s promote, 1 PGs flushing
pool mars400_rbd id 86
client io 126 MiB/s rd, 232 MiB/s wr, 44 op/s rd, 57 op/s wr
PG 正在逐出 (evicting)
pool cache id 84
client io 2.6 GiB/s rd, 0 B/s wr, 663 op/s rd, 0 op/s wr
cache tier io 340 MiB/s flush, 2.7 MiB/s evict, 21 op/s promote, 1 PGs evicting (full)
pool mars400_rbd id 86
client io 768 MiB/s rd, 344 MiB/s wr, 212 op/s rd, 86 op/s wr
PG 正在回寫 (flushing) ,且客戶端 I/O 直接寫入基礎儲存池。 (客戶端正在寫入資料)
pool cache id 84
client io 0 B/s wr, 0 op/s rd, 1 op/s wr
cache tier io 515 MiB/s flush, 7.7 MiB/s evict, 1 PGs flushin
pool mars400_rbd id 86
client io 613 MiB/s wr, 0 op/s rd, 153 op/s wr
在連續測試結束後,我們讓叢集休息了數小時,並重新進行 4 kB 隨機寫入測試。我們獲得了更好的效能,這是因為快取空間被釋放出來,可用於新的寫入操作。
從本次測試中,我們可以確定使用 NVMe 儲存池作為 HDD 儲存池的快取層,確實能實現顯著的效能提升。
需注意,快取分層的效能無法得到保證。其效能取決於當下的快取命中情況,且在相同的設定與工作負載下重複進行測試,也未必能重現相同的效能。
如果你的應用需要穩定一致的效能,請使用純 NVMe SSD 儲存池。
- 相關產品
-
Mars500 NVME 全快閃 Ceph 儲存一體機
Mars 500
Mars 500 Ceph 一體機專為滿足高效能雲原生資料儲存需求而設計。它採用最新的 NVMe 快閃技術,提供一站式軟體定義儲存解決方案。 Mars...
細節