作者:深入細(xì)節(jié)的 SmartX 一線技術(shù)團隊
近日,VMware 發(fā)布了 vSAN 8,對存儲架構(gòu)進行了重大更新。其中最主要的變化,即引入了新的 Express Storage Architecture(ESA)架構(gòu):用“存儲池”替代了原存儲架構(gòu)(OSA)中的“磁盤組”,并不再需要專用 SSD 承擔(dān)緩存加速功能,一定程度上避免了 8.0 之前版本中的專用緩存盤利用率低、易發(fā)生緩存擊穿等問題。
而值得一提的是,在 vSAN 大版本更新之前,SmartX 即通過統(tǒng)一緩存空間和智能冷熱數(shù)據(jù)管理優(yōu)化了分布式存儲緩存機制,有效規(guī)避了上述問題。本文將通過重點解讀 vSAN(以 vSAN 7 為例)和 SmartX 分布式塊存儲組件 ZBS* 緩存機制的原理,并測試對比兩種緩存機制下虛擬機性能表現(xiàn),讓讀者更好地了解兩種技術(shù)實現(xiàn)機制的區(qū)別對業(yè)務(wù)可能帶來的實際影響。
* ZBS 內(nèi)置于 SmartX 超融合軟件 SMTX OS,可與 SmartX 原生虛擬化 ELF 搭配提供服務(wù)。
本文重點
- vSAN 7 采用劃分讀寫緩存空間的機制,將緩存磁盤按照容量占比劃分為寫緩沖區(qū)(30%)和讀緩存區(qū)(70%)。這種方式可能出現(xiàn)緩存利用率低、在訪問數(shù)據(jù)量過大時導(dǎo)致緩存擊穿,進而引起性能下降等問題。
- ZBS 采用統(tǒng)一緩存空間的機制,并通過 2 級 LRU 算法對冷熱數(shù)據(jù)進行管理,在充分利用緩存容量的同時避免了因訪問量激增導(dǎo)致虛擬機性能下降的情況。
- 本文基于相同的硬件配置和 I/O 讀寫場景,分別測試 VMware 超融合(vSphere 虛擬化 + vSAN 分布式存儲)寫入 300 GB 數(shù)據(jù)、SMTX OS(ELF + ZBS)寫入 500 GB 數(shù)據(jù)時虛擬機的性能表現(xiàn)。結(jié)果顯示,vSAN 7 難以充分利用緩存介質(zhì),發(fā)生緩存擊穿,導(dǎo)致存儲性能下降;而 SMTX OS 即便在寫入更多數(shù)據(jù)的情況下也未發(fā)生緩存擊穿,虛擬機性能保持穩(wěn)定。
場景問題
混閃配置是超融合或分布式存儲現(xiàn)階段的主流落地模式?;扉W配置是指機器中的磁盤使用 SSD + HDD 混合組成,其中 SSD 磁盤作為數(shù)據(jù)緩存層,而 HDD 磁盤作為數(shù)據(jù)容量層。以該模式構(gòu)建的分布式存儲池通過軟件算法進行冷熱數(shù)據(jù)自動判斷,在提供高性能的同時,還可獲得較大的存儲容量,進而提升資源利用率,獲得相對全閃存儲更高的性價比。
在將 SSD 磁盤用作數(shù)據(jù)緩存層時,部分超融合產(chǎn)品會將緩存容量(Cache)劃分為讀和寫各自獨立的兩部分。例如,vSAN 7 及更早版本會將每個磁盤組(Disk Group)中的緩存磁盤,按照容量占比劃分為寫緩沖區(qū)(30%)和讀緩存區(qū)(70%),當(dāng)讀取數(shù)據(jù)未命中緩存或者寫緩存已滿,將會直接從容量層進行讀寫1。
這種劃分讀寫的方式,雖然可以保障讀寫 I/O 的緩存擊穿空間隔離,但經(jīng)常導(dǎo)致無法充分利用高速存儲介質(zhì)的緩存空間。例如,在業(yè)務(wù)虛擬機寫數(shù)據(jù)較多、讀數(shù)據(jù)較少的場景,可能作為寫入數(shù)據(jù)的緩存容量已經(jīng)被占滿,但是讀緩存空間還有很多容量沒有被使用,反之亦然。
以醫(yī)療客戶的集成平臺建設(shè)為例,集成平臺通過將各個系統(tǒng)產(chǎn)生的數(shù)據(jù)集中存儲并重新組織,形成醫(yī)院的數(shù)據(jù)倉庫,幫助醫(yī)院挖掘數(shù)據(jù)價值、形成智能化決策,進而加快數(shù)字化轉(zhuǎn)型。集成平臺通過 ETL 工具,從現(xiàn)有醫(yī)療業(yè)務(wù)系統(tǒng)(如 HIS、EMR 和 LIS 等)的數(shù)據(jù)庫直接抽取數(shù)據(jù)并進行轉(zhuǎn)換、加載。該過程都發(fā)生在中間數(shù)據(jù)庫中,最大程度降低對生產(chǎn)數(shù)據(jù)庫的影響。此時中間數(shù)據(jù)庫會有大量的數(shù)據(jù)進行寫入,使得緩存空間容易被填滿,而如果讀寫緩存采用固定容量分配,就可能會發(fā)生寫入數(shù)據(jù)量 > 寫緩存空間容量,進而導(dǎo)致緩存擊穿、業(yè)務(wù)訪問性能下降。大型三甲醫(yī)院集成平臺平均每天需要處理 900 萬條消息,要求峰值處理能力需達到 1000 TPS,存儲性能不足易導(dǎo)致整個業(yè)務(wù)系統(tǒng)卡頓,嚴(yán)重情況下甚至?xí)礄C,因此非??简灮A(chǔ)架構(gòu) I/O 吞吐能力。
針對這一問題,ZBS 使用統(tǒng)一的緩存空間,不劃分讀寫,所有緩存層容量均被使用,不易出現(xiàn)緩存空間不足從而影響存儲性能的情況。同時,通過冷熱數(shù)據(jù)分層技術(shù),依據(jù)數(shù)據(jù)的訪問頻率,將頻繁讀寫的熱數(shù)據(jù)放置在 SSD 中、長時間無讀寫的冷數(shù)據(jù)放置在 HDD 中,有效提升數(shù)據(jù)緩存層利用率,保證業(yè)務(wù)高性能穩(wěn)定運行。
為了讓讀者更直觀地感受到不同的緩存機制對性能的影響,本文將分別介紹 VMware 和 SmartX 分布式存儲緩存機制的原理,并測試對比數(shù)據(jù)寫入場景中兩種緩存機制下虛擬機性能表現(xiàn)。
技術(shù)實現(xiàn)
vSAN
vSAN 7 使用磁盤組(Disk Group)將高性能存儲介質(zhì)(如 NVMe / SATA SSD)與低性能存儲介質(zhì)(如 SATA / SAS HDD)組成邏輯存儲空間,并通過網(wǎng)絡(luò) RAID 功能保障數(shù)據(jù)可靠性。
每臺 ESXi 主機可創(chuàng)建 5 個磁盤組,每個磁盤組中至多僅支持 1 塊高性能存儲介質(zhì)與 1 ~ 7 塊低性能存儲介質(zhì)組合構(gòu)成。其中高性能存儲介質(zhì)作為緩存層,并以 7 : 3 容量比例劃分為讀和寫的空間使用,虛擬機在進行數(shù)據(jù) I/O 訪問時,可使用到其中單個磁盤組的緩存空間。低性能存儲介質(zhì)作為容量層,保存因訪問頻率較低從緩存層回寫(Write Back)的冷數(shù)據(jù)。
當(dāng)數(shù)據(jù)寫入寫緩存空間后,會基于電梯算法(Elevator Algorithm),周期性地將數(shù)據(jù)回寫到容量層,從而保障緩存層有充足的容量支持后續(xù) I/O 的數(shù)據(jù)請求。當(dāng)寫緩存空間不足時,會直接寫入到容量層。冷數(shù)據(jù)被讀取訪問時,會將其加載進入讀緩存空間中,緩存空間不足時將直接訪問持久化緩存層。
另外,vSAN 7 的緩存數(shù)據(jù)僅能用于本磁盤組,且緩存數(shù)據(jù)沒有冗余。

