[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC] handle tsc_tolerance during migration between identical hosts
On 11/04/17 11:39, Olaf Hering wrote: > Testing has shown that domUs with 'tsc_mode=default' can be migrated > safely between identical hardware, even if the measured clock frequency > differs by a few kHz. A change like shown below would allow to migrate > between "2.nnGHz" hosts without enforcing emulation. If the domU is > migrated to a host with "2.mmGHz" the frequency jump might have bad > effects, and tsc emulation might be good even if it comes with a > perfromance penalty. > > The change below adds a new boot option to set a tolerance value. > I think its up to the host admin to decide, therefore a global option > should be enough. > > Any opinions, also on the name of the cmdline option? > > > Olaf > > > --- a/xen/arch/x86/time.c > +++ b/xen/arch/x86/time.c > @@ -43,6 +43,9 @@ > static char __initdata opt_clocksource[10]; > string_param("clocksource", opt_clocksource); > > +static unsigned int __read_mostly opt_tsc_tolerance; > +integer_param("tsc_tolerance", opt_tsc_tolerance); > + > unsigned long __read_mostly cpu_khz; /* CPU clock frequency in kHz. */ > DEFINE_SPINLOCK(rtc_lock); > unsigned long pit0_ticks; > @@ -1882,6 +1885,8 @@ void tsc_set_info(struct domain *d, > uint32_t tsc_mode, uint64_t elapsed_nsec, > uint32_t gtsc_khz, uint32_t incarnation) > { > + uint32_t khz_diff, tolerated; Newline missing. > + printk(XENLOG_WARNING "%s: %u %x %lx %x %x\n", __func__, d->domain_id, > tsc_mode, (unsigned long)elapsed_nsec, gtsc_khz, incarnation); > if ( is_idle_domain(d) || is_hardware_domain(d) ) > { > d->arch.vtsc = 0; > @@ -1924,6 +1929,15 @@ void tsc_set_info(struct domain *d, > d->arch.vtsc_offset = get_s_time() - elapsed_nsec; > d->arch.tsc_khz = gtsc_khz ?: cpu_khz; > set_time_scale(&d->arch.vtsc_to_ns, d->arch.tsc_khz * 1000); > + khz_diff = 0; > + if (gtsc_khz) > + khz_diff = cpu_khz > gtsc_khz ? cpu_khz - gtsc_khz : gtsc_khz - > cpu_khz; > + if (opt_tsc_tolerance) { > + tolerated = khz_diff <= opt_tsc_tolerance; > + } else { > + tolerated = d->arch.tsc_khz == cpu_khz; > + } Why so complicated? khz_diff = cpu_khz > d->arch.tsc_khz ? cpu_khz - d->arch.tsc_khz : d->arch.tsc_khz - cpu_khz; tolerated = khz_diff <= opt_tsc_tolerance; should work as well. Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |