From: Stefan Hajnoczi <stefanha@redhat.com>
To: zhenwei pi <pizhenwei@bytedance.com>
Cc: parav@nvidia.com, mst@redhat.com, jasowang@redhat.com,
virtio-comment@lists.oasis-open.org, houp@yusur.tech,
helei.sig11@bytedance.com, xinhao.kong@duke.edu
Subject: Re: [virtio-comment] [PATCH v2 04/11] transport-fabrics: introduce Stream Transmission
Date: Wed, 31 May 2023 11:20:59 -0400 [thread overview]
Message-ID: <20230531152059.GF1248296@fedora> (raw)
In-Reply-To: <20230504081910.238585-5-pizhenwei@bytedance.com>
[-- Attachment #1: Type: text/plain, Size: 6590 bytes --]
On Thu, May 04, 2023 at 04:19:03PM +0800, zhenwei pi wrote:
> Stream transmission is used for stream oriented communication(Ex TCP),
> also add virtio-blk read/write 8K example.
>
> Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
> ---
> transport-fabrics.tex | 229 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 229 insertions(+)
>
> diff --git a/transport-fabrics.tex b/transport-fabrics.tex
> index b88acfd..c02cf26 100644
> --- a/transport-fabrics.tex
> +++ b/transport-fabrics.tex
> @@ -88,3 +88,232 @@ \subsubsection{Segment Descriptor Definition}\label{sec:Virtio Transport Options
> \end{tabular}
>
> Depending on the opcode, a Command contains zero or more structure virtio_of_vring_desc.
> +
> +\subsubsection{Buffer Mapping Definition}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Transmission Protocol / Buffer Mapping Definition}
> +Virtio Over Fabrics defines two types of buffer mapping rules.
What is a buffer? Is it a virtqueue buffer (consisting of one or more
descriptors/elements) or are you using the term for a different concept?
> +
> +\paragraph{Stream Transmission}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Transmission Protocol / Commands Definition / Stream Transmission}
> +Command, Segment Descriptors, and buffer are transmitted in a stream within a
Is a Segment Descriptor a virtio_of_vring_desc?
> +connection. The layout in stream:
> +
> +\begin{lstlisting}
> +CMDx contains 0 descriptor, CMDy contains (n - m + 1) descriptors and buffer:
"0 descriptors"
> +
> + +-----+ +-----++-----+ +-----++-----+
> + ... | CMDx| ... | CMDy||DESCm| ... |DESCn|| BUF | ...
> + +-----+ +-----++-----+ +-----++-----+
> +
> +COMPx contains 0 descriptor, COMPy contains (k - j + 1) descriptors and buffer:
I think this is the first time the concept of a completion (COMP) was
introduced. Please describe commands/completions before using them in
the text.
> +
> + +-----+ +-----++-----+ +-----++-----+
> + ... |COMPx| ... |COMPy||DESCj| ... |DESCk|| BUF | ...
> + +-----+ +-----++-----+ +-----++-----+
> +\end{lstlisting}
> +
> +An example of a virtio-blk write 8K request(total size: sizeof(Command) +
> +4 * sizeof(Descriptor) + 8208):
> +\begin{lstlisting}
> + COMMAND +------+
> + |opcode| -> virtio_of_op_vring
> + +------+
> + |cmd id| -> 10
> + +------+
> + |length| -> 8208
> + +------+
> + |ndesc | -> 4
> + +------+
> + |rsvd |
> + +------+
> +
> + DESC0 +------+
> + +-----|addr | -> 0
> + | +------+
> + | |length| -> 16 (virtio blk write command)
> + | +------+
> + | |id | -> 0
> + | +------+
> + | |flags | -> 0
> + | +------+
> + |
> + DESC1 | +------+
> + | +---|addr | -> 16
> + | | +------+
> + | | |length| -> 4096
> + | | +------+
> + | | |id | -> 1
> + | | +------+
> + | | |flags | -> 0
> + | | +------+
> + | |
> + DESC2 | | +------+
> + | | +-|addr | -> 4112
> + | | | +------+
> + | | | |length| -> 4096
> + | | | +------+
> + | | | |id | -> 2
> + | | | +------+
> + | | | |flags | -> 0
> + | | | +------+
> + | | |
> + DESC3 | | | +------+
> + | | | |addr | -> 0
Is this field 0 in all stream connection VIRTIO_OF_DESC_F_WRITE
descriptors?
> + | | | +------+
> + | | | |length| -> 1
> + | | | +------+
> + | | | |id | -> 3
> + | | | +------+
> + | | | |flags | -> VIRTIO_OF_DESC_F_WRITE
> + | | | +------+
> + | | |
> + DATA +-+-+>+------+ -> 0
> + | | |......|
> + +-+>+------+ -> 16
> + | |......|
> + +>+------+ -> 4112
> + |......|
> + +------+ -> 8208
> +\end{lstlisting}
> +
> +The Completion of this request(total size: sizeof(Completion) +
> +1 * sizeof(Descriptor) + 1):
> +\begin{lstlisting}
> + COMPLETION +------+
> + |status| -> VIRTIO_OF_SUCCESS
> + +------+
> + |cmd id| -> 10
> + +------+
> + |ndesc | -> 1
> + +------+
> + |rsvd |
> + +------+
> + |value | -> 1 (value.u32)
What is this field and what does u32 mean?
> + +------+
> +
> + DESC0 +------+
> + +-|addr | -> 0
> + | +------+
> + | |length| -> 1
> + | +------+
> + | |id | -> 3
This has to match with the original descriptor id sent with the Command?
> + | +------+
> + | |flags | -> VIRTIO_OF_DESC_F_WRITE
> + | +------+
> + |
> + DATA |>+------+ -> 0
> + |......|
> + +------+ -> 1
> +\end{lstlisting}
I think this is more flexible (and has more protocol overhead) than
necessary. When the device has used a virtqueue buffer, it indicates how
many bytes were used (this can be less than the totaly number of F_WRITE
bytes available). I don't think there is a need to communicate F_WRITE
descriptors, especially in the Completion. Just a Completion with a
'length' field instead of an 'ndesc' field followed by data is enough.
Since VIRTIO has flexible framing
(https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-390004),
there isn't really a need to communicate the F_WRITE descriptors at all,
just the maximum number of used bytes that the initiator expects.
Can you explain why you chose to transmit F_WRITE descriptors in both
the Command and the Completion? Maybe I missed a reason why it's
important.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2023-05-31 15:21 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-04 8:18 [virtio-comment] [PATCH v2 00/11] Introduce Virtio Over Fabrics zhenwei pi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 01/11] transport-fabrics: introduce Virtio Over Fabrics overview zhenwei pi
2023-05-04 8:57 ` David Hildenbrand
2023-05-04 9:46 ` zhenwei pi
2023-05-04 10:05 ` Michael S. Tsirkin
2023-05-04 10:12 ` David Hildenbrand
2023-05-04 10:50 ` Re: " zhenwei pi
2023-05-31 14:00 ` [virtio-comment] " Stefan Hajnoczi
2023-06-02 1:17 ` [virtio-comment] " zhenwei pi
2023-06-05 2:39 ` [virtio-comment] " Parav Pandit
2023-06-05 2:39 ` Parav Pandit
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 02/11] transport-fabrics: introduce Virtio Qualified Name zhenwei pi
2023-05-31 14:06 ` Stefan Hajnoczi
2023-06-02 1:50 ` zhenwei pi
2023-06-05 2:40 ` Parav Pandit
2023-06-05 7:57 ` zhenwei pi
2023-06-05 17:05 ` Stefan Hajnoczi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 03/11] transport-fabircs: introduce Segment Descriptor Definition zhenwei pi
2023-05-31 14:23 ` Stefan Hajnoczi
2023-06-02 3:08 ` zhenwei pi
2023-06-05 2:40 ` [virtio-comment] " Parav Pandit
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 04/11] transport-fabrics: introduce Stream Transmission zhenwei pi
2023-05-31 15:20 ` Stefan Hajnoczi [this message]
2023-06-02 2:26 ` zhenwei pi
2023-06-05 16:11 ` Stefan Hajnoczi
2023-06-06 3:13 ` zhenwei pi
2023-06-06 13:09 ` Stefan Hajnoczi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 05/11] transport-fabrics: introduce Keyed Transmission zhenwei pi
2023-05-31 16:20 ` [virtio-comment] " Stefan Hajnoczi
2023-06-01 9:02 ` zhenwei pi
2023-06-01 11:33 ` Stefan Hajnoczi
2023-06-01 13:09 ` zhenwei pi
2023-06-01 19:13 ` Stefan Hajnoczi
2023-06-01 21:23 ` Stefan Hajnoczi
2023-06-02 0:55 ` zhenwei pi
2023-06-05 17:21 ` Stefan Hajnoczi
2023-06-05 2:41 ` Parav Pandit
2023-06-05 8:41 ` zhenwei pi
2023-06-05 11:45 ` Parav Pandit
2023-06-05 12:50 ` zhenwei pi
2023-06-05 13:12 ` Parav Pandit
2023-06-06 7:13 ` zhenwei pi
2023-06-06 21:52 ` Parav Pandit
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 06/11] transport-fabrics: introduce command set zhenwei pi
2023-05-31 17:10 ` [virtio-comment] " Stefan Hajnoczi
2023-06-02 5:15 ` [virtio-comment] " zhenwei pi
2023-06-05 16:30 ` Stefan Hajnoczi
2023-06-06 1:31 ` [virtio-comment] " zhenwei pi
2023-06-06 13:34 ` Stefan Hajnoczi
2023-06-07 2:58 ` [virtio-comment] " zhenwei pi
2023-06-08 16:41 ` Stefan Hajnoczi
2023-06-08 17:01 ` [virtio-comment] " Parav Pandit
2023-06-09 1:39 ` [virtio-comment] " zhenwei pi
2023-06-09 2:06 ` [virtio-comment] " Parav Pandit
2023-06-09 3:55 ` zhenwei pi
2023-06-11 20:56 ` Parav Pandit
2023-06-06 2:02 ` [virtio-comment] " zhenwei pi
2023-06-06 13:44 ` Stefan Hajnoczi
2023-06-07 2:03 ` [virtio-comment] " zhenwei pi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 07/11] transport-fabrics: introduce opcodes zhenwei pi
2023-05-31 17:11 ` [virtio-comment] " Stefan Hajnoczi
[not found] ` <20230531205508.GA1509630@fedora>
2023-06-02 8:39 ` [virtio-comment] " zhenwei pi
2023-06-05 16:46 ` Stefan Hajnoczi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 08/11] transport-fabrics: introduce status of completion zhenwei pi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 09/11] transport-fabrics: add TCP&RDMA binding zhenwei pi
[not found] ` <20230531210255.GC1509630@fedora>
2023-06-02 9:07 ` [virtio-comment] Re: " zhenwei pi
2023-06-05 16:57 ` Stefan Hajnoczi
2023-06-06 1:41 ` [virtio-comment] " zhenwei pi
2023-06-06 13:51 ` Stefan Hajnoczi
2023-06-07 2:15 ` zhenwei pi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 10/11] transport-fabrics: add device initialization zhenwei pi
[not found] ` <20230531210925.GD1509630@fedora>
2023-06-02 9:11 ` zhenwei pi
2023-05-04 8:19 ` [virtio-comment] [PATCH v2 11/11] transport-fabrics: support inline data for keyed transmission zhenwei pi
2023-05-29 0:56 ` [virtio-comment] PING: [PATCH v2 00/11] Introduce Virtio Over Fabrics zhenwei pi
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=20230531152059.GF1248296@fedora \
--to=stefanha@redhat.com \
--cc=helei.sig11@bytedance.com \
--cc=houp@yusur.tech \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=parav@nvidia.com \
--cc=pizhenwei@bytedance.com \
--cc=virtio-comment@lists.oasis-open.org \
--cc=xinhao.kong@duke.edu \
/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.