※本記事は元々"kawaman"の個人ブログスペースに投稿しておりましたが、DECNからDELLコミュニティへのコミュニティ統合に伴う移行影響で"日本語コミュニティ"ブログ側に付け替えさせていただきました。



今月、VxRailチャンピオンクラブの勉強会にLTで参加した際に、皆さんいろいろとvSANやHCIの負荷試験についてその方法を検討されている様でしたので、私がよく使うVmware社のLabsツール、HCIBenchの使い方を紹介いたします。

あまり日本語で取り上げられていないので、これから試してみようという方、ぜひとも参考にして頂ければと思います。

 

※本投稿はvExperts Advent Calendar 2017 の12月17日の分の参加blogになります。

https://adventar.org/calendars/2248

 

※ 2019年に HCIBench 2.0 がリリースされましたので、その後のネタとして以下のブログにも記事をまとめていますので参照ください。

調べたこと 試したこと: HCIBench 2.0 のリリースと機能強化のご紹介

調べたこと 試したこと: HCIBench を利用したベンチマークテストのポイントと効率化(1)

調べたこと 試したこと: HCIBench を利用したベンチマークテストのポイントと効率化(2)


■ HCIBenchとは?

 

HCIBenchとはVmware Labs Filngsで公開されている負荷試験の自動化を目的とした無償のベンチマークツールです。

ツールの公開サイトはこちら → HCIBench

HCIBench-20171218_030.png

 

HCIBenchはベンチマークツールとしてもメジャーなVDBenchを利用したvSANデータストア・vSANクラスタへの負荷試験を自動化して、ベンチマークレポートの収集が簡単にできるようになります。

 

また、vSphere環境であればvSAN以外のHCI、NFSやiSCSI、FCのデータストアに対してもVDBenchの負荷試験利用が可能です。

VDBenchを利用して複数ホストに負荷試験を実施するのは割とテクニックがいるテストなので、これを自動化できるHCIBenchは非常に便利なツールです。

 

HCIBenchはOVA形式の仮想マシンで提供され、vSANの性能検証に欠かせないコントローラVM(PhotonOS)と、負荷用のテストVMテンプレート(PhotonOS)で構成されます。

テスト用のコントローラVMには以下のツールが組み込まれて配布されていますので、準備が非常に楽です。

  • Ruby vSphere Console (RVC)
  • vSAN Observer
  • Automation bundle
  • Configuration files

 

負荷用のPhotonOS VMテンプレートは、別途ダウンロードしたVDBenchが組み込まれ、クラスタに自動でクローン展開されて負荷を実行します。


■ HCIBench実行環境の注意事項


HCIBenchのコントローラVMをデプロイするvSphereクラスタと、負荷をかける対象のvSphereクラスタは同一L2のネットワークが適用されている環境が推奨です。

ユーザーガイドにはどのvSphere環境への展開でも問題ない、と記載されていますが負荷対象のクラスタとコントローラVMの配置されるクラスタは別環境である方が正しいレポートが取得できるので推奨です。

また、HCIでやりがちな構成として、コントローラVMと負荷をかける対象のテストVM、そしてvCenterが同じクラスタ、同じデータストア上に存在すると過負荷を掛けすぎてログが正常に取得できないなど残念な結果になることもあるので、

できれば負荷試験対象のクラスタとは別の場所にvCenterとコントローラVMを配置することが強く推奨されます。今回のVxRail環境は外部vCenterを利用しております。


一度パラメータ指定を間違えて、VxRailクラスタ全体の容量を食い潰し、管理VMのリソースを枯渇させて死亡したことがあります...

間違っても本番環境では実施しないでください。

 

※テストVMとの通信で従来コントローラVMのDHCPサービスを利用していましたが、HCIBench 1.6.5 以降のバージョンではStaticIPでテストVMに自動的にIPを割り当てて検証が可能になりました。StaticIP オプションを利用する場合は、Public NetworkとPrivate Networkを同一ネットワーク(同一VLAN)で設定します。詳細はユーザーガイドを参照願います。

 

■ HCIBenchの準備

 

事前にDLが必要となるものは HCIBench の公式サイトからダウンロードするOVAファイルと、VDBenchのバイナリです。

VDBenchはOracle社が公開しているオープンソースのベンチマークテストツールですので、以下のOracle社のDLサイトから入手します。

Vdbench Downloads

 

■ HCIBench コントローラVMの展開

 

HCIBench でダウンロードしたOVAをvSphereクラスタ上にデプロイします。

vSphereへOVAのデプロイ手順は通常のvSphereの操作手順に準拠しますが、注意点として必ずシンプロビジョニング形式でデプロイしてください。詳細はユーザーガイド(英文)にも記載があります。

 

HCIBench-20171217_005.png

負荷試験の実行結果を蓄積するとコントローラVMの容量が増加しがちなので、不要なデータは試験後に回収後、SSHでログインして削除してしまうことを推奨します。

 

HCIBench-20171217_011.png

デフォルトの仮想ディスクフォーマットがシックプロビジョニングになっている場合がありますので、特にVMFSにデプロイする場合は必ずシンプロに変更してください(NFS・vSAN上にデプロイする場合は結果的にシンプロビジョニングでデプロイされます)

 

