VMware上のLinuxで時刻がずれる問題への対処
http://extstrg.asabiya.net/pukiwiki/index.php?VMware%BE%E5%A4%CELinux%A4%C7%BB%FE%B9%EF%A4%AC%A4%BA%A4%EC%A4%EB%CC%E4%C2%EA%A4%D8%A4%CE%C2%D0%BD%E8目次 †
概要 †
Kernel 2.6以上を使用しているLinuxをゲストOSとした場合に時刻の大幅な遅れが発生する場合がある。
本書ではこの問題の原因説明と対処方法を記す。
原因 †
Linuxでは時刻はタイマー割り込みをカウントすることで管理されている。
Kernel 2.4では毎秒100回の割り込みでカウントを行っていたが、Kernel 2.6では毎秒に1000回に精度が上がった。
VMでは毎秒1000回の割り込みを処理しきれず、結果として時刻に大幅な遅れが発生することとなる。またカウントの回数はプロセッサ数と比例するため、2プロセッサ構成の場合は1000回x2/秒のカウントが行われることとなる。
対策 †
以下で複数の対策方法を示すが、これらを全て適用したとしても解決できるとは限らない問題である。
このためシステム運用上は複数の対策+NTPによる毎分の時刻調整を併用する必要がある。
尚、全仮想マシンから毎分NTPの時刻調整をかける場合はNTPサーバへ負荷がかかるため、自前のNTPサーバにて行なうことが望ましい。
1. VMwareServer側の設定 †
CPUのクロック変動に伴う時間の誤差とホスト・ゲスト間の時間の修正機能を有効化するため、VMwareServerの設定に変更を加える。
- /etc/vmware/config
host.cpukHz = 1800000 host.noTSC = TRUE ptsc.noTSC = TRUE
host.cpukHzはCPUの動作クロックを静的に固定させるための設定となる。
900000 = 900MHz 1800000 = 1.8GHz 2400000 = 2.4GHz
2. VMwareToolsの設定 †
- .vmxの編集
VMware起動前に対象のゲストOSフォルダの *.vmx を編集する。VMwareToolsをインストールした後、ファイルの最後に次の行を追加する。
tools.syncTime = "TRUE"
3. Linuxの起動オプションの調整 †
カーネルの起動オプションにて調整を行なう。
rootでログインし/boot/grub/grub.confを編集。
kernel行の最後に以下を追加して再起動する。
- 時刻が遅れる場合
"nosmp noapic nolapic"
- 時刻が進む場合
clocksource=pit
4. Linux Kernelの再構築 †
下記の設定にてタイマー割り込み回数を100回に減らす。
「Processor type and features」-「Timer frequency」
mkdir /usr/local/src/linux cd /usr/local/src/linux wget http://mirrors.kernel.org/centos/4.5/updates/SRPMS/kernel-2.6.9-55.0.2.EL.src.rpm rpm -ivh kernel-2.6.9-55.0.2.EL.src.rpm cd /usr/src/redhat/SPECS/ rpmbuild -bp --target i686 kernel-2.6.spec cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-i386/ vi param.h #ifdef __KERNEL__ # define HZ 1000 #ifdef __KERNEL__ # define HZ 100 cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/ vi Makefile EXTRAVERSION = -prep EXTRAVERSION = -VM make mrproper cp configs/kernel-2.6.9-i686.config .config make oldconfig make make modules_install make install
4. VMwareServer 2.0の使用 †
VMwareServer 2.0にテスト版として付属するドライバを使用することで、時間がずれる問題は大幅に改善できる。
このドライバはVMwareToolsに付属して配布されており、VMwareToolsのインストール時に有効/無効の設定が可能である。
参考 †
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1420 http://mwweb.cocolog-nifty.com/blog/2007/11/vmwarecentos_f0ac.html http://search.luky.org/linux-users.a/msg07194.html http://blog.miraclelinux.com/asianpen/2007/05/vmwarelinux_ad22.html http://d.hatena.ne.jp/dayflower/20071207/1197004405