Авторские статьи

Оптимизация работы гостевых операционных систем KVM.


Внутри виртуального мира QEMU/KVM многое не нужно. Стоит подкрутить параметры и получить не лишнее быстродействие. Многие советы даны под углом использования системы виртуализации Proxmox VE, но если вы используете другую систему управления виртуальными машинами (ВМ), то ваши инструменты так же обладают этими опциями, ведь QEMU/KVM у всех один.

Внутри гостя


Рискнуть и вернуть производительность.

В процессорах Intel и AMD найдены множестве аппаратных уязвимостей типа Meltdown и Spectre, основанных на фундаментальной архитектуре спекулятивных выполнений. Проблема решена не на стороне процессора, а в операционных системах и софте. Ценой стало в целом падение производительности. Если готовы рискнуть и/или все ВМ под вашим контролем, то в гостевых линукс системах можно использовать mitigations=off в GRUB_CMDLINE_LINUX_DEFAULT. Не забудьте sudo update-grub


Планировщик NOOP для гостевых Linux систем.

Виртуальная машина (ВМ) не может физически знать как устроена система хранения данных за пределами её виртуального мира. Поэтому планировщик ввода-вывода NOOP просто использует FIFO для записи данных. В файле /etc/default/grub ваших виртуальных машин укажите:

GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop"

затем sudo update-grub


Ускорение подсистемы Virtual File System для Linux систем.

При использовании ext4, btrfs активнее, но вдумчиво, используйте параметры nobarrier, lazytime, commit=600 в /etc/fstab. Подробнее в Ускорение файловой системы


Отключение ненужного для гостевой MS Windows.

В MS Windows можно и нужно отключать тонну свистелок-перделок как в GUI, так и в фоновых задачах и сервисах. В целом, можно использовать любой твикер, который вы знаете и которому доверяете. Одна из лучших бесплатных утилит для оптимизации MS Windows для работы в виртуальной среде это VMware OS Optimization Tool. Наглядно показывает что будет сделано, с возможностью откатить изменения. В идеале, вы получите менее занятую ОЗУ, редкую фоновую активность, общую отзывчивость графического интерфейса и т.д.

Подробнее Оптимизируем Windows для работы в виртуальных средах


Удаление ненужного для гостевых Linux систем.

В каждом Linux дистрибутиве есть пакеты, которые ставит по умолчанию установщик, но в вашем конкретном случае они просто ненужны, например в закрытом от Интернета контуре. В виртуальной машине с Ubuntu Server лично удаляю следующие пакеты: modemmanager unattended-upgrades update-notifier-common popularity-contest landscape-common snapd lxd pollinate fwupd ubuntu-advantage-tools.


Пакет qemu-guest-agent

В Linux системах установите пакет qemu-guest-agent: sudo apt install qemu-guest-agent

В MS Windows системах QEMU Guest Agent доступен в ISO с Драйверами VirtIO для гостевой MS Windows.

QEMU Guest Agent, как сервис внутри гостя, обеспечивает канал коммуникации между хостом и гостем. На панели ВМ вы получите информацию по IP адресам и во время резервного копирования гостя через команды fs-freeze и fs-thaw будет обеспечиваться консистентность диска.

В свойствах виртуальной машины не забудьте включить QEMU Guest Agent!




Настройки на стороне гипервизора


QEMU Guest Agent

После установки пакета qemu-guest-agent, при выключенной ВМ включите опцию QEMU Guest Agent.

QEMU Guest Agent

В документации Proxmox VE есть упоминание, что в редких случаях может быть конфликт, например гостевая MS Windows + сервер баз данных MS SQL, который самостоятельно вызывает Windows VSS (служба теневого копирования томов). В данном случае применение команды fs-freeze может прерывать дифференциальное резервное копирование SQL Server.


Отключите Use tablet for pointer в свойствах виртуальной машины.

Виртуальная машина потребляет больше ЦПУ если включена опция Use tablet for pointer. Если её выключить (No), то ЦПУ будет занят меньше, но указатель мыши в графическом интерфейсе будет диковать в виртуальном экране (Console). Но, если речь идёт о MS Windows, то ею управляют или централизовано через оснастки или по-старинке через Удалённый Стол (RDP), так что стоит подумать о выключении опции. Менее занятый процессор и меньшее количество переключений контекста (context switches) важнее, чем дикость мышки в малоиспользуемом виртуальном экране.

