我有两个不同的 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的环境
当我从主机 ( 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 ms和2 ms 。 尽我们所知,默认的阈值过于积极,或者仅仅不适合iSCSI存储连接。 (iSCSI连接当然会增加延迟,您不会看到直接连接或本地存储。)控制此(用于存储)的registry设置是HKLM\System\CurrentControlSet\Services\StorVsp\IOBalance\Enabled 。 将值设置为0 将禁用平衡器。
更多信息可以在http://www.aidanfinn.com/?p=13232find
我们还没有决定是否要closures平衡器。 显然它在那里,并且有一个原因。 虽然它可能不应该为less数的虚拟机,当我开始加载主机,这将是更有利的。 我的主要目标是理解为什么我的数字是如此的不同。