94 期 - 設定 VMware 內建快取機制,加速虛擬桌面環境效能


網管人雜誌

本文刊載於 網管人雜誌第 94 期 - 2013 年 11 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。





文章目錄

前言
Q1、除了硬體快取機制 Pam Card, Fusion I/O...等之外,有沒有其它快取機制?
Q2、CBRC 讀取快取機制的運作架構?
Q3、CBRC 讀取快取機制如何運作? 當有資料寫入需求時又如何運作?
Q4、如何為 ESXi Host 啟用 CBRC 讀取快取機制?
Q5、如何在 Horizon View 環境中整合 CBRC 讀取快取機制?
結語





前言

虛擬化議題不斷發酵延伸,許多企業及組織已經從早期的觀望態度,進而慢慢導入內部測試環境,待確認虛擬化技術真的帶來彈性及優勢之後,便紛紛將線上營運服務遷移到虛擬化環境當中,在摩根斯坦利 CIO 調查(Morgan Stanley CIO Survey)報告中可知,伺服器虛擬化的趨勢早就已經銳不可擋,以平均每年超過 20% 的幅度成長當中。

圖 1、2012 年摩根斯坦利 CIO 調查 – 伺服器虛擬化成長趨勢

那麼將伺服器完成虛擬化建置之後的下一步是什麼呢? 第二步便會接著將「使用者桌面環境」也進行虛擬化,除了得以將使用者桌面環境得以整合收容統一集中管理之外,因應目前 BYOD 的工作風潮,讓使用者透過 BYOD 連接到企業或組織自行打造的虛擬桌面環境,對於企業或組織來說能夠有整體安全性的提升才是最直接的效益。

在摩根斯坦利 CIO 調查(Morgan Stanley CIO Survey)報告中也可得知,桌面虛擬化現在正以「每年成長一倍」的速度,不斷的快速成長當中。

圖 2、2012 年摩根斯坦利 CIO 調查 – 桌面虛擬化成長趨勢

但是桌面虛擬化與伺服器虛擬化在規劃建置上有很大的不同,桌面虛擬化因為同時運作大量的桌面虛擬主機,因此對於儲存設備的工作負載 IOPS 效能,有一定程度的最低效能要求,否則當使用者透過電腦或行動裝置,連接上虛擬桌面環境後便會發現操作回應緩慢,造成使用者體驗不佳的情況。

因此,本篇文章將討論在建置虛擬桌面環境時,對於虛擬桌面管理伺服器環境當中,有哪些部份可以進行優化,以加速系統反應降低工作負載,例如,市面上許多儲存設備都具備快取機制(例如,Pam Card、Fusion I/O...等),然而這些儲存設備所搭配的快取機制都所費不貲,其實我們可以使用內建的 View Storage Accelerator 機制,便可以達到「讀取快取(Read Cache)」機制,進而提升整體使用者對於虛擬桌面的操作體驗。





Q1、除了硬體快取機制 Pam Card, Fusion I/O...等之外,有沒有其它快取機制?

Question: 我知道在虛擬桌面環境當中儲存設備的 IOPS 效能非常重要,因此儲存設備廠商也都推出了相關的硬體快取機制,例如 為儲存設備加裝 PAM(Performance Acceleration Module)Card,或安裝 Fusion I/O Card 在伺服器上,以建立硬體快取機制加快「磁碟 I/O(Disk Input and Output)」回應速度。但是,這些硬體快取機制費用都太過昂貴超過預算太多,有沒有內建或其它快取機制,能夠幫助我在虛擬桌面環境當中的效能呢?

Answer: 根據使用者桌面工作負載統計結果,一般來說輕度及部份中度的使用者,都僅是利用桌面環境處理日常工作所需,例如,E-Mail(Outlook、Notes)、Office(Word, Excel)、Web Browser...等,簡單來說就是一般文書處理的工作,其中有「80% ~ 90%」的工作負載都會是磁碟 I/O 的「讀取(Read)」部份。當然,處理 美術圖檔、3D 圖檔...等的重度使用者則不在此範圍內。

