JP2023538938A - 共用可能なアプリケーションスナップショットの為のコンパイル化戦略 - Google Patents

共用可能なアプリケーションスナップショットの為のコンパイル化戦略 Download PDF

Info

Publication number
JP2023538938A
JP2023538938A JP2023513268A JP2023513268A JP2023538938A JP 2023538938 A JP2023538938 A JP 2023538938A JP 2023513268 A JP2023513268 A JP 2023513268A JP 2023513268 A JP2023513268 A JP 2023513268A JP 2023538938 A JP2023538938 A JP 2023538938A
Authority
JP
Japan
Prior art keywords
snapshot
computer
data
application
program instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023513268A
Other languages
English (en)
Inventor
サンダーソン,ヴィジャイ
グラハム ストゥードレイ,マーク
ジェームス クレイク,アンドリュー
ハイディンガ,ダニエル
メーラ,アシュトシュ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2023538938A publication Critical patent/JP2023538938A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Retry When Errors Occur (AREA)

Abstract

Figure 2023538938000001
メソッドリストが、スナップショットポイントにおける、プロセス仮想マシン内で現在実行中のアプリケーションの為に構築され、前記メソッドリストは、前記スナップショットポイントの後に前記現在実行中のアプリケーションによって実行されることができる複数のメソッドの1組を含み、前記スナップショットポイントは、スナップショットプロセスがトリガーされたときに前記現在実行中のアプリケーションの実行状態を含む。該スナップショットポイントに到達する前に収集された、該現在実行中のアプリケーションのプロファイリングデータが、指定された保管場所にコミットされる。前記プロファイリングデータ及び前記プロセス仮想マシンのジャストインタイムコンパイラを使用して、前記メソッドリスト中の1つのメソッドがコンパイリングされる。前記スナップショットデータは、前記スナップショットポイントにおける前記現在実行中のアプリケーションの前記実行状態のデータを含み、前記スナップショットデータは前記コンパイリングの結果を含む。
【選択図】図1

Description

