盡管任何硬件資源都有可能成為影響虛擬機性能的瓶頸,但存儲IOPS往往是限制因素之一。因為存儲IOPS往往供不應(yīng)求,所以虛擬化廠商提供了允許管理員限制虛擬機存儲I/O消耗的功能。然而高效率地使用上述功能的關(guān)鍵是了解存儲IOPS當前是如何在虛擬機之間分配的。
每個hypervisor廠商都有各自的測量并分配存儲IOPS的方式。以微軟Hyper-V為例,調(diào)節(jié)存儲IOPS消耗的主要機制借助于QoS管理功能,該功能往往被稱為存儲QoS。
使用QoS管理
QoS管理設(shè)置基于單塊虛擬硬盤。如圖A所示,該功能可以被用于限制虛擬機消耗更少的存儲IOPS。作為一個替代方案,QoS管理可以被用于為虛擬機預(yù)留存儲IOPS,這樣就可以保證虛擬機能夠獲得的最小IOPS值——如果有更多可用的IOPS,那么虛擬機能夠使用的IOPS將相應(yīng)增加。
圖A. 虛擬硬盤QoS管理配置界面
QoS管理功能允許管理員基于單塊虛擬硬盤預(yù)留存儲IOPS或者對其進行限制。
盡管QoS管理功能很便利,但只有管理員知道可用的存儲IOPS有多少以及當前使用情況時,該功能才能夠派上用場。不幸的是,Hyper-V Manager并沒有提供該信息,但可以使用PowerShell檢索與Hyper-V相關(guān)的存儲性能信息。
虛擬機指標追蹤
PowerShell提供了一個名為Measure-VM的cmdlet,使你能夠追蹤各類虛擬機指標。在能夠使用該cmdlet前,需要啟用虛擬機的資源消耗計量。輸入如下命令可以啟用運行在當前Hyper-V服務(wù)器上所有虛擬機的資源消耗計量:Get-VM | Enable-VMResourceMetering
輸入如下命令可以確認是否已經(jīng)啟用了虛擬機的資源消耗計量:
Get-VM | Select-Object Name, ResourceMeteringEnabled
啟用虛擬機的資源消耗計量并且生成了一些計量數(shù)據(jù)后,你可以使用Measure-VM cmdlet顯示虛擬機的資源使用情況。例如,如果你想針對所有虛擬機使用默認的資源計量數(shù)據(jù),可以輸入如下命令:
Get-VM | Measure-VM
圖B顯示了啟用虛擬機計量、確認虛擬機計量以及用以及顯示默認計量數(shù)據(jù)的過程。
圖B:你可以使用Measure-VM cmdlet顯示虛擬機計量數(shù)據(jù)
如上圖所示,資源計量機制運轉(zhuǎn)良好,顯示值為零表明虛擬機未啟動。然而問題是并沒有顯示與存儲IOPS相關(guān)的信息。
顯示IOPS數(shù)據(jù)
盡管Measure-VM cmdlet默認沒有顯示存儲IOPS數(shù)據(jù),但可以做到。實際上,cmdlet可以顯示每臺虛擬機的IOPS平均值、平均延遲情況、磁盤數(shù)據(jù)寫入以及磁盤數(shù)據(jù)讀取情況。
只需要在Measure-VM cmdlet后追加 Select-Object參數(shù)就可以顯示上述數(shù)據(jù),然后指定你想顯示的指標即可。然而,務(wù)必牢記在生產(chǎn)環(huán)境中虛擬機往往位于使用共享存儲的故障切換集群中。因此全面獲取IOPS數(shù)據(jù)的唯一方式是查看所有服務(wù)器上的所有虛擬機??梢試L試利用如下命令創(chuàng)建一個簡單的腳本:
$Servers = "Hyper-V-4", "Prod1"
ForEach ($Server in $Servers){
$VMs = Get-VM
ForEach ($VM in $VMs){
$VM | Measure-VM | Select-Object VMName, ComputerName, AggregatedAverageNormalizedIOPS, AggregatedAverageLatency, AggregatedDiskDataRead, AggregatedDiskDataWritten | Format-List
}
}
腳本的第一行列出了將要被監(jiān)控的每臺Hyper-V主機的名字。簡單起見,這里只列出了兩臺服務(wù)器,但你通常要輸入所有Hyper-V服務(wù)器的名字。該腳本使用循環(huán)檢查所有的服務(wù)器,每次檢查一臺。然后嵌套循環(huán)檢索并顯示當前服務(wù)器上所有虛擬機的性能數(shù)據(jù)。你可以看到圖C中腳本的部分輸出結(jié)果。腳本列出了每臺虛擬機的性能數(shù)據(jù)、虛擬機名以及虛擬機當前所在的主機服務(wù)器。
圖C. 腳本顯示虛擬機的存儲性能數(shù)據(jù)
Hypervisor功能,比如QoS管理有助于分配存儲IOPS。然而為了高效率地使用該功能,你需要知道IOPS目前的使用情況。