Re: [RFC v2 3/7] vsock: batch buffers in tx
From: Guo Zhi <hidden>
Date: 2022-08-19 11:04:32
Also in:
kvm, lkml
----- Original Message -----
From: "eperezma" <eperezma@redhat.com> To: "Guo Zhi" <redacted> Cc: "jasowang" <redacted>, "sgarzare" <sgarzare@redhat.com>, "Michael Tsirkin" <mst@redhat.com>, "netdev" [off-list ref], "linux-kernel" [off-list ref], "kvm list" [off-list ref], "virtualization" [off-list ref] Sent: Thursday, August 18, 2022 2:19:29 PM Subject: Re: [RFC v2 3/7] vsock: batch buffers in tx
On Wed, Aug 17, 2022 at 3:58 PM Guo Zhi [off-list ref] wrote:quoted
Vsock uses buffers in order, and for tx driver doesn't have to know the length of the buffer. So we can do a batch for vsock if in order negotiated, only write one used ring for a batch of buffers Signed-off-by: Guo Zhi <redacted> --- drivers/vhost/vsock.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 368330417bde..b0108009c39a 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c@@ -500,6 +500,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work*work) int head, pkts = 0, total_len = 0; unsigned int out, in; bool added = false; + int last_head = -1; mutex_lock(&vq->mutex);@@ -551,10 +552,16 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work*work) else virtio_transport_free_pkt(pkt); - vhost_add_used(vq, head, 0); + if (!vhost_has_feature(vq, VIRTIO_F_IN_ORDER)) + vhost_add_used(vq, head, 0); + else + last_head = head; added = true; } while(likely(!vhost_exceeds_weight(vq, ++pkts, total_len))); + /* If in order feature negotiaged, we can do a batch to increase performance */ + if (vhost_has_feature(vq, VIRTIO_F_IN_ORDER) && last_head != -1) + vhost_add_used(vq, last_head, 0);Expanding my previous mail on patch 1, you can also use this in vsock tx queue code. This way, no modifications to vhost.c functions are needed. Thanks!
As replied in patch 1, no modification to vhost is not feasible. Thanks!
quoted
no_more_replies: if (added) vhost_signal(&vsock->dev, vq); -- 2.17.1