All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Matias Ezequiel Vara Larsen <matiasevara@gmail.com>
Cc: Stratos Mailing List <stratos-dev@op-lists.linaro.org>,
	virtio-dev@lists.oasis-open.org,
	Arnd Bergmann <arnd.bergmann@linaro.org>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	AKASHI Takahiro <takahiro.akashi@linaro.org>,
	Stefano Stabellini <stefano.stabellini@xilinx.com>,
	stefanha@redhat.com, Jan Kiszka <jan.kiszka@siemens.com>,
	Carl van Schaik <cvanscha@qti.qualcomm.com>,
	pratikp@quicinc.com, Srivatsa Vaddagiri <vatsa@codeaurora.org>,
	Jean-Philippe Brucker <jean-philippe@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>
Subject: Re: [virtio-dev] Enabling hypervisor agnosticism for VirtIO backends
Date: Wed, 01 Sep 2021 09:43:19 +0100	[thread overview]
Message-ID: <87ilzkhdx3.fsf@linaro.org> (raw)
In-Reply-To: <20210819091154.GA20@matiasv.localdomain>


Matias Ezequiel Vara Larsen <matiasevara@gmail.com> writes:

> Hello Alex,
>
> I can tell you my experience from working on a PoC (library) 
> to allow the implementation of virtio-devices that are hypervisor/OS agnostic. 
> I focused on two use cases:
> 1. type-I hypervisor in which the backend is running as a VM. This
> is an in-house hypervisor that does not support VMExits.
> 2. Linux user-space. In this case, the library is just used to
> communicate threads. The goal of this use case is merely testing.
>
> I have chosen virtio-mmio as the way to exchange information
> between the frontend and backend. I found it hard to synchronize the
> access to the virtio-mmio layout without VMExits. I had to add some extra bits to allow 
> the front-end and back-end to synchronize, which is required
> during the device-status initialization. These extra bits would not be 
> needed in case the hypervisor supports VMExits, e.g., KVM.

The support for a vmexit seems rather fundamental to type-2 hypervisors
(like KVM) as the VMM is intrinsically linked to a vCPUs run loop. This
makes handling a condition like a bit of MMIO fairly natural to
implement. For type-1 cases the line of execution between "guest
accesses MMIO" and "something services that request" is a little
trickier to pin down. Ultimately at that point you are relying on the
hypervisor itself to make the scheduling decision to stop executing the
guest and allow the backend to do it's thing. We don't really want to
expose the exact details about that as it probably varies a lot between
hypervisors. However would a backend API semantic that expresses:

  - guest has done some MMIO
  - hypervisor has stopped execution of guest
  - guest will be restarted when response conditions are set by backend

cover the needs of a virtio backend and could the userspace facing
portion of that be agnostic?

>
> Each guest has a memory region that is shared with the backend. 
> This memory region is used by the frontend to allocate the io-buffers. This region also 
> maps the virtio-mmio layout that is initialized by the backend. For the moment, this region 
> is defined when the guest is created. One limitation is that the memory for io-buffers is fixed. 
> At some point, the guest shall be able to balloon this region. Notifications between 
> the frontend and the backend are implemented by using an hypercall. The hypercall 
> mechanism and the memory allocation are abstracted away by a platform layer that 
> exposes an interface that is hypervisor/os agnostic.
>
> I split the backend into a virtio-device driver and a
> backend driver. The virtio-device driver is the virtqueues and the
> backend driver gets packets from the virtqueue for
> post-processing. For example, in the case of virtio-net, the backend
> driver would decide if the packet goes to the hardware or to another
> virtio-net device. The virtio-device drivers may be
> implemented in different ways like by using a single thread, multiple threads, 
> or one thread for all the virtio-devices.
>
> In this PoC, I just tackled two very simple use-cases. These
> use-cases allowed me to extract some requirements for an hypervisor to
> support virtio.
>
> Matias
<snip>

-- 
Alex Bennée

