On Wednesday, 2020-08-26 at 11:33:30 +01, Dr. David Alan Gilbert wrote: > * David Edmondson (d...@dme.org) wrote: >> On Monday, 2020-08-24 at 17:14:31 +08, Chuan Zheng wrote: >> >> > Add RamlockDirtyInfo to store sampled page info of each ramblock. >> > >> > Signed-off-by: Chuan Zheng <zhengch...@huawei.com> >> > --- >> > migration/dirtyrate.h | 18 ++++++++++++++++++ >> > 1 file changed, 18 insertions(+) >> > >> > diff --git a/migration/dirtyrate.h b/migration/dirtyrate.h >> > index 33669b7..70000da 100644 >> > --- a/migration/dirtyrate.h >> > +++ b/migration/dirtyrate.h >> > @@ -19,6 +19,11 @@ >> > */ >> > #define DIRTYRATE_DEFAULT_SAMPLE_PAGES 512 >> > >> > +/* >> > + * Record ramblock idstr >> > + */ >> > +#define RAMBLOCK_INFO_MAX_LEN 256 >> > + >> > /* Take 1s as default for calculation duration */ >> > #define DEFAULT_FETCH_DIRTYRATE_TIME_SEC 1 >> > >> > @@ -27,6 +32,19 @@ struct DirtyRateConfig { >> > int64_t sample_period_seconds; /* time duration between two sampling >> > */ >> > }; >> > >> > +/* >> > + * Store dirtypage info for each ramblock. >> > + */ >> > +struct RamblockDirtyInfo { >> > + char idstr[RAMBLOCK_INFO_MAX_LEN]; /* idstr for each ramblock */ >> > + uint8_t *ramblock_addr; /* base address of ramblock we measure */ >> > + uint64_t ramblock_pages; /* ramblock size in 4K-page */ >> >> It's probably a stupid question, but why not store a pointer to the >> RAMBlock rather than copying some of the details? > > I think I figured that out in the last round; this code runs as: > > rcu lock { > calculate initial CRCs > } > > <sleep 1 second ish> > rcu lock { > calculate new CRCs > } > > A RAMBlock might get deleted between the two.
Makes sense, thanks. dme. -- Why does it have to be like this? I can never tell.