Athlon64 X2でx64なLinuxの時間をちゃんと進めよう

最近はずっとVMware上の時間のことについて調べてるんだけど、どれを試しても早く進みすぎたり、遅すぎたりして実際には使えないレベル。ntpdでの補正もきかないくらい。CPUの最大動作周波数を設定ファイルに書くとうまく動く、なんて話も耳にしたけどうまくいかない。で、最初はその周波数の設定を調節しようとして時間の進み方をあわせようとした。設定する周波数と実際の時間との割合を記録して、OpenOffice.org Calcでグラフ書いたりしてみたけど、いまいち関連性が見えなかった。
カーネルオプションに"clock=pit nosmp noapic nolapic"を追加するとうまくいくよ!みたいな話を結構聞くのでGRUBのmenu.lstに追加してみた、けど、それでもあまり変わらない。こうなったらカーネルソース弄って、カーネルコンパイルか、面倒だなぁ、とか思ってたけど、仕方なく本家VMwareの技術情報を見てみた。英語だから、って今までは見てなかったんだけど、背に腹は代えられないので読んで見る。確かに、カーネルオプションの設定について書いてある。

64-bit Systems
In the x86_64 Linux kernel, use the boot option notsc instead of clock=pit.

http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&externalId=1420

ああ!そういうことは早く言えよ!他にも、

In both cases, also make sure that VMware Tools is installed in your guest, that time synchronization is enabled and that you are not running any other clock synchronization software in the guest at the same time (such as ntpd).

http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&externalId=1420

ええ、ずっとntpd走らせてましたよ。ぜんぜんoffsetの量が減らない、とか思ってましたとも。そういうことはVMware ToolsのREADMEとかにでも書いておけよ!
で、正しくカーネルオプション設定しても、ntpdを走らせなくてもうまく動かなかった。今度こそだめか、とか思いながらも調べてたら、これはVMwareじゃなくてAthlon64 X2の問題なんじゃね?なんて話が出てきた(Athron64 X2 で、VMwareでLinuxを動かすと時計が早くなる件 - 忘れたときに備えた記録(2007-07-26))。半信半疑ながらも、AMDからDual-Core Optimizerなるものを落とした(Welcome to AMD | Processors | Graphics and Technology | AMD)。これってVista x64でも動くの?とかどきどきしながらインストールして、再起動。VMware上のUbunutで時間を計ってみた。と、今までに無いくらい、正確な時間が取れた。VMware Toolsの時間同期設定をはずして、ntpdをもう一度走らせて様子を見てみると、Vista側のNTPと同期し始めた!なんか、うまくいったみたい。なんだけど、ホストのほうに負荷がかかってCPUの動作周波数が変わるとどうやら時間も狂うらしい。NTPの同期もうまく行ってなさげ。でも、1時間に2時間進む、見たいな感じじゃないからいいや。クロックが落ちたらntpdにがんばってもらう方針で。