diff mbox

Output dirty-bytes-rate instead of dirty-pages-rate

Message ID 20170314102747.31395-1-fanc.fnst@cn.fujitsu.com
State New
Headers show

Commit Message

Chao Fan March 14, 2017, 10:27 a.m. UTC
In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
It's also better for other tools to determine the cpu throttle
value in different architecture.

Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
---
 hmp.c                 | 6 +++---
 migration/migration.c | 2 +-
 qapi-schema.json      | 8 ++++----
 3 files changed, 8 insertions(+), 8 deletions(-)

Comments

Daniel P. Berrangé March 14, 2017, 10:45 a.m. UTC | #1
On Tue, Mar 14, 2017 at 06:27:47PM +0800, Chao Fan wrote:
> In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
> It's also better for other tools to determine the cpu throttle
> value in different architecture.
> 
> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> ---
>  hmp.c                 | 6 +++---
>  migration/migration.c | 2 +-
>  qapi-schema.json      | 8 ++++----
>  3 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/hmp.c b/hmp.c
> index 261843f..7334bc5 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -215,9 +215,9 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
>                         info->ram->normal_bytes >> 10);
>          monitor_printf(mon, "dirty sync count: %" PRIu64 "\n",
>                         info->ram->dirty_sync_count);
> -        if (info->ram->dirty_pages_rate) {
> -            monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n",
> -                           info->ram->dirty_pages_rate);
> +        if (info->ram->dirty_bytes_rate) {
> +            monitor_printf(mon, "dirty bytes rate: %" PRIu64 " bytes/s\n",
> +                           info->ram->dirty_bytes_rate);
>          }
>          if (info->ram->postcopy_requests) {
>              monitor_printf(mon, "postcopy request count: %" PRIu64 "\n",
> diff --git a/migration/migration.c b/migration/migration.c
> index 3dab684..7e7b62c 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -648,7 +648,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
>  
>      if (s->state != MIGRATION_STATUS_COMPLETED) {
>          info->ram->remaining = ram_bytes_remaining();
> -        info->ram->dirty_pages_rate = s->dirty_pages_rate;
> +        info->ram->dirty_bytes_rate = s->dirty_bytes_rate;
>      }
>  }
>  
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 32b4a4b..83a45f8 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -565,9 +565,6 @@
>  #
>  # @normal-bytes: number of normal bytes sent (since 1.2)
>  #
> -# @dirty-pages-rate: number of pages dirtied by second by the
> -#        guest (since 1.3)
> -#
>  # @mbps: throughput in megabits/sec. (since 1.6)
>  #
>  # @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
> @@ -575,12 +572,15 @@
>  # @postcopy-requests: The number of page requests received from the destination
>  #        (since 2.7)
>  #
> +# @dirty-bytes-rate: how many bytes  dirtied by second by the
> +#        guest (since 2.9)
> +#
>  # Since: 0.14.0
>  ##
>  { 'struct': 'MigrationStats',
>    'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
>             'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
> -           'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
> +           'normal-bytes': 'int', 'dirty-bytes-rate' : 'int',
>             'mbps' : 'number', 'dirty-sync-count' : 'int',
>             'postcopy-requests' : 'int' } }

You can't do this - this breaks every single app that uses dirty-pages-rate.

The only option is to add dirty-bytes-rate as a second field, and leave
the existing field unchanged. Alternatively, output 'page-size' and let
the application do the math.

