From: "Alex Bennée" <alex.bennee@linaro.org>
To: marcandre.lureau@redhat.com
Cc: Cleber Rosa <crosa@redhat.com>, kraxel@redhat.com, qemu-devel@nongnu.org
Subject: Re: [PATCH v2 20/20] tests: add some virtio-gpu & vhost-user-gpu acceptance test
Date: Tue, 16 Feb 2021 16:34:06 +0000 [thread overview]
Message-ID: <87ft1wt1dv.fsf@linaro.org> (raw)
In-Reply-To: <20210204105232.834642-21-marcandre.lureau@redhat.com>
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> This will check virtio/vhost-user-vga & virgl are correctly initialized
> by the Linux kernel on an egl-headless display.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> tests/acceptance/virtio-gpu.py | 161 +++++++++++++++++++++++++++++++++
> 1 file changed, 161 insertions(+)
> create mode 100644 tests/acceptance/virtio-gpu.py
This failed when I got to master:
2021-02-16 14:33:46,266 qmp L0255 DEBUG| >>> {'execute': 'qmp_capabilities'}
2021-02-16 14:33:46,441 machine L0385 DEBUG| Error launching VM
2021-02-16 14:33:46,441 machine L0387 DEBUG| Command: './qemu-system-x86_64 -display none -vga none -chardev socket,id=mon,path=/var/tmp/avo_qemu_sock_xy9ndjnm/qemu
-29492-monitor.sock -mon chardev=mon,mode=control -chardev socket,id=console,path=/var/tmp/avo_qemu_sock_xy9ndjnm/qemu-29492-console.sock,server=on,wait=off -serial chardev:
console -cpu host -m 2G -machine pc,accel=kvm -device virtio-vga,virgl=on -display egl-headless -kernel /home/alex.bennee/avocado/data/cache/by_location/892ae21f3ae7d04994d8
1e1c0bf204ecebe555bb/vmlinuz -initrd /home/alex.bennee/avocado/data/cache/by_location/892ae21f3ae7d04994d81e1c0bf204ecebe555bb/initrd.img -append printk.time=0 console=ttyS0
rdinit=/bin/bash'
2021-02-16 14:33:46,441 machine L0389 DEBUG| Output: "qemu-system-x86_64: -device virtio-vga,virgl=on: Property 'virtio-vga.virgl' not found\n"
2021-02-16 14:33:46,441 stacktrace L0039 ERROR|
I'm going to assume this is because the beefy server I was building on
didn't have the VirGL headers to enable this feature. In lieu of feature
probing you might have to do what I did for the plugins test:
try:
vm.launch()
except:
# TODO: probably fails because plugins not enabled but we
# can't currently probe for the feature.
self.cancel("TCG Plugins not enabled?")
>
> diff --git a/tests/acceptance/virtio-gpu.py b/tests/acceptance/virtio-gpu.py
> new file mode 100644
> index 0000000000..211f02932f
> --- /dev/null
> +++ b/tests/acceptance/virtio-gpu.py
> @@ -0,0 +1,161 @@
> +# virtio-gpu tests
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or
> +# later. See the COPYING file in the top-level directory.
> +
> +
> +from avocado_qemu import Test
> +from avocado_qemu import BUILD_DIR
> +from avocado_qemu import wait_for_console_pattern
> +from avocado_qemu import exec_command_and_wait_for_pattern
> +from avocado_qemu import is_readable_executable_file
> +
> +from qemu.accel import kvm_available
> +
> +import os
> +import socket
> +import subprocess
> +
> +
> +ACCEL_NOT_AVAILABLE_FMT = "%s accelerator does not seem to be available"
> +KVM_NOT_AVAILABLE = ACCEL_NOT_AVAILABLE_FMT % "KVM"
> +
> +
> +def pick_default_vug_bin():
> + relative_path = "./contrib/vhost-user-gpu/vhost-user-gpu"
> + if is_readable_executable_file(relative_path):
> + return relative_path
> +
> + bld_dir_path = os.path.join(BUILD_DIR, relative_path)
> + if is_readable_executable_file(bld_dir_path):
> + return bld_dir_path
> +
> +
> +class VirtioGPUx86(Test):
> + """
> + :avocado: tags=virtio-gpu
> + """
> +
> + KERNEL_COMMON_COMMAND_LINE = "printk.time=0 "
> + KERNEL_URL = (
> + "https://archives.fedoraproject.org/pub/fedora"
> + "/linux/releases/33/Everything/x86_64/os/images"
> + "/pxeboot/vmlinuz"
> + )
> + INITRD_URL = (
> + "https://archives.fedoraproject.org/pub/fedora"
> + "/linux/releases/33/Everything/x86_64/os/images"
> + "/pxeboot/initrd.img"
> + )
> +
> + def wait_for_console_pattern(self, success_message, vm=None):
> + wait_for_console_pattern(
> + self,
> + success_message,
> + failure_message="Kernel panic - not syncing",
> + vm=vm,
> + )
> +
> + def test_virtio_vga_virgl(self):
> + """
> + :avocado: tags=arch:x86_64
> + :avocado: tags=device:virtio-vga
> + """
> + kernel_command_line = (
> + self.KERNEL_COMMON_COMMAND_LINE + "console=ttyS0 rdinit=/bin/bash"
> + )
> + # FIXME: should check presence of virtio, virgl etc
> + if not kvm_available(self.arch, self.qemu_bin):
> + self.cancel(KVM_NOT_AVAILABLE)
> +
> + kernel_path = self.fetch_asset(self.KERNEL_URL)
> + initrd_path = self.fetch_asset(self.INITRD_URL)
> +
> + self.vm.set_console()
> + self.vm.add_args("-cpu", "host")
> + self.vm.add_args("-m", "2G")
> + self.vm.add_args("-machine", "pc,accel=kvm")
> + self.vm.add_args("-device", "virtio-vga,virgl=on")
> + self.vm.add_args("-display", "egl-headless")
> + self.vm.add_args(
> + "-kernel",
> + kernel_path,
> + "-initrd",
> + initrd_path,
> + "-append",
> + kernel_command_line,
> + )
> + self.vm.launch()
> + self.wait_for_console_pattern("as init process")
> + exec_command_and_wait_for_pattern(
> + self, "/usr/sbin/modprobe virtio_gpu", ""
> + )
> + self.wait_for_console_pattern("features: +virgl +edid")
> +
> + def test_vhost_user_vga_virgl(self):
> + """
> + :avocado: tags=arch:x86_64
> + :avocado: tags=device:vhost-user-vga
> + """
> + kernel_command_line = (
> + self.KERNEL_COMMON_COMMAND_LINE + "console=ttyS0 rdinit=/bin/bash"
> + )
> + # FIXME: should check presence of vhost-user-gpu, virgl, memfd etc
> + if not kvm_available(self.arch, self.qemu_bin):
> + self.cancel(KVM_NOT_AVAILABLE)
> +
> + vug = pick_default_vug_bin()
> + if not vug:
> + self.cancel("Could not find vhost-user-gpu")
> +
> + kernel_path = self.fetch_asset(self.KERNEL_URL)
> + initrd_path = self.fetch_asset(self.INITRD_URL)
> +
> + # Create socketpair to connect proxy and remote processes
> + qemu_sock, vug_sock = socket.socketpair(
> + socket.AF_UNIX, socket.SOCK_STREAM
> + )
> + os.set_inheritable(qemu_sock.fileno(), True)
> + os.set_inheritable(vug_sock.fileno(), True)
> +
> + self._vug_log_path = os.path.join(
> + self.vm._test_dir, "vhost-user-gpu.log"
> + )
> + self._vug_log_file = open(self._vug_log_path, "wb")
> + print(self._vug_log_path)
> +
> + vugp = subprocess.Popen(
> + [vug, "--virgl", "--fd=%d" % vug_sock.fileno()],
> + stdin=subprocess.DEVNULL,
> + stdout=self._vug_log_file,
> + stderr=subprocess.STDOUT,
> + shell=False,
> + close_fds=False,
> + )
> +
> + self.vm.set_console()
> + self.vm.add_args("-cpu", "host")
> + self.vm.add_args("-m", "2G")
> + self.vm.add_args("-object", "memory-backend-memfd,id=mem,size=2G")
> + self.vm.add_args("-machine", "pc,memory-backend=mem,accel=kvm")
> + self.vm.add_args("-chardev", "socket,id=vug,fd=%d" % qemu_sock.fileno())
> + self.vm.add_args("-device", "vhost-user-vga,chardev=vug")
> + self.vm.add_args("-display", "egl-headless")
> + self.vm.add_args(
> + "-kernel",
> + kernel_path,
> + "-initrd",
> + initrd_path,
> + "-append",
> + kernel_command_line,
> + )
> + self.vm.launch()
> + self.wait_for_console_pattern("as init process")
> + exec_command_and_wait_for_pattern(
> + self, "/usr/sbin/modprobe virtio_gpu", ""
> + )
> + self.wait_for_console_pattern("features: +virgl -edid")
> + self.vm.shutdown()
> + qemu_sock.close()
> + vugp.terminate()
> + vugp.wait()
--
Alex Bennée
next prev parent reply other threads:[~2021-02-16 17:03 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-04 10:52 [PATCH v2 00/20] Various vhost-user-gpu & UI fixes marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 01/20] vhost-user-gpu: check backend for EDID support marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 02/20] vhost-user-gpu: handle vhost-user-gpu features in a callback marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 03/20] vhost-user-gpu: use an extandable state enum for commands marcandre.lureau
2021-02-04 11:26 ` Philippe Mathieu-Daudé
2021-02-04 13:43 ` Philippe Mathieu-Daudé
2021-02-04 10:52 ` [PATCH v2 04/20] vhost-user-gpu: handle display-info in a callback marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 05/20] ui: remove extra #ifdef CONFIG_OPENGL marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 06/20] ui: remove gl_ctx_get_current marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 07/20] ui: add gd_gl_area_scanout_disable marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 08/20] ui: annotate DCLOps callback requirements marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 09/20] ui: remove console_has_gl_dmabuf() marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 10/20] vhost-user-gpu: add a configuration flag for dmabuf usage marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 11/20] ui: add an optional get_flags callback to GraphicHwOps marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 12/20] ui: add a DCLOps callback to check dmabuf support marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 13/20] ui: check hw requirements during DCL registration marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 14/20] ui: add qemu_egl_has_dmabuf helper marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 15/20] ui: check gtk-egl dmabuf support marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 16/20] ui: add egl dmabuf import to gtkglarea marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 17/20] virtio-gpu: avoid re-entering cmdq processing marcandre.lureau
2021-02-05 8:09 ` Alexander Bulekov
2021-02-04 10:52 ` [PATCH v2 18/20] display/ui: add a callback to indicate GL state is flushed marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 19/20] chardev: check if the chardev is registered for yanking marcandre.lureau
2021-02-04 10:52 ` [PATCH v2 20/20] tests: add some virtio-gpu & vhost-user-gpu acceptance test marcandre.lureau
2021-02-16 16:34 ` Alex Bennée [this message]
2021-02-16 17:43 ` Cleber Rosa
2021-02-17 8:27 ` Marc-André Lureau
2021-02-17 12:12 ` Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ft1wt1dv.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=crosa@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.