From: Ryan Harper <ryanh@us.ibm.com>
To: kvm-devel@lists.sourceforge.net
Subject: pinning, tsc and apic
Date: Mon, 12 May 2008 14:19:24 -0500 [thread overview]
Message-ID: <20080512191923.GU17938@us.ibm.com> (raw)
I've been digging into some of the instability we see when running
larger numbers of guests at the same time. The test I'm currently using
involves launching 64 1vcpu guests on an 8-way AMD box. With the latest
kvm-userspace git and kvm.git + Gerd's kvmclock fixes, I can launch all
64 of these 1 second apart, and only a handful (1 to 3) end up not
making it up. In dmesg on the host, I get a couple messages:
[321365.362534] vcpu not ready for apic_round_robin
and
[321503.023788] Unsupported delivery mode 7
Now, the interesting bit for me was when I used numactl to pin the guest
to a processor, all of the guests come up with no issues at all. As I
looked into it, it means that we're not running any of the vcpu
migration code which on svm is comprised of tsc_offset recalibration and
apic migration, and on vmx, a little more per-vcpu work
I've convinced myself that svm.c's tsc offset calculation works and
handles the migration from cpu to cpu quite well. I added the following
snippet to trigger if we ever encountered the case where we migrated to
a tsc that was behind:
rdtscll(tsc_this);
delta = vcpu->arch.host_tsc - tsc_this;
old_time = vcpu->arch.host_tsc + svm->vmcb->control.tsc_offset;
new_time = tsc_this + svm->vmcb->control.tsc_offset + delta;
if (new_time < old_time) {
printk(KERN_ERR "ACK! (CPU%d->CPU%d) time goes back %llu\n",
vcpu->cpu, cpu, old_time - new_time);
}
svm->vmcb->control.tsc_offset += delta;
Noting that vcpu->arch.host_tsc is the tsc of the previous cpu the vcpu
was running on (see svm_put_vcpu()). This allows me to check if we are
in fact increasing the guest's view of the tsc. I've not be able to
trigger this at all when the vcpus are migrating.
As for the apic, the migrate code seems to be rather simple, but I've
not yet dived in to see if we've got anything racy in there:
lapic.c:
void __kvm_migrate_apic_timer(struct kvm_vcpu *vcpu)
{
struct kvm_lapic *apic = vcpu->arch.apic;
struct hrtimer *timer;
if (!apic)
return;
timer = &apic->timer.dev;
if (hrtimer_cancel(timer))
hrtimer_start(timer, timer->expires, HRTIMER_MODE_ABS);
}
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
(512) 838-9253 T/L: 678-9253
ryanh@us.ibm.com
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
next reply other threads:[~2008-05-12 19:19 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-12 19:19 Ryan Harper [this message]
2008-05-12 19:49 ` pinning, tsc and apic Anthony Liguori
2008-05-12 21:23 ` Ryan Harper
2008-05-12 21:44 ` Anthony Liguori
2008-05-13 18:56 ` Ryan Harper
2008-05-14 23:25 ` Marcelo Tosatti
2008-05-14 23:45 ` Anthony Liguori
2008-05-15 6:59 ` Chris Wright
2008-05-15 14:10 ` Anthony Liguori
2008-05-15 16:26 ` Ryan Harper
2008-06-18 13:12 ` [kvm-devel] " Avi Kivity
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=20080512191923.GU17938@us.ibm.com \
--to=ryanh@us.ibm.com \
--cc=kvm-devel@lists.sourceforge.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox