diff mbox

[v2] migration/block: Avoid invoking blk_drain too frequently

Message ID 1489549053-31728-1-git-send-email-jemmy858585@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

858585 jemmy March 15, 2017, 3:37 a.m. UTC
Increase bmds->cur_dirty after submit io, so reduce the frequency
involve into blk_drain, and improve the performance obviously
when block migration.

The performance test result of this patch:

During the block dirty save phase, this patch improve guest os IOPS
from 4.0K to 9.5K. and improve the migration speed from
505856 rsec/s to 855756 rsec/s.

Signed-off-by: Lidong Chen <jemmy858585@gmail.com>
---
 migration/block.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Kevin Wolf March 15, 2017, 10:21 a.m. UTC | #1
Am 15.03.2017 um 04:37 hat Lidong Chen geschrieben:
> Increase bmds->cur_dirty after submit io, so reduce the frequency
> involve into blk_drain, and improve the performance obviously
> when block migration.
> 
> The performance test result of this patch:
> 
> During the block dirty save phase, this patch improve guest os IOPS
> from 4.0K to 9.5K. and improve the migration speed from
> 505856 rsec/s to 855756 rsec/s.
> 
> Signed-off-by: Lidong Chen <jemmy858585@gmail.com>
> ---
>  migration/block.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/migration/block.c b/migration/block.c
> index 6741228..7734ff7 100644
> --- a/migration/block.c
> +++ b/migration/block.c
> @@ -576,6 +576,9 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
>              }
>  
>              bdrv_reset_dirty_bitmap(bmds->dirty_bitmap, sector, nr_sectors);
> +            sector += nr_sectors;

sector += BDRV_SECTORS_PER_DIRTY_CHUNK would be acceptable here...

> +            bmds->cur_dirty = sector;
> +
>              break;
>          }
>          sector += BDRV_SECTORS_PER_DIRTY_CHUNK;
>          bmds->cur_dirty = sector;
>      }

...which would make it the same code as the rest of the loop. It could
be nicer to reuse the same code and just set a bool when a request is
submitted so that the loop terminates after that.

But that's just a matter of taste, so I'll still give:

Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Fam Zheng March 15, 2017, 11:10 a.m. UTC | #2
On Wed, 03/15 11:37, Lidong Chen wrote:
> Increase bmds->cur_dirty after submit io, so reduce the frequency
> involve into blk_drain, and improve the performance obviously
> when block migration.
> 
> The performance test result of this patch:
> 
> During the block dirty save phase, this patch improve guest os IOPS
> from 4.0K to 9.5K. and improve the migration speed from
> 505856 rsec/s to 855756 rsec/s.
> 
> Signed-off-by: Lidong Chen <jemmy858585@gmail.com>
> ---
>  migration/block.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/migration/block.c b/migration/block.c
> index 6741228..7734ff7 100644
> --- a/migration/block.c
> +++ b/migration/block.c
> @@ -576,6 +576,9 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
>              }
>  
>              bdrv_reset_dirty_bitmap(bmds->dirty_bitmap, sector, nr_sectors);
> +            sector += nr_sectors;
> +            bmds->cur_dirty = sector;
> +
>              break;
>          }
>          sector += BDRV_SECTORS_PER_DIRTY_CHUNK;
> -- 
> 1.8.3.1
> 

Nice catch above all, thank you!

Reviewed-by: Fam Zheng <famz@redhat.com>
Dr. David Alan Gilbert March 15, 2017, 5:31 p.m. UTC | #3
* Fam Zheng (famz@redhat.com) wrote:
> On Wed, 03/15 11:37, Lidong Chen wrote:
> > Increase bmds->cur_dirty after submit io, so reduce the frequency
> > involve into blk_drain, and improve the performance obviously
> > when block migration.
> > 
> > The performance test result of this patch:
> > 
> > During the block dirty save phase, this patch improve guest os IOPS
> > from 4.0K to 9.5K. and improve the migration speed from
> > 505856 rsec/s to 855756 rsec/s.
> > 
> > Signed-off-by: Lidong Chen <jemmy858585@gmail.com>
> > ---
> >  migration/block.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/migration/block.c b/migration/block.c
> > index 6741228..7734ff7 100644
> > --- a/migration/block.c
> > +++ b/migration/block.c
> > @@ -576,6 +576,9 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
> >              }
> >  
> >              bdrv_reset_dirty_bitmap(bmds->dirty_bitmap, sector, nr_sectors);
> > +            sector += nr_sectors;
> > +            bmds->cur_dirty = sector;
> > +
> >              break;
> >          }
> >          sector += BDRV_SECTORS_PER_DIRTY_CHUNK;
> > -- 
> > 1.8.3.1
> > 
> 
> Nice catch above all, thank you!
> 
> Reviewed-by: Fam Zheng <famz@redhat.com>

