VMware 上の CentOS の時間が狂う ( θ_Jθ)コマッタモンダ

※この情報は古いです。VMware 上の CentOS の時間が狂う…は divider で回避 を参照してください。

VMware Server 上で、CentOS 4.4 を実行しているんだが、時計が狂いまくって困ってる。
そのうち VMware がバージョンアップしてなんとかなるかなぁ,,,と、待ってたんだけども、なんともならんので、ワークアラウンドを実施することに決定。

VMware で時計のズレを補正する方法

なんかいろいろあるらしい,,,

1) CPU の周波数(kHz)を明示する方法

周波数が動的に変わる Speedstep など向けらしいが、そもそも VMware 使うマシンではフルパワーで行こうね。
C:\Documents and Settings\All Users\Application Data\VMware\VMware Server\config.ini に以下を追記する。

host.cpuKHz= "2400000" ※kHz 単位で自分の CPU の周波数を記入。
host.noTSC = "TRUE"
ptsc.noTSC = "TRUE"

ぼくの場合は、未来に逝ってしまった,,,

2) Linux のカーネルオプションを設定する方法

/etc/grub.conf でオプションを設定する。

 title CentOS (2.6.9-42.0.3.EL)
root (hd0,0)
- kernel /boot/vmlinuz-2.6.9-42.0.3.EL ro root=LABEL=/
+ kernel /boot/vmlinuz-2.6.9-42.0.3.EL ro root=LABEL=/ clock=pit nosmp noapic nolapic
initrd /boot/initrd-2.6.9-42.0.3.EL.img

一応、時間が早いときは、”clock=pit” を。遅いときは、”nosmp noapic nolapic” を使うらしい。どっちも書くってもありぽ。
ぼくの場合は、時代に取り残された,,,

3) カーネルを VMware に合わせて再構築する方法

kernel 2.6 の標準状態では割り込み頻度 ( timer.h の define HZ 値 ) が 1000Hz になっており( kernel 2.4 では 100Hz )、VMware (仮想環境)ではこんな頻度で割り込みを実行できない。割り込み頻度を下げるには、カーネルの再構築が必要。
include/asm-{i386,x86_64}/param.h を修正する。

 #ifdef __KERNEL__
-# define HZ 1000 /* Internal kernel timer frequency */
+# define HZ 100 /* Internal kernel timer frequency */
# define USER_HZ 100 /* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ) /* like times() */
#endif

>> VMware 用に CentOS カーネル再構築 ( ゚Д゚)マンドクセー
毎回カーネル再構築すると思うと鬱になるが,,,
ぼくの場合は、もっとも効果があった。でもまだちょっと遅い,,,

4) 毎秒 ntp で時間を合わせる方法

すげー負荷かかるし、NTP プロバイダーに喧嘩を売る禁断の手法。
以下のスクリプトを実行し続ける。

#!/bin/bash
while true
do
/usr/sbin/ntpdate -s ntp.bbtec.net ※自分の ISP の NTP サーバーを指定
sleep 1
done

時間は合うようになるが、あ、有り得ないよ。

5) CPU の機能自体を見直す方法

最近の CPU は Intel であれ AMD であれ、クロックを可変して低消費電力を実現しているため、VMware では追随できません。また、CPU(正確には x86 互換 CPU)には、クロックごとに数が増える独自のカウンタ「TSC」(Time Stamp Counter)が用意されているようですが、複数のコアが搭載されている場合に各コアの TSC がズレていくこともあります。

これらを回避するには以下の方法が考えられます。

  1. 常にフルパワーで使う
    Speedstep や Cool-n-Quiet などをオフ。または電源設定を「常にオン」にします。消費電力が増えるので注意してください。
  2. CPU のドライバを最新版に更新、CPU 関連のユーティリティを導入する
    Intel、AMD はひっそりと(?)ドライバや問題に対処するためのユーティリティを提供してくれています。各メーカーのサイトから入手できます。特に AMD Dual-Core の場合は、「AMD Dual-Core Optimizer」はインストールが必須になります。

> AMD Athlon™ 64 X2 Dual Core Processor Utilities and Updates
> AMD Athlon™ 64/FX Processor Utilities & Updates
> AMD Turion™ 64 X2 Processor Utilities & Updates

結局,,,

1 は未来に行き過ぎてしまうので却下。
4 はプロバイダーにとって迷惑だし、システム負荷も高いのでありえない。
2 の clock=pit と 3 のカーネル再構築の組み合わせでなんとか ntp で補正できる範囲に収まった。
>> VMware 用に CentOS カーネル再構築 ( ゚Д゚)マンドクセー

参考文書

タイトルとURLをコピーしました