Regards,
Daniel
Chao Fan March 14, 2017, 11:51 a.m. UTC | #2
On Tue, Mar 14, 2017 at 10:45:16AM +0000, Daniel P. Berrange wrote:
>On Tue, Mar 14, 2017 at 06:27:47PM +0800, Chao Fan wrote:
>> In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
>> It's also better for other tools to determine the cpu throttle
>> value in different architecture.
>> 
>> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>> ---
>>  hmp.c                 | 6 +++---
>>  migration/migration.c | 2 +-
>>  qapi-schema.json      | 8 ++++----
>>  3 files changed, 8 insertions(+), 8 deletions(-)
>> 
>> diff --git a/hmp.c b/hmp.c
>> index 261843f..7334bc5 100644
>> --- a/hmp.c
>> +++ b/hmp.c
>> @@ -215,9 +215,9 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
>>                         info->ram->normal_bytes >> 10);
>>          monitor_printf(mon, "dirty sync count: %" PRIu64 "\n",
>>                         info->ram->dirty_sync_count);
>> -        if (info->ram->dirty_pages_rate) {
>> -            monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n",
>> -                           info->ram->dirty_pages_rate);
>> +        if (info->ram->dirty_bytes_rate) {
>> +            monitor_printf(mon, "dirty bytes rate: %" PRIu64 " bytes/s\n",
>> +                           info->ram->dirty_bytes_rate);
>>          }
>>          if (info->ram->postcopy_requests) {
>>              monitor_printf(mon, "postcopy request count: %" PRIu64 "\n",
>> diff --git a/migration/migration.c b/migration/migration.c
>> index 3dab684..7e7b62c 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -648,7 +648,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
>>  
>>      if (s->state != MIGRATION_STATUS_COMPLETED) {
>>          info->ram->remaining = ram_bytes_remaining();
>> -        info->ram->dirty_pages_rate = s->dirty_pages_rate;
>> +        info->ram->dirty_bytes_rate = s->dirty_bytes_rate;
>>      }
>>  }
>>  
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index 32b4a4b..83a45f8 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -565,9 +565,6 @@
>>  #
>>  # @normal-bytes: number of normal bytes sent (since 1.2)
>>  #
>> -# @dirty-pages-rate: number of pages dirtied by second by the
>> -#        guest (since 1.3)
>> -#
>>  # @mbps: throughput in megabits/sec. (since 1.6)
>>  #
>>  # @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
>> @@ -575,12 +572,15 @@
>>  # @postcopy-requests: The number of page requests received from the destination
>>  #        (since 2.7)
>>  #
>> +# @dirty-bytes-rate: how many bytes  dirtied by second by the
>> +#        guest (since 2.9)
>> +#
>>  # Since: 0.14.0
>>  ##
>>  { 'struct': 'MigrationStats',
>>    'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
>>             'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
>> -           'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
>> +           'normal-bytes': 'int', 'dirty-bytes-rate' : 'int',
>>             'mbps' : 'number', 'dirty-sync-count' : 'int',
>>             'postcopy-requests' : 'int' } }
>
>You can't do this - this breaks every single app that uses dirty-pages-rate.
>
>The only option is to add dirty-bytes-rate as a second field, and leave
>the existing field unchanged. Alternatively, output 'page-size' and let
>the application do the math.
Hi Daniel.

Thank you for you reply.
I think adding dirty-bytes-rate is better. I will change and resend the
new patch.

Thanks,
Chao Fan
>
>Regards,
>Daniel
>-- 
>|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
>|: http://libvirt.org              -o-             http://virt-manager.org :|
>|: http://entangle-photo.org       -o-    http://search.cpan.org/~danberr/ :|
>
>
Juan Quintela March 14, 2017, 12:29 p.m. UTC | #3
Chao Fan <fanc.fnst@cn.fujitsu.com> wrote:
> In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
> It's also better for other tools to determine the cpu throttle
> value in different architecture.
>
> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>

I agree with Daniel here, you can't change the meaning of a field.  Look
at skipped pages.  It is zero know because it is not used anymore, but
we can't drop it.

I think it is better to expose page_size.  We have now

trasferred: bytes
total: bytes
duplicate: number of zero pages
skipped: always zero.
normal: number of normal pages
normal_bytes: the same  in bytes
mbps: megabytes per second?  I can't even remember this one
dirty_sync_count: number of times we have go through the whole memory
postcopy_requests = number of pages asked by postcopy faults?
dirty_pages_rate = pages by some kind of unit

And we haven't yet started with compression or xbzrle.  I think that the
best approach at this point is putting everything in pages except the
things that don't make sense.

