virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: Stefano Garzarella <sgarzare@redhat.com>
To: "Jiang Wang ." <jiang.wang@bytedance.com>
Cc: cong.wang@bytedance.com,
	Xiongchun Duan <duanxiongchun@bytedance.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	cohuck@redhat.com, virtualization@lists.linux-foundation.org,
	xieyongji@bytedance.com, Stefan Hajnoczi <stefanha@redhat.com>,
	asias@redhat.com, Arseny Krasnov <arseny.krasnov@kaspersky.com>
Subject: Re: [RFC v2] virtio-vsock: add description for datagram type
Date: Tue, 13 Apr 2021 14:58:53 +0200	[thread overview]
Message-ID: <20210413125853.2dkldmp23vkkc74c@steredhat> (raw)
In-Reply-To: <CAP_N_Z9VPkBKX9QD+cuzSSAn6dL0cpQ=EZs5vk+ByjjDpGgdBA@mail.gmail.com>

On Mon, Apr 12, 2021 at 03:42:23PM -0700, Jiang Wang . wrote:
>On Mon, Apr 12, 2021 at 7:21 AM Stefano Garzarella <sgarzare@redhat.com> wrote:
>>
>> On Mon, Apr 12, 2021 at 02:50:17PM +0100, Stefan Hajnoczi wrote:
>> >On Thu, Apr 01, 2021 at 04:36:02AM +0000, jiang.wang wrote:
>> >> Add supports for datagram type for virtio-vsock. Datagram
>> >> sockets are connectionless and unreliable. To avoid contention
>> >> with stream and other sockets, add two more virtqueues and
>> >> a new feature bit to identify if those two new queues exist or not.
>> >>
>> >> Also add descriptions for resource management of datagram, which
>> >> does not use the existing credit update mechanism associated with
>> >> stream sockets.
>> >>
>> >> Signed-off-by: Jiang Wang <jiang.wang@bytedance.com>
>> >> ---
>> >> V2 addressed the comments for the previous version.
>> >>
>> >>  virtio-vsock.tex | 62 +++++++++++++++++++++++++++++++++++++++++++++++---------
>> >>  1 file changed, 52 insertions(+), 10 deletions(-)
>> >>
>> >> diff --git a/virtio-vsock.tex b/virtio-vsock.tex
>> >> index da7e641..62c12e0 100644
>> >> --- a/virtio-vsock.tex
>> >> +++ b/virtio-vsock.tex
>> >> @@ -11,12 +11,25 @@ \subsection{Virtqueues}\label{sec:Device Types / Socket Device / Virtqueues}
>> >>  \begin{description}
>> >>  \item[0] rx
>> >>  \item[1] tx
>> >> +\item[2] datagram rx
>> >> +\item[3] datagram tx
>> >> +\item[4] event
>> >> +\end{description}
>> >> +The virtio socket device uses 5 queues if feature bit VIRTIO_VSOCK_F_DRGAM is set. Otherwise, it
>> >> +only uses 3 queues, as the following. Rx and tx queues are always used for stream sockets.
>> >> +
>> >> +\begin{description}
>> >> +\item[0] rx
>> >> +\item[1] tx
>> >>  \item[2] event
>> >>  \end{description}
>> >>
>> >
>> >I suggest renaming "rx" and "tx" to "stream rx" and "stream tx"
>> >virtqueues and also adding this:
>> >
>> >  When behavior differs between stream and datagram rx/tx virtqueues
>> >  their full names are used. Common behavior is simply described in
>> >  terms of rx/tx virtqueues and applies to both stream and datagram
>> >  virtqueues.
>> >
>> >This way you won't need to duplicate portions of the spec that deal with
>> >populating the virtqueues, for example.
>> >
>> >It's also clearer to use a full name for stream rx/tx virtqueues instead
>> >of calling them rx/tx virtqueues now that we have datagram rx/tx
>> >virtqueues.
>> >
>> >> +
>> >>  \subsection{Feature bits}\label{sec:Device Types / Socket Device / Feature bits}
>> >>
>> >> -There are currently no feature bits defined for this device.
>> >> +\begin{description}
>> >> +\item[VIRTIO_VSOCK_F_DGRAM (0)] Device has support for datagram socket type.
>> >> +\end{description}
>> >>
>> >>  \subsection{Device configuration layout}\label{sec:Device Types / Socket Device / Device configuration layout}
>> >>
>> >> @@ -107,6 +120,9 @@ \subsection{Device Operation}\label{sec:Device Types / Socket Device / Device Op
>> >>
>> >>  \subsubsection{Virtqueue Flow Control}\label{sec:Device Types / Socket Device / Device Operation / Virtqueue Flow Control}
>> >>
>> >> +Flow control applies to stream sockets; datagram sockets do not have
>> >> +flow control.
>> >> +
>> >>  The tx virtqueue carries packets initiated by applications and replies to
>> >>  received packets.  The rx virtqueue carries packets initiated by the device and
>> >>  replies to previously transmitted packets.
>> >> @@ -140,12 +156,15 @@ \subsubsection{Addressing}\label{sec:Device Types / Socket Device / Device Opera
>> >>  consists of a (cid, port number) tuple. The header fields used for this are
>> >>  \field{src_cid}, \field{src_port}, \field{dst_cid}, and \field{dst_port}.
>> >>
>> >> -Currently only stream sockets are supported. \field{type} is 1 for stream
>> >> -socket types.
>> >> +Currently stream and datagram (dgram) sockets are supported. \field{type} is 1 for stream
>> >> +socket types. \field{type} is 3 for dgram socket types.
>> >>
>> >>  Stream sockets provide in-order, guaranteed, connection-oriented delivery
>> >>  without message boundaries.
>> >>
>> >> +Datagram sockets provide connectionless unreliable messages of
>> >> +a fixed maximum length.
>> >
>> >Plus unordered (?) and with message boundaries. In other words:
>> >
>> >  Datagram sockets provide unordered, unreliable, connectionless message
>> >  with message boundaries and a fixed maximum length.
>> >
>> >I didn't think of the fixed maximum length aspect before. I guess the
>> >intention is that the rx buffer size is the message size limit? That's
>> >different from UDP messages, which can be fragmented into multiple IP
>> >packets and can be larger than 64KiB:
>> >https://en.wikipedia.org/wiki/User_Datagram_Protocol#UDP_datagram_structure
>> >
>> >Is it possible to support large datagram messages in vsock? I'm a little
>> >concerned that applications that run successfully over UDP will not be
>> >portable if vsock has this limitation because it would impose extra
>> >message boundaries that the application protocol might not tolerate.
>>
>> Maybe we can reuse the same approach Arseny is using for SEQPACKET.
>> Fragment the packets according to the buffers in the virtqueue and set
>> the EOR flag to indicate the last packet in the message.
>>
>Agree. Another option is to use the ones for skb since we may need to
>use skbs for multiple transport support anyway.
>

The important thing I think is to have a single flag in virtio-vsock 
that identifies pretty much the same thing: this is the last fragment of 
a series to rebuild a packet.

We should reuse the same flag for DGRAM and SEQPACKET.

Thanks,
Stefano

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  reply	other threads:[~2021-04-13 12:59 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-01  4:36 [RFC v2] virtio-vsock: add description for datagram type jiang.wang
2021-04-12 13:50 ` Stefan Hajnoczi
2021-04-12 14:21   ` Stefano Garzarella
2021-04-12 22:42     ` Jiang Wang .
2021-04-13 12:58       ` Stefano Garzarella [this message]
2021-04-13 13:16         ` Michael S. Tsirkin
2021-04-13 13:38           ` Stefano Garzarella
2021-04-13 13:50             ` Michael S. Tsirkin
2021-04-13 14:03               ` Stefano Garzarella
2021-04-13 19:58                 ` Michael S. Tsirkin
2021-04-13 22:00                   ` Jiang Wang .
2021-04-14  7:07                     ` Stefano Garzarella
2021-04-14  6:57                   ` Stefano Garzarella
2021-04-14  7:20                     ` Michael S. Tsirkin
2021-04-14  9:38                       ` Stefano Garzarella
2021-04-15  3:15                         ` Jiang Wang .
2021-05-04  3:40                           ` Jiang Wang .
2021-05-04 16:16                             ` Stefano Garzarella
2021-05-04 17:06                               ` Jiang Wang .
2021-05-05 10:49                                 ` Stefano Garzarella
2021-05-05 16:58                                   ` Jiang Wang .
2021-05-07 16:53                                     ` Jiang Wang .
2021-05-10 14:50                                       ` Stefano Garzarella
2021-05-13 23:26                                         ` Jiang Wang .
2021-05-14 15:17                                           ` Stefano Garzarella
2021-05-14 18:55                                             ` Jiang Wang .
2021-05-17 11:02                                               ` Stefano Garzarella
2021-05-18  6:33                                                 ` Jiang Wang .
2021-05-18 13:02                                                   ` Stefano Garzarella
2021-05-19  4:59                                                     ` Jiang Wang .
2021-06-09  4:31                                                       ` Jiang Wang .
2021-06-09  7:40                                                         ` Stefano Garzarella
2021-04-12 22:39   ` [External] " Jiang Wang .
2021-05-13 14:57     ` 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=20210413125853.2dkldmp23vkkc74c@steredhat \
    --to=sgarzare@redhat.com \
    --cc=arseny.krasnov@kaspersky.com \
    --cc=asias@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=cong.wang@bytedance.com \
    --cc=duanxiongchun@bytedance.com \
    --cc=jiang.wang@bytedance.com \
    --cc=mst@redhat.com \
    --cc=stefanha@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=xieyongji@bytedance.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).