---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org


      parent reply	other threads:[~2021-09-01  8:56 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-04  9:04 [virtio-dev] Enabling hypervisor agnosticism for VirtIO backends Alex Bennée
2021-08-04 19:20 ` Stefano Stabellini
2021-08-11  6:27   ` AKASHI Takahiro
2021-08-14 15:37     ` Oleksandr Tyshchenko
2021-08-16 10:04       ` Wei Chen
2021-08-17  8:07         ` AKASHI Takahiro
2021-08-17  8:39           ` Wei Chen
2021-08-18  5:38             ` AKASHI Takahiro
2021-08-18  8:35               ` Wei Chen
2021-08-20  6:41                 ` AKASHI Takahiro
2021-08-26  9:40                   ` AKASHI Takahiro
2021-08-26 12:10                     ` Wei Chen
2021-08-30 19:36                       ` Christopher Clark
2021-08-30 19:53                         ` [virtio-dev] " Christopher Clark
2021-08-30 19:53                           ` Christopher Clark
2021-09-02  7:19                           ` AKASHI Takahiro
2021-09-07  0:57                             ` [virtio-dev] " Christopher Clark
2021-09-07  0:57                               ` Christopher Clark
2021-09-07 11:55                               ` AKASHI Takahiro
2021-09-07 18:09                                 ` [virtio-dev] " Christopher Clark
2021-09-07 18:09                                   ` Christopher Clark
2021-09-10  3:12                                   ` AKASHI Takahiro
2021-08-31  6:18                       ` AKASHI Takahiro
2021-09-01 11:12                         ` Wei Chen
2021-09-01 12:29                           ` AKASHI Takahiro
2021-09-01 16:26                             ` Oleksandr Tyshchenko
2021-09-02  1:30                             ` Wei Chen
2021-09-02  1:50                               ` Wei Chen
     [not found]   ` <0100017b33e585a5-06d4248e-b1a7-485e-800c-7ead89e5f916-000000@email.amazonses.com>
2021-08-12  7:55     ` [Stratos-dev] " François Ozog
2021-08-13  5:10       ` AKASHI Takahiro
2021-09-01  8:57         ` [virtio-dev] " Alex Bennée
2021-09-01  8:57           ` Alex Bennée
2021-08-17 10:41   ` [virtio-dev] " Stefan Hajnoczi
2021-08-17 10:41     ` Stefan Hajnoczi
2021-08-23  6:25     ` AKASHI Takahiro
2021-08-23  9:58       ` [virtio-dev] " Stefan Hajnoczi
2021-08-23  9:58         ` Stefan Hajnoczi
2021-08-25 10:29         ` AKASHI Takahiro
2021-08-25 15:02           ` [virtio-dev] " Stefan Hajnoczi
2021-08-25 15:02             ` Stefan Hajnoczi
2021-09-01 12:53     ` [virtio-dev] " Alex Bennée
2021-09-01 12:53       ` Alex Bennée
2021-09-02  9:12       ` [virtio-dev] " Stefan Hajnoczi
2021-09-02  9:12         ` Stefan Hajnoczi
2021-09-03  8:06       ` AKASHI Takahiro
2021-09-03  9:28         ` [virtio-dev] " Alex Bennée
2021-09-03  9:28           ` Alex Bennée
2021-09-06  2:23           ` AKASHI Takahiro
2021-09-07  2:41             ` [virtio-dev] Re: [Stratos-dev] " Christopher Clark
2021-09-07  2:41               ` Christopher Clark
2021-09-10  2:50               ` AKASHI Takahiro
2021-09-10  9:35               ` [virtio-dev] " Alex Bennée
2021-09-10  9:35                 ` Alex Bennée
2021-09-13 23:51             ` Stefano Stabellini
2021-09-14  6:08               ` [Stratos-dev] " François Ozog
2021-09-14 14:25               ` [virtio-dev] " Alex Bennée
2021-09-14 14:25                 ` Alex Bennée
2021-09-14 17:38               ` [Stratos-dev] " Trilok Soni
2021-09-15  3:29                 ` Stefano Stabellini
2021-09-15 23:50                   ` Trilok Soni
2021-09-16  2:11                     ` Stefano Stabellini
2021-08-05 15:48 ` [virtio-dev] " Stefan Hajnoczi
2021-08-19  9:11 ` [virtio-dev] " Matias Ezequiel Vara Larsen
     [not found]   ` <20210820060558.GB13452@laputa>
2021-08-21 14:08     ` Matias Ezequiel Vara Larsen
     [not found]       ` <20210823012029.GB40863@laputa>
2021-10-04 11:33         ` Matias Ezequiel Vara Larsen
2021-09-01  8:43   ` Alex Bennée [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=87ilzkhdx3.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=arnd.bergmann@linaro.org \
    --cc=cvanscha@qti.qualcomm.com \
    --cc=jan.kiszka@siemens.com \
    --cc=jean-philippe@linaro.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=matiasevara@gmail.com \
    --cc=pratikp@quicinc.com \
    --cc=stefanha@redhat.com \
    --cc=stefano.stabellini@xilinx.com \
    --cc=stratos-dev@op-lists.linaro.org \
    --cc=takahiro.akashi@linaro.org \
    --cc=vatsa@codeaurora.org \
    --cc=viresh.kumar@linaro.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 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.