Re: [PATCH] md:Add blk_plug in sync_thread.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 11 Jun 2012 17:16:55 +0800 majianpeng <majianpeng@xxxxxxxxx> wrote:

> Add blk_plug in sync_thread will increase the performance of sync.
> Because sync_thread did not blk_plug,so when raid sync, the bio merge
> not well.
> 
> Testing environment:
> SATA controller: Intel Corporation 82801JI (ICH10 Family) SATA AHCI
> Controller.
> OS:Linux xxx 3.5.0-rc2+ #340 SMP Tue Jun 12 09:00:25 CST 2012
> x86_64 x86_64 x86_64 GNU/Linux.
> RAID5: four ST31000524NS disk.
> 
> Without blk_plug:recovery speed about 63M/Sec;
> Add blk_plug:recovery speed about 120M/Sec.
> 
> Using blktrace:
> blktrace -d /dev/sdb -w 60  -o -|blkparse -i -
> 
> without blk_plug:
> Total (8,16):
>  Reads Queued:      309811,     1239MiB	 Writes Queued:           0,        0KiB
>  Read Dispatches:   283583,     1189MiB	 Write Dispatches:        0,        0KiB
>  Reads Requeued:         0		 Writes Requeued:         0
>  Reads Completed:   273351,     1149MiB	 Writes Completed:        0,        0KiB
>  Read Merges:        23533,    94132KiB	 Write Merges:            0,        0KiB
>  IO unplugs:             0        	 Timer unplugs:           0
> 
> add blk_plug:
> Total (8,16):
>  Reads Queued:      428697,     1714MiB	 Writes Queued:           0,        0KiB
>  Read Dispatches:     3954,     1714MiB	 Write Dispatches:        0,        0KiB
>  Reads Requeued:         0		 Writes Requeued:         0
>  Reads Completed:     3956,     1715MiB	 Writes Completed:        0,        0KiB
>  Read Merges:       424743,     1698MiB	 Write Merges:            0,        0KiB
>  IO unplugs:             0        	 Timer unplugs:        3384
> 
> The ratio of merge will be markedly increased.
> 
> Signed-off-by: majianpeng <majianpeng@xxxxxxxxx>
> ---
>  drivers/md/md.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index 1c2f904..90bdc37 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -7298,6 +7298,7 @@ void md_do_sync(struct mddev *mddev)
>  	int skipped = 0;
>  	struct md_rdev *rdev;
>  	char *desc;
> +	struct blk_plug plug;
>  
>  	/* just incase thread restarts... */
>  	if (test_bit(MD_RECOVERY_DONE, &mddev->recovery))
> @@ -7446,7 +7447,8 @@ void md_do_sync(struct mddev *mddev)
>  		mddev->curr_resync = j;
>  	}
>  	mddev->curr_resync_completed = j;
> -
> +
> +	blk_start_plug(&plug);
>  	while (j < max_sectors) {
>  		sector_t sectors;
>  
> @@ -7586,6 +7588,7 @@ void md_do_sync(struct mddev *mddev)
>  	}
>   skip:
>  	set_bit(MD_CHANGE_DEVS, &mddev->flags);
> +	blk_finish_plug(&plug);
>  
>  	if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
>  		/* We completed so min/max setting can be forgotten if used. */

Thanks again.

I've moved the call to "blk_finish_plug" up a bit to just after the
  out:
label, as it is possible to "goto skip" before calling blk_start_plug.

Thanks a lot,
NeilBrown

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux