(57)【要約】      （修正有）【課題】性能メトリクスの測定をより容易にする改善されたプロファイリング技術を提供する。【解決手段】複数のシーケンシャル実行フレームにおけるコンピュータプログラムの１つ以上のコンポーネントを実行するように動作可能な実行環境を生成するように構成されている実行環境生成手段を含むシステムであって、実行環境はさらに、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし、かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能であり、前記実行環境生成手段は、実行されているプログラムコンポーネント（単数又は複数）の性能に関する性能メトリクスを得るようになっている。【選択図】図１
2009146408.tif 000002
【特許請求の範囲】
【請求項１】
複数のシーケンシャル実行フレームにおけるコンピュータプログラムの１つ以上のコンポーネントを実行するように動作可能な実行環境を生成するように構成されている実行環境生成手段を含むシステムであって、前記実行環境はさらに、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能であり；
前記実行環境生成手段は、実行されているプログラムコンポーネント（単数又は複数）の性能に関する性能メトリクスを得るようになっているシステム。
【請求項２】
前記性能メトリクスが、プロセッサ使用量、メモリ消費量、及びネットワーク性能の１つ以上についての情報を含む請求項１に記載のシステム。
【請求項３】
前記性能メトリクスを記憶するように動作可能なデータストアをさらに含む請求項１又は請求項２に記載のシステム。
【請求項４】
前記実行環境生成手段がさらに、１フレーム当たりを基準にして前記性能メトリクスを得るようになっている請求項１〜３のいずれか１項に記載のシステム。
【請求項５】
前記実行環境生成手段がさらに、１コンポーネント当たりを基準にして前記性能メトリクスを得るようになっている請求項１〜４のいずれか１項に記載のシステム。
【請求項６】
ネットワークを介して互いに対話する複数の機械を含み、前記実行環境が前記複数の機械間に分散されている請求項１〜５のいずれか１項に記載のシステム。
【請求項７】
前記実行環境が異なる実行フレームにおけるコンポーネント間の通信のみ可能なように動作可能である請求項１〜６のいずれか１項に記載のシステム。
【請求項８】
通信が、別のコンポーネントにメッセージを送信すること、又は別のコンポーネントからデータを読み込むことの少なくとも１つを含む請求項１〜７のいずれか１項に記載のシステム。
【請求項９】
通信を所定の順序で処理する請求項１〜８のいずれか１項に記載のシステム。
【請求項１０】
複数のシーケンシャル実行フレームにおけるコンピュータプログラムの１つ以上のコンポーネントを実行するように動作可能な実行環境であって、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能であり、さらに、実行されているプログラムコンポーネント（単数又は複数）の性能に関する性能メトリクスを得るように動作可能である実行環境。
【請求項１１】
コンピュータプログラムの実行に関する性能メトリクスを得るツールであって、前記ツールは、複数のシーケンシャル実行フレームにおけるコンピュータプログラムの１つ以上のコンポーネントを実行するように動作可能な実行環境を生成するように構成されている実行環境生成手段を含み、前記実行環境はさらに、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能であり、前記実行環境生成手段は、実行されている前記プログラムコンポーネント（単数又は複数）の性能に関する前記性能メトリクスを得るように動作可能になっているツール。
【請求項１２】
１つ以上のコンピュータ上で起動させると、請求項１〜９のいずれか１項に記載のシステムとして前記コンピュータを実行させるコンピュータプログラムを記憶したコンピュータ可読記憶媒体。
【請求項１３】
１つ以上のコンピュータ上で起動させると、請求項１０に記載の実行環境を前記コンピュータに生成させるコンピュータプログラムを記憶したコンピュータ可読記憶媒体。
【請求項１４】
１つ以上のコンピュータ上で起動させると、前記コンピュータを請求項１１に記載のツールにさせるコンピュータプログラムを記憶したコンピュータ可読記憶媒体。
【請求項１５】
キャリア媒体によって持ち運ばれる請求項１２、請求項１３、又は請求項１４のいずれか１項に記載のコンピュータプログラム。
【請求項１６】
前記キャリア媒体が記録媒体である請求項１５に記載のコンピュータプログラム。
【請求項１７】
前記キャリア媒体が伝送媒体である請求項１５に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムの実行に関するメトリクスの測定技術に関し、プログラム解析ツール、及びプログラム解析を行う方法を提供する。特に、本発明は、プログラミング言語で表された命令を実行できることに加えて、これらの命令の実行に関する測定を行うように動作可能な実行環境に関する。さらに、本発明は、限定的ではないが特に、数台の機械にわたって分散している実行環境と組み合わせて提供されるプロファイリング技術に関する。
【背景技術】
【０００２】
プログラムが起動するとプログラムの性能若しくは挙動を測定する、プロファイラとして知られているプログラム解析ツールが知られている。そのようなツールは、一般に、プログラムの性能に関する１つ以上のメトリクスの測定を含み、そのようなメトリクスは、メモリ使用量、又は関数呼出しの頻度及び期間を含む（リソース使用量又はＣＰＵ時間についての指標を提供する）。その後、メトリクスは、レポート又は要約の形式で示すことができ、どのようにプログラムを有用に最適化できるかの洞察が可能となる。例えば、先述のプロファイラは、プログラムのいわゆる「ホットスポット」、即ち、全実行時間のかなりの割合をプログラムが費やす場所を識別するために、コンピュータプログラムの実行を計時又はサンプリングするように動作可能である。さらに、コンピュータプログラムの分散実行中にネットワークチャネルの使用パターンについての情報を識別するためネットワークトラフィックを測定又はサンプリングするように動作可能なネットワークプロファイラも知られている。
【０００３】
周知のプログラム解析ツールの利用可能性及び有用性は、多くの重要な点で制限されている。例えば、周知のプロファイラは、機械コード、即ち、コンパイラによってハイレベル言語からコンパイルされた機械コードに翻訳されているコードレベルでの性能測定を行う傾向がある。そのようなプロファイラの例としては、インテル社のＶＴｕｎｅ、インテル社のスレッドプロファイラ、及びＡＭＤ社のＣｏｄｅＡｎａｌｙｓｔが挙げられる。これらのツールは、プログラムの実行に関する記号情報（例：関数名）とともにタイミング情報を提示する。
【０００４】
機械コードプロファイラの問題は、収集された測定結果を実行中の入力プログラムに関連付けることができない場合があるということである。プロファイラは、インタプリタによって実行されている入力プログラムをどのように実行しているかではなく、インタプリタを実装するプログラムをどのように実行しているかについての情報を明らかにするので、例えば、いわゆる、インタプリタ型言語（即ち、機械コードに予備翻訳することなく、インタプリタによって直接実行されるハイレベル言語）で書かれたプログラムは、機械コードプロファイラを用いて容易にプロファイルすることができない。さらに、機械コードプロファイラは、分散システム全体で実行しているプログラムの性能特性をレポートする能力は非常に制限されている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
性能メトリクスの測定をより容易にする改善されたプロファイリング技術を提供することが望ましい。限定的ではないが特に、インタプリトされたプログラム実装の実行に関するメトリクスを収集できることが望ましい。
【０００６】
本発明の第１の態様によれば、複数のシーケンシャル実行フレームにおけるコンピュータプログラムの１つ以上のコンポーネントを実行するように動作可能な実行環境を生成するように構成されている実行環境生成手段を含むシステムであって、実行環境はさらに、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能であり；
前記実行環境生成手段は、実行されているプログラムコンポーネント（単数又は複数）の性能に関する性能メトリクスを得るようになっている。
【０００７】
システムは、プログラムコンポーネントを実行する複数の実行手段、例えば、複数のインタプリタを含み、これらの実行手段は、複数の機械間に分散できることが好ましい。
【０００８】
本発明の第２の態様によれば、複数のシーケンシャル実行フレームにおけるコンピュータプログラムの１つ以上のコンポーネントを実行するように動作可能な実行環境であって、実行環境は、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能であり、前記実行環境はさらに、実行されているプログラムコンポーネント（単数又は複数）の性能に関する性能メトリクスを得るように動作可能である。
【０００９】
本発明の第３の態様によれば、コンピュータプログラムの実行に関する性能メトリクスを得るツールであって、該ツールは、複数のシーケンシャル実行フレームにおけるコンピュータプログラムの１つ以上のコンポーネントを実行するように動作可能な実行環境を生成するように構成されている実行環境生成手段を含み、該実行環境はさらに、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能であり、前記実行環境生成手段は、実行されている前記プログラムコンポーネント（単数又は複数）の性能に関する前記性能メトリクスを得るように動作可能になっている。
【００１０】
本発明の実施形態によれば、実行中のコンピュータプログラムの性能若しくは挙動に関する性能メトリクスを得る、例えば、測定する能力を、実行環境自身の一部として実装する点で有利である。例えば、実行環境生成手段（例：実行環境の構造及び動作を画定し、コンピュータ上で起動される際には、実行環境の構造及び動作を実装するプログラムコード）は、所望のリソース消費パラメータの測定を容易にする命令を含むようにすることができる。従って、プログラム実行の性能に関するメトリクスを収集する能力は、実行環境のフレーム構造内では実装されないが、実装環境のフレーム構造がある下位レベルで実装されることを理解すべきである。これは、通常、プログラマが、例えば、スクリプト挿入によって入力プログラム自身にプロファイリングチェックを構築するか、或いは、候補プログラムを実行する際に候補プログラムと並んで別のプロファイリングツールを起動する最もよく知られているプロファイリング技術とは対照的である。そのため、本発明の主要な特徴の１つは、プロファイラ関数を実行環境の特徴として実装するやり方にある。実行環境は、実行についての種々の測定を環境自身から直接得る、或いは収集するために、コンピュータプログラムの実行中に所望のプログラムコンポーネントの１つ以上の実行をプロファイルするように動作可能であることが重要である。事実、プロファイリングタスクを実行する能力は、実行環境に構築されるか、或いは実行環境の一部を形成する。しかして、本発明の実施形態は、言語のインタプリタ実装の実行をプロファイリングすることに特に適しており；プロファイリング関数は、実行環境を実装するプログラム上ではなく、実行環境内で起動している入力プログラム上で正確に行われる。さらに、ランタイムシステムの一部としてプロファイリングサポートを提供することにおいて、内部構造及びインタプリタの内部アクションに関する情報を収集することができるので有利であり、これにより、実行されているプログラムに対して意味のある統計を記録する、例えば、入力プログラム内のロケーション及びアクションに対する実行環境のアクション、又はランタイムをレポートすることができる。
【００１１】
特に好適な実施形態によれば、コンピュータシステムは、実行環境によって得た性能メトリクスを記憶する、又は記録するように動作可能な記憶手段を備える。その後の解析及び／又は表示用の所与のシステムに含まれる実行手段から得たメトリクスを要約するレポートを生成するように動作可能なレポート生成手段も備えるのが好ましい。
【００１２】
有効にしたプロファイリングサポート（即ち、性能測定能力）の有無に依らず、ユーザが本発明の一実施形態の実行環境内でプログラムを実行することができるのが好ましい。従って、性能メトリクスを測定する能力を有効又は無効（動的又は静的）にすることができ、さまざまな統計セットを収集するように実行するか、或いは、プロファイリングすることなく最高速度で実行するプログラムをプロファイルするインタプリタに与える。プロファイリングのオーバーヘッドは、有効なプロファイリング量、例えば、収集されたデータ量に比例すると考えられる。
【００１３】
実行中のプログラム性能に関するメトリクスの測定は、プロセッサ使用量、メモリ消費量、回線容量の消費、及び入力プログラムにおけるハイレベル動作（例：入力プログラムのアクション）の１つ以上についての情報を収集することを含むのが好ましい。この情報は、例えば、中央データ記憶手段で記憶、照合することができ、かつ、概して、単一機械に含まれる、或いは複数の機械にわたって分散している実行環境を含むことができるシステム全体のリソースアカウント又はリソース消費解析を提供するため照会／処理することができる。分散システムの場合、解析は分散システムに含まれる１つ以上の機械に対して行うことができる。そのため、本発明の好適な実施形態は、起動中のアプリケーション、或いは、所与のサーバ若しくはクライアントのランタイムシステムで実行しているアプリケーションの性能特性の統一した視界を示すために、実行環境の構造、ネットワークプロファイル、及び入力プログラムの知識を利用する。本発明の好適な実施形態による実行環境は、消費されたプロセッサ時間、記憶用に割り当てたメモリ、及び消費されたネットワーク回線容量において、プログラムの実行に関するメトリクスを収集、及び／又は処理、及び／又はコンパイルするように動作可能である。全てのＣＰＵ消費量、メモリ消費量、及びネットワーク消費量に関するメトリクスを収集する統合プロファイラを設けることは、異なるタイプのデータを収集するのにいくつかの本質的に異なるプロファイラに依存する必要がなく、得られる分散プログラムの性能についてより高いレベルでの理解が可能となるので特に望ましい。さらに、特に好適な実施形態によれば、収集されたメトリクスは、入力プログラムで発生している動作／アクションに関連付けられる。
【００１４】
性能メトリクスの測定は、イベントベースのプロトコルに基づいて行ってもよく、又は統計的であってもよいことを理解されたい。
【００１５】
その内容全体を文献引用によって本明細書に組み込んだものとする英国特許出願第０７１２４９６．９号で、スクリプト言語などのインタプリタ型言語の実行に特に適しているプログラム実行技術を説明する。英国特許出願第０７１２４９６．９号の完全な写しは、本発明と一緒に提出される。
【００１６】
英国特許出願第０７１２４９６．９号の教示によれば、コンピュータプログラムの１つ以上のコンポーネントの実行は、複数のシーケンシャル実行フレームで行われるので有利であり、実行環境はさらに、ｉ）異なる実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を可能にし；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能である。さらに、英国特許出願第０７１２４９６．９号の教示によれば、実行環境は、コンピュータプログラムの１つ以上のコンポーネントの実行が複数のシーケンシャル実行フレームで行われるように動作可能であり、さらに、所定の順序でコンピュータプログラムのコンポーネント間の通信を処理するように動作可能であることが有利である。
【００１７】
英国特許出願第０７１２４９６．９号に記載の実行環境の内部構造は、先述のプログラム実行技術とは全く異なっている。本発明の実施形態は、英国特許出願第０７１２４９６．９号の教示による実行環境に依存しており、これは、分散システムでもプロファイリング能力を提供するように利用することができる構造的に連続的な環境を提供するので有利である。
【００１８】
英国特許出願第０７１２４９６．９号の教示によれば、プログラムの少なくとも１つのコンポーネントが実行の各フレームに含まれる状態で、「フレーム」、即ち、単位時間又は単位仕事におけるプログラムコードの実行を容易にするように構造化されているランタイムシステムを実装するのが望ましい。英国特許出願第０７１２４９６．９号に提案されている実行環境は、高度の決定論でコンピュータコンポーネントの実行を容易にするので非常に有利である。これは、同一状態における対応コンポーネント、例えば、オブジェクト（例えば、ゲーム中のキャラクターを実装すること）が２台の異なるコンピュータ上、或いは２つの異なる時間で同一コードを実行すると、オブジェクトの新たな状態は両方の機械若しくは両方の時間で同一となるので有利であることを意味している。
【００１９】
ネットワーク（例：ローカルエリアネットワーク（ＬＡＮ）、又はインターネット）を介してコンピュータプログラムのドメイン内で互いに対話する複数の機械を備える分散システムでプロファイリングを行うのは特に困難である。これらの事情では、一連の本質的に異なるツールは、分散しているコンピュータプログラム全体の性能について異なる種類の情報を収集するのに現在必要であり、各ツール若しくはプログラムは測定結果を別々に示し、かつ、その形式に従っている。従って、性能データを収集するのにさまざまなツールが現在必要であり、かつ、性能の問題が発生し得る異なる領域が多いことにより、大規模なマルチプレーヤーオンラインゲーム（ＭＭＯＧ）などの分散コンピュータプログラムの性能を完全かつ適切に理解することは非常に困難となり得る。
【００２０】
マルチユーザがしばしばリアルタイムで仮想世界を共有し、その仮想世界内で互いに対話するという要望が増していることから、数台の機械を含む分散システム内で実行しているコンピュータプログラムの性能に対する理解を向上させるニーズが高まっている。分散プログラムの実行は、プログラムの全体的な性能を解析するために、プロセッサ及びメモリ使用量に属する性能データに加えて、有用に測定することができるネットワークに属するいくつかの性能特性を取り入れることを理解されたい。実行環境の分散は、応答時間のみならず、要求を受信すると応答がなされる速度を制限するという効果がある。従って、待ち時間や応答時間のみならず、回線容量の消費に関するデータにより、ネットワークの性能を評価することができるので有利である。そのため、本発明の好適な実施形態は、統合され、かつ整合したやり方で分散プログラムの性能に関するいくつかの重要な特性の測定を容易にしようとするものである。特に、プロセッサ及びメモリ使用量に属するデータに加えて、分散プログラムのネットワーク性能、例えば、回線容量の消費、ネットワーク動作時間（例：待ち時間、及び応答時間）についての情報を収集することができる単一の性能解析ツール、及び対応方法を提供できることが望ましい。
【００２１】
本発明の好適な実施形態によれば、コンピュータシステムはネットワークを介して互いに対話する複数の機械を備え、実行環境は前記複数の機械間に分散されている。さらに、実行環境は、ネットワークの性能、プロセッサ使用量、及びメモリ使用量に関するメトリクスを得るようになっているのが好ましい。従って、本発明の実施形態は、数台の機械にわたってコンピュータプログラムの分散実行に関するメトリクスを収集するのに特に適している。そのため、プログラム開発者は、例えば、システムに含まれる異なる機械（サーバ（単数又は複数）及びクライアント（単数又は複数）の両方を含む）上でプログラムコンポーネントを分割及び／又は複製する方法を調節することで、例えば、分散システムで実行するコンピュータプログラムの性能を容易に調整することができる。さらに、プログラム開発者は、統合され、かつ整合したやり方で性能測定結果を表示しない一連の本質的に異なるプログラムではなく、分散プログラム全体の性能特性を理解するため単一ツールを使用することができるので有利である。さらに、収集された情報、ＭＭＯＧなどの分散プログラムを用いることにより、回線容量及びプロセッサ時間においてより効率的に実行するようにすることができる。
【００２２】
本発明のさらなる利点は、１フレーム当たりを基準にしてリソースアカウントを提供するように性能メトリクスを得て、示すことができる点である。この非常に有利な特徴により、コンピュータプログラムの細かく、詳細な性能及びリソース解析を生成する能力を提供する。そのため、本発明の好適な実施形態によれば、プログラム実行を期待フレームレートより下に落とす原因となり得るリソース消費の任意のスパイクは容易に識別することができる。分散コンピュータゲーム又はＭＭＯＧなどの分散コンピュータプログラムでは、期待されるフレームレートを維持することが非常に重要であることを理解されたい。
【００２３】
１フレーム当たりを基準にしてプロファイリングサポートを容易にすることに加えて、本発明の好適な実施形態は、リソース消費が、例えば、１コンポーネント当たり、例えば、１プログラムオブジェクト当たり（所与のプログラム内には数千個の場合がある）を基準にしてプロファイルすることができることも有利である。これは、リソース使用量、主にＣＰＵ時間が、通常、プログラム内の関数を基準にして計上され、潜在的に、関数プラス詳細を呼出すオペレーティングシステム（ＯＳ）レベルのスレッドの関数プラス詳細を基準にしても計上される従来のプロファイラとは対照的である。しかしながら、関数呼出しの頻度及び期間を単に測定するだけでは、プログラム開発者がプログラム実行を正確に解析できるには情報が不十分であり、マルチスレッドプログラムでは、関数は多くのスレッドから呼び出される場合があるので、結果的に測定結果が正常域の外に現れると、なぜなのかを識別するのが困難である。従って、１コンポーネント当たりを基準にしてプロファイリングサポートを提供する能力は、例えば、どこでリソース消費が発生しているかだけでなく、誰（即ち、どのコンポーネント）のためであるかも識別し、或いは、プログラムがかなりの時間を費やす場所だけでなく、なぜそこでその時間を費やすのか（即ち、どのようにしてそうなったか）も識別することができるので有利である。
【００２４】
本発明の実施形態によれば、コンポーネント間の通信は、メッセージを送信すること、又は別のコンポーネントの状態の少なくとも一部を読み込むことの少なくとも１つを含むことができる。通信は、隣接するフレームのコンポーネント間、或いは１フレーム以上離れているフレームのコンポーネント間で行うことができる。プログラムをシーケンシャルフレームに分割することは、プログラムコンポーネントの並列実行を高度にすることもできるので有利である。そのため、プログラムのコンポーネント数が増加するにつれて、プログラムコードの実行は、単一のプロセッサではもはや十分ではない場合、複数のプロセッサにわたって容易に分散することができる。従って、異なるプログラムコンポーネント、又は異なるオブジェクトを並列で容易に実行することができる。
【００２５】
メッセージは、オブジェクトからオブジェクトに、或いは外界（例：ユーザ、又はＣ＋＋プログラム）とオブジェクトとの間に送ることができるのが好ましい。メッセージは、システム及び外界内のオブジェクト間の通信を可能にする。メッセージは、ネットワークにわたって送信することができる。メッセージは、特定のフレーム番号及び目標オブジェクトに伝達される。同一フレームのコンポーネント間で通信を妨げるように動作可能な本発明の実施形態によれば、オブジェクトがメッセージを送信すると、その後、メッセージは、異なる、その後のフレームでのみ受信することができる。オブジェクトによるメッセージの受信は、各フレームで各オブジェクトに提供された入力メッセージの待ち行列によって実装できることが好ましい。待ち行列は、ネットワークの一貫性を維持するように、決定論的な順序付け方法を用いて順序付けされることが好ましい。
【００２６】
決定論的な順序付け方法は、
１）送信する順序；及び、
２）送信者のｉｄ
に基づいてソートされる所与のフレームで所与のオブジェクトを受信したメッセージのセット全体を含む。
【００２７】
従って、オブジェクトが２つのメッセージ：Ａ次いでＢを送信すると、受信者は、Ａ次いでＢの順で受信する。従って、到達する順は、送信する順と同じである。２つのオブジェクト（１）及び（２）がそれぞれ、２つのメッセージ：Ａ１及びＢ１と、Ａ２及びＢ２を送信すると、受信者はＡ１  Ｂ１次いでＡ２  Ｂ２の順でメッセージを受信し、順序はローカル（単一送信者からのメッセージで）及びグローバル（複数の送信者からのメッセージは送信者のｉｄによって順序付けられる）に保存される。送信者が複数の場合、送信行為は重なる場合があり、例えば、オブジェクト（１）と（２）が同時に実行される場合である。ユーザ入力メッセージをソートできるように、クライアントに与えられたｉｄ上における追加の順序付けがあることが好ましい。例えば、２つのクライアントが同一オブジェクトにユーザ入力メッセージを送信すると、順序はクライアントｉｄによって決められる。
【００２８】
本発明の範囲内における外界とは、提案された本発明の実行環境内で実行されるプログラムを書くための好適な条件に従わない他の言語で書かれたソフトウェアのことである。外界は、ユーザからの情報の受信、ネットワークにわたるデータのストリーム送信、或いはユーザに戻す結果の表示のような重要な作業をする。外界は、後述するシステムの好適な条件に違反しないのが好ましい。外界は、本発明を具現化するシステム内のオブジェクトにメッセージを送信することができ、システム内のオブジェクトにリファレンスを保持し、システムでオブジェクトを生成し、複製又は推論的に実行するためオブジェクトセットを生成し、又はシステム内のオブジェクトの状態を読み込むことができる。外界は、関数を介して呼び出すことができるが、システム内の任意のオブジェクトの状態を修正することはできない。しかしながら、そのような関数呼出しが異なる機械上で対応するオブジェクトの実行間で発散する可能性を生じないように確実にするために、関数呼出しは、関数に対するパラメータが同じであり、かつ、関数が呼び出されるフレーム番号が同じであれば常に、システムの全てのコンピュータ上で全く同一の結果を戻すのが好ましい。そのような関数呼出しは、呼び出しオブジェクトのローカル状態を修正できないことが好ましい。
【００２９】
コンピュータプログラムを一連のフレーム、即ち、単位時間又は単位仕事に分割することは同期化することができ、プログラムコンポーネントの状態を一貫して定義することができるので有利である。本発明の好適な実施形態によれば、オブジェクトはフレーム内の可視状態を変えることだけでき、前フレームの終了時にその他のオブジェクトの値を読み込むことだけできる。メッセージは、コンピュータプログラムの所与のフレームにも取り付けられる、若しくは関連付けられる。フレームはクロックに取り付けることができ、新たなフレームは（例えば）１秒の１／５０毎に開始し、又は、新たなフレームは最後のフレームが終了するとすぐに開始でき、或いは、フレームは、実行を完了するのに十分な入力データが利用可能であれば常に開始する個々のオブジェクト実行とパイプライン式に実行することができる。
【００３０】
フレームは階層的であってもよく、ユニバーサルフレームクロックはサブフレームに分解される。この構成により、オブジェクトセットは、複数のオブジェクトにわたって分散している特定のアルゴリズム用にはるかに高速なフレームカウンタを動作させることができるので有利である。細分性が最も粗いフレームはネットワークフレームに対応し、細分性が最も密な好適フレームは現在のプロセッサ上の動作に対応することが考えられる。本発明の実施形態によれば、オブジェクトの状態は、フレームの開始又は終了時にのみ可視でき、従って、あるフレームの開始時の状態は、前フレームの終了時の状態と同じである。
【００３１】
フレーム内通信を妨げるように動作可能な実行環境に依存する本発明の実施形態によれば、フレームの開始時におけるシステムの状態は、前フレームの終了時におけるシステムの状態、及びシステムへの任意の外部メッセージのみの関数であることを理解されたい。フレーム開始時におけるシステムの状態は、フレーム開始時の全オブジェクトの状態と、前フレームから送信された任意のメッセージからなる。そのため、複数のオブジェクトを含むコンピュータプログラムに関して、システムにおける全オブジェクトのサブセットを定義することができる。サブセットは、適切なサブセットであってもよく、又は、オブジェクトが１つの場合、重要（ｎｏｎ−ｔｒｉｖｉａｌ）サブセットであってもよい。特定のフレームでのシステムにおけるオブジェクトのサブセットの状態は、前フレームの開始時におけるこれらのオブジェクトの状態の関数であり、全てのメッセージは前フレームからのオブジェクトのサブセットに送信される。
【００３２】
形式上、Ｏｎ，ｉがフレームｎの開始時のオブジェクトｉの状態であり、Ｍｎ，ｉがフレームｎからフレームｎ＋１へオブジェクトｉから送信されたメッセージのリストであり、かつ、ｆｎ，ｉがフレームｎにおけるオブジェクトｉの挙動に対応する関数であるとすれば、
（Ｏｎ＋１，ｉ，Ｍｎ＋１，ｉ）＝ｆｎ＋１，ｉ（Ｏｎ，ｉ，Ｍｎ，ｉ）である。
これは、フレームｎ＋１の状態をリターンしているフレームｎの関数である。見て分かるように、フレームｎ＋１の全体の状態は、フレームｎのみの関数である。これは、フレームｎ内に相互依存性がなく、よってフレームｎの全オブジェクトは並列で実行できるので有利であることを意味する。
【００３３】
オブジェクトの各インスタンスの各フレームは、オブジェクトデータとオブジェクト実行ポイントとを含むのが好ましい。全てのフレームの開始時と終了時で、実行ポイントがエラー又はクイットとなり計算を終了する場合を除いて、実行ポイントは、従って、次のフレームステートメントになる。次のフレームステートメントは、フレームで実行される最後の命令である。使用時に、本発明を具現化する実行環境は、次のフレームステートメントを含むところまで各フレームを実行するように動作可能であることが好ましい。そのため、オブジェクト状態は、オブジェクトコードを実行する度に繰り返し修正される。しかしながら、好適な実施形態によれば、繰り返し変更と中間状態は任意のその他のオブジェクトには決して見えず、前フレームの終了時における状態のみがその他のオブジェクトには見える。
【００３４】
上の実施形態及び態様のいずれにおいて、種々の特徴は、ハードウェアに、或いは１つ以上のプロセッサ上で起動しているソフトウェアモジュールとして実装することができる。ある態様若しくは実施形態の特徴は、その他の態様若しくは実施形態のいずれに適用することができる。
【００３５】
本発明は、本明細書に記載の技術を実装するコンピュータプログラム或いはコンピュータプログラム製品、及び本明細書に記載の技術を実装するプログラムを記憶しているコンピュータ可読記憶媒体も提供する。本発明を具現化するコンピュータプログラムは、コンピュータ可読媒体上に記憶することができ、又は、例えば、インターネットウェブサイトから提供されるダウンロード可能なデータ信号などの信号形式、或いは任意のその他の形式とすることができる。
【発明を実施するための最良の形態】
【００３６】
本発明の理解を深めると共に、それがどのように実施されるかを示すために、添付の図面を参照しながら、単なる例示として、以下に説明する。
【００３７】
図１は、ＣＰＵ当たり１つの４つの実行手段１１ａ、１１ｂ、１１ｃ、及び１１ｄ（この例では、インタプリタと考える）を含む実行環境１０、即ちランタイムシステムを示す。実行環境は、ネットワークを介して互いに対話する数台の機械にわたって分散することができることを理解されたい。各インタプリタは、複数のシーケンシャル実行フレームにおける１つ以上のプログラムオブジェクトを実行するように動作可能である。さらに、実行環境は、ｉ）異なる通信フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信ができるように；かつ、ｉｉ）前記同一実行フレームにおけるある前記コンポーネントと別の前記コンポーネントとの間の通信を妨げるように動作可能である。
【００３８】
実行環境に入力されたプログラムに含まれる命令を実行できることに加えて、各インタプリタ１１は、実行されている計算の性能或いはプログラムオブジェクトに関するメトリクスを収集することができる。図１に示すように、関連コンテキストを有するメトリクスストリームは、各インタプリタから、プロファイル情報システムの一部を形成する共通或いは共有のデータストア１２に送信される。或いは、データストアは、それにメトリクスを取り込む若しくは「プル」するように動作可能である。この場合、例えば、各インタプリタは、そのローカルデータストアを維持するように動作可能であるが、データストア１２はこれらを集成するように動作可能である。そのため、データストア１２は、後解析、要約、及びレポート用のコンテキスト情報と一緒に、受信或いは取り込まれた測定結果を記憶する。プロファイル情報システムは、並行処理（例：複数のインタプリタインスタンスで使用される）に直面して動作しなければならないことが多く、各情報システムの結果をレポートする前に組み合わせなければならないので、インタプリタ毎に複製されているデータに対処しなければならないこともあることを理解すべきである。従って、システムは、レポートを生成し、かつ、記録された生データから種々のメトリクスを合成するように動作可能であることが好ましい。
【００３９】
図２は、全体を１１で示されている、本発明の実施形態によるインタプリタの内部作業を示す。特に、図２は、所与のアクションの実行に属する測定結果を得るためにインタプリタによって行われるアクションのシーケンスの一例を示す。
【００４０】
システム内の各インタプリタは、アクション、例えば、プログラム命令を実行すること、のシーケンスを行うように動作可能である。これらのアクションのいくつかは、時間若しくはリソースの消費を測定することが望まれる（潜在的に高次レベルの）アクション（例：方法呼出し）の開始に対応する。図２に示すように、ステップ１において、インタプリタは、プロファイルされるアクションが開始されたことを指摘し、初期測定（例：時間、又はスペース消費量、若しくはそれまでに送信されたデータサイズ）を行い、その測定（例：このアクションは入力プログラムのどの部分を表しているか）のコンテキストを指摘する。ステップ２において、インタプリタは通常どおりにアクションを行う。
【００４１】
ステップ３において、アクションがいったん完了すると、インタプリタはアクションが終了したことを指摘し、最終測定を行う。その後、インタプリタは、プロファイル情報にコンテキスト（例：オブジェクト・アイデンティティ、フレーム、入力プログラムのソースロケーション、及びインタプリタ・アイデンティティ）、及び測定結果（通常、経過時間、又はスペース要求の変化）を記録する。アクションのシーケンスは入れ子にすることができ、例えば、アクション１の開始、アクション２の開始、アクション２の終了、アクション１の終了を記録することができる。
【００４２】
インタプリタは、プログラム実行の各フレームの開始時に呼び出される。インタプリタは、実行するオブジェクトを有する間は活動状態である。実行するオブジェクトの供給が枯渇すると、非活動状態になる。実行するオブジェクトの枯渇は、一般に、フレームの終了を示している。インタプリタが呼び出されると、所与のオブジェクトを実行するのに所与のフレームでどのコンテキストを呼び出したのかが伝えられ、所与のオブジェクトは特定のポイント（例：特定命令）から実行される。オブジェクトの実行開始時と終了時に、インタプリタはプロファイリングアクションを行うことができる（例：サンプリング）。
【００４３】
図２の右手側において、「作業をする（ｄｏ  ｗｏｒｋ）」のブロックはフレーム内のオブジェクトを実行するプロセスを表し、インタプリタは「作業をする」ステップの前又は後の実行環境のプロパティを測定することができる。
【００４４】
実質的に、オブジェクトの実行内のアクションレベル、或いはフレーム内の高次レベルのオブジェクト実行毎の両方で性能測定を行うことができる。
【００４５】
要約すると、本発明を具現化するインタプリタは、ａ）修正アクション−実行アクションに加えてプロファイリングアクションを行うインタプリタ命令実装及びランタイムシステム動作を行うように、又はｂ）測定している実行アクションを変えることなくプロファイリングアクションを行うため関連ポイントで、プロファイリングアクション（特別プロファイリング命令）をアクションシーケンスに送り込むように動作可能である。各命令実装はランタイムシステムによって支持され、そのアクションはプロファイリング用に修正することもできる。
【００４６】
本発明の実施形態は、消費したプロセッサ時間、記憶用に割り当てたメモリ、及び、（分散実行環境の場合には）ネットワーク性能において、プログラムの実行についての統計を収集及びレポートする能力を提供するので有利である。従って、図１に示すランタイムシステムは、統合プロセッサ、メモリ、及びネットワークプロファイラを備えていると考えられる。
【００４７】
プロセッサプロファイラは、所与のプログラムの各方法で、プログラムの各オブジェクトで、実行の各フレームで費やしたプロセッサ時間の情報を収集するように動作可能である。各フレームの実行時間を計るように動作可能でもある。これを達成するには、タイマを開始し、停止する間の経過時間を計るため、ＯＳレベルの高精細タイマ（極めて短時間の間隔を計時可能なもの）を用いる。そのようなアクティビティを計時するプロセスには、アクティビティの開始時に開始させ、最後に停止させるタイマと、記録された結果とが必要である。
【００４８】
そのため、ランタイムは、フレームの実行開始時にタイマをスタートするように動作可能である。フレームが終了すると、タイマは停止し、経過時間が記録される。ランタイムもまた、プログラム関数及び方法からの呼び出し及びリターンの際にタイマを開始、停止する。実行時間を計算する目的で、歩留りステートメントは次のフレームが実行されるまで実行を停止させるので、関数リターンとして扱うことができる。関数呼出し及びリターンを行う実行命令は、タイミングを管理するためプロファイリングコードを挿入する適当な場所である。
【００４９】
プロファイラがマルチスレッドランタイム内で動作している場合には、プロファイラシステムがスレッドセーフであることを保証するように、注意を払う必要がある。例えば、個々の時間の集成は、２つ同時に実行したＣＳＬオブジェクトの時間を混同しないようにスレッドセーフでなければならない。統計を収集する各スレッドは、プロファイルをレポートすることができるインタプリタ内の中央データ構造に収集データを記憶する。
【００５０】
どのオブジェクトがメモリを最も消費するかを判断するために、メモリプロファイラは、並行オブジェクトの数、及び各々によって行われた割り当てをトラッキングするように動作可能である。これを行うために、メモリを割り当て、解放するルーチンは、フレーム内及びフレームにわたる両方で、オブジェクトのメモリ使用の増減を記録するため修正される。そのようなプロファイラは、フレーム内で一定時間にわたって、例えば、オブジェクトの実行中や各フレーム移行でのオブジェクトのメモリ使用量を記録する。
【００５１】
ネットワークプロファイラは、プログラムを実行する際に消費した総回線容量の情報を収集する。これは、接続毎を基準にして行い、コンポーネント間に送信された通信の種類、通信頻度、通信サイズ、及び通信の送信者並びに宛先をトラッキングするように動作可能であるのが好ましい。実装のネットワーク用コードは、これらのメトリクスを記録し、後の解析用に記憶するため修正することができる。
【００５２】
これら全ての統計は、性能概観、及びシステム性能の全態様の詳細なプロファイルの両方を提供するため、プログラマに統一フォーマットで提示できるので有利である。行われたそれぞれの測定結果は記録され、レポートに使用するのに保持することができる。或いは、メトリクスの量が大きくなりすぎた場合、集成を計算、記憶することができ、個々の測定結果は記録される。レポートは、個々のタイマ及び測定結果のそれぞれによってプログラムの実行中に蓄積されたデータセットから生成することができる。
【００５３】
本発明の実施形態は、プロファイリングコードを含むためランタイムシステムの部分の実装を修正することにより実装することができる。いくつかのプロファイリング形式、特に、タイミング及びメッセージ関連の統計において、スクリプト言語プログラムのコンパイルを、例えば、関数入力後、及び関数リターン前に、対象となるポイントでタイミング命令を発生させるように変更させることができる。
【００５４】
完全のために、以下の説明は、本発明の実施形態による実行環境の動作及び技術的実装に関するさらなる詳細を提供する。
【００５５】
各オブジェクトは、オブジェクトを生成した後に呼び出されるメインプロシージャを有している。メインプロシージャは、例えば、「次のフレーム」ステートメントを含んでもよい。オブジェクトはその状態を修正することができる。しかしながら、修正された状態は次のフレームを開始するまでその他のオブジェクトには見ることはできず、コードはオブジェクトのローカルコピーを保持する。ローカルコピーのみがオブジェクトによって修正される。この修正されたローカルコピーはフレームの終了時にオブジェクトによって戻される。実行システムは、元のフレーム用のデータストアに元のオブジェクトを保持しながら、戻され、修正されたこのオブジェクトをフレーム用に設けたデータストアに記憶する。従って、フレームｎの強要中に、フレームｎ−１を記憶し、各オブジェクトの実行結果をｎに記憶する必要がある。フレームｎ＋１が実行を開始するまで、フレームｎは読み込まれない。
【００５６】
図３は、各オブジェクトのメインプロシージャの流れ図を示している。ここで、コードフラグメントは、（１）オブジェクト生成、或いは単一の次のフレームステートメントのいずれかにより開始し、（２）流れグラフ上の全ての出口ポイントが次のフレームステートメント又はオブジェクトエンドであり、尚且つ、（３）任意のコードフラグメント内には次のフレームステートメントがない、コードセクションと定義する。各コードフラグメントは、入力が、フレームｎ−１の全参照オブジェクトと、フレームｎ−１からフレームｎへの全メッセージの状態であり、かつ、戻り値がフレームｎのオブジェクトと、フレームｎのオブジェクトからフレームｎ＋１へのメッセージの状態である関数である。各々のコードフラグメントは、実行形式に別々にコンパイルすることができるが、その他の選択肢も可能である。各コードフラグメント用の実行形式は単一の入口ポイントを含み、オブジェクトの修正バージョンを戻し、いったん次のフレームが開始すると、継続するためリファレンスをコードフラグメントに戻す。実行コードフラグメントは、次のフレームを開始するまで、その他のオブジェクトに見える任意のデータを修正することはできない。ローカル変数値などのデータをあるフレームから次のフレームに保存する順で、スタックフレームをヒープ上に生成し、ローカル変数値を記憶することができる。
【００５７】
実行はフレームに分割される。各フレームに対して、システムはシステムの全オブジェクトを通して起動し、１つ１つを実行する。オブジェクトを順不同又は並列に実行することが完全に可能である。各オブジェクトは、オブジェクト及び実行ポイントのデータ量を含む状態を有している。オブジェクトが生成されると、実行ポイントは、オブジェクトのメインプロシージャの開始時点である。オブジェクトのメインプロシージャの実行が次のフレームステートメントに到達すると、そのオブジェクトの実行はこのフレームのために停止する。フレームの終了時に、新たなオブジェクト状態が記憶される。オブジェクトコードの実行中に、メッセージを生成してもよい。これらは待ち行列を作り、対象オブジェクトに取り付けなければならない。メッセージは、次のフレーム上の対象オブジェクトによってのみ読み取ることができる。メッセージは、以下に説明するネットワークにわたって送信される必要もある。また、オブジェクトはメッセージに読み込んでもよい。メッセージは決定論的順序で読み込まなければならない。これにより、複数のシステム上で順不同かつ並列な実行をすることができる。順序はシステムによって定義することができ、ここでは説明しない。フレームの終了時に、未使用のメッセージは全て捨てることができる。全ての修正オブジェクトは修正され、フレーム番号は１だけ増える。実行は次のフレームへと継続することができる。
【００５８】
図４は、本発明による決定論的実行環境によってａからｄで表示されている４つのオブジェクトの実行を示している。フレームｎの状態は公知であり、フレームｎの実行は、ｂからａにメッセージを生成している。フレームｎ＋１では、オブジェクトｃはオブジェクトｂ及びｄからデータを読み込む。フレームｎ＋２では、オブジェクトはオブジェクトｃからデータを読み込む。図１から、同一フレームのオブジェクト間の通信がないことが分かる。メッセージの依存性はあるフレームから次のフレームまでにのみ存在するが、読み込みの依存性は現在のフレームから前フレームまでにのみ存在する。この特徴は主に、システムを並列及びネットワークにわたって実行することができることである。図は、ａがフレームｎ＋１まで計算され、ｂは無視される部分実行を示している。これは、推論的状態（真の入力データと推測の入力データの混合に基づいている）を計算するため現在の一貫したネットワーク状態を超えて実行することができることを示している。しかしながら、フレームｎ＋１におけるｂがａにメッセージを送信することが後で判明すると、フレームｎ＋１におけるａの実行は偽の可能性があり、再計算する必要があり得る。
【００５９】
各フレームに対する各オブジェクト用のコードは、前フレームにおける全参照オブジェクト値と、オブジェクトによって受信した全メッセージ値との関数として考えられる。従って、フレームｎのオブジェクトとフレームｎからフレームｎ＋１へのメッセージがシステムを通して一貫しているとすると、フレームｎ＋１の全オブジェクトの状態とフレームｎ＋１からフレームｎ＋２へのメッセージは、システムを通して一貫しているデータの関数にすぎない。そのため、初期状態及び初期メッセージが一貫しており、かつ、関数が一貫して実行される限り、オブジェクトは一貫性を保つ。言い換えると、システムは、その原因が全て知られているので決定論的である。
【００６０】
本発明の実行環境内でプログラムを実行することができるように、適切に構造化されているのが好ましい。これを行うために、以下の好適な条件を考慮して書かれているのが好ましい。これら好適な条件は、言語で書くことができることを制限し、プログラムコードがネットワークにわたって安全に分散できることを保証する。好適な条件は以下のものである。
（１）プログラムは、疎結合の独立計算に分割されるように書かれており、各計算は、任意のある時間での実行状態においてゼロ以上のインスタンスを有する。
（２）各計算インスタンスは、挙動（コード）と状態（データ及び実行ポイント）を有する。
（３）実行は「フレーム」に分割される。
（４）各フレームにおいて、システムは、システムの全計算を通して起動し、「次のフレーム」ステートメントに達するまでこれらのコードを実行する。
（５）計算間の通信に関して、計算はその他の計算へのリファレンスを含むことができ、その他の計算の状態を読み込むことを含むことができ、これらのローカル状態を修正することができ、その他の計算からメッセージを受信することができ、かつ、その他の計算にメッセージを送信することができる。
（６）計算はその他の計算を直接修正できないが、計算にメッセージを送信し、計算状態を読み込むことだけできる。
（７）計算がその状態を変えると、変更はそれ自体に直ちに見えるようになるが、次のフレームまでその他の計算には見えない。
（８）計算はその他の計算を生成することができる。その他の計算は次のフレームが始まると存在する。理解しやすいように、以下の本文はオブジェクトとして計算を指すものとする。しかしながら、その他の形式の計算を同様に使用できることが理解されるであろう。
【００６１】
本発明をいくつかの実施形態及び例として記載及び説明してきたが、本発明が、本発明の原理から逸脱せずに種々の方法で修正、具現化、精緻化、又は応用できることは明らかであろう。本発明は、携帯記憶媒体に記憶され、デジタル通信、又はその他の伝送媒体によって送信され、或いは、コンピュータメモリに記憶されるソフトウェアプログラム及びデータ構造に実装することができる。そのようなプログラム及びデータ構造は、本発明を具現化する方法を行い、かつ、本明細書に記載の能力を有する機械、又は装置の一部として動作するようにコンピュータ上で実行することができる。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施形態を示す。
【図２】本発明の実施形態によるインタプリタの内部作業を示す。
【図３】本発明の原理による実行手順を示す流れ図である。
【図４】プログラム実行の図である。
【図１】
2009146408.tif 000003
【図２】
2009146408.tif 000004
【図３】
2009146408.tif 000005
【図４】
2009146408.tif 000006