VMware

Unofficial Tech Memo - Koji Komatsu

January 2009

Previous Next
0

VI PowerShell 1.5 (正式名称 VI Toolkit for Windows 1.5) がリリースされた。
32の新しいコマンドレットと多数のオプションが追加されており、Get-Viewを使わなくても設定の確認や変更ができる範囲が広がった。

詳細はリリースノートを。

VMware Infrastructure Toolkit (for Windows) 1.5 Release Notes
http://www.vmware.com/support/developer/windowstoolkit/wintk15/windowstoolkit15-200901-releasenotes.html

0 Comments Permalink
0

VI API経由では、データストアブラウザで行うような、VMFS上のファイル操作はできないと間違った情報をいろんなところで流してしまった。HostDatastoreBrowserを使うと、lsやrm相当の操作くらいはできるらしい。

HostDatastoreBrowser
http://pubs.vmware.com/vi-sdk/visdk250/ReferenceGuide/vim.host.DatastoreBrowser.html

そして、求めていたスクリプトを発見。インベントリに存在せずファイルとしてただ放置された状態の仮想マシンのリストを作成するVI PowerShellスクリプト。

Find Orphaned VMDK's

必見。

0 Comments Permalink
0

これもサポート外だと思うが、パフォーマンスの調査で有効かもしれない。
ESXでサービスコンソールにログインしてvscsiStatsコマンドを使用することで、仮想ディスク単位でI/O遅延を確認することができる。

まず、下記のコマンドを実行し、仮想マシンと仮想ディスクの識別IDを確認する。

/usr/lib/vmware/bin/vscsiStats -l

出力例
Virtual Machine worldGroupID: 1632, Virtual Machine Display Name: vmname {
Virtual SCSI Disk handleID: 8397
}

上記のworldGroupID、handleIDを利用する。

統計情報の収集開始
/usr/lib/vmware/bin/vscsiStats -i 8397 -w 1632 -s

統計情報の表示
/usr/lib/vmware/bin/vscsiStats -i 8397 -w 1632 -p latency

統計情報の収集終了
/usr/lib/vmware/bin/vscsiStats -i 8397 -w 1632 -x

統計情報の出力例。I/O遅延の分布や最小値、最大値なども確認できる。単位はmicro sec。
Histogram: latency of IOs in Microseconds (us) for virtual machine worldGroupID : 1632, virtual disk handleID : 8397 {
min : 491
max : 14161
mean : 4582
count : 27
{
0 (<= 1)
0 (<= 10)
0 (<= 100)
1 (<= 500)
0 (<= 1000)
23 (<= 5000)
3 (<= 15000)
0 (<= 30000)
0 (<= 50000)
0 (<= 100000)
0 (> 100000)
}
}

latency以外に、ioLength, seekDistance, outstandingIOs, interarrival が確認できる。
csvでの書き出し(-c オプション)もある。

ESX3.0.xでは、コマンドはあるものの -l オプションがないため、識別IDの確認方法が不明。

0 Comments Permalink
0

VMware ToolsはゲストOSにインストールすることが推奨されるコンポーネント。ドライバとシンプルなソフトウェア群でできていて日ごろはその動作を気にすることはないのだが、検証目的で機能の動作を確認したい場合、動作ログをとることが可能。

WindowsゲストのToolsログ

Windowsのバージョンにもよるが、下記にToolsの設定ファイルがある。

Windows 2003/XPでは、
C:\Documents and Settings\All Users\Application Data\VMware\VMware Tools\tools.conf

Windows 2008/Vistaでは、
C:\Users\All Users\VMware\VMware Tools\tools.conf
もしくは
C:\ProgramData\VMware\VMware Tools\tools.conf

ここに下記を記述する。
log = "TRUE"
log.file = "%PATHNAME%"

ただし、VCBでVSS(Volume Shadow Copy Service)を利用している場合、ログを有効にしているとエラーが発生してしまうらしい(下記はESX3.5 Update2とVCB1.5、Windows2003のケース)。

2008-10-07 18:55:24.789 'vcbMounter' 1544 error Error: Other error encountered: Snapshot creation failed: Could not quiesce file system.

2009年10月29日追記

少々敷居は高いが、VSSを使用する場合DebugViewを使えば問題ないようだ。詳細は下記KBに。

Enabling debug logging for VMware Tools within a Windows guest operating system
http://kb.vmware.com/kb/1007873

冒頭の一般的な方法もKBになっていた。

Collecting diagnostic information for VMware Tools
http://kb.vmware.com/kb/1010744

LinuxゲストのToolsログ

記述内容はWindowsゲストと同様。設定ファイルは下記にある。
/etc/vmware-tools/tools.conf

なお、デフォルトで下記にすこしだけログが記録されている。
/var/log/vmware-tools-guestd

また、上記とは別に、クローンの際のカスタマイゼーションのログもゲストOS内で確認できる。

Windowsゲストのカスタマイゼーションログ

sysprepに関するログが、C:\WINDOWS\Temp\vmware-imcの下にあるguestcust.logとtoolsDeployPkg.logに書き出される。

Linuxゲストのカスタマイゼーションログ

エラー等が発生すると、/var/log/vmware/customization.logに記録が残っている。

0 Comments Permalink
0

esxtopバッチモード

esxtopはESXのサービスコンソールで使用可能なパフォーマンス情報を表示するコマンド。ESXiの場合、Remote CLIやVIMAの仮想アプライアンスでresxtopとして同等のコマンドが用意されている。位置づけとしては通常時の継続的なパフォーマンス監視というよりは調査目的であるため、対話モードで使用することが一般的だが、バッチモードを使用するとパフォーマンス情報が標準出力にcsvフォーマットで出力されるため、ファイルにリダイレクトして別用途で使用することができる。
(VI Clientではパフォーマンスチャートの内容をMS Excelフォーマットで保存することができる。)

バッチモードを使用する一般的な手順

手っ取り早く使うには、下記のコマンドを使用する

esxtop -b -a -n 1 > esxtop_output.csv

-bがバッチモードを指定している。-aは全項目を出力することを示している。-nは表示する統計回数である。-nを省略した場合、適当なタイミングでCtrl-Cを押せばよい。

さて、全項目を出力するとデータ量が大きくなりがちなので、通常は項目を指定しておく。esxtopを対話モードで使用し、c/m/d/nキーなどで使用する画面を選択し、fキーで項目を選択した後、Wキーで設定を保存する。バッチモードでこの設定を指定することで、取り出したいデータだけを対象とすることができるのである。
なお、設定ファイルは複数つくることができるので、パターンを複数用意することも可能。例えば下記のようになる。

esxtop -b -c .esxtop_any_config -n 1000 > esxtop_output.csv

なお、esxtopの項目の説明については、マニュアル「リソース管理ガイド」やInterpreting esxtop Statisticsを参照されたい。

パフォーマンスモニタ(perfmon)での表示

バッチモードで書き出したcsvファイルは如何様にも使用できるが、グラフィカルなグラフにしたいなら、Windowsのパフォーマンスモニタ(perfmon)を使用することもできる。
手順は下記のとおり。

1.パフォーマンスモニタを立ち上げる(perfmonコマンド)
2.グラフを右クリックし、ドロップダウンリストから「プロパティ」を選択
3.開いた画面で「ソース」タブに切り替え
4.データソースセクションで「ログファイル」ラジオボタンを選択
5.「追加」ボタンをクリックし、esxtopのcsvファイルを選択
6.「OK」ボタンをクリックして画面を閉じる
7.再度グラフを右クリックし「カラムの追加」を選択
8.「次のコンピュータからカウンタを選ぶ」で、esxtopを取得したホストが選択されていることを確認し、表示したい項目を選択し「追加」する
9.必要な項目の追加が終わったら「閉じる」ボタンで画面に戻る


補足

VI Clientではパフォーマンスチャートの内容をMS Excelフォーマットで保存することができる。

0 Comments Permalink
0

LinuxゲストOSでの時刻同期

LinuxゲストOSでは、Kernelのバージョンによって時刻のずれを避けるための考慮が必要だったりする。最も一般的な設定としては、下記の3つ。

1.VMware Toolsの時刻同期機能を有効にする
これはESX3.5であれば、VI Clientで仮想マシンの設定項目に存在する「ホストとゲスト時間を同期」にチェックを入れるか、VMware Toolsの設定画面で有効にする。

2.grub.confでタイマーデバイス選択を制御する
かつては何を書くかで議論が絶えなかったが、今は下記の表であてはまるものをとりあえず盲目的に書いておく。
http://kb.vmware.com/kb/1006427

