[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v9 1/3] migration/dirtyrate: implement vCPU dirtyrate calcula
From: |
Peter Xu |
Subject: |
Re: [PATCH v9 1/3] migration/dirtyrate: implement vCPU dirtyrate calculation periodically |
Date: |
Mon, 6 Dec 2021 18:18:35 +0800 |
On Fri, Dec 03, 2021 at 09:39:45AM +0800, huangy81@chinatelecom.cn wrote:
> +static void dirtylimit_calc_func(void)
> +{
> + CPUState *cpu;
> + DirtyPageRecord *dirty_pages;
> + int64_t start_time, end_time, calc_time;
> + DirtyRateVcpu rate;
> + int i = 0;
> +
> + dirty_pages = g_malloc0(sizeof(*dirty_pages) *
> + dirtylimit_calc_state->data.nvcpu);
> +
> + CPU_FOREACH(cpu) {
> + record_dirtypages(dirty_pages, cpu, true);
> + }
> +
> + start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> + g_usleep(DIRTYLIMIT_CALC_TIME_MS * 1000);
> + end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> + calc_time = end_time - start_time;
> +
> + qemu_mutex_lock_iothread();
> + memory_global_dirty_log_sync();
> + qemu_mutex_unlock_iothread();
> +
> + CPU_FOREACH(cpu) {
> + record_dirtypages(dirty_pages, cpu, false);
> + }
> +
> + for (i = 0; i < dirtylimit_calc_state->data.nvcpu; i++) {
> + uint64_t increased_dirty_pages =
> + dirty_pages[i].end_pages - dirty_pages[i].start_pages;
> + uint64_t memory_size_MB =
> + (increased_dirty_pages * TARGET_PAGE_SIZE) >> 20;
> + int64_t dirtyrate = (memory_size_MB * 1000) / calc_time;
> +
> + rate.id = i;
> + rate.dirty_rate = dirtyrate;
> + dirtylimit_calc_state->data.rates[i] = rate;
> +
> + trace_dirtyrate_do_calculate_vcpu(i,
> + dirtylimit_calc_state->data.rates[i].dirty_rate);
> + }
> +}
This looks so like the calc-dirty-rate code already.
I think adding a new resion (GLOBAL_DIRTY_LIMIT) is fine, however still, any
chance to merge the code?
--
Peter Xu