All of lore.kernel.org
 help / color / mirror / Atom feed
* TSC in qem[-kvm] 1.1+ and in-kernel irqchip
@ 2012-08-09 18:27 ` Michael Tokarev
  0 siblings, 0 replies; 26+ messages in thread
From: Michael Tokarev @ 2012-08-09 18:27 UTC (permalink / raw)
  To: KVM list; +Cc: Avi Kivity, Gerd Hoffmann, qemu-devel

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

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2012-08-14  7:41 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-09 18:27 TSC in qem[-kvm] 1.1+ and in-kernel irqchip Michael Tokarev
2012-08-09 18:27 ` [Qemu-devel] " 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

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.