[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v7 1/3] migration/dirtyrate: implement vCPU dirtyrate calcula
From: |
Peter Xu |
Subject: |
Re: [PATCH v7 1/3] migration/dirtyrate: implement vCPU dirtyrate calculation periodically |
Date: |
Tue, 30 Nov 2021 21:04:36 +0800 |
On Tue, Nov 30, 2021 at 06:28:11PM +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);
> +
> + dirtylimit_global_dirty_log_start();
> +
> + 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;
> +
> + dirtylimit_global_dirty_log_stop();
I haven't looked into the details, but.. I'm wondering whether we should just
keep the dirty ring enabled during the whole process of throttling.
start/stop can be expensive, especially when huge pages are used, start dirty
tracking will start to do huge page split. While right after the "stop" all the
huge pages will need to be rebuild again.
David from Google is even proposing a kernel change to eagerly splitting huge
pages when dirty tracking is enabled.
So I think we can keep the dirty tracking enabled until all the vcpu throttles
are stopped.
> +
> + CPU_FOREACH(cpu) {
> + record_dirtypages(dirty_pages, cpu, false);
> + }
--
Peter Xu
Message not available
Re: [PATCH v7 0/3] support dirty restraint on vCPU, Peter Xu, 2021/11/30