All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: Parav Pandit <parav@nvidia.com>
Cc: virtio-comment@lists.oasis-open.org, hengqi@linux.alibaba.com,
	david.edmondson@oracle.com, xuanzhuo@linux.alibaba.com,
	sburla@marvell.com, shahafs@nvidia.com,
	virtio@lists.oasis-open.org
Subject: [virtio-comment] Re: [virtio] [PATCH requirements v5 3/7] net-features: Add low latency receive queue requirements
Date: Mon, 11 Sep 2023 09:47:15 -0400	[thread overview]
Message-ID: <20230911134715.GC3803963@fedora> (raw)
In-Reply-To: <20230818043557.496964-4-parav@nvidia.com>

[-- Attachment #1: Type: text/plain, Size: 3117 bytes --]

On Fri, Aug 18, 2023 at 07:35:53AM +0300, Parav Pandit wrote:
> +### 3.2.2 Low latency rx virtqueue
> +0. Design goal:
> +   a. Keep packet metadata and buffer data together which is consumed by driver
> +      layer and make it available in a single cache line of cpu
> +   b. Instead of having per packet descriptors which is complex to scale for
> +      the device, supply the page directly to the device to consume it based
> +      on packet size
> +1. The device should be able to write a packet receive completion that consists
> +   of struct virtio_net_hdr (or similar) and a buffer id using a single DMA write
> +   PCIe TLP.
> +2. The device should be able to perform DMA writes of multiple packets
> +   completions in a single DMA transaction up to the PCIe maximum write limit
> +   in a transaction.
> +3. The device should be able to zero pad packet write completion to align it to
> +   64B or CPU cache line size whenever possible.
> +4. An example of the above DMA completion structure:
> +
> +```
> +/* Constant size receive packet completion */
> +struct vnet_rx_completion {
> +   u16 flags;
> +   u16 id; /* buffer id */
> +   u8 gso_type;
> +   u8 reserved[3];
> +   le16 gso_hdr_len;
> +   le16 gso_size;
> +   le16 csum_start;
> +   le16 csum_offset;
> +   u16 reserved2;
> +   u64 timestamp; /* explained later */
> +   u8 padding[];
> +};
> +```
> +5. The driver should be able to post constant-size buffer pages on a receive
> +   queue which can be consumed by the device for an incoming packet of any size
> +   from 64B to 9K bytes.
> +6. The device should be able to know the constant buffer size at receive
> +   virtqueue level instead of per buffer level.
> +7. The device should be able to indicate when a full page buffer is consumed,
> +   which can be recycled by the driver when the packets from the completed
> +   page is fully consumed.
> +8. The device should be able to consume multiple pages for a receive GSO stream.

If I understand correctly there is no longer a 1:1 correspondence
between driver-supplied rx pages (available buffers) and received
packets (used buffers). Instead, the device consumes portions of
driver-supplied rx pages as needed and notifies the driver, and the
entire rx page is marked used later when it has been fully consumed.

The virtqueue model is based on submitting available buffers and
completing used buffers, not individual DMA transfers. It's not possible
to do DMA piecewise in this model. If you think about a VIRTIO over TCP
transport that uses message-passing for available and used buffers, then
it's clear the rx page approach breaks the model because only entire
virtqueues buffers can be marked used (there is a 1:1 correspondence
between available buffers and used buffers).

Two options:
1. Extend the virtqueue model to support this.
2. Document this violation of the virtqueue model clearly but treat it
   as an exception that may lead to complications in the future (e.g.
   incompatibility with VIRTIO over TCP).

I think it's worth investigating #1 to see whether the virtqueue model
can be extended cleanly.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  parent reply	other threads:[~2023-09-11 13:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-18  4:35 [virtio-comment] [PATCH requirements v5 0/7] virtio net requirements for 1.4 Parav Pandit
2023-08-18  4:35 ` [virtio-comment] [PATCH requirements v5 1/7] net-features: Add requirements document for release 1.4 Parav Pandit
2023-08-21 10:44   ` David Edmondson
2023-08-18  4:35 ` [virtio-comment] [PATCH requirements v5 2/7] net-features: Add low latency transmit queue requirements Parav Pandit
2023-08-18  4:35 ` [virtio-comment] [PATCH requirements v5 3/7] net-features: Add low latency receive " Parav Pandit
2023-08-21 10:47   ` [virtio-comment] " David Edmondson
2023-08-22  6:12     ` [virtio-comment] " Parav Pandit
2023-09-11 13:47   ` Stefan Hajnoczi [this message]
2023-09-11 16:03     ` [virtio-comment] RE: [virtio] " Parav Pandit
2023-08-18  4:35 ` [virtio-comment] [PATCH requirements v5 4/7] net-features: Add notification coalescing requirements Parav Pandit
2023-08-18  4:35 ` [virtio-comment] [PATCH requirements v5 5/7] net-features: Add n-tuple receive flow filters requirements Parav Pandit
2023-08-21  5:06   ` [virtio-comment] " Heng Qi
2023-08-21  5:14     ` [virtio-comment] " Parav Pandit
2023-08-22  7:41   ` Parav Pandit
2023-08-18  4:35 ` [virtio-comment] [PATCH requirements v5 6/7] net-features: Add packet timestamp requirements Parav Pandit
2023-08-18  4:35 ` [virtio-comment] [PATCH requirements v5 7/7] net-features: Add header data split requirements Parav Pandit
2023-08-21 10:45   ` [virtio-comment] " David Edmondson

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=20230911134715.GC3803963@fedora \
    --to=stefanha@redhat.com \
    --cc=david.edmondson@oracle.com \
    --cc=hengqi@linux.alibaba.com \
    --cc=parav@nvidia.com \
    --cc=sburla@marvell.com \
    --cc=shahafs@nvidia.com \
    --cc=virtio-comment@lists.oasis-open.org \
    --cc=virtio@lists.oasis-open.org \
    --cc=xuanzhuo@linux.alibaba.com \
    /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.