qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/7] Remove periodic wakeup from RTC timer
@ 2012-07-20 10:53 Paolo Bonzini
  2012-07-20 10:53 ` [Qemu-devel] [PATCH 1/7] RTC: Remove the logic to update time format when DM bit changed Paolo Bonzini
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Paolo Bonzini @ 2012-07-20 10:53 UTC (permalink / raw)
  To: qemu-devel

The current RTC emulation has two timers firing every second, one
on each edge of the UIP bit.  This will prevent CPUs from staying at
deep C-states.  Intel's measurements from previous submissions show the
C6 residency reduced by 6% when running 64 idle guests.

The following patches remove the two timers.  The patches update the RTC
clock only when the guest tries to read it, and only set timers when
update or alarm is clear.  Hence, a guest will typically fire the RTC
timer only twice, respectively one second after it starts and at the
next midnight.

The patches are mostly the work of Yang Zhang.  My contribution was
limited to reorganizing them for better bisectability, and cleaning
up the computation of UIP.

A qtest for this is not as reliable as a test that actually runs code
in a VM.  A qtest is more deterministic, and the "wiggling" introduced
by running code in the VM is much more likely to find bugs.  I'll post
the unit test separately.  Because the patches also improve the quality
of the emulation, this test fails without the patches.

The first three patches are simple preparatory changes.

The fourth patch removes the timers, and replaces them with a single
timer that is fired every second until UF and AF.  The update logic is
moved to the reading of the registers, and so is UIP.

The fifth patch implements support for divider reset, which helps
testing the RTC because it places it in a known state.

Finally, the sixth patch avoids firing the timer every second until
the next alarm, and the seventh implements migration support.

Paolo Bonzini (1):
  RTC: Do not fire timer periodically to catch next alarm

Zhang, Yang Z (6):
  RTC: Remove the logic to update time format when DM bit changed
  RTC: Rename rtc_timer_update
  RTC: Update interrupt state when interrupts are masked/unmasked
  RTC: Update the RTC clock only when reading it
  RTC: Add divider reset support
  RTC: Allow to migrate from old QEMU

 hw/mc146818rtc.c      |  507 ++++++++++++++++++++++++++++++++++---------------
 hw/mc146818rtc_regs.h |    1 +
 2 files changed, 359 insertions(+), 149 deletions(-)

-- 
1.7.10.2

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

end of thread, other threads:[~2012-07-23  7:30 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-20 10:53 [Qemu-devel] [PATCH 0/7] Remove periodic wakeup from RTC timer Paolo Bonzini
2012-07-20 10:53 ` [Qemu-devel] [PATCH 1/7] RTC: Remove the logic to update time format when DM bit changed Paolo Bonzini
2012-07-20 10:53 ` [Qemu-devel] [PATCH 2/7] RTC: Rename rtc_timer_update Paolo Bonzini
2012-07-20 10:53 ` [Qemu-devel] [PATCH 3/7] RTC: Update interrupt state when interrupts are masked/unmasked Paolo Bonzini
2012-07-20 10:53 ` [Qemu-devel] [PATCH 4/7] RTC: Update the RTC clock only when reading it Paolo Bonzini
2012-07-23  5:17   ` Juan Quintela
2012-07-23  7:19     ` Paolo Bonzini
2012-07-20 10:53 ` [Qemu-devel] [PATCH 5/7] RTC: Add divider reset support Paolo Bonzini
2012-07-20 10:53 ` [Qemu-devel] [PATCH 6/7] RTC: Do not fire timer periodically to catch next alarm Paolo Bonzini
2012-07-20 10:53 ` [Qemu-devel] [PATCH 7/7] RTC: Allow to migrate from old QEMU Paolo Bonzini
2012-07-20 17:38   ` Michael Roth
2012-07-20 19:02     ` Paolo Bonzini
2012-07-23  5:12   ` Juan Quintela
2012-07-23  7:30     ` Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).