Предыстория


Занимаясь разработкой и тестированием ПО, в т.ч. дома, приходится разворачивать виртуальную среду и устанавливать специализированное ПО как то: среды разработок, серверы базы данных, приложений и др. Вплоть до развёртывания полноценной тестовой среды. В моём случае у меня живёт целый домен AD с блекджеком клиентами с разными ОС, БД, брандмауэром, IIS и др. В случае, если всё это собрано на технике домашнего уровня, ощущается замедление производительности, особенно при работе с дисковой подсистемой. Конечно же, в случае однопользовательской нагрузки никаких проблем и зависаний, можно и подождать несколько секунд в большинстве случаев. Но в некоторых случаях снижение производительности уже капитально меня достало, в частности при работе в Visual Studio.

Замысел


РазвлекаясьРаботая с VmWare Workstation уже много лет, помнил, что при создании VM можно выбрать отдельных жёсткий диск для хранения данных:

image

Беглый поиск по сети не дал точных количественных оценок прироста производительности. Только общие рекомендации: то, что «наверное будет работать быстрее» и зависеть от конкретного железа, типов тестов и работы в VM. Решил попробовать развернуть там VM Windows 2012R2 и провести тесты скорости работы с диском сам, а также посчитать скорость загрузки VM с запуском Visual Studio 2013 и открытием проекта в ней. И для полноты картины расширить виды тестирования — провести аналогичные замеры при расположении VM на домашнем сетевом хранилище и в разных виртуальных машинах (VmWare и Virtual Box). Вдруг где-нибудь будут выдающиеся результаты?

Тестирование


Наборы тестирования

Итак, необходимо проверить следующие тесты:

  • CrystalDiskMark
  • Время запуска VM с открытием проекта в Visual Studio

Скомбинировав это с 5 разновидностями типов и конфигураций VM (VmWare и VirtualBox локально и по сети, VmWare на отдельном диске), получаем 10 тестов. Virtual BOX ещё не умеет работать с отдельными дисками/разделами.

Аппаратное окружение

Хост-машина:

ОС Windows 8.1;
VmWare Workstation 10.0.6;
Virtual BOX 5.0.16;
Intel Core i7 4core;
MB Asus P6X58D-E;
24 Gb RAM;
HDD: 256 Gb SSD для ОС;
HDD для VM: Segate Barracuda ST3250318AS, SATA-II, 8Mb, 7200rpm.

Сетевое хранилище:

ОС Windows 2012R2;
Intel Core i3 2core;
MB Asus P8H61-I;
4 Gb RAM;
HDD Seagate Constellation ES ST1000NM0011 SATA-III, 64 Мб, 7200rpm.

Используются встроенные в MB сетевые контроллеры, сеть между машинами 1 Гбит/с. Диски на хост-машине и в хранилище разные, это конечно может повлиять на результаты. Но запуск по сети тут являются не основной целью, поэтому перекручивать диски между хост-машиной и сетевым хранилищем я не стал.

ОС в во всех VM устанавливается с нуля, устанавливаются тулзы от VM, Visual Studio. в VM копируется и 1 раз открывается проект Visual Studio. При последующей перезагрузке измеряются показатели.

В случаях VMDK и VDI файлов разбивать на несколько не стал, вся VM хранится в одном файле.

Результаты


WmWare Workstation, VMDK на локальном диске (слева) и в сетевом хранилище (справа):

image

Virtual BOX, VDI на локальном диске (слева) и в сетевом хранилище (справа):

image

И долгожданное измерение, VmWare машина, использующая целый отдельный диск:

image

Как видно практически не отличается от запуска VM с хранением VMDK-файла на этом же диске. Т.е. никакого заметно прироста нет, всё в рамках погрешности. А что со временем запуска данных VM, открытием проекта в Visual Studio 2013 и открытии на редактирование файла в ней? Под проект я взял маленький сайт на ASP.NET размером 13 Мб, 161 файл. Открывал default.aspx из корня сайта.
Тест VmWare LocalVMDK VmWare отдельный диск VmWare по сети VirtualBOX LocalVDI VirtualBOX по сети
Запуск VM с VS, мин: сек 2:15 1:57 1:55 1:54 2:22

