1 ноября 2021 г.

Настройка максимальной производительности в VMware Workstation

В этом году я прошёл обучение, а затем успешно сдал сертификационный экзамен, по администрированию среды виртуализации VMware. Наверное, этот факт как-то повлиял на моё мировоззрение. Я решил, после стольких лет использования VirtualBox для своих личных проектов, на персональной рабочей станции попробовать перейти на решение от VMware. 

Вы наверное знаете, что среды виртуализации можно разделить на 2 типа:

  • тип 1 - физический гипервизор (bare metal hypervisor), который устанавливается на физический сервер.
  • тип 2 - гипервизор, устанавливаемый поверх операционной системы (hosted hypervisor). 

Примером гипервизора первого типа является VMware ESXi. Эта среда виртуализации, включающая в себя гипервизор со своей операционной системой, устанавливается напрямую на физический сервер. SAP системы в той или иной степени поддерживают это решение от VMware и про это у меня уже была пара постов (ссылка 1 и ссылка 2). 

Ко второму типу гипервизоров относятся решения Oracle VirtualBox и VMware Workstation. Для их разворачивания требуется операционная система, предварительно установленная на целевой сервер или компьютер (host server). Поддерживаются распространённые операционные системы: MS Windows, Linux или MacOS. Данный тип гипервизора выбирают для небольших проектов. Обычно разработчики программного обеспечения используют их для тестирования своих разработок в разных операционных системах. 

VMware Workstation поставляется в двух версиях

  • VMware Workstation Pro (требует приобретения платной лицензии),
  • VMware Workstation Player (распространяется бесплатно для личного пользования).

В бесплатной версии нет шифрования виртуальных машин и нельзя для них создавать снимки состояния (snapshots). А в остальном это полноценное решение, где можно как создавать, так и запускать виртуальные машины. 

Перейдя на VMware Workstation, как взрослый администратор :), я поставил себе задачу получить максимальную производительность виртуальных машин, работающих на моём рабочем ноутбуке. Собранной в процессе решения задачи информацией решил поделиться с вами. 

Виртуальная машина - это виртуальный компьютер, который имеет те же ресурсы, что и физический. Каждый тип ресурса вносит свою лепту в работу машины. При этом конфигурация и настройки (корректные или нет) ресурса могут как повышать, так и снижать общую производительность. В связи с этим я выделил следующие разделы:

  • процессорные ресурсы,
  • оперативная память,
  • жесткий диск,
  • другое оборудование,
  • программное обеспечение,
  • другое (всё остальное).


Процессорные ресурсы

Во-первых, необходимо проверить, что ваш процессор имеет аппаратную поддержку виртуализации и в BIOS основной машины включены опции поддержки: Intel VT-x или AMD AMD-V. Если система поддерживает "Hardware-Assisted MMU Virtualization": опции Intel EPT (extended page tables) или AMD RVI (rapid virtualization indexing) или AMD NPT (nested page tables), то тоже обязательно включаем. Первый механизм в условиях виртуализации позволяет эффективнее (с меньшими накладными расходами) распределять процессор между виртуальными машинами, а второй - память.

Во-вторых, если процессор поддерживает Hyper-threading, то рекомендуется активировать  поддержку этого механизма в BIOS. Hyper-threading, когда один процессорный юнит (ядро) обрабатывает 2 очереди команд, даёт скорее большую утилизацию процессорных ресурсов, так как процессор меньше простаивает. Но при правильном использовании этой технологии можно добиться и повышения производительности всей системы. Гипервизор от VMware умеет использовать Hyper-threading.

В третьих, можно проверить, что в BIOS отключены различные энергосберегающие опции, а вместо этого везде выбрана максимальная производительность.

