From 57bcba24062e027dde0c88fd2e038cacda540d7d Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Tue, 4 Jul 2023 00:57:34 +0300 Subject: [PATCH] Add notes about VDUSE --- docs/usage/nbd.en.md | 2 ++ docs/usage/nbd.ru.md | 2 ++ docs/usage/qemu.en.md | 40 ++++++++++++++++++++++++++++++++++++++++ docs/usage/qemu.ru.md | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+) diff --git a/docs/usage/nbd.en.md b/docs/usage/nbd.en.md index 5d4ef670..b53b2481 100644 --- a/docs/usage/nbd.en.md +++ b/docs/usage/nbd.en.md @@ -13,6 +13,8 @@ remains decent (see an example [here](../performance/comparison1.en.md#vitastor- Vitastor Kubernetes CSI driver is based on NBD. +See also [VDUSE](qemu.en.md#vduse). + ## Map image To create a local block device for a Vitastor image run: diff --git a/docs/usage/nbd.ru.md b/docs/usage/nbd.ru.md index b302b1e7..38f34505 100644 --- a/docs/usage/nbd.ru.md +++ b/docs/usage/nbd.ru.md @@ -16,6 +16,8 @@ NBD немного снижает производительность из-за CSI-драйвер Kubernetes Vitastor основан на NBD. +Смотрите также [VDUSE](qemu.ru.md#vduse). + ## Подключить устройство Чтобы создать локальное блочное устройство для образа, выполните команду: diff --git a/docs/usage/qemu.en.md b/docs/usage/qemu.en.md index 0b11dc11..4567eaf6 100644 --- a/docs/usage/qemu.en.md +++ b/docs/usage/qemu.en.md @@ -83,3 +83,43 @@ qemu-img rebase -u -b '' testimg.qcow2 This can be used for backups. Just note that exporting an image that is currently being written to is of course unsafe and doesn't produce a consistent result, so only export snapshots if you do this on a live VM. + +## VDUSE + +Linux kernel, starting with version 5.15, supports a new interface for attaching virtual disks +to the host - VDUSE (vDPA Device in Userspace). QEMU, starting with 7.2, has support for +exporting QEMU block devices over this protocol using qemu-storage-daemon. + +VDUSE has the same problem as other FUSE-like interfaces in Linux: if a userspace process hangs, +for example, if it loses connectivity with Vitastor cluster - active processes doing I/O may +hang in the D state (uninterruptible sleep) and you won't be able to kill them even with kill -9. +In this case reboot will be the only way to remove VDUSE devices from system. + +On the other hand, VDUSE is faster than [NBD](nbd.en.md), so you may prefer to use it if +performance is important for you. Approximate performance numbers: +direct fio benchmark - 115000 iops, NBD - 60000 iops, VDUSE - 90000 iops. + +To try VDUSE you need at least Linux 5.15, built with VDUSE support +(CONFIG_VIRTIO_VDPA=m and CONFIG_VDPA_USER=m). Debian Linux kernels have these options +disabled by now, so if you want to try it on Debian, use a kernel from Ubuntu +[kernel-ppa/mainline](https://kernel.ubuntu.com/~kernel-ppa/mainline/) or Proxmox. + +Commands to attach Vitastor image as a VDUSE device: + +``` +modprobe vduse virtio-vdpa +qemu-storage-daemon --daemonize --blockdev '{"node-name":"test1","driver":"vitastor",\ + "etcd-host":"192.168.7.2:2379/v3","image":"testosd1","cache":{"direct":true,"no-flush":false},"discard":"unmap"}' \ + --export vduse-blk,id=test1,node-name=test1,name=test1,num-queues=16,queue-size=128,writable=true +vdpa dev add name test1 mgmtdev vduse +``` + +After running these commands /dev/vda device will appear in the system and you'll be able to +use it as a normal disk. + +To remove the device: + +``` +vdpa dev del test1 +kill +``` diff --git a/docs/usage/qemu.ru.md b/docs/usage/qemu.ru.md index ac52fe49..a3235dc3 100644 --- a/docs/usage/qemu.ru.md +++ b/docs/usage/qemu.ru.md @@ -87,3 +87,43 @@ qemu-img rebase -u -b '' testimg.qcow2 Это можно использовать для резервного копирования. Только помните, что экспортировать образ, в который в то же время идёт запись, небезопасно - результат чтения не будет целостным. Так что если вы работаете с активными виртуальными машинами, экспортируйте только их снимки, но не сам образ. + +## VDUSE + +В Linux, начиная с версии ядра 5.15, доступен новый интерфейс для подключения виртуальных дисков +к системе - VDUSE (vDPA Device in Userspace), а в QEMU, начиная с версии 7.2, есть поддержка +экспорта блочных устройств QEMU по этому протоколу через qemu-storage-daemon. + +VDUSE страдает общей проблемой FUSE-подобных интерфейсов в Linux: если пользовательский процесс +подвиснет, например, если будет потеряна связь с кластером Vitastor - читающие/пишущие в кластер +процессы могут "залипнуть" в состоянии D (непрерываемый сон) и их будет невозможно убить даже +через kill -9. В этом случае удалить из системы устройство можно только перезагрузившись. + +С другой стороны, VDUSE быстрее по сравнению с [NBD](nbd.ru.md), поэтому его может +быть предпочтительно использовать там, где производительность важнее. Порядок показателей: +прямое тестирование через fio - 115000 iops, NBD - 60000 iops, VDUSE - 90000 iops. + +Чтобы использовать VDUSE, вам нужно ядро Linux версии хотя бы 5.15, собранное с поддержкой +VDUSE (CONFIG_VIRTIO_VDPA=m и CONFIG_VDPA_USER=m). В ядрах в Debian Linux поддержка пока +отключена - если хотите попробовать эту функцию на Debian, поставьте ядро из Ubuntu +[kernel-ppa/mainline](https://kernel.ubuntu.com/~kernel-ppa/mainline/) или из Proxmox. + +Команды для подключения виртуального диска через VDUSE: + +``` +modprobe vduse virtio-vdpa +qemu-storage-daemon --daemonize --blockdev '{"node-name":"test1","driver":"vitastor",\ + "etcd-host":"192.168.7.2:2379/v3","image":"testosd1","cache":{"direct":true,"no-flush":false},"discard":"unmap"}' \ + --export vduse-blk,id=test1,node-name=test1,name=test1,num-queues=16,queue-size=128,writable=true +vdpa dev add name test1 mgmtdev vduse +``` + +После этого в системе появится устройство /dev/vda, которое можно будет использовать как +обычный диск. + +Для удаления устройства из системы: + +``` +vdpa dev del test1 +kill +```