kernel: calcru: runtime went backwards

После перевода виртуалки на VMWare 8 появился баг, на консоль стали валиться сообщения вида:

kernel: calcru: runtime went backwards from 89 usec to 85 usec for pid 516 (moused)

Варианты лечения:

прописать:

kern.hz=100

в файл

/boot/loader.conf

и перезагрузиться и/или выполнить:

sysctl kern.timecounter.hardware

если у вас таймер TSC (такой был у меня), поставить:

sysctl kern.timecounter.hardware=i8254

и добавить строку

kern.timecounter.hardware=i8254

в файл

/etc/sysctl.conf

Пока таких сообщений не замечено, полет нормальный.


Теги: , , , , , , ,

FreeBSD под VMWare: Теперь часы работают как часы

Снова добрался до виртуальной FreeBSD, а там.. ужос! Часы отстали на 4 часа.. В предыдущем посте о часах я выбирал разные таймеры. Ни один не работает как нужно. Что делать?

TSC

Я остановился на таймере TSC. Он должен работать на частоте процессора. dmesg рапортует о частоте:

Timecounter "TSC" frequency 3302974606 Hz quality 800


Этот параметр можно посмотреть через sysctl

~> sysctl -a | grep tsc_<br />
machdep.tsc_freq:  3302974606


При таком значении часы отстают, значит оно должно быть меньше.

Fix

Открываем файл vmware.log и ищем строку, содержащую TimeTracker

Sep 14 11:11:05: vmx| TimeTracker host to guest rate conversion  46219175637833 @ 2999990000Hz -> 46219175637833 @ 2999990000Hz<br />
Sep 14  11:11:05: vmx| TimeTracker host to guest rate conversion ((x * 2147483648)  >> 31) + 0


Копируем магическое :) 2999990000 и записываем его в sysctl:

~> sysctl machdep.tsc_freq=2999940000<br />
machdep.tsc_freq:  3302974606 -> 2999940000<br />
~> echo “sysctl machdep.tsc_freq=2999940000”  >> /etc/sysctl.conf<br />
# one more trick:<br />
~> echo "kern.hz=100" >> /boot/loader.conf


И синхронизируем часы с сервером времени, например:

ntpdate -bs 132.236.56.250


Все, теперь часы работают как часы :)

За тестовый час они не отстали и не обогнали контрольный сервер ни на секунду.


Теги: , , , , , , , , , , , , ,

time is ticking out

Возвращаясь к вопросу отставания часов в FreeBSD (в частности под VMWare). Хэндбук дает подсказку по поводу почему часы могут показывать неправильное время. Дело в том, что в системе несколько таймеров, а выбранный таймер ведет себя на вашей системе не так, как вы ожидаете. Выход – попробовать другой таймер и проследить за результатом.

Посмотрите какие таймеры присутствуют на вашей системе:

<br />
~> dmesg | grep Timecounter<br />
Timecounter "i8254" frequency  1193182 Hz quality 0<br />
Timecounter "ACPI-fast" frequency 3579545 Hz quality  1000<br />
Timecounter "TSC" frequency 3035844535 Hz quality 800<br />
Timecounters  tick every 1.000 msec<br />


Проверьте, какой таймер используется:

<br />
~> sysctl kern.timecounter.hardware<br />
kern.timecounter.hardware: ACPI-fast<br />


Установите другой таймер:

<br />
~> sysctl -w kern.timecounter.hardware=i8254<br />
kern.timecounter.hardware: ACPI-fast –> i8254<br />


Добавьте настройки в файл /etc/sysctl.conf, чтобы таймер использовался при загрузке системы:

<br />
kern.timecounter.hardware=i8254<br />


Синхронизируйте время на машине:

<br />
ntpdate -bs 132.236.56.250<br />


Тепеть подождите несколько дней и проверьте, будут ли отставать ваши часы.


Теги: , , , , , , , , , , , , ,