From: Michael Tokarev <mjt@tls.msk.ru> To: KVM list <kvm@vger.kernel.org> Cc: Avi Kivity <avi@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>, qemu-devel <qemu-devel@nongnu.org> Subject: TSC in qem[-kvm] 1.1+ and in-kernel irqchip Date: Thu, 09 Aug 2012 22:27:43 +0400 [thread overview] Message-ID: <5024011F.2020200@msgid.tls.msk.ru> (raw) As a follow-up to the patch "tsc: use kvmclock for calibration". There's another problem reported by several users. The sympthom is that grub does not show boot menu, it boots default entry right away without any pause. After quite some debugging it turned out to be TSC issue. Grub uses tsc for its timeout handling. When setting timeout to some very large value (10000), I can see the counter is ticking backwards at a very high speed, ticking from 10000 to 0 in about 5 seconds. Running kvm -cpu host,-tsc forces grub to use rtc clocksource, and the problem goes away. The most interesting thing is that this is a problem new for qemu-kvm 1.1 (and is still present in current git), 1.0 version had no such issue. And it only happens when in-kernel irqchip is enabled -- running with -no-kvm-irqchip also fixes the grub problem, so that tsc starts counting "correctly" for grub again. Gerd mentioned mis-calibration of bios timer when host is heavily loaded. I tested grub on my workstation today which was completely idle, no other processes running. It smells like a bug in kvm somewhere. And it happens when I explicitly pin kvm to a single core, so tsc should tick correctly even if its syncronization is broken between cores. Current qemu also has this issue (since 1.1), since it also has in-kernel irqchip support now. FWIW, here's the TSC calibration routine from grub: /* Calibrate the TSC based on the RTC. */ static void calibrate_tsc (void) { /* First calibrate the TSC rate (relative, not absolute time). */ grub_uint64_t start_tsc; grub_uint64_t end_tsc; start_tsc = grub_get_tsc (); grub_pit_wait (0xffff); end_tsc = grub_get_tsc (); tsc_ticks_per_ms = grub_divmod64 (end_tsc - start_tsc, 55, 0); } Thanks, /mjt
WARNING: multiple messages have this Message-ID (diff)
From: Michael Tokarev <mjt@tls.msk.ru> To: KVM list <kvm@vger.kernel.org> Cc: qemu-devel <qemu-devel@nongnu.org>, Avi Kivity <avi@redhat.com>, Gerd Hoffmann <kraxel@redhat.com> Subject: [Qemu-devel] TSC in qem[-kvm] 1.1+ and in-kernel irqchip Date: Thu, 09 Aug 2012 22:27:43 +0400 [thread overview] Message-ID: <5024011F.2020200@msgid.tls.msk.ru> (raw) As a follow-up to the patch "tsc: use kvmclock for calibration". There's another problem reported by several users. The sympthom is that grub does not show boot menu, it boots default entry right away without any pause. After quite some debugging it turned out to be TSC issue. Grub uses tsc for its timeout handling. When setting timeout to some very large value (10000), I can see the counter is ticking backwards at a very high speed, ticking from 10000 to 0 in about 5 seconds. Running kvm -cpu host,-tsc forces grub to use rtc clocksource, and the problem goes away. The most interesting thing is that this is a problem new for qemu-kvm 1.1 (and is still present in current git), 1.0 version had no such issue. And it only happens when in-kernel irqchip is enabled -- running with -no-kvm-irqchip also fixes the grub problem, so that tsc starts counting "correctly" for grub again. Gerd mentioned mis-calibration of bios timer when host is heavily loaded. I tested grub on my workstation today which was completely idle, no other processes running. It smells like a bug in kvm somewhere. And it happens when I explicitly pin kvm to a single core, so tsc should tick correctly even if its syncronization is broken between cores. Current qemu also has this issue (since 1.1), since it also has in-kernel irqchip support now. FWIW, here's the TSC calibration routine from grub: /* Calibrate the TSC based on the RTC. */ static void calibrate_tsc (void) { /* First calibrate the TSC rate (relative, not absolute time). */ grub_uint64_t start_tsc; grub_uint64_t end_tsc; start_tsc = grub_get_tsc (); grub_pit_wait (0xffff); end_tsc = grub_get_tsc (); tsc_ticks_per_ms = grub_divmod64 (end_tsc - start_tsc, 55, 0); } Thanks, /mjt
next reply other threads:[~2012-08-09 18:27 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-08-09 18:27 Michael Tokarev [this message] 2012-08-09 18:27 ` [Qemu-devel] TSC in qem[-kvm] 1.1+ and in-kernel irqchip Michael Tokarev 2012-08-09 19:06 ` Marcelo Tosatti 2012-08-09 19:06 ` [Qemu-devel] " Marcelo Tosatti [not found] ` <20120809204748.GA32346@amt.cnet> 2012-08-09 21:36 ` Michael Tokarev 2012-08-09 21:36 ` [Qemu-devel] " Michael Tokarev 2012-08-10 7:33 ` Gleb Natapov 2012-08-10 7:33 ` Gleb Natapov 2012-08-10 9:24 ` Michael Tokarev 2012-08-10 9:24 ` Michael Tokarev 2012-08-12 8:10 ` Gleb Natapov 2012-08-12 8:10 ` [Qemu-devel] " Gleb Natapov 2012-08-12 9:24 ` Michael Tokarev 2012-08-12 9:24 ` [Qemu-devel] " Michael Tokarev 2012-08-13 13:07 ` Jan Kiszka 2012-08-13 13:07 ` [Qemu-devel] " Jan Kiszka 2012-08-13 13:16 ` Michael Tokarev 2012-08-13 13:16 ` Michael Tokarev 2012-08-13 13:41 ` Jan Kiszka 2012-08-13 13:41 ` Jan Kiszka 2012-08-13 18:18 ` [PATCH uq/master] kvm: i8254: Finish time conversion fix Jan Kiszka 2012-08-13 18:18 ` [Qemu-devel] " Jan Kiszka 2012-08-13 18:40 ` Michael Tokarev 2012-08-13 18:40 ` [Qemu-devel] " Michael Tokarev 2012-08-14 7:41 ` Jan Kiszka 2012-08-14 7:41 ` [Qemu-devel] " Jan Kiszka
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=5024011F.2020200@msgid.tls.msk.ru \ --to=mjt@tls.msk.ru \ --cc=avi@redhat.com \ --cc=kraxel@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=qemu-devel@nongnu.org \ /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: linkBe 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.