Предостережение: следующее основано на моих субъективных наблюдениях, а не на правильном объективном тестировании.
Дисковый ввод / вывод для некоторых моделей нагрузки будет на верхнем краю вашей 10-20% -ной границы, возможно, немного выше, но не около 50%, которые вы указали. Вы можете уменьшить количество операций ввода-вывода несколькими способами, в том числе:
- Предоставление виртуальной машине достаточного объема оперативной памяти для использования ОС в качестве кэша (это означает, что на хост-машине достаточно оперативной памяти, в противном случае она будет голодать и начнет менять местами как себя, так и виртуальную машину)
- Скажите менеджеру виртуальных машин не позволять любой оперативной памяти, выделенной для подкачки виртуальной машины, если это может помочь
- Убедитесь, что виртуальная машина хранит временное хранилище в ОЗУ, установив /tmp и смонтировав его как файловые системы tmpfs.
- Сделайте хороший выбор дисковых файловых систем и соответствующих настроек в ВМ. Если весь код и выходные данные компилятора также хранятся в другом месте, то есть в управлении исходным кодом и в резервных копиях, то покончите с журналированием, чтобы уменьшить активность записи. Также, если ваша файловая система - ext2 /3/4, используйте опцию noatime, если ваш процесс сборки подходит для этого (большинство, если не все, есть) или relaytime, если noatime невозможен (я думаю, что большинство дистрибутивов по умолчанию теперь имеют значение relaytime).
- Точно так же, если ваш код и выходные данные безопасно скопированы в другое место, скажите администратору виртуальной машины, что все в порядке для буферизации записи на виртуальные диски виртуальной машины.
- Если вы не чувствуете себя в безопасности с указанными выше более рискованными вариантами (возможно, кеширование с отложенной записью, нет журналов FS), вы можете настроить процесс сборки так, чтобы использовать ОЗУ для временного хранения, сделав так, чтобы он максимально использовал tmpfs mount /tmp.
- Если возможно, разместите виртуальные диски виртуальной машины на отдельном диске, поэтому, если ей необходимо выполнить значительный объем операций ввода-вывода, она не будет сильно конкурировать с хост-ОС и другими виртуальными машинами.
- Убедитесь, что виртуальная машина использует виртуальные диски фиксированного размера. Растущие диски увеличивают производительность ввода-вывода, иногда значительно.
Удар ввода / вывода несколько затормозит любой удар ЦП, хотя и здесь есть некоторое снижение производительности. Однако, в отличие от ввода-вывода, с этим мало что можно поделать. С современным ЦП и продуктом виртуализации, который может использовать явную поддержку виртуализации ЦП, разница для полностью связанных с ЦП операций должна составлять не более пары процентов. Старайтесь избегать виртуального SMP - это на самом деле может быть медленнее, чем предоставление виртуальной ЦП одного виртуального ЦП из-за того, как запланировано физическое время ЦП. В VMWare по крайней мере гость с 2 виртуальными ЦП должен ждать, пока два ядра не освободятся, чтобы получить временной интервал от планировщика хоста - если хост загружен поверх виртуальной машины, это может иметь большое значение, и если задача (s) в основном связаны с процессором и могут быть соответствующим образом разделены, вам будет лучше запускать две или более виртуальных машин (при условии, что у вас есть оперативная память для поддержки этого) вместо предоставления одной виртуальной машине нескольких виртуальных ЦП.
Эти модели производительности будут влиять на шаблон использования (постоянные циклы компиляции), но я ожидаю, что таким образом вы потеряете намного меньше времени, чем с неудобствами двойной загрузки. Если ваша Windows использует гораздо меньше ресурсов ЦП и ввода-вывода, то есть просто использует офисные приложения, а не тяжелую работу с БД, игры или тому подобное, вы можете рассмотреть возможность использования Linux в качестве хоста и Windows в виртуальной машине.