3.タイマー割り込みの回数を少なくする (kernel2.6系のみ)
これが一番厄介だが効果は劇的だったりする。kernel2.6系では、カーネルコンパイル時のオプションに1秒間の割り込み回数が100,250,1000の3種類が選べる。Novel SLES10SP2では250になっているが、RHEL4やRHEL5は1000になっている。特にVirtual SMP構成の場合は、CPUの分だけLOCの割り込みが倍増するため影響が大きい。
REHL4.7、5.1以降(CentOSもOK)であれば、2のKBにも記載されているようにgrubのdivider=10だけでよい。
だが、それ以外についてはkernelのヘッダファイルを修正して再コンパイルする必要がある。
具体的には、/usr/src/linux-2.6/include/asm-i386/param.hのHZの定義を下記のように修正する。(詳細はhttp://kb.vmware.com/kb/1420

#define HZ 100
もしくは、CONFIG_HZ_1000=yをCONFIG_HZ_100=yに変更して再コンパイルする。

タイマー割り込みの回数を確認する

さて、3の設定が効いているかどうかを確認する方法。dividerの設定は起動後に/proc/cmdlineでも確認できるが、割り込みの回数自体も/proc/interruptsで表示される累積の割り込み回数を何度か表示して、差分と経過時間から計算することができる。(SLES10SP2のように、ディストリビューションによっては最初から/proc/sys/kernel/HZに示されているケースもある。)

例えば、下記はdivider=10を指定したRHEL5.1で、10秒毎に/proc/interruptsの結果を表示した例。割り込みレベル0もしくはLOCの差を10で割ると、約100回の割り込みが発生したことがわかる。つまり、割り込み回数がデフォルトの1000から100になっていることがわかる。

--root@localhost ~--# /sbin/hwclock
Sat 03 Jan 2009 05:57:12 PM JST -0.686850 seconds
--root@localhost ~--# date
Sat Jan 3 17:57:12 JST 2009
--root@localhost ~--# cat /proc/interrupts
CPU0
0: 262551 IO-APIC-edge timer
1: 475 IO-APIC-edge i8042
6: 5 IO-APIC-edge floppy
7: 0 IO-APIC-edge parport0
8: 6 IO-APIC-edge rtc
9: 0 IO-APIC-level acpi
12: 7455 IO-APIC-edge i8042
14: 24515 IO-APIC-edge ide0
169: 9294 IO-APIC-level ioc0
177: 1891 IO-APIC-level vmxnet ether
NMI: 0
LOC: 262605
ERR: 0
MIS: 0
--root@localhost ~--# sleep 10
--root@localhost ~--# cat /proc/interrupts
CPU0
0: 263557 IO-APIC-edge timer
1: 475 IO-APIC-edge i8042
6: 5 IO-APIC-edge floppy
7: 0 IO-APIC-edge parport0
8: 6 IO-APIC-edge rtc
9: 0 IO-APIC-level acpi
12: 7455 IO-APIC-edge i8042
14: 24610 IO-APIC-edge ide0
169: 9306 IO-APIC-level ioc0
177: 1957 IO-APIC-level vmxnet ether
NMI: 0
LOC: 263609
ERR: 0
MIS: 0
--root@localhost ~--# date
Sat Jan 3 17:57:22 JST 2009
--root@localhost ~--# /sbin/hwclock
Sat 03 Jan 2009 05:57:23 PM JST -0.913159 seconds

なお、Windowsではperfmonでinterrupts/secという項目があるので、こちらで同様の計算ができるが、タイマー割り込みの回数だけを抜き出す方法は不明。

0 Comments Permalink
0

マニュアルだけではわからないesxtopの項目の解説。

Interpreting esxtop Statistics

ESX4.0での情報も一部記載されている。interrupts(割り込み)の統計画面も追加されるようだ。

0 Comments Permalink
0

必須ではないが、P2V後のプラグアンドプレイによるハードウェアの更新後も古いドライバによる悪影響が疑われる場合には下記で紹介されている手法が使える。

接続されていないデバイスの情報を表示させる
http://d.hatena.ne.jp/rasis/20081227/1230389439

メモ
set devmgr_show_nonpresent_devices=1
start devmgmt.msc

0 Comments 0 References Permalink
Click to view kkomatsu's profile Member since: Jul 29, 2007

このblogは小松康二の個人的なメモですのでサポート外の設定や勘違い等が含まれている可能性があります

View kkomatsu's profile

Communities