[dm-devel] [PATCH 1/2] dm-kcopyd: Remove BIO_RW_SYNCIO flag

Mikulas Patocka mpatocka at redhat.com
Thu Aug 5 14:48:08 UTC 2010



On Thu, 22 Jul 2010, Mikulas Patocka wrote:

> Remove BIO_RW_SYNCIO flag from kcopyd
> 
> This improves write throughput twice when writing to the origin with snapshot
> on the same device.
> 
> I don't know the exact reason, BIO_RW_SYNCIO is not documented and
> its effects on queueing are not obvious from the code. There seem to
> be two sets of limits, one for sync and the other for async requests.

The reason is that with BIO_RW_SYNCIO CFQ scheduler doesn't merge write 
requests. It sends them one-by-one, so if the disk has for example 64 
tags, it sends out 64 one-chunk write requests.

On other i/o schedulers (noop and deadline), this patch has no effect.

Mikulas

> Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
> 
> ---
>  drivers/md/dm-kcopyd.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Index: linux-2.6.34-fast/drivers/md/dm-kcopyd.c
> ===================================================================
> --- linux-2.6.34-fast.orig/drivers/md/dm-kcopyd.c	2010-07-21 17:57:35.000000000 +0200
> +++ linux-2.6.34-fast/drivers/md/dm-kcopyd.c	2010-07-22 15:24:02.000000000 +0200
> @@ -345,7 +345,7 @@ static int run_io_job(struct kcopyd_job 
>  {
>  	int r;
>  	struct dm_io_request io_req = {
> -		.bi_rw = job->rw | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG),
> +		.bi_rw = job->rw | (1 << BIO_RW_UNPLUG),
>  		.mem.type = DM_IO_PAGE_LIST,
>  		.mem.ptr.pl = job->pages,
>  		.mem.offset = job->offset,
> 




More information about the dm-devel mailing list