HCIBench-20171217_013.png

HCIBenchのネットワークは、WebUIへのアクセス用のパブリックネットワークと、テストVMとの通信用のプライベートネットワークの二つを指定します。

プライベートネットワークはDHCPがすでに利用できる環境であればDHCPをそのまま利用し、DHCPがない場合はプライベートとパブリックを両方とも同じネットワークに指定しておきます。HCIBench 1.6.5以降は自動でStaticIPをこのネットワーク上に設定して負荷試験が実行できます。

 

HCIBench-20171217_015.png

HCIBenchのWebUIアクセス用のネットワーク情報とrootのパスワードを設定します。

ここで指定したrootパスワードはWebUIへのアクセスと、コントローラVMへのSSHアクセスなどでも利用可能です。

 

HCIBench-20171217_016.png

準備が完了したらデプロイを続行します。

シンプロビジョニングなので初期のストレージ消費量は2GB弱と非常にエコです。

 

HCIBench-20171217_020.png

デプロイ完了後、パワーオンしてIPへの疎通を確認してください。



■HCIBenchの初期設定


HCIBenchのWebUIは http://<HCIBench IP>:8080 でアクセスできます。

rootパスワードを入力してください。

HCIBench-20171217_022.png

 

また、ポート8080をつけない場合は、負荷試験結果などが保存されているディレクトリツリーを確認できます。

HCIBench-20171217_029a.png


WebUIにログインできたら負荷対象のvSphereクラスタ情報の入力と、VDBenchのバイナリをアップロードします。

少し画面が長くなりますが、以下のような設定項目を埋めます。

HCIBench-20171217_023.png


ポイントとなる個所を簡単に説明します。


▼ 負荷対象vSphere環境の指定

HCIBench-20171217_031a.png


vCenter、ログイン情報、データセンター、クラスタの情報欄はvSphere Web Clientなどで表示されているインベントリ名を正確に入力します。


▼プライベートネットワークの指定

HCIBench-20171217_029.png

ネットワーク欄はコントローラVMのデプロイ時に指定したプライベートネットワークと同じL2ネットワークのポートグループ名を入力します。(vSS、vDSのどちらでも可能です)

「Set Static IP ~~」のチェック欄は、ネットワークでDHCPが有効でない場合にチェックを入れてください。

その場合、指定するネットワークはHCIBench コントローラVMのパブリックネットワークを同じL2ネットワークを指定します。


▼負荷対象データストアの指定

HCIBench-20171217_032a.png

データストア欄はvSANの様に1クラスタ1データストアであれば、上の様に1行でデータストアのインベントリ名を入力します。


HCIBench-20171217_033a.png

通常のVMFS(FC・iSCSI)やNFSのデータストアを利用する場合で、複数データストアに均等な負荷をかけたい場合は1行毎に入力します。

ここに入力されたデータストアに対して均等に仮想ディスクが作成され、負荷試験が実施されます。


「Clear Read/Write Cache Before Each Testing」のチェックボックスは、この後の設定メニューの負荷対象ホストを個別にアクセス指定する時のみ有効にできます。

ただ、vDSのポートグループを利用する場合には負荷対象ホストを個別指定はできないので、今回はこのチェックは利用しません。


▼負荷対象ホストの指定

HCIBench-20171217_034a.png

HCIBenchは指定しなければクラスタ内の全ホストに対して負荷試験を実施します。

特定ホストのみに負荷試験を実施したい場合などは上記のメニューで指定します。ただし、先にも述べたようにvDSのポートグループを指定している場合はこのオプションは利用できません。


▼テストVMの構成指定

HCIBench-20171217_035a.png

 

テストVMの台数、テストVM1台毎の仮想ディスクの数、および仮想ディスクのサイズを指定します。

「EASY RUN」を選ぶとvSANデータストアの負荷試験用に自動でクラスタの情報を読み取り、テストVMの台数、仮想ディスクの数などが指定され簡易テストが実行できます。

初回の動作確認を兼ねて、「EASY RUN」は一度実施してください。


複数のテストを続けて実行する際などは「Re-Use The Existing VMs If Possible」にチェックを入れてテストVMの再利用が可能です。


▼VDBenchバイナリのアップロード


Vdbench Downloads からDLしたバイナリをアップロードします。

HCIBench-20171217_036.png

「ファイルを選択」ボタンからDLしたバイナリを指定します。


HCIBench-20171217_038.png

 

▼設定バリデーションの実施

HCIBench-20171217_036a.png


設定入力が完了したら「Save Configuration」をクリックし、「Validate」を実行します。

HCIBench-20171217_037a.png

バリデーションがすべてパスしたことを必ず確認してください。

HCIBench-20171217_038a.png


■ HCIbenchを利用した負荷試験の実行


準備が完了したら「Test」をクリックして負荷試験を実行します。

負荷試験の内容にもよりますが、「EASY RUN」であればテストVMのデプロイから負荷試験実行で1時間半ほどかかります。


HCIBench-20171217_059.png

HCIBench-20171217_051.png

