Ошибка «kernel: calcru: negative time of …»
Поставил FreeBSD 5.2.1 на достаточно старенькую машину с процессором AMD-K6 400МГц. Вот таким его видит ядро:
May 5 14:32:12 kernel: CPU: AMD-K6(tm) 3D processor (400.12-MHz 586-class CPU) May 5 14:32:12 kernel: Origin = "AuthenticAMD" Id = 0x58c Stepping = 12 May 5 14:32:12 kernel: Features=0x8021bf May 5 14:32:12 kernel: AMD Features=0x80000800
Проблема достаточно явная, но как она влияет на работу системы мне не известно — на консоль постоянно валятся вот такие ошибки:
May 5 15:22:25 kernel: calcru: negative time of -1360420 usec for pid 12137 (cc)
Поиски по Гуглу дали очень много упоминаний подобной проблемы и ниодного внятного решения для системы старше 5-й версии. Решение для младших версий не подошло, зато оно подтолкнуло меня к следующим действиям.
После некоторых раздумий я решил посмотреть переменные ядра (или как они правильно называются?) с подходящими названиями. Наиболее подходящими оказались переменные kern.timecounter.*, а среди них вот такие:
# sysctl -a | grep timecounter ... kern.timecounter.hardware: ACPI-safe kern.timecounter.choice: TSC(800) ACPI-safe(1000) i8254(0) dummy(-1000000) ...
На другой машине с такой же системой значение переменной kern.timecounter.hardware имело значение TSC, какое и было выставлено на данной проблемной машине:
sysctl kern.timecounter.hardware=TSC
Насколько я могу судить проблема устранилась.
Осталось только прописать новое значение упомянутой переменной в файл /etc/sysctl.conf, чтобы оно снова было выставлено после перезагрузки системы:
# tail /etc/sysctl.conf kern.timecounter.hardware=TSC