web-dev-qa-db-ja.com

VMで繰り返し可能なパフォーマンステストは可能ですか?

私のアプリケーションは多くのデータベース挿入を行うため、ディスクI/Oはワークロードの大部分を占めます。 QAはVMのほとんどすべてのテストを行います。物理マシンでの他のアクティビティがアプリケーションのパフォーマンスに影響を与えるため、VM環境では、パフォーマンスの低下を検出することを目的としたテストでは有効な再現可能な結果が得られないことが心配です。

これは正当な懸念事項ですか、または最新の仮想環境には、再現可能なパフォーマンステストを可能にするアプリケーションの環境を完全に分離する方法がありますか?

アプリケーションとデータベースを「マシン」に配置し、テストを実行して、かかった時間を記録します(秒/ミリ秒ではなく、数時間/分です)。開発サイクルの後半で、同じテストを実行して、コードの変更によりパフォーマンスが低下したかどうかを確認します。専用の物理マシンで実行すると、かなり一貫した結果が得られます。私の質問は、このテストを仮想マシンで実行した場合、同じ物理ボックス上の他のVMによって実行されている作業が原因で、実行時間に大きな違いが生じる可能性があるということです。ディスクI/Oがワークロードの主要な部分であることを考慮して、これを制御するためにVMを構成する方法はありますか?

1
Dana

最初にコメントのいくつかに対処するために、VM環境を構築する価値のあるすべてのハイパーバイザーには、リソースの消費を制限し、最小値を保証する機能があります。これらの設定を利用して、パフォーマンスサービスレベルを確立できます。最小要件を確立し、それをVMサイズに変換します。たとえば、2コアのvCpuと4 GBのRAMを割り当て、これ以上提供できないVMを割り当て、アプリのパフォーマンスが要件内であることを確認します。

VmWareのこのガイドでは、その製品の観点から説明しています: https://www.vmware.com/files/pdf/partners/tap/directions-vmware-ready-testing-application-software.pdf

そのガイドの重要なポイントは、ハイパーバイザーを監視しながらパフォーマンステストを実行し、仮想スワップが発生するようにCPUが70%未満でメモリが不足していないことを確認することです。

一般的な経験則では、これらのいずれかが発生すると(ハイパーバイザのCPUが70%を超えるか、ハイパーバイザで物理メモリが使い果たされる)、VMのパフォーマンスの低下が予想されます。

ストレージとネットIOのディメンションについても同じことができますが、これは、基盤となるアーキテクチャで行われた投資によって推進されます。私の組織では、VMをSANに配置し、SANへの複数の10GBアップリンクを使用しているため、VMはローカルディスクよりも高いストレージIOを認識しています。

理想的には、アプリが展開される組織には、ハイパーバイザーの監視が行われ、ハイパーバイザーがVMの速度を低下させるほどの力にならないように管理するプロアクティブなVMインフラストラクチャがあります。 。可能であれば、ハイパーバイザーのメトリックを取得して一般的なパフォーマンスの傾向を理解し、ハイパーバイザーが同じパラメーター内に留まるように管理されるという想定に基づいてアプリの要件をテストおよび記述しながら追跡します。

ハイパーバイザーのリソースとパフォーマンスに関するメトリックを取得できない場合、実際にできることは、OSが使用するリソースを測定し、ハイパーバイザーが保証する必要がある要件を作成することだけです。

あなたの懸念は主にストレージIOに関するものであるため、このブログはIOPの測定に焦点を当てています: https://blog.synology.com/?p=146

1
Thomas Carlisle

あなたが求めていることの多くは、環境に大きく依存しています。非常に多数の他のオプションの中で、最小および最大CPUとIOをVMに配分できるベンダーがあります。この欠点は、このようにリソースを細かく切り始めると、通常、使用率が低くなることです。ほとんどのアプリケーションは常に同じレートでCPUを継続的に使用するわけではないため、共有プールから必要なものをVMに使用させることにより、平均利用率(利用可能なすべてのCPUのパーセンテージとして)を達成できる傾向があります。それぞれに最小値と最大値を割り当てる場合。

一般に、パフォーマンスの結果に関する私の経験では、制御が難しいさまざまな理由でパフォーマンスが変化する可能性があります。パフォーマンスをより統計的に考える方が理にかなっていると思います。本番環境でVMでこのアプリケーションを実行する場合、パフォーマンステストではVMで絶対に実行し、構成する予定の方法で構成する必要があります。製品版で。何も変更せずに1日のさまざまな時間に多数のテストを実行し、結果にどのような差異があるかを確認します。これは、それ自体が有用な情報です。パフォーマンスのばらつきを減らすために、本番環境の構成を再検討したい場合があります。

本番環境の専用ハードウェアでこれを実行することを計画している場合、最適なオプションは、できる限り同様の設定でパフォーマンステストを実行することです。リソースの制約のためにVMをテストに使用する場合は、VMに割り当てリソースを設定して、専用ハードウェア上にあるように修正されるようにすることをお勧めします。

3
JimmyJames