From fbf0263625b9044ec80d96d0098847d33c534176 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sat, 16 Sep 2023 18:40:52 +0300 Subject: [PATCH] Add qemu-storage-daemon to documentation --- docs/usage/qemu.en.md | 37 +++++++++++++++++++++++++++++++++++++ docs/usage/qemu.ru.md | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/docs/usage/qemu.en.md b/docs/usage/qemu.en.md index 31ad8a26..ea56deeb 100644 --- a/docs/usage/qemu.en.md +++ b/docs/usage/qemu.en.md @@ -34,6 +34,20 @@ qemu-system-x86_64 -enable-kvm -m 1024 \ -vnc 0.0.0.0:0 ``` +With a separate I/O thread: + +``` +qemu-system-x86_64 -enable-kvm -m 1024 \ + -object iothread,id=vitastor1 \ + -blockdev '{"node-name":"drive-virtio-disk0","driver":"vitastor","image":"debian9", + "cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \ + -device 'virtio-blk-pci,iothread=vitastor1,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0, + id=virtio-disk0,bootindex=1,write-cache=off' \ + -vnc 0.0.0.0:0 +``` + +You can also specify inode ID, pool and size manually instead of `:image=` option: `:pool=:inode=:size=`. + ## qemu-img For qemu-img, you should use `vitastor:etcd_host=:image=` as filename. @@ -84,6 +98,29 @@ This can be used for backups. Just note that exporting an image that is currentl is of course unsafe and doesn't produce a consistent result, so only export snapshots if you do this on a live VM. +## vhost-user-blk + +QEMU, starting with 6.0, includes support for attaching disks via a separate +userspace worker process, called `vhost-user-blk`. It usually has slightly (20-30 us) +lower latency. + +Example commands to use it with Vitastor: + +``` +qemu-storage-daemon \ + --daemonize \ + --blockdev '{"node-name":"drive-virtio-disk1","driver":"vitastor","image":"testosd1","cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \ + --export type=vhost-user-blk,id=vitastor1,node-name=drive-virtio-disk1,addr.type=unix,addr.path=/run/vitastor1-user-blk.sock,writable=on,num-queues=1 + +qemu-system-x86_64 -enable-kvm -m 2048 -M accel=kvm,memory-backend=mem \ + -object memory-backend-memfd,id=mem,size=2G,share=on \ + -chardev socket,id=vitastor1,reconnect=1,path=/run/vitastor1-user-blk.sock \ + -device vhost-user-blk-pci,chardev=vitastor1,num-queues=1,config-wce=off \ + -vnc 0.0.0.0:0 +``` + +memfd memory-backend is crucial, vhost-user-blk does not work without it. + ## VDUSE Linux kernel, starting with version 5.15, supports a new interface for attaching virtual disks diff --git a/docs/usage/qemu.ru.md b/docs/usage/qemu.ru.md index a5cfca1b..843fb1bd 100644 --- a/docs/usage/qemu.ru.md +++ b/docs/usage/qemu.ru.md @@ -36,6 +36,18 @@ qemu-system-x86_64 -enable-kvm -m 1024 \ -vnc 0.0.0.0:0 ``` +С отдельным потоком ввода-вывода: + +``` +qemu-system-x86_64 -enable-kvm -m 1024 \ + -object iothread,id=vitastor1 \ + -blockdev '{"node-name":"drive-virtio-disk0","driver":"vitastor","image":"debian9", + "cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \ + -device 'virtio-blk-pci,iothread=vitastor1,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0, + id=virtio-disk0,bootindex=1,write-cache=off' \ + -vnc 0.0.0.0:0 +``` + Вместо `:image=` также можно указывать номер инода, пул и размер: `:pool=:inode=:size=`. ## qemu-img @@ -88,6 +100,29 @@ qemu-img rebase -u -b '' testimg.qcow2 в то же время идёт запись, небезопасно - результат чтения не будет целостным. Так что если вы работаете с активными виртуальными машинами, экспортируйте только их снимки, но не сам образ. +## vhost-user-blk + +QEMU, начиная с 6.0, позволяет подключать диски через отдельный рабочий процесс. +Этот метод подключения называется `vhost-user-blk` и обычно имеет чуть меньшую +задержку (ниже на 20-30 микросекунд, чем при обычном методе). + +Пример команд для использования vhost-user-blk с Vitastor: + +``` +qemu-storage-daemon \ + --daemonize \ + --blockdev '{"node-name":"drive-virtio-disk1","driver":"vitastor","image":"testosd1","cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \ + --export type=vhost-user-blk,id=vitastor1,node-name=drive-virtio-disk1,addr.type=unix,addr.path=/run/vitastor1-user-blk.sock,writable=on,num-queues=1 + +qemu-system-x86_64 -enable-kvm -m 2048 -M accel=kvm,memory-backend=mem \ + -object memory-backend-memfd,id=mem,size=2G,share=on \ + -chardev socket,id=vitastor1,reconnect=1,path=/run/vitastor1-user-blk.sock \ + -device vhost-user-blk-pci,chardev=vitastor1,num-queues=1,config-wce=off \ + -vnc 0.0.0.0:0 +``` + +Здесь критична опция memory-backend-memfd, vhost-user-blk без неё не работает. + ## VDUSE В Linux, начиная с версии ядра 5.15, доступен новый интерфейс для подключения виртуальных дисков