(57)【要約】  複数のノードを割り当て、複数のノード上に第１のワーカープールを実装して、各ノードが第１のワーカープールからのワーカーのうちの１つ又は２つ以上を含むようにし、第１のワーカープールに、コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与え、第１のワーカープールを使用して第１のタスクを実行し、第１のワーカープールからのワーカーが第１のタスクを実行している間に、コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタする、コンピュータ記憶媒体上に符号化されたコンピュータプログラムを含む方法、システム及び装置について説明する。【選択図】図１
2018524693.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムを試験する方法であって、
複数のノード上に第１のワーカープールを実装して、各ノードが前記第１のワーカープールからのワーカーのうちの１つ又は２つ以上を含むようにするステップと、
前記第１のワーカープールに、前記コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与えるステップと、
前記第１のワーカープールを使用して前記第１のタスクを実行するステップと、
前記第１のワーカープールからの前記ワーカーが前記第１のタスクを実行している間に、前記コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタするステップと、
を１又は２以上のコンピュータによって実行するステップを含む、
ことを特徴とする方法。
【請求項２】
前記複数のノード内の各ノードは、仮想マシン及び物理的マシンの少なくとも一方を含む、
請求項１に記載の方法。
【請求項３】
前記複数のノードは、複数のデータセンタに存在する、
請求項１に記載の方法。
【請求項４】
前記第１のワーカープールからの各ワーカーは、別個のノードに存在する、
請求項１に記載の方法。
【請求項５】
前記第１のワーカープールからの少なくとも２つのワーカーは、単一のノードに存在する、
請求項１に記載の方法。
【請求項６】
前記複数のノードは、少なくとも１つのディレクタノードと、少なくとも１つのワーカーノードとを含む、
請求項１に記載の方法。
【請求項７】
前記第１のタスクは、前記コンピュータシステムに要求を送信するステップを含む、
請求項１に記載の方法。
【請求項８】
前記要求は、ハイパーテキストトランスファプロトコル（ＨＴＴＰ）要求及びメッセージキュー（ＭＱ）要求から成る群から選択される、
請求項７に記載の方法。
【請求項９】
前記第１のワーカープールからの各ワーカーは、前記第１のタスクを実行する際に、前記コンピュータシステムに一連の要求を指定速度で送信する、
請求項１に記載の方法。
【請求項１０】
前記第１のワーカープールからの各ワーカーは、前記第１のタスクを実行する際に、以前の要求に対する前記コンピュータシステムからの応答を受け取るのを待つことなく前記コンピュータシステムに要求を送信するように構成される、
請求項１に記載の方法。
【請求項１１】
前記少なくとも１つの性能特性は、速度、待ち時間及びこれらの組み合わせから成る群から選択される、
請求項１に記載の方法。
【請求項１２】
前記少なくとも１つの性能評価基準をユーザのクライアント装置に提供するステップをさらに含む、
請求項１に記載の方法。
【請求項１３】
前記第１のワーカープールと前記コンピュータシステムとの間のインターフェイスとして機能するように構成されたワーカーモジュールを準備するステップをさらに含む、
請求項１に記載の方法。
【請求項１４】
複数のノード上に第２のワーカープールを実装して、各ノードが前記第２のワーカープールからの１又は２以上のワーカーを含むようにするステップと、
前記第２のワーカープールに、前記コンピュータシステムと相互作用するように構成された第２のタスクを実行するための命令セットを与えるステップと、
前記第２のワーカープールを使用して前記第２のタスクを実行するステップと、
をさらに含む請求項１に記載の方法。
【請求項１５】
前記第１のタスクと前記第２のタスクは並行して実行される、
請求項１４に記載の方法。
【請求項１６】
システムであって、
複数のノード上に第１のワーカープールを実装して、各ノードが前記第１のワーカープールからのワーカーのうちの１つ又は２つ以上を含むようにするステップと、
前記第１のワーカープールに、前記コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与えるステップと、
前記第１のワーカープールを使用して前記第１のタスクを実行するステップと、
前記第１のワーカープールからの前記ワーカーが前記第１のタスクを実行している間に、前記コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタするステップと、
を含む動作を実行するようにプログラムされた１又は２以上のコンピュータを備える、
ことを特徴とするシステム。
【請求項１７】
前記複数のノード内の各ノードは、仮想マシン及び物理的マシンの少なくとも一方を含む、
請求項１６に記載のシステム。
【請求項１８】
前記複数のノードは、複数のデータセンタに存在する、
請求項１６に記載のシステム。
【請求項１９】
前記第１のワーカープールからの各ワーカーは、別個のノードに存在する、
請求項１６に記載のシステム。
【請求項２０】
前記第１のワーカープールからの少なくとも２つのワーカーは、単一のノードに存在する、
請求項１６に記載のシステム。
【請求項２１】
前記複数のノードは、少なくとも１つのディレクタノードと、少なくとも１つのワーカーノードとを含む、
請求項１６に記載のシステム。
【請求項２２】
前記第１のタスクは、前記コンピュータシステムに要求を送信するステップを含む、
請求項１６に記載のシステム。
【請求項２３】
前記要求は、ハイパーテキストトランスファプロトコル（ＨＴＴＰ）要求及びメッセージキュー（ＭＱ）要求から成る群から選択される、
請求項２２に記載のシステム。
【請求項２４】
前記第１のワーカープールからの各ワーカーは、前記第１のタスクを実行する際に、前記コンピュータシステムに一連の要求を指定速度で送信する、
請求項１６に記載のシステム。
【請求項２５】
前記第１のワーカープールからの各ワーカーは、前記第１のタスクを実行する際に、以前の要求に対する前記コンピュータシステムからの応答を受け取るのを待つことなく前記コンピュータシステムに要求を送信するように構成される、
請求項１６に記載のシステム。
【請求項２６】
前記少なくとも１つの性能特性は、速度、待ち時間及びこれらの組み合わせから成る群から選択される、
請求項１６に記載のシステム。
【請求項２７】
前記少なくとも１つの性能評価基準をユーザのクライアント装置に提供するステップをさらに含む、
請求項１６に記載のシステム。
【請求項２８】
前記第１のワーカープールと前記コンピュータシステムとの間のインターフェイスとして機能するように構成されたワーカーモジュールを準備するステップをさらに含む、
請求項１６に記載のシステム。
【請求項２９】
複数のノード上に第２のワーカープールを実装して、各ノードが前記第２のワーカープールからの１又は２以上のワーカーを含むようにするステップと、
前記第２のワーカープールに、前記コンピュータシステムと相互作用するように構成された第２のタスクを実行するための命令セットを与えるステップと、
前記第２のワーカープールを使用して前記第２のタスクを実行するステップと、
をさらに含む請求項１６に記載のシステム。
【請求項３０】
命令を記憶する記憶装置であって、前記命令は、１又は２以上のコンピュータシステムによって実行された時に、
複数のノード上に第１のワーカープールを実装して、各ノードが前記第１のワーカープールからのワーカーのうちの１つ又は２つ以上を含むようにするステップと、
前記第１のワーカープールに、前記コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与えるステップと、
前記第１のワーカープールを使用して前記第１のタスクを実行するステップと、
前記第１のワーカープールからの前記ワーカーが前記第１のタスクを実行している間に、前記コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタするステップと、
を含む動作を実行する、
ことを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
〔関連出願との相互参照〕
本出願は、２０１５年６月９日に出願された米国仮特許出願第６２／１７３，２５１号に対する優先権を主張するものであり、この文献は、その全体が引用により本明細書に組み入れられる。
【背景技術】
【０００２】
コンピュータシステム及び関連するサービスは、より高い性能及び信頼性を求めて増加の一途をたどるユーザからの要求に直面する。このようなサービスを実装の前後に試験することは、これらのサービスが正しく機能してユーザの要求についていくのを確実にするために重要である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
既存のコンピュータシステム試験ツールは、一般に柔軟性がなく、拡張が困難であり、クラウドサポートを提供しない。通常、このようなツールは、システムがどれだけ多くの同時ユーザに対処できるかを判断しようと試みる。しかしながら、この方法の問題点は、（接続によって表される）各ユーザが１つの要求を実行して、次の要求の実行まで応答を待っていること（例えば、接続毎に１つの要求を実行する閉フィードバックループ）を前提としている点である。このような前提は、ウェブアプリケーションには当てはまらないことが多い。例えば、異なるユーザが異なるタイプの行動を開始し、これらの行動が負担の異なる複数の要求を引き起す可能性もある。さらに、同期要求応答サイクルでは、試験中のシステム（すなわち、被試験システム又は「ＳＵＴ」）に送信される要求の数と共に応答時間の変化が生じることもある。
【課題を解決するための手段】
【０００４】
本明細書で説明する主題の実施形態は、分散型作業負荷試験のためのシステム及び方法に関する。本明細書で説明するベンチマークシステムは、ユーザが書いた（例えば、様々な負荷プロファイルの）試験シナリオを実行し、被試験システム（ＳＵＴ）に適用される（本明細書では「負荷」とも呼ぶ）作業負荷を複数のノードから生成することができる。このベンチマークシステムは、毎秒何百万件もの要求に拡張できる、及び／又は複数のデータセンタにわたって分散したノードから生成できる作業負荷を生成することができる。ベンチマークシステムは、ノードがユーザにとって単一のユニットとして機能するようにノード間の調整を行うことができる。このベンチマークシステムを使用して、試験中におけるＳＵＴの性能に関連する評価基準（例えば、カウンタ及び／又はヒストグラム）をモニタ及び／又は収集することができる。この性能評価基準に基づいて、レポート及び様々なチャートを自動的に生成することができる。このベンチマークシステムは、高速開発環境を提供するとともに、ワンステップ試験の展開及び実行を実現する。
【０００５】
本明細書で説明する主題は、１つの態様ではコンピュータシステムを試験する方法に関する。この方法は、１又は２以上のコンピュータを用いて、複数のノード上に第１のワーカープールを実装して、各ノードが第１のワーカープールからのワーカーのうちの１つ又は２つ以上を含むようにするステップと、第１のワーカープールに、コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与えるステップと、第１のワーカープールを使用して第１のタスクを実行するステップと、第１のワーカープールからのワーカーが第１のタスクを実行している間に、コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタするステップと、を実行するステップを含む。
【０００６】
いくつかの例では、複数のノード内の各ノードが、仮想マシン及び／又は物理的マシンであり、或いはこれらのマシンを含む。複数のノードは、複数のデータセンタに存在することができる。いくつかの例では、第１のプールからの各ワーカーが、別個のノードに存在する。これとは別に、又はこれに加えて、第１のプールからの少なくとも２つのワーカーは、単一のノードに存在する。複数のノードは、少なくとも１つのディレクタノードと、少なくとも１つのワーカーノードとを含むことができる。第１のタスクは、コンピュータシステムに要求を送信するステップを含むことができる。この要求は、例えばハイパーテキストトランスファプロトコル（ＨＴＴＰ）要求及び／又はメッセージキュー（ＭＱ）要求とすることができ、或いはこれらの要求を含むことができる。
【０００７】
様々な例では、第１のプールからの各ワーカーが、第１のタスクを実行する際に、コンピュータシステムに一連の要求を指定速度で送信する。これとは別に、又はこれに加えて、第１のプールからの各ワーカーは、第１のタスクを実行する際に、以前の要求に対するコンピュータシステムからの応答を受け取るのを待つことなくコンピュータシステムに要求を送信するように構成することができる。少なくとも１つの性能特性は、例えば速度及び／又は待ち時間とすることができ、或いはこれらを含むことができる。方法は、少なくとも１つの性能評価基準をユーザのクライアント装置に提供するステップを含むことができる。方法は、第１のワーカープールとコンピュータシステムとの間のインターフェイスとして機能するように構成されたワーカーモジュールを準備するステップを含むことができる。
【０００８】
いくつかの例では、方法が、複数のノード上に第２のワーカープールを実装して、各ノードが第２のワーカープールからの１又は２以上のワーカーを含むようにするステップと、第２のワーカープールに、コンピュータシステムと相互作用するように構成された第２のタスクを実行するための命令セットを与えるステップと、第２のワーカープールを使用して第２のタスクを実行するステップと、を含む。第１のタスクと第２のタスクは並行して実行することができる。
【０００９】
本明細書で説明する主題は、別の態様ではシステムに関する。このシステムは、複数のノード上に第１のワーカープールを実装して、各ノードが第１のワーカープールからのワーカーのうちの１つ又は２つ以上を含むようにするステップと、第１のワーカープールに、コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与えるステップと、第１のワーカープールを使用して第１のタスクを実行するステップと、第１のワーカープールからのワーカーが第１のタスクを実行している間に、コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタするステップと、を含む動作を実行するようにプログラムされた１又は２以上のコンピュータを含む。
【００１０】
いくつかの例では、複数のノード内の各ノードが、仮想マシン及び／又は物理的マシンであり、或いはこれらのマシンを含む。複数のノードは、複数のデータセンタに存在することができる。いくつかの例では、第１のプールからの各ワーカーが、別個のノードに存在する。これとは別に、又はこれに加えて、第１のプールからの少なくとも２つのワーカーは、単一のノードに存在する。複数のノードは、少なくとも１つのディレクタノードと、少なくとも１つのワーカーノードとを含むことができる。第１のタスクは、コンピュータシステムに要求を送信するステップを含むことができる。この要求は、例えばハイパーテキストトランスファプロトコル（ＨＴＴＰ）要求及び／又はメッセージキュー（ＭＱ）要求とすることができ、或いはこれらの要求を含むことができる。
【００１１】
様々な例では、第１のプールからの各ワーカーが、第１のタスクを実行する際に、コンピュータシステムに一連の要求を指定速度で送信する。これとは別に、又はこれに加えて、第１のプールからの各ワーカーは、第１のタスクを実行する際に、以前の要求に対するコンピュータシステムからの応答を受け取るのを待つことなくコンピュータシステムに要求を送信するように構成することができる。少なくとも１つの性能特性は、例えば速度及び／又は待ち時間とすることができ、或いはこれらを含むことができる。動作は、少なくとも１つの性能評価基準をユーザのクライアント装置に提供するステップを含むことができる。動作は、第１のワーカープールとコンピュータシステムとの間のインターフェイスとして機能するように構成されたワーカーモジュールを準備するステップを含むことができる。
【００１２】
いくつかの例では、動作が、複数のノード上に第２のワーカープールを実装して、各ノードが第２のワーカープールからの１又は２以上のワーカーを含むようにするステップと、第２のワーカープールに、コンピュータシステムと相互作用するように構成された第２のタスクを実行するための命令セットを与えるステップと、第２のワーカープールを使用して第２のタスクを実行するステップと、を含む。第１のタスクと第２のタスクは並行して実行することができる。
【００１３】
本明細書で説明する主題は、別の態様では記憶装置に関する。この記憶装置は、命令を記憶し、この命令は、１又は２以上のコンピュータシステムによって実行された時に、複数のノード上に第１のワーカープールを実装して、各ノードが第１のワーカープールからのワーカーのうちの１つ又は２つ以上を含むようにするステップと、第１のワーカープールに、コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与えるステップと、第１のワーカープールを使用して第１のタスクを実行するステップと、第１のワーカープールからのワーカーが第１のタスクを実行している間に、コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタするステップと、を含む動作を実行する。
【００１４】
いくつかの例では、複数のノード内の各ノードが、仮想マシン及び／又は物理的マシンであり、或いはこれらのマシンを含む。複数のノードは、複数のデータセンタに存在することができる。いくつかの例では、第１のプールからの各ワーカーが、別個のノードに存在する。これとは別に、又はこれに加えて、第１のプールからの少なくとも２つのワーカーは、単一のノードに存在する。複数のノードは、少なくとも１つのディレクタノードと、少なくとも１つのワーカーノードとを含むことができる。第１のタスクは、コンピュータシステムに要求を送信するステップを含むことができる。この要求は、例えばハイパーテキストトランスファプロトコル（ＨＴＴＰ）要求及び／又はメッセージキュー（ＭＱ）要求とすることができ、或いはこれらの要求を含むことができる。
【００１５】
様々な例では、第１のプールからの各ワーカーが、第１のタスクを実行する際に、コンピュータシステムに一連の要求を指定速度で送信する。これとは別に、又はこれに加えて、第１のプールからの各ワーカーは、第１のタスクを実行する際に、以前の要求に対するコンピュータシステムからの応答を受け取るのを待つことなくコンピュータシステムに要求を送信するように構成することができる。少なくとも１つの性能特性は、例えば速度及び／又は待ち時間とすることができ、或いはこれらを含むことができる。動作は、少なくとも１つの性能評価基準をユーザのクライアント装置に提供するステップを含むことができる。動作は、第１のワーカープールとコンピュータシステムとの間のインターフェイスとして機能するように構成されたワーカーモジュールを準備するステップを含むことができる。
【００１６】
いくつかの例では、動作が、複数のノード上に第２のワーカープールを実装して、各ノードが第２のワーカープールからの１又は２以上のワーカーを含むようにするステップと、第２のワーカープールに、コンピュータシステムと相互作用するように構成された第２のタスクを実行するための命令セットを与えるステップと、第２のワーカープールを使用して第２のタスクを実行するステップと、を含む。第１のタスクと第２のタスクは並行して実行することができる。
【００１７】
添付図面及び以下の説明には、本明細書で説明する主題の１又は２以上の実施形態の詳細を示す。明細書、図面及び特許請求の範囲からは、主題の他の特徴、態様及び利点が明らかになるであろう。
【図面の簡単な説明】
【００１８】
【図１】コンピュータシステムを試験するベンチマークシステム例の概略図である。
【図２】コンピュータシステムを試験するベンチマークシステム例の概略図である。
【図３】ベンチマークシステムのワーカーノード例の概略図である。
【図４】図１のベンチマークシステム例の概略図である。
【図５】図１のベンチマークシステム例の概略図である。
【図６】図１のベンチマークシステム例の概略図である。
【図７】コンピュータシステムの試験のための要求率と時間を対比させたプロット例である。
【図８】コンピュータシステムの試験のための待ち時間と時間を対比させたプロット例である。
【図９】ベンチマークシステムのダッシュボードのスクリーンショットである。
【図１０】コンピュータシステムを試験する方法例のフローチャートである。
【発明を実施するための形態】
【００１９】
様々な図面における同様の参照番号及び名称は同様の要素を示す。
【００２０】
本明細書で説明する主題の例は、コンピュータシステム（すなわち、被試験システム又は「ＳＵＴ」）を試験するためのシステム及び方法に関する。一般に、これらのシステム及び方法は、アプリケーションプログラミングインターフェイス（ＡＰＩ）を用いた他のプログラム、コンピュータシステム及び／又はサービスとの容易な統合を実現する。いくつかの例では、システム及び方法がＥＲＬＡＮＧプログラミング言語を用いて実装されるが、他のプログラミング言語を使用することもでき、システム及び方法は、いずれかの特定のプログラミング言語に限定されるものではない。
【００２１】
システム及び方法は、一般にＳＵＴが対処できる要求の数を特定するように構成される。システム及び方法は、開ループ法を用いて一定の要求率を維持することが好ましい。一定要求率は、ＳＵＴに関連するいずれの作業負荷の急増及び／又は応答時間にも関わらずに維持することができる。この一定要求率の手法は、ＳＵＴの応答時間によって要求率が変化する従来の手法（例えば、閉ループシステム）とは異なる。従来の閉ループ手法では、作業負荷の急増に出くわすと、ＳＵＴに送られる要求の数が減少する。しかしながら、いくつかの例では、システム及び方法が開ループ手法を使用し、及び／又は一定要求率を使用しないこともある。例えば、一定要求率を保証又は達成できないことがある。これとは別に、又はこれに加えて、閉ループ手法が望ましく、及び／又はいくつかの試験に利用することもできる。システム及び方法は、一定要求率を維持するようにも、或いは（例えば、指定された形で時間と共に）要求率の変化を可能にするようにも構成することができる。
【００２２】
システム及び方法は、ＳＵＴに関連する性能評価基準を収集するようにも構成される。このような性能評価基準は、システム及び方法のユーザに試験中のＳＵＴの性能に関連する情報を提供する。性能評価基準は、例えば、処理速度、待ち時間、要求数、総メッセージサイズ、エラー数、応答（例えば、ＨＴＴＰ  ２００応答及び／又はＨＴＴＰ  ５００応答）数、チャットルーム数、ユーザ数、チャットルーム当たりのメッセージ数、ＣＰＵ使用率及び／又はメモリ使用量を含むことができる。システム及び方法のユーザは、試験中に収集される評価基準のタイプを指定できることが好ましい。カウンタ及びヒストグラムなどの、システム及び方法が使用する評価基準収集計器は、実行にほんの２μｓほどしか掛からない。
【００２３】
好ましい例では、システム及び方法が、ユーザにコマンドラインユーザインターフェイス（ＣＬＩ）又はダッシュボードを提供する。ユーザは、このＣＬＩを使用して、試験に関連する命令及びパラメータを入力することができる。ＣＬＩは、例えば拡張Ｌｉｓｐ型ドメイン固有言語（ＤＳＬ）で書かれた命令文又はプログラムを受け入れることができる。ユーザが作成したあらゆるプログラム又は命令文は保存され、後で後続の試験中に再利用できることが好ましい。システム及び方法は、ＬＵＡなどの他のプログラミング言語に拡張可能（かつスケーラブル）であることが好ましい。用途によっては、試験パラメータがデフォルト値に設定される。
【００２４】
図１〜図５は、コンピュータシステム又はコンピュータ実装サービスの性能を試験するベンチマークシステム例１００の概略図である。図１を参照すると、ベンチマークシステム１００は、アプリケーションプログラミングインターフェイス（ＡＰＩ）サーバ１０２と、クラウドコントローラ１０４と、１又は２以上のワーカーノード１０６ａ及びディレクタノード１０６を含む複数のノード１０６と、被試験システム（ＳＵＴ）１０８と、コマンドラインインターフェイス（ＣＬＩ）１１０と、クライアント装置１１２とを含む。一般に、ＡＰＩサーバ１０２は、ＳＵＴに対して実行される（本明細書では「試験」とも呼ぶ）ベンチマークのライフサイクルを制御する。ＡＰＩサーバ１０２は、例えばハイパーテキスト転送プロトコル（ＨＴＴＰ）サーバとすることができ、又はこれを含むことができる。１つの例では、ＡＰＩサーバ１０２を使用して、ベンチマーク試験の開始及び終了を行い、試験からの性能評価基準（例えば、データログ、チャート又はグラフ）を受け取り、及び／又は１又は２以上のユーザに性能評価基準を提供する。
【００２５】
クラウドコントローラ１０４は、複数のノード１０６内のワーカーノード１０６ａ及びディレクタノード１０６ｂの割り当て及び割り当て解除に使用される。クラウドコントローラ１０４は、例えばＡＭＡＺＯＮ  ＷＥＢ  ＳＥＲＶＩＣＥＳ（ＡＷＳ）又はＧＯＯＧＬＥ  ＣＬＯＵＤ  ＰＬＡＴＦＯＲＭなどのクラウドサービスプロバイダをサポートする、又はこれらにアクセスするプラグ式モジュールとすることができる。複数のノード１０６内の各ノードは、ベンチマーク及び収集の実行、及び／又は性能評価基準の処理に使用される仮想マシン又は物理的マシンである。一般に、ワーカーノード１０６ａは、試験中にＳＵＴに負荷をかけ、及び／又はＳＵＴに関連する性能評価基準を収集するために使用される。ディレクタノード１０６ｂは、一般にワーカーノード１０６ａによって収集された性能評価基準を統合及び／又は処理するために使用される。１つの例では、複数のノード１０６内のノードが、カリフォルニア州サンフランシスコのＤｏｃｋｅｒ社によって開発されたｄｏｃｋｅｒコンテナなどの単独計算過程であり、又はこのような単独計算過程を含む。
【００２６】
複数のノード１０６の使用には、ベンチマークシステム１００が拡張可能になり、幅広い要求及び接続を処理できるようになるという利点がある。いくつかの例では、ベンチマークシステム１００が、何百万件もの要求及び接続を処理することができる。複数のノードは、例えば最大５０個のノード、１００個のノード、又はそれ以上のノードを使用して所望の拡張性を達成することができる。
【００２７】
ベンチマークシステム１００のユーザは、クライアント装置１１２上に設けられたＣＬＩ１１０を使用してベンチマークシステム１００と相互作用することができる。例えば、ユーザは、ＣＬＩを使用してベンチマーク試験のための様々なパラメータを指定し、及び／又は試験から得られた性能評価基準にアクセスすることができる。ユーザは、ＣＬＩを使用して、試験に使用すべき所望のノードタイプを指定又は選択することもできる。ＣＬＩ１１０は、ＰＹＴＨＯＮで書くことができ、及び／又はＡＰＩサーバ１０２にＨＴＴＰコールを行うために使用することができる。他の例では、ユーザが、ＣＬＩ１１０ではなくＰＹＴＨＯＮアプリケーションプログラミングインターフェイス（ＡＰＩ）を使用してベンチマークシステム１００と相互作用することができる。
【００２８】
いくつかの実装では、ＳＵＴ１０８が、ベンチマークシステム１００によって試験されているコンピュータシステム又はコンピュータ実装サービスである。試験中、ベンチマークシステム１００は、例えばＳＵＴ１０８に様々なタスクを高速で実行するように要求することによって、ＳＵＴ１０８に一定の要求又は負荷を加える。ベンチマークシステム１００は、ＳＵＴ１０８が負荷状態で動作している時にＳＵＴ１０８の性能をモニタして、関連する性能評価基準を収集する。ＡＰＩサーバ１０２は、試験中又は試験後に、評価基準を受け取って分析のためにユーザに転送することができる。
【００２９】
様々な例では、ベンチマークシステム１００のコンポーネントが、同じ地理的位置に存在することも又はしないこともある複数のコンピュータシステム上に存在する。例えば、クラウドコントローラ１０４及びＡＰＩサーバ１０２は、同じ又は異なる地理的位置に存在できる同じ又は異なるコンピュータシステム上で動作するソフトウェアコンポーネントとすることができる。同様に、複数のノード１０６も、同じ又は異なる地理的位置に存在する同じ又は異なるコンピュータシステム上で動作することができる。いくつかの例では、複数のノード１０６が、異なる地理的位置に存在できる２又は３以上のデータセンタ内に存在する２又は３以上のノードを含む。これに加えて、又はこれとは別に、ＳＵＴ１０８は、同じ又は異なる地理的位置に存在する１又は２以上のコンピュータシステムとすることができ、又はこのようなコンピュータシステムを含むことができる。ＳＵＴ１０８の地理的位置と、複数のノード１０６のうちの１つ又は２つ以上の地理的位置は、同じとすることも又は異なることもできる。
【００３０】
ノードが、世界の異なる地域における２又は３以上のデータセンタ内に存在する場合には、一般にノード間の高速伝送は存在せず、ノード間の距離が一貫性を欠き又は異なる場合もある。さらに、２又は３以上のノードが異なるプライベートネットワーク上に存在することにより、（例えば、各ノードが１つおきのノードに接続された）ハイパーキューブトポロジの構成が困難かつ非セキュアになる場合もある。このような課題に対処するために、システム及び方法のいくつかの実装は、（例えば、完全なＥＲＬＡＮＧリモートプロシージャコールの代わりに）制限されたプロトコルを利用して（例えば、ハイパーキューブ型ではなくスター型に）構成を単純化し、及び／又は（例えば、任意のコード実行を行わずに）セキュリティを強化する。
【００３１】
図１を参照すると、ユーザは、ベンチマークシステム１００を使用してＳＵＴ１０８の試験を開始するために、クライアント装置１１２上のＣＬＩ１１０を用いて試験要求を提出する。この要求は、様々な試験パラメータ及び／又は命令を含み、（例えば、ＨＴＴＰ  Ｇｅｔを使用して）クライアント装置１１２から接続１１４に沿ってＡＰＩサーバ１０２に転送される。次に、ＡＰＩサーバ１０２は、（例えば、ユーザがＣＬＩ１１０を通じて指定した）複数のノード１０６を割り当てる命令を接続１１６に沿ってクラウドコントローラ１０４に送信する。最低限２つのノード１０６を、すなわち試験を実行するための少なくとも１つのノード（すなわち、ワーカーノード１０６ａ）と、性能評価基準を収集及び／又は集約するための１つのノード（すなわち、ディレクタノード１０６ｂ）とを割り当てることができる。クラウドコントローラ１０４は、接続１１８を使用して所望の数のノードを割り当てると、制御をＡＰＩサーバ１０２に戻す。クラウドサービスプロバイダによっては、ノードを割り当てる際に、指定された画像又はソフトウェアをインストールしてセキュアシェル（ＳＳＨ）サーバを立ち上げることが必要なものもある。ＡＰＩサーバ１０２は、ＳＳＨサーバを介して及び／又はＳＳＨプロトコルを用いてノード１０６と相互作用することができる。
【００３２】
図２及び図３を参照すると、ＡＰＩサーバ１０２は、ノード１０６の割り当て後に、ノード１０６上にいくつかのソフトウェアを設定又はインストールすることができる。１つの例では、接続１２０に沿って２つのソフトウェアモジュールがインストールされる。一方のモジュールは、各ワーカーノード１０６ａにおけるベンチマークの実行及び評価基準の収集を制御するノードモジュール１２２である。ノードモジュール１２２は、各ノードとＡＰＩサーバ１０２との間の相互作用機構を提供することもできる。他方のモジュールは、ＡＰＩサーバ１０２を通じてＳＵＴ１０８と相互作用する（本明細書では、単純にワーカーとも呼ぶ）ワーカーモジュール１２４である。一般に、ワーカー１２４には、試験中にＳＵＴ１０８に負荷をかける１又は２以上のタスク又はステップを実行する命令が与えられる。これとは別に、又はこれに加えて、ワーカー１２４は、試験中に性能評価基準を収集するようにも構成される。ソフトウェアのインストール後には、割り当てられたノード１０６が正常な状態で正しく動作していることを確認するための１又は２以上のチェックを（例えば、ネットワークタイミングプロトコル（ＮＴＰ）に基づいて）行うことができる。
【００３３】
図４を参照すると、ＡＰＩサーバ１０２は、ノード１０６が割り当てられて所望のソフトウェアが設定されると、ワーカーノード１０６ａ上に存在するワーカーを作動させることによってベンチマーク試験を開始する。一般に、ワーカーは、１又は２以上のタスクを含んでＳＵＴ１０８に負荷を導入する試験計画又は試験シナリオを実行する。このシナリオは、例えばＳＵＴ１０８が処理（例えば、検索）の実行、情報の抽出及び／又は情報の送信などの何かを行うことを求める一連の要求１２６を含むことができる。ＳＵＴ１０８内に負荷が生じると、ワーカーは、試験中のＳＵＴ１０８の性能に関連する評価基準の収集及び／又はモニタリングも行う。図示の例では、ベンチマークを実行するための２つのワーカーノード１０６ａと、ワーカーノード１０６ａが収集した評価基準を処理するための１つのディレクタノード１０６ｂという３つのノードが割り当てられている。
【００３４】
一般に、ワーカーによって実行されるシナリオは、ＳＵＴ１０８の全体的な目的に関連することができる。例えば、ＳＵＴ１０８が検索を実行して検索結果を送信するように設計されている場合、シナリオは、（例えば、データベース内で又はインターネットを介して）検索を行って検索結果を提供する命令をワーカーがＳＵＴ１０８に送信するように仕向けるものとすることができる。同様に、ＳＵＴ１０８がメッセージを取り出して配信するように設計されている場合、シナリオは、ワーカーがＳＵＴ１０８にメッセージを送信して１又は２以上の受信者にメッセージを配信するように仕向けるものとすることができる。例えば、ワーカーがＳＵＴ１０８に提出できる考えられる要求の例としては、検索要求、印刷要求、読み取り要求、計算要求、チャットルーム形成要求、及び／又はメッセージ送信要求（例えば、チャットルームのためのチャットメッセージ）が挙げられる。一般に、要求のタイプはＳＵＴ１０８に依存する。例えば、チャットシステムＳＵＴの場合、ワーカーは、チャットルームを形成する要求、連絡先をリストに追加する要求、リストから連絡先を削除する要求、プライベートメッセージ又は通常のメッセージを送信する要求、及び／又は同報メッセージを送信する要求などの、チャットシステムに特化した要求を送信することができる。ゲームシステムの場合、要求の例としては、何かの建設、攻撃、移動などの、ゲームのプレーヤによって行われる要求が挙げられる。メッセージブローカの場合、要求の例としては、メッセージキューへの登録、メッセージキューの登録解除、キューへのメッセージ送信、キューからのメッセージ受信などが挙げられる。一般に、ユーザは、ワーカーによって実行される命令を、シナリオを実行するように制御する。これらの命令は、所望の負荷生成率及び／又は強度、並びに収集すべきあらゆる所望の性能評価基準を含むことができる。ユーザは、ＣＬＩ１１０、及び／又はクライアント装置１１２上のダッシュボードを通じて命令を実行することができる。
【００３５】
一般に、ベンチマークシステム１００においてシナリオを生成するには、ワーカーのプールを構築する。プール内のワーカーは、タスク命令を含む又は規定する同じワーカーモジュールを参照するので、同様のタスクを行う。プール内に含めるべきワーカー数を定めるサイズパラメータを指定する。一般に、プール内の各ワーカーは、プール内に定められた動作を実行する。複数のノード上でシナリオが実行される場合、ワーカーは、ラウンドロビン方式で分散させることができる。ベンチマークシステム１００は、ランプ関数を用いて何らかの期間にわたってワーカーの数を増加させる能力を有することが好ましい。
【００３６】
様々な例では、ベンチマークシステムが複数のプールを使用し、これらの複数のプールを異なるワーカーに結び付けることができる。例えば、１つのプールがＨＴＴＰ要求を実行し、他のプールがＭＱ要求を実行することができる。このことは、複雑なシナリオを記述する上で非常に有用であり、各ワーカープールが他のプールと無関係に動作できるようにする。
【００３７】
様々な実装では、ワーカーによって実行されるタスクを、時間と共に変化するように構成することができる。例えば、ワーカーがＳＵＴ１０８に要求を送信する割合を、例えば時間と共に線形的に、二次的に、ポワソン的に又は段階的に変化するようにプログラムすることができる。同様に、ワーカーが実行するタスクのタイプを試験の進行と共に変更するようにワーカーに指示することもできる。例えば、ワーカーは、ＳＵＴ１０８に検索機能を実行するように要求することから、ＳＵＴ１０８に印刷機能を実行するように要求することに変更を行うことができる。
【００３８】
図５を参照すると、試験の実行中、ワーカーノード１０６ａは、いくつかの性能評価基準を収集し、この性能評価基準を（例えば、毎秒又は１０秒毎に）接続１２８に沿ってディレクタノード１０６ｂに送信する。次に、ディレクタノード１０６ｂは、これらの評価基準を編集又は統合し、統合された評価基準を接続１３２に沿って評価基準処理モジュール１３０に送信する。評価基準処理モジュール１３０は、試験から得られたデータログの記録、及び／又は試験結果の様々なプロット、チャート及び／又はテーブルの生成を行うことができる。例えば、評価基準処理モジュール１３０は、ＳＵＴ１０８に関連する速度（例えば、要求率又は応答率）又は待ち時間の時間履歴を生成することができる。例えば、待ち時間は、第１のタイムスタンプ（例えば、要求の開始前又は要求の送信時）と第２のタイムスタンプ（例えば、要求の完了後又は要求に対する応答の受信時）との間の差分を求めることによって測定することができる。ＡＰＩサーバ１０２は、接続１３４に沿って、データログ、プロット、チャート及び／又はテーブルを含む試験結果を評価基準処理モジュール１３０から取り出すことができる。試験結果は、接続１３６に沿ってクライアント装置１１２に転送することができる。ユーザは、試験中（例えば、リアルタイムで）及び／又は試験の完了時に結果を見ることができる。いくつかの例では、ＡＰＩサーバ１０２が、電子メールによって１又は２以上のユーザに試験結果のレポートを転送する。
【００３９】
一般に、ベンチマーク試験は、シナリオの所望の終了時間に到達するまで進められる。しかしながら、場合によっては、例えば試験中におけるＳＵＴ１０８の性能不足又は不具合を理由に早めに試験を終了することもできる。試験の早期終了は、ユーザが手動で実行することも、及び／又はベンチマークシステム１００が自動的に実行することもできる。
【００４０】
図６を参照すると、試験の完了後、ＡＰＩサーバ１０２は、試験に使用したノード１０６の割り当てを解除する命令を接続１３８に沿ってクラウドコントローラ１０４に送信することができる。次に、クラウドコントローラ１０４は、接続１４０を使用してノード１０６の割り当てを解除し、及び／又はノード１０６にインストールされているあらゆるソフトウェアモジュール（例えば、ノードモジュール１２２及びワーカーモジュール１２４）をアンインストールすることができる。或いは、ノードの割り当て解除及び／又はソフトウェアモジュールのアンインストールをＡＰＩサーバ１０２が行うこともできる。その後、割り当て解除されたノードは、ベンチマークシステム１００によって行われる別の試験などの他の目的で自由に使用することができる。いくつかの実装では、ソフトウェアモジュールがノード上に維持されてアンインストールされない。これにより、将来的な試験の展開を速めることができる。
【００４１】
様々な実施形態では、ベンチマークシステム１００のコンポーネント間で送信されるデータ、及びＳＵＴ１０８との間で送信されるデータが圧縮される。例えば、システムコンポーネント間で送信されるデータログ及び評価基準データを圧縮することができる。このような圧縮は、さらなる帯域幅の割り当てを必要とすることなくさらに多くのデータの送信を可能にすることができる。
【００４２】
いくつかの例では、ワーカーが、試験シナリオのための関数を提供するソフトウェアモジュール（例えば、ＥＲＬＡＮＧモジュール）である。ワーカーは、ＨＴＴＰ又はＸＭＰＰのような一般的なプロトコルを実行することも、或いは特定の試験事例のみに関する特別なルーチンを実行することもできる。ワーカーは、関連する評価基準の実装及び収集を行うこともできる。ワーカーモジュールの形成には以下の言語例を使用することができ、この中の「ｓｅａｒｃｈ（Ｓｔａｔｅ，＿Ｍｅｔａ，Ｕｒｌ，Ｔｅｒｍ）」は、ヒストグラム内の待ち時間評価基準を収集するように構成されたＡＰＩ関数を指定するものである。
2018524693.tif 000003
【００４３】
様々な実装では、試験計画又は試験シナリオがＤＳＬコードで実装される。ＤＳＬコードは、Ｌｉｓｐ様の表記を有することができ、ＥＲＬＡＮＧタプル及びリストに基づくことが好ましい。ＤＳＬコードは、シナリオを実装するために、工程（すなわち、ワーカー）の数と、ベンチマークにおいて負荷を生成するために使用される特定の要求とを定める。以下のテキストは、ＥＲＬＡＮＧリスト及びタプルを用いて実装されるシナリオ例を表すものである。
2018524693.tif 000004
この例では、「ｓｉｚｅ」が、作業負荷を生成するために使用される工程数を定め、「ｗｏｒｋｅｒ＿ｔｙｐｅ」が、ワーカーモジュールを指定する。「ｌｏｏｐ」セクションは、試験の速度及び実行時間を指定する。このシナリオでは、ワーカーが、５分間にわたる毎秒１０回の要求率の「ｓｅａｒｃｈ」関数を（連続して）２回実行するように指示されている。この「ｓｅａｒｃｈ」関数は、上述したワーカーモジュールの例で定められたＡＰＩ関数を参照する。
【００４４】
様々な例では、ユーザが、ワーカーモジュール及び試験シナリオを形成することによってＳＵＴの試験を展開する。ユーザは、例えば新たなワーカーモジュールの形成、既存のワーカーモジュールの使用、又は既存のワーカーモジュールの修正という選択肢を有する。ワーカーモジュールは、試験に使用することができてＤＳＬ命令文を含むことができるＡＰＩを公開する。試験シナリオは、ワーカーモジュールを参照し、実行時にＡＰＩを要求する。
【００４５】
様々な実装では、ワーカープールが、同じ又は異なるタスクを実行する一群のワーカー又はワーカーモジュール（例えば、ＥＲＬＡＮＧ処理）である。ワーカーは、ワーカーノードにわたって分散することができ、試験計画又は試験シナリオに定められた１又は２以上のタスクを同時に実行することができる。ワーカープールは、試験中に複数のワーカーが変化できるように、数又は工程を動的に増減させることができる。また、タスクの数及びタイプは、試験中にユーザからの命令に従って変化することもできる。
【００４６】
いくつかの例では、試験が複数のワーカープールを利用し、各プールが異なる一連のタスクを実行する。例えば、１つのプールは、ＳＵＴに１つのタイプの要求（例えば、検索要求）を行い、他のプールは、異なるタイプの要求（例えば、読み取り要求）を行うことができる。これらの複数のワーカープールは、異なるワーカーノード上に存在することも、又は同じノード上に存在することもできる。例えば、ワーカーノードは、複数のプールからの１又は２以上のワーカーを含むことができる。異なるプールからのワーカーを使用して、同じ時点又は異なる時点でＳＵＴに異なるタイプの負荷を導入することができる。例えば、１又は２以上の異なるワーカーモジュールに対し、ＨＴＴＰプール及び／又はメッセージキューイングプールなどの複数のワーカープールを参照することができる。
【００４７】
様々な実装では、ワーカーによって生じる負荷を、同期ループ及び／又は非同期ループを用いて実装することができる。同期ループは、負荷タイプ、時間、ランプ（例えば、線形又はポワソン）、動作タイプを指定することができ、入れ子状であることができる。非同期ループは、複数の処理を含むことができ、一定の要求率を維持するように構成することができる。以下のテキストは、１ｒｐｓ→５ｒｐｓの増加率で３０秒間にわたってＨＴＴＰ  ＧＥＴ要求を送信するループ例を生じるものである。
2018524693.tif 000005
【００４８】
ループ関数は、指定動作をループの形で繰り返し実行することによって負荷を生成するために使用することができる。ユーザは、ＤＳＬにループを追加する際に、ループの動作継続時間、動作の実行速度、線形分布、ポワソン分布又はその他の分布のいずれを用いて速度が増加するか、ループ内からどの動作が実行されるか、を指定することができる。全ての動作は、順に実行することができる。
【００４９】
ベンチマークが実行されると、システム及び方法は、動作の実行及び要求率の維持に必要な時間を測定する。要求が、達成可能な数よりも少ない場合、ループの実行工程は、残りの継続時間にわたってスリープ状態に入ることができる。システム及び方法は、ループの性能を高めるために、動作のバッチ処理を行って要求率を維持することができる。
【００５０】
応答時間が長くてシステム及び方法が要求率を維持できない場合には、「並行（ｐａｒａｌｌｅｌ）」又は「生成（ｓｐａｗｎ）」演算子を用いて複数の工程によって各反復を実行する非同期ループを使用することができる。システム及び方法は、ループ内で指定された要求率を保証しようと試みることができる。
【００５１】
様々な実装では、本明細書で説明するシステム及び方法が、高速、正確かつ拡張可能な結果評価基準を提供する。評価基準は、ワーカーノードによって収集することができ、及び／又は、例えばハッシュベースのデータ記憶及びアクセス機能を提供できるＥＲＬＡＮＧテーブル記憶システム（ＥＴＳ）を用いてワーカーノード又はディレクタノードに記憶することができる。結果評価基準は、例えばカウンタ及びヒストグラムを含むことができ、ディレクタノード上に集約することができる。カウンタは累積的なものであり、ＥＸＯＭＥＴＥＲなどのモニタリング又は集約ツールを用いて集約することができる。カウンタは、１〜２μｓの待ち時間で１秒毎に値を生成する特別な関数を使用することができる。ヒストグラムは、ＨＤＲＨＩＳＴＯＧＲＡＭなどのヒストグラムツールを用いて１〜２μｓの待ち時間でディレクタノード上に集約することができる。いくつかの実装は、評価基準の命名、評価基準のグループ化及び／又は評価基準のための測定単位の指定を目的として以下のような言語を使用することができる。
2018524693.tif 000006
【００５２】
図７及び図８は、コンピュータシステムの試験から得られた性能評価基準のプロット例である。図７は、試験中のワーカーの要求率（１秒当たりの要求）と時間とを対比させたプロット７００である。図示のように、要求率は、試験中に時間と共にほぼ線形的に増加する。図８は、試験中の待ち時間と時間とを対比させたプロット８００である。図８の各線は、一定割合の要求の待ち時間がその線を下回ることに対応する。一番上の線８０２は、１００％又は最大の待ち時間であり（すなわち、全ての待ち時間値は一番上の線を下回り）、一番上の線の次の線は、９９．９％、９９％、９５％などである。
【００５３】
図９は、本明細書で説明するシステム及び方法のためのダッシュボード例９００のスクリーンショットである。ユーザは、ダッシュボード９００を使用して、ＳＵＴに対する試験を構成し、実行して分析することができる。このダッシュボードは、ユーザが試験を識別又は区別するために名前又は別名（例えば、一連の文字列）を入力できる名前フィールド９０２を含む。ノードフィールド９０４は、（例えば、クラウドプロバイダからの）試験用ワーカーノードの数を指定するために使用される。クラウドフィールド９０６は、クラウドサービスプロバイダ（例えば、ＡＷＳ）を指定するために使用される。クラウドフィールド９０６は、ＡＰＩサーバによって指定されるような考えられるクラウドサービスプロバイダのドロップダウンリストを含むことができる。環境変数フィールド９０８は、試験用スクリプトに代入又は追加すべき何らかの値をユーザが指定できるようにする。スクリプト領域９１０は、スクリプト本体（例えば、ワーカープールのための命令）を含む。ユーザは、実行ボタン９１２を選択することによって試験を開始し、又はキャンセルボタン９１４を選択することによって試験をキャンセルすることができる。
【００５４】
図１０は、コンピュータシステムを試験する方法例１０００のフローチャートである。この方法は、複数のノードを割り当てるステップ（ステップ１００２）を含む。これらの複数のノード上に、第１のワーカープールを実装する（ステップ１００４）。各ノードは、第１のプールからのワーカーのうちの１つ又は２つ以上を含む。第１のワーカープールに、コンピュータシステムと相互作用するように構成された第１のタスクを実行するための命令セットを与える（ステップ１００６）。第１のワーカープールを使用して第１のタスクを実行する（ステップ１００８）。第１のプールからのワーカーが第１のタスクを実行している間に、コンピュータシステムに関連する少なくとも１つの性能評価基準をモニタする（ステップ１０１０）。
【００５５】
様々な例では、ワーカー又はワーカーモジュールが、一連のＤＳＬ命令文を含むＥＲＬＡＮＧアプリケーションである。ワーカーモジュールは、コマンドラインユーティリティを使用して生成することができる。例えば、新たなワーカーは、以下のコマンドを使用して生成することができ、
2018524693.tif 000007
この場合の＜ＭＺ＿ＢＥＮＣＨ＿ＳＲＣ＞は、システムソースコードまでの経路を示す。
このコマンドは、最小主義ではあるが完全に機能的な＜ｗｏｒｋｅｒ＿ｎａｍｅ＞という名前のワーカーを含む新たなディレクトリ＜ｗｏｒｋｅｒ＿ｎａｍｅ＞を形成する。このディレクトリには、ワーカーソースコードを含むｓｒｃ／＜ｗｏｒｋｅｒ＿ｎａｍｅ＞．ｅｒｌと、これを用いた単純なシナリオを含むｅｘａｍｐｌｅｓ／＜ｗｏｒｋｅｒ＿ｎａｍｅ＞．ｅｒｌとが存在する。
【００５６】
ＳＵＴへのアクセスが、ＴＣＰなどの既知のプロトコルに基づく場合、ｎｅｗ＿ｗｏｒｋｅｒコマンドは、この種のＳＵＴのためのコードを既に含んでいるワーカーを生成することができる。ベンチマークシステムは、以下を実行することによってリスト化される利用可能なプロトコルのリストを含む。
2018524693.tif 000008
【００５７】
新たなワーカーは、以下を使用してｎｅｗ＿ｗｏｒｋｅｒコマンドに追加パラメータを加えることによって生成することができる。
2018524693.tif 000009
【００５８】
いくつかの例では、ワーカーモジュールを用いたベンチマークシナリオのローカルインスタンスを立ち上げることによってワーカーモジュールが試験される。例えば、ユーザは、ワーカーソースコードディレクトリ内で、＜ｓｃｒｉｐｔ＞を、実行すべきベンチマークシナリオまでの経路に置き換えながら、以下のコマンドを実行することができる。
2018524693.tif 000010
【００５９】
環境変数は、−−ｅｎｖオプションを用いて受け渡すことができる。この実行モードでは、全てのｍａｋｅ＿ｉｎｓｔａｌｌという最上位命令文を無視することができる。
【００６０】
一般に、ワーカーは、一連のＤＳＬ命令文（例えば、サブルーチン）及び一連の評価基準を提供する。ワーカーは、内部状態を有することができるので、様々なサブルーチンが独立している必要はない。
【００６１】
以下は、ワーカーモジュールのための一連のＤＳＬ命令文の例である。
2018524693.tif 000011
【００６２】
この例は、ｉｎｉｔｉａｌ＿ｓｔａｔｅ／０、ｍｅｔｒｉｃ＿ｎａｍｅｓ／２、及びｐｒｉｎｔ／３という３つの関数をエクスポートする。これらのうちの最初の２つが、ワーカーモジュールに必要となり得る。
【００６３】
ｉｎｉｔｉａｌ＿ｓｔａｔｅ／０関数は、何かを戻すことができ、ワーカーの初期状態を初期化するために使用される。各並列実行ジョブは独自の状態を有することができる、従ってこの関数は、ジョブの開始毎に１回呼び出すことができる。ワーカーがステートレスである場合、空の文字列を状態として使用することができる。
【００６４】
場合によっては、ｍｅｔｒｉｃ＿ｎａｍｅｓ／２関数が必要になることもある。この関数は、ワーカーによって生成された評価基準のリストを戻す。
【００６５】
残りのエクスポートされる関数は、このワーカーが提供するＤＳＬ命令文を定義する。上記で定義されているｄｕｍｍｙ＿ｗｏｒｋｅｒは、文字列を標準出力に出力するのに有用な印刷命令文を提供する。
【００６６】
いくつかの例では、ユーザが、ワーカーによって提供されるＤＳＬ命令文を定めるために、このような命令文に出くわした時に呼び出されるＥＲＬＡＮＧ関数をエクスポートすることができる。エクスポートされる関数は、以下の一般形式のものとすることができる。
2018524693.tif 000012
【００６７】
この関数は、その関数が規定する命令文と同じ名前を有することができ、少なくとも後続のパラメータ、すなわち命令文の実行時におけるワーカーの内部状態を取ることができる。この関数は、命令文のパラメータに対応できるあらゆる数の他のパラメータを受け入れることもできる。
【００６８】
様々な実装では、文関数が２つの値のタプルを戻す。第１の値は、命令文の戻り値である。命令文は、戻り値を有していなければゼロを戻す。タプルの第２の要素は、命令文の実行後の新たなワーカーの初期状態である。
【００６９】
例えば、以下の関数は、ベンチマークシナリオでは｛ｆｏｏ，Ｘ，Ｙ｝として呼び出すことができる。
2018524693.tif 000013
【００７０】
いくつかの例では、性能評価基準が、シナリオ実行中に収集される数値である。評価基準は、ワーカーの主要結果であり、ユーザがベンチマークと共に受け取って評価したいと望む値を表す。
【００７１】
本明細書で説明するシステム及び方法は、例えばカウンタ、ゲージ、ヒストグラム及び導出された評価基準を含むことができる複数のタイプの評価基準をサポートすることができる。一般に、カウンタは単一の相加値であり、すなわち現在の値に新たな値を加算することができる。ゲージは、単一の非相加値であり、すなわち新たな値が以前の値に取って代わることが好ましい。ヒストグラムは、値の分布を定量的に示す一連の数値とすることができ、すなわち分布に新たな値が追加される。導出された評価基準は、ユーザが定義した関数を用いて、及び／又は別の評価基準値に基づいて定期的に評価される。例えば、ユーザは、速度及び／又は待ち時間などの他の性能評価基準の関数である評価基準を計算するようにシステムに指示することができる。
【００７２】
例えば、負荷が様々なサイズのＴＣＰパケットを含み、転送されている全データ量を追跡することが目的である場合には、カウンタ評価基準を使用することができる。分布（例えば、平均サイズ又は５０パーセンタイル）を取得することが目的である場合には、ヒストグラムを使用する。
【００７３】
ワーカーによって収集された評価基準は、ｍｅｔｒｉｃ＿ｎａｍｅｓ／２関数によって戻されるリスト内で告示することができる。各評価基準は、以下の形式のタプルに対応することができる。
2018524693.tif 000014
【００７４】
＜ｍｅｔｒｉｃ＿ｎａｍｅ＞は、評価基準に与えられる名前である。＜ｍｅｔｒｉｃ＿ｔｙｐｅ＞は、カウンタ又はヒストグラムとすることができる。
【００７５】
いくつかの例では、関連する評価基準を識別することができる。このことは、例えば成功率カウンタ及び失敗率カウンタなどのいくつかの評価基準値を同じチャート上にプロットするのに有用となり得る。グループ化された評価基準の告示は、主要評価基準リスト内のサブリスト内に配置することができる。
【００７６】
例えば、
2018524693.tif 000015
という評価基準告示では、ｓｕｃｃｅｓｓ＿ｒｅｑｕｅｓｔｓカウンタ及びｆａｉｌｅｄ＿ｒｅｑｕｅｓｔｓカウンタを含む評価基準のグループが生成されている。ここでは、１つのグループを使用して複数のグラフを生成することができる。例えば、成功要求及び失敗要求を含むグループは、絶対カウンタ値のグラフ及び割合値のグラフを生成することができる。
【００７７】
いくつかの例では、例えば以下の関数を呼び出すことによって、告示された評価基準をワーカーの内部から更新することができる。
2018524693.tif 000016
【００７８】
タプル｛“＜ｍｅｔｒｉｃ＿ｎａｍｅ＞”，＜ｍｅｔｒｉｃ＿ｔｙｐｅ＞｝は、評価基準の告示中に使用された同じものであり、更新すべき評価基準を識別する。＜ｖａｌｕｅ＞は、評価基準に加算される値である。
【００７９】
ＤＳＬ言語は、本明細書で説明するシステム及び方法のための試験シナリオを書くために使用することができる。一般に、この言語は、ＬＩＳＰ型プログラミング言語と同様の表記を有することができ、リスト及びタプルを含むことができる。リストは、角括弧で囲まれた要素をコンマで区切ったリストである。例えば、［Ａ，Ｂ，Ｃ］である。タプルは、波括弧で囲まれた要素をコンマで区切ったリストである。例えば、｛Ａ，Ｂ，Ｃ｝である。
【００８０】
いくつかの例では、シナリオを、最上位センテンスとドットのリストとすることができる。例えば、以下とすることができる。
2018524693.tif 000017
【００８１】
この例の各センテンスは、タプルとすることができる。タプルの第１の要素は、例えばプール又はアサートなどの呼び出す関数の名前を示すことができる。他の要素は、この関数に受け渡すパラメータとすることができる。パラメータは、アトム、タプル又はリストとすることができる。例えば、｛ｐｒｉｎｔ，“Ｈｅｌｌｏ，ｗｏｒｌｄ！”｝又は｛ａｄｄ，２，３｝である。
【００８２】
いくつかの例では、最上位センテンスが、シナリオを記述する最上位リスト内に出現できるセンテンスである。最上位センテンスは、最上位ディレクティブ及びプールという２つの種類の一方とすることができる。最上位ディレクティブは、シナリオに関するいくつかの一般的事実についてシステムに伝え、或いはいくつかのグローバルパラメータを定める。プールは、実行すべき実際の作業を記述する。
【００８３】
最上位ディレクティブの例は、｛ｍａｋｅ＿ｉｎｓｔａｌｌ，［｛ｇｉｔ，＜ＵＲＬ＞｝，｛ｂｒａｎｃｈ，＜Ｂｒａｎｃｈ＞｝，｛ｄｉｒ，＜Ｄｉｒ＞｝］｝である。この例は、シナリオの実行前に、遠隔地のｇｉｔリポジトリからワーカーノードにソフトウェアをインストールするようにシステムに指示するものである。例えば、この例は、以下の動作を実行する。
2018524693.tif 000018
【００８４】
この例では、ブランチが指定されていない場合、代わりにマスタが使用される。
【００８５】
さらなるディレクティブを提供することもできる。例えば、｛ｉｎｃｌｕｄｅ＿ｒｅｓｏｕｒｃｅ，ｈａｎｄｌｅ，“ｆｉｌｅｎａｍｅ．ｔｘｔ”｝というディレクティブ例は、追加のリソースファイルをシナリオに含めるようにベンチマークシステムに指示するものである。｛ａｓｓｅｒｔ，ａｌｗａｙｓ，＜Ｃｏｎｄｉｔｉｏｎ＞｝というディレクティブ例は、シナリオが実行されている間ずっと指定条件が満たされていることをチェックするようにベンチマークシステムに指示するものである。｛ａｓｓｅｒｔ，＜ＴｉｍｅＣｏｎｓｔａｎｔ＞，＜Ｃｏｎｄｉｔｉｏｎ＞｝というディレクティブ例は、少なくとも指定された時間にわたって条件が満たされていることをチェックするようにベンチマークシステムに指示するものである。条件は、特定の評価基準が数値的限界を満足できるように指定することができる。例えば、待ち時間が３０ミリ秒よりも短いことを条件とすることができる。
【００８６】
いくつかの例では、プールディレクティブが、ノード間で分散させて同時に行うべきジョブのプールを表し、ジョブが、ワーカーによって定義又は実行される命令セットである。ワーカーは、特定のサービス（例えば、ＨＴＴＰサーバ、ＦＴＰサーバ又はＴＷＩＴＴＥＲ）にアクセスするための命令セットを定めるプラグインとすることができ、又はこのようなプラグインを含むことができる。
【００８７】
以下は、１０個のノード上でＨＴＴＰ  ＧＥＴ要求を２つのサイトに同時に送信するプール例である。
2018524693.tif 000019
【００８８】
ｇｅｔ命令文は、組み込みｓｉｍｐｌｅ＿ｈｔｔｐワーカーによって提供される。プール命令文内の第１のパラメータは、プールオプションのリストである。
【００８９】
一般に、プールは、以下のようなプールの最上位命令文を用いて定めることができる。
2018524693.tif 000020
プールの最上位命令文は、オプションのリスト及び命令文のリストを含む２つの引数を取る。プールオプションのリストは、どれだけ多くのジョブを同時に立ち上げるか、可能な命令文のリストを定めるためにどのワーカーを使用すべきか、及びジョブをどのように立ち上げることができるかを定めることができる。ｓｉｚｅ及びｗｏｒｋｅｒ＿ｔｙｐｅが必要とされる場合もある。命令文のリストは、ジョブを定義する。ユーザは、選択されたワーカーによって定義された命令文及び標準ライブラリの命令文を使用することができる。
【００９０】
例えば、プールの最上位命令文は、以下とすることができる。
2018524693.tif 000021
この例は、２つのプールを含み、２つの別個のジョブを定める。第１のプールによって定められるジョブは、ｓｉｚｅオプションによって定められるように同時に１０回立ち上げられ、ｄｕｍｍｙ＿ｗｏｒｋｅｒによって定められる一連の命令文を用いて記述される。このジョブは、１つの命令文（すなわち、ｐｒｉｎｔ）のみを定め、標準出力に文字列を印刷するものである。他には何も指定されないので、全てのジョブが同時に立ち上げられる。このプールに関連するジョブは、｛ｐｒｉｎｔ，“ＡＡＡ”｝という単一の命令文を含むことができる。このジョブは、開始されると標準出力にＡＡＡという文字列を印刷して終了する。ｄｕｍｍｙ＿ｗｏｒｋｅｒを用いて定められる第２のプールに関するジョブは、標準出力にＢＢＢを印刷して終了するものである。このジョブは、並行して同時に５回立ち上げられる。要約すると、上記のスクリプト例は、ＡＡＡを１０回印刷することとＢＢＢを５回印刷することを全て同時に行うことを伴う２つのジョブを定める。３つのノード上でスクリプトを実行する場合には、１５個の文字列が３つの全てのノード間で均等に分散する。
【００９１】
プールのための様々なオプションを定めることもできる。例えば、｛ｓｉｚｅ，＜ｉｎｔ＞｝というオプションは、いくつのジョブを立ち上げなければならないかについてベンチマークシステムに指示するものである。この数は、いずれかの整数とすることができる。
【００９２】
｛ｗｏｒｋｅｒ＿ｔｙｐｅ，＜Ａｔｏｍ＞｝というオプションは、特定のジョブを書くための命令セットを定めるワーカーを識別するものである。一般に、プールは、１つタイプのワーカーしか含まない。複数のタイプのワーカーを使用する場合には、各ワーカータイプが別個のプールに関連するように複数のプールを定めることができる。
【００９３】
｛ｗｏｒｋｅｒ＿ｓｔａｒｔ，｛ｌｉｎｅａｒ，＜ｒａｔｅ＞｝｝というオプションは、間に一定の遅延を伴って並列ジョブを開始しなければならないことをシステムに示すものである。＜ｒａｔｅ＞は、１秒当たりにいくつのジョブを開始しなければならないかを示す。指定しなければ、全てのジョブが同時に開始される。ジョブの実行速度は、例えば線形的に又は二次的に時間と共に変化するように定めることができる。
【００９４】
｛ｗｏｒｋｅｒ＿ｓｔａｒｔ，｛ｐｏｉｓｓｏｎ，＜ｒａｔｅ＞｝｝というオプションは、ポワソン過程によって定められる速度でジョブを開始できることをシステムに示すものである。指定しなければ、全てのジョブが同時に開始することができる。
【００９５】
いくつかの例では、命令文が、変数としてブール条件を取ることができる。このような条件は、使用する比較演算を定めるアトムを第１の要素とするトリプレットによって定めることができる。考えられる演算は、例えば、ｌｔ（〜よりも小さい（ｌｅｓｓ  ｔｈａｎ））、ｇｔ（〜よりも大きい（ｇｒｅａｔｅｒ  ｔｈａｎ））、ｌｔｅ（〜以下の（ｌｅｓｓ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ  ｔｏ））、及びｇｔｅ（〜以上の（ｇｒｅａｔｅｒ  ｔｈｅｎ  ｏｒ  ｅｑｕａｌ  ｔｏ））である。第２及び第３の要素は、比較すべき２つの値である。各値は、数字（例えば、整数又は浮動小数点値）又は評価基準名のいずれかとすることができる。評価基準は、ベンチマーク中に収集される数値であり、ワーカーが定めることができる。例えば、ｄｕｍｍｙ＿ｗｏｒｋｅｒを使用する場合には、｛ｇｔ，“ｐｒｉｎｔ．ｖａｌｕｅ”，２０｝という条件が使用される。この条件は、印刷動作が２０回よりも多く行われた場合に成功する。
【００９６】
これとは別に、又はこれに加えて、本明細書で説明するシステム及び方法は、様々なループを使用することもできる。ループ命令文は、いくつかの命令文ブロックを複数回繰り返すようにベンチマークシステムに指示するものである。これにより、異なる負荷プロファイルの生成が可能になる。
【００９７】
一般形式では、ループ命令文を以下のように定義することができる。
2018524693.tif 000022
【００９８】
ループ命令文は、オプションのリスト及び命令文のリストという２つのパラメータを取る。命令文のリストは、繰り返すべき実際のジョブを定め、いずれかのワーカー、又は標準ライブラリで定められる命令文を含むことができる。オプションは、このジョブをどのように繰り返すかを定める。例えば、｛ｔｉｍｅ，＜ｔｉｍｅ＞｝というオプションは、命令ブロックをどれだけ長く繰り返すかを指定する。＜ｔｉｍｅ＞は、｛Ｎ，ｈ｝（Ｎ時間にわたる繰り返し）、｛Ｎ，ｍｉｎ｝（Ｎ分間にわたる繰り返し）、｛Ｎ，ｓｅｃ｝（Ｎ秒間にわたる繰り返し）、｛Ｎ，ｍｓ｝（Ｎミリ秒間にわたる繰り返し）として指定することができる。
【００９９】
｛ｒａｔｅ，＜ｒａｔｅ＞｝というオプションは、命令ブロックをどのような頻度で繰り返すかを指定する。＜ｒａｔｅ＞は、｛Ｎ，ｒｐｈ｝（１時間当たりＮ回の繰り返し）、｛Ｎ，ｒｐｍ｝（１分間当たりＮ回の繰り返し）、｛Ｎ，ｒｐｓ｝（１秒間当たりＮ回の繰り返し）、｛ｒａｍｐ，ｌｉｎｅａｒ，＜ｓｔａｒｔ−ｒａｔｅ＞，＜ｅｎｄ−ｒａｔｅ＞｝（＜ｓｔａｒｔ−ｒａｔｅ＞から＜ｅｎｄ−ｒａｔｅ＞まで反復率を線形的に変化させる）として指定することができる。反復率を指定しなければ、できるだけ頻繁に命令ブロックを繰り返すことができる。
【０１００】
｛ｐａｒａｌｌｅｌ，＜Ｎ＞｝というオプションは、＜Ｎ＞個の並列スレッドで反復処理を実行することを示す。指定しなければ、反復処理を１つずつ実行することができる。
【０１０１】
｛ｉｔｅｒａｔｏｒ，＜ｎａｍｅ＞｝というオプションは、現在の反復数を含む繰り返し命令ブロック内に＜ｎａｍｅ＞という名前の変数を定める。このオプションには、｛ｖａｒ，＜ｎａｍｅ＞｝という命令を用いてアクセスすることができる。
【０１０２】
以下の例では、ループ本体の実行レートが５秒間に１ｒｐｓから５ｒｐｓまで連続して増加する。
2018524693.tif 000023
【０１０３】
以下の例では、変数を用いて定められた反復率を有する入れ子ループが使用される。
2018524693.tif 000024
【０１０４】
これらの２つの例の違いは、反復率の増加方法にある。第１の例では、直線チャートが生じると考えられ、第２の例では、階段関数チャートが生じると考えられる。
【０１０５】
様々な例では、ベンチマークシナリオが、しばしば実行速度又は全体的な継続時間などのいくつかの値を含む必要がある。これは、環境変数を用いて行うことができる。例えば、｛ｖａｒ，＜ｎａｍｅ＞［，＜ｄｅｆａｕｌｔ＿ｖａｌｕｅ＞］｝は、ハードコード化された値を可変命令文の形に置き換えるものであり、この場合の＜ｎａｍｅ＞は、使用する値を識別する文字列である。その後、シナリオの開始時に−−ｅｎｖコマンドラインパラメータを用いて実際の値が受け渡される。
【０１０６】
いくつかの例では、リソース命令文を使用してファイルにデータを含めることができる。リソースファイルは、以下のようにｉｎｃｌｕｄｅ＿ｒｅｓｏｕｒｃｅ最上位ディレクティブを用いて告示することができ、
2018524693.tif 000025
この場合の＜ｒｅｓｏｕｒｃｅ＿ｎａｍｅ＞は、このリソースファイルをシナリオ内で識別するアトムであり、＜ｆｉｌｅ＿ｎａｍｅ＞は、リソースファイルのファイル名を示す文字列である。＜ｔｙｐｅ＞パラメータは、ファイルの内容をどのように解釈すべきかを示すアトムである。リソースファイルが登録されると、｛ｒｅｓｏｕｒｃｅ，＜ｒｅｓｏｕｒｃｅ＿ｎａｍｅ＞｝というリソース命令文を使用して、シナリオ内のいずれかの場所にその内容を含めることができる。
【０１０７】
いくつかの例では、システム及び方法が、ベンチマークの前及び／又は後にユーザがカスタムコードを実行できるようにするプレフック及び／又はポストフックを利用する。フックは、全てのノード上で適用することも、又はディレクタノード上でのみ適用することもできる。フックハンドラのあらゆる環境変数は、シナリオ内で変更して使用することができる。
【０１０８】
シナリオのためのフック例は、以下の通りである。
2018524693.tif 000026
【０１０９】
ワーカーのためのフック例は、以下の通りである。
2018524693.tif 000027
【０１１０】
本明細書で説明した主題及び動作は、デジタル電子回路で実装することも、本明細書で開示した構造及びその構造的同等物を含むコンピュータソフトウェア、ファームウェア又はハードウェアで実装することも、或いはこれらのうちの１つ又は２つ以上の組み合わせで実装することもできる。本明細書で説明した主題は、１又は２以上のコンピュータプログラムとして、すなわちコンピュータ記憶媒体上に符号化された、データ処理装置によって実行される、又はデータ処理装置の動作を制御するコンピュータプログラム命令の１又は２以上のモジュールとして実装することができる。これとは別に、又はこれに加えて、プログラム命令は、好適な受信装置に送信されてデータ処理装置によって実行される情報を符号化するように生成された、例えば機械によって生成された電気信号、光信号又は電磁信号などの人工的に生成された伝搬信号上で符号化することもできる。コンピュータ記憶媒体は、コンピュータ可読記憶装置、コンピュータ可読記憶基板、ランダム又はシリアルアクセスメモリアレイ又は素子、或いはこれらのうちの１つ又は２つ以上の組み合わせとすることができ、或いはこれらに含めることができる。さらに、コンピュータ記憶媒体は伝搬信号ではなく、人工的に生成された伝搬信号に符号化されたコンピュータプログラム命令のソース又は宛先とすることができる。コンピュータ記憶媒体は、１又は２以上の別個の物理的コンポーネント又は媒体（例えば、複数のＣＤ、ディスク又はその他の記憶装置）とすることも、或いはこれらに含めることもできる。
【０１１１】
本明細書で説明した動作は、１又は２以上のコンピュータ可読記憶装置に記憶された、又は他のソースから受け取られたデータに対してデータ処理装置が実行する動作として実装することもできる。
【０１１２】
「データ処理装置」という用語は、一例としてプログラマブルプロセッサ、コンピュータ、１又は複数のシステムオンチップ、或いはこれらの組み合わせを含む、データを処理する全ての種類の装置、デバイス及び機械を含む。装置は、例えばＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）などの専用論理回路を含むことができる。装置は、ハードウェアに加えて、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、或いはこれらのうちの１つ又は２つ以上の組み合わせを構成するコードなどの、対象のコンピュータプログラムのための実行環境を生じるコードを含むこともできる。装置及び実行環境は、ウェブサービス、分散コンピューティングインフラ、及びグリッドコンピューティングインフラなどの様々な異なるコンピューティングモデルインフラを実現することができる。
【０１１３】
（プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト又はコードとしても知られている）コンピュータプログラムは、コンパイラ型言語又はインタープリタ型言語、宣言型言語又は手続き型言語を含むあらゆる形のプログラミング言語で書くことができ、スタンドアロンプログラム、又はモジュール、コンポーネント、サブルーチン、オブジェクト、又はコンピューティング環境で使用するのに適した他のユニットとしての形を含むあらゆる形で展開することができる。コンピュータプログラムは、必須ではないが、ファイルシステム内のファイルに対応することができる。プログラムは、対象のプログラム専用の単一のファイル内の、又は複数の連動するファイル（例えば、１又は２以上のモジュール、サブプログラム、又はコードの一部を記憶するファイル）内の、他のプログラム又はデータ（例えば、マークアップ言語リソースに記憶された１又は２以上のスクリプト）を保持するファイルの一部に記憶することができる。コンピュータプログラムは、１つのコンピュータ上で実行されるように展開することも、或いは１つのサイトに位置する、又は複数のサイトに分散して通信ネットワークによって相互接続された複数のコンピュータ上で実行されるように展開することもできる。
【０１１４】
本明細書で説明した処理フロー及びロジックフローは、１又は２以上のコンピュータプログラムを実行する１又は２以上のプログラマブルプロセッサによって、入力データに作用して出力を生成することによって動作を行うように実行することができる。処理フロー及びロジックフローは、例えばＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）などの専用論理回路によって実行することもでき、装置をこのような専用論理回路として実装することもできる。
【０１１５】
コンピュータプログラムを実行するのに適したプロセッサとしては、一例として、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方、並びにあらゆる種類のデジタルコンピュータのいずれか１つ又は２つ以上のプロセッサが挙げられる。一般に、プロセッサは、リードオンリメモリ又はランダムアクセスメモリ、或いはこれらの両方から命令及びデータを受け取る。コンピュータの必須要素は、命令に従って動作を実行するプロセッサ、並びに命令及びデータを記憶する１又は２以上の記憶装置である。一般に、コンピュータは、例えば磁気ディスク、磁気光学ディスク又は光学ディスクなどの、データを記憶する１又は２以上の大容量記憶装置も含み、或いはこのような大容量記憶装置との間でデータの受け取り及びデータの転送、又はこれらの両方を行うように動作可能に結合される。しかしながら、コンピュータは、このような装置を有していなくてもよい。さらに、コンピュータは、いくつかの例を挙げると、例えば携帯電話機、携帯情報端末（ＰＤＡ）、モバイルオーディオプレーヤ又はビデオプレーヤ、ゲーム機、全地球測位システム（ＧＰＳ）受信機、又はポータブル記憶装置（例えば、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ）などの別の装置に組み込むこともできる。コンピュータプログラム命令及びデータの記憶に適した装置としては、一例として、ＥＰＲＯＭ、ＥＥＰＲＯＭ及びフラッシュメモリデバイスなどの半導体メモリデバイス、内部ハードディスク又はリムーバブルディスクなどの磁気ディスク、磁気光学ディスク、並びにＣＤ  ＲＯＭ及びＤＶＤ−ＲＯＭディスクを含む全ての形の不揮発性メモリ、媒体及びメモリデバイスが挙げられる。プロセッサ及びメモリは、専用論理回路によって補完することも、又は専用論理回路に組み込むこともできる。
【０１１６】
本明細書で説明した主題は、ユーザとの相互作用をもたらすために、ＣＲＴ（陰極線管）又はＬＣＤ（液晶ディスプレイ）モニタなどの、ユーザに情報を表示する表示装置と、マウス又はトラックボールなどの、ユーザがコンピュータに入力を提供できるようにするキーボード及びポインティングデバイスとを有するコンピュータ上に実装することができる。他の種類の装置を使用してユーザとの相互作用をもたらすこともでき、例えばユーザに提供されるフィードバックは、視覚的フィードバック、聴覚的フィードバック又は触覚的フィードバックなどのあらゆる形の感覚的フィードバックとすることができ、ユーザからの入力は、音響入力、音声入力又は触覚入力を含むあらゆる形で受け取ることができる。また、コンピュータは、例えばウェブブラウザから受け取られた要求に応答してユーザのクライアント装置上のウェブブラウザにウェブページを送信することなどの、ユーザが使用する装置との間でリソースを送受信することによってユーザと相互作用することもできる。
【０１１７】
本明細書で説明した主題は、例えばデータサーバとしてのバックエンドコンポーネントを含む、又は例えばアプリケーションサーバとしてのミドルウェアコンポーネントを含む、又は例えば本明細書で説明した主題の実施形態とユーザが相互作用できるようにするグラフィカルユーザインターフェイス又はウェブブラウザを有するクライアントコンピュータなどのフロントエンドコンポーネントを含む、或いは１又は２以上のこのようなバックエンド、ミドルウェア又はフロントエンドコンポーネントのいずれかの組み合わせを含むコンピュータシステムに実装することができる。システムのコンポーネントは、例えば通信ネットワークなどの何らかの形のデジタルデータ通信又はその媒体によって相互接続することができる。通信ネットワークの例としては、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）、インターネットワーク（例えば、インターネット）、及びピアツーピアネットワーク（例えば、アドホックピアツーピアネットワーク）が挙げられる。
【０１１８】
コンピュータシステムは、クライアント及びサーバを含むことができる。一般に、クライアントとサーバは互いに離れており、通常は通信ネットワークを介して相互作用する。このクライアントとサーバの関係は、それぞれのコンピュータ上で実行される、互いにクライアント−サーバの関係を有するコンピュータプログラムによって生じる。いくつかの実装では、（例えば、クライアント装置と相互作用するユーザにデータを表示し、ユーザからユーザ入力を受け取る目的で）サーバがクライアント装置にデータ（例えば、ＨＴＭＬページ）を送信する。サーバでは、クライアント装置において生成されたデータ（例えば、ユーザインタラクションの結果）をクライアント装置から受け取ることができる。
【０１１９】
１又は２以上のコンピュータから成るシステムは、システムにインストールされて動作時にシステムに処理を実行させるソフトウェア、ファームウェア、ハードウェア又はこれらの組み合わせを有することによって特定の動作又は処理を実行するように構成することができる。１又は２以上のコンピュータプログラムは、データ処理装置によって実行された時に装置に処理を実行させる命令を含むことによって特定の動作又は処理を実行するように構成することができる。
【０１２０】
本明細書は多くの特定の実装の詳細を含むが、これらの詳細は、いずれかの発明又は特許請求できるものの範囲を限定するものとして解釈すべきではなく、むしろ特定の発明の特定の実装に固有の特徴を説明するものとして解釈すべきである。本明細書において別個の実装の文脈で説明したいくつかの特徴は、単一の実装において組み合わせて実装することもできる。これとは逆に、単一の実施形態の文脈で説明した様々な特徴は、複数の実施形態において別個に、又はいずれかの好適な部分的組み合わせの形で実装することもできる。さらに、上記では特定の組み合わせで機能するように特徴を説明し、最初はこのように特許請求している場合もあるが、いくつかの例では、特許請求する組み合わせからの１又は２以上の特徴をこれらの組み合わせから削除することもでき、特許請求する組み合わせを部分的組み合わせ又は部分的組み合わせの変形例に向けることもできる。
【０１２１】
同様に、図面には特定の順序で動作を示しているが、これについて、望ましい結果を達成するためにこのような動作を図示の特定の順序又は順番で実行し、又は図示の動作を全て実行する必要があると理解すべきではない。状況によっては、マルチタスク処理及び並行処理が有利な場合もある。さらに、上述した実装において様々なシステムコンポーネントを分離していても、このような分離が全ての実装において必要であると理解すべきではなく、説明したプログラムコンポーネント及びシステムは、単一のソフトウェア製品に一般的に統合し、又は複数のソフトウェア製品にパッケージ化することもできると理解されたい。
【０１２２】
以上、本主題の特定の実装について説明した。他の実装は、以下の特許請求の範囲に含まれる。場合によっては、特許請求の範囲に記載した処理を異なる順序で実行しても望ましい結果を得ることができる。また、添付図に示した工程は、望ましい結果を達成するために必ずしも図示の特定の順序又は順番で行う必要はない。実装によっては、マルチタスク処理及び並行処理が有利な場合もある。
【符号の説明】
【０１２３】
１００  ベンチマークシステム
１０２  ＡＰＩサーバ
１０４  クラウドコントローラ
１０６ａ  ワーカーノード
１０６ｂ  ディレクタノード
１０８  被試験システム
１１０  コマンドラインインターフェイス
１１２  クライアント装置
１１４  接続
１１６  接続
１１８  接続
【図１】
2018524693.tif 000028
【図２】
2018524693.tif 000029
【図３】
2018524693.tif 000030
【図４】
2018524693.tif 000031
【図５】
2018524693.tif 000032
【図６】
2018524693.tif 000033
【図７】
2018524693.tif 000034
【図８】
2018524693.tif 000035
【図９】
2018524693.tif 000036
【図１０】
2018524693.tif 000037
【国際調査報告】
2018524693.tif 000038
2018524693.tif 000039
2018524693.tif 000040