Thread (26 messages) flat view 26 messages, 4 authors, 2022-08-26

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help