Timekeeping hosed by factor 3, high lapic[01] interrupt rates

John Baldwin jhb at FreeBSD.org
Fri Jun 17 19:20:45 GMT 2005


On Wednesday 08 June 2005 03:01 pm, Jens Schweikhardt wrote:
> On Thu, May 26, 2005 at 10:58:31PM +0200, Jens Schweikhardt wrote:
> # On Thu, May 26, 2005 at 10:30:16AM -0700, Doug White wrote:
> # # On Mon, 23 May 2005, Jens Schweikhardt wrote:
> # #
> # # > ...
> # # > # # 3. Backout rev 1.218 of src/sys/i386/isa/clock.c so the irq0
> interrupt # # > # # handler is reactivated and the RTC fiddled.
> # # > #
> # # > # Will do so next. I've nailed the change between March 6 and March
> 30. # # > # 1.218 is from 2005/03/24 21:34:16, which would fit.
> # # >
> # # > We have a winner. Backing out 1.218 from a 2005/03/24 system does the
> trick, # # > as well as a CURRENT without 1.218 (but 1.219-220 in there)
> bring back irq0 # # > and time dilation is gone. All clocks work correctly.
> # #
> # # Hm ... not sure what part of that commit is the bad part.  You might
> try # # changing
> # #
> # # if (!using_lapic_timer) {
> # #
> # # to
> # #
> # # if(1) {
> # #
> # # in the most recent rev of clock.c to register irq0 again.  If that
> doesn't # # chang ethe dialation then something else in the system must be
> depending # # on the RTC periodic interrupt.
> #
> # It does make time dilation go away.
>
> Any chance this gets backed out, or worked around, e.g. with a
> sysctl, device hint, or some other knob?

Is this the patch you are running with?

>Index: clock.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/isa/clock.c,v
retrieving revision 1.220
diff -u -r1.220 clock.c
--- clock.c     14 May 2005 09:10:01 -0000      1.220
+++ clock.c     27 May 2005 19:42:54 -0000
@@ -784,7 +784,7 @@
         * clocks, setup the interrupt handler for the 8254 timer 0 so
         * that it can drive hardclock().
         */
-       if (!using_lapic_timer) {
+       if (!using_lapic_timer || 1) {
                intr_add_handler("clk", 0, (driver_intr_t *)clkintr, NULL,
                    INTR_TYPE_CLK | INTR_FAST, NULL);
                i8254_intsrc = intr_lookup_source(0);

Also, can you get the output of 'sysctl kern.clockrate' for both cases?

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-current mailing list