ZBS
ZBS 在以混閃模式部署的時候會要求選擇至少 2 塊 SSD 作為緩存容量(Cache),并通過 2 級 LRU(Least Recently Used)算法進行判定、管理數(shù)據(jù)冷熱程度。
在 Cache 中,數(shù)據(jù)會被劃分為 4 種狀態(tài),分別是 Active、Inactive、Clean 和 Free。

- Active:用來記錄訪問最頻繁和“冷轉(zhuǎn)熱”的數(shù)據(jù),是 Cache 中“最熱”的數(shù)據(jù)。
- Inactive:用來記錄首次寫入和短時間未訪問的數(shù)據(jù),是 Cache 中“次熱級”的數(shù)據(jù)。
- Clean:用來記錄長時間未訪問的數(shù)據(jù),是 Cache 中的“冷”數(shù)據(jù),且數(shù)據(jù)已經(jīng)完成了 HDD 落盤。
- Free:用來記錄未使用或被回收的數(shù)據(jù),是 Cache 中閑置的數(shù)據(jù)空間。
通過 2 級 LRU 鏈表來管理數(shù)據(jù)冷熱程度
首次進行數(shù)據(jù)寫入時,由于 Cache 中沒有數(shù)據(jù),會從 Free 中請求未使用的數(shù)據(jù)空間,數(shù)據(jù)寫入完成后將被記錄為 Inactive。

