From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53524) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TB7QN-000422-JS for qemu-devel@nongnu.org; Mon, 10 Sep 2012 13:05:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TB7QI-0007on-Ej for qemu-devel@nongnu.org; Mon, 10 Sep 2012 13:05:27 -0400 Received: from mail-wi0-f181.google.com ([209.85.212.181]:37856) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TB7QI-0007nI-80 for qemu-devel@nongnu.org; Mon, 10 Sep 2012 13:05:22 -0400 Received: by wibhm2 with SMTP id hm2so1755110wib.10 for ; Mon, 10 Sep 2012 10:05:21 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <504E1DCC.3040608@redhat.com> Date: Mon, 10 Sep 2012 19:05:16 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1343923453-13026-1-git-send-email-pbonzini@redhat.com> In-Reply-To: <1343923453-13026-1-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 00/10] Remove periodic wakeup from RTC timer List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: yang.z.zhang@intel.com, aliguori@linux.vnet.ibm.com, quintela@redhat.com, qemu-devel@nongnu.org, mdroth@linux.vnet.ibm.com 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