При конфигурировании количества ядер для виртуальных машин, можно руководствоваться правилом: общее количество ядер всех виртуальных машин плюс запас для основной машины не должно превышать двойного количества физических ядер процессора (без учёта Hyper-threading). Например, если ваш процессор имеет 4 физических ядра, то можно создать максимум 3 виртуальные машины, каждой отдав по 2 ядра, а 2 ядра оставить основному компьютеру. В идеале, конечно, вы должны распределять только имеющиеся ядра, не допуская overhead. Но так как мы говорим про персональные компьютеры (или даже ноутбуки), а не про сервера, то ядер у нас обычно не так много. Исходим из того, что имеем, поэтому максимум двойной overhead.

При этом не настраивайте на виртуальной машине больше vCPU, чем ей это необходимо. Удивительно, но большее количество vCPU может привести к снижению производительности в силу действия разных факторов. Например,

  • переброс одного исполняющегося потока между ядрами, в связи с чем происходит потеря кэша процессора,
  • дополнительные накладные расходы: каждый виртуальный процессор требует выделения оперативной памяти,
  • использование лишних циклов таймера планировщика при переключении потоков между ядрами и так далее.

Ещё одно важное замечание: при создании виртуальной машины всегда корректно выбирайте тип гостевой операционной системы и её версию. Гипервизор, зная особенности работы разных операционных систем, для создаваемой вами виртуальной машины применит оптимальные настройки и для процессора, выбирая поддерживаемые операционной системой механизмы  виртуализации. А это напрямую влияет на производительность. После создания виртуальной машины изменить эти настройки тоже можно. Выключив виртуальную машину, войдите в пункт меню "VM -> Settings" (или нажмите Ctrl+D), а там выберите раздел "General". Справа будут нужные вам параметры (рис. 1).

Рис. 1. Настройки типа и версии гостевой операционной системы.

Вот по этой ссылке на официальном сайте можно посмотреть список поддерживаемых гостевых операционных систем. 


Оперативная память

Первое правило виртуализации: оперативной памяти много не бывает. Оперативная память, для гипервизора, как и для БД SAP HANA, основной ресурс. 

Память виртуальной машине (как и в любой операционной системе) выдаётся по требованию. При этом, как и в Enterprise решении VMware ESXi, гипервизор в VMware Workstation умеет выполнять разные финты при управлении памятью: page sharing, balooning, swapping. Все эти механизмы направлены прежде всего не на повышение производительности виртуальных машин, а на максимальную утилизацию ресурсов.  Задача механизмов оптимизации  уменьшить потребление памяти виртуальными машинами. Например, забрав свободные страницы памяти у виртуальной машины, как только они ей больше не нужны, и отдать их той виртуальной машине, которая в текущей момент требует больше памяти для своей работы. Стоит отметить, что благодаря такому подходу удаётся разместить на одной машине большее количество виртуальных машин. Гипервизор жонглирует количеством памяти меньшего объёма, чем сумма сконфигурированной памяти всех виртуальных машин, но при этом обеспечивает их одновременную работу. Существует даже термин для этого - "memory overcommitment".

У нас же стоит обратная задача: получить максимальную производительность при работе виртуальных машин. Обеспечить это можно, как ни странно, отключив по максимуму механизмы оптимизации. :)

Для этого необходимо, во-первых, перейти в пункт меню "Edit -> Preferences" (или нажать Ctrl+P). Здесь в разделе "Memory" содержатся общие настройки для всех виртуальных машин (рис. 2). Для начала укажите сколько оперативной памяти сервера может быть отдано виртуальным машинам. Так как VMware Workstation относится ко второму типу гипервизоров, то мы должны подумать и об основной машине, не оставив её без памяти. Иначе, если она начнёт уходить в swap, то работать плохо начнёт всё, включая виртуальные машины. В моём примере из 32 Гб оперативной памяти 24 Гб отдано виртуальным машинам, а 8 Гб всегда будут за операционной системой хоста.
Далее обязательно выбрать пункт "Fit all virtual machine memory into reserved host RAM". Гипервизор, работая в таком режиме, запускает виртуальные машины только при условии, если сумма сконфигурированной для них оперативной памяти умещается в выделенный для них пул основного хоста.

