From: Stefan Hajnoczi <stefanha@redhat.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: "Alyssa Ross" <hi@alyssa.is>,
"Alex Bennée" <alex.bennee@linaro.org>,
stratos-dev@op-lists.linaro.org, virtio-dev@lists.oasis-open.org,
"virtio-comment@lists.oasis-open.org"
<virtio-comment@lists.oasis-open.org>,
"Viresh Kumar" <viresh.kumar@linaro.org>,
"Mathieu Poirier" <mathieu.poirier@linaro.org>,
"Mike Holmes" <mike.holmes@linaro.org>,
"Matt Spencer" <Matt.Spencer@arm.com>,
"Peter Griffin" <peter.griffin@linaro.org>,
"Dan Milea" <dan.milea@windriver.com>,
"Bill Mills" <bill.mills@linaro.org>,
"Francois Ozog" <francois.ozog@linaro.org>,
"Johannes Berg" <johannes@sipsolutions.net>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Arnd Bergmann" <arnd.bergmann@linaro.org>,
"Christian Pinto" <c.pinto@virtualopensystems.com>,
"Namhyung Kim" <namhyung@kernel.org>,
"Petre Eftime" <epetre@amazon.com>,
"Peter Hilber" <peter.hilber@opensynergy.com>,
"Marcel Holtmann" <marcel@holtmann.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Puck Meerburg" <puck@puckipedia.com>,
"Gurchetan Singh" <gurchetansingh@chromium.org>
Subject: Re: [virtio-dev] Next VirtIO device for Project Stratos?
Date: Wed, 7 Sep 2022 13:15:41 -0400 [thread overview]
Message-ID: <YxjRvZr6alY6OkPb@fedora> (raw)
In-Reply-To: <YximF3/B3cgiQzYx@work-vm>
[-- Attachment #1: Type: text/plain, Size: 6482 bytes --]
On Wed, Sep 07, 2022 at 03:09:27PM +0100, Dr. David Alan Gilbert wrote:
> * Stefan Hajnoczi (stefanha@redhat.com) wrote:
> > On Tue, Sep 06, 2022 at 06:33:36PM +0100, Dr. David Alan Gilbert wrote:
> > > * Stefan Hajnoczi (stefanha@redhat.com) wrote:
> > > > On Sat, Sep 03, 2022 at 07:43:08AM +0000, Alyssa Ross wrote:
> > > > > Hi Alex and everyone else, just catching up on some mail and wanted to
> > > > > clarify some things:
> > > > >
> > > > > Alex Bennée <alex.bennee@linaro.org> writes:
> > > > >
> > > > > > This email is driven by a brain storming session at a recent sprint
> > > > > > where we considered what VirtIO devices we should look at implementing
> > > > > > next. I ended up going through all the assigned device IDs hunting for
> > > > > > missing spec discussion and existing drivers so I'd welcome feedback
> > > > > > from anybody actively using them - especially as my suppositions about
> > > > > > device types I'm not familiar with may be way off!
> > > > > >
> > > > > > [...snip...]
> > > > > >
> > > > > > GPU device / 16
> > > > > > ---------------
> > > > > >
> > > > > > This is now a fairly mature part of the spec and has implementations is
> > > > > > the kernel, QEMU and a vhost-user backend. However as is commensurate
> > > > > > with the complexity of GPUs there is ongoing development moving from the
> > > > > > VirGL OpenGL encapsulation to a thing called GFXSTREAM which is meant to
> > > > > > make some things easier.
> > > > > >
> > > > > > A potential area of interest here is working out what the differences
> > > > > > are in use cases between virtio-gpu and virtio-wayland. virtio-wayland
> > > > > > is currently a ChromeOS only invention so hasn't seen any upstreaming or
> > > > > > specification work but may make more sense where multiple VMs are
> > > > > > drawing only elements of a final display which is composited by a master
> > > > > > program. For further reading see Alyssa's write-up:
> > > > > >
> > > > > > https://alyssa.is/using-virtio-wl/
> > > > > >
> > > > > > I'm not sure how widely used the existing vhost-user backend is for
> > > > > > virtio-gpu but it could present an opportunity for a more beefy rust-vmm
> > > > > > backend implementation?
> > > > >
> > > > > As I understand it, virtio-wayland is effectively deprecated in favour
> > > > > of sending Wayland messages over cross-domain virtio-gpu contexts. It's
> > > > > possible to do this now with an upstream kernel, whereas virtio-wayland
> > > > > always required a custom driver in the Chromium kernel.
> > > > >
> > > > > But crosvm is still the only implementation of a virtio-gpu device that
> > > > > supports Wayland over cross-domain contexts, so it would be great to see
> > > > > a more generic implementation. Especially because, while crosvm can
> > > > > share its virtio-gpu device over vhost-user, it does so in a way that's
> > > > > incompatible with the standardised vhost-user-gpu as implemented by
> > > > > QEMU. When I asked the crosvm developers in their Matrix channel what
> > > > > it would take to use the standard vhost-user-gpu variant, they said that
> > > > > the standard variant was lacking functionality they needed, like mapping
> > > > > and unmapping GPU buffers into the guest.
> > > >
> > > > That sounds somewhat similar to virtiofs and its DAX Window, which needs
> > > > vhost-user protocol extensions because of how memory is handled. David
> > > > Gilbert wrote the QEMU virtiofs DAX patches, which are under
> > > > development.
> > > >
> > > > I took a quick look at the virtio-gpu specs. If the crosvm behavior you
> > > > mentioned is covered in the VIRTIO spec then I guess it's the "host
> > > > visible memory region"?
> > > >
> > > > (If it's not in the VIRTIO spec then a spec change needs to be proposed
> > > > first and a vhost-user protocol spec change can then support that new
> > > > virtio-gpu feature.)
> > > >
> > > > The VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB command maps the device's resource
> > > > into the host visible memory region so that the driver can see it.
> > > >
> > > > The virtiofs DAX window uses vhost-user slave channel messages to
> > > > provide file descriptors and offsets for QEMU to mmap. QEMU mmaps the
> > > > file pages into the shared memory region seen by the guest driver.
> > > >
> > > > Maybe an equivalent mechanism is needed for virtio-gpu so a device
> > > > resource file descriptor can be passed to QEMU and then mmapped so the
> > > > guest driver can see the pages?
> > > >
> > > > I think it's possible to unify the virtiofs and virtio-gpu extensions to
> > > > the vhost-user protocol. Two new slave channel messages are needed: "map
> > > > <fd, offset, len> to shared memory resource <n>" and "unmap <offset,
> > > > len> from shared memory resource <n>". Both devices could use these
> > > > messages to implement their respective DAX Window and Blob Resource
> > > > functionality.
> > >
> > > It might be possible; but there's a bunch of lifetime/alignment/etc
> > > questions to be answered.
> > >
> > > For virtiofs DAX we carve out a chunk of a BAR as a 'cache' (unfortunate
> > > name) that we can then do mappings into.
> > >
> > > The VHOST_USER_SLAVE_FS_MAP/UNMAP commands can do the mapping:
> > > https://gitlab.com/virtio-fs/qemu/-/commit/7c29854da484afd7ca95acbd2e4acfc2c75ef491
> > > https://gitlab.com/virtio-fs/qemu/-/commit/f32bc2524035931856aa218ce18efa029b9eed02
> > >
> > > those might do what you want if you can figure out a way to generalise
> > > the bar to map them into.
> > >
> > > There are some problems; KVM gets really really upset if you try and
> > > access an area that doesn't have a mapping or is mapped to a truncated
> > > file; do you want the guest to be able to crash like that?
> >
> > I think you are pointing out the existing problems with virtiofs
> > map/unmap and not new issues related to virtio-gpu or generalizing the
> > vhost-user messages?
> >
>
> Right, although what I don't have a feel of here is the semantics of the
> things that are being mapped in the GPU case, and what possibility that
> the driver mapping them has to pick some bad offset.
I don't know either. I hope Gurchetan or Gerd can explain how the
virtio-gpu Shared Memory Region is used and whether accesses to unmapped
portions of the region are expected.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 484 bytes --]
prev parent reply other threads:[~2022-09-07 17:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-31 8:07 [virtio-comment] Next VirtIO device for Project Stratos? Alex Bennée
[not found] ` <80aace95-6c39-c7b9-61ba-70d60bcd08b2@quicinc.com>
[not found] ` <c642058f36321cb7dfdfaa4664f5323841b65450.camel@sipsolutions.net>
[not found] ` <a3856ec8-90d6-df19-2b5f-bc42700b09db@quicinc.com>
2022-06-08 12:28 ` [virtio-comment] Re: [Stratos-dev] " Alex Bennée
2022-09-03 7:43 ` [virtio-dev] " Alyssa Ross
2022-09-05 15:22 ` [virtio-comment] " Alex Bennée
2022-09-06 7:47 ` [virtio-dev] Re: [Stratos-dev] " Alyssa Ross
2022-09-05 20:27 ` [virtio-comment] " Stefan Hajnoczi
2022-09-06 17:33 ` Dr. David Alan Gilbert
2022-09-06 18:12 ` Stefan Hajnoczi
2022-09-07 14:09 ` Dr. David Alan Gilbert
2022-09-07 17:15 ` Stefan Hajnoczi [this message]
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=YxjRvZr6alY6OkPb@fedora \
--to=stefanha@redhat.com \
--cc=Matt.Spencer@arm.com \
--cc=alex.bennee@linaro.org \
--cc=arnd.bergmann@linaro.org \
--cc=bill.mills@linaro.org \
--cc=c.pinto@virtualopensystems.com \
--cc=dan.milea@windriver.com \
--cc=dgilbert@redhat.com \
--cc=epetre@amazon.com \
--cc=francois.ozog@linaro.org \
--cc=gurchetansingh@chromium.org \
--cc=hi@alyssa.is \
--cc=johannes@sipsolutions.net \
--cc=kraxel@redhat.com \
--cc=marcel@holtmann.org \
--cc=mathieu.poirier@linaro.org \
--cc=mike.holmes@linaro.org \
--cc=mst@redhat.com \
--cc=namhyung@kernel.org \
--cc=peter.griffin@linaro.org \
--cc=peter.hilber@opensynergy.com \
--cc=puck@puckipedia.com \
--cc=stratos-dev@op-lists.linaro.org \
--cc=viresh.kumar@linaro.org \
--cc=virtio-comment@lists.oasis-open.org \
--cc=virtio-dev@lists.oasis-open.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox