Предыстория
Занимаясь разработкой и тестированием ПО в т.ч. дома приходится разворачивать виртуальную среду и устанавливать специализированное ПО как то среды разработок, серверы базы данных, приложений и др. Вплоть до развёртывания полноценной тестовой среды. В моём случае у меня живёт целый домен AD с блекджеком клиентами с разными ОС, БД, брандмауэром, IIS и др. В случае если всё это собрано на технике домашнего уровня ощущается замедление производительности особенно при работе с дисковой подсистемой. Конечно же в случае однопользовательской нагрузки никаких проблем и зависаний, можно и подождать несколько секунд в большинстве случаев. Но в некоторых случаях снижение производительности уже капитально меня достало, в частности при работе в Visual Studio.
Замысел
РазвлекаясьРаботая с VmWare Workstation уже много лет помнил что при создании VM можно выбрать отдельных жёсткий диск для хранения данных:
Беглый поиск по сети не дал точных количественных оценок прироста производительности. Только общие рекомендации то что «наверное будет работать быстрее» и зависеть от конкретного железа, типов тестов и работы в 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, размещённой на отдельном физическом диске заметны. «Тормозов» нет, работается как на хостовой машине. При полноэкранном режиме можно не заметить разницы.
Автор: Arvalon