Подробный гайд по оптимизации производительности KVM в Astra Linux 1.8

Гайд по оптимизации KVM в Astra Linux 1.8: CPU, память, диски, сеть, HugePages, virtio для высокой производительности ВМ

2026.04.28                  


Подробный гайд по оптимизации производительности KVM в Astra Linux 1.8Подробный гайд по оптимизации производительности KVM в Astra Linux 1.8

Важно:

  • Astra Linux 1.8 часто используется в контурах, подпадающих под требования ИБ и сертификации ФСТЭК/Минобороны. Оптимизация не должна нарушать мандатные политики и журналы аудита. Все изменения рекомендуется применять на тестовом стенде, фиксировать в конфигурационном управлении и проверять совместимость с вашими ИБ-профилями.

0. Предварительные требования

  • Хост: физический сервер с поддержкой аппаратной виртуализации (Intel VT-x / AMD-V).
  • Astra Linux Special Edition 1.8 (Smolensk/Orion) с обновлённым репозиторием.
  • Права root или sudo.
  • Резервные копии /etc/libvirt/, /etc/default/grub, /etc/sysctl.conf.

1. Проверка аппаратной поддержки и BIOS

# Проверка поддержки виртуализации CPU
lscpu | grep -E "Virtualization|Hypervisor"
cat /proc/cpuinfo | grep -E "vmx|svm"

# Наличие устройства KVM
ls -l /dev/kvm

В BIOS/UEFI:

  • Включить Intel VT-x / AMD-V
  • Включить VT-d / AMD IOMMU (если планируется PCI passthrough)
  • Отключить C-States и P-States на уровне BIOS (опционально, для low-latency)
  • Включить SR-IOV (если используются сетевые карты с аппаратной виртуализацией)

2. Базовая подготовка хоста (Astra Linux 1.8)

sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils cpu-checker
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER

Проверка:

kvm-ok
virsh version
qemu-system-x86_64 --version

3. Оптимизация ядра и системных параметров

3.1. CPU Governor

Переключите на performance для всех ядер:

sudo apt install linux-cpupower
sudo cpupower frequency-set -g performance
# Для сохранения после перезагрузки:
sudo systemctl enable cpupower
sudo cpupower set -g performance

3.2. Transparent HugePages (THP)

THP может вызывать latency в ВМ.

Отключите:

echo 'vm.nr_hugepages=0' | sudo tee -a /etc/sysctl.d/99-kvm-tuning.conf
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

Для сохранения:

sudo tee /etc/systemd/system/disable-thp.service <<EOF
[Unit]
Description=Disable Transparent HugePages

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag'

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable disable-thp

3.3. KSM (Kernel Samepage Merging)

Включите для экономии RAM при множестве схожих ВМ.

Отключите для low-latency.

echo 1 | sudo tee /sys/kernel/mm/ksm/run
# Сохранение:
sudo tee /etc/sysctl.d/99-ksm.conf <<EOF
vm.ksm_run = 1
vm.ksm_sleep_millisecs = 20
EOF

3.4. Сетевые параметры ядра

sudo tee /etc/sysctl.d/99-net-kvm.conf <<EOF
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 300000
net.core.somaxconn = 65535
vm.swappiness = 10
vm.vfs_cache_pressure = 50
EOF
sudo sysctl -p /etc/sysctl.d/99-net-kvm.conf

3.5. I/O Scheduler

# Для NVMe/SSD:
echo none > /sys/block/sda/queue/scheduler
# Для HDD/SATA:
echo bfq > /sys/block/sda/queue/scheduler

Автоматизация через udev:

sudo tee /etc/udev/rules.d/60-io-scheduler.rules <<EOF
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="bfq"
ACTION=="add|change", KERNEL=="nvme[0-9]*n[0-9]*", ATTR{queue/scheduler}="none"
EOF
sudo udevadm control --reload-rules

3.6. GRUB (опционально, для изоляции ядер)

Вместо устаревшего isolcpus используйте cgroups v2 + <cputune> в libvirt.

Если всё же требуется:

# /etc/default/grub
GRUB_CMDLINE_LINUX="... intel_iommu=on iommu=pt default_hugepagesz=1G hugepagesz=1G hugepages=8"
sudo update-grub

Перезагрузите хост.


4. Настройка хранилища и сети

4.1. Диски

  • Используйте virtio-scsi или virtio-blk для всех ВМ.
  • Формат диска: raw для максимальной производительности, qcow2 с qemu-img preallocation.
  • Файловая система: XFS или EXT4 с noatime,nodiratime,discard.
  • Выравнивание разделов: кратно 1MiB (fdisk, parted).
# Создание preallocated raw диска
qemu-img create -f raw vm-disk.raw 100G

4.2. Сеть

  • Отключите лишние offloading только для диагностики, в продакшене оставьте включёнными.
  • Включите vhost-net (по умолчанию в Astra 1.8/libvirt >= 7.0).
  • Для многопоточности в госте: ethtool -L eth0 combined 4 (внутри ВМ).
# Проверка offloading
ethtool -k eth0 | grep -E "tcp|udp|gro|lro|tso|gso"
# Включение
sudo ethtool -K eth0 gro on gso on tso on lro on

