Продолжаю тестирование производительности дисков (см. предыдущую часть здесь: . В этой второй части сосредоточусь на тестах, которые показывают, что производительность ZFS томов заметно снижается при работе под виртуальной машиной.
Тест 1 - такой же, как в предыдущей теме: 10 ГБ последовательных операций записи размером 4 КБ с iodepth=1 и sync=1:
* **Сырой раздел:** 84 000 IOPS
* **Хост (zvol):** 18 000 IOPS
* **Виртуальная машина (zvol):** 6 800 IOPS
* **Виртуальная машина (sync=0):** 10 000 IOPS
* **LXC (LVM):** 18 000 IOPS
* **Хост (LVM):** 84 000 IOPS
* **Виртуальная машина (LVM):** 12 000 IOPS
* **LXC (LVM):** 55 000 IOPS
Код:
`fio --filename=/dev/zvol/b-zmirror1-nvme01/vm-101-disk-0 --ioengine=libaio --loops=1 --size=10G --time_based --runtime=60 --group_reporting --stonewall --name=cc1 --description="CC1" --rw=write --bs=4k --direct=1 --iodepth=1 --numjobs=1 --sync=1`
В прошлой части выяснилось, что даже на хосте использование zvol снижает производительность в 5 раз. Хотя в LXC снижение производительности незначительное, в виртуальной машине падение составляет дополнительные 3 раза! От 84 тыс. IOPS на хосте с LVM до менее чем 7 тыс. IOPS с zvol в виртуальной машине — это замедление в 12 раз.
Но это еще не все. На этот раз дело, кажется, не столько в самих томах, сколько в виртуализации в целом. Тест с толстым LVM в виртуальной машине тоже очень медленный — примерно в два раза быстрее, чем zvol/VM, но все же в семь раз медленнее, чем LVM/хост. Отключение sync улучшает скорость, но незначительно.
Производительность LVM в LXC вполне пристойная – 55 тыс. IOPS. Медленнее, чем на хосте, но снижение не более чем в два раза, и в 8 раз быстрее, чем соответствующая виртуальная машина! (Но об LXC производительности будет больше в следующей части).
Опять же, не ожидал такого результата. Конечно, ожидал некоторого снижения производительности, но не настолько значительного. При этом не каждый тест показывал такую разницу. Например, тест на последовательную запись из предыдущей части (максимальная пропускная способность) загружал ЦП на хосте до 1,6 ГБ/с, и примерно такие же результаты получались в виртуальной машине. Но эти операции записи с низким iodepth и синхронизацией выглядят просто ужасно.
Может ли кто-нибудь подтвердить или опровергнуть это на своих данных?
Включена аппаратная виртуализация KVM, включен AES. Странного использования ЦП на этом тесте нет.
В итоге, некоторые тесты показывают многократное снижение производительности дисков по сравнению с хостом в виртуальной машине. Это звучит правдоподобно?
**Конфигурационные данные:**
* **Виртуальная машина (uname -a):** `Linux fiotest 6.1.0-29-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.123-1 (2025-01-02) x86_64 GNU/Linux`
* **LXC (uname -a):** `Linux fiopct 6.8.12-10-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-10 (2025-04-18T07:39Z) x86_64 GNU/Linux`
`pveversion -v`
`proxmox-ve: 8.4.0 (running kernel: 6.8.12-10-pve)`
`pve-manager: 8.4.1 (running version: 8.4.1/2a5fa54a8503f96d)`
`proxmox-kernel-helper: 8.1.1`
`proxmox-kernel-6.8.12-10-pve-signed: 6.8.12-10`
`proxmox-kernel-6.8: 6.8.12-10`
`proxmox-kernel-6.8.12-9-pve-signed: 6.8.12-9`
`pve-xtermjs: 5.5.0-2`
... (дальнейший список пакетов и версий)
`zfsutils-linux: 2.2.7-pve2`
`ZFS properties: Exceeded message limit, but nothing overly exciting here: sync=standard, compression=on`
`cat /etc/pve/qemu-server/101.conf`
... (конфигурация Qemu сервера)
`cat /etc/pve/lxc/105.conf`
... (конфигурация LXC контейнера)
Тест 1 - такой же, как в предыдущей теме: 10 ГБ последовательных операций записи размером 4 КБ с iodepth=1 и sync=1:
* **Сырой раздел:** 84 000 IOPS
* **Хост (zvol):** 18 000 IOPS
* **Виртуальная машина (zvol):** 6 800 IOPS
* **Виртуальная машина (sync=0):** 10 000 IOPS
* **LXC (LVM):** 18 000 IOPS
* **Хост (LVM):** 84 000 IOPS
* **Виртуальная машина (LVM):** 12 000 IOPS
* **LXC (LVM):** 55 000 IOPS
Код:
`fio --filename=/dev/zvol/b-zmirror1-nvme01/vm-101-disk-0 --ioengine=libaio --loops=1 --size=10G --time_based --runtime=60 --group_reporting --stonewall --name=cc1 --description="CC1" --rw=write --bs=4k --direct=1 --iodepth=1 --numjobs=1 --sync=1`
В прошлой части выяснилось, что даже на хосте использование zvol снижает производительность в 5 раз. Хотя в LXC снижение производительности незначительное, в виртуальной машине падение составляет дополнительные 3 раза! От 84 тыс. IOPS на хосте с LVM до менее чем 7 тыс. IOPS с zvol в виртуальной машине — это замедление в 12 раз.
Но это еще не все. На этот раз дело, кажется, не столько в самих томах, сколько в виртуализации в целом. Тест с толстым LVM в виртуальной машине тоже очень медленный — примерно в два раза быстрее, чем zvol/VM, но все же в семь раз медленнее, чем LVM/хост. Отключение sync улучшает скорость, но незначительно.
Производительность LVM в LXC вполне пристойная – 55 тыс. IOPS. Медленнее, чем на хосте, но снижение не более чем в два раза, и в 8 раз быстрее, чем соответствующая виртуальная машина! (Но об LXC производительности будет больше в следующей части).
Опять же, не ожидал такого результата. Конечно, ожидал некоторого снижения производительности, но не настолько значительного. При этом не каждый тест показывал такую разницу. Например, тест на последовательную запись из предыдущей части (максимальная пропускная способность) загружал ЦП на хосте до 1,6 ГБ/с, и примерно такие же результаты получались в виртуальной машине. Но эти операции записи с низким iodepth и синхронизацией выглядят просто ужасно.
Может ли кто-нибудь подтвердить или опровергнуть это на своих данных?
Включена аппаратная виртуализация KVM, включен AES. Странного использования ЦП на этом тесте нет.
В итоге, некоторые тесты показывают многократное снижение производительности дисков по сравнению с хостом в виртуальной машине. Это звучит правдоподобно?
**Конфигурационные данные:**
* **Виртуальная машина (uname -a):** `Linux fiotest 6.1.0-29-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.123-1 (2025-01-02) x86_64 GNU/Linux`
* **LXC (uname -a):** `Linux fiopct 6.8.12-10-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-10 (2025-04-18T07:39Z) x86_64 GNU/Linux`
`pveversion -v`
`proxmox-ve: 8.4.0 (running kernel: 6.8.12-10-pve)`
`pve-manager: 8.4.1 (running version: 8.4.1/2a5fa54a8503f96d)`
`proxmox-kernel-helper: 8.1.1`
`proxmox-kernel-6.8.12-10-pve-signed: 6.8.12-10`
`proxmox-kernel-6.8: 6.8.12-10`
`proxmox-kernel-6.8.12-9-pve-signed: 6.8.12-9`
`pve-xtermjs: 5.5.0-2`
... (дальнейший список пакетов и версий)
`zfsutils-linux: 2.2.7-pve2`
`ZFS properties: Exceeded message limit, but nothing overly exciting here: sync=standard, compression=on`
`cat /etc/pve/qemu-server/101.conf`
... (конфигурация Qemu сервера)
`cat /etc/pve/lxc/105.conf`
... (конфигурация LXC контейнера)
