qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 00/10] Remove periodic wakeup from RTC timer


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v3 00/10] Remove periodic wakeup from RTC timer
Date: Mon, 10 Sep 2012 19:05:16 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120717 Thunderbird/14.0

Il 02/08/2012 18:04, Paolo Bonzini ha scritto:
> 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
> to reorganize them for better bisectability, and cleaning up migration
> support as well as 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 five patches are simple preparatory changes.
> 
> The sixth 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.  With this in
> place we can implement support for divider reset (patch 7), which helps
> testing the RTC because it places it in a known state.
> 
> The eighth patch avoids firing the timer every second until the next
> alarm.  The final two patches clean up the state of the RTC to eliminate
> useless duplication.
> 
> 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.
> Forwards migration works, and I also tested migration (same version and
> forward) with a unit test for alarms.
> 
> v1->v2: annotate versions correctly in the vmstate, added new
>         patches to remove current_tm
> 
> v2->v3: use gmtime_r [Anthony], compute exact UIP hold time [Anthony],
>         do not use load_old [Juan] so migration remains bisectable
> 
> Paolo Bonzini (5):
>   RTC: introduce RTC_CLOCK_RATE
>   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 (5):
>   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
> 
>  hw/mc146818rtc.c      |  520 
> +++++++++++++++++++++++++++++++++----------------
>  hw/mc146818rtc_regs.h |    1 +
>  vmstate.h             |    5 +-
>  3 files changed, 354 insertions(+), 172 deletions(-)
> 

Ping! :)

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]