All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Sergio Lopez <slp@redhat.com>
Cc: virtio-fs@redhat.com, qemu-devel@nongnu.org, vgoyal@redhat.com
Subject: Re: [Virtio-fs] [PATCH] virtiofsd: Reverse req_list before processing it
Date: Thu, 16 Sep 2021 10:55:46 +0100	[thread overview]
Message-ID: <YUMUonBdCHCtXA/3@work-vm> (raw)
In-Reply-To: <20210824131158.39970-1-slp@redhat.com>

* Sergio Lopez (slp@redhat.com) wrote:
> With the thread pool disabled, we add the requests in the queue to a
> GList, processing by iterating over there afterwards.
> 
> For adding them, we're using "g_list_prepend()", which is more
> efficient but causes the requests to be processed in reverse order,
> breaking the read-ahead and request-merging optimizations in the host
> for sequential operations.
> 
> According to the documentation, if you need to process the request
> in-order, using "g_list_prepend()" and then reversing the list with
> "g_list_reverse()" is more efficient than using "g_list_append()", so
> let's do it that way.
> 
> Testing on a spinning disk (to boost the increase of read-ahead and
> request-merging) shows a 4x improvement on sequential write fio test:
> 
> Test:
> fio --directory=/mnt/virtio-fs --filename=fio-file1 --runtime=20
> --iodepth=16 --size=4G --direct=1 --blocksize=4K --ioengine libaio
> --rw write --name seqwrite-libaio
> 
> Without "g_list_reverse()":
> ...
> Jobs: 1 (f=1): [W(1)][100.0%][w=22.4MiB/s][w=5735 IOPS][eta 00m:00s]
> seqwrite-libaio: (groupid=0, jobs=1): err= 0: pid=710: Tue Aug 24 12:58:16 2021
>   write: IOPS=5709, BW=22.3MiB/s (23.4MB/s)(446MiB/20002msec); 0 zone resets
> ...
> 
> With "g_list_reverse()":
> ...
> Jobs: 1 (f=1): [W(1)][100.0%][w=84.0MiB/s][w=21.5k IOPS][eta 00m:00s]
> seqwrite-libaio: (groupid=0, jobs=1): err= 0: pid=716: Tue Aug 24 13:00:15 2021
>   write: IOPS=21.3k, BW=83.1MiB/s (87.2MB/s)(1663MiB/20001msec); 0 zone resets
> ...
> 
> Signed-off-by: Sergio Lopez <slp@redhat.com>

Queued

> ---
>  tools/virtiofsd/fuse_virtio.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/virtiofsd/fuse_virtio.c b/tools/virtiofsd/fuse_virtio.c
> index fc2564a603..8f4fd165b9 100644
> --- a/tools/virtiofsd/fuse_virtio.c
> +++ b/tools/virtiofsd/fuse_virtio.c
> @@ -716,6 +716,7 @@ static void *fv_queue_thread(void *opaque)
>  
>          /* Process all the requests. */
>          if (!se->thread_pool_size && req_list != NULL) {
> +            req_list = g_list_reverse(req_list);
>              g_list_foreach(req_list, fv_queue_worker, qi);
>              g_list_free(req_list);
>              req_list = NULL;
> -- 
> 2.26.2
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK


WARNING: multiple messages have this Message-ID (diff)
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Sergio Lopez <slp@redhat.com>
Cc: virtio-fs@redhat.com, qemu-devel@nongnu.org,
	Stefan Hajnoczi <stefanha@redhat.com>,
	vgoyal@redhat.com
Subject: Re: [PATCH] virtiofsd: Reverse req_list before processing it
Date: Thu, 16 Sep 2021 10:55:46 +0100	[thread overview]
Message-ID: <YUMUonBdCHCtXA/3@work-vm> (raw)
In-Reply-To: <20210824131158.39970-1-slp@redhat.com>

* Sergio Lopez (slp@redhat.com) wrote:
> With the thread pool disabled, we add the requests in the queue to a
> GList, processing by iterating over there afterwards.
> 
> For adding them, we're using "g_list_prepend()", which is more
> efficient but causes the requests to be processed in reverse order,
> breaking the read-ahead and request-merging optimizations in the host
> for sequential operations.
> 
> According to the documentation, if you need to process the request
> in-order, using "g_list_prepend()" and then reversing the list with
> "g_list_reverse()" is more efficient than using "g_list_append()", so
> let's do it that way.
> 
> Testing on a spinning disk (to boost the increase of read-ahead and
> request-merging) shows a 4x improvement on sequential write fio test:
> 
> Test:
> fio --directory=/mnt/virtio-fs --filename=fio-file1 --runtime=20
> --iodepth=16 --size=4G --direct=1 --blocksize=4K --ioengine libaio
> --rw write --name seqwrite-libaio
> 
> Without "g_list_reverse()":
> ...
> Jobs: 1 (f=1): [W(1)][100.0%][w=22.4MiB/s][w=5735 IOPS][eta 00m:00s]
> seqwrite-libaio: (groupid=0, jobs=1): err= 0: pid=710: Tue Aug 24 12:58:16 2021
>   write: IOPS=5709, BW=22.3MiB/s (23.4MB/s)(446MiB/20002msec); 0 zone resets
> ...
> 
> With "g_list_reverse()":
> ...
> Jobs: 1 (f=1): [W(1)][100.0%][w=84.0MiB/s][w=21.5k IOPS][eta 00m:00s]
> seqwrite-libaio: (groupid=0, jobs=1): err= 0: pid=716: Tue Aug 24 13:00:15 2021
>   write: IOPS=21.3k, BW=83.1MiB/s (87.2MB/s)(1663MiB/20001msec); 0 zone resets
> ...
> 
> Signed-off-by: Sergio Lopez <slp@redhat.com>

Queued

> ---
>  tools/virtiofsd/fuse_virtio.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/virtiofsd/fuse_virtio.c b/tools/virtiofsd/fuse_virtio.c
> index fc2564a603..8f4fd165b9 100644
> --- a/tools/virtiofsd/fuse_virtio.c
> +++ b/tools/virtiofsd/fuse_virtio.c
> @@ -716,6 +716,7 @@ static void *fv_queue_thread(void *opaque)
>  
>          /* Process all the requests. */
>          if (!se->thread_pool_size && req_list != NULL) {
> +            req_list = g_list_reverse(req_list);
>              g_list_foreach(req_list, fv_queue_worker, qi);
>              g_list_free(req_list);
>              req_list = NULL;
> -- 
> 2.26.2
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



  parent reply	other threads:[~2021-09-16  9:55 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-24 13:11 [Virtio-fs] [PATCH] virtiofsd: Reverse req_list before processing it Sergio Lopez
2021-08-24 13:11 ` Sergio Lopez
2021-08-24 13:38 ` [Virtio-fs] " Vivek Goyal
2021-08-24 13:38   ` Vivek Goyal
2021-09-16  9:55 ` Dr. David Alan Gilbert [this message]
2021-09-16  9:55   ` Dr. David Alan Gilbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YUMUonBdCHCtXA/3@work-vm \
    --to=dgilbert@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=slp@redhat.com \
    --cc=vgoyal@redhat.com \
    --cc=virtio-fs@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.