We can put everything on bytes, but then everything is HUGE.

Anyways, what do libvirt/management apps preffer?

Later, Juan.


> ---
>  hmp.c                 | 6 +++---
>  migration/migration.c | 2 +-
>  qapi-schema.json      | 8 ++++----
>  3 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/hmp.c b/hmp.c
> index 261843f..7334bc5 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -215,9 +215,9 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
>                         info->ram->normal_bytes >> 10);
>          monitor_printf(mon, "dirty sync count: %" PRIu64 "\n",
>                         info->ram->dirty_sync_count);
> -        if (info->ram->dirty_pages_rate) {
> -            monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n",
> -                           info->ram->dirty_pages_rate);
> +        if (info->ram->dirty_bytes_rate) {
> +            monitor_printf(mon, "dirty bytes rate: %" PRIu64 " bytes/s\n",
> +                           info->ram->dirty_bytes_rate);
>          }
>          if (info->ram->postcopy_requests) {
>              monitor_printf(mon, "postcopy request count: %" PRIu64 "\n",
> diff --git a/migration/migration.c b/migration/migration.c
> index 3dab684..7e7b62c 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -648,7 +648,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
>  
>      if (s->state != MIGRATION_STATUS_COMPLETED) {
>          info->ram->remaining = ram_bytes_remaining();
> -        info->ram->dirty_pages_rate = s->dirty_pages_rate;
> +        info->ram->dirty_bytes_rate = s->dirty_bytes_rate;
>      }
>  }
>  
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 32b4a4b..83a45f8 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -565,9 +565,6 @@
>  #
>  # @normal-bytes: number of normal bytes sent (since 1.2)
>  #
> -# @dirty-pages-rate: number of pages dirtied by second by the
> -#        guest (since 1.3)
> -#
>  # @mbps: throughput in megabits/sec. (since 1.6)
>  #
>  # @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
> @@ -575,12 +572,15 @@
>  # @postcopy-requests: The number of page requests received from the destination
>  #        (since 2.7)
>  #
> +# @dirty-bytes-rate: how many bytes  dirtied by second by the
> +#        guest (since 2.9)
> +#
>  # Since: 0.14.0
>  ##
>  { 'struct': 'MigrationStats',
>    'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
>             'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
> -           'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
> +           'normal-bytes': 'int', 'dirty-bytes-rate' : 'int',
>             'mbps' : 'number', 'dirty-sync-count' : 'int',
>             'postcopy-requests' : 'int' } }
Daniel P. Berrangé March 14, 2017, 12:37 p.m. UTC | #4
On Tue, Mar 14, 2017 at 01:29:43PM +0100, Juan Quintela wrote:
> Chao Fan <fanc.fnst@cn.fujitsu.com> wrote:
> > In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
> > It's also better for other tools to determine the cpu throttle
> > value in different architecture.
> >
> > Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
> > Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> 
> I agree with Daniel here, you can't change the meaning of a field.  Look
> at skipped pages.  It is zero know because it is not used anymore, but
> we can't drop it.
> 
> I think it is better to expose page_size.  We have now
> 
> trasferred: bytes
> total: bytes
> duplicate: number of zero pages
> skipped: always zero.
> normal: number of normal pages
> normal_bytes: the same  in bytes
> mbps: megabytes per second?  I can't even remember this one
> dirty_sync_count: number of times we have go through the whole memory
> postcopy_requests = number of pages asked by postcopy faults?
> dirty_pages_rate = pages by some kind of unit
> 
> And we haven't yet started with compression or xbzrle.  I think that the
> best approach at this point is putting everything in pages except the
> things that don't make sense.
> 
> We can put everything on bytes, but then everything is HUGE.
> 
> Anyways, what do libvirt/management apps preffer?

Since we have many fields already which are reported as page counts, I
think just adding page size would be preferrable to having twice as many
fields reported duplicating bytes + pages.