事實上,從 VMware vSphere 5.0 版本開始,便支援了 ESXi Host Caching 機制「CBRC(Content-Based Read Cache)」,也就是 VMware vSphere 內建的讀取快取機制,並且從 VMware View 5.1 版本開始,便將底層的 ESXi Host Caching CBRC 機制整合進來,稱之為「View 儲存加速器(View Storage Accelerator)」。

整合了底層 ESXi Host Caching CBRC 機制的 View 儲存加速器,能為虛擬桌面環境帶來什麼優點:

  • 內建」的 CBRC 讀取快取機制,當虛擬桌面所要存取的資料在 ESXi Host Disk 內「已經存在」(包含 View Composer OS DisksFull Clone Pool)時,便能發揮讀取快取的效果。
  • CBRC 讀取快取機制,它能夠有效降低原有儲存設備的 Read I/O Requests 工作負載,並且能幫忙處理虛擬桌面「啟動風暴(Boot Storm)」的情況,也就是當為數眾多的虛擬桌面一起「開機(Power On)」時,所造成的大量 Read Requests。
  • 根據 VMware 官方統計結果表示,啟用了 View 儲存加速器機制後在「部署」虛擬桌面時,可以降低 80% 的 Peak IOPS,對於「整體」來說可以降低 65% Peak Throughput
  • 當虛擬桌面執行應用程式時(例如,Outlook, Adobe Reader...等),系統一樣會透過 CBRC 讀取快取機制,將 Read Request 重新導向到 Shared Cache Memory 當中,以便讀取 CBRC 快取內容縮短回應時間。
  • 支援由 vCenter Server 所管理的各種虛擬桌面資源池,包含 手動桌面資源池、自動化完整複製虛擬桌面資源池、自動化連結複製桌面資源池等。
  • CBRC 讀取快取機制支援虛擬桌面作業系統磁碟,若是虛擬桌面當中的 Persistent Disk 有包含 User Data 也有支援。


但是,在使用 CBRC 讀取快取機制以前,必須要了解相關的功能限制以及注意事項,才能順利啟用讀取快取機制:

  • 啟用 CBRC 讀取快取機制時,ESXi Host 上所運作的 VM 虛擬桌面主機,其運作狀態必須為「關機(Power Off)」,或將所有 VM 虛擬桌面主機先遷移至別台 ESXi Host 主機當中,否則 ESXi Host 的 CBRC 讀取快取機制將無法套用生效。
  • 採用「連結複製(Linked Clone)」虛擬桌面機制時,Shared Disk 當中的 VM 虛擬桌面,其運作狀態也必須關機,否則 CBRC 讀取快取機制也無法套用生效。
  • 因為 CBRC 讀取快取機制,是將 ESXi Host 的「Physical Memory」空間劃分一塊出來使用(最大至  2GB),所以嚴格來說會降低 ESXi Host 上 VM 虛擬主機的整併比率。
  • 啟用 CBRC 讀取快取機制後,每台虛擬桌面主機其儲存資源會增加「Boot VMDK 以及 Snapshot VMDK」,所以虛擬桌面主機的磁碟佔用空間會增加。
  • 後續若變更某些 CBRC 參數值內容,必須要將 vSphere CBRC Module 重新載入(Unloaded > Reloaded),才能套用變更生效新的參數設定。
  • CBRC 讀取快取機制,不支援「」被 vCenter Server 所管理的虛擬桌面資源池,同時也不支援  Terminal Server 虛擬桌面資源池。





Q2、CBRC 讀取快取機制的運作架構?

Question: CBRC 讀取快取機制,最大使用空間不是只能設定 ESXi Host 的 2GB 而以,就可以有這麼大的讀取快取效能? 它是怎麼達成降低儲存設備工作負載,加速使用者要求回應時間的?

