On 22.06.2023 19:09, Stefano Garzarella wrote: > On Sun, Jun 11, 2023 at 11:49:02PM +0300, Arseniy Krasnov wrote: >> Hello Bobby! >> >> On 10.06.2023 03:58, Bobby Eshleman wrote: >>> This commit adds support for datagrams over virtio/vsock. >>> >>> Message boundaries are preserved on a per-skb and per-vq entry basis. >> >> I'm a little bit confused about the following case: let vhost sends 4097 bytes >> datagram to the guest. Guest uses 4096 RX buffers in it's virtio queue, each >> buffer has attached empty skb to it. Vhost places first 4096 bytes to the first >> buffer of guests RX queue, and 1 last byte to the second buffer. Now IIUC guest >> has two skb in it rx queue, and user in guest wants to read data - does it read >> 4097 bytes, while guest has two skb - 4096 bytes and 1 bytes? In seqpacket there is >> special marker in header which shows where message ends, and how it works here? > > I think the main difference is that DGRAM is not connection-oriented, so > we don't have a stream and we can't split the packet into 2 (maybe we > could, but we have no guarantee that the second one for example will be > not discarded because there is no space). > > So I think it is acceptable as a restriction to keep it simple. Ah, I see, idea is that any "corruptions" of data could be considered as "DGRAM is not reliable anyway, so that's it" :) > > My only doubt is, should we make the RX buffer size configurable, > instead of always using 4k? I guess this is useful only for DGRAM usage, when we want to tune buffers for some specific case - may be for exact length of messages (for example if we have 4096 buffers, while senders wants to send 5000 bytes always by each 'send()' - I think it will be really strange that reader ALWAYS dequeues 4096 and 4 bytes as two packets). For stream types of socket I think size of rx buffers is not big deal in most of cases. Thanks, Arseniy > > Thanks, > Stefano >