From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:42814) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SsAqU-0004qt-5s for qemu-devel@nongnu.org; Fri, 20 Jul 2012 06:54:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SsAqR-0001Ww-8d for qemu-devel@nongnu.org; Fri, 20 Jul 2012 06:54:06 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:51109) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SsAqR-0001Wc-1S for qemu-devel@nongnu.org; Fri, 20 Jul 2012 06:54:03 -0400 Received: by pbbro12 with SMTP id ro12so5957264pbb.4 for ; Fri, 20 Jul 2012 03:54:02 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Fri, 20 Jul 2012 12:53:46 +0200 Message-Id: <1342781633-7288-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 0/7] Remove periodic wakeup from RTC timer List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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