On Thu, Mar 23, 2017 at 09:45:09PM +0100, Juan Quintela wrote: > Signed-off-by: Juan Quintela <quint...@redhat.com>
Reviewed-by: Peter Xu <pet...@redhat.com> Another comment not directly related to this patch... > --- > migration/ram.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index 9fa3bd7..690ca8f 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -170,6 +170,8 @@ struct RAMState { > uint64_t zero_pages; > /* number of normal transferred pages */ > uint64_t norm_pages; > + /* Iterations since start */ > + uint64_t iterations; > }; > typedef struct RAMState RAMState; > > @@ -177,7 +179,6 @@ static RAMState ram_state; > > /* accounting for migration statistics */ > typedef struct AccountingInfo { > - uint64_t iterations; > uint64_t xbzrle_bytes; > uint64_t xbzrle_pages; > uint64_t xbzrle_cache_miss; > @@ -693,13 +694,13 @@ static void migration_bitmap_sync(RAMState *rs) > } > > if (migrate_use_xbzrle()) { > - if (rs->iterations_prev != acct_info.iterations) { > + if (rs->iterations_prev != rs->iterations) { > acct_info.xbzrle_cache_miss_rate = > (double)(acct_info.xbzrle_cache_miss - > rs->xbzrle_cache_miss_prev) / > - (acct_info.iterations - rs->iterations_prev); > + (rs->iterations - rs->iterations_prev); Here we are calculating cache miss rate by xbzrle_cache_miss and iterations. However looks like xbzrle_cache_miss is counted per guest page (in save_xbzrle_page()) while the iteration count is per host page (in ram_save_iterate()). Then, what if host page size not equals to guest page size? E.g., when host uses 2M huge pages, host page size is 2M, while guest page size can be 4K? Thanks, -- peterx