У меня основной вопрос по настройке виртуальной машины. Я использую Hyper-V, но думаю, что вопрос довольно общий. Это для домашнего офиса, я хочу получить достаточно хорошую производительность на виртуальных машинах без больших усилий. Я использую виртуальные машины для тестирования / отладки своего программного обеспечения. В идеале у меня должна быть запущена вся ОС, но только одна (вероятно, в большинстве случаев ноль) будет активно использоваться одновременно.
Есть ли какие-то общие рекомендации по выделению памяти виртуальным машинам? С одной стороны, вы можете разделить общую память на количество виртуальных машин (всего 4 ГБ, 4 виртуальных машины -> 1 ГБ каждая). С другой стороны, вы можете предоставить каждой виртуальной машине полную память и позволить ОС выполнять арбитраж. Думаю, оба ошибаются! Я ищу практическое правило разумной производительности. Я понятия не имею, как сервер ВМ управляет памятью ВМ.
[править] Я задал этот вопрос, потому что ошибочно предполагал, что Hyper-V (версия 2008 R2) может динамически предоставлять дополнительную память виртуальным машинам, если она доступна. Я думал, что могу перераспределить память, если я использую только одну виртуальную машину за раз. Поскольку Hyper-V хочет выделить фиксированную память для каждой виртуальной машины при их запуске, мне нужно либо отключить некоторые виртуальные машины и запустить только те, которые мне нужны, либо настроить виртуальные машины на меньшее выделение памяти и убедиться, что физическая память достаточно для всех выделений плюс процесс Hyper-V и (возможно) ОС хоста.
Похоже, что у VMWare есть больше возможностей в этом направлении, как указано в предоставленных ответах. [/редактировать]
Спасибо, Бретт
Как правило, вы хотите знать, что в наихудших условиях физической RAM достаточно для того, чтобы все стандартные функции могли надежно работать с RAM. То, что это магическое число, варьируется от ОС к ОС и широко варьируется в зависимости от использования гостевой ОС. Вы можете с радостью загрузить Windows 2003 Server с парой сотен мегабайт ОЗУ, некоторые компактные дистрибутивы Linux с 30 мегабайтами или меньше и так далее, но если вы хотите запустить SQL Server в вашем гостевом компьютере с многогигабайтными базами данных, вы собираетесь хотите убедиться, что у него действительно есть реальная оперативная память, поддерживающая пару гигабайт оперативной памяти, которая, по его мнению, у него есть.
То, как гипервизор обрабатывает оперативную память, сильно различается между поставщиками и продуктами. Hyper-V не поддерживает так называемую перегрузку памяти, поэтому вы ограничены выделением оперативной памяти в зависимости от того, что у вас есть физически. VMware ESX допускает чрезмерную фиксацию, устанавливая правила для арбитража конфликтов (долей), чтобы контролировать, что происходит, когда виртуальная машина занята, а общий объем физической ОЗУ недостаточен для удовлетворения нагрузки. В среде Hyper-V у вас нет такого уровня контроля, поэтому вам нужно заранее назначить достаточный объем оперативной памяти.
У VMware есть еще пара уловок, помогающих с чрезмерной фиксацией памяти; Прозрачный обмен страницами и всплывающая память.
Прозрачное совместное использование страниц - это, по сути, хранилище одного экземпляра для ОЗУ - гипервизор отслеживает блоки ОЗУ, выделенные для каждой виртуальной машины, и если он обнаруживает, что общие блоки существуют в нескольких виртуальных машинах, он сохраняет только одну копию и указывает на нее все виртуальные машины - если впоследствии какая-либо виртуальная машина пытается записать в этот блок, он отделяет копию, чтобы не случилось ничего плохого. В однородной среде виртуальных машин это может сэкономить значительный объем оперативной памяти без ущерба для производительности.
Распределение памяти - это механизм, который позволяет гипервизору «одалживать» ОЗУ, выделенное для одной виртуальной машины, и передавать ее более важной с помощью драйвера гостевой ОС в первой, который выделяет (большой) фрагмент памяти в этой гостевой машине. После выделения гипервизор может безопасно перераспределить физическое ОЗУ, поддерживающее память, выделенную ему драйвером балуна. Преимущество этого по сравнению с прямым подходом, когда гипервизор просто меняет местами память гостевой виртуальной машины на диск, чтобы перераспределить ОЗУ, состоит в том, что гость, теряющая физическую ОЗУ, знает, что память чем-то используется, и значительно снижен риск того, что "заимствованная" RAM будет выделена для каких-либо важных системных функций в гостевой системе.
Отредактировано для добавления: Я никогда не пытался увидеть, что происходит с Hyper-V, когда вы пытаетесь запустить виртуальную машину, которая потребует больше памяти, чем объем доступной физической оперативной памяти, вся документация, которую я могу найти, утверждает, что виртуальная машина получает всю имеющуюся у вас оперативную память. настроен для них, а затем гипервизору и ОС хоста выделяется то, что осталось. Hyper-V не имеет механизма для применения минимального резерва ОЗУ к виртуальной машине, а затем выделения оставшейся части из пула, хотя он предоставляет такой механизм для ресурсов ЦП. И снова VMware ESX \ ESXi предоставляет такую возможность.
Стоит помнить, что вам также необходимо спланировать физическую память, которая требуется как гипервизору, так и хост-ОС (не обращайте внимания на последнюю, если вы используете сервер Hyper-V с голым железом). Microsoft совет по настройке производительности для Hyper-V заявляет, что в дополнение к XGig оперативной памяти, имеющейся в вашей виртуальной машине, вам необходимо иметь:
Если у вас недостаточно физической памяти для этого, это серьезно скажется на производительности и, возможно, на стабильности.
Hyper-V в Windows Server 2008 R2 делает поддерживать функцию динамической памяти (я использую SP1 - не уверен, что это было в версии RTM). Я понимаю, что ваш вопрос довольно старый, поэтому, вероятно, не было, когда вы его задавали.
Я начал с выделения статической памяти каждой гостевой виртуальной машине, но быстро исчерпал свой сервер. Динамическая память позволяет назначать начальный (возможно, небольшой) объем и максимальный объем для каждой виртуальной машины. Затем он будет выделять память по запросу, а также восстанавливать неиспользуемую память. Вы должны отредактировать настройки каждой виртуальной машины, чтобы настроить это - это недоступно при создании новой виртуальной машины. Я только что перенастроил несколько виртуальных машин для использования динамической памяти и почти вдвое сократил объем используемой памяти.
Виртуальные машины, которые я настроил для динамической памяти, показывают текущую потребность в памяти и состояние. Выделенная виртуальная машина все еще работает с начальным выделением 1 ГБ. Сервер Exchange (второй сверху) - это большая жирная свинья, израсходовавшая свой начальный 1 ГБ, и ему было выделено еще несколько. Эта функция позволяет настраивать буфер (20% по умолчанию), поэтому Hyper-V предоставил Exchange требуемую сумму плюс некоторые дополнительные.
Это не общий вопрос, потому что Hyper-V не может разделять страницы памяти, как VMWare, эта технология может значительно изменить способ распределения памяти виртуальной машины. Если Hyper-V поддерживает это, я бы посоветовал вам выделить для ваших виртуальных машин начальную сумму, а затем посмотреть на фактическое использование с течением времени для каждой виртуальной машины, изменяя распределение по мере того, как вы узнаете больше о ее поведении.