Предыстория
Занимаясь разработкой и тестированием ПО, в т.ч. дома, приходится разворачивать виртуальную среду и устанавливать специализированное ПО как то: среды разработок, серверы базы данных, приложений и др. Вплоть до развёртывания полноценной тестовой среды. В моём случае у меня живёт целый домен AD с
Замысел
Беглый поиск по сети не дал точных количественных оценок прироста производительности. Только общие рекомендации: то, что «наверное будет работать быстрее» и зависеть от конкретного железа, типов тестов и работы в 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 на локальном диске (слева) и в сетевом хранилище (справа):
Virtual BOX, VDI на локальном диске (слева) и в сетевом хранилище (справа):
И долгожданное измерение, VmWare машина, использующая целый отдельный диск:
Как видно практически не отличается от запуска 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 Гб.
Понаблюдал за обращениями к SSD с настройками VM и этим VMEM файлом во время работы VM с отдельным диском. Ну вроде как обращений к SSD нет, 0-1% загруженности диска. Вот пример — момент инсталляции такой VM. Диск D используется под потолок, SSD не используется:
Всё-таки решил уйти от SSD и сохранить настройки VM и VMEM файл на том же диске, куда и замаплен VMDK. Так, чтобы этот диск взял на борт всю VM с потрохами. При создании VM и выборе отдельного диска есть возможность использовать не целый диск а Use individual partition на этом диске. Разбил диск на 2 части, немного (30 Гб) выделил подраздел для хранения настроек VM, а остальной RAW раздел отдал VM:
VM нормально создаётся, настройки сохраняются в видимый в хостовой ОС раздел. Но когда дело доходит до записи данных в раздел, всецело отданный для VM, появляется ошибка невозможности записи в него и VM выключается. Победить эту ошибку к сожалению не удалось, в чём дело не понятно.
Визуальные ощущения
По числам не видно, но время отклика интерфейса заметно выше, чем при работе с VMDK/VDI на том же диске или в сети.
Выводы
Хоть и по замерам CrystalDisk и времени старта эффект незначительный, визуальные ощущения от работы в VM, размещённой на отдельном физическом диске, заметны. «Тормозов» нет, работается как на хостовой машине. При полноэкранном режиме можно не заметить разницы.
Комментарии (8)
Vovanys
14.03.2016 17:33Vbox умеет юзать физ диски… https://www.virtualbox.org/manual/ch09.html#idp46457709443760
Arvalon
14.03.2016 17:42Действительно! Так далеко в мануал не добрался. Надо будет попробовать.
Win32Sector
14.03.2016 20:25Кроме того, у Vbox есть замечательная вещь — кеширование ввода/вывода, которое значительно ускоряет работу виртуалок.
nikerossxp
14.03.2016 18:26Я в итоге приобрёл БУшный комп на i3, запихнул туда дисков и оперативы. Поставил ESXI и больше не парюсь.
Arvalon
14.03.2016 18:55Какой i3, модель? Много одновременно работающих машин тянет?
nikerossxp
14.03.2016 21:51+12100, 16Гб DDR3. Тянет 2 линуха (многоцелевой хост и FreePBX), и 2 винды (домен-контроллер с hMail и игровой сервер). Может и больше, но таки надо понимать, что хосты сами по себе не загружены.
AlexBin
16.03.2016 12:47Есть еще замедления из-за кеширования, вы не пробовали делать вот так: hard-disk.useUnbuffered = «TRUE»?
questor
Спасибо за интересное исследование. Тоже дома держу ворох виртуальных машин (вообще, у меня практически идентичная конфигурация, чуть ли не одинаковая модель SSD) и тоже вопрос производительности виртуальных машин интересует очень сильно.
Есть ли ещё какие-то хитрые настройки Vmware и машин для увеличения производительности? Ужасно сидеть работать и при этом слышать, как музыка начинает хрипеть из-за нехватки ресурсов.