Use tablet for pointer


Не используйте Virtio Balloon Driver.

Настоятельно рекомендуется использовать конкретный лимит ОЗУ (Fixed Memory Allocation) и не использовать автоматическое (Automatic Memory Allocation). Механизм balloon для MS Windows может вызывать проблемы с быстродействием, поэтому в свойствах ВМ отключите balloon и внутри гостевой MS Windows не ставьте Virtio Balloon Driver.

Подробнее Hyper-Threading vs No Hyper-Threading; Fixed vs Variable Memory

balloon device off


Драйвера VirtIO для гостевой MS Windows.

Всегда используйте актуальные драйвера VirtIO. Использование данных паравиртуализированных драйверов обеспечивает прямой доступ к различным устройствам вместо медленной эмуляции.

Подробнее Windows VirtIO Drivers


Жёсткий диск виртуальной машины.

Для максимального быстродействия нужно пытаться использовать VirtIO SCSI single и включение опции IO Threads. Тогда QEMU будет обрабатывать I/O данной ВМ в отдельном потоке.

io_threads

Тесты показывают значительное улучшение производительности в большинстве нагрузок. Подробнее OPTIMIZING PROXMOX: IOTHREADS, AIO, IO_URING


Кэширование I/O операций.

Самый важный и самый сложный вопрос - как кэшировать I/O виртуальной машины? Выбор метода кеширования - это нахождение баланса между скоростью и надёжностью сохранения изменений. Бо́льшая скорость достигается за счёт риска потери информации. Так же важно в каком формате хранится виртуальный жёсткий диск - raw или qcow2? Внутри гостя важно использование барьеров - barrier или nobarrier? В большинстве случаев лучше оставить дефолтное поведение cache = none, являющееся балансом с улучшением операций записи.

Одна из лучших иллюстраций для визуализации гостевых и хостовых кешей и как данные их проходят.

KVM cache

Для тестовых виртуальных машин можно рассмотреть использование Write back (unsafe), данный режим игнорирует любые sync от ВМ, чем достигается увеличение скорости записи.


Discard

Если ваше хранилище виртуальных машин, является thin provisioning, то активация опции Discard позволит гостевым операционным системам отправлять в рамках команды TRIM информацию о неиспользуемых блоках файловой системы после удаления файлов. Это никак не добавляет вам быстродействия I/O, но позволяет быть стройнее резервным копиям.

discard Proxmox VE

В гостевых операционных системах линукс обычно работает fstrim через таймер systemd - sudo systemctl status fstrim.timer. Основные линукс дистрибутивы отказались от использования опции discard в /etc/fstab из-за пагубного влияния на быстродействие I/O. Вручную при удалении огромного количества файлов можно вызвать sudo fstrim -v -a

В MS Windows через планировщик можно вызывать PowerShell скрипт с командами типа Optimize-Volume -DriveLetter C -ReTrim


Процессор.

Если у вас в кластере все сервера виртуализации однотипны в плане процессора, то для виртуальных машин лучше выставлять тип процессора host. В данном случае вы даёте внутрь ВМ все возможности процессора хоста. Это идеальный вариант.

Если кластер содержит разнотипные процессоры, то помимо разности в их возможностях, встаёт вопрос о разности частот. Это особенно важно если активно используете переезд ВМ с ноды на ноду в онлайн (Live Migration). В новых версиях ProxmoxVE разработчики рекомендуют тип процессора x86-64-v2-AES (совместимость с Intel CPU >= Westmere, AMD CPU >= Opteron_G4), что даёт гостевой ВМ часть возможностей процессора.

Тип ЦПУ Proxmox VE

Дополнительные материалы:

Proxmox VE. Начало пути.
Ускорение Убунту.
Монтирование VirtualBox образов vdi в Ubuntu.
Моя ода любви к Proxmox Backup Server.

Дата последней правки: 2025-01-16 14:18:48

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта