From: Cornelia Huck <cohuck@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>,
Christian Schoenebeck <qemu_oss@crudebyte.com>
Cc: virtio-comment@lists.oasis-open.org, Greg Kurz <groug@kaod.org>
Subject: Re: [virtio-comment] Re: [PATCH v2 0/2] Add VIRTIO_RING_F_LARGE_INDIRECT_DESC
Date: Tue, 07 Dec 2021 19:00:27 +0100 [thread overview]
Message-ID: <87fsr4thvo.fsf@redhat.com> (raw)
In-Reply-To: <Ya8udCHO9bXiWd4P@stefanha-x1.localdomain>
On Tue, Dec 07 2021, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> On Mon, Dec 06, 2021 at 08:12:14PM +0100, Christian Schoenebeck wrote:
>> On Montag, 6. Dezember 2021 12:52:07 CET Cornelia Huck wrote:
>> > On Fri, Dec 03 2021, Christian Schoenebeck <qemu_oss@crudebyte.com> wrote:
>> > > On Donnerstag, 2. Dezember 2021 11:27:17 CET Cornelia Huck wrote:
>> > >> On Tue, Nov 30 2021, Christian Schoenebeck <qemu_oss@crudebyte.com> wrote:
>> > >> > On Dienstag, 30. November 2021 14:48:50 CET Cornelia Huck wrote:
>> > >> >> On Tue, Nov 30 2021, Christian Schoenebeck <qemu_oss@crudebyte.com>
>> > >> > Another issue I just realized: there is also an ambiguity in this v2
>> > >> > what
>> > >> > the maximum descriptor count actually relates to. Should it be
>> > >> >
>> > >> > 1. max. indirect descriptor count per indirect descriptor table
>> > >> >
>> > >> > or
>> > >> >
>> > >> > 2. max. indirect descriptor count per vring slot (i.e. the sum from
>> > >> > multiple indirect descriptor tables within the same message)
>> > >> >
>> > >> > Case 2 applies to QEMU's implementation right now AFAICS. The max.
>> > >> > possible
>> > >> > bulk transfer size is lower in case 2 accordingly.
>> > >
>> > > After reviewing virtio code on QEMU side again, I suggest to go for (2.).
>> > > Otherwise a large portion of QEMU's virtio code would need quite a bunch
>> > > of
>> > > changes to support (1.). I assume that resistence for such changes in QEMU
>> > > would be high, and I currently don't care enough to work on and defend
>> > > those changes that (1.) would need.
>> > >
>> > > In practice that would mean for many devices: the theoretical absolute
>> > > max.
>> > > virtio transfer size might be cut into half with (2.) in comparison to
>> > > (1.), which is (2^16 * PAGE_SIZE) / 2 = 128 MB with a typical page size
>> > > of 4k, because one indirect descriptor table is usually used for sending
>> > > to device and another table for receiving from device. But that's use
>> > > case dependent and (1.) is still a huge step forward IMO.
>> >
>> > If the variant that is easier for QEMU to implement still gives you
>> > enough of what you need, I'm fine with going with that. (Is it
>> > future-proof enough?)
>>
>> No crystal ball here, sorry. :)
:)
>>
>> Just to give you a feeling what I am talking about here for QEMU, you might
>> have a quick glimpse on the hw/virtio/virtio.c changes of following patch. It
>> is not exactly how the final changes would look like, but it should give a
>> rough idea of what is involved:
>> https://lore.kernel.org/all/c9dea2e27ae19b2b9a51e8f08687067bf3e47bd5.1633376313.git.qemu_oss@crudebyte.com/
>>
>> As you can see, QEMU first reserves the max. expected descriptor count as
>> array memory on stack, then it gathers *all* descriptors from all indirect
>> descriptor tables of a vring slot all together into that array and finally
>> the vring slot's message is processed on device level:
>> https://github.com/qemu/qemu/blob/99fc08366b06282614daeda989d2fde6ab8a707f/hw/virtio/virtio.c#L1475
>>
>> So a limit per vring slot would be much easier to implement in QEMU, as it is
>> more or less just refactoring of QEMU's current compile-time constant
>> VIRTQUEUE_MAX_SIZE into a runtime variable.
>> Implementing a limit per table instead would require substantial changes to
>> its current program flow.
>>
>> Back to your question ...
>>
>> Assuming that most devices have one or two tables per vring slot, and
>> considering that almost nobody cared for virtio's current descriptor count
>> limit so far, I would not expect that the new, much higher limit to be
>> questioned in the next few years or so. And if it was, you would probably also
>> start to question all those 16-bit fields in virtio as well and then this
>> specific aspect here would probably be the smallest issue to worry about.
>>
>> OTOH if there are devices with like 10 descriptor tables or more per vring
>> slot, then they obviously would hit this limit much sooner. No idea if there
>> is any such device though.
>
> Other device implementations probably also care about the total number
> of descriptors per vring slot instead of the number of descriptors per
> indirect table. The limitation on the device side is the resource
> requirement and/or maximum supported by the underlying I/O mechanism, so
> the total number of descriptors is likely to matter.
Thanks to you both; going with the total number seems to be best.
This publicly archived list offers a means to provide input to the
OASIS Virtual I/O Device (VIRTIO) TC.
In order to verify user consent to the Feedback License terms and
to minimize spam in the list archive, subscription is required
before posting.
Subscribe: virtio-comment-subscribe@lists.oasis-open.org
Unsubscribe: virtio-comment-unsubscribe@lists.oasis-open.org
List help: virtio-comment-help@lists.oasis-open.org
List archive: https://lists.oasis-open.org/archives/virtio-comment/
Feedback License: https://www.oasis-open.org/who/ipr/feedback_license.pdf
List Guidelines: https://www.oasis-open.org/policies-guidelines/mailing-lists
Committee: https://www.oasis-open.org/committees/virtio/
Join OASIS: https://www.oasis-open.org/join/
next prev parent reply other threads:[~2021-12-07 18:00 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-29 13:24 [PATCH v2 0/2] Add VIRTIO_RING_F_LARGE_INDIRECT_DESC Christian Schoenebeck
2021-11-29 13:22 ` [PATCH v2 1/2] " Christian Schoenebeck
2021-12-02 16:04 ` Stefan Hajnoczi
2021-11-29 13:23 ` [PATCH v2 2/2] Add common configuration field "queue_indirect_size" Christian Schoenebeck
2021-12-02 16:21 ` Stefan Hajnoczi
2021-12-03 15:03 ` Christian Schoenebeck
2021-12-06 13:54 ` Stefan Hajnoczi
2021-11-30 12:06 ` [virtio-comment] Re: [PATCH v2 0/2] Add VIRTIO_RING_F_LARGE_INDIRECT_DESC Cornelia Huck
2021-11-30 13:33 ` Christian Schoenebeck
2021-11-30 13:48 ` Cornelia Huck
2021-11-30 18:47 ` Christian Schoenebeck
2021-12-02 10:27 ` Cornelia Huck
2021-12-03 14:47 ` Christian Schoenebeck
2021-12-06 11:52 ` Cornelia Huck
2021-12-06 19:12 ` Christian Schoenebeck
2021-12-07 9:50 ` Stefan Hajnoczi
2021-12-07 18:00 ` Cornelia Huck [this message]
2021-12-08 12:26 ` Christian Schoenebeck
2021-12-08 15:11 ` Stefan Hajnoczi
2021-12-08 15:28 ` Cornelia Huck
2021-12-09 12:33 ` Christian Schoenebeck
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=87fsr4thvo.fsf@redhat.com \
--to=cohuck@redhat.com \
--cc=groug@kaod.org \
--cc=qemu_oss@crudebyte.com \
--cc=stefanha@redhat.com \
--cc=virtio-comment@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