Рис. 2. Опции памяти для всех виртуальных машин.

Во-вторых, для каждой виртуальной машины перейти в индивидуальные настройки через пункт меню "VM -> Settings" (или нажать Ctrl+D), перейти во вкладку "Options", а там выбрать пункт "Advanced" (рис. 3). В этом окне поставить галочку напротив пункта "Disable memory page trimming". В этом случае гипервизор не будет пытаться отнять у виртуальной машины оперативную память, используя свои механизмы оптимизации.

Рис. 3. Настройка памяти для отдельной виртуальной машины.


Жёсткий диск

Во-первых, постарайтесь разместить виртуальные машины на дисках с хорошей скоростью чтения-записи. Раньше рекомендовалось использовать RAID массив на достаточном количестве дисков. Сейчас прекрасным вариантом будет SSD диск. К примеру в VMware Workstation для гостевой операционной системы MS Windows 10 рекомендуется использовать тип диска "NVMe" (рис. 4).

Рис. 4. Рекомендуемый тип диска виртуальной машины.

Драйвер такого типа виртуального диска (из пакета VMware Tools) показывает хорошую скорость в тестах (рис. 5). Но только если на нижнем уровне находится быстрый SSD диск. В данном примере это даже не NVMe диск, а SSD через интерфейс SATA. 

Рис. 5. Тестирование скорости диска в виртуальной машине.

Стоит отметить, что размещение файлов виртуальной машины на внешнем USB-носителе плохая идея. Практика показывает, что работает такая виртуальная машина очень медленно. Работать практически невозможно. Так что, если у вас возникла такая идея, лучше откажитесь от неё сразу. :)

Во-вторых, выбирайте правильные опции при создании жесткого диска виртуальной машины. VMware предлагает выбрать из следующих вариантов: 

  • тонкий диск (thin provisioned) - место выделяется по мере необходимости,
  • толстый диск (thick provisioned) - место выделяется сразу на весь объём виртуального диска,
  • хранить виртуальный диск в одном файле,
  • разбить виртуальный диск на несколько файлов.

Вариант с максимальной производительностью это толстый диск, хранящийся в одном большом файле (рис. 6). 

Рис. 6. Параметры виртуального жесткого диска для максимальной 
производительности.

В третьих, для максимальной производительности рекомендуется выбирать тип диска "Independent" и "Persistent". Запись на такой диск осуществляется сразу после команды ввода-вывода (рис. 7).

Рис. 7. Расширенные настройки диска виртуальной машины.

Хочу обратить внимание, что в этом окне настроек можно посмотреть информацию о диске, реальный и максимальный размеры файла образа, свободное место в файловой системе. А также здесь можно найти дополнительные утилиты для работы с виртуальными дисками. 
Существует рекомендация дефрагментировать диск внутри виртуальной машины, как и на обычном физическом компьютере. Но в наш век SSD лишние операции записи на SSD-диск не рекомендуются: снижается ресурс диска. Поэтому, наверное, этот совет уже не актуален. Но, если вы используете динамически расширяемый виртуальный диск (thin provisioned), то можно воспользоваться утилитой дефрагментации на уровне VMware Workstation (рис. 8). В данном случае VMware использует свои внутрение алгоритмы и с минимальным количеством операций записи оптимизирует виртуальный диск.

Рис. 8. Информация о виртуальном диске и дополнительные утилиты для работы с ним.

После дефрагментации, можно выполнить операцию сжатия файла, нажав соседнюю кнопку "Compact". VMware сожмёт образ диска до реального объёма данных. 
Дополнительно после полной подготовки виртуальной машины (установки операционной системы, программ и т.п.) можно перезалить файл-образ виртуального диска (vmdk-файл) на файловую систему, предварительно его удалив. На данном подходе я не настаиваю, может быть это и лишнее. Но мне кажется, что эта операция переложит файл образ одним непрерывным куском, что улучшит обращение к нему. Хотя опять же в век SSD это может быть уже не актуально. Но опции дефрагментации и сжатия есть, имейте это ввиду. Могут быть полезны перед перезаливкой образа-диска, если решитесь.

