On Mon, May 22, 2023 at 03:19:15PM +0200, Peter-Jan Gootzen wrote: > When the Virtio queue is full, a work item is scheduled > to execute in 1ms that retries adding the request to the queue. > This is a large amount of time on the scale on which a > virtio-fs device can operate. When using a DPU this is around > 40us baseline without going to a remote server (4k, QD=1). > This patch queues requests when the Virtio queue is full, > and when a completed request is taken off, immediately fills > it back up with queued requests. > > This reduces the 99.9th percentile latencies in our tests by > 60x and slightly increases the overall throughput, when using a > queue depth 2x the size of the Virtio queue size, with a > DPU-powered virtio-fs device. > > Signed-off-by: Peter-Jan Gootzen <peter-jan@xxxxxxxxxxx> > --- > fs/fuse/virtio_fs.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c > index 4d8d4f16c727..8af9d3dc61d3 100644 > --- a/fs/fuse/virtio_fs.c > +++ b/fs/fuse/virtio_fs.c > @@ -347,6 +347,8 @@ static void virtio_fs_hiprio_done_work(struct work_struct *work) > } > } while (!virtqueue_enable_cb(vq) && likely(!virtqueue_is_broken(vq))); > spin_unlock(&fsvq->lock); > + > + schedule_delayed_work(&fsvq->dispatch_work, 0); This avoids scheduling work when there is nothing queued and uses schedule_work() since there is no timeout value: if (!list_empty(&fsvq->queued_reqs)) { schedule_work(&fsvq->dispatch_work); } spin_unlock(&fsvq->lock);
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization