VMWare 在虛擬機磁碟設定時候 可以選擇 thin provisioning 與thick.但是不管效能或是資料安全性視怎樣狀況,讓我一探究竟.
本文翻譯這篇 https://www.vmware.com/pdf/vsp_4_thinprov_perf.pdf 後半段
先來看原文所說的thin provisioning 與thick 效能比較.
測試1:量測方法
每個 vSphere ESX 伺服器執行一個使用 Iometer 製造 I/O 負載的虛擬機。每個虛擬機的資料儲存硬碟都儲存在共享的LUN,而且,根據實驗的選擇將每個虛擬機的資料儲存硬碟配置為 thin-provisioned 或 thick-provisioned。
執行各個 Iometer 測試,每次2分鐘,然後重新啟動每個虛擬機。 Iometer 的完整重複執行包括通過1K-512K的所有區塊大小,並在適當的情況下使用依序和隨機讀/寫的工作量。 我們每個測試跑2分鐘,以便清楚地識別出 thick 和 thin 的兩個不同設定的階段歷程:
歸零,當VMFS區塊需要在它們寫入之前歸零
後歸零,當所有的VMFS區塊歸零之後,在寫入前沒有歸零需要使用空間
在測試的期間我們收集了以下的指標項目:
使用Iometer測量Guest I/O 存取量與延遲
Host 處理器的消耗量
使用EMC Navisphere analyzer 量測陣列端的存取量與延遲數
SCSI 保留衝突
VMDK資訊例如預備歸零的區塊與VMFS層在測試前後的區塊數
測試 1 結果
這個測試的結果回答了以下這些問題
1. thin provisioning 的表現與 thick 的對比?
2. thin provisioning 的規模與 thick 的相比?
3. 在 thin 磁碟上對於外部的碎片有什麼樣的效能衝擊?
4. 當一個 thin 磁碟分享同一個容量時 thick 磁碟的效能?
thin provisioning 的表現與 thick 的對比?
我們的測試顯示出thin與thick磁碟在比較時都有相同的存取量,圖四顯示了執行連續寫入的結果。
這張圖顯示出在後歸零階段的thin與thick磁碟這些工作量的總存取量大約在每秒180MB,以及當磁碟是在歸零階段時大約是每秒60MB。因為當空的區塊在第一次寫入時需要歸零,因此歸零階段的數字在兩種磁碟都如預期的大幅降低。
圖三:thin磁碟的總存取量與thick磁碟相似
對於更常見的工作負載(這些並非I/O密集型的工作負載)。請注意,歸零和後歸零階段的磁碟總存取量在這個測試中沒有顯示出明顯的差異
thin provisioning 的規模與 thick 的相比?
要回答這個問題,我們收集了 1 台機器上的連續寫入資料並且擴增到 16 台。
圖4:比較thin與thick磁碟在歸零與後歸零階段的存取量,並且將資料量從1台擴增到16台
結果顯示了thin與thick虛擬磁碟在歸零與後歸零階段也是相近的存取量。
還有值得注意的是當我們從少量擴增到大量 host 時我們沒有看見任何 SCSI 保留衝突對效能的影響。
在 thin 磁碟上對於碎片有什麼樣的效能衝擊?
要回答這個問題,首先需要看看兩種類型的碎片:內部與外部,對於VMFS-3檔案系統的影響。
內部碎片
內部碎片通常在檔案系統設置一個檔案的區塊時,但檔案沒有使用整個區塊。VMFS-3透過使用次級區塊配置器處理這個問題。小檔案使用次級區塊來替代檔案區塊。一個次級區塊是1MB檔案區塊大小的1/16,8MB大小檔案區塊的1/128。
外部碎片
外部碎片發生在隸屬於同一個檔案的區塊分散在不同的位置,這種分散式資料會因為增加搜尋時間跟旋轉延遲而影響效能,而這正是硬碟磁頭物理移動到正確軌道所需的時間。
舉例來說,一個虛擬機的檔案可能會在物理的磁碟儲存空間分為三個非連續性的區塊位置,如下圖所示,碎片就是兩個區塊間的距離,如下圖標註為gap的區域
圖5:當虛擬機器資料寫入VMFS的非連續區域而變成碎片
外部碎片對 vStorage thin-provisioned 磁碟沒有產生太大的影響是因為下列幾個原因:
VMFS預設的檔案大小是1MB。因為大多的I/O請求是64KB,1MB的VMFS區塊對多數的I/O請求而言是夠大的空間,不會超出邊界。所以就算區塊不是連續的(沒有彼此緊鄰),I/O請求也會執行在本地連續(相近的)區域。
當 thin-provisioned 磁碟完全成長,它的動作會跟預先分配並歸零的(eager zeroed thick)thick磁碟相同。在一個完全歸零與成長的磁碟上,兩個資料間的間隙通常就是區塊的大小一樣大。
磁碟陣列通常有很大的快取,大多數的磁碟寫入會在那邊被吸收。SAN裝置的這個特性使得碎片在磁碟寫入的效能上很難有顯著的影響。
特定的 thin 磁碟上碎片如何增長?
通常,虛擬機被註冊到分配的主機,並且主機的區塊被分配得更靠在一起,使被分配的虛擬磁碟在實體磁碟上的檔案區塊有空間位置。 配置的過程也取決於分派ESX主機上運行的工作量。
thin-provisioned 磁碟不會預先分配它的儲存空間。也因為如此,如果有幾個 thin-provisioned 虛擬磁碟正在使用著,那麼即使整體上從該 ESX 主機配置的區塊將緊密結合在一起,也不能保證單一 thin-provisioned 虛擬磁碟的分配磁碟會靠近在一起。
下圖顯示了碎片數量對 VMware vStorage thin-provisioned 磁碟的性能影響很小。
圖6:碎片對於 thin 磁碟上存取量的性能沒有明顯的影響
上圖所示的數據來自64K隨機寫入。這些碎片是通過將這個 thin 磁碟擴增到 12GB 的同時選擇適當的工作量而製造的。 利用 1KB 隨機寫入工作量來產生一個空的 12GB thin 磁碟,產生 1MB 區塊大小的 VMFS 容量裡有最多 12288 個碎片。 一個 1KB 的連續寫入製造了極少量的碎片,就不列入參考。
當 thin 磁碟跟 thick 磁碟在同一個容量空間時的性能?
下圖顯示了當thin磁碟在歸零階段時,thick磁碟的存取量性能只有被輕微影響
圖7:當thin磁碟同時與thick磁碟共存在同一個主機時的性能影響
測試 2:檔案拷貝的工作量
測試 2 要測量 thin-provisioned 磁碟加上相對輕量的檔案拷貝工作量。
測試 2 環境設定
下圖描述了為了此測試而設計的硬體配置
圖8:測試 2 的硬體配置
三台伺服器
型號: HP ProLiant DL380
處理器: Two Intel Xeon processors @ 2.8GHz with hyperthreading Memory: 4GB RAM
光纖卡: QLogic ISP-2432 based 4Gb adapter
儲存陣列
型號: EMC Clariion CX700
快取: 1GB exclusive read cache per SP, 2GB shared write cache
磁碟: 15 * ST371460 Seagate 10,000 RPM FC disks
前端連線: One 2Gbps FC connection to each storage processor in Active/Passive mode
虛擬機群
用戶端: Windows Server 2003 Enterprise Edition, 32-bit, 1 vCPU 512MB RAM (16 client VMs, 8 VMs per host)
伺服器端: Windows Server 2003 Enterprise Edition, 32-bit, 2 vCPU 1GB RAM
測試 2 量測方法
測試 2 測量在兩台ESX主機上的多台客戶端虛擬機上同時操作的複製檔案的性能表現,同時檔案是由另一個獨立的ESX主機上的SMB檔案伺服器虛擬機提供。網路使用專用1Gbit環境傳輸。每個客戶端VM將檔案從網路上複製到自己的虛擬磁碟,直到塞滿容量。在每次循環期間複製約290MB的檔案。所有客戶端虛擬機的虛擬磁碟設定在單個VMFS上。
透過這樣的配置,我們測量了各客戶端VM進行每個循環的檔案複製平均時間,同時將虛擬磁碟的後備磁碟類型更改為 thin(歸零)、thin(後歸零)、zeroed thick 和 eager zeroed thick。
測試2結果
下圖顯示了測試2的結果
圖9:在多台虛擬機器間複製一個檔案工作量的測試結果
結果更增強了我們之前所說的:
透過圖表比較 Thin(zeroing)與 Zeroed thick,thin-provisioned 磁碟與預設的磁碟格式(zeroed thick)在區塊配置與歸零階段相比並沒有效能的差距。
透過圖表比較 Thin(post-zeroed)與 Eager zeroed thick,thin-provisioned 磁碟由於碎片的影響而沒有效能的差距,而且跟完全配置的 zeroed thick 磁碟(eager zeroed thick)相比也是一樣。
效能建議
這一節提供陣列端的 thin provisioning、效能測試與監控的建議
陣列端的 Thin Provisioning 與 VMware vStorage Thin Provisioning
有些儲存陣列製造商在 LUN 的後端使用 thin provisioning。這種類型的 thin provisioning 可以做到第一次訪問時根據需求去 provisioning 以及需求區塊初始化。陣列也可以包含其他節省空間的措施像是刪除重複的 zeroed 區塊。
VMware vStorage thin provisioning 透過工作量最佳化它的空間,允許更多的虛擬機器來符合資料的儲存。陣列端的 thin provisioning 可以進一步最佳化物理的空間。您可以在您的 vSphere 環境中一起使用 VMware vStorage thin provisioning 與陣列端的 thin provisioning。不過,我們建議小心監控並管理 thin-on-thin 系統。
性能測試建議
如果您使用 thin provisioning 磁碟做性能測試,請確保您有足夠的時間把 thin 磁碟暖機,這樣才能完全的成長,或能確保您性能測試裡追蹤的 nb 與 tbz 值,也才能讓您知道 thin 磁碟正在經歷何種階段。
其他建議
我們建議使用警報來幫助監控 thin 磁碟的超額使用。特別是以下這些警報觸發會特別有用:Datastore Disk Usage % 與 Datastore Disk Overallocation % 。使用 VMware vCenter 伺服器,您可以提供報告以及設定臨界值來主動管理增量及容量。
Thin provisioning 可能會造成物理磁碟空間的超量使用。您可以使用 Storage VMotion 來管理超量使用,也能透過它來管理 VMDK 的動態融合或者 VMFS 的容量增長,以及動態增加您的資料儲存空間。
注意:Swap 檔、redo log、與快照的連結複製不會使用 thin provisioning.
結論:
在本文中,我們確定了 thin-provisioned 磁碟與 thick-provisioned 磁碟在歸零與後歸零階段的磁碟成長狀態有著非常相近的運算量。另外,將伺服器從1台擴展到16台能夠看到機器的增加能改善總存取量。當所有的磁碟都被配置與歸零完畢,存取量也如預期的維持在一個穩定的狀態。下一步,我們展示了外部碎片對效能的影響是微乎其微。最後,我們看到一個 thick 虛擬磁碟與一個 thin 磁碟共存的虛擬機器上性能也幾乎不受影響。另外對 thin provisioning 與 thick provisioning 複製檔案工作量的比較顯示兩者也是相當的。歸零與後歸零階段的磁碟成長量的I/O低到可以被忽略。
我們收集的數據顯示 VMware vStorage thin provisioning(thin虛擬磁碟的用量)與 VMware vStorage 預設方式的 provisioning (zeroed thick 虛擬磁碟的用量)有著同等的效能。此外 VMware vStorage thin provisioning 提高了儲存空間利用率,可以節省物理儲存硬體。
但是就資料安全性來講 由於thin provisioning 中間已經沒有GAP .因此.Raw Recovery 算法已經無效. 若Bitmap沒有保留 是不可能再將thin provisioning 磁碟格式資料內恢復的.
附錄
這一節包含了重新創建這個測試的資訊,包括有:
如何使用 thin-provisioned 磁碟
to-be-zeroed 區塊(tbz)與 number of blocks(nb)的描述資訊,與如何找到這些訊息。
使用 Thin-Provisioned 磁碟
使用 thin 磁碟製造虛擬機器可以讓這些磁碟存取比它們實際使用上更大的空間。這個儲存空間被分配並在虛擬作業系統得用更多空間時使用VMFS-3的驅動來根據需求擴展。
虛擬磁碟在創建的過程中設定為 thin 是很簡單的,在 Create a Disk 頁面,選擇 Allocate and commit space on demand (Thin Provisioning) 的選項
已經存在的 thick 磁碟在 Storage VMotion 的遷移過程中也可以轉換為 thin。在 Disk Format 頁面,選擇 Thin Provisioned Format。
在命令列使用 vmkfstools 輸入以下指令可以將空間利用不完全的 thick 磁碟空間轉換成 thin :
vmkfstools –i <thick_disk>.vmdk <thin_disk>.vmdk –d thin
To-Be-Zeroed Blocks 以及 Number of Blocks
Zeroed-thick 磁碟與 thin 磁碟都會經過歸零與後歸零階段。為了在我們的實驗中進行數據收集和解釋,我們定義了 to-be-zeroed blocks (tb) 與 number of blocks (nb) 在 zeroed thick 磁碟與 thin 磁碟的變量。因為 zeroed thick 是 thick 虛擬磁碟的預設配置方式,因次這次研究中就不包含 eager zeroed thick 的數據。
針對 thin 與 zeroed-thick 磁碟類型,我們做了以下的設定:
tbz 是要歸零的區塊
nb 是現用磁碟的區塊數而且 nb = 磁碟大小(MB)/VMFS區塊大小(MB)來定義磁碟的預先配置狀態。
Thick 虛擬磁碟
在進入歸零階段之前,以下狀況在 thick 磁碟上都是正確的:
nb=磁碟大小/VMFS區塊大小,因為它的區塊被預先配置了
tbz=nb ,在啟動時。
thick 磁碟在進入歸零階段時,tbz 會減少所有的區塊直到0為止(沒有區塊留下來歸零)
圖10:thick 磁碟預先配置了12GB,在歸零與寫入的過程中,nb=12288(每個VMFS區塊為1MB,在12GB磁碟中有12288MB)
Thin 虛擬磁碟
在進入歸零階段之前,以下狀況在 thin 磁碟上都是正確的:
啟動時 nb=0,因為磁碟並沒有被預先配置
啟動時 tbz=nb
歸零階段的 thin 磁碟:
nb 從 0 增加到磁碟大小/VMFS區塊大小
tbz 為 0 ,當區塊被增加以及需要歸零的時候
圖11:Thin磁碟(1MB VMFS區塊大小)當增量、歸零及寫入直到12GB,這時候 nb=2
當 thin 磁碟完成歸零階段,它會因為以下條件進入後歸零階段:
nb=磁碟大小/VMFS區塊大小,當區塊被配置後
tbz=0,因為所有區塊被歸零
在這個階段,thin 磁碟跟 zeroed thick 磁碟有著相似的動作與效能。請見表2,數值與 Post-Zeroing 是相同的。
表2:thin 與 thick 磁碟都為 12GB, tbz 與 nb 在歸零與後歸零階段的數值 – VMFS 區塊大小在這個範例均為 1 MB。
獲取實際數值
在測試中,磁碟的 tbz 與 nb 值是用以下方法決定的:
vmkfstools –D <flat-disk.vmdk>
我們檢視了 /var/log/messages 中 nb 與 tbz 的資料:
vmkernel: FS3: 142: <START flat-disk.vmdk>
vmkernel: Lock [type 10c00001 offset 64833536 v 734, hb offset 3940352
vmkernel: Addr <4, 121, 193>, gen 592, links 1, type reg, flags 0x0, uid 0, gid 0, mode 600 vmkernel: len 12884901888, nb 12285 tbz 0, cow 0, zla 3, bs 1048576
log 最後一行顯示 nb 與 tbz 區塊。在上面的例子中,這個磁碟已經完全成長與歸零。