Active 中記錄了被訪問過多次的數(shù)據(jù)塊,當(dāng) Active 的數(shù)據(jù)超過 Inactive 后,將 Active 數(shù)據(jù)按照被訪問的先后順序進行排序,不經(jīng)常被訪問的數(shù)據(jù)會轉(zhuǎn)移記錄到 Inactive 中,直到兩者的容量相同。

同時當(dāng) Active 和 Inactive 的數(shù)據(jù)容量超過 Cache 空間的 20% 之后, Inactive 數(shù)據(jù)將開始觸發(fā)落盤操作,按照時間先后順序進行排序,排名靠前的早期數(shù)據(jù)會被寫入到 HDD 并在緩存層中被標(biāo)記為 Clean(此時 Clean 數(shù)據(jù)在 HDD 和 Cache 中各有一份),后續(xù)當(dāng) Clean 數(shù)據(jù)有訪問請求時會被重新標(biāo)記為 Active,否則將被回收為可用空間供寫入新數(shù)據(jù)使用。

不同數(shù)據(jù)讀寫場景的處理機制
數(shù)據(jù)寫入場景
- Cache 命中
- 寫入 Cache 空間并根據(jù)當(dāng)前數(shù)據(jù)狀態(tài)發(fā)生“冷熱”變化。
- Cache 未命中
- Cache 未滿,寫入 Cache 中的閑置空間。
- Cache 已滿,寫入容量層中。
數(shù)據(jù)讀取場景
- Cache 命中系統(tǒng)收到讀請求,通過元數(shù)據(jù)優(yōu)先查找本地節(jié)點 Cache 是否命中請求數(shù)據(jù),如果數(shù)據(jù)在 Cache(Active、Inactive、Clean)中,數(shù)據(jù)將直接從 Cache 中讀取。
- Cache 未命中
- Cache 未滿系統(tǒng)會查詢本地 Data(容量層)中是否有請求數(shù)據(jù),如果有則轉(zhuǎn)向本地容量層請求數(shù)據(jù)的副本。向本地容量層請求數(shù)據(jù)的副本,并不是直接讀取容量層上的數(shù)據(jù),而是首先查詢本地 Cache 是否有富余空間,如果 Cache 空間充足,請求數(shù)據(jù)副本會先從本地容量層中載入到 Cache 中,然后通過 Cache 讀取數(shù)據(jù),并返回數(shù)據(jù)讀取成功。
- Cache 已滿系統(tǒng)收到讀請求,當(dāng)發(fā)現(xiàn)請求數(shù)據(jù)副本沒有在本地 Cache,并且這個時候,本地 Cache 空間已經(jīng)沒有富余空間,請求數(shù)據(jù)副本會直接從容量層中讀取。
測試驗證對比
測試環(huán)境
硬件環(huán)境
對比測試時采用相同的硬件環(huán)境,均使用 3 臺 Dell PowerEdge C6420 服務(wù)器 ,每臺硬件配置如下:

軟件版本

測試方法
通過 FIO 測試工具,分別在 vSAN 中寫入 300 GB 數(shù)據(jù)、在 SMTX OS 中寫入 500 GB 數(shù)據(jù),觀察虛擬機性能監(jiān)控視圖的數(shù)據(jù)表現(xiàn)和變化。
測試結(jié)果
vSAN
SSD 單盤容量 894.25 GB,讀緩存 620.61 GB,寫緩存 268.28 GB,讀寫緩存容量比例為 7:3,符合《VMware vSAN Design Guide》中的描述。

在 256K 順序?qū)?300 GB 數(shù)據(jù)測試中,由于緩存空間不足,發(fā)生寫緩存擊穿,性能發(fā)生下降,從 280 MB 降低到 75 MB 左右。



在 4K 隨機寫 300 GB 測試中,同樣由于緩存擊穿導(dǎo)致了很大的性能下降,IOPS 從 37176 跌落至 16060。


通過上面的測試可以發(fā)現(xiàn),vSAN 7 采用讀寫緩存空間各自獨立,在容量較大的數(shù)據(jù)請求場景中存在緩存介質(zhì)無法充分利用的情況,容易發(fā)生緩存擊穿導(dǎo)致存儲性能下降。
ZBS
從緩存容量監(jiān)控視圖可以看出每個節(jié)點均有 1.5 TiB 的緩存容量可使用(不區(qū)分讀寫緩存),即 2 塊 ~900GB SSD 的可用緩存容量。

首先使用 FIO 在測試虛擬機中 256K 順序?qū)懭?500 GB 數(shù)據(jù),觀察虛擬機的性能變化。
通過虛擬機性能監(jiān)控視圖可以發(fā)現(xiàn),F(xiàn)IO 測試虛擬機無性能波動,一直處于緩存 100% 命中狀態(tài)。此時首次寫入的 500 GB 數(shù)據(jù)保存在 Inactive。


再次測試 4K 隨機寫入 500 GB 數(shù)據(jù),觀察發(fā)現(xiàn)性能依然保持穩(wěn)定,緩存未擊穿。


從上述對比可以發(fā)現(xiàn),在相同的數(shù)據(jù)容量和 I/O 讀寫場景中,SMTX OS 能夠更好地利用緩存容量空間,即使發(fā)生大容量的數(shù)據(jù)突發(fā)請求也不易發(fā)生緩存空間擊穿導(dǎo)致虛擬機性能下降,進而更好地保障業(yè)務(wù)穩(wěn)定運行。
總結(jié)
與 vSAN 7 劃分讀寫的緩存機制相比而言,ZBS 在處理數(shù)據(jù)請求時,通過統(tǒng)一緩存空間的方式,提升了緩存利用率,即使面對業(yè)務(wù)突發(fā)性數(shù)據(jù)寫入和訪問激增場景,也能很好地保障業(yè)務(wù)性能需求。同時,ZBS 采用 2 級 LRU 算法將數(shù)據(jù)劃分為多種熱度級別,可對冷熱數(shù)據(jù)進行生命周期管理,緩存層也支持使用多種存儲介質(zhì)(SATA SSD、NVMe SSD 等),用戶可根據(jù)不同業(yè)務(wù)的性能需求靈活選擇,節(jié)省硬件投入成本,獲得更高的性價比。
1 對于全閃配置的磁盤組,可以將全部緩存盤容量(100%)用于寫緩存,不再設(shè)置讀緩存區(qū)。
本文參考文檔:
- VMware vSAN Design Guidehttps://core.vmware.com/resource/vmware-vsan-design-guide
- SMTX ZBS 塊存儲服務(wù)技術(shù)白皮書https://www.smartx.com/resource/doc/general-zbs-white-paper
- Virtual SAN Read IO – cache / buffer / spindleshttps://www.yellow-bricks.com/2014/01/15/virtual-san-read-io/
- An overview of VMware Virtual SAN caching algorithmshttps://www.vmware.com/files/pdf/products/vsan/vmware-virtual-san-caching-whitepaper.pdf
- Announcing vSAN 8https://blogs.vmware.com/virtualblocks/2022/08/30/announcing-vsan-8-with-vsan-express-storage-architecture/
- 醫(yī)院集成平臺 IT 基礎(chǔ)架構(gòu)需求分析與方案選型https://www.smartx.com/blog/2021/06/hospital-integration-platform/