From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: qemu-devel@nongnu.org, virtio-dev@lists.oasis-open.org,
slp@redhat.com, marcandre.lureau@redhat.com, stefanha@redhat.com,
viresh.kumar@linaro.org, sgarzare@redhat.com,
takahiro.akashi@linaro.org, erik.schilling@linaro.org,
manos.pitsidianakis@linaro.org, mathieu.poirier@linaro.org
Subject: [virtio-dev] Re: [RFC PATCH] docs/interop: define STANDALONE protocol feature for vhost-user
Date: Fri, 07 Jul 2023 14:12:28 +0100 [thread overview]
Message-ID: <87a5w7eu4y.fsf@linaro.org> (raw)
In-Reply-To: <20230707055141-mutt-send-email-mst@kernel.org>
"Michael S. Tsirkin" <mst@redhat.com> writes:
> On Fri, Jul 07, 2023 at 08:58:00AM +0100, Alex Bennée wrote:
>>
>> "Michael S. Tsirkin" <mst@redhat.com> writes:
>>
>> > On Tue, Jul 04, 2023 at 01:36:00PM +0100, Alex Bennée wrote:
>> >> Currently QEMU has to know some details about the back-end to be able
>> >> to setup the guest. While various parts of the setup can be delegated
>> >> to the backend (for example config handling) this is a very piecemeal
>> >> approach.
>> >
>> >> This patch suggests a new feature flag (VHOST_USER_PROTOCOL_F_STANDALONE)
>> >> which the back-end can advertise which allows a probe message to be
>> >> sent to get all the details QEMU needs to know in one message.
>> >
>> > The reason we do piecemeal is that these existing pieces can be reused
>> > as others evolve or fall by wayside.
>>
>> Sure I have no objection in principle but we then turn code like:
>>
>> if (dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_STANDALONE)) {
>> err = vhost_user_get_backend_specs(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_specs failed");
>> return -EPROTO;
>> }
>> }
>>
>> to
>>
>> if (dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_ID) &&
>> dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_CFGSZ) &&
>> dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_MINVQ) &&
>> dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_MAXVQ)
>> ) {
>> err = vhost_user_get_virtio_id(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_id failed");
>> return -EPROTO;
>> }
>> err = vhost_user_get_virtio_cfgsz(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_cfgsz failed");
>> return -EPROTO;
>> }
>> err = vhost_user_get_virtio_minvq(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_minvq failed");
>> return -EPROTO;
>> }
>> err = vhost_user_get_virtio_maxvq(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_maxvq failed");
>> return -EPROTO;
>> }
>> dev->specs.valid = true;
>> }
>>
>> for little gain IMHO.
>>
>> > For example, I can think of instances where you want to connect
>> > specifically to e.g. networking backend, and specify it
>> > on command line. Reasons could be many, e.g. for debugging,
>> > or to prevent connecting to wrong device on wrong channel
>> > (kind of like type safety).
>>
>> I don't quite follow what you are trying to say here.
>
> That some or all of these might be better on qemu command line
> not come from backend. Then we'll want to *send* it to backend.
> All this at our discretion without protocol changes.
That doesn't solve the standalone problem though (not all VMM's are QEMU
after all). I'm currently putting together a PoC with the
vhost-user-device and I was intending:
- no CLI args, probe and if nothing fail
- CLI args, probe with no response, continue with CLI args
- CLI args, probe with response, check args match (or in bounds for
vqs) and fail if not
Stefan wasn't super keen on the vhost-user-device in v2 being user
creatable because things could go weird quite quickly in hard to debug
ways:
Message-Id: <20230418162140.373219-1-alex.bennee@linaro.org>
Date: Tue, 18 Apr 2023 17:21:27 +0100
Subject: [PATCH v2 00/13] virtio: add vhost-user-generic and reduce copy and paste
From: =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
However it certainly is useful from a development point of view being
able to plug in new VirtIO backends without having to copy and paste
another slightly different stub into QEMU. I was pondering a middle
ground of maybe making the CLI options all x- variants to emphasise the
"here be dragons please know what you are doing" aspect of them.
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org
WARNING: multiple messages have this Message-ID (diff)
From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: qemu-devel@nongnu.org, virtio-dev@lists.oasis-open.org,
slp@redhat.com, marcandre.lureau@redhat.com, stefanha@redhat.com,
viresh.kumar@linaro.org, sgarzare@redhat.com,
takahiro.akashi@linaro.org, erik.schilling@linaro.org,
manos.pitsidianakis@linaro.org, mathieu.poirier@linaro.org
Subject: Re: [RFC PATCH] docs/interop: define STANDALONE protocol feature for vhost-user
Date: Fri, 07 Jul 2023 14:12:28 +0100 [thread overview]
Message-ID: <87a5w7eu4y.fsf@linaro.org> (raw)
In-Reply-To: <20230707055141-mutt-send-email-mst@kernel.org>
"Michael S. Tsirkin" <mst@redhat.com> writes:
> On Fri, Jul 07, 2023 at 08:58:00AM +0100, Alex Bennée wrote:
>>
>> "Michael S. Tsirkin" <mst@redhat.com> writes:
>>
>> > On Tue, Jul 04, 2023 at 01:36:00PM +0100, Alex Bennée wrote:
>> >> Currently QEMU has to know some details about the back-end to be able
>> >> to setup the guest. While various parts of the setup can be delegated
>> >> to the backend (for example config handling) this is a very piecemeal
>> >> approach.
>> >
>> >> This patch suggests a new feature flag (VHOST_USER_PROTOCOL_F_STANDALONE)
>> >> which the back-end can advertise which allows a probe message to be
>> >> sent to get all the details QEMU needs to know in one message.
>> >
>> > The reason we do piecemeal is that these existing pieces can be reused
>> > as others evolve or fall by wayside.
>>
>> Sure I have no objection in principle but we then turn code like:
>>
>> if (dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_STANDALONE)) {
>> err = vhost_user_get_backend_specs(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_specs failed");
>> return -EPROTO;
>> }
>> }
>>
>> to
>>
>> if (dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_ID) &&
>> dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_CFGSZ) &&
>> dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_MINVQ) &&
>> dev->protocol_features & (1ULL << VHOST_USER_PROTOCOL_F_MAXVQ)
>> ) {
>> err = vhost_user_get_virtio_id(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_id failed");
>> return -EPROTO;
>> }
>> err = vhost_user_get_virtio_cfgsz(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_cfgsz failed");
>> return -EPROTO;
>> }
>> err = vhost_user_get_virtio_minvq(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_minvq failed");
>> return -EPROTO;
>> }
>> err = vhost_user_get_virtio_maxvq(dev, errp);
>> if (err < 0) {
>> error_setg_errno(errp, EPROTO, "vhost_get_backend_maxvq failed");
>> return -EPROTO;
>> }
>> dev->specs.valid = true;
>> }
>>
>> for little gain IMHO.
>>
>> > For example, I can think of instances where you want to connect
>> > specifically to e.g. networking backend, and specify it
>> > on command line. Reasons could be many, e.g. for debugging,
>> > or to prevent connecting to wrong device on wrong channel
>> > (kind of like type safety).
>>
>> I don't quite follow what you are trying to say here.
>
> That some or all of these might be better on qemu command line
> not come from backend. Then we'll want to *send* it to backend.
> All this at our discretion without protocol changes.
That doesn't solve the standalone problem though (not all VMM's are QEMU
after all). I'm currently putting together a PoC with the
vhost-user-device and I was intending:
- no CLI args, probe and if nothing fail
- CLI args, probe with no response, continue with CLI args
- CLI args, probe with response, check args match (or in bounds for
vqs) and fail if not
Stefan wasn't super keen on the vhost-user-device in v2 being user
creatable because things could go weird quite quickly in hard to debug
ways:
Message-Id: <20230418162140.373219-1-alex.bennee@linaro.org>
Date: Tue, 18 Apr 2023 17:21:27 +0100
Subject: [PATCH v2 00/13] virtio: add vhost-user-generic and reduce copy and paste
From: =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
However it certainly is useful from a development point of view being
able to plug in new VirtIO backends without having to copy and paste
another slightly different stub into QEMU. I was pondering a middle
ground of maybe making the CLI options all x- variants to emphasise the
"here be dragons please know what you are doing" aspect of them.
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2023-07-07 13:20 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-04 12:36 [virtio-dev] [RFC PATCH] docs/interop: define STANDALONE protocol feature for vhost-user Alex Bennée
2023-07-04 12:36 ` Alex Bennée
2023-07-04 14:54 ` [virtio-dev] " Stefano Garzarella
2023-07-04 14:54 ` Stefano Garzarella
2023-07-04 15:02 ` Alex Bennée
2023-07-04 15:02 ` Alex Bennée
2023-07-07 10:27 ` Stefano Garzarella
2023-07-07 10:27 ` Stefano Garzarella
2023-07-20 19:36 ` Stefan Hajnoczi
2023-07-26 16:01 ` Michael S. Tsirkin
2023-07-26 16:01 ` Michael S. Tsirkin
2023-07-26 14:33 ` Erik Schilling
2023-07-26 15:51 ` Stefan Hajnoczi
2023-07-06 16:31 ` [virtio-dev] " Alex Bennée
2023-07-06 16:31 ` Alex Bennée
2023-07-07 10:35 ` [virtio-dev] " Stefano Garzarella
2023-07-07 10:35 ` Stefano Garzarella
2023-07-06 16:48 ` [virtio-dev] " Michael S. Tsirkin
2023-07-06 16:48 ` Michael S. Tsirkin
2023-07-07 7:58 ` [virtio-dev] " Alex Bennée
2023-07-07 7:58 ` Alex Bennée
2023-07-07 9:57 ` [virtio-dev] " Michael S. Tsirkin
2023-07-07 9:57 ` Michael S. Tsirkin
2023-07-07 13:12 ` Alex Bennée [this message]
2023-07-07 13:12 ` Alex Bennée
2023-07-20 19:58 ` [virtio-dev] " Stefan Hajnoczi
2023-07-20 19:58 ` Stefan Hajnoczi
2023-07-20 21:14 ` [virtio-dev] " Michael S. Tsirkin
2023-07-20 21:14 ` Michael S. Tsirkin
2023-07-20 21:31 ` Stefan Hajnoczi
2023-07-20 22:22 ` [virtio-dev] " Michael S. Tsirkin
2023-07-20 22:22 ` Michael S. Tsirkin
2023-07-24 18:08 ` [virtio-dev] " Stefan Hajnoczi
2023-07-24 18:08 ` Stefan Hajnoczi
2023-07-26 16:02 ` [virtio-dev] " Michael S. Tsirkin
2023-07-26 16:02 ` Michael S. Tsirkin
2023-07-26 17:37 ` [virtio-dev] " Stefan Hajnoczi
2023-07-26 17:37 ` Stefan Hajnoczi
2023-07-20 19:32 ` [virtio-dev] " Stefan Hajnoczi
2023-07-20 19:32 ` Stefan Hajnoczi
2023-07-20 19:34 ` [virtio-dev] " Stefan Hajnoczi
2023-07-20 19:34 ` Stefan Hajnoczi
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=87a5w7eu4y.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=erik.schilling@linaro.org \
--cc=manos.pitsidianakis@linaro.org \
--cc=marcandre.lureau@redhat.com \
--cc=mathieu.poirier@linaro.org \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=sgarzare@redhat.com \
--cc=slp@redhat.com \
--cc=stefanha@redhat.com \
--cc=takahiro.akashi@linaro.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.