Дополнительно можно найти утилиты по подключению диска из виртуальной машины, как сетевого диска на основном компьютере (кнопка "Map") и увеличения размера диска (кнопка "Expand") (рис. 8). Имейте ввиду, что изменение настроек виртуального диска производится только при выключенной виртуальной машине.

Все согласятся, что в swap (paging) область уходить в виртуальной машине крайне не желательно. Но на случай использования swap области, рекомендуется вынести её на отдельный виртуальный диск, файл образ которого необходимо положить на отдельный физический диск. Опять же рекомендация со времен жестких дисков, а не SSD. А в swap лучше вообще никогда не уходить.

Внутри виртуальной машины для максимальной производительности диска можно включить кеширование записей. Например, в MS Windows одна опция включена по умолчанию, вторую можно активировать (рис. 9). Но следует иметь ввиду, что при внезапном отключении виртуальной машины, например, при сбое питания, при использовании кеша могут быть потери данных.

Рис. 9. Включение кэширования записей на диск в MS Windows.

Ну и последнее разумное правило: следить, чтобы диск, на котором размещены файлы виртуальных машин всегда имел запас по ёмкости. Если виртуальной машине вдруг не хватит места для записи логов, снепшотов или других временных файлов, то система начнёт тормозить или просто встанет.


Другое оборудование

Отключайте ненужное оборудование. Например, если у вас в виртуальной среде работает серверная операционная система, то звуковая карта вам вряд ли понадобится. Для отключения выберите пункт меню "VM -> Settings" (или нажмите Ctrl+D), слева выберите пункт "Sound Card", а справа уберите галочки напротив пунктов "Connected" и "Connected at power on". Или удалите целиком виртуальное устройство через кнопку "Remove" (рис. 10).

Рис. 10. Отключение виртуальной звуковой карты.

Также настоятельно рекомендуется отключать автозапуск для CD/DVD-устройств. Если вы устанавливали гостевую операционную систему через ISO-файл, то он будет постоянно контролироваться и читаться виртуальной машиной. А этот образ вам скорее всего уже не нужен. Поэтому для отключения в тех же настройках виртуальной машины установите курсор мыши на пункт с CD/DVD и уберите галочки напротив пунктов "Connected" и "Connected at power on" (рис. 11).

Рис. 11. Отключения автозапуска CD/DVD устройства в виртуальной машине.

Ну и так как 3D-графику в виртуальной машине мы тоже обычно не используем, то рекомендуется отключить и её. Читал сообщения, что в предыдущих релизах VMware Workstation включение её очень сильно тормозило интерфейс гостевой операционной системы. Для отключения в настройках виртуальной машины установите курсор мыши на пункт "Display" и снимите галочку напротив пункта "Accelerate 3D graphics" (рис. 12).

Рис. 12. Отключение 3D графики в виртуальной машине.


Программное обеспечение

Во-первых, обязательно устанавливайте пакет расширений VMware Tools. Данный пакет представляет собой набор драйверов для виртуального оборудования плюс ряд программных механизмов, которые напрямую влияют на производительность виртуальной машины. Помимо этого после установки VMware Tools можно будет настроить нормальное разрешение экрана, интеграцию мыши и выполнять копирование через буфер обмена между основной и виртуальной машинами. Для установки выберете пункт меню "VM -> Install VMware Tools". Для гостевой операционной системы Linux поддерживаемой альтернативой является пакет Open VM Tools. Подробности можно найти тут и тут.

Во-вторых, рекомендуется на основной машине отключить антивирус на директории с файлами виртуальных машин. Дополнительно можно включить основные типы файлов виртуальных машин (*.vmdk, *.vmx, *.vmem, *.nvram) в исключения антивируса. При работе виртуальной машины эти файлы часто меняются, так как виртуальная машина постоянно читает и пишет в них. Антивирус может вызывать излишнюю нагрузку на систему, постоянно проверяя эти файлы (особенно большие файлы образов виртуальных дисков). Тем самым будет оказываться влияние на производительность и виртуальных машин.


