Clock not moving in virtual machine

Alexander Motin mav at FreeBSD.org
Fri Jul 16 20:47:30 UTC 2010


Rob Farmer wrote:
>>> @@ -81,7 +81,10 @@
>>>  ppc0: Generic chipset (NIBBLE-only) in COMPATIBLE mode
>>>  ppc0: [ITHREAD]
>>>  ppbus0: <Parallel port bus> on ppc0
>>> -atrtc0: <AT Real Time Clock> at port 0x70 irq 8 on isa0
>>> +atrtc0: <AT realtime clock> at port 0x70 irq 8 on isa0
>>> +atrtc0: [FILTER]
>>> +Event timer "RTC" frequency 32768 Hz quality 0
>>> +Starting kernel event timers: LAPIC @ 200Hz, RTC @ 128Hz
>>>  Timecounters tick every 5.000 msec
>> Everything seems reasonable there. Try to collect more information:
>> sysctl kern.timecounter
>> sysctl kern.eventtimer
>> vmstat -ia
>> systat -vm 1 (presence and frequencies of interrupts)
>>
>> It could be a bug in emulation of some timers or bug in respective timer
>> driver, which was not triggered before last changes. You may try switch
>> to different timecounter by setting kern.timecounter.hardware, or
>> different eventtimers by setting kern.eventtimer.timer1 and
>> kern.eventtimer.timer2 sysctls.
> 
> This is all on the new (not-working) kernel in single user mode:
> 
> # sysctl kern.timecounter
> kern.timecounter.tick: 1
> kern.timecounter.choice: TSC(-100) dummy(-1000000)
> kern.timecounter.hardware: dummy
> kern.timecounter.stepwarnings: 0
> kern.timecounter.tc.TSC.mask: 4294967295
> kern.timecounter.tc.TSC.counter: 205772785
> kern.timecounter.tc.TSC.frequency: 2261052646
> kern.timecounter.tc.TSC.quality: -100
> kern.timecounter.smp_tsc: 0
> kern.timecounter.invariant_tsc: 1
> 
> kern.timecounter.tc.TSC.counter changes everytime (205772785,
> 3200717147, 1205899870, ...) but I can't see any pattern.

It is probably hard to see pattern due to to very high clock frequency.
But TSC timecounter is unreliable even on real SMP systems. What it
counts on virtual SMP - even bigger question. As system seems never uses
timecounters with negative quality - you've left with
kern.timecounter.hardware=dummy - that's why time is not going. As last
resort you may try to set sysctl kern.timecounter.hardware=TSC in run time.

Previously you were using i8254 timecounter, but now you lost it as your
virtual machine PnP BIOS doesn't announce it. QEMU does the same, but
instead it gives HPET which your emulator seems also doesn't. To force
i8254 presence add to the /boot/device.hints lines:
hint.attimer.0.at="isa"
hint.attimer.0.port="0x40"
hint.attimer.0.irq="0"

-- 
Alexander Motin


More information about the freebsd-current mailing list