VMware vSphere を構築したら「物理ホスト」「仮想マシン」含めてパフォーマンステストをします。
その際に必要となるヒントや情報を記載します。
→書き殴るような感じになっています。
基本的に VMware vSphere の仮想マシンのパフォーマンスは ESXiサーバー(物理ホスト)のリソース次第になります。
しかし ESXiサーバーのリソース次第と考えると、オーバースペックの物理サーバーを複数台購入してもほとんどリソースを利用していないという非常にもったいない、本来支払わなくてもいいような費用を毎月数百万円支払っていたということになりかねません。
そのためサービスのパフォーマンスを落とさずにバランスよく、低コストで運用するためにパフォーマンステストが必要になります。
パフォーマンステストの目的
VMware vSphere 構築後だけではないですが、普段構築後にシステムに対してパフォーマンステストを始める前に普段思っていることを記述します。
- パフォーマンステストをやること自体が目的となり、難しく考えすぎて作業が進まない
- 工数が大幅に増えるが、出した結果は誰も見ない(興味がない、役に立たない)
- 上長の考えと異なることをやっても二度手間となる(これが足りない、あれが足りない)
- パフォーマンステストをしてもキャパシティの計算が正確にできない?
なるべく単純に可視化できればいい
業務として考えると、最終的には上長に報告・提出することになると思いますので、なるべく単純に可視化できればいいと思います。
もしくは可視化できなくても単純で分かりやすい結果で問題ないと思います。
理由は、上長への報告抜きに勝手にサーバーを構築する訳にもいきませんし、その上長が現場のエンジニア以上に技術やトレンドや複雑な構成のシステムをすべて把握しているわけではないからです。
大企業になると更に細かく調査をして結果を提出する必要があると思いますが、今回はそこまでの状況を考慮せずに考察します。
パフォーマンステストの個所
最低限以下の3つを考えています。
- CPU
- メモリ
- I/O(iSCSI)
ただ単に仮想マシンを起動している状態で「CPU」「メモリ」「I/O」の数値を調査しても、ほぼ「ゼロ」だと思うので、パフォーマンス試験としては
- 「何か」をしながら「何か」をしてみる
- (例)バックアップを取りながらサービスを提供する
- (例)vMotionで移動しながらひたすら ssh でログインし続ける
- (例)ddコマンドで巨大なファイルを作成しながらvMotionをする
などを考えます。
パフォーマンスの結果から何を知りたいのか?
- 本番サーバーを何台搭載してもパフォーマンスに問題がないのか?
- 本番サーバーが問題なくサービスを提供できるレベルで何台まで搭載できるキャパシティがあるのか?
- メモリを増設した方がいいのか?そもそもホストをもう1台購入した方がいいのか?
- リソースを制限した方がいいのか?仮想マシン構築時に割り当てたリソースはそのままでいいのか?
ここら辺がレポートにできれば上長に報告して許可を得る(本番系として利用に耐えるパフォーマンスがあると判断できる)ことができます。
vSphere でもパフォーマンスを確認することが可能
高級なツールを使わなくても vSphere に付属するパフォーマンスツールでパフォーマンスを計測できます。
直近(1時間以内)のパフォーマンスは20秒単位で表示されます。
過去(1時間以上前)のパフォーマンスは丸められてしまい、その時点のパフォーマンスは分からなくなりますが、それでもおおよその値は分かります。
メモリのテスト
「物理ホストのメモリ」と「仮想マシンのメモリ」を分けて考えます。
→メモリがボトルネックになる可能性があります。
今まで各種仮想環境の構築や運用をしましたが、「CPU」や「ネットワーク」や「I/O」はスカスカ(CPU使用率0.1%とか、ディスクI/Oがほとんどなしとか)なのに、メモリだけはあっという間に80%、90%まで到達して大騒ぎになることが多いような気がします。
ただ、メモリの場合は最初にある程度のメモリを確保する必要があるアプリケーションなどもあるため、なおさら計算が難しいです。
メモリをテストする目的
「仮想マシンをどれくらい搭載できるか知りたい」
→ただし VMware vSphere が表示するメモリの数字について知らないと計算ができない。
物理ホストのメモリ
消費 → 物理メモリを仮想マシンが消費しているメモリ量
オーバーヘッド ← 仮想マシンをパワーオンするために必要なメモリの量
オーバーコミット ← オーバーコミットが物理ホスト(ESXiサーバー)のパフォーマンスを低下させることがある
仮想マシンのメモリ
オーバーヘッド ← 仮想マシンをパワーオンするために必要なメモリの量
メモリの定義
Granted → ESXiサーバーが仮想マシンに使用許可している物理メモリの容量
Active → 仮想マシンが現在使用している物理メモリの容量
Swapped → ディスクにスワップされているメモリの容量
NUMA(Non-Uniform Memory Access)とは?
uniformの意味 → 不変の、変わらない、従った、適合した、調和する、統一されたなど。
CPUの数が増えると、メモリに効率的にアクセスできなくなります。
CPUがメモリを共有すると、同じメモリを参照する際にメモリが解放されるまで待ちが発生する場合があります。
しかしNUMAにより各CPUにローカルメモリを割り当てます。
且つ各CPUはローカルメモリを超えて他のメモリも参照できます。
このようにして効率化を図っています。
つまりCPUは「ローカルメモリ」と「その他のメモリ」にアクセスすることになり、そのことを「Non-Uniform(変則的な、不規則的な)」と呼んでいます。
結論を言えば、メモリは多ければ多いほど良い
メモリは多ければ多いほど良いです。
そういってしまうと身も蓋もありませんが、予算が余っていて何か増量できるならメモリがいいでしょう。
CPUのパフォーマンステスト
CPUに負荷を掛ける
→オーバーコミットの状態にしてtopコマンドを実行する
→ロードアベレージを確認する
仮想CPU(vCPU)
VMware vSphere では複数の仮想マシンが ESXi サーバーのCPUを共有します。
仮想マシンに割り当てられる CPU を仮想 CPU(vCPU)と言います。
本当にCPUはたくさん必要なのか?
日々運用していくと、仮想マシンを構築する際に「とりあえず CPU を4つくらい割り当てといて」という指示を聞くことがあります。
しかしよほどリソースを必要とするシステムでなければ、CPUは1個で十分でしょう。
CPUが1個だからパフォーマンスが出ませんでしたというケースはマルチスレッド型のアプリケーションなどが考えられますが、基本的にCPUは1個割り当てられれば十分だと思います。
仮想マシンなので1個割り当てて足りなければ足りる分を割り当てればいいでしょう。
CPU待機率(CPU % Ready)
10%を超えると他の仮想マシンとCPUを取り合っている状態。
→ここをチェックしてみる。
CPUのオーバーコミット状態とは?
例えば、ESXiサーバー(物理ホスト)のCPUが1スロット8コア(合計8コア)に対して、仮想マシン5台に対して2コアずつ割り当てるような場合です。
つまり「ESXiサーバー8コア」<「仮想マシン10コア」の状態です。
日々の運用管理
どの仮想マシンに何コア割り当てて、CPUの平均使用率がどれくらいなのか計測をしていくとリソース過多なのか適切にリソースが割り当てられているのかが分かります。
Excelファイルで管理してもいいですし、プログラムからデータを取得することもできます。
ディスクI/Oパフォーマンステスト
iSCSIに負荷を掛ける
→新規仮想マシンの作成、バックアップ&リストア、ストレージvMotionなど。
iSCSIに負荷を掛けた状態で esxtop コマンドで IOPS などを計測する。
IOPSとは
IOPSとは「I/O per Second」の略で、1秒あたりに処理できる I/O アクセスの数です。
多ければ多いほどたくさんの I/O を処理できるのでパフォーマンスが高いと判断できます。
ディスクも考慮します。
- SATA → 安いが1日8時間稼働の個人ユーザー向けに設計されている
- SAS → 高いが24時間365日稼働させる企業向けに設計されている
- SSD → 高いが圧倒的に処理が速い
確認したいディスク箇所
- ディスク書き込み量
- ディスク書き込み数
- レイテンシー
改善策は高速なハードディスクを使用すること
適切なチューニングよりも高速なハードディスクを設置する方がより効果があります。
SATA < SAS < SSD
の順でパフォーマンスが上がります。
DBサーバーが搭載されていて、それなりのパフォーマンスが求められているなら SSD を設置することで問題が解決することがあります。
仮想環境の場合
通常仮想環境の場合は外部ストレージ(外部共用ディスク)を使用しています。
- HPE 3PAR
- NetApp
その場合は仮想マシンが1か所に集中する場合があります。
Raw デバイス マッピング(Raw Device Mapping)を利用する
RDM(Raw Device Mapping: Raw デバイスマッビング)は、仮想マシンからストレー ジデバイス(LUN)に直接書き込みができる仕組みです。
VMFSボリユーム内のマッピングファイルを利用して直接アクセスできます。
その結果、パフォーマンスが向上する可能性があります。
構成的には
- 管理 → VMFS
- アクセス → Rawデバイス
になります。
しかし通常は仮想マシンのストレージとして VMFS ファイルシステムで構築されたデータストアを利用することが推奨されています。(もちろん、これで何の問題もありません)
→ つまり仮想マシンのディスクはデータストア上のファイルになります。
デフォルトでも VMFS ファイルシステムで構築されます。
マルチパスにする
仮想マシンとストレージ間の通信はマルチパス構成にします。
マルチパスで以下の2つの性能が実現できます。
- 冗長化
- 負荷分散(ロードバランシング)
チーミングは環境によっては冗長化は実現できますが、負荷分散はできない(Active/Standby構成)ことがあるので、マルチパス構成がお勧めです。
マルチパスはその名の通り、「ESXiサーバー」と「ストレージ」間に複数のパスが構成されています。
その結果、負荷分散となりネットワーク・トラフィックのボトルネックを解消することができます。
iSCSIのマルチパス選択機能は以下の3つがサポートされています。
- MRU(Most Recently Used)
- ラウンドロビン(Round Robin,RR)
- 固定(Fixed)
パフォーマンスを計測する際に役に立つコマンド
以下 VMware vSphere 環境のパフォーマンスを計測する際に役立つコマンドを記載します。
esxtop コマンド
リアルタイムでパフォーマンスデータを収集することができます。
例えば
- ロードアベレージ
- CPU使用率
- CPU消費電力量
- メモリ使用率
- iSCSIへのIOPSデータ
- iSCSIに送信するコマンドの平均応答時間
- コマンドの処理時間
- 仮想マシンのレスポンス時間
- ネットワーク情報
など細かくデータを収集できます。
Linuxに付属している top コマンドと同じくバッチモード(データをファイル日出力できる)もあるので cron で仕込んだりできて便利です。
esxtopコマンドの例
esxtopコマンドを実行すると以下のように表示されます。
12:58:32pm up 21 min, 470 worlds, 3 VMs, 6 vCPUs; CPU load average: 0.03, 0.06, 0.08 ID GID NAME NWLD %USED %RUN %SYS %WAIT %VMWAIT %RDY %IDLE %OVRLP %CSTP %MLMTD %SWPWT |
iometer コマンド
I/O スループットを計測できます。
iperf コマンド
ネットワークの調査ができます。
vimtopコマンド
vCenter 仮想アプライアンスで実行されている各サービスを監視できます。
ddコマンド
Linuxのコマンドです。
ddコマンドは、ディスクにアクセスをしてデータのコピーや変換を行うコマンドです。
ベンチマークテストを実施する際にスクリプトを組んで利用します。
ディスクパフォーマンスを計測するために役立つベンチマークソフト
フリーで簡単に使えそうなベンチマークテストツールです。
CrystalDiskMark
ディスクの速度を測定するベンチマークソフトです。
CrystalDiskMark
https://crystalmark.info/software/CrystalDiskMark/
動作環境
Windows 2000/XP/2003/Vista/7/2008/8/2012/8.1
fio(Flexible IO Tester)
CrystalDiskMarkのように簡単にディスクパフォーマンスを計測できるツールです。
fio
http://freecode.com/projects/fio/
fioダウンロード
http://git.kernel.dk/?p=fio.git;a=summary
Gitで公開されています。
fio参考サイト
https://mag.osdn.jp/08/05/22/0127246
fioのインストール手順、具体的なコマンド実行方法など。
UnixBench
総合的なベンチマークテストに利用できます。
参考資料
各リソースの細かい数値についての詳細な解説は以下の資料に詳しく記載されています。
(VMware vSphere 6.5 用)
vSphere 監視およびパフォーマンス
vRealize Operations Managerについて
「VMware vRealize Operations Manager」は、「my vmware」より VMware 仮想アプライアンスとしてダウンロードできます。
「vRealize Operations Manager」は仮想マシンの個々のリソース(CPU、メモリなど)からクラスタ全体までの情報を収集してパフォーマンスデータを分析・表示することができます。
vRealize Operations Managerのライセンスについて
ライセンスがないと利用できません。
- プロセッサ単位での利用(vSphere with Operations Management(vSOM、ブイソムと読む))
- 仮想マシン単位での利用(25仮想マシンごとに1ライセンス必要)(vRealize Operations)
の2形態のライセンスがあります。
vRealize Operations には3つのエディションがあります。
- Standard
- Advanced
- Enterprise
無料評価版もある
無料評価版もあります。
以下のURLより登録することで評価版をダウンロードすることができます。
試用期間は登録後から60日です。
VMware vRealize Suite Standard Edition Evaluation Center
https://my.vmware.com/en/group/vmware/evalcenter?p=vriops
vRealize Operationsの導入方法について
すでに vSphere を導入している場合、以下の2つの方法があります。
- 25仮想マシンごとに個別にライセンス購入する
- vSphere with Operations Management Enterprise Plusへのアップグレードをする
vRealize Operations の導入には費用が掛かりますが、こちらの利用も考えても良いと思います。
vRealize Operationsのライセンス価格
ざっくりとした価格を現在確認中。
製品が分かりにくい
VMware 製品全般に言えることですが、様々な製品が絡み合って
- 必要な製品なのか・不要な製品なのか
- 実は何の製品なのか
- 何の機能が含まれているのか
分かりにくいです。
パフォーマンステストの注意点
他社サイトへの負荷テストは攻撃に相当するので注意です。
コメント