Are you taking that via a block pull?

Dave
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Fam Zheng March 16, 2017, 1:33 a.m. UTC | #4
On Wed, 03/15 17:31, Dr. David Alan Gilbert wrote:
> * Fam Zheng (famz@redhat.com) wrote:
> > On Wed, 03/15 11:37, Lidong Chen wrote:
> > > Increase bmds->cur_dirty after submit io, so reduce the frequency
> > > involve into blk_drain, and improve the performance obviously
> > > when block migration.
> > > 
> > > The performance test result of this patch:
> > > 
> > > During the block dirty save phase, this patch improve guest os IOPS
> > > from 4.0K to 9.5K. and improve the migration speed from
> > > 505856 rsec/s to 855756 rsec/s.
> > > 
> > > Signed-off-by: Lidong Chen <jemmy858585@gmail.com>
> > > ---
> > >  migration/block.c | 3 +++
> > >  1 file changed, 3 insertions(+)
> > > 
> > > diff --git a/migration/block.c b/migration/block.c
> > > index 6741228..7734ff7 100644
> > > --- a/migration/block.c
> > > +++ b/migration/block.c
> > > @@ -576,6 +576,9 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
> > >              }
> > >  
> > >              bdrv_reset_dirty_bitmap(bmds->dirty_bitmap, sector, nr_sectors);
> > > +            sector += nr_sectors;
> > > +            bmds->cur_dirty = sector;
> > > +
> > >              break;
> > >          }
> > >          sector += BDRV_SECTORS_PER_DIRTY_CHUNK;
> > > -- 
> > > 1.8.3.1
> > > 
> > 
> > Nice catch above all, thank you!
> > 
> > Reviewed-by: Fam Zheng <famz@redhat.com>
> 
> Are you taking that via a block pull?

I can do that, but I'm not sure whether it should go to 2.9. This is a
performance improvement, which usually doesn't qualify as bug fixes. But this
also looks like a mistake in original code.

Fam
Juan Quintela March 16, 2017, 7:59 a.m. UTC | #5
Fam Zheng <famz@redhat.com> wrote:
> On Wed, 03/15 17:31, Dr. David Alan Gilbert wrote:
>> * Fam Zheng (famz@redhat.com) wrote:
>> > On Wed, 03/15 11:37, Lidong Chen wrote:
>> > > Increase bmds->cur_dirty after submit io, so reduce the frequency
>> > > involve into blk_drain, and improve the performance obviously
>> > > when block migration.
>> > > 
>> > > The performance test result of this patch:
>> > > 
>> > > During the block dirty save phase, this patch improve guest os IOPS
>> > > from 4.0K to 9.5K. and improve the migration speed from
>> > > 505856 rsec/s to 855756 rsec/s.
>> > > 
>> > > Signed-off-by: Lidong Chen <jemmy858585@gmail.com>
>> > > ---
>> > >  migration/block.c | 3 +++
>> > >  1 file changed, 3 insertions(+)
>> > > 
>> > > diff --git a/migration/block.c b/migration/block.c
>> > > index 6741228..7734ff7 100644
>> > > --- a/migration/block.c
>> > > +++ b/migration/block.c
>> > > @@ -576,6 +576,9 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
>> > >              }
>> > >  
>> > >              bdrv_reset_dirty_bitmap(bmds->dirty_bitmap, sector, nr_sectors);
>> > > +            sector += nr_sectors;
>> > > +            bmds->cur_dirty = sector;
>> > > +
>> > >              break;
>> > >          }
>> > >          sector += BDRV_SECTORS_PER_DIRTY_CHUNK;
>> > > -- 
>> > > 1.8.3.1
>> > > 
>> > 
>> > Nice catch above all, thank you!
>> > 
>> > Reviewed-by: Fam Zheng <famz@redhat.com>
>> 
>> Are you taking that via a block pull?
>
> I can do that, but I'm not sure whether it should go to 2.9. This is a
> performance improvement, which usually doesn't qualify as bug fixes. But this
> also looks like a mistake in original code.
>
> Fam

I am taking it through migration and push it.  I agree with your description.
diff mbox

Patch

diff --git a/migration/block.c b/migration/block.c
index 6741228..7734ff7 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -576,6 +576,9 @@  static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
             }
 
             bdrv_reset_dirty_bitmap(bmds->dirty_bitmap, sector, nr_sectors);
+            sector += nr_sectors;
+            bmds->cur_dirty = sector;
+
             break;
         }
         sector += BDRV_SECTORS_PER_DIRTY_CHUNK;