http://webos-goodies.jp/archives/50179807.html
対策として、主に以下の 3 つが提示されています。
カーネルの起動オプションとして "clock=pit" を指定する。(時刻が進む場合の対策)
カーネルの起動オプションとして "nosmp noapic nolapic" を指定する。(時刻が遅れる場合の対策)
タイマー割り込みの間隔が "/usr/src/linux-2.6/include/asm-i386/param.h" 内の "HZ" マクロで定義されているので、それを "100" に変更してコンパイルする。基本的に仮想マシンの CPU がひとつのときは (1) と (2) を、CPU 数を 2 にしているときは (1) と (3) を適用するのがよいようです。
時刻同期目的であれば、vmware-guestdを動かしておけばOKなはずです。
Linuxゲストであれば、VMwareToolsをインストールすると起動スクリプト"/etc/init.d/vmware-tools"が導入されますので、chkconfigで有効にしてください。
Knowledge Base では、これに加えて VMwareTools の時刻同期を使用するように勧めています。しかし、X がないので設定ができない orz。
VMware Tools をインストールした後で、
.vmx ファイルに以下の設定を追加してみて下さい。tools.syncTime = "TRUE"
X Window 上で設定しなくても、これで同じ効果があります。
ほほー
追記
knokさんからコメントがあったvmware-nisetoolsのvmware-timesyncdを使う方法を調査してみた。
http://www.morishima.net/~naoto/fragments/archives/2005/02/#a000061
以下の手順でとりあえず5秒置きにホストの時間に同期することを確認した。
knokさんありがとうございました。
環境:Debian Serge@VMware Workstation5.5.1 for Windows
手順
$ wget ftp://ftp.morishima.net/pub/morishima.net/naoto/VMware-NiseTools/vmware-nisetools-0.2.1.tar.gz
$ tar xvzf vmware-nisetools-0.2.1.tar.gz
$ cd vmware-nisetools-0.2.1/
$ ./configure
$ vmware-synctimed.cの修正(後述)
$ make vmware-synctimed
$ make install-sbinPROGRAMS
$ su
# ./vmware-synctimed -d
diff -ur vmware-nisetools-0.2.1.org/vmware-synctimed.c vmware-nisetools-0.2.1/vmware-synctimed.c --- vmware-nisetools-0.2.1.org/vmware-synctimed.c 2004-08-27 02:49:09.000000000 +0900 +++ vmware-nisetools-0.2.1/vmware-synctimed.c 2006-12-05 14:07:51.000000000 +0900 @@ -42,6 +42,7 @@ #include <sys/types.h> #include <sys/time.h> +#include <time.h> #include <vmbackdoor.h>
適当に起動スクリプトを作って
$ cat /etc/init.d/vmware-synctime #!/bin/sh PATH=/usr/local/sbin:/sbin:/usr/bin/ test -f /usr/local/sbin/vmware-synctimed || exit 0 test -f /usr/bin/killall || exit 0 case "$1" in start|force-reload|restart|reload) killall vmware-synctimed 2>/dev/null echo -n "Running vmware-synctimed to synchronize clock" vmware-synctimed -d echo "." exit 0 ;; stop) killall vmware-synctimed exit 0 ;; *) echo "Usage: /etc/init.d/ntpdate {start|stop|restart|reload|force-reload}" exit 1 esac exit 0
rcconfして終了。
VMware WorkStation持ってるならVMwaretools使えば?というツッコミは却下。
さらに追記
vmware-guestdを起動したら一気に時間修正されたが、
微妙にホストから遅れているのが気になる。
vmware-nisetoolsの方が荒技だがいいのかもしれない。
追記:
x86_64だと下記エラーだったので、若干修正
# make vmware-synctimed
gcc -g -O2 -c vmbackdoor.s
vmbackdoor.s: Assembler messages:
vmbackdoor.s:38: Error: suffix or operands invalid for `push'
(中略)
vmbackdoor.s:62: Error: suffix or operands invalid for `pop'
make: *** [vmbackdoor.o] エラー 1
# cat niseinst.sh wget ftp://ftp.morishima.net/pub/morishima.net/naoto/VMware-NiseTools/vmware-nisetools-0.2.1.tar.gz tar xvzf vmware-nisetools-0.2.1.tar.gz cd vmware-nisetools-0.2.1/ CFLAGS="-g -O2 -m32" ./configure patch -f << EOS --- vmware-synctimed.c.org 2006-12-04 00:00:00.000000000 +0900 +++ vmware-synctimed.c 2006-12-04 00:00:00.000000000 +0900 @@ -39,6 +39,7 @@ #include <string.h> #include <signal.h> #include <getopt.h> +#include <time.h> #include <sys/types.h> #include <sys/time.h> EOS make vmware-synctimed cp vmware-synctimed /usr/local/sbin/ grep vmware-synctimed /etc/rc.local || echo '/usr/local/sbin/vmware-synctimed &' >> /etc/rc.local tail /etc/rc.local /usr/local/sbin/vmware-synctimed &
# cat niseinst.sh wget ftp://ftp.morishima.net/pub/morishima.net/naoto/VMware-NiseTools/vmware-nisetools-0.2.1.tar.gz tar xvzf vmware-nisetools-0.2.1.tar.gz cd vmware-nisetools-0.2.1/ ./configure patch -f << EOS --- vmware-synctimed.c.org 2006-12-04 00:00:00.000000000 +0900 +++ vmware-synctimed.c 2006-12-04 00:00:00.000000000 +0900 @@ -39,6 +39,7 @@ #include <string.h> #include <signal.h> #include <getopt.h> +#include <time.h> #include <sys/types.h> #include <sys/time.h> EOS make vmware-synctimed cp vmware-synctimed /usr/local/sbin/ grep vmware-synctimed /etc/rc.local || echo '/usr/local/sbin/vmware-synctimed &' >> /etc/rc.local tail /etc/rc.local /usr/local/sbin/vmware-synctimed &
ここまでやるならパッケージにすべきかな..