Как видно, небольшой выигрыш в скорости при использовании отдельного диска есть (выделено жирным). Разброс в показаниях по другим тестам и их выигрыш по сравнению с отдельным диском объяснить без более когерентной среды невозможно (перекручивать диски как минимум надо).

Также возник вопрос: как может влиять SSD диск в хост-машине на результаты? Ведь сами настройки VM я положил на него. И там при работе ОС лежит VMEM файл размером 2 Гб.

image

Понаблюдал за обращениями к SSD с настройками VM и этим VMEM файлом во время работы VM с отдельным диском. Ну вроде как обращений к SSD нет, 0-1% загруженности диска. Вот пример — момент инсталляции такой VM. Диск D используется под потолок, SSD не используется:

image

Всё-таки решил уйти от SSD и сохранить настройки VM и VMEM файл на том же диске, куда и замаплен VMDK. Так, чтобы этот диск взял на борт всю VM с потрохами. При создании VM и выборе отдельного диска есть возможность использовать не целый диск а Use individual partition на этом диске. Разбил диск на 2 части, немного (30 Гб) выделил подраздел для хранения настроек VM, а остальной RAW раздел отдал VM:

image

VM нормально создаётся, настройки сохраняются в видимый в хостовой ОС раздел. Но когда дело доходит до записи данных в раздел, всецело отданный для VM, появляется ошибка невозможности записи в него и VM выключается. Победить эту ошибку к сожалению не удалось, в чём дело не понятно.

Визуальные ощущения

По числам не видно, но время отклика интерфейса заметно выше, чем при работе с VMDK/VDI на том же диске или в сети.

Выводы


Хоть и по замерам CrystalDisk и времени старта эффект незначительный, визуальные ощущения от работы в VM, размещённой на отдельном физическом диске, заметны. «Тормозов» нет, работается как на хостовой машине. При полноэкранном режиме можно не заметить разницы.

Комментарии (8)


  1. questor
    14.03.2016 16:38

    Спасибо за интересное исследование. Тоже дома держу ворох виртуальных машин (вообще, у меня практически идентичная конфигурация, чуть ли не одинаковая модель SSD) и тоже вопрос производительности виртуальных машин интересует очень сильно.

    Есть ли ещё какие-то хитрые настройки Vmware и машин для увеличения производительности? Ужасно сидеть работать и при этом слышать, как музыка начинает хрипеть из-за нехватки ресурсов.


  1. Vovanys
    14.03.2016 17:33

    Vbox умеет юзать физ диски… https://www.virtualbox.org/manual/ch09.html#idp46457709443760


    1. Arvalon
      14.03.2016 17:42

      Действительно! Так далеко в мануал не добрался. Надо будет попробовать.


      1. Win32Sector
        14.03.2016 20:25

        Кроме того, у Vbox есть замечательная вещь — кеширование ввода/вывода, которое значительно ускоряет работу виртуалок.

        image


  1. nikerossxp
    14.03.2016 18:26

    Я в итоге приобрёл БУшный комп на i3, запихнул туда дисков и оперативы. Поставил ESXI и больше не парюсь.


    1. Arvalon
      14.03.2016 18:55

      Какой i3, модель? Много одновременно работающих машин тянет?


      1. nikerossxp
        14.03.2016 21:51
        +1

        2100, 16Гб DDR3. Тянет 2 линуха (многоцелевой хост и FreePBX), и 2 винды (домен-контроллер с hMail и игровой сервер). Может и больше, но таки надо понимать, что хосты сами по себе не загружены.


  1. AlexBin
    16.03.2016 12:47

    Есть еще замедления из-за кеширования, вы не пробовали делать вот так: hard-disk.useUnbuffered = «TRUE»?