Всем привет! У меня наблюдается огромный провал в производительности при обращении к томам RBD изнутри ВМ по сравнению с прямым доступом с хоста Proxmox. Хочу услышать ваши отзывы, чтобы понять, это ожидаемое поведение или можно что-то настроить — не отказываясь от живой миграции.
Детали конфигурации:
* Ceph версия: Reef
* Proxmox VE: 8.2.x
* Оборудование: 8-узловой кластер на полностью NVMe (Micron 7300, 7×7.68TB на хост)
* Ceph пул: RBD, реплика 4:2 (для толерантности к двойным отказам)
* Сеть: 2×40Gbps, bonded, низкая задержка (< 0.5ms), VXLAN-based fabric
Тестируемые клиенты:
* Хост через rbd map
* ВМ с дисками RBD, интегрированными в Proxmox (virtio-scsi + iothread)
Результаты тестов:
1. На хосте Proxmox (прямой доступ) `Code: fio --name=randread --filename=/dev/rbd0 --rw=randread --bs=8k --iodepth=32 --numjobs=1 --runtime=30 --ioengine=libaio --group_reporting ~115k IOPS, средняя задержка ~270 µs
2. Внутри ВМ (через virtio-scsi + iothread, диск через rbd `Code: fio --name=randread --filename=/dev/sdX --rw=randread --bs=8k --iodepth=32 --numjobs=1 --runtime=30 --ioengine=libaio --group_reporting ~500 IOPS, средняя задержка > 2 ms
Дополнительные замечания:
* KRBD включен в определении хранилища RBD в Proxmox, но диски ВМ по-прежнему отображаются как /dev/sdX
* Изменение типа кэша, асинхронного ввода-вывода и контроллера (virtio-blk vs scsi) не улучшает ситуацию.
* Использование rbd map и предоставление сырого тома LVM ВМ дает ~14k IOPS — лучше, но все еще ниже, чем у родной производительности.
* Это очевидно ломает миграцию, снимки и т.д.
Мой вопрос:
Почему I/O производительность в 20 раз хуже внутри ВМ по сравнению с прямым доступом с хоста, несмотря на использование iothread, virtio-scsi и KRBD? Это известное ограничение:
* интеграции librbd QEMU?
* слоя дисков Proxmox?
* чего-то другого, чего я не вижу?
Буду благодарен за любые советы или схожий опыт!
Заранее спасибо,
Florian (8-узловой Proxmox + Ceph дата-центр, только NVMe, дизайн с двойной площадкой)
Детали конфигурации:
* Ceph версия: Reef
* Proxmox VE: 8.2.x
* Оборудование: 8-узловой кластер на полностью NVMe (Micron 7300, 7×7.68TB на хост)
* Ceph пул: RBD, реплика 4:2 (для толерантности к двойным отказам)
* Сеть: 2×40Gbps, bonded, низкая задержка (< 0.5ms), VXLAN-based fabric
Тестируемые клиенты:
* Хост через rbd map
* ВМ с дисками RBD, интегрированными в Proxmox (virtio-scsi + iothread)
Результаты тестов:
1. На хосте Proxmox (прямой доступ) `Code: fio --name=randread --filename=/dev/rbd0 --rw=randread --bs=8k --iodepth=32 --numjobs=1 --runtime=30 --ioengine=libaio --group_reporting ~115k IOPS, средняя задержка ~270 µs
2. Внутри ВМ (через virtio-scsi + iothread, диск через rbd `Code: fio --name=randread --filename=/dev/sdX --rw=randread --bs=8k --iodepth=32 --numjobs=1 --runtime=30 --ioengine=libaio --group_reporting ~500 IOPS, средняя задержка > 2 ms
Дополнительные замечания:
* KRBD включен в определении хранилища RBD в Proxmox, но диски ВМ по-прежнему отображаются как /dev/sdX
* Изменение типа кэша, асинхронного ввода-вывода и контроллера (virtio-blk vs scsi) не улучшает ситуацию.
* Использование rbd map и предоставление сырого тома LVM ВМ дает ~14k IOPS — лучше, но все еще ниже, чем у родной производительности.
* Это очевидно ломает миграцию, снимки и т.д.
Мой вопрос:
Почему I/O производительность в 20 раз хуже внутри ВМ по сравнению с прямым доступом с хоста, несмотря на использование iothread, virtio-scsi и KRBD? Это известное ограничение:
* интеграции librbd QEMU?
* слоя дисков Proxmox?
* чего-то другого, чего я не вижу?
Буду благодарен за любые советы или схожий опыт!
Заранее спасибо,
Florian (8-узловой Proxmox + Ceph дата-центр, только NVMe, дизайн с двойной площадкой)