Другое

Во-первых, встречал рекомендацию работать в виртуальной машине в полноэкранном режиме (Full-screen). То есть когда вы находитесь в виртуальной машине в окне VMware Management Interface, то лучше работать не в оконном режиме. Иначе производительность работы интерфейса операционной системы внутри виртуальной машины будет не максимальной. Для перехода в полноэкранный режим необходимо нажать комбинацию клавиш Ctrl+Alt+Enter. Выйти можно через комбинацию клавиш Ctrl+Alt или вызвав сверху панель VMware Management Interface и свернув окно виртуальной машины.

Говорят, что в свежих релизах VMware Workstation производительность что в оконном режиме, что в полноэкранном одинакова, но "осадочек" остался. :)

Во-вторых, если ваша виртуальная машина работает без ошибок и сбоев, то для максимальной производительности можно полностью выключить Debbuging. Для этого необходимо перейти в настройки виртуальной машины через пункт меню "VM -> Settings" (или нажать Ctrl+D), открыть вкладку "Options", а там выбрать пункт "Advanced". Справа для пункта "Gather debugging information" выбрать уровень "None" (рис. 13).

Рис. 13. Выключение сбора трассировочной информации для виртуальной машины.

В виртуальных машинах с операционной системой MS Windows рекомендуется по максимум отключить визуальные эффекты. Обычно эти настройки можно найти в "Панель управления -> Система и безопасность -> Система -> Дополнительные параметры системы -> Быстродействие -> Параметры". Я на всех своих рабочих местах выбираю "Обеспечить наилучшее быстродействие", включая только некоторые настройки визуализации (рис. 14).

Рис. 14. Настройки быстродействия интерфейса MS Windows.

Дополнительно отключите Screen Saver. В виртуальной машине он ни к чему, а ресурсы может расходовать прилично.

B Linux можно обойтись совсем без графической среды. Это так же положительно повлияет на скорость работы виртуальной машины. Например, в этом посте я рассказывал как установить Developer Edition систему на Linux без графического окружения.

В третьих, рекомендуется в гостевых операционных системах включать синхронизацию времени. Лучше всего для этого использовать NTP-сервер. Нет локального? Всегда можно использовать свободные для доступа из Интернет. В крайнем случае, можно использовать встроенную функцию синхронизации из VMware Tools. Но следите, чтобы не были активированы оба механизма.

В четвёртых, пару слов про сеть. Помните, что работа виртуальной машины в режиме соединения с сетью типа "Bridged", требует меньше всего процессорных ресурсов основного компьютера  (рис. 15).

Рис. 15. Настройка типа сетевого соединения виртуальной машины.


На официальном сайте VMware можно найти документ "Performance Best Practices for VMware Workstation". К сожалению, самый свежий вариант написан для версии 7.0. Но судя по содержанию, большая часть информации актуальна и для текущих версий программы. Скачать/прочитать документ можно по этой ссылке

Надеюсь мои изыскания, будут кому-то полезны. Если есть дополнения, пишите в комментариях.


Автор: Шиболов Вячеслав Анатольевич


