(57)【要約】【課題】パフォーマンス試験のためのベンチマーク・アプリケーションを生成する方法および装置。【解決手段】コンピュータ・アプリケーションの入出力（I/O）設定を試験するためのベンチマーク・アプリケーションを生成する方法であって：前記コンピュータ・アプリケーションによって実行される動作に関係するトレース・データを集積する段階と；前記動作が関係する前記コンピュータ・アプリケーションの実行における種々の段に基づいて前記トレース・データを一つまたは複数のフェーズにグループ化する段階と；前記トレース・データにおけるパターンを識別して前記パターンを比較する段階と；同様のパターンをもつトレース・データが組み合わされている簡略化されたトレース・データを生成する段階と；前記簡略化されたトレース・データおよび前記トレース・データが組み合わされたところを示す情報を含むベンチマーク・アプリケーションを出力する段階とを含む、方法。【選択図】図１
2016100006.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ・アプリケーションの入出力（I/O）設定を試験するためのベンチマーク・アプリケーションを生成する方法であって：
前記コンピュータ・アプリケーションによって実行される動作に関係するトレース・データを集積する段階と；
前記動作が関係する前記コンピュータ・アプリケーションの実行における種々の段に基づいて前記トレース・データを一つまたは複数のフェーズにグループ化する段階と；
前記トレース・データにおけるパターンを識別して前記パターンを比較する段階と；
同様のパターンをもつトレース・データが組み合わされている簡略化されたトレース・データを生成する段階と；
前記簡略化されたトレース・データおよび前記トレース・データが組み合わされたところを示す情報を含むベンチマーク・アプリケーションを出力する段階とを含む、
方法。
【請求項２】
前記ベンチマーク・アプリケーションのベンチマーク動作の性能を確立するために前記ベンチマーク・アプリケーションを試験する段階をさらに含む、
請求項１記載の方法。
【請求項３】
前記ベンチマーク・アプリケーションを試験する前記段階が、前記ベンチマーク・アプリケーションのI/O設定を試験して、前記コンピュータ・アプリケーションが実行されるシステムを通じたデータ・フローにおける非効率および／または前記システムの特性を識別することを含む、請求項２記載の方法。
【請求項４】
データ・フローを改善するのに使うために、前記ベンチマーク動作の性能を示すおよび／または前記コンピュータ・アプリケーションが実行されるよう動作可能である各システムに固有のI/O設定についての推奨を含むレポートを出力する段階をさらに含む、
請求項２または３記載の方法。
【請求項５】
前記レポートは、アクセス・パターン、読み書きされるファイルの型、読み書きされるファイルのサイズ、トランザクション・サイズおよびタイミングのうちの少なくとも一つに関する推奨を含む、請求項４記載の方法。
【請求項６】
前記ベンチマーク・アプリケーションを試験する前記段階は、I/O設定を変えることが性能に対して及ぼす効果を調べることを含む、請求項２ないし５のうちいずれか一項記載の方法。
【請求項７】
同様のパターンをもつトレース・データが組み合わされる場合、前記ベンチマーク・アプリケーションを試験する前記段階は、同様のパターンをもつ前記トレース・データの最初のインスタンスを試験するだけであることを含み、同様のパターンをもつ前記トレース・データの最初のインスタンスを試験した結果が次いでその後のインスタンスに適用される、請求項２ないし６のうちいずれか一項記載の方法。
【請求項８】
前記試験は、ベンチマーク・スイートにおいて前記ベンチマーク・アプリケーションに対して実行され、前記ベンチマーク・アプリケーションを、前記ベンチマーク・スイートの制御パラメータを設定するユーザー修正可能な入力ファイルとともに、前記ベンチマーク・スイートに入力することを含む、請求項２ないし７のうちいずれか一項記載の方法。
【請求項９】
前記ユーザー修正可能な入力ファイルは試験されるべきフェーズを指示するおよび／または各ベンチマーク・スイートについての目標実行時間を指定するおよび／または試験から排除されるべき動作があればそれに関係するトレース・データを同定する、請求項８記載の方法。
【請求項１０】
前記トレース・データを集積する前記段階はさらに、前記コンピュータ・アプリケーションの実行中に生起する動作の時間順を抽出することを含む、請求項１ないし９のうちいずれか一項記載の方法。
【請求項１１】
前記トレース・データは、読み出しまたは書き込みされる、前記動作に関係するデータの型および／またはサイズを示す情報を含む、請求項１ないし１０のうちいずれか一項記載の方法。
【請求項１２】
前記トレース・データは、少なくとも、入力ファイルを読むことに関係する初期化フェーズと、試験の完了後に動作が再開することを許容する再開ファイルを書き出すことに関係する最終化フェーズとにグループ化される、請求項１ないし１１のうちいずれか一項記載の方法。
【請求項１３】
フェーズ間でパターンを比較することが、それぞれ同じファイルにアクセスすることに関わる同様の動作の集合を含むフェーズを識別することを含む、請求項１ないし１２のうちいずれか一項記載の方法。
【請求項１４】
前記簡略化されたトレース・データを生成する段階が、特定のパターンの最初のインスタンスを前記簡略化されたトレース・データにおいて維持し、前記最初のインスタンスと同様のパターンをもつその後のインスタンスを、該その後のインスタンスが前記最初のインスタンスと組み合わされたという指標で置き換えることを含む、請求項１ないし１３のうちいずれか一項記載の方法。
【請求項１５】
コンピュータ・アプリケーションの入出力（I/O）設定を試験するためのベンチマーク・アプリケーションを生成する装置であって：
前記コンピュータ・アプリケーションによって実行される動作に関係するトレース・データを集積する手段と；
前記動作が関係する前記コンピュータ・アプリケーションの実行における種々の段に基づいて前記トレース・データを一つまたは複数のフェーズにグループ化する手段と；
前記トレース・データにおけるパターンを識別して前記パターンを比較する手段と；
同様のパターンをもつトレース・データが組み合わされている簡略化されたトレース・データを生成する手段と；
前記簡略化されたトレース・データおよび前記トレース・データが組み合わされたところを示す情報を含むベンチマーク・アプリケーションを出力する手段とを有する、
装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ実行可能アプリケーションにおける入出力（I/O）設定を試験することに、詳細には、コンピュータ実行可能アプリケーションにおける入出力（I/O）設定を試験するためのコンピュータ実行可能なアプリケーションに関係するベンチマーク・アプリケーションを生成するための方法および装置に関する。
【背景技術】
【０００２】
高性能コンピューティング（HPC:  High  Performance  Computing）アーキテクチャの一連の世代において、計算コンポーネントの並列度が高まり続けている。そのようなシステム上で走るアプリケーション（プログラム）の記憶要求を満たすために、I/O階層はますます複雑になりつつある。
【０００３】
記憶階層を効率的に利用するアプリケーションを書く際、I/Oスタックの各層の深い知識ならびに種々のI/Oプログラミング・スタイル、アプリケーション・プログラミング・インターフェース（API:  Application  Programming  Interface）ライブラリおよびファイル・システム設定の選択がアプリケーション性能にどのように影響するかの理解があれば有益である。
【０００４】
これらの選択の性能への影響を理解し、試験するためには二つのアプローチがある。第一のアプローチは、さまざまなI/O設定のパラメータ掃引をもってアプリケーションを走らせることである。これは、種々の設定が性能にどのように影響するかの正確な描像を与える。しかしながら、各試験についてアプリケーション全体を走らせる必要があるので、これは実際的ではなく、時間のかかるアプローチである。
【０００５】
第二のアプローチは、軽いI/Oベンチマーク・スイートを走らせることである。これらは、アプリケーションによって実行されるI/O動作を代表する小さなタイミング試験を走らせるために開発された。そのようなベンチマーク・スイートの問題は、アプリケーションによって実行される動作に厳密に一致せず、一般に、各動作についての試験のために利用可能な詳細さのレベルの点で当該アプリケーションの非常に簡略化された代表であるということである。また、関わっている動作の集合全体を常に捕捉するわけではない。たとえば、書き込み動作を実行する前にデータを集めるために必要な通信があったとしてもしばしば捕捉されない。
【０００６】
I/O特性は、並列システムおよび並列科学アプリケーションにおける並列処理の性能におけるますます重要なボトルネックになりつつある。よって、アプリケーションがディスクと分散されたメモリとの間のスケーラブルなデータ移動をサポートするための効率的なI/O設定を使うことを確かにすることが重要である。
【０００７】
これは難しい課題である。たとえば科学アプリケーションは、アクセス・パターン、読み書きされるファイルのサイズおよびトランザクション・サイズ（毎回プロセスによって転送されるデータ量）に依存して幅広い範囲のI/O要求をもつからである。
【０００８】
高性能コンピューティング（HPC）アプリケーションのI/O要求の調査は以下のことを明らかにした。
・アプリケーションの大部分では、逐次的な読み書きが優勢であり、ファイル・データのランダム・アクセスはまれである。
・アペンド専用書き込み動作がI/O動作の主要な型である。
・I/Oトランザクション・サイズ（毎回プロセスによって転送されるデータ量）には大きな幅があり、一般に数キロバイトから数十メガバイトの範囲である。
・多くのアプリケーションはパラレルI/Oではなく、プロセス毎一ファイルをI/Oのために採用している。
・多くのアプリケーションは、HDFSやNetCDFのような移植可能な自己記述式のフォーマットではなく、独自のファイル・フォーマットを使っている。
【０００９】
アプリケーションにおけるI/Oプログラミング選択に加えて、アプリケーションの全体的なI/O性能に対して影響をもつことのできる一連のハードウェアおよびファイル・システム・オプションが利用可能である。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
したがって、試験を実行するときの処理負荷および不正確さを軽減しつつ、試験の速度を改善することが望ましい。
【課題を解決するための手段】
【００１１】
本発明の第一の側面のある実施形態では、コンピュータ・アプリケーションの入出力（I/O）設定を試験するためのベンチマーク・アプリケーションを生成する方法が提供される。本方法は：コンピュータ・アプリケーションによって実行される動作に関係するトレース・データを集積する段階と；前記動作が関係する前記コンピュータ・アプリケーションの実行における種々の段階に基づいて前記トレース・データを一つまたは複数のフェーズにグループ化する段階と；前記トレース・データにおけるパターンを識別して前記パターンを比較する段階と；同様のパターンをもつトレース・データが組み合わされる簡略化されたトレース・データを生成する段階と；簡略化されたトレース・データおよび該トレース・データが組み合わされたところを示す情報を含むベンチマーク・アプリケーションを出力する段階とを含む。
【００１２】
トレース・データを集積することは、前記アプリケーションの実行に関わる動作（プロセス）のデータをコピー（トレース）することに関わる。コピーされたデータは「トレース」アプリケーションと呼ばれてもよい。トレースを取ることの一つの利点は、ひとたび所望される効果につながる所望される設定が判別されたら、もとのデータに影響することなくデータ（トレース・データ）が操作され、試験されうるということである。
【００１３】
好ましくは、アプリケーションによって実行されるI/O動作に関係するトレース・データが集積されるだけであってもよい。そのようなI/O動作は、ディスクに命令を読み書きすることと、書き込みプロセスのためのデータを集めるためのプロセス間通信のような、I/O動作に関連する動作とを含みうる。このようにしてI/O動作のみをトレースすることは、初期のトレース情報を集めるために必要とされる時間が少なくなり、トレース・データを保持するために必要とされるデータが少なくなるという利点がある。アプリケーションのすべての動作に関係するトレース・データが集積される場合には、フェーズ解析段の前に、I/O動作をフィルタリングにより抜き出す（識別する）段階が実装されてもよい。
【００１４】
次いで、トレース・データは、該データが関係するコンピュータ・アプリケーションの実行における異なる段に基づいて（フェーズに対応する）グループに分けられる。つまり、データの一部は特定のフェーズに関わる動作に関係する。特定のフェーズはたとえば、動作が、よって対応するデータがコンピュータ・アプリケーションの初期化に関係する初期化フェーズである。初期化フェーズに関連する典型的な動作は、読み出し動作を含んでいてもよい。データがグループ化されうるさらなるフェーズは、たとえば、時間ステッピング・フェーズおよび最終化フェーズを含む。これらは下記でより詳細に説明する。コンピュータ・アプリケーションはたとえば、該コンピュータ・アプリケーションを実行することに関わる動作がみな密接に関係していて、よってすべて一緒にグループ化されるという意味で、単一のフェーズしかもたなくてもよい。たとえば、単一のフェーズはアプリケーションのI/Oフェーズであってもよい。この場合、I/Oトレースのうちからの、同じファイル（または複数のファイル）についてある定義された実行窓の間に生起するI/O動作は、一緒にグループ化されることができる。もう一つの例では、初期化のためのファイル読み込み、反復工程の間の状態ファイルの書き込みおよび終了段の間のデータの最終的な書き込みのような特定のイベントについて複数のI/Oフェーズが存在してもよい。
【００１５】
ひとたび前記一つまたは複数のフェーズが確立されたら、データは次いで、データ中のパターンを識別するためにスキャンされる。パターンは、繰り返される同様の動作、単一のファイルへの複数の読み出しおよび／または書き込み動作、読み出しおよび／または書き込み動作に関わるデータの同様の量などを含みうる。異なる複数のフェーズにおいて識別されたパターンがあればそれらが次いで比較される。単一フェーズしかない場合には、フェーズ間のこの比較は行なわれないが、代わりに識別された諸パターンの比較はやはり実行され、そのフェーズについての適切な設定を見出すためにI/Oベンチマークが生成され、実行されうる。
【００１６】
フェーズは、不必要な処理を避けるため、個々に試験されてもよい。異なるフェーズにおいて同様のパターンが存在する場合には、試験されたフェーズに存在するパターンに関係する試験結果が、その後のフェーズにおける同様のパターンに単純に適用されてもよい。それにより不必要な処理が節約される。上記で言及し、下記でより詳細に述べるように、特に単一フェーズのみの場合、単一フェーズ内のパターンが比較されてもよい。トレース・データ間の比較は、データ中のさまざまなフィールドを考慮に入れてもよい。比較されるデータの間で同じであるフィールドの数がデータの間の類似性のレベルを決定してもよい。たとえば、二つのフェーズに関わるプロセスI/O動作（すなわち読み出し／書き込み動作）、ファイル・サイズおよびプロセスが同じであれば、これらのI/Oフェーズは同じであると分類できる。この場合、ベンチマーク・スイート（後述）は一つのフェーズについて実行されるが、その結果は二つのフェーズに当てはまる。さらに、二つのフェーズに使われるファイル名（単数または複数）も同じであり両者が比較的短い時間期間内に生起すれば、これは非効率的なI/Oパターンを示すことがありうる。この場合、そのファイル・サイズの二倍についてI/O動作が実行される新しいベンチマーク・スイートが生成されてもよい。
【００１７】
システムは、各ベンチマークがどのI/Oフェーズに関連付けられているかを追跡してもよい。これは、一つのベンチマークが二つ以上のフェーズを代表する場合を含む。ある実装では、これは、ベンチマークのI/Oフェーズへの単純なルックアップ配列によって実装されてもよい。これは、最良の設定をもとのアプリケーションに直接フィードバックするのではなく、最適なI/Oパターンについて開発者に推薦を提供するときに、簡単な解決策を提供する。
【００１８】
唯一のフェーズまたは各フェーズに関してひとたび同様のパターンが識別され、比較されたら、そのコンピュータ・アプリケーションについて取られたトレースが次いで、反復パターンがあればそれを排除するよう簡略化される。特に、フェーズ間で識別された同様のパターンの複数のインスタンスは除去されてもよい。
【００１９】
ひとたびトレースが簡略化されたら、簡略化されたトレース・データを、そのトレース・データがもとのトレースに対してどのように簡略されたかを示す情報とともに含むベンチマーク・アプリケーションが生成される。
【００２０】
ベンチマーク・アプリケーションまたはベンチマーク・スイートは、試験されるべきアプリケーション（コンピュータ・アプリケーション）の簡略化された表現であり、それがそのような試験のために使用されうる。ベンチマーク・アプリケーションの入出力パラメータは、該ベンチマーク・アプリケーションが表わしているアプリケーションの入出力パラメータと同様に応答することが意図される。よって、入出力パラメータの変更がアプリケーションの実行に対して及ぼす効果を判別するために入出力パラメータが変更されると、ベンチマーク・アプリケーションにおいて観察される変化は当該アプリケーションの変化を密接に反映する。このことは、効率、スループットおよびデータ・フローといった因子がベンチマーク・アプリケーション上で試験されることを許容し、そうした試験の結果が当該アプリケーションの対応する因子について直接的な関わりをもつ。
【００２１】
本質的には、ある実施形態において、本発明は、I/Oおよび関連する動作を捕捉するようアプリケーションのトレースを実行することによって機能する。次いで、トレース・データは、アプリケーションのI/Oフェーズを識別するために処理される。I/Oフェーズの解析は、非効率的なI/Oパターンを発見し、同様の動作をもつ複数のI/Oフェーズを識別することを許容する。
【００２２】
次いで、任意的に、このトレースおよびI/Oフェーズ情報をもって、I/O階層の各レベルにおけるさまざまなI/O設定を試験する諸ベンチマーク試験が生成される。諸ベンチマークの出力は、アプリケーションについての最適なI/O設定または性能を改善するためのソースコードへの潜在的な最適化を推奨するために使われる。
【００２３】
このように、本発明のある実施形態は、コンピュータ・アプリケーションによって実行されるI/O動作によく一致する、軽くて速いI/O性能試験を提供できる。
【００２４】
任意的に、ある実施形態はさらに、ベンチマーク・アプリケーションのベンチマーク動作の性能を確立するためにベンチマーク・アプリケーションを試験することを含む。
【００２５】
ひとたびベンチマーク・アプリケーションが生成されたら、I/O設定へのどの変更が改善された性能を与えるかを確立するために、さまざまな試験、特にベンチマーク・アプリケーションにおけるI/O設定に関係する試験が実行されてもよい。もとのコンピュータ・アプリケーションではなくベンチマーク・アプリケーションに対してそのような試験を実行することによって、もとのアプリケーションに比べてのベンチマーク・アプリケーションの簡略化された性質のため、個々の各試験を実行するのにかかる時間が短縮でき、全体的な処理が簡略化されうる。
【００２６】
任意的に、ある実施形態はさらに、ベンチマーク・アプリケーションのI/O設定を試験して、コンピュータ・アプリケーションが実行されるシステムを通じたデータ・フローにおける非効率および／またはシステムの特性を識別することを含む。
【００２７】
実行される試験は、コンピュータ・アプリケーションの実行中のデータ・フローを表わすベンチマーク・アプリケーションの実行中のデータ・フローを改善するための適切な設定を見出すために、I/O設定を変えることを含んでいてもよい。システムの特性は、データ・バッファ容量、同時に実行される並列プロセスの数、最大処理速度、受け入れられるデータ・フォーマットなどを含む。これは、システムに関係してI/O設定が改善されることを許容し、非効率的であるシステム特性がハイライトされることも許容する。
【００２８】
任意的に、ある実施形態はさらに、データ・フローを改善するのに使うために、ベンチマーク動作の性能を示すおよび／またはコンピュータ・アプリケーションが実行されるよう動作可能である各システムに固有のI/O設定についての推奨を含むレポートを出力することを含む。
【００２９】
ひとたび好ましいI/O設定が試験され、確立されたら、どの試験がどのように実行されたかを示す情報を含むレポートが生成される。このレポートは、スループットおよびデータ・フローを改善するよう同様のアプリケーションまたは同様のシステムを適応させるために、専門の技術者によって使用されることができる。さまざまなI/O設定について性能指数を吟味することによって、プログラマーによって所望される性能のコンテキストにおいて最適に実行されるシステムおよびアプリケーションを達成するために、所望される効果が潜在的な欠点に対して考量されうる。レポートは、システムに関係して収集された履歴情報に基づく、性能を改善するための推奨をも含んでいてもよい。
【００３０】
任意的に、ある実施形態では、レポートは、アクセス・パターン、読み書きされるファイルの型、読み書きされるファイルのサイズ、トランザクション・サイズおよびタイミングのうちの少なくとも一つに関する推奨を含む。
【００３１】
特定の設定または因子が性能に対して重要な効果をもつことが示される場合、このことがレポートにおいてハイライトされてもよい。同様に、因子のある組み合わせが所望される効果をもつまたは性能を改善することが示される場合、このことがレポートにおいてハイライトされてもよく、この改善された性能をどのようにして維持するべきかについての推奨が示されてもよい。I/Oデータ・フローに関し、ファイル・サイズ、トランザクション・サイズ（全ファイル転送サイズ）、読み書きタイミングなどといった因子が性能に対して大きな影響をもつことがある。所望される時間枠内で並列プロセスが実行されるようこれらの因子を適切に管理することは、処理中のデータ・フローのボトルネック化を軽減する助けとなりうる。
【００３２】
任意的に、ある実施形態では、トレース・データの集積はさらに、コンピュータ・アプリケーションの実行中に生起する動作の時間順を抽出することを含む。
【００３３】
動作の時間順（時間的シーケンス）を判別することにより、それらの動作は、データ・フローが改善されるよう再編成されうる。たとえば、動作のシーケンスにおいてある動作が大量のデータのファイルから／への読み書きを要求していると識別される場合、他の必要とされるまたは重要な動作がそのシーケンスより先に位置され、それほどの重要性のない動作はそのシーケンスの後に位置されるよう、その動作の実行がシーケンス中で位置されてもよい。重要な動作は、たとえば、その動作に他の動作が依存するような動作を含みうる。つまり、従属する動作が実行されうる前に完了されなければならない動作である。並列処理システムにおける動作の時間順を知ることは、重要な動作を次に処理されるべく「待ち行列の先頭に」置く可能性が常にあるよう、各並列シーケンスが配列されることを許容する。常にそのような可能性があるようにすることは、たとえばすべての並列プロセッサが大きな動作を同時に処理することに関わっている場合には不可能であろう。
【００３４】
任意的に、ある実施形態では、トレース・データは、読み出しまたは書き込みされる動作に関係するデータの型および／またはサイズを示す情報を含む。
【００３５】
データの型および／またはサイズの知識をもつことは、I/O設定のより包括的な試験が実行されることを許容し、それにより、より情報に富むレポートが生成されることができる。データ型および／またはサイズを示す情報は、トレース・データ中のパターンを識別することをさらに支援しうる。
【００３６】
任意的に、ある実施形態では、ベンチマーク・アプリケーションの試験は、I/O設定を変えることが性能に対して及ぼす効果を調べることを含む。
【００３７】
性能を試験するとき、I/O設定に対するランダムなまたはあらかじめ決定された変更は、性能に対する対応する効果を判別するために実行されてもよい。ベンチマーク・アプリケーションの性能は、もとのコンピュータ・アプリケーションの性能に直接相関していると考えられる。
【００３８】
任意的に、ある実施形態では、同様のパターンをもつトレース・データが組み合わされるとき、ベンチマーク・アプリケーションの試験は、同様のパターンをもつトレース・データの最初のインスタンスを試験するだけであることを含み、同様のパターンをもつトレース・データの最初のインスタンスを試験した結果が次いでその後のインスタンスに適用される。
【００３９】
同様のトレース・データ・パターンに対する同様の試験の繰り返しを避けることによって、試験を完了するのにかかる時間は、試験結果の精度を損なうことなく、短縮できる。
【００４０】
任意的に、ある実施形態では、トレース・データは少なくとも、入力ファイルの読み込みに関係する初期化〔イニシャライズ〕フェーズおよび試験完了後に動作を再開することを許容する再開ファイルに関係する最終化〔ファイナライズ〕フェーズにグループ化される。
【００４１】
初期化フェーズおよび最終化フェーズは、たいていのコンピュータ・アプリケーションにおいて典型的である。これら二つのフェーズに加えて他の多くのフェーズが存在しうる。各フェーズは、コンピュータ・アプリケーションを実行するコンテキストにおいて同様の機能に関係する動作をグループ化することが意図されている。
【００４２】
任意的に、ある実施形態では、フェーズの間でパターンを比較することは、それぞれ同じファイルにアクセスすることに関わる動作の同様の集合を含むフェーズを識別することを含む。
【００４３】
試験中に同様の結果を与える可能性が高いパターンの一例は、同様の動作または一組の動作が同じファイルにアクセスすることに関わる場合である。よって、これらは簡略化されたトレース・データに組み合わされてもよく、簡略化されたトレース・データを含むベンチマーク・アプリケーションが実行されるとき、そのようなパターンの複数のインスタンスは同じ試験結果を与えると解釈される。つまり、いかなる試験も、最初のそのようなインスタンスに対して実行されるだけであり、その後のインスタンスに対するさらなる試験の代わりに、最初のインスタンスに対する試験の結果がそのようなパターンのその後のインスタンスに適用される。このようにして時間を節約し、処理負担を軽減する。
【００４４】
任意的に、ある実施形態では、試験は、ベンチマーク・スイートにおけるベンチマーク・アプリケーション上で実行され、ベンチマーク・アプリケーションを、ベンチマーク・スイートの制御パラメータを設定するユーザー修正可能な入力ファイルとともに、ベンチマーク・スイートに入力することを含む。
【００４５】
この実施形態では、ベンチマーク・スイートの動作を制御する二つのファイルがベンチマーク・スイートに入力されてもよい。
【００４６】
第一のファイルは、簡略化されたトレース・データおよびトレース・データがどこで組み合わされているかを示す情報をもつベンチマーク・アプリケーションである。簡略化されたトレース・データは、諸フェーズの詳細を含む。これは、ベンチマーク・スイートによって実行されるべき試験の型を定義する助けとなる。第二のファイルは、試験のより粒度の細かい制御パラメータを設定することができる一般的な入力ファイルである。
【００４７】
任意的に、ある実施形態では、前記ユーザー修正可能な入力ファイルは試験されるべきフェーズを指示するおよび／または各ベンチマーク・スイートについての目標実行時間を指定するおよび／または試験から排除されるべき動作があればそれに関係するトレース・データを同定する。
【００４８】
この一般的な入力ファイルは自動的に生成されることができ、ユーザーによって修正されることができる。入力ファイルは：
・ベンチマーク・アプリケーションにおける種々のフェーズの試験を有効にするまたは無効にするため；
・ベンチマーク・アプリケーションのどの要素が性能試験の対象となれるかを選択するために；
・追加的な設定たとえば
○実行すべき任意の追加的なI/O固有の試験；
○各ベンチマーク・スイート（試験手順）のための目標実行時間（完了時間）
を指定するために使用できる。
【００４９】
任意的に、ある実施形態では、簡略化されたトレース・データを生成することは、特定のパターンの最初のインスタンスを簡略化されたトレース・データにおいて維持し、前記最初のインスタンスと同様のパターンをもつその後のインスタンスを、該その後のインスタンスは前記最初のインスタンスと組み合わされたという指示で置き換えることを含む。
【００５０】
同様のパターンをもつトレース・データを組み合わせるとき、該トレース・データがどのように組み合わされるかの指示が提供されてもよい。そのような指示は試験されず、トレース・データ・パターンの最初のインスタンスを試験した結果を示してもよく、該結果が、前記指示によって置き換えられたトレース・データについての結果として解釈される。
【００５１】
本発明の第二の側面のある実施形態では、コンピュータ・アプリケーションの入出力（I/O）設定を試験するためのベンチマーク・アプリケーションを生成する装置が提供される。本装置は：コンピュータ・アプリケーションによって実行される動作に関係するトレース・データを集積する手段と；前記動作が関係する前記コンピュータ・アプリケーションの実行における種々の段に基づいて前記トレース・データを一つまたは複数のフェーズにグループ化する手段と；前記トレース・データにおけるパターンを識別して前記パターンを比較する手段と；同様のパターンをもつトレース・データが組み合わされる簡略化されたトレース・データを生成する手段と；簡略化されたトレース・データおよび該トレース・データが組み合わされたところを示す情報を含むベンチマーク・アプリケーションを出力する手段とを有する。
【００５２】
上記の諸側面のいずれにおいても、さまざまな特徴はハードウェアにおいてまたは一つまたは複数のプロセッサ上で走るソフトウェア・モジュールとして実装されうる。ある側面の特徴は他の側面の任意の特徴に適用されうる。本発明は、本稿に記載される方法の任意のものを実行するためのコンピュータ・プログラムまたはコンピュータ・プログラム・プロダクトならびに本稿に記載される方法の任意のものを実行するためのプログラムを記憶しているコンピュータ可読媒体をも提供する。本発明を具現するコンピュータ・プログラムはコンピュータ可読媒体上に記憶されてもよく、あるいはたとえばインターネット・ウェブサイトから提供されるダウンロード可能なデータ信号のような信号の形であることができ、あるいは他の任意の形であることができる。
【００５３】
本発明は、あくまでも例として、付属の図面を参照して記述される。
【図面の簡単な説明】
【００５４】
【図１】ある実施形態に基づくベンチマーク・アプリケーションを生成する方法を示すフローチャートである。
【図２】ＡおよびＢは、ある実施形態に基づく、それぞれプロセッサおよび処理装置を示すブロック図である。
【図３】例示的なI/Oシステム・インフラストラクチャーを示すブロック図である。
【図４】ベンチマーク・アプリケーションを試験する段階を詳細に示すフローチャートである。
【図５】例示的な初期化フェーズを示すソースコード断片である。
【図６Ａ】I/O動作を実行するためにプロセス0によってシリアルI/Oを使う並列アプリケーションに関係するコードの見本である。(図6の前半)
【図６Ｂ】I/O動作を実行するためにプロセス0によってシリアルI/Oを使う並列アプリケーションに関係するコードの見本である。(図6の後半)
【図７Ａ】四つのMPIプロセスを用いて図６の見本アプリケーションの実行から生成される、XMLファイルとしてフォーマットされたI/Oトレース・ファイルを示すコードの見本である。(図7の前半)
【図７Ｂ】四つのMPIプロセスを用いて図６の見本アプリケーションの実行から生成される、XMLファイルとしてフォーマットされたI/Oトレース・ファイルを示すコードの見本である。(図7の後半)
【図８Ａ】ある実施形態に基づいて組み合わされる同様のパターンの例である。（図８の前半）
【図８Ｂ】ある実施形態に基づいて組み合わされる同様のパターンの例である。（図8の後半）
【図９】ソースコード中の非効率的なパターンの例である。
【図１０Ａ】図９の見本コードについて生成されるトレース・ファイルである。（図10の前半）
【図１０Ｂ】図９の見本コードについて生成されるトレース・ファイルである。（図10の後半）
【図１１】ある実施形態に基づく、ベンチマーク・スイートについての制御パラメータを指定する例示的な入力ファイルである。
【図１２】ベンチマーク・スイートを実行することに関わる段階を示すフローチャートである。
【図１３】図６に示した見本コードの初期化フェーズについての擬似コードの例である。
【図１４】プロセスおよび後で保存される情報の型を示すフローチャートである。
【図１５】ある実施形態に基づく結果解析およびレポート生成を示すフローチャートである。
【発明を実施するための形態】
【００５５】
コンピュータ・アプリケーションの試験、たとえば並列処理に関わる高性能コンピューティング・アーキテクチャにおけるアプリケーションの入出力（I/O）設定の試験は、下記の方法によって実行されうる。
【００５６】
図１は、対応するコンピュータ・アプリケーションと密接に関係したベンチマーク・アプリケーションを、ベンチマーク・アプリケーションの、入出力（I/O）設定を含むさまざまな機能の試験を実行するために生成することに関わる主要な段階を描く簡略化されたフローチャートを示している。
【００５７】
本方法は、試験されるべきコンピュータ・アプリケーションを同定することに関わる。そのようなコンピュータ・アプリケーションは典型的には、実行されるべき多くの動作を含み、いくつかの動作は非常に異なることがあるが、他の動作は軽微な細部においてのみ異なることがある。ひとたびコンピュータ・アプリケーションが同定されたら、コンピュータ・アプリケーションのトレースが取られる（S101）。トレースを取ることは、コンピュータ・アプリケーションの動作に関係するトレース・データを集積することに関わる。トレース・データは本質的には、動作に関係するもとのデータのコピーである。しかしながら、トレース・データは、もとのデータのコピーの代わりになりうるまたはそれに加えて提供されうる、もとのデータの型、サイズ、フォーマットなどを示す情報を含んでいてもよい。望むなら、I/O設定およびプロセスに関係するデータのみが、トレース・データを生成するためにコピーされてもよい。
【００５８】
ひとたびトレース・データが集積されたら、トレース・データは諸フェーズにグループ化される（S102）。各フェーズは、コンピュータ・アプリケーションの実行に関わる段に関係する。フェーズは、コンピュータ・アプリケーションにおける動作の間のあらかじめ決定された関連に基づいて設定されてもよいし、あるいはユーザー入力に基づいて設定されてもよい。フェーズは、あるフェーズが特に大きなサイズである場合に処理を助けるために、サブフェーズにさらに分割されてもよい。
【００５９】
次いで、トレース・データ中のパターンを識別するためにトレース・データがスキャンされる（S103）。パターンは、動作の同様のシーケンス、同じファイルにアクセスすることに関わる動作または同様の量のデータの転送に関わる動作であってもよい。このコンテキストにおける動作は、単独の動作および／または動作のシーケンスを含む。
【００６０】
ひとたびトレース・データ中のパターンが識別されたら、それらのパターンは類似性および同様の全体的パターンを識別するために比較される。あるフェーズで実行され、次いでその後のフェーズで反復される動作があればそれを識別するために、そのようなパターンはフェーズ間で比較される。単一のフェーズしかない場合には、比較はそのフェーズ内のサブフェーズの間でなされる。
【００６１】
行なわれた比較に基づいて、同様のパターンの複製または事実上複数インスタンスが識別される。トレース・データは、識別された同様のパターンを組み合わせて簡略化されたトレース・データを生成することによって簡略化される（S104）。簡略化されたトレース・データは、上記トレース・データに比べて、試験されるべきデータが少ない。しかしながら、簡略化されたトレースは、それでも、簡略化されたトレース・データがどこでどのようにパターンが組み合わされたかを示す情報を含んでいるという点で相変わらず前記トレース・データを表わす。しかしながら、簡略化されたトレース・データに対して実行される試験は、組み合わされたパターンを試験することを含む。つまり、（前記トレース・データの場合のように）同様のパターンのインスタンス毎に試験を再実行することは、必要ない。
【００６２】
ひとたび簡略化されたトレース・データが生成されると、簡略化されたトレース・データおよび関係情報はベンチマーク・アプリケーションの形で出力される（S105）。ベンチマーク・アプリケーションは、それに対して試験が実行されうるアプリケーションまたは代表アプリケーションである。
【００６３】
図２のＡは、図１に示される方法が実行されうる本発明に基づく装置（プロセッサ）の例示的な実施形態を示している。この実施形態では、プロセッサ１００はトレース・データ集積器１０１、トレース・データ・グループ化器１０２、パターン識別器１０３、比較器１０４および簡略化されたトレース・データ生成器１０５を有する。描かれている矢印はデータの流れを示す。図２のＢは、図１に示される方法が実行されうる本発明に基づく装置（処理装置２００）の代替的な実施形態を示している。この実施形態では、処理装置２００はトレース・データ集積ユニット（トレース・データを集積する手段）２０１、トレース・データ・グループ化ユニット（トレース・データをグループ化する手段）２０２、パターン識別ユニット（パターンを識別する手段）２０３、簡略化されたトレース・データ生成ユニット（簡略化されたトレース・データを生成する手段）２０４およびベンチマーク・アプリケーション出力ユニット（ベンチマーク・アプリケーションを出力する手段）２０５を有する。描かれている矢印はデータの流れを示す。
【００６４】
本発明に基づくアプリケーションが実行されるシステムのアーキテクチャの例が図３に示されている。図３は、アプリケーション・プログラミング層、I/Oプログラミング・インターフェース層およびファイル・システム層の三つのプログラミング層においてアプリケーションのために利用可能なI/O設計選択肢のいくつかをも示している。
【００６５】
アプリケーション層――この層では、次の三つの例示的なI/Oプログラミング・スタイルのうちの一つが使用されうる。すべてのデータがルート・プロセスに集められ、ルート・プロセスがそのデータを書き込むシリアルI/O；各プロセスが並行してデータの該プロセス用部分をディスクに書き込む並列I/O（このデータは単一の共有ファイルに書き込まれることも、あるいは各プロセスについて一意的なファイルに書き込まれることもできる）；および一つまたは複数のプロセスがI/O動作を排他的に処理するよう割り当てられ、他のプロセスが計算を続けている間にそれらのプロセスによって書き込み動作が非同期的に行なわれることを許容するI/Oサーバー。アプリケーション・プログラミング層における設計決定もファイル・アクセス・パターンおよびトランザクション・サイズ（各プロセスによってディスクとの間で転送されるデータの量）を決定する。たとえば、大きな逐次的書き込み動作が実行されることを保証するために、書き込みバッファが使われてもよい。
【００６６】
I/Oインターフェース層――I/Oプログラミング・インターフェース層では、バイナリー・ファイルI/OのためのPOSIX  I/Oインターフェース；パラレルI/Oプログラミング・スタイルを与えるためにPOSIXインターフェースの上に構築されるMPI（Message  Passing  Interface［メッセージ渡しインターフェース］）I/Oインターフェース；および自己記述式の機械独立なデータ・フォーマットを提供するnetCDFおよびHDF5のようなポータブルAPIを含むいくつかのアプリケーション・プログラミング・インターフェース（API）が利用可能である。
【００６７】
ファイル・システム層――利用可能なハードウェアおよびシステム構成がファイル・システム層における利用可能なオプションを決定する。計算ノードにディスクが直接接続されるダイレクト・アタッチ・ファイル・システムは非スケーラブルかつ非並列なセットアップを与える。ネットワーク・ファイル・システム（たとえばNFS）はよりスケーラブルな解決策であるが、ファイル・システム・サーバーが一つしかないので、このサーバーのところにボトルネックがある。ネットワーク・ファイル・システムに似ているが一つだけではなくいくつかのサーバーがあるクラスタリングされたファイル・システム（たとえばGPFS）は、異なるクライアントが異なるサーバーに書き込みをすることを許容する。しかしながら、クライアントが一つの大きなファイルを書き込むときには、これがサーバー間で分割できないので、サーバーにおいてボトルネックが生じる。分散ファイル・システム（たとえばLustre、FEFS）は、複数クライアントおよび個々のファイル両方のための複数のサーバーを横断したスケーリングを許容する完全に並列なファイル・システムである。
【００６８】
上記に示したように、アプリケーションのI/O手順を設計し、実装するときに考える多くの選択肢がある。アプリケーションのプログラミング・フローおよびアプリケーションが走っているシステムのI/O特性を知ることなく、最適な設定を知ることは難しい。さらに、I/O設定および解決策の試験および評価のために完全なアプリケーションを走らせることは実際的ではない。
【００６９】
本発明は、ある実施形態では、アプリケーションから主たるI/O動作の詳細を抽出し、識別することによってこれらの問題に対処する。この情報は、アプリケーションにおける主たるI/Oフェーズ（たとえば、入力ファイルの読み込みおよび該データのすべての計算プロセスへのブロードキャストを含む初期化フェーズ）を識別し、何らかの非効率的なI/Oパターン（たとえば単一のより大きな読み出し／書き込みの代わりに同じファイルへの多くの小さな読み出し／書き込み動作）があればそれを発見するために解析される。I/Oフェーズ情報は次いでパラメータ化されてベンチマーク・スイートに入力され、該ベンチマーク・スイートが図３に示される三つのI/O層のそれぞれにおいて一連のI/Oオプションを試験する。こうした機能により、所与のシステム上で走っているアプリケーションのための最適なI/O設定を、十全にして効率的な仕方で見つけることができる。
【００７０】
本発明は、ある実施形態によれば、I/Oベンチマーク・スイートを使って種々の設定でアプリケーションのI/Oパターンをシミュレートすることによって所与のHPCシステム上で走るアプリケーションのための最適なI/O設定を識別するのを助ける。
【００７１】
図４は、本発明のある実施形態に基づく方法のより詳細なフローチャートを示している。このフローチャートは特に、ベンチマーク・アプリケーションの試験に関わる諸段階を示している。
【００７２】
図４に示した実施形態では、実行中にアプリケーションによって実行されるI/O動作のトレースが取られる（たとえば、時間順やいつどこでI/Oイベントが生起したかを記録する）。次いで、トレース・データが処理されて、アプリケーションのI/Oフェーズが識別される。次いで、種々のI/Oフェーズが解析され、比較される（さらなる詳細については下記の「I/Oフェーズ」の節を参照）。これは、アプリケーション中の非効率的なI/Oパターンがあれば発見されることを許容し、同様の動作をもつ異なるI/Oフェーズが識別されることを許容し、それによりその後のベンチマーク段において実行される試験の数を低減する。次いで、トレースおよびI/Oデータはベンチマーク・スイートに入力され、該ベンチマーク・スイートがアプリケーションのI/O要素（たとえば、ディスク・アクセス・パターン、ファイル型、ファイル・サイズ、トランザクション・サイズ）をエミュレートする。この情報を使って、ベンチマーク・スイートは、たとえば図３に示した三つのI/O層のそれぞれにわたって、設定を変えることの、性能への効果を調べる。
【００７３】
各フェーズについてのベンチマーク・スイートの完了の際、アプリケーションのための最適なI/O設定が識別されてもよい。次いで、アプリケーション実行のためのまたは潜在的なコード最適化のための設定についての推奨がレポートされることができる。
【００７４】
図４のコンテキストでは、I/Oフェーズは、アプリケーション実行の特定の段において単一のファイルまたは関係するファイルの群にアクセスすることが要求される動作をグループ化してもよい。システムI/O動作（たとえばread()、write()）のほかに、I/Oフェーズはデータを集める（gathering）または分散させる（scattering）際に必要とされる通信のようないかなる関連する動作をも含んでいてもよい。
【００７５】
科学的アプリケーションについては、I/Oフェーズは：入力ファイルが読み込まれる初期化フェーズと、科学的システムについての測定または統計が定期的にファイルに書き込まれる時間ステッピング・フェーズと、最終的な測定ファイルが後処理のために書き込まれてもよく、前回終わったところからシミュレーションを続けることを許容する再開ファイルが書き込まれる最終化／終了段（フェーズ）とを含む。
【００７６】
図５は、入力ファイルを読み込み、データを各プロセスに配布するための見本のソースコード断片を示している。このフェーズは、ファイルを開いて読むほかに、プロセス0から他のすべてのプロセスへのデータの分散を含む。図５に示されるこの見本コードのすべての行は、単一I/Oフェーズ（たとえば初期化フェーズ）として分類されるだろう。このフェーズをなす動作はプロセス0によって実行されるopen()およびread()動作およびすべてのプロセスによって呼び出されるMPI_SCATTER()動作である。
【００７７】
本発明のある実施形態に基づく方法段階のいくつかのより詳細な記述は下記で記述される。
【００７８】
トレース・アプリケーション――初期段階は、I/Oトレース・ユーティリティーに関わる。このユーティリティーは、実行中のアプリケーションに対して機能してもよい。これは実行中に生起するI/O動作の時間順を抽出して保存する。捕捉される情報は、データの型（使用されるAPI）；読み出しまたは書き込みされるデータのサイズ；どのプロセッサがその動作に参加したかを含んでいてもよい。データを集めるまたは分散させることにおいて必要とされる通信があればそのような関連する動作も捕捉されることができる。
【００７９】
I/Oフェーズ発見――トレース・ユーティリティーの出力は解析されて、I/O動作を特徴付けし、アプリケーション実行に依存するフェーズ（たとえば初期化フェーズ、時間ステッピング・フェーズおよび最終化／終了段）に分割する。次いでI/Oフェーズ情報がI/Oトレース・レポート・ファイルに書き込まれる。シリアルI/O動作を使う例示的な並列アプリケーションが図６に示されている。この例示的なプログラムは二つのI/Oフェーズをもつ――計算のためのパラメータをセットアップするために再開ファイルを読む初期化段と、規則的な時間間隔で再開ファイルを書き出すI/O実行計算段である。
【００８０】
図７は、256MBの入力ファイルをもって四つのプロセスで実行されたときの見本のアプリケーションのためのI/Oフェーズ発見段後に生成されるI/Oトレース・レポート・ファイルの例である。例として、トレース・ファイルはXMLファイルとしてフォーマットされる。他の出力ファイル・フォーマットも可能である――トレース・ファイルについての主要な要求は、I/Oベンチマーク・スイートが読むことができるということである。識別された各I/Oフェーズについてトレース・レポート・ファイル中に入力があり、フェーズは適宜データを集めることおよび分散させることを含む。
【００８１】
この機能を実装するために、トレース・ユーティリティー内でファイルにアクセスするI/O命令の前および後の動作を追跡することが望ましい。それにより、関連する動作（たとえば通信）があれば見つかる。これを行なう一つの可能な方法は、I/O命令に関わるバッファのメモリ参照を追跡することに基づいてトレース捕捉を有効にすることである。このようにして、そのバッファに関わる通信があればそれは捕捉され、トレース出力に加えられる。I/Oフェーズのより正確な識別を助けるために、I/O命令の前後に時間窓が置かれることができる。
【００８２】
I/Oフェーズ解析――ひとたびI/Oフェーズがアプリケーション・トレースから識別され、詳細がI/Oトレース・ファイルに書き込まれたら、トレース・ファイルの解析が行なわれる。解析の間に、同様の動作から構成される複数のフェーズを見出すために、ファイル中の異なるI/Oフェーズの間で比較が行なわれる。
【００８３】
この比較は二つの目的をもつ。第一に、同じ動作の集合を使い、同じまたは同様のプロセスに関わり、同様の量のデータを読み書きするI/Oフェーズをみつけることによって、実行されるベンチマークの数を減らすこと。これは、ベンチマーク・スイートの所要時間〔ターンアラウンドタイム〕を短縮する助けになる。図８は、I/Oフェーズ解析が、同様のrestart_dump_1およびrestart_dump_2フェーズを単一のrestart_dump〔再開ダンプ〕フェーズに組み合わせることによって、図６に示されるコードについて、生成されるI/Oトレース・ファイルに対して機能する様子を示している。第二に、アプリケーション内の非効率的なI/Oパターンを識別すること。これは、同じファイルにアクセスする同じプロセスの集合および同じ動作の集合に関わる一連のI/Oフェーズを見出すことによってなされる。この情報から、これらのフェーズを、より大きな諸I/O動作をもつ単一のフェーズに組み合わせる新しいI/Oフェーズが生成される。この新しいフェーズは、I/Oトレース・ファイルに加えられ、性能への効果を比較するためにベンチマークされる。非効率的なI/Oパターンの例についての見本のソースコード断片および対応するI/Oフェーズ・トレース・ファイルがそれぞれ図９および図１０に示されている。再開ファイルからのデータは、一つのプロセスによって小さなチャンクごとに読まれ、次いでプロセスのうちの前記一つに送られる。図１０の右側のテキストボックスは、非効率的である可能性があるI/Oパターンを識別したあとのI/Oフェーズ解析段の間に生成される追加的なI/Oフェーズを示している。この新しいフェーズは、グループ化された動作をもち、データはより大きなチャンクで読まれ、リモート・プロセスに送られる。
【００８４】
ベンチマーク・ファイルおよび入力ファイル設定――二つのファイルがベンチマーク・スイートに入力されてその動作を制御する。第一のファイルは、アプリケーションについてのI/Oフェーズまたは詳細ならびに上記のI/Oフェーズ解析段の間に生成された新しいまたは修正されたフェーズがあればそのフェーズをもつベンチマーク・トレース・ファイル（ベンチマーク・アプリケーション）である。これは、ベンチマーク・スイートによって実行されるべきベンチマークの型を定義する。第二のファイルは、ベンチマークについてのより粒度の細かい制御パラメータを設定する一般的な入力ファイルである。
【００８５】
図１１は、先述した例示的なプログラムおよびベンチマーク・トレース・ファイルについての見本の入力ファイルを示している。このファイルのキーとなる点は次のとおり。
・ベンチマーク・トレース・ファイルの位置はbenchmark_file〔ベンチマーク・ファイル〕パラメータのもとで指定されている；
・enable_phase〔有効化フェーズ〕およびdisable_phase〔無効化フェーズ〕パラメータは一緒になって、初期化およびrestart_dump_1  I/Oフェーズに関係した試験のみが実行されることを要求する；
・application_layer〔アプリケーション層〕は、この層におけるパラメータ掃引試験がシリアルI/O、パラレルI/OおよびI/Oサーバー・プログラミング・モデルについての試験およびトランザクション・サイズおよびI/Oバッファ・サイズの多様な値についての試験を含むべきであることを指定する；
・api_layer〔API層〕パラメータは、この層ではPOSIX  API試験のみが実行されるべきであることを指定する；
・fileSystem_layer〔ファイル・システム層〕パラメータは、種々のファイル・システムおよびI/O試験が実行されるその経路をリストする。――ここで、試験は、NFSおよびLustreファイル・システム上で実行される。
【００８６】
ベンチマーク・スイート――図１２は、ある実施形態に基づくI/Oベンチマーク・スイート・コンポーネントについての例示的なフローチャートを示している。図のように、まず、入力ファイルおよびベンチマーク・トレース・ファイルが読まれて、ベンチマーク設定および制御パラメータを設定する。この情報は、ベンチマーク・ランタイム環境を初期化するために使われる。これは、並列環境（たとえばMPIプロセス、スレッド利用環境）のセットアップおよび試験されるべき各ファイル・システム中のディレクトリまたはファイルの生成を含む。次いで、ベンチマーク・トレース・ファイルにおける各アクティブなI/Oフェーズにわたるループがある（アクティブとは、そのI/Oフェーズが入力ファイルにおいてenable_phaseパラメータのもとにリスとされていることを意味する）。各フェーズについて、ベンチマークはまず、トレース・ファイル中と同じ設定を用いて実行される。その動作のためのベースライン時間を取得し、トレース・ファイルからのタイミング情報と比較するためである。フローチャートの次の諸段階では、I/O階層の三つの層を横断した設定の各組み合わせについて、ベンチマーク試験が構築され、実行される。各試験の時間はベースライン時間との比較および解析のために保存される。ベンチマーク・カーネル／試験は、ベンチマーキング・フレームワーク中に収まり、これは各試験について、再現性があり、統計的に正確な実行結果が生成されることを保証する。
【００８７】
各ベンチマーク・カーネルを実行する前に、フレームワークは、カーネルが走るべき最小目標時間を設定する。次いでいくつかの試験反復が実行される。これらの反復の実行時間が目標時間より少なければ、結果は破棄され、試験は二倍の数の反復をもって再実行される。フレームワークは、試験カーネルが実行される前に環境をセットアップすることも受け持つ――これは、書き込み試験のために正しいフォーマットおよびサイズのファイルを生成することを含む。
【００８８】
図１３は、上記の図６に示された見本コードの初期化フェーズについての擬似コードの例を示している。この図において、プロセス0におけるコードの行2〜5および9〜16ならびにプロセス1およびその後の各プロセス（p）における行2および6〜8は、ベンチマーク・スイート・フレームワークによって提供される。一方、フォーマットされていないコードは各カーネル試験のためにコーディングされる必要がある。各試験についてのコードは、一組のインターフェースを実装することによって手動で、あるいはベンチマーク・トレース・ファイルから動作を抽出することによって自動的に構築されることができる。
【００８９】
推奨エンジン：ベンチマーク結果解析および報告――本発明はさらに、ある実施形態では、アプリケーションを実行すべきシステムの最適な設定および型を同定する推奨エンジンを含む。推奨エンジンは、ベンチマーク結果解析および推奨報告という二つの部分を含んでいてもよい。
【００９０】
ベンチマーク結果解析――各ベンチマーク・カーネル実行の終わりに、最適なI/O設定についてのレポートおよび推奨を生成するために、実行からの情報が抽出され、保存される。保存される情報は、ベンチマーク・トレース・ファイル中のどのI/Oフェーズが試験されたか、カーネルについての構成設定（たとえばI/O階層の各層における設定）および試験についての任意のパフォーマンス情報、たとえばベンチマーク実行時間もしくは達成されたI/O帯域幅の詳細を含む。
【００９１】
その情報は、テキスト・ファイルまたはデータベースに保存されることができる。これは、ベンチマーク・スイートの異なる呼び出しの間で、ベンチマーク・データがアクセスされ、解析されることを許容する。あるいはまた、その情報は、作業メモリに保持され、ベンチマーク・スイートのこの単一の呼び出しのために使われ、次いで報告段の後に破棄されることができる。図１４は、各ベンチマーク・カーネルが完了した後にベンチマーク結果を保存するためのフローの例を示している。ベンチマーク・スイートが終わった後、各I/Oフェーズについての最良の設定および構成を見出すために、保存された結果が解析される。図１５は、このプロセスの例示的なフローチャートを示している。
【００９２】
推奨報告――ひとたび各I/Oフェーズについての最適な設定が見出されたら、レポートが生成される。このレポートは、標準的なフォーマットで出力され、I/Oフェーズについての詳細、I/Oフェーズについて実行されたベンチマークおよび改善された性能を達成するためのI/O階層の各層における設定の詳細を含む。
【００９３】
レポートは、アプリケーションのI/O性能を改善するための可能な領域を示唆するために開発者にフィードバックされることができる。レポートは、特定のシステム上で走っているアプリケーションについての最適である可能性のある設定（たとえば、アプリケーションを実行するための最良のハードウェアまたはファイル・システム）を同定する助けともなりうる。この情報は、ジョブ・スケジューラ・プロファイルまたはHPCワークフローに加えられ、システムについての最も最適なI/O設定を用いたそのアプリケーションの自動実行を許容するために使われることができる。
【００９４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
コンピュータ・アプリケーションの入出力（I/O）設定を試験するためのベンチマーク・アプリケーションを生成する方法であって：
前記コンピュータ・アプリケーションによって実行される動作に関係するトレース・データを集積する段階と；
前記動作が関係する前記コンピュータ・アプリケーションの実行における種々の段に基づいて前記トレース・データを一つまたは複数のフェーズにグループ化する段階と；
前記トレース・データにおけるパターンを識別して前記パターンを比較する段階と；
同様のパターンをもつトレース・データが組み合わされている簡略化されたトレース・データを生成する段階と；
前記簡略化されたトレース・データおよび前記トレース・データが組み合わされたところを示す情報を含むベンチマーク・アプリケーションを出力する段階とを含む、
方法。
（付記２）
前記ベンチマーク・アプリケーションのベンチマーク動作の性能を確立するために前記ベンチマーク・アプリケーションを試験する段階をさらに含む、
付記１記載の方法。
（付記３）
前記ベンチマーク・アプリケーションを試験する前記段階が、前記ベンチマーク・アプリケーションのI/O設定を試験して、前記コンピュータ・アプリケーションが実行されるシステムを通じたデータ・フローにおける非効率および／または前記システムの特性を識別することを含む、付記２記載の方法。
（付記４）
データ・フローを改善するのに使うために、前記ベンチマーク動作の性能を示すおよび／または前記コンピュータ・アプリケーションが実行されるよう動作可能である各システムに固有のI/O設定についての推奨を含むレポートを出力する段階をさらに含む、
付記２または３記載の方法。
（付記５）
前記レポートは、アクセス・パターン、読み書きされるファイルの型、読み書きされるファイルのサイズ、トランザクション・サイズおよびタイミングのうちの少なくとも一つに関する推奨を含む、付記４記載の方法。
（付記６）
前記ベンチマーク・アプリケーションを試験する前記段階は、I/O設定を変えることが性能に対して及ぼす効果を調べることを含む、付記２ないし５のうちいずれか一項記載の方法。
（付記７）
同様のパターンをもつトレース・データが組み合わされる場合、前記ベンチマーク・アプリケーションを試験する前記段階は、同様のパターンをもつ前記トレース・データの最初のインスタンスを試験するだけであることを含み、同様のパターンをもつ前記トレース・データの最初のインスタンスを試験した結果が次いでその後のインスタンスに適用される、付記２ないし６のうちいずれか一項記載の方法。
（付記８）
前記試験は、ベンチマーク・スイートにおいて前記ベンチマーク・アプリケーションに対して実行され、前記ベンチマーク・アプリケーションを、前記ベンチマーク・スイートの制御パラメータを設定するユーザー修正可能な入力ファイルとともに、前記ベンチマーク・スイートに入力することを含む、付記２ないし７のうちいずれか一項記載の方法。
（付記９）
前記ユーザー修正可能な入力ファイルは試験されるべきフェーズを指示するおよび／または各ベンチマーク・スイートについての目標実行時間を指定するおよび／または試験から排除されるべき動作があればそれに関係するトレース・データを同定する、付記８記載の方法。
（付記１０）
前記トレース・データを集積する前記段階はさらに、前記コンピュータ・アプリケーションの実行中に生起する動作の時間順を抽出することを含む、付記１ないし９のうちいずれか一項記載の方法。
（付記１１）
前記トレース・データは、読み出しまたは書き込みされる、前記動作に関係するデータの型および／またはサイズを示す情報を含む、付記１ないし１０のうちいずれか一項記載の方法。
（付記１２）
前記トレース・データは、少なくとも、入力ファイルを読むことに関係する初期化フェーズと、試験の完了後に動作が再開することを許容する再開ファイルを書き出すことに関係する最終化フェーズとにグループ化される、付記１ないし１１のうちいずれか一項記載の方法。
（付記１３）
フェーズ間でパターンを比較することが、それぞれ同じファイルにアクセスすることに関わる同様の動作の集合を含むフェーズを識別することを含む、付記１ないし１２のうちいずれか一項記載の方法。
（付記１４）
前記簡略化されたトレース・データを生成する段階が、特定のパターンの最初のインスタンスを前記簡略化されたトレース・データにおいて維持し、前記最初のインスタンスと同様のパターンをもつその後のインスタンスを、該その後のインスタンスが前記最初のインスタンスと組み合わされたという指標で置き換えることを含む、付記１ないし１３のうちいずれか一項記載の方法。
（付記１５）
コンピュータ・アプリケーションの入出力（I/O）設定を試験するためのベンチマーク・アプリケーションを生成する装置であって：
前記コンピュータ・アプリケーションによって実行される動作に関係するトレース・データを集積する手段と；
前記動作が関係する前記コンピュータ・アプリケーションの実行における種々の段に基づいて前記トレース・データを一つまたは複数のフェーズにグループ化する手段と；
前記トレース・データにおけるパターンを識別して前記パターンを比較する手段と；
同様のパターンをもつトレース・データが組み合わされている簡略化されたトレース・データを生成する手段と；
前記簡略化されたトレース・データおよび前記トレース・データが組み合わされたところを示す情報を含むベンチマーク・アプリケーションを出力する手段とを有する、
装置。
【符号の説明】
【００９５】
S101  トレース・データを集積
S102  トレース・データをフェーズにグループ化
S103  パターンを識別し、比較
S104  簡略化されたトレース・データを生成
S105  ベンチマーク・アプリケーションを出力
１００  プロセッサ
１０１  トレース・データ集積器
１０２  トレース・データ・グループ化器
１０３  パターン識別器
１０４  比較器
１０５  簡略化されたトレース・データ生成器
２００  処理装置
２０１  トレース・データ集積ユニット
２０２  トレース・データ・グループ化ユニット
２０３  パターン識別ユニット
２０４  簡略化されたトレース・データ生成ユニット
２０５  ベンチマーク・アプリケーション出力ユニット
【図１】
2016100006.tif 000003
【図２】
2016100006.tif 000004
【図３】
2016100006.tif 000005
【図４】
2016100006.tif 000006
【図５】
2016100006.tif 000007
【図６Ａ】
2016100006.tif 000008
【図６Ｂ】
2016100006.tif 000009
【図７Ａ】
2016100006.tif 000010
【図７Ｂ】
2016100006.tif 000011
【図８Ａ】
2016100006.tif 000012
【図８Ｂ】
2016100006.tif 000013
【図９】
2016100006.tif 000014
【図１０Ａ】
2016100006.tif 000015
【図１０Ｂ】
2016100006.tif 000016
【図１１】
2016100006.tif 000017
【図１２】
2016100006.tif 000018
【図１３】
2016100006.tif 000019
【図１４】
2016100006.tif 000020
【図１５】
2016100006.tif 000021