The only reason to favour duplicating all fields to report bytes, is if
we needed to vary page size to deal with huge pages (eg if some reported
pages were 4kb and other reported pages with 2MB). You can easily just
scale huge pages counts to be "normal"  pages for purpose of reporting
though.
Regards,
Daniel
Chao Fan March 14, 2017, 1:20 p.m. UTC | #5
On Tue, Mar 14, 2017 at 12:37:30PM +0000, Daniel P. Berrange wrote:
>On Tue, Mar 14, 2017 at 01:29:43PM +0100, Juan Quintela wrote:
>> Chao Fan <fanc.fnst@cn.fujitsu.com> wrote:
>> > In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
>> > It's also better for other tools to determine the cpu throttle
>> > value in different architecture.
>> >
>> > Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> > Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>> 
>> I agree with Daniel here, you can't change the meaning of a field.  Look
>> at skipped pages.  It is zero know because it is not used anymore, but
>> we can't drop it.
>> 
>> I think it is better to expose page_size.  We have now
>> 
>> trasferred: bytes
>> total: bytes
>> duplicate: number of zero pages
>> skipped: always zero.
>> normal: number of normal pages
>> normal_bytes: the same  in bytes
>> mbps: megabytes per second?  I can't even remember this one
>> dirty_sync_count: number of times we have go through the whole memory
>> postcopy_requests = number of pages asked by postcopy faults?
>> dirty_pages_rate = pages by some kind of unit
>> 
>> And we haven't yet started with compression or xbzrle.  I think that the
>> best approach at this point is putting everything in pages except the
>> things that don't make sense.
>> 
>> We can put everything on bytes, but then everything is HUGE.
>> 
>> Anyways, what do libvirt/management apps preffer?
>
>Since we have many fields already which are reported as page counts, I
>think just adding page size would be preferrable to having twice as many
>fields reported duplicating bytes + pages.
OK.

>
>The only reason to favour duplicating all fields to report bytes, is if
>we needed to vary page size to deal with huge pages (eg if some reported
>pages were 4kb and other reported pages with 2MB). You can easily just
>scale huge pages counts to be "normal"  pages for purpose of reporting

Thank you very much for your help!

Thanks,
Chao Fan
>though.
>Regards,
>Daniel
>-- 
>|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
>|: http://libvirt.org              -o-             http://virt-manager.org :|
>|: http://entangle-photo.org       -o-    http://search.cpan.org/~danberr/ :|
>
>
Chao Fan March 14, 2017, 1:33 p.m. UTC | #6
On Tue, Mar 14, 2017 at 01:29:43PM +0100, Juan Quintela wrote:
>Chao Fan <fanc.fnst@cn.fujitsu.com> wrote:
>> In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
>> It's also better for other tools to determine the cpu throttle
>> value in different architecture.
>>
>> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>
>I agree with Daniel here, you can't change the meaning of a field.  Look
>at skipped pages.  It is zero know because it is not used anymore, but
>we can't drop it.

OK, I see.
Thank you very much.

>
>I think it is better to expose page_size.  We have now
>
>trasferred: bytes
>total: bytes
>duplicate: number of zero pages
>skipped: always zero.
>normal: number of normal pages
>normal_bytes: the same  in bytes
>mbps: megabytes per second?  I can't even remember this one
>dirty_sync_count: number of times we have go through the whole memory
>postcopy_requests = number of pages asked by postcopy faults?
>dirty_pages_rate = pages by some kind of unit
>
>And we haven't yet started with compression or xbzrle.  I think that the
>best approach at this point is putting everything in pages except the
>things that don't make sense.
>
>We can put everything on bytes, but then everything is HUGE.

Yes, it is.

>
>Anyways, what do libvirt/management apps preffer?

I think maybe both are OK.
About this issue, I will change my method to get the bytes.

Many thanks for your reply.