本発明は、一般的に、アプリケーションコンパイルの為の方法、システム、及びコンピュータプログラム製品に関する。より詳細には、本発明は、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の方法、システム、及びコンピュータプログラム製品に関する。
プロセス仮想マシン(VM:virtual machine)は、言語ランタイム、マネージド言語ランタイム、アプリケーション仮想マシン又はマネージドランタイム環境とも呼ばれ、ホストオペレーティングシステムにおいてアプリケーションとして実行される。プロセスVMは、プラットフォーム非依存環境であって、その中で実行するアプリケーションから基盤となるハードウェア及びオペレーティングシステムの詳細を隠す該プラットフォーム非依存環境を提供して、異なる設定のプラットフォームにおいてアプリケーションが変更されること無しに実行することを可能にする。
プロセスVM環境におけるアプリケーション実行の為に、幾つかのオプションが利用可能である。最初に、該アプリケーションのソースコード(高級言語、例えばJava、における)がプロセッサ固有の命令の実行可能ファイル(ネイティブ実行可能、ネイティブイメージ又はネイティブマシンのコードとも呼ばれる)にコンパイされることができる(Javaは、米国及びその他の国におけるOracle America,Inc.の登録商標である)。ランタイム時に、該環境が実行ファイルをメモリ内にロードし、そして該命令を実行する。実行ファイルはランタイム時で追加の処理を必要としないが、その静的な性質はプログラムコードがデータから分離されなければならないことを意味し、並びに他の動的な言語機能がランタイム時のサポートを必要とし、パフォーマンスのペナルティを結果として生じる。また、静的な実行ファイルは予期しないイベントを処理する為のコードを含んでいる為に、追加のメモリ領域を占有する滅多に実行されないコードを含む。
アプリケーション実行の他のオプションは、該アプリケーションのソースコードをバイトコードとして知られている中間表現にコンパイルすることである。バイトコードは、特定のプロセッサ又はプロセッサファミリの為のマシンコードに似ているが、プロセッサ固有でない。次に、アプリケーションのバイトコードを実行する為に、プロセスVMは一度に1つ又は幾つかのバイトコード命令を、対応するプロセッサ固有の命令に変換するところのインタプリタを使用し、次に、それを特定のプロセッサが実行する。インタプリタプロセスは実行時間を追加する為に、インタプリタされたコードは静的な実行ファイルほど機能しないが、状況の変化により適応し並びに不要なコード処理を回避する。
第3のオプションはジャストインタイム(JIT:just-in-time)コンパイラであり、該ジャストインタイムコンパイラは、アプリケーションが実行中にバイトコードの一部をプロセッサ固有の命令(マシンコードとも呼ばれる)に変換し、再使用の為にコンパイル結果を保存する。コンパイルは、ファイル単位、メソッド単位、又はコードの別の単位で行われることができる。メソッドはプロシージャ、サブルーチン又は関数とも呼ばれ、該メソッドがコールされる場合にのみ実行されるコードのブロックである。コンパイルプロセス自体が時間を要する為に、ほとんどのプロセスVMは、使用されようとしているコードのみをコンパイリングし(従って、ジャストインタイムコンパイルという語がある)、最も頻繁に使用されるコードのみをコンパイリングし(そして、コードの残りをインタプリタし)、又はこれらの技術を組み合わせることによって、全体としてのアプリケーションパフォーマンスを向上させる。幾つかのプロセスVMは、アプリケーションの実行中にプロファイリング情報を収集し、そして、プロファイリング情報を使用して、コードの一部をコンパイルするかの判断と、結果として得られたコンパイル後のコードを改良するかの判断の両方に更に利用する。
プロセスVMの現在知られている2つの例は、共通言語ランタイム(CLR:Common Language Runtime)及びJava仮想マシン(JVM:Java Virtual Machine)である。CLR、すなわちMicrosoft .NETフレームワークの仮想マシンコンポーネント、は、複数の異なるソースコード言語で書かれていることができる.NETプログラムの実行を管理する(.NETは、米国及びその他の国におけるMicrosoft Corporationの登録商標である)。Java仮想マシン(JVM)は、Java言語で書かれているソースコード並びに他のサポートされるソースコード言語をサポートするプロセスVMである。
スナップショットポイントは、実行中のアプリケーションの実行フローにおける或るポイントであり、該スナップショットポイントで、実行状態がプロセスVMの別のインスタンスにおいてリストアされる為に格納されることができる。スナップショットは、該スナップショットポイントでのプロセスVM状態のデータであり、該プロセスVMの別のインスタンスにおける該スナップショットポイントから実行を再開することに関連するデータを含む。例えば、スナップショットは典型的には、該アプリケーションの一部又は全部のJITコンパイルされたコード、該スナップショットポイントまでロードされたクラス、及び該スナップショットポイントまでのクラスの為のイニシャライザー(initializer)の一部又は全部を実行することによって取り込まれているVMのヒープ(VM's heap)を含む。該スナップショットが一旦保存されると、新しいインスタンスにおいて必要なデータ構造を再作成し及び再投入することによって、該スナップショットポイントから実行を再開する為に、該スナップショットは別のプロセスVMインスタンスにおいて使用されることができる。
例示的な実施態様は、方法、システム及びコンピュータプログラム製品を提供する。1つの実施態様は、スナップショットポイントにおける、プロセス仮想マシン内で現在実行中のアプリケーションの為に、メソッドリストを構築する方法を含み、ここで、前記メソッドリストは、前記スナップショットポイントの後に前記現在実行中のアプリケーションによって実行されることができる複数のメソッドの1組を含み、前記スナップショットポイントは、スナップショットプロセスがトリガーされたときに前記現在実行中のアプリケーションの実行状態を含む。1つの実施態様は、前記現在実行中のアプリケーションのプロファイリングデータを、指定された保管場所にコミットし、ここで、前記プロファイリングデータは前記スナップショットポイントに到達する前に収集される。1つの実施態様は、前記プロファイリングデータ及び前記プロセス仮想マシンのジャストインタイムコンパイラを使用して、前記メソッドリスト中の1つのメソッドをコンパイリングする。1つの実施態様は、スナップショットデータを格納し、ここで、前記スナップショットデータは、前記スナップショットポイントにおける前記現在実行中のアプリケーションの前記実行状態のデータを含み、前記スナップショットデータは前記コンパイリングの結果を含む。
1つの実施態様は、コンピュータ使用可能なプログラム製品を含む。該コンピュータ使用可能なプログラム製品は、1以上のコンピュータ可読記憶デバイス、及び前記1以上のコンピュータ可読記憶デバイスのうちの少なくとも1つ上に格納された複数のプログラム命令を備えている。
1つの実施態様は、コンピュータシステムを備えている。該コンピュータシステムは、1以上のプロセッサ、1以上のコンピュータ可読メモリ及び1以上のコンピュータ可読記憶デバイス、並びに前記1以上のコンピュータ可読メモリのうちの少なくとも1つを介して、前記1以上のプロセッサのうちの少なくとも1つによって実行する為に前記1以上の記憶デバイスのうちの少なくとも1つ上に格納された複数のプログラム命令を備えている。
本発明の特徴であると考えられている或る新規な特徴は、添付の特許請求の範囲に記載されている。しかしながら、本発明それ自体、並びに使用の好ましい態様、それらの更なる目的及び利点は、添付の図面と併せて読む場合に、例示的な実施態様の以下の詳細な説明を参照することによって最もよく理解されるであろう。
図1は、例示的な実施態様が実装されうるデータ処理システムのネットワークのブロック図を図示する。 図2は、例示的な実施態様が実装されうるデータ処理システムのブロック図を図示する。 図3は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的な構成のブロック図を図示する。 図4は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的な構成のブロック図を図示する。 図5は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の例を図示する。 図6は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。 図7は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。 図8は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。 図9は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。 図10は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的なプロセスのフローチャート図を図示する。 図11は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的なプロセスのフローチャート図を図示する。 図12は、本発明の1つの実施態様に従うクラウドコンピューティング環境を図示する。 図13は、本発明の1つの実施態様に従う抽象化モデル層を図示する。
例示的な実施態様は、現代のクラウドコンピューティングにおいて、サーバが典型的には、ユーザの要求に応える為に必要でない場合にはサービスから除去され、そして、再び必要とされる場合にサービスに戻されることを認識する。しかしながら、プロセスVM及びアプリケーションを起動から完全なパフォーマンスレベルにする為に必要な起動時間は、需要急増に対応する為に利用可能な時間よりも長くなる可能性があり、予想よりも遅いクライアントサービスを結果として生じ、サービスプロバイダとそのユーザとの間のサービスレベル合意に違反する。
例示的な実施態様は、新しいサーバインスタンスを迅速にインスタンス化する問題に対する現在利用可能な1つの解決策が、幾つかの起動時間及びメモリフットプリント最適化を含みながら、アプリケーションコードを静的なネイティブ実行可能ファイル内にコンパイルすることであることを認識する。この技術の一例は、GraalVMネイティブイメージ(GraalVM Native Image)であり、該技術において、ランタイムコンポーネント(例えば、デオプティマイザー、ガベージコレクター、スレッドスケジューリング等)を包含するVM、サブストレイトVM(Substrate VM)においてネイティブイメージが実行される(GraalVMは、米国及びその他の国におけるOracle International Corporationの登録商標である)。結果として得られるプログラムは、Java VMと比較して、より速い起動時間並びに実行時のメモリのより低いオーバーヘッドを有する。しかしながら、サブストレイトVMは、Javaプログラミング言語のサブセットしかサポートすることができない。その結果、従来のサーバベースモデルを使用してサブストレイトVM内に構築された既存のアプリケーションを実装することは、大幅なコード変更を必要としうる。
例示的な実施態様は、新しいサーバインスタンスを迅速にインスタンス化する問題に対する改善された解決策が、既存のアプリケーションに対する変更を必要とすること無しに、スナップショット機能を使用して実装されることができることを認識する。特に、プロセスVM及びアプリケーションは、インスタンス化され且つ所望の実行ポイントまで実行され、次に、スナップショットが取られる。次に、該アプリケーションの追加インスタンスを作成する為に、保存されたスナップショットが新しいインスタンスにおいてリストアされ、元の初期化プロセスをスキップする。また、1つのスナップショットから複数のインスタンスが並行して作成されることができ、更なる時間を節約する。
例示的な実施態様はまた、アプリケーション実行内の適切な時間にスナップショットを実行することが、改善された解決策の有効性において重要であることを認識する。該スナップショットがアプリケーション実行内で遅く実行される場合、オープンリソース、例えばファイル及びネットワーク接続、は、スナップショットプロセスにおいて捕捉されない可能性があり、不正確なリストアを結果として生じる。しかしながら、スナップショットがクライアント要求の全負荷の下に或る故に共通のアプリケーションコードパスを実行する為に十分な時間実行されていた場合に、該スナップショットは、それらの共通のコードパスのコードを既にコンパイルしており、並びに完全なパフォーマンスの為にアプリケーションを最適化する為に他の調整を行っている。逆に、該スナップショットがアプリケーション実行における初期に実行された場合、オープンリソースによる不正確なスナップショットはリスクではないが、アプリケーションが一旦リストアされると、あまりにも多くの追加コードが実行される必要があり、新しいインスタンスがクライアント要求に応答することができるようになるまでの時間が長くなる。加えて、まだ実行されていないコードはまた、プロファイリング情報を使用してプロファイルされ且つ最適化される機会がそれまでにない為に、該アプリケーションが最適化されたパフォーマンスレベルに到達するまでに必要とされる時間が長くなる。
例示的な実施態様は、現在知られている他の解決策が、プロファイリング情報を使用しないか、又は後続のコンパイルの為のプロファイリング情報を生成する為に該アプリケーションの以前のトレーニングタイプの実行からプロファイリング情報を使用するかのいずれかであることを認識する。(例えば、C又はC++のソースコードからネイティブの実行ファイルを生成する為の)スタティックコンパイラは、しばしばこの技術を使用するが、それは、ユーザが実行する為に時間がほとんどかからない別のトレーニングを必要とする。
例示的な実施態様はまた、該スナップショットが、共通のハードウェア上で実行されるプロセスVMの複数のインスタンスにわたって可能な限り多くのコードを共有することが可能であるべきであることを認識する。複数のインスタンスにわたってコードを共有することにより、複数のインスタンスの1組の総メモリ要件が低減する。しかしながら、該インスタンスは全て、共用可能性を考慮して構築された共通のスナップショットからリストアされなければならない。
従って、例示的な実施態様は、コード共有を維持しながらアプリケーションの起動時間及びパフォーマンスを最適化する、スナップショットベースのアプリケーションインスタンス化解決策に対する改良の為の必要性があることを認識する。例示的な実施態様は、現在利用可能なツール又は解決策が、これらのニーズの為に対処しないか、又はこれらのニーズに対して適切なソリューションを提供しないことを認識する。本発明を説明する為に使用される例示的な実施態様は一般的に、共用可能なアプリケーションスナップショットの為のコンパイル化戦略に関連する上述された問題及び他の問題に対処し且つ解決する。
1つの実施態様は、ソフトウェアアプリケーションとして実装することができる。1つの実施態様を実装するアプリケーションは、既存のプロセスVMスナップショットシステムの修正として、既存のプロセスVMスナップショットシステムと連動して動作する別のアプリケーションとして、スタンドアロンアプリケーションとして、又はそれらの幾つかの組み合わせとして構成されることができる。
特に、幾つかの例示的な実施態様は、スナップショットポイントにおけるプロセスVM内で現在実行中のアプリケーションの為に、スナップショットポイント後に実行されることができるメソッドリストを構築し、該アプリケーションの収集されたプロファイリングデータを指定された保管場所にコミットし、該プロファイリングデータ及びJITコンパイラを使用して該メソッドをコンパイルし、そして該コンパイルされたメソッドを含むスナップショットデータを格納する方法を提供する。
1つの実施態様は、プロセスVM内でアプリケーションを実行することを開始し、該プロセスVMは何らかのアプリケーションコードをコンパイルすることを防止するように設定される。その代わりに、アプリケーションコードは、既存のプロセスVMの機能を使用してインタプリタされるので、コンパイルされたコードは一般的に、インタプリタされたコードよりも速く実行される為、コンパイルされることの代わりにインタプリタされるべきコードを強制することは、スナップショットポイントに達するまでアプリケーションスループットにペナルティを生じさせる可能性がある。しかしながら、スナップショットポイントまでコンパイルを遅らせることは、アプリケーションコードのどの部分がコンパイルされた形態でスナップショットに含まれるかを制御することを提供し、該スナップショットの間及び該スナップショットの後に使用されることができるプロファイリングデータを最大化することができる。スナップショットのコンテンツを制御することは、スナップショットからリストアされたアプリケーションインスタンスにおけるコード共有を維持しながら、アプリケーションの起動時間及びパフォーマンスを最適化する為の調整を提供する。1つの実施態様において、コンパイルの防止は、通常のJITコンパイラヒューリスティックを変更する特別なスナップショットモードにおいてプロセスVMを開始することによって実装され、該プロファイリングデータに基づくコンパイル決定を防止しながら、プロファイリングデータ収集を可能にする。
該アプリケーションがスナップショットポイントの前のプロセスVM内で実行される場合に、1つの実施態様は、該アプリケーションのプロファイリングデータを収集する。該プロファイリングデータの非限定的な幾つかの例は、条件分岐の場合、該条件が真である頻度と偽である頻度、仮想コールの場合、該コールのレシーバとして使用されているオブジェクトのクラスタイプを包含する。両方のタイプのプロファイリングデータが、可能性の高い実行パスを予測することによって、JITコンパイラがコンパイルされたコードを最適化するのに役立つ。1つの実施態様において、プロファイリングデータは1以上のバッファ内に蓄積される。バッファが容量に近づく場合に、又は所定の時間間隔で、1つの実施態様は、JITコンパイラによって使用する為に、バッファリングされたデータを所定の記憶場所にフラッシュする又はコミットする。1つの実施態様において、該所定の記憶場所は、JITコンパイラのハッシュテーブルである。他のタイプのデータ構造、及びプロセスVM内の他の記憶場所がまた、例示的な実施態様の範囲内で可能であり、並びに企図される。
アプリケーション実行内の或るポイントが該スナップショットポイントとして選択され、並びに1つの実施態様は、アプリケーション実行が該スナップショットポイントに到達したときにトリガーされるようにスナップショットハンドラーを構成する。1つの実施態様は、プロセスVM初期化の間に、例えばVMスタートアップコマンド中のパラメータとして、又は構成ファイル中において、選択されたスナップショットポイントを受け取る。別の実施態様において、実行中のアプリケーション内からアプリケーションプログラムインタフェース(API:application program interface)を介して、スナップショットコマンドを呼び出す(invoke)ことにより、ユーザがスナップショットポイントを選択することを可能にする。別の実施態様において、該プロセスVMは、それ自体の内部ヒューリスティックを使用してスナップショットポイントを選択する。例えば、実行中のアプリケーションの新しいクラスのロード率が閾値である率を下回ってしまった場合に、プロセスVMはスナップショットを呼び出し(invoke)得、これは、該アプリケーションが立ち上げを完了し、スナップショットされるべきである安定したパフォーマンス状態に到達したことを示す。別の例として、アプリケーションが代表的な作業を処理し始めたとき、例えば、サーバアプリケーションが少なくとも1つのクライアント要求を処理したとき、プロセスVMはスナップショットを呼び出し(invoke)うる。1つの実施態様は、所望のポイントでスナップショットハンドラーをトリガーする為に、現在知られている任意の技術を使用する。
該スナップショットハンドラーが該スナップショットポイントでトリガーされる場合に、1つの実施態様は、メソッドリストを構築する。該メソッドリストは、該スナップショットポイントの後の現在実行中のアプリケーションによって実行されることが可能である複数のメソッドの1組を含む。該メソッドリストを構築する為に、1つの実施態様は、アプリケーションのアクティブな(すなわち、該スナップショットポイントが到達したときにコールされたが、実行をまだ完了していない)スレッドのコールスタックを参照する。コールスタックは、コンピュータプログラムのアクティブなメソッドに関する情報を格納するデータ構造であり、各アクティブなメソッドが実行を終了するときに戻るべきポイントを含む。別の実施態様において、該メソッドリストは、該スナップショットポイントの後の現在実行中のアプリケーションによって実行されることができるコードユニットのリストを含み、この場合、該コードユニットはメソッドである必要はない。
特に、該メソッドリストを構築する為に、該メソッドリスト内のコードユニットがメソッドである場合、1つの実施態様は、スナップショットポイントに到達したときに現在実行されていたメソッドを選択する。該実施態様は、該選択されたメソッドを該メソッドリストに追加し、そして、該選択されたメソッドが他のメソッドをコールすることができるかを判断する。もしそうであれば、該実施態様は、新しいメソッドを該メソッドリストに追加し、そして、該新しいメソッドそれ自体が他のメソッドをコールすることができるかを判断する。該実施態様は、この様式において継続し、現在実行中のメソッドからコールされることができる全てのメソッドを蓄積する。該スナップショットポイントに到達したときに、別のメソッドが該コールスタック中に現在存在している(すなわち、該メソッドが実行中のメソッドをコールしている)場合、該実施態様はそのメソッドで処理を繰り返す。加えて、該アプリケーションの複数のスレッドが実行されていた場合、該実施態様は、別のスレッドの為に該処理を繰り返す。該メソッドリスト中に含める為に、全てのスレッドからの全てのメソッドが解析される必要がないことに留意されたい。代わりに、1つの実施態様が特定のメソッド又はメソッドのグループが非常に頻繁に実行されることを決定する為の手段を有する場合、そのようなメソッドをコンパイリングすることは、アプリケーションがリストアされたときに比較的少ないパフォーマンス改善と引き換えに、結果として生じるスナップショットを不必要に肥大化させうる。従って、結果として得られるメソッドリストは、現在実行中の何らかのメソッド、並びに元のVMにおいて又は該スナップショットからリストアされた新しいインスタンスのいずれかにおいて現在実行中のメソッドがスナップショットポイントの後に実行が継続するときにコールすることができる何らかのメソッドを含む。該メソッドリストがメソッドのみではないコードユニットを含む1つの実施態様において、該メソッドリストを構築する為に、1つの実施態様は、現在実行中のアプリケーションを解析して、該スナップショットポイントから実行されることができるコードユニットとともに、現在実行中のコードユニットを該メソッドリストに追加する。
1つの実施態様は、現在知られている任意のデータ構造において該メソッドリストを維持する。該メソッドリストの為のデータ構造の1つの非限定的な例は、静的コールグラフである。静的コールグラフは、コンピュータプログラムにおける複数のメソッドの間のコーリング関係を表す制御フローグラフである。グラフ中の各ノードはメソッドを表し、各エッジ(f,g)はメソッドfがメソッドgをコールすることを示し、並びに該グラフにおけるサイクルは再帰的なメソッドコールを示す。
メソッドリストの構築の間、又は1つの実施態様が該メソッドリストを構築することを完了した後、1つの実施態様は、或るメソッドが該メソッドリストから削除されるべきであるか(又は、最初に追加されるべきでないか)を決定する。1つの実施態様は、或るメソッドが該メソッドリストからフィルタリングされるべきか、又は削除されるべきかを決定する為に、1以上の基準を使用する。或るメソッドが削除されるべきかを決定する為の基準の非限定的な1つの例は、該メソッドの実行の蓋然性の解析に基づく。例えば、或る条件が真である場合にのみメソッドが実行される場合、該条件が真であることは決してないか、又は真であることの閾値未満の蓋然性を有する場合、このメソッドは該メソッドリストにおいて必要でなく、将来のアプリケーションパフォーマンスに影響を与えること無しに削除されることができる。同様に、例外時にのみコールされるメソッドがまた、コンパイルされる必要がない場合がある。別の例として、そのコールするメソッドが既にコンパイルされている為に、全てのそのコールメソッドの一部となっているメソッド(例えば、インラインコードとして組み込まれたメソッド)が個別にコンパイルされる必要がない場合がある。別の例として、他のアプリケーションによって使用されるべきアプリケーションフレームワークの為にスナップショットを準備する場合に、幾つかのメソッドはフレームワークの正しい層内に配置される必要がある場合があるので、異なる層に対して適するメソッドは該メソッドリストから削除されうる。
該スナップショットハンドラーが該スナップショットポイントでトリガーされるときに、1つの実施態様は、バッファリングされたプロファイリングデータを、JITコンパイラの所定の記憶場所にコミットする。該スナップショットポイントでバッファリングされたプロファイリングデータをコミットすることにより、JITコンパイラによって使用されることができるプロファイリングデータの量が増加する。例えば、1つの実施態様を使用して行われた実験において、スナップショットポイントでバッファリングされたプロファイリングデータをコミットすることにより、JITコンパイラによって使用されることができるプロファイリングデータの量が2倍になった。
1つの実施態様は、JITコンパイラを使用して、所定の記憶場所におけるプロファイリングデータを使用して、メソッドリスト内の1以上のメソッドをコンパイルする。1つの実施態様は、リストア後に結果として得られたスナップショットが複数のプロセスVMインスタンスの間で共用可能であるように、読み取り専用モードでコードをコンパイルする。出来るだけ多くのプロファイリングデータを使用してコンパイルを実行することにより、スナップショットを撮る前にアプリケーションが完全なパフォーマンスレベルに達成することを待つこと無しに、該リストア後のアプリケーションスループットを改善する。特に、スナップショットポイントでは、幾つかのメソッドが十分に実行されて優れたプロファイリングを蓄積している為に、結果として得られるコンパイルはそれに応じて優れたスループットを有するであろう。幾つかのメソッドは、優れたプロファイリングを蓄積する為に十分に実行されておらず、結果として得られるコンパイルは、それに応じて平凡なスループットを有するであろう。しかしながら、該スナップショットプロセスは、これらのメソッドが通常の操作でコンパイルされる為に十分に実行されるのを待つことによって遅れること無しに、これらのメソッドが、該アプリケーションが該スナップショットからリストアされた後に、改善されたスループットの為に常に再コンパイルされることができる。加えて、現在利用可能な幾つかの解決策の場合と同様に、プロファイリング情報が全く使用されていない場合よりも、全体的なスループットは依然として高い。加えて、全体的なスループットは、トレーニングタイプアプリケーションの複数の実行を必要とする解決策に匹敵するが、それら複数の実行を実行する必要はない。
別の実施態様は、JITコンパイラを使用して、該メソッドリスト内の1以上のメソッドの異なる最適化バージョンをコンパイルし、アプリケーションスループットを改善し及びリストア時のランプアップ(ramp-up)を低減する為にコンパイル時間とスナップショットサイズを交換する。別の実施態様は、JITコンパイラを使用して、該メソッドリスト内の異なる2つのバージョンのメソッドをコンパイルし(ここで、1つのメソッドは通常通りに最適化され、並びにもう1つのメソッドはデバッグサポートを有効にしてコンパイルされる)、リストア後に単一のスナップショットを使用して通常の操作及びデバッグを可能にする。
1つの実施態様が該メソッドを一旦コンパイルすると、該実施態様はコンパイルの結果を格納する。1つの実施態様は、メソッド毎に1つのコンパイル結果のみを格納する。別の実施態様において、該スナップショット内にメソッドの2つ以上の異なる最適化されたバージョンを格納し、アプリケーションが実行されている状態で再コンパイルすること無しに、異なる最適化をポストレストア(post-restore)に組み込むことを可能にする。別の実施態様は、通常通りに最適化されたコンパイル結果と、デバッグサポートが有効なコンパイル結果との両方を格納し、リストア後に単一のスナップショットを使用して通常の動作及びデバッグを可能にする。1つの実施態様また、追加のスナップショットデータを格納する。追加のスナップショットデータのうちの幾つかの非限定的な例は、該スナップショットポイントまでロードされたクラスと、該スナップショットポイントまでプログラムによってロードされたクラスの為のイニシャライザーの一部又は全部を実行することによって取り込まれているVMヒープ(VM heap)である。
アプリケーションがスナップショットからリストアされる場合、アプリケーションプロファイリング及びJITコンパイルが、通常実行中のプロセスVMと同様に処理される。新しいJITコンパイルは、スナップショットの間に元々コンパイルされていた幾つかのパフォーマンス上重要なメソッドの再コンパイルと、リストア後にロードされたクラスからのメソッドの初期コンパイルとの組み合わせであると予想される。その結果、該リストアされたアプリケーションは、スナップショットを使用しない場合よりも短い起動時間で、最高のパフォーマンスに到達する。
1つの実施態様はまた、アプリケーションを通常通りに実行しながら(すなわち、現在利用可能な幾つかのソリューションの言語制約無しに)、並びに既に収集されたプロファイリング情報の恩恵を受けながら、該スナップショットポイントにおけるネイティブイメージを生成する為に使用可能である。結果として得られるネイティブイメージは、リストアされたアプリケーションよりも小さく、しかし、リストア後に通常通りに実行されるJITコンパイルを含むことによって得られる改善されたスループットを有しないだろう。加えて、該スナップショットポイントから実行することができる全てのメソッド又は他のコードユニットがコンパイルされる必要がある。これは、インタプリタ又はJITコンパイラがネイティブイメージ中に存在せず、且つ追加の実行可能なコードを生成する為に利用できない為である。
本明細書に記載された共用可能なアプリケーションスナップショットの為のコンパイル化戦略の様式は、プロセスVMにおいてスナップショットすることに関連する技術分野の現在利用可能なメソッドにおいて利用できない。本明細書において記載されている1つの実施態様の方法は、デバイス又はデータ処理システム上で実行する為に実装される場合、スナップショットポイントにおける、プロセスVM内で現在実行中のアプリケーションの為に、スナップショットポイントの後に実行されることができるメソッドリストを構築し、該アプリケーションの収集されたプロファイリングデータを指定された格納場所にコミットし、該プロファイリングデータ及びJITコンパイラを使用して、該メソッドをコンパイルし、該コンパイルされたメソッドを含むスナップショットを格納する際に、そのデバイス又はデータ処理システムの機能の実質的進歩を含む。
例示的な実施態様は、或るタイプのプロセスVM、ソースコード、バイトコード、機械命令、コンピュータ言語構造、メソッドリスト、プロファイリングデータ、予測、閾値、測定、デバイス、データ処理システム、環境、コンポーネント、及びアプリケーションに関してのみ例として記載されている。これら及び他の類似のアーティファクト(artifact)の任意の具体的な明示は、本発明を限定することを意図されていない。これら及び他の類似のアーティファクトの任意の好適な明示は、例示的な実施態様の範囲内で選択されることができる。
その上、例示的な実施態様は、任意のタイプのデータ、データソース、又はデータネットワークを介したデータソースへのアクセスに関して実装されうる。任意のタイプのデータ記憶デバイスは、本発明の範囲内で、データ処理システムにおいてローカルに又はデータネットワークを介してのいずれかで、本発明の1つの実施態様にデータを提供しうる。1つの実施態様がモバイルデバイスを使用して記載されている場合、該モバイルデバイスと共に使用されるのに適した任意のタイプのデータ記憶デバイスは、例示的な実施態様の範囲内で、モバイルデバイスにおいてローカルに又はデータネットワークを介してのいずれかで、そのような実施態様にデータを提供しうる。
例示的な実施態様は、特定のコード、設計、アーキテクチャ、プロトコル、レイアウト、回路図、及びツールを例としてのみ使用して記載されており、例示的な実施態様を限定するものでない。その上、該例示的な実施態様は、記載の明確化の為に、特定のソフトウェア、ツール、及びデータ処理環境を例としてのみ使用して記載されている場合がある。該例示的な実施態様は、他の同等の又は類似の目的の構造、システム、アプリケーション、又はアーキテクチャと組み合わせて使用されうる。例えば、他の比較可能なモバイルデバイス、構造、システム、アプリケーション、又はその為のアーキテクチャが、本発明の範囲内で、本発明のそのような実施態様と組み合わせて使用されうる。例示的な実施態様は、ハードウェア、ソフトウェア、又はそれらの組み合わせにおいて実装されうる。
本開示の例は、説明を明確にする為にのみ使用され、例示的な実施態様を限定するものでない。追加のデータ、動作、アクション、タスク、アクティビティ、及び操作が本開示から考えられ、同じものが例示的な実施態様の範囲内で企図される。
本明細書において記載された任意の利点は、例示に過ぎず、例示的な実施態様を限定することを意図されていない。追加の又は異なる利点が、特定の例示的な実施態様によって実現されうる。その上、特定の例示的な実施態様は、上記に列挙した利点の一部、全てを有する場合もあり、又は全く有しない場合もある。
本開示はクラウドコンピューティングに関する詳細な説明を含むが、本明細書に列挙される教示の実装はクラウドコンピューティング環境に限定されないことが理解されるべきである。むしろ、本発明の実施態様は、現在知られている又は後に開発される任意の他のタイプのコンピューティング環境と組み合わされて実装されることができる。
クラウドコンピューティングは、最小限の管理労力又はサービスのプロバイダとの相互作用で迅速にプロビジョニングされ且つ解放されることができる構成可能なコンピューティングリソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理(processing)、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの便利なオンデマンドネットワークアクセスを可能にする為のサービス提供のモデルである。このクラウドモデルは、少なくとも5つの特徴、少なくとも3つのサービスモデル、及び少なくとも4つのデプロイメントモデル(deployment model)を含みうる。
特徴は下記の通りである。
オンデマンドセルフサービス(On-demand self-service):クラウドコンシューマ(cloud consumer)は、サービスのプロバイダとのヒューマンインターラクション(human interaction)を必要とせずに、必要に応じて、コンピューティング機能、例えばサーバ時間及びネットワークストレージ、を一方的にプロビジョニングすることができる。
ブロードネットワークアクセス:機能は、ネットワークを介して利用可能であり、及び異種のシン(thin)クライアント・プラットフォーム又はシック(thick)クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、及びPDA)による使用を促進する標準的なメカニズムを介してアクセスされる。
リソースのプーリング:プロバイダのコンピューティングリソースは、マルチテナントモデルを使用して複数のコンシューマにサービスを提供する為にプールされ、及び様々な物理リソースと仮想リソースが需要に従って動的に割り当てられ及び再割り当てされる。コンシューマは一般的に、提供されたリソースの正確な場所についての制御又は知識を有していないが、より高いレベルの抽象化での場所(例えば、国、州又はデータセンター)を特定できうるという点で、場所に依存しないといえる。
迅速な順応性:機能は、迅速且つ弾力的にプロビジョニングされ、場合によっては自動的に、迅速にスケールアウトされ、迅速にリリースされて迅速にスケールインされうる。コンシューマにとって、プロビジョニングに利用可能な機能はしばしば、無制限であり及びいつでも任意の量で購入されることができる。
測定されたサービス:クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅、及びアクティブなユーザアカウント)に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御し及び最適化する。リソース使用は監視され、制御され、及び報告されることができ、利用されるサービスのプロバイダ及びコンシューマの両方についての透明性を提供することができる。
サービスモデルは下記の通りである。
サービスとしてのソフトウェア(SaaS:Software as a Service):クラウドインフラストラクチャにおいて実行しているプロバイダのアプリケーションを使用する為に、コンシューマに提供される機能である。該アプリケーションは、シン・クライアント・インタフェース、例えばウェブブラウザ(例えば、ウェブベースの電子メール)、を通じて、様々なクライアント・装置からアクセス可能である。該コンシューマは、制限されたユーザ固有のアプリケーション構成設定のありうる例外として、基礎をなすクラウドインフラストラクチャ、例えば、ネットワーク、サーバ、オペレーティングシステム、ストレージ、又は個々のアプリケーション機能さえも包含する基礎をなすクラウドインフラストラクチャ、を管理又は制御しない。
サービスとしてのプラットフォーム(PaaS:Platform as a Service):プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウドインフラストラクチャ上にデプロイする為に、該コンシューマに提供される機能である。該コンシューマは、基礎をなすクラウドインフラストラクチャ、例えば、ネットワーク、サーバ、オペレーティングシステム、又はストレージを包含する基礎をなすクラウドインフラストラクチャ、を管理又は制御しないが、デプロイされたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
サービスとしてのインフラストラクチャ(IaaS:Infrastructure as a Service):コンシューマが、オペレーティングシステム及びアプリケーションを含むことができる任意のソフトウェアをデプロイ及び実行することができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティングリソースをプロビジョニングする為に、該コンシューマに提供される機能である。該コンシューマは、基礎をなすクラウドインフラストラクチャを管理又は制御しないが、オペレーティングシステム、ストレージ、デプロイされたアプリケーションに対する制御、並びに、場合によっては、ネットワーク・コンポーネント(例えば、ホストのファイアウォール)を選択することの制限された制御を有する。
デプロイメントモデル(Deployment Models)は下記の通りである。
プライベートクラウド:クラウドインフラストラクチャは、ある組織の為のみに運営される。該クラウドインフラストラクチャは、該組織又は第三者によって管理され得、及びオンプレミス(on-premises)又はオフプレミス(off-premises)に存在しうる。
コミュニティクラウド:クラウドインフラストラクチャは、幾つかの組織によって共有され、及び共通の関心事項(例えば、ミッション、セキュリティ要件、ポリシー、及びコンプライアンス考慮事項)を有する特定のコミュニティをサポートする。該クラウドインフラストラクチャは、該組織又は第三者によって管理され得、及びオンプレミス又はオフプレミスに存在しうる。
パブリッククラウド:クラウドインフラストラクチャは、一般公衆又は大規模な業界グループに対して利用可能であり、及びクラウドサービスを販売する組織によって所有される。
ハイブリッドクラウド:クラウドインフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術(例えば、クラウド間の負荷分散の為のクラウド・バースティング)によって一緒にされる2以上のクラウド(プライベート、コミュニティ、又はパブリック)の混成物である。
クラウドコンピューティング環境は、無国籍性(statelessness)、低結合性、モジュール性、及びセマンティック相互運用性(semantic interoperability)に焦点を有する指向されたサービスである。クラウドコンピューティングの中核(heart)は、相互接続されたノードのネットワークを含むインフラストラクチャである。
図面を参照して、特に図1及び図2を参照して、これらの図面は、例示的な実施態様が実装されうるデータ処理環境の例示的な図である。図1及び図2は、例示に過ぎず、異なる実施態様が実装されうる環境に関して、如何なる限定も主張又は示唆することを意図されていない。特定の実装は、以下の説明に基づいて、図示されている環境に対して多くの修正を加えうる。
図1は、例示的な実施態様が実装されうるデータ処理システムのネットワークのブロック図を図示する。データ処理環境100は、例示的な実施態様が実装されうる複数のコンピュータのネットワークである。データ処理環境100は、ネットワーク102を備えている。ネットワーク102は、データ処理環境100内で一緒に接続された様々なデバイスとコンピュータとの間の通信リンクを提供する為に使用される媒体である。ネットワーク102は、接続、例えば、有線通信リンク、無線通信リンク、又は光ファイバーケーブル、を備えていてもよい。
クライアント又はサーバは、ネットワーク102に接続された或るデータ処理システムの例示的な役割に過ぎず、これらのデータ処理システムの他の構成又は役割を除外することを意図されるものでない。サーバ104及びサーバ106は、記憶ユニット108とともにネットワーク102に接続する。ソフトウェアアプリケーションは、データ処理環境100内の任意のコンピュータ上で実行されうる。クライアント110、112、及び114はまた、ネットワーク102に接続される。データ処理システム、例えば、サーバ104若しくは106、又はクライアント110、112若しくは114、は、データを含み得、並びにその上で実行されるソフトウェアアプリケーション又はソフトウェアツールを有しうる。
例としてのみ、及びそのようなアーキテクチャに対する何らの限定を意味すること無しに、図1は、1つの実施態様の例示的な実装において使用可能である或る構成要素を図示する。例えば、サーバ104及び106、並びにクライアント110、112及び114は、例としてのみ、及びクライアント-サーバアーキテクチャに対する限定を意味すること無しに、サーバ及びクライアントとして図示されている。別の例として、1つの実施態様は、図示されているように、複数のデータ処理システム及びデータネットワークにわたって分散されることができ、一方、別の実施態様は、例示的な実施態様の範囲内で単一のデータ処理システム上で実施されることができる。データ処理システム104、106、110、112、及び114はまた、クラスタ、パーティション、及び1つの実施態様を実装する為に適した他の構成における例示的なノードを表す。
デバイス132は、本明細書に記載されているデバイスの一例である。例えば、デバイス132は、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、据え置き型又は携帯型のクライアント110、ウェアラブルコンピューティングデバイス、又は任意の他の適切なデバイスの形態を取ることができる。図1において別のデータ処理システムにおいて実行されるものとして記載されている任意のソフトウェアアプリケーションは、同様の様式でデバイス132において実行するように構成されることができる。図1における別のデータ処理システムにおいて記憶又は生成される任意のデータ又は情報は、同様の様式においてデバイス132において記憶又は生成されるように構成されることができる。
アプリケーション105は、本明細書に記載されている実施態様を実装する。アプリケーション105は、サーバ104及び106、クライアント110、112及び114、並びにデバイス132のいずれかにおいて実行される。
サーバ104及び106、記憶ユニット108、並びにクライアント110、112及び114、並びにデバイス132は、有線接続、無線通信プロトコル、又は他の適切なデータ接続を用いてネットワーク102に結合しうる。クライアント110、112及び114は例えば、パーソナルコンピュータ又はネットワークコンピュータでありうる。
図示されている例において、サーバ104は、データ、例えば、ブートファイル、オペレーティングシステムイメージ、及びアプリケーション、を、クライアント110、112、及び114に提供しうる。クライアント110、112及び114は、この例において、サーバ104に対するクライアントでありうる。クライアント110、112、114又はそれらの幾つかの組み合わせは、それら自身のデータ、ブートファイル、オペレーティングシステムイメージ、及びアプリケーションを備えていてもよい。データ処理環境100は、図示されていない追加のサーバ、クライアント、及び他のデバイスを備えていてもよい。
図示されている例において、データ処理環境100は、インターネットでありうる。ネットワーク102は、トランスミッションコントロールプロトコル/インターネットプロトコル(TCP/IP:Transmission Control Protocol/Internet Protocol)及び他のプロトコルを使用して互いに通信するネットワーク及びゲートウェイの集合体を表しうる。インターネットの核心は、データ及びメッセージをルーティングする何千もの商業のコンピュータシステム、政府のコンピュータシステム、教育のコンピュータシステム、及び他のコンピュータシステムを包含する、主要ノード又はホストコンピュータの間のデータ通信リンクのバックボーンである。勿論、データ処理環境100がまた、多数の異なるタイプのネットワーク、例えば、イントラネット、ローカルエリアネットワーク(LAN:local area network)、又はワイドエリアネットワーク(WAN:wide area network)等、として実装されうる。図1は、例として意図されており、異なる例示的な実施態様の為のアーキテクチャ上の制限として意図されていない。
他の用途の中で、データ処理環境100は、例示的な実施態様が実装されうるクライアント-サーバ環境を実装する為に使用されうる。クライアント-サーバ環境は、クライアントデータ処理システムとサーバデータ処理システムとの間の相互作用を使用することによってアプリケーションが機能するように、ソフトウェアアプリケーション及びデータをネットワーク全体に分散させることを可能にする。データ処理環境100はまた、ネットワークに渡って分散された相互運用可能なソフトウェアコンポーネントが首尾一貫したビジネスアプリケーションとして一緒にパッケージ化されうるサービス指向アーキテクチャを採用しうる。データ処理環境100はまた、クラウドの形態をとってもよく、並びにサービスのプロバイダとの最小限の管理努力又は相互作用で迅速にプロビジョニング及びリリースされることができる構成可能なコンピューティングリソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの、便利で、オンデマンドのネットワークアクセスを可能にする為のサービス提供のクラウドコンピューティングモデルを使用しうる。
図2を参照すると、この図は、例示的な実施態様が実装されうるデータ処理システムのブロック図を図示する。データ処理システム200は、コンピュータの一例、例えば、図1におけるサーバ104及び106、又はクライアント110、112及び114、又は例示的な実施態様の為のプロセスを実装するコンピュータ使用可能なプログラムコード又は命令が配置されうる別のタイプのデバイス、である。
データ処理システム200はまた、例示的な実施態様の処理を実装するコンピュータ使用可能なプログラムコード又は命令が配置されうるデータ処理システム又はその構成、例えば図1におけるデータ処理システム132、を代表する。データ処理システム200は、これに限定されること無しに、一例としてコンピュータとしてのみ記載されている。他の装置、例えば、図1におけるデバイス132、の形態における実装は、本明細書に記載されているデータ処理システム200の動作及び機能の一般的な説明から逸脱すること無しに、例えば、タッチインタフェースを追加することによってデータ処理システム200を修正してもよく、更には、或る図示された構成要素をデータ処理システム200から除いてもよい。
図示されている例において、データ処理システム200は、ノースブリッジ及びメモリコントローラハブ(NB/MCH:North Bridge and memory controller hub)202及びサウスブリッジ及び入力/出力(I/O:input/output)コントローラハブ(SB/ICH:South Bridge and I/O controller hub)204を備えているハブアーキテクチャを使用する。処理ユニット206、メインメモリ208、及びグラフィックスプロセッサ210は、ノースブリッジ及びメモリコントローラハブ(NB/MCH)202に接続される。処理ユニット206は、1以上のプロセッサを備えていてもよく、並びに1以上のヘテロジニアス・プロセッサ・システムを使用して実装されていてもよい。処理ユニット206は、マルチコアプロセッサであってもよい。グラフィックスプロセッサ210は、或る実装において、アクセラレーテッドグラフィックスポート(AGP:accelerated graphics port)を通じてNB/MCH202に結合されていてもよい。
図示されている例において、ローカルエリアネットワーク(LAN:local area network)アダプタ212は、サウスブリッジ及びI/Oコントローラハブ(SB/ICH)204に接続されている。オーディオアダプタ216、キーボード及びマウスアダプタ220、モデム222、読み取り専用メモリ(ROM:read only memory)224、ユニバーサルシリアルバス(USB:universal serial bus)及び他のポート232、並びにPCI/PCIeデバイス234は、バス238を通じてサウスブリッジ及びI/Oコントローラハブ204に接続されている。ハードディスクドライブ(HDD:hard disk drive)又はソリッドステートドライブ(SSD:solid-state drive)226及びCD-ROM230は、バス240を通じてサウスブリッジ及びI/Oコントローラハブ204に接続されている。PCI/PCIeデバイス234は例えば、イーサネットアダプタ、アドインカード、及びノートブックコンピュータ用のPCカードを包含しうる。PCIはカードバスコントローラを使用し、一方、PCIeは使用しない。ROM 224は、例えば、フラッシュバイナリ入力/出力システム(BIOS:binary input/output system)でありうる。ハードディスクドライブ226及びCD-ROM 230は例えば、インテグレーテッドドライブエレクトロニクス(IDE:integrated drive electronics)、シリアルアドバンスドテクノロジーアタッチメント(SATA:serial advanced technology attachment)インタフェース、又はそれらの変種、例えば、外部SATA(eSATA:external-SATA)及びマイクロSATA、を使用しうる。スーパーI/O(SIO:super I/O)デバイス236は、バス238を通じてサウスブリッジ及びI/Oコントローラハブ(SB/ICH)204に結合されていてもよい。
メモリ、例えば、メインメモリ208、ROM 224、又はフラッシュメモリ(図示せず)は、コンピュータ使用可能な記憶デバイスの幾つかの例である。ハードディスクドライブ又はソリッドステートドライブ226、CD-ROM 230、及び他の同様に使用可能なデバイスは、コンピュータ使用可能な記憶媒体を備えているコンピュータ使用可能な記憶デバイスの幾つかの例である。
オペレーティングシステムは、処理ユニット206上で動作する。該オペレーティングシステムは、図2におけるデータ処理システム200内の様々なコンポーネントを調整し且つその制御を提供する。該オペレーティングシステムは、サーバシステム、パーソナルコンピュータ及びモバイルデバイスを包含するがこれらに限定されない任意のタイプのコンピューティングプラットフォームの為の市販のオペレーティングシステムでありうる。オブジェクト指向又は他のタイプのプログラミングシステムは、オペレーティングシステムと連動して動作してもよく、並びにデータ処理システム200上で実行されるプログラム又はアプリケーションからオペレーティングシステムへのコールを提供してもよい。
オペレーティングシステム、オブジェクト指向プログラミングシステム、及びアプリケーション又はプログラム、例えば、図1におけるアプリケーション105、の為の命令は、記憶装置上に、例えばハードディスクドライブ226上のコード226Aの形態で、配置され、並びに、処理ユニット206による実行の為に、1以上のメモリのうちの少なくとも1つ、例えばメインメモリ208、内にロードされてもよい。例示的な実施態様のプロセスは、コンピュータに実装された命令を用いて処理ユニット206によって実行されてもよく、該命令は、メモリ、例えばメインメモリ208、読み取り専用メモリ224、内に、又は1以上の周辺デバイス内に配置されうる。
その上、或る場合には、コード226Aは、同様のコード201Cが記憶デバイス201D上に記憶されているリモートシステム201Bからネットワーク201Aを介してダウンロードされてもよく、別の場合には、コード226Aは、ダウンロードされたコード201Cが記憶デバイス201D上に記憶されているリモートシステム201Bへネットワーク201Aを介してダウンロードされてもよい。
図1~図2におけるハードウェアは、実装に依存して変わりうる。図1~図2に図示されているハードウェアに加えて、又はそれらに代えて、他の内部ハードウェア又は周辺デバイス、例えば、フラッシュメモリ、同等の不揮発性メモリ又は光ディスクドライブ、が使用されてもよい。加えて、例示的な実施態様の処理は、マルチプロセッサデータ処理システムに適用されうる。
幾つかの例示的な例において、データ処理システム200はパーソナルデジタルアシスタント(PDA:personal digital assistant)であってもよく、該パーソナルデジタルアシスタントは一般的に、オペレーティングシステムファイル若しくはユーザによって生成されたデータ又はそれらの組み合わせを格納する為の不揮発性メモリを提供する為にフラッシュメモリで構成される。バスシステムは、1以上のバス、例えばシステムバス、I/Oバス及びPCIバス、を備えていてもよい。勿論、該バスシステムは、ファブリック又はアーキテクチャに接続された異なるコンポーネント又はデバイスの間のデータ転送を提供する任意のタイプの通信ファブリック又はアーキテクチャを使用して実装されてもよい。
通信ユニットは、データを送受信する為に使用される1以上のデバイス、例えば、モデム又はネットワークアダプタ、を備えていてもよい。メモリは例えば、メインメモリ208、又はキャッシュ、ノースブリッジ及びメモリコントローラハブ202、に見られるキャッシュ、でありうる。処理装置は、1以上のプロセッサ又はCPUを備えうる。
図1~図2における図示された例及び上述された例は、アーキテクチャ上の制限を意味するものでない。例えば、データ処理システム200はまた、モバイルデバイス又はウェアラブルデバイスの形態をとることに加えて、タブレットコンピュータ、ラップトップコンピュータ又は電話デバイスであってもよい。
コンピュータ又はデータ処理システムが、仮想マシン、仮想デバイス、又は仮想コンポーネントとして記述される場合に、該仮想マシン、該仮想デバイス、又は該仮想コンポーネントは、データ処理システム200に図示された一部又は全てのコンポーネントの仮想化されたマニフェストを使用してデータ処理システム200の態様で動作する。例えば、仮想マシン、仮想デバイス、又は仮想コンポーネントにおいて、処理ユニット206は、ホストデータ処理システムにおいて利用可能な全て又は幾つかの数のハードウェア処理ユニット206の仮想化されたインスタンスとして明示され、メインメモリ208は、ホストデータ処理システムにおいて利用可能な全て又は幾つかの一部のメインメモリ208の仮想化されたインスタンスとして明示され、並びに、ディスク226は、ホストデータ処理システムにおいて利用可能でありうる全て又は幾つかの一部のディスク226の仮想化されたインスタンスとして明示される。そのような場合のホストデータプロセッシングシステムは、データ処理システム200によって表される。
図3を参照すると、この図は、例示的な実施態様に従う共有可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的な構成のブロック図を図示する。アプリケーション300は、図1におけるアプリケーション105の一例であり、並びに図1におけるサーバ104及び106、クライアント110、112及び114、並びにデバイス132のいずれかにおいて実行される。
アプリケーション300は、プロセスVM内でアプリケーションを実行することを開始し、ここで、該プロセスVMは、いかなるアプリケーションコードのコンパイルをも防止するように設定されている。その代わりに、アプリケーションコードは、既存のプロセスVMの機能を使用して、インタープリットされる。該アプリケーションがスナップショットポイントの前に該プロセスVM内で実行される場合に、アプリケーション300は、該アプリケーションのプロファイリングデータを収集する。プロファイリングデータは、1以上のバッファ内に蓄積される。アプリケーション実行内の或るポイントがスナップショットポイントとして選択され、並びにアプリケーション300は、アプリケーション実行がスナップショットポイントに到達したときにトリガーされるようにスナップショットハンドラーを構成する。
該スナップショットハンドラーが該スナップショットポイントでトリガーされるときに、メソッドリストビルダーモジュール310は、メソッドリストを構築する。該メソッドリストは、該スナップショットポイントの後に現在実行中のアプリケーションによって実行されることが可能である複数のメソッドの1組を含む。該メソッドリストを構築する為に、モジュール310は、該アプリケーションのアクティブスレッドのコールスタックを参照する。モジュール310の追加の詳細は、図4を参照して提供される。
バッファが容量に近づく場合に、又は所定の時間間隔で、プロファイリングデータコミットメントモジュール(profiled data commitment module)320は、JITコンパイラによって使用される為に、バッファリングされたデータを所定の記憶場所にコミットする。同様に、該スナップショットハンドラーがスナップショットポイントでトリガーされるときに、モジュール320は、JITコンパイラの所定の記コンパイラバッファリングされたプロファイリングデータをコミットする。該バッファリングされたプロファイリングデータを該スナップショットポイントでコミットすることにより、JITコンパイラによって使用される為に利用可能なプロファイリングデータの量が増加する。
コンパイレーションモジュール(compilation module)330は、JITコンパイラを使用して、該メソッドリスト内の1以上のメソッドを、所定の記憶場所に該プロファイリングデータを使用してコンパイルする。モジュール330の別の実装は、JITコンパイラを使用して、該メソッドリスト内の1以上のメソッドの異なる最適化されたバージョンをコンパイルし、アプリケーションスループットを改善し及びリストア時のランプアップ(ramp-up)を低減する為にコンパイル時間とスナップショットサイズを交換する。モジュール330の別の実装は、JITコンパイラを使用して、該メソッドリスト内の異なる2つのバージョンのメソッドをコンパイルする(ここで、1つのメソッドは通常通りに最適化され、並びにもう1つのメソッドはデバッグサポートを有効にしてコンパイルされる)。
スナップショットデータモジュール340は、コンパイルの結果を格納する。モジュール340の1つの実装は、メソッド毎に1つのコンパイル結果のみを格納する。モジュール340の別の実装は、該スナップショット内にメソッドの2つ以上の異なる最適化されたバージョンを格納し、アプリケーションが実行されている状態で再コンパイルすること無しに、異なる最適化をポストレストア(post-restore)に組み込むことを可能にする。モジュール340の別の実装は、通常通りに最適化されたコンパイル結果と、デバッグサポートが有効なコンパイル結果との両方を格納し、リストア後に単一のスナップショットを使用して通常の動作及びデバッグを可能にする。モジュール340はまた、追加のスナップショットデータを格納する。
図4を参照すると、この図は、例示的な実施態様に従う共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的な構成のブロック図を図示する。図4は、図3におけるメソッドリストビルダーモジュール310のより詳細な構成を図示する。
該メソッドリストを構築する為に、メソッド追加モジュール410は、該スナップショットポイントが到達されたときに現在実行中であった1つのメソッドを選択する。モジュール410は、該選択されたメソッドを該メソッドリストに追加し、そして、該選択されたメソッドが別のメソッドをコールすることができるか決定する。もしそうであれば、モジュール410は、新しいメソッドを該メソッドリストに追加し、そして、該新しいメソッドそれ自体が別のメソッドをコールすることができるかを決定する。モジュール410は、この方式で継続し、現在実行中のメソッドからコールされることができる全てのメソッドを蓄積する。該スナップショットポイントが到達されたときに別のメソッドが現在実行中であった場合、モジュール410はそのメソッドで処理を繰り返す。加えて、該アプリケーションの複数のスレッドが実行されていた場合に、モジュール410は、別のスレッドの為に該処理を繰り返す。従って、結果として得られるメソッドリストは、何らかの現在実行中のメソッド、並びに、元のVMにおいて又は該スナップショットからリストアされた新しいインスタンスにおいてのいずれかで、実行が該スナップショットポイントの後に継続するときに現在実行中のメソッドがコールされることができる何らかのメソッドを含む。モジュール410は、該メソッドリストを、現在知られている何らかのデータ構造、例えば静的コールグラフ、内に維持する。
メソッドリストの構築の間、又はモジュール410が該メソッドリストを構築することを完了した後、メソッド削除モジュール420は、或るメソッドが該メソッドリストから削除されるべきであるか(又は、最初に追加されるべきでないか)を決定する。モジュール420は、或るメソッドが該メソッドリストからフィルタリングされるべきか、又は削除されるべきかを決定する為に、1以上の基準を使用する。或るメソッドが削除されるべきかを決定する為の基準の非限定的な1つの例は、該メソッドの実行の蓋然性の解析に基づく。例えば、或る条件が真である場合にのみメソッドが実行される場合、該条件が真であることは決してないか、又は真であることの閾値未満の蓋然性を有する場合、このメソッドは該メソッドリストにおいて必要でなく、将来のアプリケーションパフォーマンスに影響を与えること無しに削除されることができる。同様に、例外時にのみコールされるメソッドがまた、コンパイルされる必要がない場合がある。別の例として、そのコールするメソッドが既にコンパイルされている為に、全てのそのコールメソッドの一部となっているメソッド(例えば、インラインコードとして組み込まれたメソッド)が個別にコンパイルされる必要がない場合がある。別の例として、他のアプリケーションによって使用されるべきアプリケーションフレームワークの為にスナップショットを準備する場合に、幾つかのメソッドはフレームワークの正しい層内に配置される必要があるので、異なる層に対して適するメソッドは該メソッドリストから削除されうる。
図5を参照すると、この図は、例示的な実施態様に従う共用可能なアプリケーションスナップショットの為のコンパイル化戦略の例を図示する。該例は、図3におけるアプリケーション300を使用して実行されることができる。
図示されているように、アプリケーション510は、プロセスVMにおいて実行することを開始する。アプリケーション510がスナップショットポイントの前に実行される場合に、プロファイリングデータ520はプロファイリングバッファ530内に蓄積される。バッファ530が容量に近づく場合に、又は所定の時間間隔で、又は該スナップショットポイントで、アプリケーション300は、JITコンパイラによって使用する為に、コミットされたプロファイリングデータ540をプロファイリングデータストレージ(profiling data storage)550内に転送する。
図6を参照すると、この図は、例示的な実施態様に従う共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。該例は、図3におけるアプリケーション300を使用して実行されることができる。メソッド追加モジュール410は、図4におけるメソッド追加モジュール410と同じである。
ソースコード610は、図5におけるアプリケーション510を実行する一例の部分である。図示されているように、ソースコード610は、メソッド1()、次にメソッド2()をコールする。メソッド2()は、メソッド3()をコールする。メソッド1()がメソッド2()よも大きい場合のみ(それは決して生じない)メソッド2()はメソッド4()をコールする為のコードを含む。
スナップショットポイント620は、MyClass内のメソッド1()が実行されている間に生じる。その結果、メソッド追加モジュール410は、メソッドリスト630を構築する。MyClass及びメソッド1()は現在実行中である。メソッド2()はメソッド1()の後にコールされるので、メソッド2()がまた、メソッド3()及びメソッド4()と共にメソッドリスト630にある。なぜならば、メソッド3()及びメソッド4()はメソッド2()によってコールされることができるからである。
図7を参照すると、この図は、例示的な実施態様に従う共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。メソッド削除モジュール420は、図4におけるメソッド削除モジュール420と同じである。メソッドリスト630は、図6におけるメソッドリスト630と同じである。
ここで、メソッド1()がメソッド2()よも大きい場合のみ(それは決して生じない)メソッド2()がメソッド4()をコールする為のコードを含む為に、メソッド削除モジュール420はメソッド4()がコンパイルされる必要がないと判断する。従って、モジュール420は、メソッド4()をメソッドリスト630から削除し、メソッドリスト730を結果として生じる。
図8を参照すると、この図は、例示的な実施態様に従う共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。コンパイレーションモジュール330は、図3におけるコンパイレーションモジュール330と同じである。メソッドリスト730は、図7におけるメソッドリスト730と同じである。図示されているように、コンパイレーションモジュール330は、メソッドリスト730における複数のメソッドのそれぞれをコンパイルし、コンパイルされたコード810を結果として生じる。
図9を参照すると、この図は、例示的な実施態様に従う共用可能なアプリケーションスナップショットの為のコンパイル化戦略の続きの例を図示する。スナップショットデータモジュール340は、図3におけるスナップショットデータモジュール340と同じである。アプリケーション510及びプロファイリングデータストレージ(profiled data storage)550は、図5におけるアプリケーション510及びプロファイリングデータストレージ(profiled data storage)550と同じである。コンパイルされたコード810は、図8におけるコンパイルされたコード810と同じである。図示されているように、スナップショットデータモジュール340は、コンパイルされたコード810、プロファイリングデータストレージ(profile data storage)550からのデータ、及びアプリケーション510の実行状態データ910を、スナップショットデータ920に取り込む。
図10を参照すると、この図は、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的なプロセスのフローチャート図を図示する。プロセス1000は、図3におけるアプリケーション300で実装されることができる。
ブロック1002において、該アプリケーションは、プロセス仮想マシンのアプリケーションにおけるメソッドのコンパイルを防止するスナップショットモードで、該プロセス仮想マシンを開始する。ブロック1004において、該アプリケーションは、スナップショットポイントにおける、プロセス仮想マシン内で現在実行中のアプリケーションの為に、該スナップショットポイントの後に該アプリケーションによって実行されることができる複数のメソッドの1組を含むメソッドリストを構築する。ブロック1006において、該アプリケーションは、該スナップショットポイントに到達する前に収集された、該現在実行中のアプリケーションのプロファイリングデータを、指定された保管場所にコミットする。ブロック1008において、該アプリケーションは、該プロファイリングデータ及び該プロセス仮想マシンのジャストインタイムコンパイラを使用して、該メソッドリスト中の複数のメソッドの1組をコンパイリングする。ブロック1010において、該アプリケーションは、該スナップショットポイントにおける該アプリケーションの実行状態のデータを含むスナップショットデータを格納し、ここで、該スナップショットデータはコンパイリングの結果を含む。次に、該アプリケーションは終了する。
図11を参照すると、例示的な実施態様に従う、共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為の例示的なプロセスのフローチャート図を図示する。該フローチャート図は、図10におけるブロック1004をより詳細に図示する。
ブロック1102において、該アプリケーションは、該アプリケーションによって現在実行されている1つのメソッドを選択する。ブロック1104において、該アプリケーションは、現在選択されている該1つのメソッドをメソッドリストに追加する。ブロック1106において、該アプリケーションは、現在選択されている該メソッドが別のメソッドをコールするかを決定する。そうであれば(ブロック1106の「はい」の経路)、ブロック1108において、該アプリケーションは、該コールされた1つのメソッドを現在選択されている該1つのメソッドとして指定し、次に、ブロック1104に戻る。そうでない場合(ブロック1106の「いいえ」の経路)、ブロック1110において、該アプリケーションは、処理する為に現在実行されている別のメソッドがあるかを決定する。そうであれば(ブロック1110の「はい」の経路)、ブロック1112において、該アプリケーションは、処理する為の次のメソッドを現在選択されているメソッドとして指定し、次に、ブロック1104に戻る。そうでない場合(ブロック1110の「いいえ」の経路)、ブロック1114において、該アプリケーションは、1以上の基準に基づいて該メソッドリストをフィルタリングする。次に、該アプリケーションは終了する。
ここで図12を参照すると、例示的なクラウドコンピューティング環境50が図示されている。図示されているように、クラウドコンピューティング環境50は、クラウドコンシューマ、例えば、パーソナルデジタルアシスタント(PDA:personal digital assistant)又は携帯電話54A、デスクトップコンピュータ54B、ラップトップコンピュータ54C若しくは自動車コンピュータシステム54N等又はそれらの組み合わせ、によって用いられるローカルコンピューティングデバイスが通信しうる1以上のクラウドコンピューティングノード10を備えている。ノード10は、互いに通信しうる。それらは、1以上のネットワーク、例えば、本明細書において記載されている、プライベートクラウド、コミュニティクラウド、パブリッククラウド、若しくはハイブリッドクラウド、又はそれらの組み合わせ、において物理的又は仮想的にグループ化されていてもよい(図示せず)。これにより、クラウドコンピューティング環境50は、クラウドコンシューマがローカルコンピューティングデバイス上のリソースを維持する必要がないサービスとして、インフラストラクチャ、プラットフォーム若しくはソフトウェア又はそれらの組み合わせを提供することができる。図示されているコンピューティングデバイス54A~Nのタイプは、例示のみを意図されていること、並びにコンピューティングノード10及びクラウドコンピューティング環境50は、任意のタイプのネットワーク若しくはネットワークアドレス可能接続又はそれらの組み合わせを介して(例えば、ウェブブラウザを使用して)任意のタイプのコンピュータ化されたデバイスと通信することが理解される。
ここで図13を参照すると、クラウドコンピューティング環境50(図12)によって提供される機能的抽象化層の1組が示されている。図示されている構成要素、層及び機能は、単に例示であることが意図されていること、並びに本発明の実施態様はそれらに限定されないことが理解されるべきである。図示されている通り、下記の複数の層及び対応する複数の機能が提供される。
ハードウェア及びソフトウェア層60は、ハードウェアコンポーネント及びソフトウェアコンポーネントを包含する。ハードウェアコンポーネントの例は、メインフレーム61、RISC(Reduced Instruction Set Computer(縮小命令セット・コンピュータ))アーキテクチャ・ベースのサーバ62;サーバ63;ブレード・サーバ64;記憶装置65;並びに、ネットワーク及びネットワーキング・コンポーネント66を包含する。幾つかの実施態様において、ソフトウェアコンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67及びデータベース・ソフトウェア68を包含する。
仮想化層70は、抽象化層を提供し、この抽象化層から、仮想エンティティの下記の例が提供されうる:すなわち、仮想サーバ71;仮想ストレージ72;仮想ネットワーク73;例えば仮想プライベートネットワークを包含する該仮想ネットワーク73;仮想アプリケーション及びオペレーティングシステム74;並びに、仮想クライアント75。
1つの例において、管理層80は、以下で説明される複数の機能を提供しうる。リソース・プロビジョニング81は、クラウドコンピューティング環境内でタスクを実行する為に利用されるコンピューティングリソース及び他のリソースの動的な調達を提供する。計量及び価格決定82は、リソースがクラウドコンピューティング環境内で利用される場合のコスト追跡と、これらのリソースの消費についての課金又は請求とを提供する。1つの例において、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを包含しうる。セキュリティは、クラウドコンシューマ及びタスクに対する識別検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル83は、コンシューマ及びシステム管理者の為に、クラウドコンピューティング環境へのアクセスを提供する。サービスレベル管理84は、要求されるサービスレベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント(SLA:Service Level Agreement)の計画及び履行85は、将来の要件がSLAに従って予測されるクラウド・コンピューティング・リソースの為の事前配置及びその調達を提供する。
ワークロード層90は、該クラウドコンピューティング環境が利用されうる複数の機能の例を提供する。この層から提供されうる複数のワークロード及び複数の機能の例は、マッピング及びナビゲーション91;ソフトウェア開発及びライフサイクル管理92;仮想教室教育の提供93;データ分析処理94;トランザクション処理95;並びに、累積的な脆弱性リスク評価に基づくアプリケーション96を包含する。
従って、コンピュータに実装された方法、システム又は装置及びコンピュータプログラム製品が、共用可能なアプリケーションスナップショット及び他の関連する特徴、機能又は操作の為のコンパイル化戦略の為の例示的な実施態様において提供される。1つの実施形態又はその一部が或るタイプのデバイスに関して説明されている場合、コンピュータに実装された方法、システム若しくは装置及びコンピュータプログラム製品、又はその一部は、そのタイプのデバイスの適切で且つ同等の表現と共に使用する為に適合又は構成されている。
1つの実施態様がアプリケーション内に実装されるものとして説明される場合、例示的な実施態様の範囲内で、サービスとしてのソフトウェア(SaaS)モデルにおけるアプリケーションの配信が企図される。SaaSモデルにおいて、1つの実施態様を実装するアプリケーションの機能は、クラウドインフラストラクチャにおいてアプリケーションを実行することによって、ユーザに提供される。該ユーザは、シン・クライアント・インタフェース、例えばウェブブラウザ(例えば、ウェブベースの電子メール)、又は他の軽量(light-weight)クライアントアプリケーションを介して、様々なクライアントデバイスを使用してアプリケーションにアクセスすることができる。該ユーザは、基礎となるクラウドインフラストラクチャ、例えば、ネットワーク、サーバ、オペレーティングシステム、又はクラウドインフラのストレージを包含する上記のクラウドインフラストラクチャ、を管理又は制御することはない。場合によっては、該ユーザはSaaSアプリケーションの機能を管理又は制御しないことさえありうる。他の幾つかの場合において、該アプリケーションのSaaS実装は、限られたユーザ固有のアプリケーション構成設定のありうる例外を許可しうる。
本発明は、統合のありうる任意の技術的詳細レベルでの、システム、方法若しくはコンピュータプログラム製品又はそれらの組み合わせでありうる。該コンピュータプログラム製品は、プロセッサに本発明の観点を実行させる為のコンピュータ可読プログラム命令を有する1以上のコンピュータ可読記憶媒体を包含しうる。
該コンピュータ可読記憶媒体は、命令実行デバイスによって使用する為の命令を保持且つ記憶することができる有形のデバイスであることができる。該コンピュータ可読記憶媒体は、例えば、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、又はこれらの任意の適切な組み合わせでありうるが、これらに限定されない。該コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、下記を包含する:ポータブルのコンピュータディスケット(登録商標)、ハードディスク、ランダムアクセスメモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read only memory)、消去可能なプログラム可能な読み取り専用メモリ(EPROM:erasable programmable read-only memory又はフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM:static random access memory)、ポータブル・コンパクトディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリスティック、フロッピーディスク、機械的に符号化されたデバイス、例えば、パンチカード若しくは命令が記録されている溝内の隆起構造又はこれらの任意の適切な組み合わせ。本明細書において使用される場合、コンピュータ可読記憶媒体は、一時的な信号それ自体、例えば、電波又は他の自由に伝播する電磁波、導波管若しくは他の伝送媒体を伝播する電磁波(例えば、光ファイバーケーブルを通過する光パルス)、又は電線を介して送信される電気信号、であると解釈されるべきでない。
本明細書において記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から個々のコンピューティングデバイス/処理デバイスに、又はネットワーク、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク若しくはワイヤレスネットワーク又はそれらの組み合わせ、を介して外部コンピュータ又は外部記憶デバイスにダウンロードされることができる。該ネットワークは、銅線伝送ケーブル、光伝送ファイバー、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ若しくはエッジサーバ又はこれらの組み合わせで構成されうる。各コンピューティングデバイス/処理デバイスにおけるネットワークアダプタカード又はネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そして、該コンピュータ可読プログラム命令を、個々のコンピューティングデバイス/処理デバイス内にコンピュータ可読記憶媒体中に記憶する為に転送する。
本発明の動作を実行する為のコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の為の構成データ、又は、1以上のプログラミング言語、例えばオブジェクト指向プログラミング言語、例えば、Smalltalk、C++等、慣用的な手続き型プログラミング言語(例えば、「C」プログラミング言語又は同様のプログラミング言語)、の任意の組み合わせで書かれているソースコード又はオブジェクトコードのいずれか、でありうる。該コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に、ユーザのコンピュータ上で部分的に、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に、ユーザのコンピュータ上で部分的に且つリモート・コンピュータ上で部分的に、又はリモート・コンピュータ若しくはサーバ上で全体的に、実行されうる。後者のシナリオにおいて、該リモート・コンピュータは、任意の種類のネットワーク、例えば、ローカルエリアネットワーク(LAN:local area network)若しくはワイドエリアネットワーク(WAN:wide area network)、を介してユーザのコンピュータに接続されうるか、又は該接続は(例えば、インターネットサービスプロバイダを使用したインターネットを通じて)外部コンピュータに対して行われうる。幾つかの実施態様において、電子回路、例えば、プログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA:field-programmable gate arrays)又はプログラマブルロジックアレイ(PLA:programmable logic arrays)、は、本発明の観点を実行する為に、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をパーソナライズすることによって、コンピュータ可読プログラム命令を実行しうる。
本発明の観点は、本発明の実施態様に従う、方法、装置(システム)及びコンピュータプログラム製品若しくはコンピュータプログラムのフローチャート図若しくはブロック図又はそれらの組み合わせを参照して本明細書において記載されている。該フローチャート図若しくは該ブロック図又はそれらの組み合わせの各ブロック、並びに該フローチャート図若しくは該ブロック図又はそれらの組み合わせにおける複数のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装されることができることが理解されるであろう。
これらのコンピュータ可読プログラム命令は、該コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサを介して実行する命令が該フローチャート図若しくはブロック図又はそれらの組み合わせの1以上のブロックにおいて特定された機能/動作を実装する為の手段を作成するように、コンピュータのプロセッサ又は他のプログラム可能なデータ処理装置に提供されて、マシンを作り出しうる。記憶された命令を有するコンピュータ可読記憶媒体が該フローチャート図若しくはブロック図又はそれらの組み合わせの1以上のブロックにおいて特定される機能/動作の観点を実装する命令を含む製造品を含むように、これらのコンピュータ可読プログラム命令はまた、コンピュータプログラム可能なデータ処理装置若しくは他のデバイス又はこれらの組み合わせに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体中に記憶されうる。
該コンピュータ可読プログラム命令はまた、コンピュータ上、他のプログラム可能なデータ処理装置上又は他のデバイス上で実行される命令が、該フローチャート図若しくはブロック図若しくはそれらの組み合わせの1以上のブロックにおいて特定される機能/動作を実装するように、上記のコンピュータ上、他のプログラム可能なデータ処理装置上又は他のデバイス上にロードされて、コンピュータ、他のプログラム可能な装置又は他のデバイス上で一連の操作工程を実行させて、コンピュータに実装されたプロセスを生成しうる。
図面中のフローチャート図及びブロック図は、本発明の様々な実施態様に従う、システム、方法及びコンピュータプログラム製品若しくはコンピュータプログラムのありうる実装の、アーキテクチャ、機能及び動作を示す。これに関連して、該フローチャート図又はブロック図における各ブロックは、命令のモジュール、セグメント、又はその一部を表し得、それは、特定された1以上の論理機能を実装する為の1以上の実行可能命令を含む。幾つかの代替の実装において、該ブロックにおいて示されている機能は、図面中に示されている順序とは異なって生じうる。例えば、連続して示されている2つのブロックは、実際には、関与する機能に依存して、同時に、実質的に同時に、部分的又は全体的に時間的に重複する様式で実行される1つの工程として達成されうるか、又は該ブロックは、逆の順序で実行されうる。該ブロック図若しくはフローチャート図又はこれらの組み合わせの各ブロック、並びに該ブロック図若しくはフローチャート図又はこれらの組み合わせの複数のブロックの組み合わせは、特定された機能又は動作を実行する特別な目的のハードウェアベースのシステムによって実装することができ、又は特別な目的のハードウェアとコンピュータ命令との組み合わせを実行することができることに留意されたい。