5. Тонкая настройка виртуальных машин (Libvirt XML)

Редактирование: virsh edit <domain>

5.1. CPU

<cpu mode='host-passthrough' check='none'/>
<vcpu placement='static'>4</vcpu>
<cputune>
  <vcpupin vcpu='0' cpuset='2'/>
  <vcpupin vcpu='1' cpuset='3'/>
  <vcpupin vcpu='2' cpuset='4'/>
  <vcpupin vcpu='3' cpuset='5'/>
  <emulatorpin cpuset='0-1'/>
</cputune>

host-passthrough даёт лучшую производительность, но снижает миграцию. Для live-migration используйте host-model.

5.2. NUMA (если многопроцессорный сервер)

<numatune>
  <memory mode='strict' nodeset='0'/>
  <memnode cellid='0' mode='strict' nodeset='0'/>
</numatune>

Проверка узлов: numactl --hardware

5.3. Память и HugePages

На хосте:

sudo sysctl vm.nr_hugepages=16
sudo mkdir -p /dev/hugepages
sudo mount -t hugetlbfs nodev /dev/hugepages

В XML:

<memory unit='KiB'>16777216</memory>
<currentMemory unit='KiB'>16777216</currentMemory>
<memoryBacking>
  <hugepages/>
  <nosharepages/>
</memoryBacking>

5.4. Диск

<disk type='file' device='disk'>
  <driver name='qemu' type='raw' cache='none' io='threads' discard='unmap'/>
  <source file='/var/lib/libvirt/images/vm.raw'/>
  <target dev='vda' bus='scsi'/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

cache='none' требует поддержки O_DIRECT. Если ФС не поддерживает, используйте cache='writeback'.

5.5. Сеть

<interface type='bridge'>
  <mac address='52:54:00:xx:xx:xx'/>
  <source bridge='br0'/>
  <model type='virtio'/>
  <driver name='vhost' queues='4'/>
</interface>

6. Особенности Astra Linux 1.8

6.1. Мандатный контроль доступа (Parsec / PDPLinux)

Astra использует мандатные политики, которые могут блокировать доступ qemu к /dev/kvm, /dev/vhost-net, огромным страницам.

Решение:

  • Не отключайте Parsec полностью.
Создайте профиль для виртуализации:
sudo pdplinux -l
sudo chcon -t virt_image_t /var/lib/libvirt/images/*
sudo chcon -t virt_etc_t /etc/libvirt/qemu/*
- Добавьте исключения в /etc/pdp/pdp.conf (если используется кастомная политика):
allow qemu_t device_t:chr_file { read write open };
allow qemu_t hugetlbfs_t:file { read write open };
- Убедитесь, что пользователь libvirt-qemu имеет нужные контексты:
sudo usermod -aG kvm libvirt-qemu

6.2. Аудит и журналы

auditd добавляет ~2-5% overhead.

Оптимизируйте правила:
sudo auditctl -D
sudo tee /etc/audit/rules.d/99-kvm.rules <<EOF
-w /dev/kvm -p rwxa -k kvm_dev
-w /dev/vhost-net -p rwxa -k vhost_dev
-a never,exit -F arch=b64 -S execve -F exe=/usr/bin/qemu-system-x86_64
EOF
sudo systemctl restart auditd

6.3. Репозитории и ядро

  • Не заменяйте сертифицированное ядро Astra на mainline без согласования с ИБ-отделом.
  • Обновляйте только через официальные репозитории:
sudo apt install astra-kvm-opt astra-libvirt-extra

7. Мониторинг и диагностика

Инструмент Назначение
virt-top Мониторинг ВМ в реальном времени
virsh domstats <vm> CPU, RAM, Disk IO метрики
perf kvm stat record -a Профилирование гипервизора
iostat -xz 1 Дисковая подсистема
sar -n DEV 1 Сетевая подсистема
vmstat 1 Общая нагрузка, своп, прерывания
dmesg | grep -iE "kvm|vhost|huge" Ошибки ядра
Пример профилирования:
sudo perf kvm stat live -p $(pgrep -f qemu-system)
sudo blktrace -d /dev/vda -o - | blkparse -i -

8. Чек-лист перед вводом в продакшен

  • [ ] VT-x/VT-d включены в BIOS
  • [ ] cpupower -> performance
  • [ ] THP отключён, HugePages выделены
  • [ ] cache='none' + io='threads' для дисков
  • [ ] virtio + vhost + многоканальность для сети
  • [ ] CPU pinning через <cputune>
  • [ ] NUMA привязка (если применимо)
  • [ ] Parsec/аудит не блокируют доступ QEMU
  • [ ] Проведены тесты fio, iperf3, sysbench
  • [ ] Зафиксированы изменения в конфигурационном управлении

Примечания по сертификации и ИБ

  1. В сертифицированных контурах Astra Linux изменения в /etc/sysctl.d/, GRUB, политиках PDPLinux должны согласовываться с ответственными за ИБ.
  2. host-passthrough может нарушать требования к целостности гостевых ОС. Используйте host-model при необходимости миграции или аудита.
  3. Для ФСТЭК-сертифицированных ВМ рекомендуется использовать virtio драйверы, подписанные в рамках СКЗИ, и отключать balloon если требуется детерминированная память.