Answer:  CBRC 讀取快取機制,是以「離線雜湊(Offline Hashing)」配合「線上快取(Online Caching)」,這二種機制達成提供讀取快取的特色功能,如圖 3 所示可以看到 VM 虛擬主機的 VMDK 檔案,連接到 CBRC VSCSI Filter(簡稱 CBRC Filter),此時的 CBRC Filter 便是在 VM 虛擬主機與 ESXi Host 之間,負責提供 HashingCaching 快取機制運作的溝通介面。

圖 3、CBRC 快取機制運作架構概念圖

簡單來說,CBRC Filter 透過 RAM-Based Cache 機制,來管理 ESXi Host 當中的「磁碟快取資料區塊(Cached Disk Blocks)」,當 VM 虛擬桌面主機需要存取資料時,便可以偵測 VM 虛擬桌面需要使用到快取當中的哪些資料區塊,進而快速回復給 VM 虛擬桌面。

圖 4、CBRC Filter 運作示意圖

離線雜湊(Offline Hashing)機制,會在 VMDK File 當中產生「摘要檔案(Digest File)」(包含 Digest Headers, Journaling, Digest Hashes 等資訊),並且在每個 Boot VMDK 檔案中,也會透過 Digest 機制來產生「雜湊數值(Hash Value)」在每個 Content Blocks 當中,其中 Journaling 用來「復原(Recovery)」線上快取運作時的雜湊數值。

摘要檔案(Digest File),便是在 VM 虛擬主機當中所看到的「-digest.vmdk」檔案,該檔案中記錄著每個資料區塊(Block)當中的雜湊數值,同時也包含了「中繼資料(Metadata)」內容。若是以 SHA1 Hash4K Block Size 當作基準,且「衝突偵測(Collision Detection)」設定為「禁用(Disabled)」時,摘要檔案大小將為 Logical Disk Size 的 0.5%,若衝突偵測設定為「啟用(Enabled)」時,則檔案大小將為 Logical Disk Size 的 1.2%

簡單來說,一個具有 20GB 的 Windows VM 虛擬桌面主機,大約會有「100MB」大小的摘要檔案,但是當 VM 虛擬主機執行「快照(Snapshot)」時,摘要檔案將會額外分開產生,所以採用連結複製(Linked Clone)技術,所建立出來的 VM 虛擬桌面主機,會有屬於「個別(Respective)」的 Redo Log(Delta File)。

圖 5、摘要檔案(Digest File)運作示意圖

線上快取(Online Caching)機制,當 VM 虛擬桌面開機(Power On)時,摘要檔案將會載入到 ESXi Host 的記憶體空間當中(包含 Block-Hash Mapping),所以當 VM 虛擬桌面需要進行「Read I/O Request」時,ESXi Host 便會「檢查(Check)」記憶體空間中,是否有相對應的雜湊值(也就是可用的資料區塊)。如果 Requested Block「符合」就直接導向到 RAM Buffer Cahce 取用快取資料,如果「不符合(或不存在)」,就會把資料區塊複製到 RAM Buffer Cahce 當中,如果「無效(Invalid)」就會重新導向到 Back-End Storage Layer 後,最後再回給 VM 虛擬桌面。





Q3、CBRC 讀取快取機制如何運作? 當有資料寫入需求時又如何運作?

Question: 所以,開啟 VMware 內建的 CBRC 讀取快取機制,就可以有效降低儲存設備在讀取資料方面的 IOPS 工作負載,那麼它是怎麼跟儲存設備協同運作的呢? 此外,CBRC 僅僅是讀取方面的快取機制,若 VM 虛擬桌面有資料寫入需求時,又是如何運作的呢?

Answer:  如圖 6 所示為 CBRC 讀取快取機制中,VM 虛擬桌面發生資料存取行為時的工作流程圖,並且在此圖中也說明了,當 VM 虛擬桌面有資料寫入需求時又是如何運作的。

圖 6、CBRC 讀取快取機制工作流程圖