16 комментариев:

  1. Анонимный03.08.2022, 07:55

    Столько воды и ничего полезного

    ОтветитьУдалить
    Ответы
    1. Спасибо за комментарий. Я описал свой опыт, по которому попытался настроить максимальную производительность данного ПО. Если у вас есть свои советы/конкретные комментарии или ссылка на документ/статью, то поделитесь. Я думаю, многим будет полезно/интересно.

      Удалить
  2. Анонимный19.09.2022, 12:06

    Спасибо за статью! Для начинающих самое то! Единственное, нет изображений на странице.

    ОтветитьУдалить
    Ответы
    1. К сожалению, изображения режет Google для России. Можно попробовать открыть через VPN.

      Удалить
  3. >Стоит отметить, что размещение файлов виртуальной машины на внешнем USB-носителе плохая идея. Практика показывает, что работает такая виртуальная машина очень медленно. Работать практически невозможно. Так что, если у вас возникла такая идея, лучше откажитесь от неё сразу. :)

    У меня другой опыт. Ssd over usb (450MB per sec) работает без нареканий. Визульно нет разницы с внутренним в режиме m4

    ОтветитьУдалить
    Ответы
    1. Саша, привет! Негативный опыт был для классического HDD over USB. Для SSD, да через USB 3.1 может быть картина совершенно другая. Допускаю :)

      Удалить
    2. Я тут на коленках писал. "m4" должен был означать M.2 в режиме X4. )))

      Удалить
  4. Анонимный17.11.2023, 06:40

    Настроил виртуалку согласно статье, реально стало работать быстрее. Спасибо за статью. Единственное что необъяснимо смутило, стали пропадать некоторые папки с файлами. 100% папка с файлами была, не удалялась, восстановления виртуалки из снапшота не было. Но папки куда-то деваются, Замечено неоднократно. В итоге убрал галочку Indendent (см. рис.7). Наблюдаю.

    ОтветитьУдалить
    Ответы
    1. Спасибо за обратную связь. С пропаданием папок не сталкивался.
      Операционная система на master-host и guest-host какие?

      Удалить
    2. Анонимный18.11.2023, 08:38

      Host - Windows10 Home, Guest - WIndows2000 SP4.

      Удалить
    3. Ну вообще допускаю, что Windows 2000 уже не поддерживается. От этого могут быть и проблемы.

      Удалить
  5. Анонимный02.01.2024, 02:10

    Спасибо, было полезно. А как-нибудь картинки можно починить без впн?

    ОтветитьУдалить
    Ответы
    1. К сожалению, только перезаливать всё заново. Google как-то подрезал их.

      Удалить
  6. Спасибо за пост,
    Но все таки вопрос, зачем ставить количество процессоров vcore ? когда можно просто 1 поставить и ядер отсыпать??? Или этому есть какое-то прикладное применение, не говоря уже о том, что некоторый серверный софт лицензируются по количеству процессоров/сокетов.

    И еще вопрос может дилетантский, по типу среды виртуализации:
    workstation на винде, и esxi - на сколько критично держать нормальные проекты в первом варианте, если ресурсами под винду можно пренебречь? цены на лицензию esxi кусаются, хотя были какие-то бесплатные раньше варианты...

    ОтветитьУдалить
    Ответы
    1. Настройки количества процессоров/ядер и их комбинации не имеют в техническом плане никакого влияния на работу или производительность виртуальной среды. Можно таким образом попробовать оптимизировать лицензирование какого-либо прикладного ПО. Но, как мне кажется, всё что более или менее современное лицензируется по максимуму, по всем ядрам. Поэтому можно лепить/рисовать как хочется.
      Что касается второго вопроса, то ESXi это совсем другой продукт. Мало того, что среда на чистом ESXi (спец. Linux) более компактная, и считай, требует меньше ресурсов. Плюс интерфейс позволяет мониторить производительность, например. Хотя бы только в реальном времени. Подключив ESXi к vCenter, вы получите ещё больше инструментов. А в Workstation вы имеет много слоёв ПО, каждое из которых забирает ресурсы, может "упасть" в неподходящий момент. Этот инструмент скорее для разворачивания сред разработки на рабочих станциях. Продуктивные среды я бы в нём не размещал. Но всё зависит от ваших задач. Мои среды для учёбы и тестирования работают на связи Linux + Worstation, а рабочие консоли на Windows+Workstation. Всё вполне стабильно. Падений именно Workstation я не помню.

      Удалить
  7. Анонимный08.02.2024, 09:12

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

    ОтветитьУдалить