Содержание

Proxmox: RAW, QCOW2 или ZVOL

В этой статье мы посмотрим, как разные форматы хранения, доступные для KVM (ZVOL, RAW и QCOW2) ведут себя с настройками по умолчанию. Хотя в Proxmox на самом деле их поддерживается намного больше: NFS, GlusterFS, LVM, iSCSI, Ceph и прочие (полный список есть на странице “Storage” в вики Proxmox), мы тут разбираем только эти три формата.

Выбор формата хранения

Начиная с Proxmox VE 4.4, вы можете использовать разные форматы хранения для виртуальных машин. На этапе преднастройки можно выбрать нужный формат при создании ВМ.

Форматы хранения

Local / RAW

Этот формат, пожалуй, самый простой из всех. Диск виртуальной машины представлен обычным «плоским» файлом. Если ваш виртуальный диск размером 8 ГиБ, то и файл будет весить 8 ГиБ. Обратите внимание: формат RAW не поддерживает создание “снимков”. Из плюсов - его легко сохранять и копировать, потому что это просто один файл.

Local / QCOW2

Этот формат поумнее, чем RAW. Виртуальный диск здесь тоже представляет собой файл, но QCOW2 умеет “тонкое выделение” места (thin provisioning): вы можете создать диск на 8 ГиБ, но физически он займёт меньше и будет расти по мере заполнения. Кроме того, этот формат поддерживает создание “снимков”. Правда, откат по снимку занимает чуть больше времени по сравнению с ZVOL.

ZVOL

Этот формат доступен только при использовании ZFS. Нужно сначала создать ZPOOL в Proxmox, и уже потом можно делать тома ZVOL, которые KVM будет использовать напрямую. При этом вы получаете все фишки ZFS: контроль целостности данных, снимки, клоны, сжатие, дедупликацию и т.д. В Proxmox можно создать ZVOL с “тонким выделением” - это тоже поддерживается.

Архитектурные различия

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

Из схемы видно, что RAW и QCOW2 накладываются поверх уровней VFS и локальной файловой системы. В то время как ZVOL может использоваться напрямую через QEMU, минуя Local Files, VFS и POSIX-слой ZFS. По логике, это должно давать ZVOL преимущество по производительности по сравнению с RAW и QCOW2. Именно это мы и собираемся проверить в тестах.

Прежде чем переходить к результатам, ниже - таблица с основными отличиями каждого формата хранения.

Анализ результатов

Local / RAW

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

Local / QCOW2

QCOW2 — определённо формат, которого стоит избегать. В трёх разных тестах мы так и не смогли получить стабильных или вообще каких-либо результатов. Во время стресс-теста AIO KVM полностью терял стабильность и переставал откликаться. А тест tiobench не завершился даже спустя 48 часов. Для сравнения: другие форматы дают результат меньше чем за 3 часа.

Стоит отметить, что QCOW2 работает вполне сносно, если файл записан в файловую систему ext4. Мы пришли к выводу, что проблема - в связке с ZFS.

ZVOL

Этот формат показывает производительность, схожую с RAW, местами чуть медленнее. Но при этом он даёт доступ к ряду фич, которые трудно игнорировать при работе с виртуалками: тонкое выделение места, сжатие, снимки, клоны, миграции и прочее.

В тестах на чтение результаты у него лучше. Очевидно, что основные просадки - именно в скорости записи.

Как перевести диски в формат ZVOL?

С Proxmox всё делается довольно просто. Перейти с одного формата хранения на другой - вообще не проблема. Нужно просто выбрать нужный диск и нажать на “Move Disk” в веб-интерфейсе. После этого можно будет указать новый формат хранения.

Результаты

Ниже - результаты тестов, которые помогли сравнить производительность трёх форматов хранения.

SQLite — Вставка данных в SQLite по таймеру

(меньше — лучше)

Apache Benchmark — Отдача статической веб-страницы

(больше — лучше)

Threaded I/O Tester — 64MB случайное чтение — 32 потока

(больше — лучше)

Формат QCOW2 не дал корректных результатов в этом тесте

Threaded I/O Tester — 64MB случайная запись — 32 потока

(больше — лучше)

Формат QCOW2 тут тоже не дал корректных результатов в этом тесте.

Заключение

В целом, формат ZVOL выглядит как хороший выбор по сравнению с RAW и QCOW2. Он немного медленнее при записи, но зато предлагает серьёзные возможности. Тем не менее, стоит учитывать, что ZFS довольно прожорлив в плане ресурсов - как по памяти, так и по I/O. Если вы хотите получить достойную производительность от сервера с ZFS, то и “железо” должно быть соответствующим - это особенно проявилось на наших старых серверах.

С другой стороны, у ZFS есть много параметров конфигурации, которые позволяют адаптироваться под разные типы нагрузки.