Claims (20)

  1. コンピュータに実装された方法であって、
    スナップショットポイントにおける、プロセス仮想マシン内で現在実行中のアプリケーションの為に、メソッドリストを構築すること、ここで、前記メソッドリストは、前記スナップショットポイントの後に前記現在実行中のアプリケーションによって実行されることができる複数のメソッドの1組を含み、前記スナップショットポイントは、スナップショットプロセスがトリガーされたときに前記現在実行中のアプリケーションの実行状態を含む;
    前記現在実行中のアプリケーションのプロファイリングデータを、指定された保管場所にコミットすること、ここで、前記プロファイリングデータは前記スナップショットポイントに到達する前に収集される;
    前記プロファイリングデータ及び前記プロセス仮想マシンのジャストインタイムコンパイラを使用して、前記メソッドリスト中の1つのメソッドをコンパイリングすること;及び、
    スナップショットデータを格納すること、ここで、前記スナップショットデータは、前記スナップショットポイントにおける前記現在実行中のアプリケーションの前記実行状態のデータを含み、前記スナップショットデータは前記コンパイリングの結果を含む、
    を含む、前記方法。
  2. 前記スナップショットプロセスがトリガーされる前の前記現在実行中のアプリケーションの為に、前記アプリケーションのメソッドのコンパイルを防止すること
    を更に含む、請求項1に記載の、コンピュータに実装された方法。
  3. 前記スナップショットプロセスがトリガーされる前の前記現在実行中のアプリケーションの為に、前記プロファイリングデータを収集すること
    を更に含む、請求項1に記載の、コンピュータに実装された方法。
  4. 前記メソッドリストを構築することが、
    前記メソッドリストに、前記スナップショットポイントにおける前記現在実行中のアプリケーションによって現在実行されている第1のメソッドを追加すること;及び、
    第2のメソッドが前記第1のメソッドによってコールされることができるとの決定に応じて、前記メソッドリストに前記第2のメソッドを追加すること
    を含む、請求項1に記載の、コンピュータに実装された方法。
  5. 第3のメソッドが前記第2のメソッドによってコールされることができるとの決定に応じて、前記メソッドリストに前記第3のメソッドを追加すること
    を更に含む、請求項4に記載の、コンピュータに実装された方法。
  6. 前記メソッドリスト中の第3のメソッドの特徴が基準を満たすとの決定に応じて、前記メソッドリストから前記第3のメソッドを削除すること
    を更に含む、請求項4に記載の、コンピュータに実装された方法。
  7. 前記基準が、前記現在実行中のアプリケーション内で前記第3のメソッドの実行の蓋然性の解析に基づく、請求項6に記載の、コンピュータに実装された方法。
  8. 共用可能なアプリケーションスナップショットの為のコンパイル化戦略の為のコンピュータプログラム製品であって、該コンピュータプログラム製品が、
    1以上のコンピュータ可読記憶媒体、及び前記1以上のコンピュータ可読記憶媒体上に集合的に格納された複数のプログラム命令を備えており、前記プログラム命令が、
    スナップショットポイントにおける、プロセス仮想マシン内で現在実行中のアプリケーションの為に、メソッドリストを構築する為のプログラム命令、ここで、前記メソッドリストは、前記スナップショットポイントの後に前記現在実行中のアプリケーションによって実行されることができる複数のメソッドの1組を含み、前記スナップショットポイントは、スナップショットプロセスがトリガーされたときに前記現在実行中のアプリケーションの実行状態を含む;
    前記現在実行中のアプリケーションのプロファイリングデータを、指定された保管場所にコミットする為のプログラム命令、ここで、前記プロファイリングデータは前記スナップショットポイントに到達する前に収集される;
    前記プロファイリングデータ及び前記プロセス仮想マシンのジャストインタイムコンパイラを使用して、前記メソッドリスト中の1つのメソッドをコンパイリングする為のプログラム命令;及び、
    スナップショットデータを格納する為のプログラム命令、ここで、前記スナップショットデータは、前記スナップショットポイントにおける前記現在実行中のアプリケーションの前記実行状態のデータを含み、前記スナップショットデータは前記コンパイリングの結果を含む、
    を含む、前記コンピュータプログラム製品。
  9. 前記スナップショットプロセスがトリガーされる前の前記現在実行中のアプリケーションの為に、前記アプリケーションのメソッドのコンパイルを防止する為のプログラム命令
    を更に含む、請求項8に記載のコンピュータプログラム製品。
  10. 前記スナップショットプロセスがトリガーされる前の前記現在実行中のアプリケーションの為に、前記プロファイリングデータを収集する為のプログラム命令
    を更に含む、請求項8に記載のコンピュータプログラム製品。
  11. 前記メソッドリストを構築することが、
    前記メソッドリストに、前記スナップショットポイントにおける前記現在実行中のアプリケーションによって現在実行されている第1のメソッドを追加する為のプログラム命令;及び、
    第2のメソッドが前記第1のメソッドによってコールされることができるとの決定に応じて、前記メソッドリストに前記第2のメソッドを追加する為のプログラム命令
    を含む、請求項8に記載のコンピュータプログラム製品。
  12. 第3のメソッドが前記第2のメソッドによってコールされることができるとの決定に応じて、前記メソッドリストに前記第3のメソッドを追加する為のプログラム命令
    を更に含む、請求項11に記載のコンピュータプログラム製品。
  13. 前記メソッドリスト中の第3のメソッドの特徴が基準を満たすとの決定に応じて、前記メソッドリストから前記第3のメソッドを削除する為のプログラム命令
    を更に含む、請求項11に記載のコンピュータプログラム製品。
  14. 前記基準が、前記現在実行中のアプリケーション内で前記第3のメソッドの実行の蓋然性の解析に基づく、請求項13に記載のコンピュータプログラム製品。
  15. 前記格納された複数のプログラム命令が、ローカルデータ処理システムの前記1以上の記録媒体のうちの少なくとも1つ内に格納され、及び前記格納された複数のプログラム命令が、リモートデータ処理システムからネットワークを介して転送される、請求項8に記載のコンピュータプログラム製品。
  16. 前記格納された複数のプログラム命令が、サーバデータ処理システムの前記1以上の記録媒体のうちの少なくとも1つ内に格納され、及び、前記格納された複数のプログラム命令が、前記リモートデータ処理システムに関連付けられたコンピュータ可読記憶デバイスにおいて使用される為にリモートデータ処理システムへネットワークを介してダウンロードされる、請求項8に記載のコンピュータプログラム製品。
  17. 前記コンピュータプログラム製品が、クラウド環境におけるサービスとして提供される、請求項8に記載のコンピュータプログラム製品。
  18. コンピュータシステムであって、該コンピュータシステムは、1以上のプロセッサ、1以上のコンピュータ可読メモリ及び1以上のコンピュータ可読記憶デバイス、並びに前記1以上のコンピュータ可読メモリのうちの少なくとも1つを介して、前記1以上のプロセッサのうちの少なくとも1つによって実行する為に前記1以上の記憶デバイスのうちの少なくとも1つ上に格納された複数のプログラム命令を備えており、前記格納された複数のプログラム命令は、
    スナップショットポイントにおける、プロセス仮想マシン内で現在実行中のアプリケーションの為に、メソッドリストを構築する為のプログラム命令、ここで、前記メソッドリストは、前記スナップショットポイントの後に前記現在実行中のアプリケーションによって実行されることができる複数のメソッドの1組を含み、前記スナップショットポイントは、スナップショットプロセスがトリガーされたときに前記現在実行中のアプリケーションの実行状態を含む;
    前記現在実行中のアプリケーションのプロファイリングデータを、指定された保管場所にコミットする為のプログラム命令、ここで、前記プロファイリングデータは前記スナップショットポイントに到達する前に収集される;
    前記プロファイリングデータ及び前記プロセス仮想マシンのジャストインタイムコンパイラを使用して、前記メソッドリスト中の1つのメソッドをコンパイリングする為のプログラム命令;及び、
    スナップショットデータを格納する為のプログラム命令、ここで、前記スナップショットデータは、前記スナップショットポイントにおける前記現在実行中のアプリケーションの前記実行状態のデータを含み、前記スナップショットデータは前記コンパイリングの結果を含む、
    を含む、前記コンピュータシステム。
  19. 前記スナップショットプロセスがトリガーされる前の前記現在実行中のアプリケーションの為に、前記アプリケーションのメソッドのコンパイルを防止する為のプログラム命令
    を更に含む、請求項18に記載のコンピュータシステム。
  20. 前記スナップショットプロセスがトリガーされる前の前記現在実行中のアプリケーションの為に、前記プロファイリングデータを収集する為のプログラム命令
    を更に含む、請求項18に記載のコンピュータシステム。
JP2023513268A 2020-08-28 2021-08-13 共用可能なアプリケーションスナップショットの為のコンパイル化戦略 Pending JP2023538938A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/005,605 US11188364B1 (en) 2020-08-28 2020-08-28 Compilation strategy for a sharable application snapshot
US17/005,605 2020-08-28
PCT/CN2021/112464 WO2022042334A1 (en) 2020-08-28 2021-08-13 Compilation strategy for sharable application snapshot

Publications (1)

Publication Number Publication Date
JP2023538938A true JP2023538938A (ja) 2023-09-12

Family

ID=78767768

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023513268A Pending JP2023538938A (ja) 2020-08-28 2021-08-13 共用可能なアプリケーションスナップショットの為のコンパイル化戦略

Country Status (5)

Country Link
US (1) US11188364B1 (ja)
JP (1) JP2023538938A (ja)
CN (1) CN115968469A (ja)
GB (1) GB2613324A (ja)
WO (1) WO2022042334A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11500661B2 (en) * 2020-08-26 2022-11-15 International Business Machines Corporation Performing an application snapshot using process virtual machine resources
US20230004413A1 (en) * 2021-07-02 2023-01-05 Vmware, Inc. Distributed autonomous lifecycle management of hypervisors in a virtualized computing system
CN114640610B (zh) * 2022-02-25 2023-10-20 北京水滴科技集团有限公司 基于云原生的服务治理方法、装置及存储介质
US11614982B1 (en) * 2022-08-29 2023-03-28 Sedai Inc. Autonomous concurrency for serverless functions

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9785468B2 (en) 2012-06-13 2017-10-10 International Business Machines Corporation Finding resource bottlenecks with low-frequency sampled data
US10248619B1 (en) * 2012-09-28 2019-04-02 EMC IP Holding Company LLC Restoring a virtual machine from a copy of a datastore
EP3036636A4 (en) * 2013-08-19 2017-06-21 Microsoft Technology Licensing, LLC Snapshotting executing code with a modifiable snapshot definition
US9842032B2 (en) * 2013-08-27 2017-12-12 Red Hat, Inc. Memory first live snapshot
CN104809020B (zh) * 2013-11-20 2018-05-11 华为技术有限公司 一种生成快照的方法、系统和装置
US10353679B2 (en) * 2014-10-31 2019-07-16 Microsoft Technology Licensing, Llc. Collecting profile data for modified global variables
US20170083701A1 (en) * 2015-09-17 2017-03-23 OnSystem Logic, LLC Using Assured Calling Sequences in Micro-Sandboxes
US10489518B1 (en) * 2016-03-03 2019-11-26 Nutanix, Inc. Virtual machine object version control
US11550820B2 (en) 2017-04-28 2023-01-10 Oracle International Corporation System and method for partition-scoped snapshot creation in a distributed data computing environment
US20210096892A1 (en) * 2019-10-01 2021-04-01 Red Hat, Inc. Snapshot for compiler optimization
CN111381937A (zh) * 2020-04-02 2020-07-07 中国电子科技网络信息安全有限公司 一种基于时间基线的实验场景快照生成系统及方法
CN111488195B (zh) * 2020-04-10 2023-05-12 深信服科技股份有限公司 虚拟机克隆方法、装置、设备及计算机可读存储介质

