磁碟 IO 性能差異——Hyper-V / CSV——Guest vs Host
我有兩個不同的
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/9k
C:\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 ms
和2 ms
對於網路。正如我們所知,預設門檻值過於激進或不適合 iSCSI 儲存連接。(iSCSI 連接當然會增加您在直接連接或本地儲存中看不到的延遲。)控制此(用於儲存)的系統資料庫設置是HKLM\System\CurrentControlSet\Services\StorVsp\IOBalance\Enabled
. 設置值0
禁用平衡器。更多資訊請訪問 http://www.aidanfinn.com/?p=13232
我們尚未決定是否將平衡器關閉。顯然,它就在那裡,並且開始發揮作用,這是有原因的。雖然它可能不應該為少數虛擬機打開,但當我開始載入主機時,它會更有益。我的主要目標是了解為什麼我的數字如此不同。