On Saturday, 2020-08-29 at 10:52:53 +08, Chuan Zheng wrote: > In order to sample real RAM, skip ramblock with size below MIN_RAMBLOCK_SIZE > which is set as 128M. > > Signed-off-by: Chuan Zheng <zhengch...@huawei.com>
Minor wordsmithing below, but... Reviewed-by: David Edmondson <david.edmond...@oracle.com> > --- > migration/dirtyrate.c | 19 +++++++++++++++++++ > migration/dirtyrate.h | 5 +++++ > 2 files changed, 24 insertions(+) > > diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c > index 9cc2cbb..420fc59 100644 > --- a/migration/dirtyrate.c > +++ b/migration/dirtyrate.c > @@ -164,6 +164,19 @@ alloc_ramblock_dirty_info(int *block_index, > return block_dinfo; > } > > +static bool skip_sample_ramblock(RAMBlock *block) > +{ > + /* > + * Consider ramblock with size larger than 128M is what we > + * want to sample. "Sample only blocks larger than MIN_RAMBLOCK_SIZE." > + */ > + if (qemu_ram_get_used_length(block) < (MIN_RAMBLOCK_SIZE << 10)) { > + return true; > + } > + > + return false; > +} > + > static int record_ramblock_hash_info(struct RamblockDirtyInfo **block_dinfo, > struct DirtyRateConfig config, > int *block_index) > @@ -174,6 +187,9 @@ static int record_ramblock_hash_info(struct > RamblockDirtyInfo **block_dinfo, > int index = 0; > > RAMBLOCK_FOREACH_MIGRATABLE(block) { > + if (skip_sample_ramblock(block)) { > + continue; > + } > dinfo = alloc_ramblock_dirty_info(&index, dinfo); > if (dinfo == NULL) { > return -1; > @@ -241,6 +257,9 @@ static int compare_page_hash_info(struct > RamblockDirtyInfo *info, > RAMBlock *block = NULL; > > RAMBLOCK_FOREACH_MIGRATABLE(block) { > + if (skip_sample_ramblock(block)) { > + continue; > + } > block_dinfo = find_page_matched(block, block_index + 1, info); > if (block_dinfo == NULL) { > continue; > diff --git a/migration/dirtyrate.h b/migration/dirtyrate.h > index a3ee305..faaf9da 100644 > --- a/migration/dirtyrate.h > +++ b/migration/dirtyrate.h > @@ -24,6 +24,11 @@ > */ > #define RAMBLOCK_INFO_MAX_LEN 256 > > +/* > + * Minimum RAMBlock size to sample, in megabytes. > + */ > +#define MIN_RAMBLOCK_SIZE 128 > + > struct DirtyRateConfig { > uint64_t sample_pages_per_gigabytes; /* sample pages per GB */ > int64_t sample_period_seconds; /* time duration between two sampling */ > -- > 1.8.3.1 dme. -- Jane was in her turtle neck, I was much happier then.