qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 4/4] migration/dirtyrate: implement dirty-bitmap dirtyrate ca


From: Peter Xu
Subject: Re: [PATCH 4/4] migration/dirtyrate: implement dirty-bitmap dirtyrate calculation
Date: Fri, 9 Jul 2021 14:32:57 -0400

On Sun, Jun 27, 2021 at 01:38:17PM +0800, huangy81@chinatelecom.cn wrote:
> +static void calculate_dirtyrate_dirty_bitmap(struct DirtyRateConfig config)
> +{
> +    int64_t msec = 0;
> +    int64_t start_time;
> +    uint64_t protect_flags = 0;
> +    uint64_t initially_set = 0;
> +    uint64_t protect_only = 0;
> +
> +    protect_flags = kvm_get_manual_dirty_log_protect();
> +    protect_only = KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE;
> +    initially_set =
> +        (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE | KVM_DIRTY_LOG_INITIALLY_SET);
> +
> +    dirtyrate_global_dirty_log_start();
> +
> +    /* absense of migration */
> +    if (!(global_dirty_tracking & GLOBAL_DIRTY_MIGRATION)) {
> +        if ((protect_flags & initially_set) == initially_set) {
> +            /* skip the 1'round which return all 1 bits */
> +            memory_global_dirty_log_sync();
> +            /*
> +             * reset page protect manually and
> +             * start dirty tracking from now on
> +             **/
> +            dirtyrate_manual_reset_protect();
> +        }
> +    }

Right, clear dirty log is a bit tricky.

Wondering whether we can simplify this into something like:

  1. dirty_log_sync()
  2. if (manual_protect) reset_protect()
  3. record initial total dirty stats (total dirty stats updated when sync)
  4. sleep(SECONDS)
  5. dirty_log_sync()
  6. record final total dirty stats

Then I think it's not related to initial-all-set anymore. Do you think this
would work?

Thanks,

-- 
Peter Xu




reply via email to

[Prev in Thread] Current Thread [Next in Thread]