Performance

磁碟 IO 性能差異——Hyper-V / CSV——Guest vs Host

  • November 4, 2015

我有兩個不同的 Hyper-V 2012 R2環境,它們使用iSCSI連接到他們的虛擬機儲存。雖然環境不同(一個是全部 10 GB,而另一個是混合 1 GB / 10 GB,一個在 RAID 6 中使用 SSD 陣列,而另一個是分佈在兩個陣列上的 RAID 10),我看到的奇怪行為是相同。

底線是,當我直接在主機上針對 CSV 執行磁碟 i/o 測試時,我得到了平均 IOPS 的特定值。但是,當我虛擬機中針對其“本地”磁碟(儲存在 CSV 上的 vhdx 文件)執行相同的測試時,我得到的IOPS 值大大降低。

從長遠來看,這是我正在測試的環境

  • 主持人

    • Windows 2012 R2 數據中心
    • 512 GB
    • 48個邏輯處理器
    • 10 GB 光纖用於 iSCSI 流量
    • 一 (1) 個正在執行的虛擬機
  • 貯存

    • EqualLogic PS6210S
    • RAID 6 中的 24 個 800GB SSD
    • 一 (1) 個 1TB 卷,包含一 (1) 個 vm
    • 10 GB 光纖
    • 主機和陣列連接到專用網路交換機
  • 虛擬機

    • Windows 2012 R2 數據中心
    • 127 GB 動態磁碟
    • 動態記憶體
  • 輸入輸出測試

    • FIO 2.2.10 –測試軟體
    • 針對 500 MB 測試文件的 70/30 R/W 混合(實際測試配置文件見下文)

當我從主機( )對 CSV 執行測試時,我分別獲得大約22k/9kC:\ClusterStorage\VM-Infrastructure的讀/寫 IOPS 。但是,當我在 VM 中針對其文件夾執行相同的測試時(VM 的 VHDX 文件儲存在’ 中的陣列上)我得到13k/6k的數字。C:\Temp``C:\ClusterStorage\VM-Infrastructure

這是一個已知問題嗎?我應該查看任何特定的主機/虛擬機設置以使虛擬機性能更接近我在主機上獲得的性能嗎?從 22k 讀取性能下降到 13k 是相當戲劇性的。我認為虛擬機內會有輕微的影響,但不會那麼大——在某些情況下高達 40%。

[global]
ioengine=windowsaio
directory=C\:\ClusterStorage\VM-Infrastructure
;directory=C\:\Temp
rw=randrw
rwmixread=70
;rwmixwrite=30
direct=1 ; 1 for direct IO, 0 for buffered IO
bs=8k
iodepth=32 ; For async io, allow 'x' ios in flight
invalidate=1 ; Invalidate page cache for file prior to doing io
numjobs=16 ; Create 'x' similar entries for this job
runtime=120
group_reporting ; ?
thread ; Use pthreads instead of forked jobs

[workload]
name=8k7030test
size=500m

經過進一步的研究和與儲存專家的一些討論,已經找到了罪魁禍首。

儘管主機執行的是單個虛擬機,並且該 vm 是唯一讀取和寫入儲存陣列的客戶端,但內置的Hyper-V 儲存和網路負載平衡器正在啟動並限制 vm。當負載平衡器被禁用時,虛擬機提供的 IOPS 數字與我們直接從主機看到的數字非常接近。

對於儲存操作,延遲值是83 ms2 ms對於網路。正如我們所知,預設門檻值過於激進或不適合 iSCSI 儲存連接。(iSCSI 連接當然會增加您在直接連接或本地儲存中看不到的延遲。)控制此(用於儲存)的系統資料庫設置是HKLM\System\CurrentControlSet\Services\StorVsp\IOBalance\Enabled. 設置值0 禁用平衡器。

更多資訊請訪問 http://www.aidanfinn.com/?p=13232

我們尚未決定是否將平衡器關閉。顯然,它就在那裡,並且開始發揮作用,這是有原因的。雖然它可能不應該為少數虛擬機打開,但當我開始載入主機時,它會更有益。我的主要目標是了解為什麼我的數字如此不同。

引用自:https://serverfault.com/questions/733714