Как работает KVM
KVM (Kernel-based Virtual Machine) — модуль ядра Linux, встроенный с версии 2.6.20 (2007 год). Работает совместно с QEMU-эмулятором и использует аппаратные расширения процессора: Intel VT-x или AMD-V.
Принцип: физический процессор буквально умеет создавать изолированные режимы выполнения — «гостевые кольца». Каждая KVM-машина получает собственное виртуальное железо: процессор, память, диск, сетевую карту. Гостевая ОС «думает», что работает на физическом сервере, не зная о существовании соседей.
Архитектура KVM
Ключевое свойство KVM — жёсткие лимиты ресурсов. Если вашей VPS выделено 4 vCPU и 8 ГБ RAM — это именно то, что вы получаете. Сосед не может «забрать» ваши ресурсы вне зависимости от своей нагрузки.
Как работает OpenVZ
OpenVZ — контейнерная виртуализация на уровне операционной системы. Никакой аппаратной эмуляции — все контейнеры разделяют одно ядро Linuxхост-сервера. Изоляция достигается через механизмы ядра: namespaces (изоляция процессов, сети, файловой системы) и cgroups (ограничение ресурсов).
Архитектура OpenVZ
Из-за общего ядра OpenVZ поддерживает только Linux-контейнеры — и только те дистрибутивы, которые совместимы с ядром хост-сервера. Windows, FreeBSD, кастомные ядра — невозможны.
OpenVZ поддерживает soft limits — «мягкие» лимиты, которые можно временно превысить. Это позволяет провайдерам практиковать overcommit: продавать ресурсы, которых физически нет в запасе, надеясь что клиенты не нагрузят систему одновременно.
Сравнение по 10 параметрам
| Параметр | KVM | OpenVZ |
|---|---|---|
| Тип виртуализации | Аппаратная (Type-1 Hypervisor) | Контейнерная (OS-level) |
| Ядро ОС | Отдельное для каждой ВМ | Общее для всех контейнеров |
| Поддержка ОС | Linux, Windows, FreeBSD, любые | Только Linux |
| Изоляция ресурсов | Жёсткая (hard limits) | Мягкая (soft limits) |
| Docker | ✅ Полная поддержка | ❌ Не работает |
| Кастомное ядро | ✅ Любое | ❌ Только ядро хоста |
| Накладные расходы | ~3–5% на гипервизор | ~1–2% |
| Безопасность | Высокая (полная изоляция) | Средняя (общее ядро) |
| Цена | Выше | Ниже на 30–50% |
| Распространённость 2026 | Стандарт индустрии | Устаревает |
Производительность: цифры
Главный аргумент за OpenVZ — «меньше накладных расходов = быстрее». На практике это справедливо только при низкой нагрузке и честном провайдере. При реальных нагрузках KVM стабильнее.
| Метрика | KVM | OpenVZ | Разница |
|---|---|---|---|
| CPU (Sysbench) | 10 300 ops/s | ~9 000 ops/s | KVM +14% |
| IOPS (NVMe) | 110 000+ | ~80 000 | KVM +37% |
| Сеть (пропускная) | ~940 Мбит/с | ~790 Мбит/с | KVM +19% |
| Redis ops/sec | 75 000+ | ~58 000 | KVM +29% |
| Стабильность под нагрузкой | Высокая | Зависит от соседей | — |
Важная оговорка про OpenVZ
Теоретически OpenVZ эффективнее использует ресурсы (меньше overhead). Но реальная производительность вашего контейнера зависит от поведения соседей. Если провайдер разместил 200 контейнеров на сервере вместо честных 100 — вы почувствуете это в виде lag-спайков. На KVM такое невозможно физически.
Безопасность и изоляция
Это принципиальное различие, особенно актуальное для коммерческих проектов.
KVM: изоляция на уровне гипервизора
Каждая KVM-машина работает в собственном пространстве памяти. Гипервизор — единственный посредник между ВМ и железом. Даже если злоумышленник получит root в одной ВМ, он не сможет выйти за её пределы и атаковать соседей. Уязвимости ядра гостевой ОС не затрагивают хост и другие ВМ.
OpenVZ: общее ядро = общая угроза
Все контейнеры разделяют одно ядро. Критическая уязвимость в ядре Linux (kernel privilege escalation) потенциально позволяет злоумышленнику из одного контейнера получить доступ к хосту или другим контейнерам — это называется kernel escape. Исторически такие уязвимости находили регулярно (Dirty COW 2016, Dirty Pipe 2022).
| Угроза | KVM | OpenVZ |
|---|---|---|
| Kernel escape атака | Не применимо (разные ядра) | Риск при уязвимости ядра |
| Утечка данных через /proc | Невозможна | Требует настройки |
| Влияние уязвимой ВМ на соседей | Изолировано гипервизором | Зависит от ядра хоста |
| Обновление ядра | Независимо для каждой ВМ | Только провайдер обновляет |
| Поддержка SELinux/AppArmor | Полная | Ограниченная |
Для проектов с персональными данными пользователей (152-ФЗ), финансовых сервисов и любого продакшна — KVM не обсуждается. OpenVZ допустим только для личных экспериментов и некритичных задач.
Ограничения каждого типа
OpenVZ — что не работает
Docker и контейнеры
Нельзя запустить Docker, Podman, LXC внутри контейнера
Windows
Только Linux. Windows Server невозможен
Кастомное ядро
Нельзя обновить ядро или установить свои модули
WireGuard
WireGuard требует модуль ядра — недоступен на OpenVZ
KVM внутри VPS
Вложенная виртуализация (nested VM) невозможна
Некоторые VPN
TUN/TAP интерфейс может быть недоступен
KVM — ограничений почти нет
Docker и Kubernetes
Работает как на физическом сервере
Любая ОС
Ubuntu, Debian, Windows Server, FreeBSD, Alpine
Кастомное ядро
Можно собрать и установить своё ядро
WireGuard
Встроен в ядро Linux с 5.6, работает сразу
Вложенная виртуализация
Можно запустить VM внутри VM
GPU passthrough
Прокинуть видеокарту в ВМ (у некоторых провайдеров)
Когда что выбирать
| Задача | Выбор | Причина |
|---|---|---|
| VPN (WireGuard) | KVM | WireGuard требует модуль ядра |
| Docker / Kubernetes | KVM | OpenVZ не поддерживает |
| WordPress сайт | KVM | Стабильность и безопасность |
| Telegram-бот | KVM или OpenVZ | Простой бот — любой, продакшн — KVM |
| Windows Server | KVM | OpenVZ не поддерживает Windows |
| Игровой сервер | KVM | Нужна гарантированная производительность CPU |
| CI/CD (Jenkins, GitLab) | KVM | Docker обязателен |
| Простой статический сайт | KVM или OpenVZ | Нет требований — любой |
| Тест/эксперимент за минимум | OpenVZ | Дешевле, для некритичных задач |
Как проверить тип виртуализации своего VPS
Провайдер написал «KVM», но хочется убедиться? Три способа:
Способ 1 — systemd-detect-virt (рекомендуется)
systemd-detect-virt # kvm → KVM (отлично) # openvz → OpenVZ # lxc → LXC-контейнер (≈ OpenVZ) # microsoft → Hyper-V # none → физический сервер
Способ 2 — virt-what
apt install -y virt-what virt-what # kvm → KVM подтверждён
Способ 3 — проверка /proc/cpuinfo
grep -m1 'hypervisor' /proc/cpuinfo # Флаг hypervisor есть → виртуальная машина # Флаг vmx (Intel) или svm (AMD) → аппаратная виртуализация доступна
cat /proc/version покажет реальную версию ядра вашей ВМ. На OpenVZ — ядро хост-сервера, которое вы не можете обновить.