Снова добрался до виртуальной 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
Все, теперь часы работают как часы 🙂
За тестовый час они не отстали и не обогнали контрольный сервер ни на секунду.