Hi On Fri, Jul 13, 2018 at 3:12 PM Marc-André Lureau <marcandre.lur...@redhat.com> wrote: > > Hi, > > vhost-user allows to drive a virtio device in a seperate > process. After vhost-user-net, we have seen > vhost-user-{scsi,blk,crypto} added more recently. > > This series, initially proposed 2 years ago > (https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg01905.html) > contributes with vhost-user-input and vhost-user-gpu. > > Additionally, to factor out common code and ease the usage, a > vhost-user-backend is introduced as an intermediary object between the > backend and the qemu device. > > You may start a vhost-user-gpu with virgl rendering in a separate > process like this: > > $ ./vhost-user-gpu --virgl -s vgpu.sock & > $ qemu... > -chardev socket,id=chr,path=vgpu.sock > -object vhost-user-backend,id=vug,chardev=chr > -device vhost-user-vga,vhost-user=vug > > You may also specify the backend command and the arguments as part of > vhost-user-backend qemu arguments. For example, to start a > vhost-user-input backend on input device /dev/input/event19: > > -object vhost-user-backend,id=vuid,cmd="vhost-user-input /dev/input/event19" > -device virtio-input-host-pci,vhost-user=vuid > > The vhost-user-gpu backend requires virgl from git. > > The libvirt support is on-going work: > https://github.com/elmarco/libvirt/commits/vhost-user-gpu > > The GPU benchmarks are encouraging, giving up to x5 performance on > Unigine Heaven 4.0. >
I rebased the series: (on top of virtio-vga: fix reset) https://github.com/elmarco/qemu/ vhost-user-gpu > Feedback welcome, > > v4: > - move qemu_write_pidfile() in util, improve it a bit > - add --pid and --fd arguments to vhost-user to help with libvirt support > - various bug fixes for synchronization, and tearing down > > v3: deal with most comments from rfcv2 and various improvements > - "vhost-user-backend: allow to specify binary to execute" as seperate > patch, not for inclusion since Daniel as concerned about parsing > shell strings with glib > - use dmabuf to share 2d rendering result (with intel gem only atm) > - document the vhost-user-gpu protocol > - make vhost-user-gpu-pci and vhost-user-vga seperate devices (instead > of adding vhost-user support to existing devices) > - allow to specify virgl rendering, and rendernode > - let's promote out of RFC status :) > > RFCv2: (addressing some of Gerd comments digged in the archives) > - rebased, clean ups, various small fixes, update commit messages > - teach the vhost-user-backend to take a chardev > - add vhost-user-input-pci, instead of adding vhost code to > virtio-input-host-pci > > Marc-André Lureau (29): > chardev: avoid crash if no associated address > chardev: remove qemu_chr_fe_read_all() counter > chardev: unref if underlying chardev has no parent > dmabuf: add y0_top, pass it to spice > vhost-user: simplify vhost_user_init/vhost_user_cleanup > libvhost-user: exit by default on VHOST_USER_NONE > vhost-user: wrap some read/write with retry handling > Add vhost-user-backend > qio: add qio_channel_command_new_spawn_with_pre_exec() > HACK: vhost-user-backend: allow to specify binary to execute > vhost-user: split vhost_user_read() > vhost-user: add vhost_user_input_get_config() > libvhost-user: export vug_source_new() > contrib: add vhost-user-input > Add vhost-user-input-pci > vhost-user: add vhost_user_gpu_set_socket() > vhost-user: add vhost_user_gpu_get_num_capsets() > virtio: add virtio-gpu bswap helpers header > util: promote qemu_egl_rendernode_open() to libqemuutil > util: add qemu_write_pidfile() > util: use fcntl() for qemu_write_pidfile() locking > contrib: add vhost-user-gpu > virtio-gpu: remove unused qdev > virtio-gpu: remove unused config_size > virtio-gpu: block both 2d and 3d rendering > virtio-gpu: remove useless 'waiting' field > virtio-gpu: split virtio-gpu, introduce virtio-gpu-base > virtio-gpu: split virtio-gpu-pci & virtio-vga > hw/display: add vhost-user-vga & gpu-pci > > contrib/libvhost-user/libvhost-user-glib.h | 3 + > contrib/libvhost-user/libvhost-user.h | 3 + > contrib/vhost-user-gpu/drm.h | 63 ++ > contrib/vhost-user-gpu/virgl.h | 25 + > contrib/vhost-user-gpu/vugpu.h | 168 +++ > hw/display/virtio-vga.h | 22 + > hw/virtio/virtio-pci.h | 27 +- > include/hw/virtio/vhost-backend.h | 6 + > include/hw/virtio/vhost-user-blk.h | 2 +- > include/hw/virtio/vhost-user-scsi.h | 2 +- > include/hw/virtio/vhost-user.h | 2 +- > include/hw/virtio/virtio-gpu-bswap.h | 61 + > include/hw/virtio/virtio-gpu.h | 90 +- > include/hw/virtio/virtio-input.h | 14 + > include/io/channel-command.h | 18 + > include/qemu/drm.h | 6 + > include/qemu/osdep.h | 3 +- > include/sysemu/vhost-user-backend.h | 60 + > include/ui/console.h | 1 + > backends/cryptodev-vhost-user.c | 18 +- > backends/vhost-user.c | 320 ++++++ > chardev/char-fe.c | 13 +- > chardev/char-socket.c | 8 +- > contrib/libvhost-user/libvhost-user-glib.c | 15 +- > contrib/libvhost-user/libvhost-user.c | 3 +- > contrib/vhost-user-gpu/drm.c | 190 ++++ > contrib/vhost-user-gpu/main.c | 1164 ++++++++++++++++++++ > contrib/vhost-user-gpu/virgl.c | 579 ++++++++++ > contrib/vhost-user-input/main.c | 379 +++++++ > hw/block/vhost-user-blk.c | 22 +- > hw/display/vhost-user-gpu-pci.c | 51 + > hw/display/vhost-user-gpu.c | 524 +++++++++ > hw/display/vhost-user-vga.c | 52 + > hw/display/virtio-gpu-3d.c | 70 +- > hw/display/virtio-gpu-base.c | 292 +++++ > hw/display/virtio-gpu-pci.c | 39 +- > hw/display/virtio-gpu.c | 368 ++----- > hw/display/virtio-vga.c | 127 ++- > hw/input/vhost-user-input.c | 110 ++ > hw/scsi/vhost-user-scsi.c | 20 +- > hw/virtio/vhost-stub.c | 4 +- > hw/virtio/vhost-user.c | 143 ++- > hw/virtio/virtio-pci.c | 20 + > io/channel-command.c | 33 +- > net/vhost-user.c | 13 +- > os-posix.c | 24 - > os-win32.c | 25 - > qga/main.c | 54 +- > scsi/qemu-pr-helper.c | 40 +- > ui/egl-helpers.c | 51 +- > ui/spice-display.c | 3 +- > util/drm.c | 66 ++ > util/oslib-posix.c | 39 + > util/oslib-win32.c | 27 + > vl.c | 8 +- > MAINTAINERS | 15 +- > Makefile | 6 + > Makefile.objs | 2 + > backends/Makefile.objs | 3 +- > configure | 35 + > contrib/vhost-user-gpu/Makefile.objs | 10 + > contrib/vhost-user-input/Makefile.objs | 1 + > docs/interop/vhost-user-gpu.rst | 236 ++++ > docs/interop/vhost-user.txt | 24 + > hw/display/Makefile.objs | 5 +- > hw/input/Makefile.objs | 1 + > qemu-options.hx | 24 + > util/Makefile.objs | 1 + > 68 files changed, 5130 insertions(+), 723 deletions(-) > create mode 100644 contrib/vhost-user-gpu/drm.h > create mode 100644 contrib/vhost-user-gpu/virgl.h > create mode 100644 contrib/vhost-user-gpu/vugpu.h > create mode 100644 hw/display/virtio-vga.h > create mode 100644 include/hw/virtio/virtio-gpu-bswap.h > create mode 100644 include/qemu/drm.h > create mode 100644 include/sysemu/vhost-user-backend.h > create mode 100644 backends/vhost-user.c > create mode 100644 contrib/vhost-user-gpu/drm.c > create mode 100644 contrib/vhost-user-gpu/main.c > create mode 100644 contrib/vhost-user-gpu/virgl.c > create mode 100644 contrib/vhost-user-input/main.c > create mode 100644 hw/display/vhost-user-gpu-pci.c > create mode 100644 hw/display/vhost-user-gpu.c > create mode 100644 hw/display/vhost-user-vga.c > create mode 100644 hw/display/virtio-gpu-base.c > create mode 100644 hw/input/vhost-user-input.c > create mode 100644 util/drm.c > create mode 100644 contrib/vhost-user-gpu/Makefile.objs > create mode 100644 contrib/vhost-user-input/Makefile.objs > create mode 100644 docs/interop/vhost-user-gpu.rst > > -- > 2.18.0.129.ge3331758f1 > > -- Marc-André Lureau