Webシステムのパフォーマンス設計に関するベストプラクティス(仮想化要素編(VMware))

 ITシステムがブラックボックス化している現代においてインフラエンジニアの需要は縮小していくという人もいますが、私は必ずしもそうではないと考えています。特にパフォーマンス分野のエンジニアは今後も絶対になくならない職種のひとつだと言ってよいでしょう。なぜならシステムがいくらブラックボックス化したとしても各システムの特性に適した難易度のパフォーマンスチューニングが必要不可欠だからです。しかしその分難易度も高く、どういった設計をしたらよいのか一般的なベストプラクティスがあまりないように思いましたので、パフォーマンス設計のベストプラクティスをまとめてご紹介しようと思います。今回は仮想化レイヤの要素に関するパフォーマンス設計、主にVMwareを想定した設計についてご紹介しますのでぜひご参照ください。

1. はじめに

今回のシリーズでは、LinuxシステムにおけるWeb3層のオンラインシステムを想定したパフォーマンスベストプラクティスをご紹介させていただきます。システムパフォーマンスを向上させるには、システムを構成するあらゆる要素を考慮する必要があります。たとえばミドルウェアのチューニングが完璧でもネットワークの通信速度が出ていなくて処理遅延につながることもあります。したがってパフォーマンスエンジニアはあらゆる要素に対する知見をもって対応する必要があります。一般的にシステムを動作させるために必要な要素を下図に記載します。

DBサーバ以外のサーバについては物理ホスト上に仮想サーバとして構築することが一般的かと思います。仮想化技術を適用することで拡張性、可用性が向上するとともに物理サーバの台数も抑えられるためにコストを削減することもできます。一方で仮想サーバを導入することで性能観点で考慮しなければならない要素もいくつか出てきますので、本記事にて気を付けるポイントをご紹介していきます。

2. 仮想化設計

2.1 仮想化製品選定

様々な仮想化製品が提供されていますので、メリット・デメリットを鑑みて製品選定をするようにして下さい。

□ハイパーバイザー(ベアメタル型)を適用する
仮想化製品にはハイパーバイザー型とホスト型の2種類がありますが、性能を考慮するのであればハイパーバイザー型を選択しましょう。ホスト型はハードウェアにアクセスする際にホストOSを経由することになるため、その分余計な処理が発生してしまうからです。したがってハードウェアに直接命令をすることができるハイパーバイザー型が好ましいです。また、ハイパーバイザー型にも完全仮想化と準仮想化の2種類の方式が存在しますが、より高い性能を求めるのであれば準仮想化を選択しましょう。完全仮想化は仮想サーバのOSに手を加える必要のない方式ですが、仮想サーバから送られる特権命令をハイパーバイザーで変換する必要があるため処理にオーバーヘッドが生じます。一方で準仮想化においては、VMwareで言えばVMware toolsを仮想サーバにインストールする必要はありますが、仮想サーバからハイパーバイザー上で変換する必要のない命令を送ることができるため余計な処理を減らすことができます。ただし、準仮想化に対応しているOSが限られていることやハードウェア側の機能でオーバーヘッドを低下させる技術が進化してきていることから、完全仮想化を選択するのも間違いではありません。下記に各方式のイメージを記載します。

□ハイパーバイザー製品の選定
Webシステムで採用される主なハイパーバイザー製品の特長を表にしてみました。昨今は各製品どれも洗練されてきており、性能面や機能面の差がほとんどなくなってきていますので、コスト面や有識者が確保できるかといった観点が重要になっているかと思います。

2.2 仮想化製品設計

□物理ホストの設定(BIOS設定)
・CPUの仮想化支援機能を有効にする
仮想化支援機能によりゲストOSの命令がCPUで直接実行されるため高速に動作します。また、ゲストOSがホストOSや他のゲストOSに影響を与えることを防ぎます。
・Hyper Threadingを有効にする
一般的にCPUの処理性能が20%程度上昇しますので有効にしておきましょう。
・Turbo Boostを有効にする
Turbo Boostとは定格である動作周波数よりもさらに早くプロセッサコアを動かすことができるインテルCoreiシリーズの技術となります。たとえば4コアを持つCPUにおいて、負荷状況を鑑みて2コアで十分と判断して不要な2コアのスイッチを切り、残った2コアの周波数を自動的に上げるような動きが行われます。
・パワーマネジメント設定
高い性能要件があるシステムにおいてはpower management機能を無効にしておくことをお勧めします。その代わりに消費電力が上がってしまうのでご留意ください。また、BIOS設定だけではなくハイパーバイザー側の設定も変更する必要があります。VMwareで言うとESXi側の電源管理の設定もデフォルトの「バランシング済み」から「高パフォーマンス」に変更する必要があります。

□リソースのオーバーコミットに関する設計
オーバコミットという技術を用いることで、物理リソースの総量を超えたリソース(CPU/メモリ/ストレージ)を仮想サーバに割り当てることが可能となります。しかし、オーバコミットを許容することで処理性能が低下する可能性がありますので適用する際には注意しましょう。どの程度のオーバコミットであれば問題ないかということはシステム特性によるので一概には言えませんが、目安としては下記程度であることが推奨されているようです。また、 故障時にHAしたり、メンテナンス時にライブマイグレーションすることを考慮してリソースの余剰を設けておくことも忘れないようにしましょう。

①CPUのオーバーコミット
オーバーコミット率ごとの想定される挙動を記載します。オーバコミット率を300%以下に抑えるようにしましょう。
・~300%:問題ない
・300%~500%:性能劣化が発生することある
・600%~:問題が頻発する
また、物理サーバのCPU使用率が80%を超えないように気を付けましょう。

②メモリのオーバーコミット
メモリについては基本的にオーバーコミットさせずに仮想サーバのメモリの総量が物理ホストのメモリ総量以下になるようにしましょう。CPUと異なり、仮想サーバは割り当てメモリの余りをキャッシュなどで無駄に消費してしまうため、物理ホストのメモリが枯渇する事象が発生し得ます。そうなるとバルーニングという仮想サーバに割り当てたられたメモリ空間を回収する処理が発生して性能劣化が発生してしまうため、バルーニング処理が発生することは避けたほうが望ましいです。

□仮想ディスク設定
仮想ディスクを作成する際に、シックプロビジョンイング(Lazy zeroed、Eager zeroed)、シンプロビジョニングのいずれかを選択する必要があります。昔は性能向上のためにシックプロビジョニングが推奨されていましたが、物理ディスクにSSDを用いることが主流になっている昨今ではシンプロビジョニングで十分性能が出ることが多いです。極めて高い性能要件を満たさなければいけない場合を除けばシンプロビジョニングを選択しておけば良いでしょう。以下に各方式の比較を記載します。

まとめ

仮想化要素のパフォーマンスに関するご説明は以上となります。ここまで読んでいただきありがとうございました。SDS(Software Defined Storage)に関する記載ができなかったのでどこかで別途ご紹介しようかと思います。他の要素についての記事も書いているのでよかったら合わせて見てもらえると嬉しいです。

Webシステムのパフォーマンス設計に関するベストプラクティス(ネットワーク要素編)
Webシステムのパフォーマンス設計に関するベストプラクティス(システム構成・ハードウェア要素編)

参考文献

Performance Best Practices for VMware vSphere 7.0, Update 2

https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/performance/vsphere-esxi-vcenter-server-70U2-performance-best-practices.pdf

vSphere クラスタの鉄板構成・サイジングのポイント 2021 年版

【図解】VMware シンプロビジョニングとシック(eager zeroed/lazy zeroed)の違いとメリット/デメリット

コメント