Thanks,
Chao Fan
>
>Later, Juan.
>
>
>> ---
>>  hmp.c                 | 6 +++---
>>  migration/migration.c | 2 +-
>>  qapi-schema.json      | 8 ++++----
>>  3 files changed, 8 insertions(+), 8 deletions(-)
>>
>> diff --git a/hmp.c b/hmp.c
>> index 261843f..7334bc5 100644
>> --- a/hmp.c
>> +++ b/hmp.c
>> @@ -215,9 +215,9 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
>>                         info->ram->normal_bytes >> 10);
>>          monitor_printf(mon, "dirty sync count: %" PRIu64 "\n",
>>                         info->ram->dirty_sync_count);
>> -        if (info->ram->dirty_pages_rate) {
>> -            monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n",
>> -                           info->ram->dirty_pages_rate);
>> +        if (info->ram->dirty_bytes_rate) {
>> +            monitor_printf(mon, "dirty bytes rate: %" PRIu64 " bytes/s\n",
>> +                           info->ram->dirty_bytes_rate);
>>          }
>>          if (info->ram->postcopy_requests) {
>>              monitor_printf(mon, "postcopy request count: %" PRIu64 "\n",
>> diff --git a/migration/migration.c b/migration/migration.c
>> index 3dab684..7e7b62c 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -648,7 +648,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
>>  
>>      if (s->state != MIGRATION_STATUS_COMPLETED) {
>>          info->ram->remaining = ram_bytes_remaining();
>> -        info->ram->dirty_pages_rate = s->dirty_pages_rate;
>> +        info->ram->dirty_bytes_rate = s->dirty_bytes_rate;
>>      }
>>  }
>>  
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index 32b4a4b..83a45f8 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -565,9 +565,6 @@
>>  #
>>  # @normal-bytes: number of normal bytes sent (since 1.2)
>>  #
>> -# @dirty-pages-rate: number of pages dirtied by second by the
>> -#        guest (since 1.3)
>> -#
>>  # @mbps: throughput in megabits/sec. (since 1.6)
>>  #
>>  # @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
>> @@ -575,12 +572,15 @@
>>  # @postcopy-requests: The number of page requests received from the destination
>>  #        (since 2.7)
>>  #
>> +# @dirty-bytes-rate: how many bytes  dirtied by second by the
>> +#        guest (since 2.9)
>> +#
>>  # Since: 0.14.0
>>  ##
>>  { 'struct': 'MigrationStats',
>>    'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
>>             'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
>> -           'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
>> +           'normal-bytes': 'int', 'dirty-bytes-rate' : 'int',
>>             'mbps' : 'number', 'dirty-sync-count' : 'int',
>>             'postcopy-requests' : 'int' } }
>
>
Eric Blake March 14, 2017, 2:54 p.m. UTC | #7
On 03/14/2017 05:27 AM, Chao Fan wrote:
> In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
> It's also better for other tools to determine the cpu throttle
> value in different architecture.
> 
> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> ---

In addition to the (good) comments you've gotten on not breaking
existing fields, and the choice between a single new field giving the
page size (with all fields favoring pages) or lots of new fields giving
bytes, I have another comment:

> @@ -575,12 +572,15 @@
>  # @postcopy-requests: The number of page requests received from the destination
>  #        (since 2.7)
>  #
> +# @dirty-bytes-rate: how many bytes  dirtied by second by the
> +#        guest (since 2.9)

You've missed soft freeze.  Is this really bug-fix quality to be adding
it into the release this late in the game for 2.9, or should it be
deferred to 2.10?

And while this is just a new field to an existing command, rather than a
new command entirely, it's also worth thinking about Markus' edict for
testsuite coverage:
https://lists.gnu.org/archive/html/qemu-devel/2017-03/msg00296.html
Chao Fan March 14, 2017, 3:40 p.m. UTC | #8
On Tue, Mar 14, 2017 at 09:54:34AM -0500, Eric Blake wrote:
>On 03/14/2017 05:27 AM, Chao Fan wrote:
>> In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
>> It's also better for other tools to determine the cpu throttle
>> value in different architecture.
>> 
>> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>> ---
>
>In addition to the (good) comments you've gotten on not breaking
>existing fields, and the choice between a single new field giving the
>page size (with all fields favoring pages) or lots of new fields giving
>bytes, I have another comment:
>
>> @@ -575,12 +572,15 @@
>>  # @postcopy-requests: The number of page requests received from the destination
>>  #        (since 2.7)
>>  #
>> +# @dirty-bytes-rate: how many bytes  dirtied by second by the
>> +#        guest (since 2.9)
>
>You've missed soft freeze.  Is this really bug-fix quality to be adding
>it into the release this late in the game for 2.9, or should it be
>deferred to 2.10?

