※この情報は古いです。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 がズレていくこともあります。
これらを回避するには以下の方法が考えられます。
- 常にフルパワーで使う
Speedstep や Cool-n-Quiet などをオフ。または電源設定を「常にオン」にします。消費電力が増えるので注意してください。- 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 カーネル再構築 ( ゚Д゚)マンドクセー
参考文書
- VMware 用に CentOS カーネル再構築 ( ゚Д゚)マンドクセー
- Clock in a Linux Guest Runs More Slowly or Quickly Than Real Time
- VMware Workstation 5.x memorandum
- VMTN Discussion Forums: Centos 4.4 kernel compiled with …
- Sensignal cryptesthesia » CentOSカーネル再構築
- ShocKNetworK.COM :: View topic – How to build redhat kernel for VMware for time issue
- Recompiled CentOS 4 Kernels — Frank Jones Consulting
- www.centos.org – Forums – General Support – VMWare and CentOS 4.0 question.
- Digital Hermit – Kernel-Build-HOWTO