у меня есть два разные Hyper-V 2012 R2
среды, которые используют iSCSI для подключения к хранилищу виртуальной машины. Хотя среды различны (одна - все 10 ГБ, а другая - смешанная 1 ГБ / 10 ГБ, одна использует массив SSD в RAID 6, а другой - RAID 10, распределенный по двум массивам), я наблюдаю странное поведение. тот же самый.
Суть в том, что когда я запускаю тест ввода-вывода диска прямо на хосте по сравнению с CSV я получаю конкретное значение для среднего числа операций ввода-вывода в секунду. Однако когда я запускаю тем же тест в пределах виртуальную машину на ее "локальный" диск (файл vhdx, который хранится в CSV), я получаю значительно уменьшается Значение IOPS.
Для сравнения: вот среда, которую я тестирую.
Когда я запускаю тест с CSV из хозяин (C:\ClusterStorage\VM-Infrastructure
), Я получаю около 22k / 9kсоответственно. Однако когда я запускаю тот же тест в виртуальной машине против ее C:\Temp
папка (с файлом VHDX виртуальной машины, хранящимся в массиве в C:\ClusterStorage\VM-Infrastructure
') Я получаю количество 13 тыс. / 6 тыс..
Это известная проблема? Существуют ли какие-либо конкретные настройки хоста / виртуальной машины, на которые я должен обратить внимание, чтобы приблизить производительность виртуальной машины к той, которую я получаю на хосте? Падение производительности чтения с 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
После дальнейших исследований и некоторых дискуссий с экспертами по хранению виновник был найден.
Несмотря на то, что хост запускал не замужем виртуальная машина, и эта виртуальная машина была только клиент читает и записывает массив хранения, встроенный Хранилище Hyper-V и подсистема балансировки сетевой нагрузки включали и подавляли виртуальную машину. Когда балансировщик нагрузки был отключен, виртуальная машина показывала значения IOPS, очень близкие к тому, что мы видели непосредственно с хоста.
Для операций хранения задержка порог ценность 83 ms
и 2 ms
для сетей. Насколько мы можем судить, пороговые значения по умолчанию слишком агрессивны или просто не подходят для подключений к хранилищу iSCSI. (Соединения iSCSI, конечно, увеличивают задержку, которую вы не увидите с напрямую подключенным или локальным хранилищем.) Параметр реестра, который управляет этим (для хранилища), HKLM\System\CurrentControlSet\Services\StorVsp\IOBalance\Enabled
. Установка значения 0
отключает балансир.
Более подробную информацию можно найти на сайте http://www.aidanfinn.com/?p=13232
Пока не решили, будем ли держать балансир выключенным. Очевидно, что он есть и срабатывает не зря. Хотя это, вероятно, не должно быть включено для нескольких виртуальных машин, когда я начну загружать хост, это будет более полезно. Моей главной целью было понимание Зачем мои цифры были такими несопоставимыми.