Ok, I will change it.
Many thanks for your help.

Thanks,
Chao Fan

>
>And while this is just a new field to an existing command, rather than a
>new command entirely, it's also worth thinking about Markus' edict for
>testsuite coverage:
>https://lists.gnu.org/archive/html/qemu-devel/2017-03/msg00296.html
>
>-- 
>Eric Blake   eblake redhat com    +1-919-301-3266
>Libvirt virtualization library http://libvirt.org
>
Chao Fan March 15, 2017, 4:13 a.m. UTC | #9
On Tue, Mar 14, 2017 at 12:37:30PM +0000, Daniel P. Berrange wrote:
>On Tue, Mar 14, 2017 at 01:29:43PM +0100, Juan Quintela wrote:
>> Chao Fan <fanc.fnst@cn.fujitsu.com> wrote:
>> > In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
>> > It's also better for other tools to determine the cpu throttle
>> > value in different architecture.
>> >
>> > Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> > Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>> 
>> I agree with Daniel here, you can't change the meaning of a field.  Look
>> at skipped pages.  It is zero know because it is not used anymore, but
>> we can't drop it.
>> 
>> I think it is better to expose page_size.  We have now
>> 
>> trasferred: bytes
>> total: bytes
>> duplicate: number of zero pages
>> skipped: always zero.
>> normal: number of normal pages
>> normal_bytes: the same  in bytes
>> mbps: megabytes per second?  I can't even remember this one
>> dirty_sync_count: number of times we have go through the whole memory
>> postcopy_requests = number of pages asked by postcopy faults?
>> dirty_pages_rate = pages by some kind of unit
>> 
>> And we haven't yet started with compression or xbzrle.  I think that the
>> best approach at this point is putting everything in pages except the
>> things that don't make sense.
>> 
>> We can put everything on bytes, but then everything is HUGE.
>> 
>> Anyways, what do libvirt/management apps preffer?
>
>Since we have many fields already which are reported as page counts, I
>think just adding page size would be preferrable to having twice as many
>fields reported duplicating bytes + pages.
>
>The only reason to favour duplicating all fields to report bytes, is if
>we needed to vary page size to deal with huge pages (eg if some reported
>pages were 4kb and other reported pages with 2MB). You can easily just
>scale huge pages counts to be "normal"  pages for purpose of reporting
>though.
>Regards,
>Daniel

Hi Juan and Daniel,

I am wondering if it's OK to expose page_size in qmp or hmp, just like
a new command 'info page_size'.
If confirmed,I will make the new patch.

Thanks,
Chao Fan

