From: Arjan Koers <0h61vkll2ly8@xutrox.com>
To: Zachary Amsden <zamsden@redhat.com>
Cc: kvm@vger.kernel.org, Avi Kivity <avi@redhat.com>,
Glauber Costa <glommer@redhat.com>
Subject: Re: 2.6.35-rc1 regression with pvclock and smp guests
Date: Sat, 31 Jul 2010 13:53:45 +0200 [thread overview]
Message-ID: <4C540EC9.1010008@xutrox.com> (raw)
In-Reply-To: <4C538CCE.1010104@redhat.com>
On 2010-07-31 04:39, Zachary Amsden wrote:
> On 07/30/2010 02:34 PM, Arjan Koers wrote:
>> On 2010-07-28 12:37, Avi Kivity wrote:
>>
>>> On 07/28/2010 12:00 AM, Arjan Koers wrote:
>>>
>>>> On 2010-07-26 20:59, Arjan Koers wrote:
>>>>
>>>>
>>>>> I ran into the same problem. 2.6.34.1 and 2.6.35-rc6 SMP guest
>>>>> kernels hang during boot.
>>>>>
>>>> It appears that last is way ahead of ret twice.
>>>> The kernel boots with this debug patch that makes the clock go
>>>> backwards if the difference is big:
>>>>
>>>> last = atomic64_read(&last_value);
>>>> do {
>>>> - if (ret< last)
>>>> - return last;
>>>> + if (ret< last) {
>>>> + if ( last - ret< 25000000 )
>>>> + return last;
>>>> + else
>>>> + printk("pvclock backwards: ret = %llx; last =
>>>> %llx\n", ret, last);
>>>> + }
>>>> last = atomic64_cmpxchg(&last_value, last, ret);
>>>> } while (unlikely(last != ret));
>>>>
>>>>
>>>>
>>>> [ 0.037122] Total of 2 processors activated (11198.08 BogoMIPS).
>>>> [ 0.037118] x86 PAT enabled: cpu 1, old 0x0, new 0x7010600070106
>>>> [ 0.040000] pvclock backwards: ret = 108373705fe2; last =
>>>> 210aff61470a
>>>>
>>> Zaaaacchhhh?!
>>>
>>>
>>
>> The lists below show some debug data of the first 99 calls to
>> pvclock_clocksource_read since the kernel booted. The situation
>> after the 'do ... while (version != src->version)' loop is
>> displayed.
>>
>> Meaning of the columns:
>> - src pointer
>> - shadow.tsc_timestamp
>> - shadow.system_timestamp
>> - shadow.version
>> - native_read_tsc()
>> - delta = native_read_tsc() - shadow.tsc_timestamp
>> - offset = scale_delta(delta, shadow.tsc_to_nsec_mul, shadow.tsc_shift)
>> - ret = shadow.system_timestamp + offset
>>
>> Fields left out, because they were the same for all rows:
>> - shadow.tsc_to_nsec_mul: b6dc43b6
>> - shadow.tsc_shift: ffffffff
>> - shadow.flags: 0
>>
>> Debug log of guest after cold boot of virtual machine:
<snip>
>> 70: ffff880001411c00 232f4a54e b42c0e25f5e7 c17c
>> 232f63f61 19a13 9274 b42c0e26885b
>> 71: ffff880001511c00 20afec946 b42bffe0b604 130 1f890681eacdf
>> 1f88e5d1fe399 b433ab005565 1685faae10b69
>>
>
> Okay, I think I know what's going on and why Glauber's patch causes
> problems for you. It looks like your kernel is reading the kvmclock on
> the AP before it is initialized. Looking at the guest side of things,
> it seems entirely plausible this could happen.
>
> You did mention printk timing causes the bug to appear? Perhaps it is
> not just coincidental. Printk getting the time might very well call
> back into the timer code before the clock is initialized, and you've got
> tons of stuff in cpu_init and friends that are likely to want to printk
> all kinds of bootup messages.
>
> If this were in fact the case, the cmpxchg that was added by Glauber's
> patch could leap your clock forward to some very uninitialized random
> value and then you could end up stuck in a timeout loop for days, as you
> are seeing.
Yes. That large wrong value is stored in last_value and all future correct
values are ignored, because they are smaller then last_value.
> Can you try very simply disabling printk timing to see if that might be
> the source of the bug? In the meantime, what kernel version do you have
> in the guests?
The kernel boots successfully when CONFIG_PRINTK_TIME is not set.
I'm testing with 2.6.35-rc6 now. The problem also occurs with 2.6.34.1,
which also has Glauber's patch. Version 2.6.34 is working.
next prev parent reply other threads:[~2010-07-31 11:53 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-22 12:53 2.6.35-rc1 regression with pvclock and smp guests Andre Przywara
2010-07-25 8:44 ` Avi Kivity
2010-07-26 8:47 ` Andre Przywara
2010-07-26 18:59 ` Arjan Koers
2010-07-27 21:00 ` Arjan Koers
2010-07-28 10:37 ` Avi Kivity
2010-07-31 0:34 ` Arjan Koers
2010-07-31 1:38 ` Zachary Amsden
2010-07-31 11:50 ` Arjan Koers
2010-07-31 2:39 ` Zachary Amsden
2010-07-31 11:53 ` Arjan Koers [this message]
2010-07-31 16:36 ` Arjan Koers
2010-07-31 19:45 ` Arjan Koers
2010-07-31 23:55 ` Zachary Amsden
2010-08-02 14:43 ` Glauber Costa
2010-08-02 16:16 ` Arjan Koers
2010-08-02 18:07 ` Glauber Costa
2010-08-02 20:26 ` Zachary Amsden
2010-08-02 21:10 ` Glauber Costa
2010-08-02 21:35 ` Arjan Koers
2010-08-03 0:00 ` Zachary Amsden
2010-09-28 11:16 ` Michael Tokarev
2010-09-29 8:12 ` Michael Tokarev
2010-09-29 8:28 ` Avi Kivity
2010-09-29 9:17 ` Michael Tokarev
2010-09-29 9:19 ` Michael Tokarev
2010-09-29 19:26 ` Arjan Koers
2010-09-30 7:55 ` Michael Tokarev
2010-09-30 9:59 ` Michael Tokarev
2010-09-30 13:54 ` Zachary Amsden
2010-09-30 15:12 ` Michael Tokarev
2010-09-30 15:32 ` Zachary Amsden
2010-09-30 18:49 ` Arjan Koers
2010-09-30 19:05 ` Marcelo Tosatti
2010-09-30 20:16 ` Arjan Koers
2010-09-30 23:02 ` Michael Tokarev
2010-09-30 23:07 ` Michael Tokarev
2010-10-01 1:13 ` Zachary Amsden
2010-10-02 5:35 ` Zachary Amsden
2010-10-02 7:35 ` Michael Tokarev
2010-10-02 7:40 ` Michael Tokarev
2010-10-02 7:50 ` Michael Tokarev
2010-10-02 16:10 ` Arjan Koers
2010-10-02 20:26 ` Michael Tokarev
2010-10-02 23:42 ` Zachary Amsden
2010-10-03 8:27 ` Michael Tokarev
2010-10-08 0:12 ` Arjan Koers
2010-10-08 2:47 ` Zachary Amsden
2010-10-08 22:06 ` Marcelo Tosatti
2010-10-09 1:10 ` Arjan Koers
2010-10-09 2:27 ` Zachary Amsden
2010-10-09 6:29 ` Michael Tokarev
2010-10-09 8:59 ` Arjan Koers
2010-10-11 20:47 ` Zachary Amsden
2010-10-13 12:18 ` Glauber Costa
2010-10-10 1:20 ` Arjan Koers
2010-10-11 17:53 ` Anthony Liguori
2010-10-11 18:36 ` Marcelo Tosatti
2010-10-09 2:29 ` Zachary Amsden
2010-10-10 1:26 ` Arjan Koers
2010-10-20 20:47 ` Arjan Koers
2010-10-09 7:59 ` Michael Tokarev
2010-10-09 8:31 ` Michael Tokarev
2010-10-02 21:55 ` Zachary Amsden
2010-10-03 8:16 ` Michael Tokarev
2010-10-03 8:22 ` Avi Kivity
2010-10-03 8:30 ` Michael Tokarev
2010-07-27 10:03 ` Avi Kivity
2010-07-27 11:49 ` Andre Przywara
2010-07-27 12:06 ` Avi Kivity
2010-07-27 12:21 ` Andre Przywara
2010-07-27 12:34 ` Avi Kivity
2010-07-27 13:48 ` Andre Przywara
2010-07-27 13:58 ` Avi Kivity
2010-07-27 14:55 ` Andre Przywara
2010-07-27 21:51 ` Andre Przywara
2010-07-28 3:00 ` Zachary Amsden
2010-07-28 7:55 ` Andre Przywara
2010-07-28 12:25 ` Andre Przywara
2010-07-30 22:54 ` Zachary Amsden
2010-08-02 10:12 ` Andre Przywara
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=4C540EC9.1010008@xutrox.com \
--to=0h61vkll2ly8@xutrox.com \
--cc=avi@redhat.com \
--cc=glommer@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=zamsden@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox