Thread (1 message) 1 message, 1 author, 2022-08-02

Re: [RFC 3/5] vhost_test: batch used buffer

From: Stefano Garzarella <sgarzare@redhat.com>
Date: 2022-08-02 07:45:23
Also in: kvm, lkml, virtualization

On Tue, Aug 2, 2022 at 4:45 AM Zhi Guo [off-list ref] wrote:
quoted hunk


2022年7月22日 下午3:12,Eugenio Perez Martin [off-list ref] 写道:

On Thu, Jul 21, 2022 at 10:44 AM Guo Zhi [off-list ref] wrote:


Only add to used ring when a batch a buffer have all been used.  And if
in order feature negotiated, add randomness to the used buffer's order,
test the ability of vhost to reorder batched buffer.

Signed-off-by: Guo Zhi <redacted>
---
drivers/vhost/test.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c
index bc8e7fb1e..1c9c40c11 100644
--- a/drivers/vhost/test.c
+++ b/drivers/vhost/test.c
@@ -43,6 +43,9 @@ struct vhost_test {
static void handle_vq(struct vhost_test *n)
{
       struct vhost_virtqueue *vq = &n->vqs[VHOST_TEST_VQ];
+       struct vring_used_elem *heads = kmalloc(sizeof(*heads)
+                       * vq->num, GFP_KERNEL);
+       int batch_idx = 0;
       unsigned out, in;
       int head;
       size_t len, total_len = 0;
@@ -84,11 +87,21 @@ static void handle_vq(struct vhost_test *n)
                       vq_err(vq, "Unexpected 0 len for TX\n");
                       break;
               }
-               vhost_add_used_and_signal(&n->dev, vq, head, 0);
+               heads[batch_idx].id = cpu_to_vhost32(vq, head);
+               heads[batch_idx++].len = cpu_to_vhost32(vq, len);
               total_len += len;
               if (unlikely(vhost_exceeds_weight(vq, 0, total_len)))
                       break;
       }
+       if (batch_idx) {
+               if (vhost_has_feature(vq, VIRTIO_F_IN_ORDER) && batch_idx >= 2) {

Maybe to add a module parameter to test this? Instead of trusting in
feature negotiation, "unorder_used=1" or something like that.

vhost.c:vhost_add_used_and_signal_n should support receiving buffers
in order or out of order whether F_IN_ORDER is negotiated or not.

Thanks!

That’s a good idea, The reorder feature in vhost is a "workaround” solution for the device that can't consume buffer in order,
If that device support in order feature, The reorder in vhost will not be used.
So we can add a parameter in vhost_test can config in order or not in order usage for used descriptors.
A global parameter in vhost_test.c is enough?
Maybe a module parameter is easier to use (or a sysfs file), and to
test we don't need to recompile the module every time.

In view of having a CI, it's definitely easier to set the module
parameter than to recompile it.

Thanks,
Stefano
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help