>-- 
>|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
>|: http://libvirt.org              -o-             http://virt-manager.org :|
>|: http://entangle-photo.org       -o-    http://search.cpan.org/~danberr/ :|
>
>
Daniel P. Berrangé March 15, 2017, 9:42 a.m. UTC | #10
On Wed, Mar 15, 2017 at 12:13:58PM +0800, Chao Fan wrote:
> On Tue, Mar 14, 2017 at 12:37:30PM +0000, Daniel P. Berrange wrote:
> >On Tue, Mar 14, 2017 at 01:29:43PM +0100, Juan Quintela wrote:
> >> Chao Fan <fanc.fnst@cn.fujitsu.com> wrote:
> >> > In hmp, dirty-bytes-rate is more friendly than dirty-pages-rate.
> >> > It's also better for other tools to determine the cpu throttle
> >> > value in different architecture.
> >> >
> >> > Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
> >> > Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> >> 
> >> I agree with Daniel here, you can't change the meaning of a field.  Look
> >> at skipped pages.  It is zero know because it is not used anymore, but
> >> we can't drop it.
> >> 
> >> I think it is better to expose page_size.  We have now
> >> 
> >> trasferred: bytes
> >> total: bytes
> >> duplicate: number of zero pages
> >> skipped: always zero.
> >> normal: number of normal pages
> >> normal_bytes: the same  in bytes
> >> mbps: megabytes per second?  I can't even remember this one
> >> dirty_sync_count: number of times we have go through the whole memory
> >> postcopy_requests = number of pages asked by postcopy faults?
> >> dirty_pages_rate = pages by some kind of unit
> >> 
> >> And we haven't yet started with compression or xbzrle.  I think that the
> >> best approach at this point is putting everything in pages except the
> >> things that don't make sense.
> >> 
> >> We can put everything on bytes, but then everything is HUGE.
> >> 
> >> Anyways, what do libvirt/management apps preffer?
> >
> >Since we have many fields already which are reported as page counts, I
> >think just adding page size would be preferrable to having twice as many
> >fields reported duplicating bytes + pages.
> >
> >The only reason to favour duplicating all fields to report bytes, is if
> >we needed to vary page size to deal with huge pages (eg if some reported
> >pages were 4kb and other reported pages with 2MB). You can easily just
> >scale huge pages counts to be "normal"  pages for purpose of reporting
> >though.
> 
> I am wondering if it's OK to expose page_size in qmp or hmp, just like
> a new command 'info page_size'.
> If confirmed,I will make the new patch.

I'd suggest having it as a field of "info migrate"

Regards,
Daniel
diff mbox

Patch

diff --git a/hmp.c b/hmp.c
index 261843f..7334bc5 100644
--- a/hmp.c
+++ b/hmp.c
@@ -215,9 +215,9 @@  void hmp_info_migrate(Monitor *mon, const QDict *qdict)
                        info->ram->normal_bytes >> 10);
         monitor_printf(mon, "dirty sync count: %" PRIu64 "\n",
                        info->ram->dirty_sync_count);
-        if (info->ram->dirty_pages_rate) {
-            monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n",
-                           info->ram->dirty_pages_rate);
+        if (info->ram->dirty_bytes_rate) {
+            monitor_printf(mon, "dirty bytes rate: %" PRIu64 " bytes/s\n",
+                           info->ram->dirty_bytes_rate);
         }
         if (info->ram->postcopy_requests) {
             monitor_printf(mon, "postcopy request count: %" PRIu64 "\n",
diff --git a/migration/migration.c b/migration/migration.c
index 3dab684..7e7b62c 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -648,7 +648,7 @@  static void populate_ram_info(MigrationInfo *info, MigrationState *s)
 
     if (s->state != MIGRATION_STATUS_COMPLETED) {
         info->ram->remaining = ram_bytes_remaining();
-        info->ram->dirty_pages_rate = s->dirty_pages_rate;
+        info->ram->dirty_bytes_rate = s->dirty_bytes_rate;
     }
 }
 
diff --git a/qapi-schema.json b/qapi-schema.json
index 32b4a4b..83a45f8 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -565,9 +565,6 @@ 
 #
 # @normal-bytes: number of normal bytes sent (since 1.2)
 #
-# @dirty-pages-rate: number of pages dirtied by second by the
-#        guest (since 1.3)
-#
 # @mbps: throughput in megabits/sec. (since 1.6)
 #
 # @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
@@ -575,12 +572,15 @@ 
 # @postcopy-requests: The number of page requests received from the destination
 #        (since 2.7)
 #
+# @dirty-bytes-rate: how many bytes  dirtied by second by the
+#        guest (since 2.9)
+#
 # Since: 0.14.0
 ##
 { 'struct': 'MigrationStats',
   'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
            'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
-           'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
+           'normal-bytes': 'int', 'dirty-bytes-rate' : 'int',
            'mbps' : 'number', 'dirty-sync-count' : 'int',
            'postcopy-requests' : 'int' } }