From: Paolo Bonzini <pbonzini@redhat.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: "Fernando Luis Vázquez Cao" <fernando_b1@lab.ntt.co.jp>,
"Gleb Natapov" <gleb@kernel.org>,
"Will Auld" <will.auld@intel.com>,
qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: Re: [PATCH] target-i386: clear guest TSC on reset
Date: Thu, 05 Dec 2013 17:32:54 +0100 [thread overview]
Message-ID: <52A0AAB6.3090104@redhat.com> (raw)
In-Reply-To: <20131205161234.GA17277@amt.cnet>
Il 05/12/2013 17:12, Marcelo Tosatti ha scritto:
>> > - call kvm_set_ticks() from cpu_set_ticks() and cpu_enable_ticks()
> env->tsc is just a placeholder for the vcpu TSC.
>
> A vcpus TSC from QEMU's point of view is a register initialized to zero,
> which requires read/write from KVM, and migration.
QEMU already tracks the TSC in cpu_get_ticks(). So far this is used
only for TCG, but for example the code is there that preserves the TSC
when you stop/resume the VM and when you migrate the VM. Reset is not
yet there, which is a bug similar to the one Fernando is trying to solve
for KVM.
So, from QEMU's point of view the TSC should be a global value across
the whole system (timer_state.cpu_ticks_offset) + a per-VCPU TSC offset
(env->tsc_adjust). When talking to KVM, the per-VCPU TSC offset in turn
has two parts, both set with KVM_SET_MSRS: one is computed from
MSR_IA32_TSC, the other comes from MSR_IA32_TSC_ADJUST.
The point here would be to treat it as such.
With this change, env->tsc need not be migrated. The global value
timer_state.cpu_ticks_offset is migrated already. The host-side TSC
adjust can be computed from rdtsc()-timer_state.cpu_ticks_offset on the
destination machine and/or at reset time. The guest-side TSC adjust is
env->tsc_adjust as it is now.
Paolo
WARNING: multiple messages have this Message-ID (diff)
From: Paolo Bonzini <pbonzini@redhat.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: "Gleb Natapov" <gleb@kernel.org>,
"Will Auld" <will.auld@intel.com>,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
"Fernando Luis Vázquez Cao" <fernando_b1@lab.ntt.co.jp>
Subject: Re: [Qemu-devel] [PATCH] target-i386: clear guest TSC on reset
Date: Thu, 05 Dec 2013 17:32:54 +0100 [thread overview]
Message-ID: <52A0AAB6.3090104@redhat.com> (raw)
In-Reply-To: <20131205161234.GA17277@amt.cnet>
Il 05/12/2013 17:12, Marcelo Tosatti ha scritto:
>> > - call kvm_set_ticks() from cpu_set_ticks() and cpu_enable_ticks()
> env->tsc is just a placeholder for the vcpu TSC.
>
> A vcpus TSC from QEMU's point of view is a register initialized to zero,
> which requires read/write from KVM, and migration.
QEMU already tracks the TSC in cpu_get_ticks(). So far this is used
only for TCG, but for example the code is there that preserves the TSC
when you stop/resume the VM and when you migrate the VM. Reset is not
yet there, which is a bug similar to the one Fernando is trying to solve
for KVM.
So, from QEMU's point of view the TSC should be a global value across
the whole system (timer_state.cpu_ticks_offset) + a per-VCPU TSC offset
(env->tsc_adjust). When talking to KVM, the per-VCPU TSC offset in turn
has two parts, both set with KVM_SET_MSRS: one is computed from
MSR_IA32_TSC, the other comes from MSR_IA32_TSC_ADJUST.
The point here would be to treat it as such.
With this change, env->tsc need not be migrated. The global value
timer_state.cpu_ticks_offset is migrated already. The host-side TSC
adjust can be computed from rdtsc()-timer_state.cpu_ticks_offset on the
destination machine and/or at reset time. The guest-side TSC adjust is
env->tsc_adjust as it is now.
Paolo
next prev parent reply other threads:[~2013-12-05 16:33 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-03 7:08 [PATCH] kvm: clear guest TSC on reset Fernando Luis Vázquez Cao
2013-12-03 8:04 ` Fernando Luis Vázquez Cao
2013-12-05 6:08 ` Fernando Luis Vázquez Cao
2013-12-05 6:08 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-05 6:15 ` [PATCH] target-i386: " Fernando Luis Vázquez Cao
2013-12-05 6:15 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-05 9:28 ` Paolo Bonzini
2013-12-05 9:28 ` [Qemu-devel] " Paolo Bonzini
2013-12-05 13:15 ` Fernando Luis Vazquez Cao
2013-12-05 13:15 ` [Qemu-devel] " Fernando Luis Vazquez Cao
2013-12-05 13:53 ` Paolo Bonzini
2013-12-05 13:53 ` [Qemu-devel] " Paolo Bonzini
2013-12-05 15:42 ` Fernando Luis Vazquez Cao
2013-12-05 15:42 ` [Qemu-devel] " Fernando Luis Vazquez Cao
2013-12-05 16:02 ` Paolo Bonzini
2013-12-05 16:02 ` [Qemu-devel] " Paolo Bonzini
2013-12-05 16:40 ` Marcelo Tosatti
2013-12-05 16:40 ` [Qemu-devel] " Marcelo Tosatti
2013-12-05 17:06 ` Marcelo Tosatti
2013-12-05 17:06 ` [Qemu-devel] " Marcelo Tosatti
2013-12-05 16:17 ` Marcelo Tosatti
2013-12-05 16:17 ` [Qemu-devel] " Marcelo Tosatti
2013-12-05 16:38 ` Paolo Bonzini
2013-12-05 16:38 ` [Qemu-devel] " Paolo Bonzini
2013-12-06 8:24 ` Fernando Luis Vázquez Cao
2013-12-06 8:24 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-06 8:33 ` [PATCH 1//2 v3] " Fernando Luis Vázquez Cao
2013-12-06 8:33 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-06 8:38 ` [PATCH 2/2] target-i386: do not special case TSC writeback Fernando Luis Vázquez Cao
2013-12-06 8:38 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-06 8:36 ` [PATCH] target-i386: clear guest TSC on reset Paolo Bonzini
2013-12-06 8:36 ` [Qemu-devel] " Paolo Bonzini
2013-12-06 8:56 ` Fernando Luis Vázquez Cao
2013-12-06 8:56 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-06 9:08 ` Paolo Bonzini
2013-12-06 9:08 ` [Qemu-devel] " Paolo Bonzini
2013-12-06 9:20 ` Fernando Luis Vazquez Cao
2013-12-06 9:20 ` [Qemu-devel] " Fernando Luis Vazquez Cao
2013-12-06 14:22 ` Marcelo Tosatti
2013-12-06 14:22 ` [Qemu-devel] " Marcelo Tosatti
2013-12-09 8:50 ` Fernando Luis Vázquez Cao
2013-12-09 8:50 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-12 2:52 ` Fernando Luis Vázquez Cao
2013-12-12 2:52 ` [Qemu-devel] " Fernando Luis Vázquez Cao
2013-12-12 12:18 ` Paolo Bonzini
2013-12-12 12:18 ` [Qemu-devel] " Paolo Bonzini
2013-12-05 16:12 ` Marcelo Tosatti
2013-12-05 16:12 ` [Qemu-devel] " Marcelo Tosatti
2013-12-05 16:32 ` Paolo Bonzini [this message]
2013-12-05 16:32 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52A0AAB6.3090104@redhat.com \
--to=pbonzini@redhat.com \
--cc=fernando_b1@lab.ntt.co.jp \
--cc=gleb@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=will.auld@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.