初始設定階段

工作流程 A – Digest Caching
當 ESXi Host 啟動 CBRC 讀取快取機制後,CBRC Filter 模組將會連接到 Boot VMDK,並且建立 4KB 大小的摘要檔案(Digest File),同時為每個資料區塊產生雜湊數值。當 VM 虛擬主機在啟動了 CBRC 快取機制的 ESXi Host 上開機時,VM 虛擬主機的核心模組將會收到摘要檔案資料,同時更新 Hash Contents 當中的 VMDK Metadata Cache 內容(又稱之為 Digest In-Memory Copy 或 Digest Cache)。

VM 虛擬主機資料讀取請求階段

工作流程 B – Read I/O Requests
當 VM 虛擬主機開機後,便會發出存取資料的「讀取請求(Read Requests)」,此時因為 ESXi Host 已經啟用了 CBRC 讀取快取機制,因此便會檢查 Metadata Cache(Digest In-Memory Copy)當中,是否有符合讀取請求內容的雜湊數值資料區塊。

工作流程 C – Online Caching
若讀取請求內容並沒有找到符合的雜湊數值資料區塊,此時讀取請求將會導向到儲存設備進行資料讀取,並且將讀取後的資料區塊存入到「記憶體緩衝(RAM Buffer)」當中,也就是 ESXi Host 的 Shared Block Cache 當中。

工作流程 D – De-duped Read I/Os
之後有 VM 虛擬主機送出相同的讀取請求內容時(相同的雜湊數值資料區塊),便會從 Shared Block Cache(RAM Buffer)當中,直接回應給送出讀取請求的 VM 虛擬主機,而不再需要到儲存設備進行資料的 I/O 存取(降低儲存設備工作負載)。

圖 7、CBRC 讀取快取機制中 Read I/O 工作流程圖

VM 虛擬主機資料寫入請求階段

工作流程 E – Write I/O Requests
當 VM 虛擬主機送出資料寫入請求時,首先會進行 Metadata Cache(Digest In-Memory Copy)的內容更新。

工作流程 F – Invalidate Hashes
將 Metadata Cache 內容當中,對應不到的雜湊數值資料區塊,標示為「無效(Invalid)」。

工作流程 G – Update Journal
接著在 Digest VMDK 內容中,更新 Journal Header 內容以準備更新資料區塊。

工作流程 H – Write to Disk
最後再將資料寫入到 Boot VMDK 當中。

圖 8、CBRC 讀取快取機制中 Write I/O 工作流程圖

沒有快取內容的資料讀取請求階段

工作流程 I – Non Cached Read I/Os
當 VM 虛擬主機的資料讀取未包含在快取內容時,便只能回到傳統的資料存取方式,也就是直接讀取 Boot VMDK 內容。

摘要檔案內容更新階段

工作流程 J – Digest Update
摘要檔案內容會在特定時間週期內進行更新(VMware Horizon View 管理介面中可設定)。或者當 VM 虛擬主機關機後,將會執行摘要檔案內容「清除(Flush)」,以及 Journal Area「歸零(zero)」的動作。若在摘要檔案更新時間週期內發生大量的無效內容情況時,「重新計算(Recompute)」機制便會被「觸發(Triggered)」,也就是重新計算磁碟內容後產生新的摘要檔案,以更換掉那些無效的快取內容。





Q4、如何為 ESXi Host 啟用 CBRC 讀取快取機制?

Question: 那麼我該如何為 VMware vSphere ESXi Host 啟用 CBRC 讀取快取機制? 如何設定 CBRC 讀取快取的空間大小? 如何調整摘要檔案的相關參數值?

Answer:  請開啟 vSphere Client 連接到 ESXi Host 或 vCenter Server 後,依序點選【ESXi Host > Configuration > Software > Advanced Settings > CBRC】項目,便可以進行 CBRC 讀取快取機制的設定。

圖 9、設定 CBRC 讀取快取機制

在 CBRC 讀取快取機制設定視窗中,相關欄位的參數值設定及項目說明如下:

  • CBRC.DCacheMemReserved: 設定要從 ESXi Host 當中,劃分出多少實體記憶體空間讓 CBRC 讀取快取機制使用(單位為 MB),最小數值為 100 最大則為 2048,此實作調整為最大空間 2048
  • CBRC.DCacheSize: 設定 CBRC Data Cache 大小(保持預設值即可)。
  • CBRC.DigestJournalBootInterval: 為了不影響 VM 啟動(Power On)作業,預設情況下延遲 10 分鐘後,才會啟動 Digest Journal 機制(保持預設值即可)。
  • CBRC.Enable: 決定 ESXi Host 是否要「啟用」Digest Reserved Cache Memory 機制。


點選 Digest 項目,則可以調整摘要檔案機制的相關參數值,例如,預設採用 SHA-1 雜湊演算法,你可以調整雜湊演算法為 SHA-256。請注意!! VMware 官方並建議你調整 Digest 參數值內容。

圖 10、調整 Digest 相關參數值





Q5、如何在 Horizon View 環境中整合 CBRC 讀取快取機制?

Question: 那麼我該如何在 VMware Horizon View 環境中,將底層 ESXi Host 當中的 CBRC 讀取快取機制整合進來? 又該如何確認 VM 虛擬桌面真的有套用 CBRC 讀取快取機制?

Answer:  從 VMware View 5.1 版本開始,便已經將底層的 ESXi Host Caching CBRC 機制整合進來,稱之為「View 儲存加速器(View Storage Accelerator)」。請登入 VMware Horizon View Administrator 管理介面,依序點選【View 組態 > 伺服器 > vCenter Server > 編輯 > 儲存空間】,在儲存設定視窗中請勾選「啟用 View 儲存加速器」項目,並在預設的主機快取大小欄位填入「2048」MB(請注意!! 此設定值將會覆蓋 ESXi Host 原有 CBRC 設定)。

圖 11、啟用 View 儲存加速器機制(整合 ESXi Host 的 CBRC 讀取快取機制)

接著在管理介面中依序點選【詳細目錄 > 集區 > 編輯 > 進階儲存】項目,勾選「使用 View 儲存加速器」項目,也就是針對該虛擬桌面資源池啟用 View 儲存加速器機制。

圖 12、為虛擬桌面資源池啟用 View 儲存加速器機制

順利將 ESXi Host 的 CBRC 快取機制整合,並且也在虛擬桌面資源池啟用 View 儲存加速器機制後,如何確認虛擬桌面有使用快取機制,請依序點選【詳細目錄 > 桌面 > 任一台虛擬桌面 > vCenter 設定】,在一般設定區塊中會看到 View 儲存加速器欄位,該欄位便是虛擬桌面目前是否有使用快取機制的狀態:

  • Off(關閉): 表示沒有採用 ESXi Host 的快取機制。
  • Current(目前): 表示採用 ESXi Host 的快取機制,且 Digest Cache 機制作用中。 
  • Out of date(過期): Digest Cache 機制可能有問題,需要 Regenerated Digest 內容。
  • Error(錯誤): 快取機制或 CBRC 運作過程中發生錯誤

圖 13、確認虛擬桌面是否使用 View 儲存加速器機制





結語

透過本文的說明讀者應該已經了解到,當您計劃導入及部署虛擬桌面環境,但是並沒有多餘的預算投資到儲存設備的快取機制當中,同時您知道儲存設備的工作負載以及 IOPS 效能,將嚴重影響使用者的操作體驗。此時不妨試試由 VMware 內建的 CBRC 讀取快取機制,並透過 VMware Horizon View 將 CBRC 讀取快取機制,整合成為 View 儲存加速器功能套用到虛擬桌面當中,以加速虛擬桌面在資料讀取請求上,能夠更快的得到回應以提升整體的使用者操作體驗。