磁盘IO性能差异 – Hyper-V / CSV – 来宾与主机

我有两个不同的 Hyper-V 2012 R2环境,它们使用iSCSI连接到他们的虚拟机存储。 虽然环境是不同的(一个是10 GB,而另一个是混合1 GB / 10 GB,一个是在RAID 6中使用SSDarrays,而另一个是在两个arrays中分布的RAID 10),我看到的奇怪行为是一样。

底线是,当我直接在主机上运行磁盘I / Otesting时,我得到了平均IOPS的特定值。 但是,当我虚拟机内对“本地”磁盘(存储在CSV中的vhdx文件)运行相同的testing时,IOPS值会大大降低

从这个angular度来看,这里是我正在testing的环境

  • 主办
    • Windows 2012 R2 Datacenter
    • 512 GB
    • 48个逻辑处理器
    • 用于iSCSIstream量的10 GB光纤
    • 一(1)台虚拟机正在运行
  • 存储
    • EqualLogic PS6210S
    • 24个800GB SSD的RAID 6
    • 一个(1)1TB容量包含一个(1)vm
    • 10 GB光纤
    • 主机和arrays连接到专用networking交换机
  • 虚拟机
    • Windows 2012 R2 Datcenter
    • 127 GBdynamic磁盘
    • dynamicRAM
  • I / Otesting
    • FIO 2.2.10 – testing软件
    • 70/30 R / W与500 MBtesting文件混合(见下面的实际testingconfiguration文件)

当我从主机C:\ClusterStorage\VM-Infrastructure )对CSV进行testing时,读/写IOPS分别为22k / 9k 。 但是,当我在虚拟机内对C:\Temp文件夹运行同样的testing时(虚拟机的VHDX文件存储在C:\ClusterStorage\VM-Infrastructure的arrays中),我得到的数字是13k / 6k

这是一个已知的问题吗? 是否有任何特定的主机/虚拟机设置,我应该看看让虚拟机的性能更接近我得到的东道国? 从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 

经过与储存专家的进一步研究和一些讨论,发现了罪魁祸首。

即使主机运行的是单个虚拟机,并且该虚拟机是唯一读取和写入存储arrays的客户端,但内置的 Hyper-V存储和networking负载平衡器正在踢入并限制虚拟机。 当负载均衡器被禁用时,虚拟机将IOPS数字设置得非常接近我们直接从主机看到的数字。

对于存储操作,networking延迟值为83 ms2 ms 。 尽我们所知,默认的阈值过于积极,或者仅仅不适合iSCSI存储连接。 (iSCSI连接当然会增加延迟,您不会看到直接连接或本地存储。)控制此(用于存储)的registry设置是HKLM\System\CurrentControlSet\Services\StorVsp\IOBalance\Enabled 。 将值设置为0 将禁用平衡器。

更多信息可以在http://www.aidanfinn.com/?p=13232find

我们还没有决定是否要closures平衡器。 显然它在那里,并且有一个原因。 虽然它可能不应该为less数的虚拟机,当我开始加载主机,这将是更有利的。 我的主要目标是理解为什么我的数字是如此的不同。