Message ID | 1597634433-18809-9-git-send-email-zhengchuan@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | *** A Method for evaluating dirty page rate *** | expand |
* Chuan Zheng (zhengchuan@huawei.com) wrote: > Implement get_sample_page_period() and set_sample_page_period() to > sleep specific time between sample actions. > > Signed-off-by: Chuan Zheng <zhengchuan@huawei.com> > Signed-off-by: YanYing Zhuang <ann.zhuangyanying@huawei.com> > --- > migration/dirtyrate.c | 24 ++++++++++++++++++++++++ > migration/dirtyrate.h | 2 ++ > 2 files changed, 26 insertions(+) > > diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c > index 6f30f67..4bbfcc3 100644 > --- a/migration/dirtyrate.c > +++ b/migration/dirtyrate.c > @@ -28,6 +28,30 @@ CalculatingDirtyRateState CalculatingState = CAL_DIRTY_RATE_INIT; > static unsigned long int qcrypto_hash_len = QCRYPTO_HASH_LEN; > static struct DirtyRateStat dirty_stat; > > +static int64_t set_sample_page_period(int64_t msec, int64_t initial_time) > +{ > + int64_t current_time; > + > + current_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); > + if ((current_time - initial_time) >= msec) { > + msec = current_time - initial_time; > + } else { > + g_usleep((msec + initial_time - current_time) * 1000); > + } > + > + return msec; > +} > + > +static int64_t get_sample_page_period(int64_t sec) > +{ > + if (sec <= MIN_FETCH_DIRTYRATE_TIME_SEC || > + sec > MAX_FETCH_DIRTYRATE_TIME_SEC) { > + sec = DEFAULT_FETCH_DIRTYRATE_TIME_SEC; > + } > + > + return sec; > +} > + This is OK I think, but it does seem a bit complicated for just waiting for a time. Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > static int dirty_rate_set_state(int new_state) > { > int old_state = CalculatingState; > diff --git a/migration/dirtyrate.h b/migration/dirtyrate.h > index fce2e3b..86d8fa0 100644 > --- a/migration/dirtyrate.h > +++ b/migration/dirtyrate.h > @@ -38,6 +38,8 @@ > > /* Take 1s as default for calculation duration */ > #define DEFAULT_FETCH_DIRTYRATE_TIME_SEC 1 > +#define MIN_FETCH_DIRTYRATE_TIME_SEC 0 > +#define MAX_FETCH_DIRTYRATE_TIME_SEC 60 > > struct DirtyRateConfig { > uint64_t sample_pages_per_gigabytes; /* sample pages per GB */ > -- > 1.8.3.1 >
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c index 6f30f67..4bbfcc3 100644 --- a/migration/dirtyrate.c +++ b/migration/dirtyrate.c @@ -28,6 +28,30 @@ CalculatingDirtyRateState CalculatingState = CAL_DIRTY_RATE_INIT; static unsigned long int qcrypto_hash_len = QCRYPTO_HASH_LEN; static struct DirtyRateStat dirty_stat; +static int64_t set_sample_page_period(int64_t msec, int64_t initial_time) +{ + int64_t current_time; + + current_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + if ((current_time - initial_time) >= msec) { + msec = current_time - initial_time; + } else { + g_usleep((msec + initial_time - current_time) * 1000); + } + + return msec; +} + +static int64_t get_sample_page_period(int64_t sec) +{ + if (sec <= MIN_FETCH_DIRTYRATE_TIME_SEC || + sec > MAX_FETCH_DIRTYRATE_TIME_SEC) { + sec = DEFAULT_FETCH_DIRTYRATE_TIME_SEC; + } + + return sec; +} + static int dirty_rate_set_state(int new_state) { int old_state = CalculatingState; diff --git a/migration/dirtyrate.h b/migration/dirtyrate.h index fce2e3b..86d8fa0 100644 --- a/migration/dirtyrate.h +++ b/migration/dirtyrate.h @@ -38,6 +38,8 @@ /* Take 1s as default for calculation duration */ #define DEFAULT_FETCH_DIRTYRATE_TIME_SEC 1 +#define MIN_FETCH_DIRTYRATE_TIME_SEC 0 +#define MAX_FETCH_DIRTYRATE_TIME_SEC 60 struct DirtyRateConfig { uint64_t sample_pages_per_gigabytes; /* sample pages per GB */