From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: TSC deadline timer in guests vs. migration? Date: Tue, 5 Jul 2016 09:51:41 -0300 Message-ID: <20160705125140.GA17664@amt.cnet> References: <759376f0-e0bf-e53a-99e4-598bf14547e3@redhat.com> <20160704193005.GA28201@amt.cnet> <20160704194506.GE4131@thinpad.lan.raisama.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Paolo Bonzini , David Matlack , Peter Hornyack , KVM list To: Eduardo Habkost Return-path: Received: from mx1.redhat.com ([209.132.183.28]:46712 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752126AbcGEMyS (ORCPT ); Tue, 5 Jul 2016 08:54:18 -0400 Content-Disposition: inline In-Reply-To: <20160704194506.GE4131@thinpad.lan.raisama.net> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, Jul 04, 2016 at 04:45:06PM -0300, Eduardo Habkost wrote: > On Mon, Jul 04, 2016 at 04:30:08PM -0300, Marcelo Tosatti wrote: > > On Mon, Jul 04, 2016 at 01:01:42PM +0200, Paolo Bonzini wrote: > > > Can bad things happen if a guest using the TSC deadline timer is > > > migrated? The guest doesn't re-calibrate the TSC after migration, and > > > the TSC frequency can and will change unless your data center is > > > perfectly homogeneous. > > > > It can fire earlier if the destination runs at a higher frequency. > > It will fire past the configured time if the destination runs at a slower frequency. > > > > Suppose the first case is worse. > > > > Should convert the expiration time to nanoseconds i suppose, and then > > convert back on the destination. > > This won't make any difference if the guest sets up a new timer > after migration (but using the old TSC frequency), will it? It does, because the timer setup traps to the host, where you can convert it to the proper value: guest_tsc = kvm_x86_ops->read_l1_tsc(vcpu, native_read_tsc()); if (likely(tscdeadline > guest_tsc)) { ns = (tscdeadline - guest_tsc) * 1000000ULL; do_div(ns, this_tsc_khz); expire = ktime_add_ns(now, ns); expire = ktime_sub_ns(expire, lapic_timer_advance_ns); hrtimer_start(&apic->lapic_timer.timer, expire, HRTIMER_MODE_ABS); } else I've opened a BZ: feel free to take it, or make a reference to it if you submit a patch to fix it (including the CC'ed Google guys). https://bugzilla.redhat.com/show_bug.cgi?id=1352909