如何發現虛擬化性能瓶頸?
我們最近開始將我們的 C++ 建構伺服器從真實機器轉移到虛擬機中。(MS Hyper-V)
我們有一些性能問題,我目前不知道如何解決。我們有:
Test-Box
- 這是我的同事用來設置虛擬機的桌面工作站硬體,然後我們將其移至實際的伺服器硬體Srv-Box
- 這是伺服器硬體Test-Box-Real
- 這是直接在 Test-Box 硬體上執行的 WindowsTest-Box-VM
- 這是 Test-Box HW 上 Hyper-V VM 中的 WindowsSrv-Box-Real
- 這是在 Srv-Box 硬體上執行的 Server2008R2。Srv-Box-VM
- 這是在 Srv-Box HW 上的 Hyper-V VM 中執行的 Windows,即在 Srv-Box-Real 上。現在,問題是我們比較了
Test-Box-Real
和之間的建構時間Test-Box-VM
,它們基本相等(大約在 2% 以內)。然後我們將 VM 移到 Srv-Box 機器上,我們看到 和 之間的性能顯著下降
Srv-Box-Real
,Srv-Box-VM
也就是說,我們在測試硬體上沒有看到任何差異,但我們現在確實看到實際的性能存在重大差異伺服器硬體。(在 VM 內建構速度大約慢 50%。)我應該補充一點,Test-Box 和 Srv-Box 都只執行這一個VM,沒有做任何其他事情。
我還應該注意,“真正的”作業系統是 Win2008R2(64 位),而虛擬機託管的作業系統是 Wind2003R2(32 位)。
硬體規格:
Srv-Box
:
- Intel XEON E5640 @ 2.67Ghz(這意味著真實係統上有 8 個核心具有超執行緒,而 VM 上“只有”4 個核心,因為 Hyper-V 不允許超執行緒,但核心數量似乎無法解釋問題這裡。)
- 16GB RAM(我們為 VM 分配了 4GB)
- 虛擬 DELL RAID 1(2 個 450GB HUS156045VLS600 Hitachi 15k SAS 驅動器)
Test-Box
:
- 英特爾至強 E31245 @ 3.3GHz
- 16GB 記憶體
- WD VelociRaptor 600GB 10k RPM SATA
再次注意,我只關心 Srv-Box-Real 和 Srv-Box-VM(高)之間的差異與 btw 看到的差異。Test-Box-Real 和 Test-Box-VM(低)。
為什麼在比較 VM 與 Real 性能時一台機器會有奇偶校驗,而另一台(伺服器級硬體不少於)會有很大的差異?(兩者都是 XEON CPU …)
從顯而易見的開始 - 監控性能計數器,如果可能的話,使用 Ressource MOnitor。CPU、IO 處理如何?標準的“瓶頸幾乎是 IO,對於任何擁有超過 2-3 個 VM 的東西來說,你的 2 個驅動器聽起來像是非常糟糕的 IO,尤其是當 C++ 的建構伺服器遇到一些殘酷的事情時(即基於 HEAVY IO,編譯器在通常是,但 C++ 在這個領域相當廣泛——我使用 SSD 只是為了建構)。
這是標準管理員——此時虛擬機沒有什麼特別之處。基本上找到瓶頸你先找到它。
IO 也可以通過 - 動態磁碟。僅有助於在建構步驟(工作文件)中放入非動態光碟。那裡發生了大量的 IO。
現在,是的,Raptor 的 IOPS 比 15k SAS 少,但它很可能是非共享的。
SRV-HW 是否會耗盡所有 CPU 核心?那麼另一個項目…
關於您的 CPU 限制,順便說一句,目前版本的 Hyper-V 支持的核心數量多於每個 VM 4 個,因此可能需要升級… Server 2012 可供幾乎所有不在商店購買盒子的人使用現在,我從 MS 儲存庫中獲得了 8 月 16 日的副本。
但首先您要一步一步地進行正常操作 - 通過使用資源監視器和性能找出瓶頸所在
過去我也遇到過類似的問題,我們追踪到這個問題,在你的物理伺服器上寫記憶體 禁用它,然後再試一次。
要記住的另一件事是你只是在與很多差異作鬥爭,
- 虛擬機
- 不一樣的記憶
- 不同的磁碟(VHD 與物理)
盡可能多地消除並重試。