【HOL】HOL-SDC-1404vSphere Performance Optimization　を試してみた。

# 全体構成
* モジュール 1： vSphere のパフォーマンスの基本概念とトラブルシューティング （60 分）
* モジュール 2： パフォーマンス機能： vSphere Flash Read Cache （45 分）
* モジュール 3： パフォーマンス機能： 待ち時間感度設定 （45 分）
* モジュール 4： パフォーマンス機能： 仮想 NUMA （30 分）
* モジュール 5： パフォーマンス機能： 電源ポリシー設定 （15 分）
* モジュール 6： esxtop の使用 （60 分）

ドキュメントを読んだり、熟考しながらやったり、割り込みが入ったり(汗)と、実際は上記以上の時間がかかる。
ちなみに、私はやった時は「モジュール１」だけで４時間かかった。。。

※ただ、各モジュール（とか、モジュール内の項目）は連動していないため、まとまった時間を確保できなくても実習可能。

# モジュール１　vSphere のパフォーマンスの基本概念とトラブルシューティング
## パート１．CPUパフォーマンス
```lang:一般的なCPUパフォーマンスの問題
高いReady時間　　 （CPUが待たされている）
高いCostop時間　　（CPUが多すぎてオーバーヘッド発生）
CPU制限　　　　 　（CPUが足りていない）
ホストCPUの飽和　 （ホストCPU稼働率が高い）
ゲストCPUの飽和　 （ゲストCPU稼働率が高い）
不適切なSMP使用　 （CPUが空くまで待たされる）
低ゲスト使用率　　（ゲスト側でCPUをうまく使えていない）
```
*CostopとvSMPの違いは何なんだろう？*

```lang:CPUリソース問題の主な原因
ゲストOSの乱立
仮想マシンの構成が最適化されていない
```

## CPU Performance Monitor
* Demand ： 仮想マシンが要求または使用を試みるCPUリソース量
* Usage　：　仮想マシンが実際に使用できる現在のCPUリソース量
* Ready　：　仮想マシンが実行できる状態にありながらvSphereが仮想マシンを実行する物理リソースを見つけられずに実行できない時間

## 仮想マシンの高レベルCPU状態
![図1.png](https://qiita-image-store.s3.amazonaws.com/0/82865/33568825-8b73-009a-a45c-2d0825aa1e2d.png)
* Wait　：　ゲストOSがアイドル状態のとき
* Ready　：　実行できる状態にありながらvSphereがリソースを見つけられずに待ち状態になっているとき
* CoStop　：　マルチウェイ仮想マシンの仮想CPUが同時開始待ちで待機
* Run　：　仮想マシンが物理プロセッサで実行された時間

**Readyの値が高い場合（10%以上）は注意！！**
*→他に注意が必要な項目はどれか??（Baloon（メモリ）など？）*

## 事例
![図2.png](https://qiita-image-store.s3.amazonaws.com/0/82865/4f803ce7-8d74-84d1-14bd-861452930406.png)

ゲストOS（work01）のCPUパフォーマンスグラフ。
work01マシンのCPU使用率（Usage）がReadyより低い。
→　**要求処理より実行処理の量が少ない！**

![図3.png](https://qiita-image-store.s3.amazonaws.com/0/82865/95900e59-fab5-e3b0-63bd-eb8eab3925b2.png)

ホスト（esx-02a）のCPUパフォーマンスグラフ。
CPU#0のみ使用率が100%で、残りのCPUはほとんど使用していない。
**→work01とwork02の処理がCPU#0で競合してしまっているっ！**

## work01のCPU設定
![図4.png](https://qiita-image-store.s3.amazonaws.com/0/82865/6da3d69e-10d0-b095-00ca-14b9934bd68b.png)

Afinity設定が両方（work01,02）とも"0"で設定されている
**＝どちらのゲストOSもCPU#0を優先的に使用する設定になっている**（そりゃ競合するな）
※Afinity設定はVMwareさん曰く**「非推奨」**らしいけど。

*事例としては、OSをクローンした時にうっかりAfinity設定もコピーされてしまうのでカチ合っちゃうみたいだけど、実際問題、Afinityを設定することはあるのだろうか。。。*

## work01のCPU設定
![図5.png](https://qiita-image-store.s3.amazonaws.com/0/82865/dc4295d5-1a16-269c-d10f-d2609ec4d8f3.png)
work01のAfinityを"1"に変更。（work01はCPU#1を、work02はCPU#0を優先的に使用する設定とした。）
→work01のUsageがDemandと同値に。Readyの値も0%に。

![図6.png](https://qiita-image-store.s3.amazonaws.com/0/82865/84cea55d-7c18-93fc-a70e-9e43ecd6dd4e.png)
同タイミングでホストのCPU使用状況もCPU#0とCPU#1が100%に移行。**＝競合がなくなった**

## 脱線
* work01=CPU#1、work02=CPU#2に優先割り当てを分散させることでホストCPUの競合を回避することが出来た。→ただし、依然としてゲストOS上のCPU使用率は100%に張り付いたまま。
**→CPUの負荷を下げつつベンチマークの値をもっと上げられないか??**
* Afinityの値は複数指定することもできるみたいなので、work01=CPU#0,#1、work02=CPU#2,#3と複数使えるように指定したらさらに負荷分散されるのではないか??→効果なし(´･ω･`)
* では、Afinityの値を設定しなかったら持っているCPUを有効活用してくれるんじゃないか？→変化なし。(´･ω･`)負荷の高いCPUが#0から#2に移動しただけ。。。

負荷ツール側がマルチCPUに対応していないだけっぽい。。。

## まとめ。
* VMをコピーする際には設定もコピーされるので、特にリソース指定等の競合が起きないか注意すること。
* CPUリソースのUsageが高い場合はゲストOSでの使い方に問題が無いか注意する。
* Ready値が高い（10%以上）場合はホストリソースの競合による待ちが発生している可能性が高い
* Afinityは基本的に使用しないこと。*→どんなときに使用するの??*

# パート２　SMPパフォーマンス
下記構成でマルチスレッド対応の負荷をかける
* work02：2CPU（2コア1ソケット）
* work03：2CPU（2コア2ソケット）

work02のCPU#1の負荷が上がっていない
→オンラインでCPUの追加を行ったただけではゲストOSはCPUを使用できない。
→再起動、またはCPU有効化を実施する必要がある。
→ベンチマークが240前後に。

## 脱線
ベンチマークの値をもっと上げられないか？
（もっと性能を上げるにはどうしたらよいか）
→CPUの設定をいろいろ変えてみた


# パート３　




～続く。。。# って60分のところなのに３日かかったんですが。。。(´Д｀)