Re: [RFC PATCH v8 00/19] virtio/vsock: introduce SOCK_SEQPACKET support

From: Stefano Garzarella
Date: Thu Apr 22 2021 - 06:48:33 EST


On Thu, Apr 22, 2021 at 01:29:54PM +0300, Arseny Krasnov wrote:

On 22.04.2021 13:02, Stefano Garzarella wrote:
On Thu, Apr 22, 2021 at 12:40:17PM +0300, Arseny Krasnov wrote:
On 22.04.2021 11:46, Stefano Garzarella wrote:
On Wed, Apr 21, 2021 at 06:06:28PM +0300, Arseny Krasnov wrote:
Thank You, i'll prepare next version. Main question is: does this
approach(no SEQ_BEGIN, SEQ_END, 'msg_len' and 'msg_id') considered
good? In this case it will be easier to prepare final version, because
is smaller and more simple than previous logic. Also patch to spec
will be smaller.
Yes, it's definitely much better than before.

The only problem I see is that we add some overhead per fragment
(header). We could solve that with the mergeable buffers that Jiang is
considering for DGRAM.
If we are talking about receive, i think, i can reuse merge logic for
Yep, for TX the guest can potentially enqueue a big buffer.
Maybe it's still worth keeping a maximum size and fragmenting as we do
now.

stream sockets, the only difference is that buffers are mergeable
until previous EOR(e.g. previous message) bit is found in rx queue.

I got a little lost.
Can you elaborate more?

I'm talking about 'virtio_transport_recv_enqueue()': it tries to copy

data of new packet to buffer of tail packet in rx queue. In case of

SEQPACKET i can reuse it, just adding logic that check EOR bit of

tail packet.

This might be a good idea.
It doesn't save us the transmitted header though, but at least it saves us from queuing it.
Even if with SEQPACKET I don't expect small packets, since it's the driver that divides them and I think it does everything to use the maximum available.

Instead the mergeable buffers I was referring to are based on the virito-net feature VIRTIO_NET_F_MRG_RXBUF.
Jiang is investigating whether we can reuse them for DGRAM.

Thanks,
Stefano