Also Published As

Publication number Publication date
GB2613324A (en) 2023-05-31
US11188364B1 (en) 2021-11-30
WO2022042334A1 (en) 2022-03-03
CN115968469A (zh) 2023-04-14

Similar Documents

Publication Publication Date Title
US11178207B2 (en) Software version control without affecting a deployed container
US10372435B2 (en) System, method and program product for updating virtual machine images
US8904384B2 (en) Reducing data transfer overhead during live migration of a virtual machine
JP2023538938A (ja) 共用可能なアプリケーションスナップショットの為のコンパイル化戦略
US20140075435A1 (en) System, method and program product for cost-aware selection of stored virtual machine images for subsequent use
JP2013518330A (ja) 非機能要件に基づく仮想マシンの配置の抽象化方法およびシステム
US10031886B2 (en) Remote direct memory access-based method of transferring arrays of objects including garbage data
US11163593B2 (en) Checkpointing and restoring containers to optimize containerized managed runtime applications
JP2023057535A (ja) コンピュータ実装方法、システムおよびコンピュータプログラム(ワークロード実行のための動的スケーリング)
US10884764B1 (en) Optimizing managed runtime applications for serverless environments
US9727374B2 (en) Temporary virtual machine migration for improved software application warmup
Pemberton et al. Kernel-as-a-service: A serverless interface to gpus
US20200167188A1 (en) Off-the-shelf software component reuse in a cloud computing environment
US10409762B2 (en) Remote direct memory access-based on static analysis of asynchronous blocks
WO2023056793A1 (en) Optimizing a just-in-time compilation process
US11656888B2 (en) Performing an application snapshot using process virtual machine resources
US20230136606A1 (en) Sharing global variables between addressing mode programs
US11163603B1 (en) Managing asynchronous operations in cloud computing environments
US11263130B2 (en) Data processing for allocating memory to application containers
US20200293299A1 (en) Optimizing updates to distributed data processing applications
US11194612B2 (en) Selective code segment compilation in virtual machine environments
CN112148935B (zh) 用于多实例的nbmp功能执行的方法和装置
KR20240057769A (ko) 관리형 쿠버네티스 서비스 장치 및 동적 스토리지 프로비저닝 방법
CN116457755A (zh) 配置容器中的硬件多线程

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230323

RD16 Notification of change of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7436

Effective date: 20230512

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240123