Re: Clock not moving in virtual machine

From: Alexander Motin <mav_at_FreeBSD.org>
Date: Fri, 16 Jul 2010 23:47:23 +0300
Rob Farmer wrote:
>>> _at__at_ -81,7 +81,10 _at__at_
>>>  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 _at_ 200Hz, RTC _at_ 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
Received on Fri Jul 16 2010 - 18:47:30 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:05 UTC