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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox