Paolo Bonzini wrote on 2012-08-02:
> 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.

Thanks for your review and great effort to push those patches. 
 
> 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 four patches are simple preparatory changes.
> 
> The fifth 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 sixth patch implements support for divider reset, which helps testing
> the RTC because it places it in a known state.  The seventh patch avoids
> firing the timer every second until the next alarm.
> 
> The next two patches clean up the state of the RTC to eliminate a useless
> duplication, and the tenth completes migration support.  Still, backwards
> migration is broken because the algorithms in the new device model are
> pretty much completely different.  Downstreams that care should include
> both device models and pick the old one for old machine types.
> 
> v1->v2: annotate versions correctly in the vmstate, added new
>         patches to remove current_tm
> Paolo Bonzini (4):
>   vmstate: add VMSTATE_TIMER_V
>   RTC: Do not fire timer periodically to catch next alarm
>   RTC: Get and set time without going through s->current_tm
>   RTC: Remove the current_tm field
> Yang Zhang (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      |  540
>  ++++++++++++++++++++++++++++++++++--------------- hw/mc146818rtc_regs.h
>  |    1 + vmstate.h             |    5 +- 3 files changed, 377
>  insertions(+), 169 deletions(-)
> --
> 1.7.10.4

Best regards,
Yang


Reply via email to