負荷試験の一連の動作はすべて自動化されており、必要台数分のテストVMのデプロイ、仮想ディスクの作成、負荷の実行が行われます。

環境のセットアップさえ完了すれば、負荷試験の間は別の仕事に時間を割り当てられるし、業務の終了際に試験を実行して翌朝確認なども可能です。


HCIBench-20171217_018a.png


■ HCIBench 実行結果の確認

HCIBench-20171217_036a.png

テストの完了後、「Result」をクリックするとWebUIで結果の確認ができます。

「Save result」をクリックするか、以下の画面でZIPファイルをダウンロードすることで負荷試験の結果をローカルに保存できます。

HCIBench-20171217_039a.png

負荷試験のテスト名フォルダをクリックすると、詳細データをWebUI上で確認できます。

HCIBench-20171217_026a.png

※EASY RUN はvSANデータストアへの標準的な負荷を想定して、ブロックサイズ4K / R:W=7:3 / 100%RandomIO / 4スレッド で実行されます。


テキストファイルにはベンチマーク結果のサマリが含まれているので、ここを確認すれば試験結果がすぐにわかります。


HCIBench-20171217_027a.png

サマリレポートですが、IOPSやスループット、IO遅延など必要な情報は一通り確認できます。

また、クラスタでのCPU利用率や、vSANのKernel側でのCPU負荷も確認ができます。



それぞれのテストVM毎のVDBenchの結果を確認したい場合はフォルダの中の個別ファイルでチェックできます。


HCIBench-20171217_040a.png

個別のテストVM毎のレポートも全て閲覧可能です。

また、「iotest-vdbench-XXvm」フォルダの配下には、vSANObserverの情報が格納されており、

「stats.html」を開くとvSANObserverのViewで詳細なvSANコンポーネントのレポートを確認することができます。

HCIBench-20171217_041a.png

HCIBench-20171217_042a.png


■HCIBenchの活用・応用編


ここまで、HCIBenchの「EASY RUN」を利用した標準的なテストをご紹介しましたが、

HCIBenchはVDBenchの負荷パターンのパラメータファイルを作成したり、作成済みのパラメータファイルをインポートすることで多様な負荷試験の実行が可能です。

VDbenchのパラメータファイルを初見で1から作れと言われても非常に面倒なのですが、自動で多数のファイルを簡単に作成できるのも大きなメリットです。

HCIBench-20171217_043a.png


負荷パターンは以下の様な項目で指定します。

HCIBench-20171217_044a.png

ここで注意しなければいけない点としては、仮想ディスクの数(Number of Disks to Test)は、必ずテストVMの指定項目で設定した数と同一にすること、負荷試験実施時間(Test Time)は、Reporting Intervalの倍数にすること、Warmup TimeはTest Time以下に指定することくらいです。

Warmup Timeの指定は負荷試験の開始から指定時間は記録されない(暖機運転)となります(オプション)。

Reporting Intervalの指定は長時間の負荷試験中にログが大量になることを防ぐために記録のインターバルを指定します(オプション)。


私の場合は、Read/Write比とRandom/Sequential比、IO ブロックサイズを少しずつ変更し、データストアに対して一括で負荷を掛けられるようにパターンを作り、前パターンの試験を一気に実行できるようにしています。

HCIBench 1.6.5.1ではブロックサイズは以下のパターンで指定できます。

HCIBench-20171217_007a.png


より細かい、VDBenchのパラメータを作成したい場合は、手動で作成したファイルを読み込ませる事ができるので、VDBenchを熟知した方はそちらのほうがやりやすいかもしれません。

 

作成したパラメータはそれぞれのパターンで名前がついていますので、個別のパターンを指定して負荷試験の実行もできますし、「Use All」を選択することで、登録した全パターンの一括負荷試験も可能です。

HCIBench-20171217_009a.png

※作成したパターンファイルはコントローラVMの [ /opt/automation/vdbench-param-files ] ディレクトリに格納されていますので、SCPなどでバックアップもできますし、SSH接続してviなどで直接パラメータファイルの編集も可能です。

HCIBench-20171217_022a.png

自動生成されたパラメータファイルを編集して、VDBenchの追加パラメータを含めることも可能です。


HCIBench-20171217_046a.png

最後に、負荷試験前の仮想ディスクの初期化(ZERO埋め or Randomデータ埋め)の指定や、

パラメータファイルで指定した試験実施時間の上書き変更、

試験実施後のテストVMの削除の有無を指定できます。


※試験が失敗したときに再度デプロイ、仮想ディスクの初期化が時間がかかるので、あえてチェックする必要はないかと思います。

 

 

■ まとめ

 

HCIBenchは今まで面倒だったストレージ負荷試験を均質なパラメータで、どんなクラスタにも一括で実施できることができます。

ベンチマーク毎に実行環境やパラメータを変えるのではなく、複数の環境を同じパラメータで試験する事で性能比較が容易になることがHCIBenchの大きなメリットとなります。

 

無償で使え、面倒だったVDBenchを自動化してストレージ負荷試験を実行できる強力なツールですので、ぜひ活用してみてください。