SMP環境だと、CPUクロックを誤認識するようです。そのため、時計が狂ってしまいます。
FreeBSDの時計は、kern.timecounter.hardwareで選択された Timecounterの値を使います。Rv20/Rs20, RvII26/RsII26の場合は、i8254になっているハズです。i8254の値は、machdep.i8254_freqから参照や変更ができます。そこで、この値を直接変更することで、時計の進み具合を速くしたり遅くしたりできます。ntpdateを使いながら、適切な値を設定してください。
筆者の環境では、以下のように設定することで時計が正常に動くようになりました。
# dmesg | head Copyright (c) 1992-2005 The FreeBSD Project. Copyright (c) 1994-2005 FreeBSD(98) porting team. Copyright (c) 1992 A.Kojima F.Ukai M.Ishii (KMC). Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 4.11-RELEASE-p16 #0: Wed Sep 13 18:51:03 JST 2006 furusawa@nextfoods.jp:/usr/src/sys/compile/SMP Timecounter "i8254" frequency 1996800 Hz CPU: Pentium Pro (161.65-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0x619 Stepping = 9 # sysctl kern.timecounter.hardware kern.timecounter.hardware: i8254 # sysctl machdep.i8254_freq machdep.i8254_freq: 1996800 # sysctl machdep.i8254_freq=2456500 machdep.i8254_freq: 1996800 -> 2456500
Rs20, RsII26は、APICに固定されているためです。これらの2機種では、SMPカーネルを使うことにより、動作する可能性があります(試したことはないですが、おそらく動くはずです)。Rv20, RvII26は、BIOSから従来の互換モードに設定することで、GENERIC kernelが立ち上がります。
Table.1 恐らく、こんな感じ...
CPU | APIC | GENERIC kernel | SMP kernel |
Single | × | ○ | × |
Single | ○ | × | ○ |
Dual | × | ○ | × |
Dual | ○ | × | ○ |