(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-23
(54)【発明の名称】ジャストインタイムコンパイルプロセスの最適化
(51)【国際特許分類】
G06F 9/445 20180101AFI20241016BHJP
G06F 11/30 20060101ALI20241016BHJP
G06F 11/34 20060101ALI20241016BHJP
【FI】
G06F9/445 130
G06F11/30 140C
G06F11/34 109
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024520595
(86)(22)【出願日】2022-08-24
(85)【翻訳文提出日】2024-04-03
(86)【国際出願番号】 CN2022114440
(87)【国際公開番号】W WO2023056793
(87)【国際公開日】2023-04-13
(32)【優先日】2021-10-07
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】マネ、アミット エス.
(72)【発明者】
【氏名】プナティル、ギレーシュ
(72)【発明者】
【氏名】ミトラ、スマン
【テーマコード(参考)】
5B042
5B376
【Fターム(参考)】
5B042MA08
5B042MA14
5B376AC13
(57)【要約】
ジャストインタイム(JIT)コンパイルプロセスを最適化する手法が提供される。コンテナオーケストレーションされた実行環境におけるソースポッドが、飽和したと決定される。JITコンパイラからのプロファイルデータ、仮想マシン状態、及びネイティブコンパイル済みコード状態が収集される。プロファイルデータ、仮想マシン状態、及びネイティブコンパイル済みコード状態は、永続的データレポジトリにおけるデータ構造において記憶される。ソースポッド及びソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、ソースポッドが飽和した後にアプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、記憶されたプロファイルデータ、仮想マシン状態及びネイティブコンパイル済みコード状態が新たなターゲットポッドにおいて再使用される。
【特許請求の範囲】
【請求項1】
コンピュータシステムであって、
中央処理ユニット(CPU);
前記CPUに結合されたメモリ;及び
前記CPUに結合された1つ又は複数のコンピュータ可読記憶媒体
を備え、前記1つ又は複数のコンピュータ可読記憶媒体は、ジャストインタイム(JIT)コンパイルプロセスを最適化する方法を実装するために前記メモリを介して前記CPUによって実行される命令を集合的に含み、前記方法は、
前記コンピュータシステムが、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する段階;
前記ソースポッドが飽和したと決定されていることに応答して、前記コンピュータシステムが、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する段階;
前記コンピュータシステムが、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する段階;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記コンピュータシステムが、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する段階
を含む、コンピュータシステム。
【請求項2】
前記仮想マシンの前記状態に関する前記情報を収集する前記段階は、
前記コンピュータシステムが、Java(登録商標)ヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する段階
を含む、請求項1に記載のコンピュータシステム。
【請求項3】
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記段階は、
前記コンピュータシステムが、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する段階
を含む、請求項1に記載のコンピュータシステム。
【請求項4】
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記段階は、
前記コンピュータシステムが、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する段階;
前記コンピュータシステムが、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する段階;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する段階;
前記コンピュータシステムが、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する段階;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する段階
を含む、請求項1に記載のコンピュータシステム。
【請求項5】
前記方法は、
前記コンピュータシステムが、一定の時間間隔でアラームを検出する段階;及び
前記アラームを検出する前記段階に応答して、前記コンピュータシステムが、タイマハンドラコードを実行する段階
を更に備え、前記実行する段階は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する段階;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関する前記データを記憶する段階;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する段階;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する段階
を有する、請求項1に記載のコンピュータシステム。
【請求項6】
タイマハンドラメソッドを実行する前記段階は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする段階
を更に有する、請求項5に記載のコンピュータシステム。
【請求項7】
前記方法は、
前記コンピュータシステムが、前記検出されたアラームの時点で前記アプリケーションにおけるそれぞれのメソッドのコンパイルレベルを決定する段階
を更に含み、
所与のメソッドの所与のコンパイルレベルが、前記所与のメソッドがいかに頻繁に実行されるのかを示し、
前記タイマハンドラコードを実行する前記段階は、
前記コンパイルレベルをキャプチャし、前記永続的データレポジトリに前記コンパイルレベルを記憶する段階;及び
前記コンパイルレベルを集約することによって前記ソースポッドのための前記最適化スコアを計算する段階
を更に有する、請求項6に記載のコンピュータシステム。
【請求項8】
ジャストインタイム(JIT)コンパイルプロセスを最適化するコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1つ又は複数のコンピュータ可読記憶媒体上で集合的に記憶されたコンピュータ可読プログラムコードを有する前記1つ又は複数のコンピュータ可読記憶媒体
を備え、前記コンピュータ可読プログラムコードは、コンピュータシステムに方法を実行させるために前記コンピュータシステムの中央処理ユニット(CPU)によって実行され、前記方法は、
前記コンピュータシステムが、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する手順;
前記ソースポッドが飽和したと決定されていることに応答して、前記コンピュータシステムが、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する手順;
前記コンピュータシステムが、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する手順;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記コンピュータシステムが、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する手順
を含む、コンピュータプログラム製品。
【請求項9】
前記仮想マシンの前記状態に関する前記情報を収集する前記手順は、
前記コンピュータシステムが、Javaヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する手順
を含む、請求項8に記載のコンピュータプログラム製品。
【請求項10】
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記手順は、
前記コンピュータシステムが、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する手順
を含む、請求項8に記載のコンピュータプログラム製品。
【請求項11】
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記手順は、
前記コンピュータシステムが、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する手順;
前記コンピュータシステムが、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する手順;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する手順;
前記コンピュータシステムが、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する手順;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する手順
を含む、請求項8に記載のコンピュータプログラム製品。
【請求項12】
前記方法は、
前記コンピュータシステムが、一定の時間間隔でアラームを検出する手順;及び
前記アラームを検出する前記手順に応答して、前記コンピュータシステムが、タイマハンドラコードを実行する手順
を更に含み、前記実行する手順は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する手順;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関するデータを記憶する手順;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する手順;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する手順
を含む、請求項8に記載のコンピュータプログラム製品。
【請求項13】
タイマハンドラメソッドを実行する前記手順は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする手順
を更に含む、請求項12に記載のコンピュータプログラム製品。
【請求項14】
前記方法は、
前記コンピュータシステムが、前記検出されたアラームの時点で前記アプリケーションにおけるそれぞれのメソッドのコンパイルレベルを決定する手順
を更に含み、
所与のメソッドの所与のコンパイルレベルが、前記所与のメソッドがいかに頻繁に実行されるのかを示し、
前記タイマハンドラコードを実行する前記手順は、
前記コンパイルレベルをキャプチャし、前記永続的データレポジトリに前記コンパイルレベルを記憶する手順;及び
前記コンパイルレベルを集約することによって前記ソースポッドのための前記最適化スコアを計算する手順
を更に含む、請求項13に記載のコンピュータプログラム製品。
【請求項15】
コンピュータ実装方法であって、
1つ又は複数のプロセッサによって、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する段階;
前記ソースポッドが飽和したと決定されていることに応答して、前記1つ又は複数のプロセッサによって、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する段階;
前記1つ又は複数のプロセッサによって、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する段階;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記1つ又は複数のプロセッサによって、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する段階
を備える、方法。
【請求項16】
前記仮想マシンの前記状態に関する前記情報を収集する前記段階は、
前記1つ又は複数のプロセッサによって、Javaヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する段階
を有する、請求項15に記載の方法。
【請求項17】
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記段階は、
前記1つ又は複数のプロセッサによって、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する段階
を有する、請求項15に記載の方法。
【請求項18】
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記段階は、
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する段階;
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する段階;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する段階;
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する段階;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する段階
を有する、請求項15に記載の方法。
【請求項19】
前記方法は、
前記1つ又は複数のプロセッサによって、一定の時間間隔でアラームを検出する段階;及び
前記アラームを検出する前記段階に応答して、前記1つ又は複数のプロセッサによって、タイマハンドラコードを実行する段階
を更に備え、前記実行する段階は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する段階;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関する前記データを記憶する段階;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する段階;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する段階
を備える、請求項15に記載の方法。
【請求項20】
タイマハンドラメソッドを実行する前記段階は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする段階
を更に有する、請求項19に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンテナオーケストレーション実行環境における性能管理に関し、より具体的には、コンテナオーケストレーションされた実行環境においてジャストインタイム(JIT)コンパイルプロセスを最適化することに関する。
【背景技術】
【0002】
コンテナ技術及びクラウドプラットフォーム、例えば、Kubernetes(登録商標)コンテナオーケストレーションシステムは、オートスケーラブルでかつ自己修復し、既製のロードバランシングを採用する多くのソフトウェアアプリケーションシステムのための道を拓いてきた。Kubernetesは、カリフォルニア州サンフランシスコ所在のLinux Foundationの登録商標である。従来のソフトウェアエンジニアリング技法及び技術は、Kubernetesプラットフォーム等のクラウドプラットフォームにおいて展開されるソフトウェアアプリケーションに利用可能なアウトオブザボックス機能を使用することによって改善しており、ここで、当該機能は、例えば、オートスケーリング、高可用性、自己修復、及び自動化ロールアウトを含む。さらに、クラウドプラットフォームにおける展開は、ソフトウェアアプリケーションにおける幾つかの要素(例えば、Java(登録商標)アプリケーション及びサービススタックにおける要素)を最適化することを可能にする。Javaは、カリフォルニア州レッドウッドショアーズ所在のOracle America,Inc.社の登録商標である。
【0003】
典型的なJava(登録商標)アプリケーションでは、コードの小さいサブセットのみが頻繁に実行され、アプリケーションの性能は、主にその小さいサブセットにおけるコードのセクションがいかに高速に実行されるかに依存する。コードのこれらのセクションは、ホットスポット又はホットコードとして知られている。仮想マシンがJavaアプリケーションを実行する場合、それは、コードを即座にコンパイルすることを開始しない。Java(登録商標)アプリケーションにおけるコードが一度のみ実行されることになる場合、コンパイルが非効率な手法である。コードをコンパイル及び一度のみ実行することと比較してJava(登録商標)バイトコードを解釈することがより高速である。コードが多くの反復で実行される頻繁に呼び出されるメソッド又はループである場合、コンパイルは価値がある。コードをコンパイルするために要するサイクルより、より高速なコンパイル済みコードの複数の実行による節約が上回る。
【発明の概要】
【0004】
1つの実施形態では、本発明は、中央処理ユニット(CPU)、CPUに結合されたメモリ、及びCPUに結合された1つ又は複数のコンピュータ可読記憶媒体を備えるコンピュータシステムを提供する。1つ又は複数のコンピュータ可読記憶媒体は、ジャストインタイム(JIT)コンパイルプロセスを最適化する方法を実装するためにメモリを介してCPUによって実行される命令を集合的に含む。方法は、コンピュータシステムが、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する段階を備える。方法は、ソースポッドが飽和したと決定されていることに応答して、コンピュータシステムが、JITコンパイラからのプロファイルデータ、ソースポッドの仮想マシンの状態に関する情報、及び仮想マシンのネイティブコンパイル済みコード状態を収集する段階を更に備える。方法は、コンピュータシステムが、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、収集されたプロファイルデータ、ソースポッドの仮想マシンの状態に関する収集された情報、及び仮想マシンの収集されたネイティブコンパイル済みコード状態を記憶する段階を更に備える。方法は、ソースポッド及びソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、コンピュータシステムが、ソースポッドが飽和することに後続してアプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、記憶されたプロファイルデータ、ソースポッドの仮想マシンの状態に関する記憶された情報、及び仮想マシンの記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する段階を更に備える。
【0005】
上記で要約されたコンピュータシステムに対応するコンピュータプログラム製品及び方法も、本明細書において説明及び特許請求される。
【図面の簡単な説明】
【0006】
【
図1】本発明の実施形態に係る、コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化するシステムのブロック図である。
【0007】
【
図2】本発明の実施形態に係る、コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化するプロセスのフローチャートである。
【0008】
【
図3】本発明の実施形態に係る、
図2のプロセスに含まれる最適化再使用プロセスのフローチャートである。
【0009】
【
図4】本発明の実施形態に係る、
図2のプロセスに含まれる最適化データトランスポートプロセスのフローチャートである。
【0010】
【
図5】本発明の実施形態に係る、
図1のシステムに含まれ、かつ
図2、
図3、及び
図4のプロセスを実装するコンピュータのブロック図である。
【0011】
【
図6】本発明の実施形態に係るクラウドコンピューティング環境を示す図である。
【0012】
【
図7】本発明の実施形態に係る抽象化モデル層を示す図である。
【発明を実施するための形態】
【0013】
[概略]
コンテナ化されたJava(登録商標)アプリケーション又はクラウドプラットフォームにおいて展開される、ポリグロットランタイムの上で実行されるアプリケーションの場合、アプリケーションをホストするコンテナ及びポッドは、或る期間にわたって複数回展開及び再利用される。上述された複数回の展開及び再利用の理由は、ロールアウト、到来する負荷に基づくオートスケーリング、及びコンテナ又はポッドの突然のクラッシュを含む。ポッドが新たに開始される場合、Java(登録商標)Virtual Machine(JVM(登録商標))を含むアプリケーションスタック全体が新たに開始する。JVMは、Oracle America,Inc社の登録商標である。アプリケーションスタックの一部であるJVM(登録商標)システム及びJITコンパイラ等の専門サブシステムは、アプリケーションが実行されている間に経時的にかなりの量の洞察を収集する。これらの洞察は、動作を最適化するのに使用される。例えば、JITコンパイラは、Javaアプリケーションの実行パターンをモニタリングして、アプリケーションにおけるホットコード(すなわち、指定される閾値量を超える頻度で実行される、アプリケーションにおけるメソッド及び/又はループ)を識別する。JITコンパイラは、ホットコードエリアが同じコードの解釈されたバージョンと比較してより高速に実行されるようにホットコードをネイティブ形式にコンパイルすることによって、ホットコードを最適化する。ホットコードエリアの識別及びより良好な性能のためにホットコードを最適化することは、連続プロセスである。JITコンパイラ及びJVM(登録商標)システムは、アプリケーションのライフタイム全体を通して上述のホットスポット識別及び最適化タスクの実行を継続し、それによって、アプリケーションのライフタイムにわたるアプリケーションの性能が改善する。JVM(登録商標)システム及びJITコンパイラが、クラウドプラットフォームオーケストレータによってトリガされた際に、又はポッド又はコンテナクラッシュに起因して、シャットダウンされると、JITコンパイラによって収集された洞察は失われる。ポッド又はコンテナが再起動又は再展開すると、スタック全体がゼロから起動され、それによって、ホットコードを識別及び最適化する同じプロセスの時間がかかる繰り返しが要求される。
【0014】
JITコンパイラは、かなりの量の時間にわたってアプリケーションを実行し、実行パターンをモニタリングしてホットコードエリアを決定することに基づいてアプリケーションのコードのコンパイルを最適化する。JITコンパイラは、JVM(登録商標)システムにおける次の2つのカウンタを使用することによって最適化のための情報を収集する:メソッドが呼び出された回数及びメソッドにおける任意のループが分岐して戻った回数。分岐して戻ることは、ループの終端に達したため又は分岐文が実行されたためのいずれかで、ループが実行を完了した回数を示している。アプリケーション及びJVM(登録商標)システムがシャットダウンすると、上述の最適化のための情報は失われる。
【0015】
本発明の実施形態は、ポッド又はコンテナの再起動又は再展開、又はアプリケーションシャットダウンに関連した上述の特有の課題に対処する。1つの実施形態では、JITコンパイル最適化システムは、JITコンパイラによって収集された、アプリケーションにおけるホットコード及びコンテナオーケストレーションシステムにおける他のアプリケーション最適化特性に関する洞察を維持する。1つの実施形態では、これらの洞察は、外部で記憶され、Java(登録商標)ヒープ、クラスローディング、及びネイティブコンパイル済みコード構造とともに、プラットフォームに依存しない態様を含む。コンテナ又はポッドが再起動又は再展開されると、維持された洞察は、コンテナ又はポッドの新たなインスタンスによって再使用され、それによって、アプリケーションにおけるホットコードエリアをモニタリング及び識別する同じプロセスの時間がかかる繰り返しが回避される。その代わりに、JITコンパイラは、維持された洞察を再使用し、維持されたデータにおいてリストされたホットコードエリアのコンパイルを開始する。アプリケーションは、再起動又は再展開の後で同じままであるので、アプリケーションコードの実行パターンも同じままである。アプリケーションの以前の実行からのホットコードエリアに関する詳細の再使用は、インスタンスの再起動が一般的である、Kubernetes(登録商標)プラットフォーム等のクラウドプラットフォームにおいてアプリケーションの性能を大幅に改善する。ポッド及び再起動するポッド上で実行されるアプリケーションに応答して、本発明の実施形態は、ホットコードエリアをモニタリング及び識別する段階、及び次に識別されたホットコードをコンパイルする段階を繰り返す際に重要なCPUを浪費することなく、JITコンパイラがホットコードエリアのコンパイルを即座に開始することを可能にする。
【0016】
本発明の実施形態は、クラスタトポロジにおける仮想マシン及び実際のマシンにわたるアプリケーション最適化洞察を再使用する。本発明の実施形態は、アプリケーション最適化の洞察を再使用するためにシリアライゼーションを採用する。1つの実施形態では、JITコンパイル最適化システムは、完全に最適化されたソースシステムから最適化されたコード及び最適化に関連するメタデータを導出し、導出されたコード及びメタデータをシリアライズされた方式でターゲットシステムにトランスポートする。本発明の実施形態は、ソースシステムの洞察に基づいてターゲットシステムのオブジェクトヒープサイジングを調整する。
【0017】
本発明の実施形態は、所与のレベルにおけるシステムの特定の状態が所与のレベルを下回るレベルに関連する最適化のアプリケーションを示唆するように階層的方式に基づいて、複数の最適化(例えば、クラス階層解析、脱仮想化技法等)を調整する。
【0018】
本発明の実施形態は、ソースシステムにおけるJITコンパイルから収集された洞察を使用し、コンテナオーケストレーションされたクラスタ内のレプリカセットにおけるターゲットシステムにおける洞察を採用し、これは、システムが同一であること、ワークロードが同一であること、及びソースシステムにおける洞察の大半がターゲットシステムにおいて適用可能であることに基づく。
【0019】
本発明の実施形態は、ターゲットシステムがソースシステムに対して有するアフィニティのレベルに基づいて洞察の一部分を与えるように、洞察及びそれらデータキャプチャを階層的に編成する。本発明の実施形態は、システム間で洞察に関連するデータをトランスポートする。
【0020】
本発明の実施形態は、飽和した実行環境からの性能最適化を新たに作成された実行の発明に与え、ここで、(i)性能最適化は、動的コンパイラ最適化、仮想マシンの状態、及び仮想メモリ特性を含むが、これらに限定されるものではなく;(ii)環境の飽和がアプリケーションコードが十分に最適化される仮想マシンの状態であり、(iii)実行環境が、分散コンピューティングノードであり、(iv)コンピューティングノードがコンテナオーケストレーションシステムにおけるレプリカセットのユニットである。
【0021】
本発明の実施形態は、階層的技法を使用して上述の性能最適化を与え、ここで、(i)最適化機会が階層的に分類され、(ii)階層が異種の実行環境における最適化のタイプの適用可能性に基づいて定義され、(iii)適用可能性が実行環境の類似の属性の比較に基づいて判断され、(iv)最適化が、適用可能性が存在する場合には適用され、適用可能性が存在しない場合には破棄され、これは、環境間の最適化の付与の最大化をもたらす。
JITコンパイルプロセスを最適化するシステム
【0022】
図1は、本発明の実施形態に係る、コンテナオーケストレーション実行環境においてJITコンパイルプロセスを最適化するシステム100のブロック図である。システム100は、JITコンパイルプロセスを最適化するソフトウェアベースコンパイルプロセス最適化システム104を有するコンピュータ102を備える。コンパイルプロセス最適化システム104は、クラスタ最適化マネージャ(COM)106を含み、これは、JITコンパイルプロセスを最適化することに関連した意思決定プロセス及びデータフローを調整する。
【0023】
システム100は、ソフトウェアベースランタイムエージェント108を備え、これは、JITコンパイルプロセスを最適化することに関連したサブジェクトランタイム及びデータフローに対する制御判断を調整し、かつCOM106と連携して機能する。
【0024】
COM106は、ポッド110-1、…、ポッド110-Nと通信し、ここで、Nは、1よりも大きいか又はこれに等しい整数である。ポッド110-1、…、110-Nは、飽和ポッドである。飽和ポッドは、本明細書においてソースポッドとも称される。本明細書において使用される場合、飽和ポッドは、JITコンパイラがポッドのメソッドの総数の一部分を最適化済みにするように十分な時間量にわたってワークロードを実行したポッドとして定義され、ここで、当該一部分は、指定される閾値量を超えている。ポッドは、コンテナオーケストレーションされた実行環境の基本スケジューリングユニットであり、1つ又は複数のコンテナ(例えば、Dockerコンテナ)を含み、クラスタにおける実行プロセスの単一のインスタンスを表す。
【0025】
コンパイルプロセス最適化システム104は、コンパイラのアプリケーションプログラミングインターフェース(API)を介してリクエストすることによって、又は現在のコンパイルパターンを検査することによって、飽和ポッドであるポッドを識別する。各ランタイムエージェント108は、基礎をなす仮想マシン(図示せず)と通信して、コンパイル済みコードの状態に関する情報を取得する。
【0026】
ポッド110-1、…、110-Nは、データレポジトリ112(すなわち、永続的ボリューム)における事前定義されたデータ構造(図示せず)の次の情報を記憶する:(1)JITコンパイラからのプロファイルデータ(すなわち、ダイナミックコンパイラのランタイムプロファイル情報)、(2)ポッドの仮想マシンの状態に関する情報(すなわち、ポッドの実行環境)、(3)仮想マシンのネイティブコンパイル済みコード状態(すなわち、仮想マシンのコンパイル済みコード特性)、及び(4)上記でリストされた(1)、(2)、及び(3)における情報からの拡張されたデータ。
【0027】
COM106は、飽和ポッド110-1、…、110-Nのうちの1つをリスポーンした結果である新たなポッド114(本明細書において新たなターゲットポッドとも称される)とも通信する。ランタイムシステムは、上述のプロファイルデータ、実行環境情報、及び事前定義されたデータ構造におけるコンパイル済みコード情報をデータレポジトリ112から取り出して、新たなポッド114におけるホットコードエリアを識別及び最適化するプロセスを必要とすることなく、新たなポッド114においてその情報を再使用する。
【0028】
COM106は、一定の時間間隔でタイマハンドラコードを実行するアラーム116を含む。タイマハンドラコードの実行は、上述の事前定義されたデータ構造における情報をキャプチャ及び記憶する。
【0029】
図1において示されているコンポーネントの機能は、以下で提示される
図2、
図3、
図4、
図5、
図6、及び
図7の論述においてより詳細に説明される。
JITコンパイルプロセスを最適化するプロセス
【0030】
図2は、本発明の実施形態に係る、コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化するプロセスのフローチャートである。
図2のプロセスは、開始ノード200において開始する。段階202において、コンパイルプロセス最適化システム104(
図1を参照)は、コンテナオーケストレーションされた実行環境におけるソースポッド(すなわち、
図1におけるポッド110-1、…、110-Nのうちの1つ)が飽和したと決定する。
【0031】
段階204において、段階202においてソースポッドが飽和したと決定することに応答して、コンパイルプロセス最適化システム104(
図1を参照)は、JITコンパイラからのプロファイルデータ、ソースポッドの仮想マシンの状態に関する情報、及び仮想マシンのネイティブコンパイル済みコード状態を収集する。
【0032】
1つの実施形態では、ソースポッドの仮想マシンの状態に関する情報は、Java(登録商標)ヒープのサイズ、コンパイル済みコードヒープのサイズ、ロードされたクラスローダ、及びロードされたクラス(すなわち、クラスのロードされた状態)等の情報を含む。
【0033】
1つの実施形態では、仮想マシンのネイティブコンパイル済みコード状態は、コンパイル済みコードキャッシュ、コンパイル済みコードキャッシュに対応するメソッド及びクラス、及びメソッド及びクラスがロードされる仮想アドレス範囲を含む。例えば、仮想マシンのネイティブコンパイル済みコード状態は、UNIX(登録商標)システムpmapコマンドからの出力を含む。UNIXは、英国バークシャー州レディング所在のThe Open Group社の登録商標である。
【0034】
段階206において、コンパイルプロセス最適化システム104(
図1を参照)は、永続的メモリ又は永続的ボリューム(すなわち、データレポジトリ112(
図1を参照))に、明確に定義されたデータ構造及び階層的方式において、(i)プロファイルデータ、(ii)仮想マシンの状態に関する情報、及び(iii)仮想マシンのネイティブコンパイル済みコード状態を記憶する。データ構造は変更可能かつシリアライズ可能であり、別の実行環境において再構築され得るので、データ構造は明確に定義されている。上記でリストされた(i)、(ii)、及び(iii)の記憶は、データの各セットがその関連性及びコンテキストに基づいて新たなポッドにおいて別個に使用されるので、階層的方式で行われる。データレポジトリ112(
図1を参照)は、飽和ポッドがリサイクルされる場合に情報が失われないという点で永続的である。
【0035】
段階208において、ソースポッド及びソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、コンパイルプロセス最適化システム104(
図1を参照)は、再起動又は再展開の後にアプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、プロファイルデータ、仮想マシンの状態に関する情報、及び仮想マシンのネイティブコンパイル済みコード状態を新たなターゲットポッド(すなわち、
図1における新たなポッド114)において再使用する。
【0036】
図2のプロセスは、終了ノード210において終了する。
【0037】
図3は、本発明の実施形態に係る、
図2のプロセスに含まれる最適化再使用プロセスのフローチャートである。
図3のプロセスは、開始ノード300において開始する。段階302において、コンパイルプロセス最適化システム104のランタイムシステム(
図1を参照)は、新たなターゲットポッド(すなわち、
図1における新たなポッド114)の新たな仮想マシンにおける変更を伴うことなく、ソースポッド(すなわち、
図1におけるポッド110-1、…、110-Nのうちの1つ)のプロファイルデータを適用する。(すなわち、新たにブートアップされたポッド)。段階302におけるプロファイルデータのアプリケーションは、メソッドのためのコンパイルプランを定義する。プロファイルデータは、メソッドのホットネスにのみ焦点を当てている代わりに、任意の特定の実行環境及びプラットフォームの特異性から独立している。
【0038】
段階304において、コンパイルプロセス最適化システム104(
図1を参照)は、新たなターゲットポッドの実行環境がソースポッドの実行環境に合致する(すなわち、これに相当する)と決定する。
【0039】
段階306において、段階304において新たなターゲットポッドの実行環境がソースポッドの実行環境に合致すると決定することに応答して、コンパイルプロセス最適化システム104(
図1を参照)は、新たなターゲットポッドの新たな仮想マシンに仮想マシンの状態に関する情報を適用する。例えば、新たなターゲットポッドのメモリ容量がソースポッドのメモリ容量に等しいか又はこれよりも高くなる場合、コンパイルプロセス最適化システム104(
図1を参照)は、適切なアライメントルールが適用される状態で、Java(登録商標)ヒープが実行環境プロファイルデータにおいて記録されたものであると指定する。同様に、新たなターゲットポッドのためのクラスのロードされた状態及びクラスローダがソースポッドのものと同じである場合、クラス階層に対して適用可能である更なる最適化がメタデータから再使用される。そのような最適化の例としては、クラス階層解析最適化及びメソッド脱仮想化最適化が挙げられる。
【0040】
段階308において、コンパイルプロセス最適化システム104(
図1を参照)は、新たなターゲットポッドにおける仮想マッピングの状態及び割り当てられたマシンコードのロケーションがソースポッドにおける仮想マッピングの状態及びコードのロケーション(すなわち、ソースポッドの仮想マシンのネイティブコンパイル済みコード状態)に合致する(すなわち、これに相当する)と決定する。
【0041】
段階310において、段階308において新たなターゲットポッドにおける仮想マッピングの状態及び割り当てられたマシンコードのロケーションがソースポッドにおける仮想マッピングの状態及びコードのロケーションに合致すると決定することに応答して、コンパイルプロセス最適化システム104(
図1を参照)は、新たなターゲットポッドにおける同じロケーションにおいて、ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する。例えば、コンパイル済みコードセクションは、ソースポッド及び新たなターゲットポッドにおける仮想アドレス0x7fffffff00000000において開始し、任意メソッドFoo.foo()のコンパイル済みコードは、ロケーション0x7fffffff10000000に記憶され、次に、コンパイルプロセス最適化システム104(
図1を参照)は、新たなターゲットポッドにおける同じロケーションにおいて、同じコンパイル済みコードを記憶し、あたかもコードが新たなターゲットポッドにおいてコンパイルされたかのように新たなターゲットポッドにおいて同じコンパイル済みコードを再使用する。
【0042】
図3のプロセスは、終了ノード312において終了する。1つの実施形態では、
図3のプロセスは、
図2における段階202、204、及び206に続く。
【0043】
図4は、本発明の実施形態に係る、
図2のプロセスに含まれる最適化データトランスポートプロセスのフローチャートである。
図4のプロセスは、開始ノード400において開始する。段階402において、アラーム116(
図1を参照)は、一定の時間間隔でアクティベートされる(すなわち、コンパイルプロセス最適化システム104(
図1を参照)は、一定の時間間隔でタイマのアラームを検出する)。アラーム116(
図1を参照)のアクティベーションは、以下で説明されるように段階404,406、408、410、及び412でタイマハンドラコードを実行する。
【0044】
段階404において、コンパイルプロセス最適化システム104(
図1を参照)は、プロファイルデータをキャプチャし、アプリケーションのメソッドがキーであり、かつプロファイルデータが値であるプロファイルデータ構造においてプロファイルデータを記憶する。プロファイルデータが既に存在する場合、既存のプロファイルデータが新たなプロファイルデータで更新される。
【0045】
段階406において、コンパイルプロセス最適化システム104(
図1を参照)は、ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において実行環境に関するキャプチャされたデータを記憶する。実行環境に関するデータの第1のキャプチャの後に、環境データ構造が、必要に応じて後続のインスタンスにおいて更新される。幾つかのアイテムは変化しないままである場合があり(例えば、ロードされたクラス)、一方、他のアイテムは変化している場合がある(例えば、管理されたヒープ)。
【0046】
段階408において、コンパイルプロセス最適化システム104(
図1を参照)は、JITコンパイラによってコンパイルされたコード、及びキャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、キャプチャされたコード及びキャプチャされたコードの仮想メモリアドレスへのマッピングをコードデータ構造において記憶する。
【0047】
コンパイル済みコードは、アプリケーションの各メソッドのコンパイルレベル(すなわち、コンパイルインテンシティ又はコンパイル度;例えば、コールド、ウォーム、ホット等)も含む。コンパイルプロセス最適化システム104(
図1を参照)は、コンパイル済みコードの程度にわたってアグリゲーションを実行して、アラーム実行の所与のインスタンスにおいてポッドのための最適化スコア又は最適化インデックスを取得する。最適化スコアが以前のインスタンスにおいて既に取得されている場合、既存のスコアが更新される。
【0048】
段階410において、コンパイルプロセス最適化システム104(
図1を参照)は、プロファイルデータ構造、環境データ構造、及びコードデータ構造におけるデータを単一の拡張された構造に拡張する。
【0049】
段階412において、コンパイルプロセス最適化システム104(
図1を参照)は、単一の拡張されたデータ構造における拡張されたデータをデータレポジトリ112(
図1を参照)に、ソースポッドの識別子及びソースポッドのための最適化スコアとともに、シリアライズする。
【0050】
図4のプロセスは、終了ノード414において終了する。
【0051】
1つの実施形態では、新たなポッドがスポーンされる場合、クラスタ最適化マネージャ106(
図1を参照)は、データレポジトリ112(
図1を参照)におけるデータにわたって反復し、データをデシリアライズしてインメモリ構造にする。COM106(
図1を参照)は、各レコードからの最適化スコアにわたって反復し、最大スコアを決定する。COM106(
図1を参照)は、データ要素を、それ自体の範囲内にあるもの、及びランタイムエージェント108(
図1を参照)に渡される必要があるものに分離させる。COM106(
図1を参照)は、抽出されたデータを使用して、同一化を実行する。例えば、COM106(
図1を参照)は、メモリに固有な実行環境データを使用して、ポッドを初期化する。COM106(
図1を参照)は他のデータをランタイムエージェント108(
図1を参照)に渡し、これは、データを使用してランタイムを最適化する。
コンピュータシステム
【0052】
図5は、本発明の実施形態に係る、
図1のシステムに含まれ、かつ
図2、
図3、及び
図4のプロセスを実装するコンピュータのブロック図である。コンピュータ102は、概して中央処理ユニット(CPU)502、メモリ504、入力/出力(I/O)インターフェース506、及びバス508を備えるコンピュータシステムである。さらに、コンピュータ102は、I/Oデバイス510及びコンピュータデータ記憶ユニット512に結合される。CPU502は、コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化する方法を実行するためにコンパイルプロセス最適化システム104(
図1を参照)のためのプログラムコード514に含まれる命令を実行することを含む、コンピュータ102の計算及び制御機能を実行し、ここで、命令は、メモリ504を介してCPU502によって実行される。CPU502は、単一の処理ユニット又はプロセッサを含んでもよいし、又は1つ又は複数のロケーションにおける(例えば、クライアント及びサーバ上の)1つ又は複数の処理ユニット又は1つ又は複数のプロセッサにわたって分散されてもよい。
【0053】
メモリ504は、以下で説明される既知のコンピュータ可読記憶媒体を含む。1つの実施形態では、メモリ504のキャッシュメモリ要素は、プログラムコードの命令が実行されている間にコードがバルクストレージから取り出されなければならない回数を削減するために、少なくとも何らかのプログラムコード(例えば、プログラムコード514)の一時的記憶を提供する。その上、CPU502と同様に、1つ又は複数のタイプのデータストレージを含むメモリ504は、単一の物理ロケーションに存在してもよいし、又は様々な形態における複数の物理システム又は複数のコンピュータ可読記憶媒体にわたって分散されてもよい。さらに、メモリ504は、例えば、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)にわたって分散されたデータを含むことができる。
【0054】
I/Oインターフェース506は、外部リソースに対して情報を交換するための任意のシステムを含む。I/Oデバイス510は、ディスプレイ、キーボード等を含む任意の既知のタイプの外部デバイスを含む。バス508は、コンピュータ102におけるコンポーネントの各々間で通信リンクを提供し、電気、光学、ワイヤレス等を含む任意のタイプの送信リンクを含んでよい。
【0055】
I/Oインターフェース506は、コンピュータ102が情報(例えば、プログラムコード514等のデータ又はプログラム命令)をコンピュータデータ記憶ユニット512又は別のコンピュータデータ記憶ユニット(図示せず)上に記憶し、かつこれから情報を取り出すことも可能にする。コンピュータデータ記憶ユニット512は、1つ又は複数の既知のコンピュータ可読記憶媒体を含み、ここで、コンピュータ可読記憶媒体は、以下で説明される。1つの実施形態では、コンピュータデータ記憶ユニット512は、例えば、ソリッドステートドライブ(SSD)、ネットワークアタッチトストレージ(NAS)アレイ、ストレージエリアネットワーク(SAN)アレイ、磁気ディスクドライブ(すなわち、ハードディスクドライブ)、又は光学ディスクドライブ(例えば、CD-ROMディスクを受け取るCD-ROMドライブ又はDVDディスクを受け取るDVDドライブ)等の不揮発性データ記憶デバイスである。
【0056】
メモリ504及び/又は記憶ユニット512は、メモリ504を介してCPU502によって実行される命令を含むコンピュータプログラムコード514を記憶して、コンテナ編成実行環境においてJITコンパイルプロセスを最適化してよい。
図5はプログラムコードを含むものとしてメモリ504を示しているが、本発明は、メモリ504がコード514の全てを同時に含むのではなく、代わりに一度にコード514の一部分のみを含む実施形態を企図する。
【0057】
さらに、メモリ504は、オペレーティングシステム(図示せず)を含んでよく、
図5において示されていない他のシステムを含んでよい。
【0058】
当業者によって理解されるように、第1の実施形態では、本発明は、方法であってよく;第2の実施形態では、本発明は、システムであってよく;第3の実施形態では、本発明は、コンピュータプログラム製品であってよい。
【0059】
本発明の一実施形態のコンポーネントのうちの任意のものが、コンテナ編成実行環境においてJITコンパイルプロセスを最適化することに関してコンピューティングインフラストラクチャを展開又は統合することを提供するサービスプロバイダによって、展開、管理、サービス提供等されてよい。それゆえ、本発明の一実施形態は、コンピュータインフラストラクチャをサポートするプロセスを開示し、ここで、プロセスは、1つ又は複数のプロセッサ(例えば、CPU502)を含むコンピュータシステム(例えば、コンピュータ102)においてコンピュータ可読コード(例えば、プログラムコード514)を統合、ホスト、維持及び展開することの少なくとも1つのために少なくとも1つのサポートサービスを提供することを備え、ここで、プロセッサは、コンピュータシステムに、コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化させるコードに含まれる命令を実行する。別の実施形態は、コンピュータインフラストラクチャをサポートするためのプロセスを開示し、ここで、プロセスは、コンピュータ可読プログラムコードを、プロセッサを含むコンピュータシステムに統合することを含む。統合する段階は、プロセッサの使用を介してコンピュータシステムのコンピュータ可読記憶デバイスにプログラムコードを記憶する段階を含む。プログラムコードは、プロセッサによって実行されると、コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化する方法を実装する。
【0060】
コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化するためのプログラムコード514は、コンピュータ可読記憶媒体(例えば、コンピュータデータ記憶ユニット512)をロードすることを介してクライアント、サーバ、及びプロキシコンピュータ(図示せず)に直接手動でロードすることによって展開されてよいことが理解される一方で、プログラムコード514が、プログラムコード514を中央サーバ又は中央サーバのグループに送信することによって自動的に又は半自動的にコンピュータ102に展開されてもよい。プログラムコード514は、次に、プログラムコード514を実行することになるクライアントコンピュータ(例えば、コンピュータ102)にダウンロードされる。代替的には、プログラムコード514は、電子メールを介してクライアントコンピュータに直接送信される。プログラムコード514は、次に、クライアントコンピュータ上のディレクトリにデタッチされるか、又はプログラムコード514をディレクトリにデタッチするプログラムを実行する電子メール上のボタンによってクライアントコンピュータ上のディレクトリにロードされるかのいずれかである。別の代替形態は、クライアントコンピュータハードドライブ上のディレクトリにプログラムコード514を直接送信することである。プロキシサーバが存在するケースでは、プロセスは、プロキシサーバコードを選択し、プロキシサーバのコードをいずれのコンピュータに置くべきかを決定し、プロキシサーバコードを送信し、次に、プロキシコンピュータ上にプロキシサーバコードをインストールする。プログラムコード514は、プロキシサーバに送信され、次に、それは、プロキシサーバ上に記憶される。
【0061】
本発明の別の実施形態は、加入、広告及び/又は手数料ベースでプロセス段階を実行する方法を提供する。すなわち、サービスプロバイダは、コンテナオーケストレーションされた実行環境においてJITコンパイルプロセスを最適化するプロセスを作成、維持、サポートすること等を提供することができる。このケースでは、サービスプロバイダは、1つ又は複数の顧客のためのプロセス段階を実行するコンピュータインフラストラクチャを作成、維持、サポートすること等を行うことができる。代わりに、サービスプロバイダは、加入及び/又は手数料合意の下で顧客からの支払いを受け取ることができ、及び/又はサービスプロバイダは、1つ又は複数のサードパーティに対する広告コンテンツの売り上げからの支払いを受け取ることができる。
【0062】
本発明は、任意の可能な統合の技術的詳細レベルにおけるシステム、方法及び/又はコンピュータプログラム製品であってよい。コンピュータプログラム製品は、プロセッサ(例えば、CPU502)に本発明の態様を実行させるためのコンピュータ可読プログラム命令514を有するコンピュータ可読記憶媒体(又は複数の媒体)(すなわち、メモリ504及びコンピュータデータ記憶ユニット512)を含んでよい。
【0063】
コンピュータ可読記憶媒体は、命令実行デバイス(例えば、コンピュータ102)による使用のための命令(例えば、プログラムコード514)を保持及び記憶することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、又は前述したものの任意の適した組み合わせであってよいが、これらに限定されるものではない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、次のもの:ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROM又はフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピディスク、機械的にエンコードされたデバイス、例えば、パンチカード又は命令を記録した溝内の隆起構造、及び前述したものの任意の適した組み合わせを含む。コンピュータ可読記憶媒体は、本明細書において使用される場合、無線波又は他の自由に伝播する電磁波、導波路又は他の送信媒体を通して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又はワイヤを通して送信される電気信号等の一時的な信号それ自体とは解釈されるべきではない。
【0064】
本明細書において説明されるコンピュータ可読プログラム命令(例えば、プログラムコード514)は、コンピュータ可読記憶媒体から、それぞれのコンピューティング/処理デバイス(例えば、コンピュータ102)に、又は、ネットワーク(図示せず)、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク及び/又はワイヤレスネットワークを介して、外部コンピュータ又は外部記憶デバイス(例えば、コンピュータデータ記憶ユニット512)に、ダウンロードすることができる。ネットワークは、銅送信ケーブル、光送信ファイバ、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ及び/又はエッジサーバを含んでよい。各コンピューティング/処理デバイス内のネットワークアダプタカード(図示せず)又はネットワークインターフェース(図示せず)は、ネットワークからコンピュータ可読プログラム命令を受信し、当該コンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するために転送する。
【0065】
本発明の動作を実行するコンピュータ可読プログラム命令(例えば、プログラムコード514)は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は1つ又は複数のプログラミング言語の任意の組み合わせで記述されたソースコード又はオブジェクトコードのいずれかとすることができ、当該1つ又は複数のプログラミング言語は、Smalltalk(登録商標)、C++等のようなオブジェクト指向プログラミング言語、及び「C」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む。コンピュータ可読プログラム命令は、スタンドアロンソフトウェアパッケージとして、完全にユーザのコンピュータ上で実行されてもよいし、部分的にユーザのコンピュータ上で実行されてもよいし、部分的にユーザのコンピュータ上で、かつ部分的にリモートコンピュータ上で実行されてもよいし、又は、完全にリモートコンピュータ又はサーバ上で実行されてもよい。後者のシナリオでは、リモートコンピュータが、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよいし、又はその接続が、(例えば、インターネットサービスプロバイダを使用するインターネットを介して)外部コンピュータに対して行われてもよい。幾つかの実施形態では、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用することによってコンピュータ可読プログラム命令を実行して、電子回路をパーソナライズしてよい。
【0066】
本発明の態様は、本明細書において、本発明の実施形態に係る方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図(例えば、
図2、
図3、及び
図4)及び/又はブロック図(例えば、
図1及び
図5)を参照して説明されている。フローチャート図及び/又はブロック図の各ブロック、及びフローチャート図及び/又はブロック図におけるブロックの組み合わせは、コンピュータ可読プログラム命令(例えば、プログラムコード514)によって実装することができることが理解されるであろう。
【0067】
これらのコンピュータ可読プログラム命令を汎用コンピュータ、専用コンピュータ、又は他のプログラマブルデータ処理装置(例えば、コンピュータ102)のプロセッサ(例えば、CPU502)に提供して機械を生成することができ、それにより、コンピュータ又は他のプログラマブルデータ処理装置のプロセッサを介して実行される命令が、フローチャート及び/又はブロック図の単数又は複数のブロックで指定された機能/動作を実装する手段を作成するようになる。また、これらのコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体(例えば、コンピュータデータ記憶ユニット512)に記憶されてよく、当該命令は、コンピュータ、プログラマブルデータ処理装置、及び/又は他のデバイスに対し、特定の方法で機能するように命令することができ、それにより、命令を記憶したコンピュータ可読記憶媒体は、フローチャート及び/又はブロック図の単数又は複数のブロックで指定された機能/動作の態様を実装する命令を含む製品を含むようになる。
【0068】
また、コンピュータ可読プログラム命令(例えば、プログラムコード514)を、コンピュータ(例えば、コンピュータ102)、他のプログラマブルデータ処理装置、又は他のデバイスにロードして、一連の動作段階をコンピュータ、他のプログラマブル装置、又は他のデバイス上で実行させ、コンピュータ実装プロセスを生成することができ、それにより、コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行される命令は、フローチャート及び/又はブロック図の単数又は複数のブロックで指定された機能/動作を実装するようになる。
【0069】
図におけるフローチャート及びブロック図は、本発明の様々な実施形態に係るシステム、方法、及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、及び動作を示す。これに関して、フローチャート又はブロック図における各ブロックは、指定される論理機能を実装する1つ又は複数の実行可能命令を含む命令のモジュール、セグメント、又は部分を表し得る。幾つかの代替的な実装では、ブロックに記載される機能が、図に記載される順序とは異なる順序で行われ得る。例えば、連続して示されている2つのブロックは、実際には、1つの段階として実現され、同時に、実質的に同時に、部分的又は全体的に時間重複する方式で実行され得るか、又は、ブロックは、関与する機能に依存して、場合により、逆の順序で実行され得る。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図におけるブロックの組み合わせは、指定される機能又は動作を実行するか、又は専用ハードウェア及びコンピュータ命令の組み合わせを実行する専用ハードウェアベースシステムによって実装することができることにも留意されたい。
【0070】
本発明の実施形態が例示の目的で本明細書において説明されてきたが、当業者には多くの変更及び変化が明らかになるであろう。したがって、添付の特許請求の範囲は、全てのそのような変更及び変化を本発明の範囲内の入るものとして包含するように意図される。
クラウドコンピューティング環境
【0071】
本開示はクラウドコンピューティングに関する詳細な説明を含むが、本明細書において記載される技法の実装はクラウドコンピューティング環境に限定されるものではないことが理解されるべきである。むしろ、本発明の実施形態は、現在既知の、又は、今後開発される他の任意のタイプのコンピューティング環境と組み合わせて実装されることが可能である。
【0072】
クラウドコンピューティングは、最小の管理労力又はサービスプロバイダとのインタラクションで迅速にプロビジョニング及びリリースすることができる構成可能コンピューティングリソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの簡便なオンデマンドネットワークアクセスを可能にするためのサービス提供のモデルである。このクラウドモデルは、少なくとも5つの特性、少なくとも3つのサービスモデル、及び少なくとも4つの展開モデルを含み得る。
【0073】
特性は、以下のとおりである。
【0074】
オンデマンドセルフサービス:クラウド消費者は、サービスプロバイダとの人的対話を必要とすることなく、必要に応じて自動的に、サーバ時間及びネットワークストレージ等のコンピューティング能力を一方的にプロビジョニングすることができる。
【0075】
幅広いネットワークアクセス:この能力は、ネットワークを介して利用可能であり、異種のシン又はシッククライアントプラットフォーム(例えば、携帯電話、ラップトップ、及びPDA(登録商標))による使用を促す標準メカニズムを通してアクセスされる。
【0076】
リソースプーリング:プロバイダのコンピューティングリソースは、マルチテナントモデルを使用して複数の消費者に役立つようプールされ、異なる物理リソース及び仮想リソースが、需要に従って動的に割り当て及び再割り当てされる。消費者は概して提供されたリソースの正確なロケーションに対して制御又は知識を有していないが、より高いレベルの抽象化(例えば、国、州、又はデータセンタ)においてロケーションを指定することが可能である場合があるという点で、ロケーションの独立性がある。
【0077】
迅速な弾力性:この能力は、迅速かつ弾力的に、幾つかの事例では自動的にプロビジョニングして、早急にスケールアウトし、かつ迅速にリリースして早急にスケールインすることができる。消費者にとって、多くの場合、プロビジョニングに利用可能な能力は無制限に見え、任意の時点において任意の量で購入することができる。
【0078】
測定されるサービス:クラウドシステムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅及びアクティブユーザアカウント)に適切な或るレベルの抽象化における計測能力を活用することによって、自動的にリソース使用を制御及び最適化する。リソース使用量をモニタリング、制御及び報告することができ、それにより、利用されるサービスのプロバイダ及び消費者の両方に透明性が提供される。
【0079】
サービスモデルは、以下のとおりである。
【0080】
ソフトウェアアズアサービス(SaaS):消費者に提供される能力は、クラウドインフラストラクチャ上で実行されるプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブブラウザ(例えば、ウェブベース電子メール)等のシンクライアントインターフェースを通して様々なクライアントデバイスからアクセス可能である。消費者は、考えられる例外としての限定されたユーザ固有のアプリケーション構成設定を除き、ネットワーク、サーバ、オペレーティングシステム、ストレージ又は更には個々のアプリケーション能力を含む、基礎をなすクラウドインフラストラクチャを管理又は制御しない。
【0081】
プラットフォームアズアサービス(PaaS):消費者に提供される能力は、クラウドインフラストラクチャ上に、プロバイダによってサポートされるプログラミング言語及びツールを使用して作成される、消費者が作成又は取得したアプリケーションを展開することである。消費者は、ネットワーク、サーバ、オペレーティングシステム、又はストレージを含む、基礎をなすクラウドインフラストラクチャを管理又は制御しないが、展開されたアプリケーション、及び場合によってはアプリケーションホスティング環境構成を制御する。
【0082】
インフラストラクチャアズアサービス(IaaS):消費者に提供される能力は、処理、ストレージ、ネットワーク及び他の基本的なコンピューティングリソースをプロビジョニングすることであり、ここで消費者は、オペレーティングシステム及びアプリケーションを含むことができる任意のソフトウェアを展開及び実行することが可能である。消費者は、基礎をなすクラウドインフラストラクチャを管理又は制御しないが、オペレーティングシステム、ストレージ、展開されたアプリケーションを制御するとともに、場合によっては選択されたネットワーキングコンポーネント(例えば、ホストファイアウォール)を限定的に制御する。
【0083】
展開モデルは、以下のとおりである。
【0084】
プライベートクラウド:このクラウドインフラストラクチャは、或る組織のためにのみ動作する。それは、組織又はサードパーティによって管理されてよく、オンプレミス又はオフプレミスで存在してよい。
【0085】
コミュニティクラウド:このクラウドインフラストラクチャは、幾つかの組織によって共有され、共有される関心事項(例えば、ミッション、セキュリティ要件、ポリシ及びコンプライアンス考慮事項)を有する特定のコミュニティをサポートする。それは、それらの組織又はサードパーティによって管理されてよく、オンプレミス又はオフプレミスで存在してよい。
【0086】
パブリッククラウド:このクラウドインフラストラクチャは、一般大衆又は大規模な業界団体に利用可能とされ、クラウドサービスを販売する組織によって所有される。
【0087】
ハイブリッドクラウド:このクラウドインフラストラクチャは、2つ又はそれより多くのクラウド(プライベート、コミュニティ、又はパブリック)の複合体であり、2つ又はそれより多くのクラウドは、独自のエンティティのままであるが、データ及びアプリケーションのポータビリティ(例えば、クラウド間のロードバランシングのためのクラウドバースト)を可能にする標準技術又は独自技術によってともに結合される。
【0088】
クラウドコンピューティング環境は、ステートレス性、低結合性、モジュール性、およびセマンティック相互運用性に重点を当てたサービス指向である。クラウドコンピューティングの中核には、相互接続されたノードからなるネットワークを含むインフラストラクチャが存在する。
【0089】
ここで
図6を参照すると、例示的なクラウドコンピューティング環境50が示されている。示されているように、クラウドコンピューティング環境50は、例えば、携帯情報端末(PDA)又は携帯電話54A、デスクトップコンピュータ54B、ラップトップコンピュータ54C、及び/又は自動車コンピュータシステム54N等の、クラウド消費者によって使用されるローカルコンピューティングデバイスが通信し得る、1つ又は複数のクラウドコンピューティングノード10を備える。ノード10は、互いに通信してよい。それらは、本明細書の上記で説明されたようなプライベート、コミュニティ、パブリック、又はハイブリッドクラウド、又はこれらの組み合わせ等の、1つ又は複数のネットワーク内で物理的に又は仮想的にグループ化されてよい(図示せず)。これにより、クラウドコンピューティング環境50は、インフラストラクチャ、プラットフォーム及び/又はソフトウェアを、クラウド消費者がそのためにローカルコンピューティングデバイス上にリソースを維持する必要がないサービスとして提供することが可能になる。
図6において示されているコンピューティングデバイス54A、54B、54C及び54Nのタイプは、単に例示を意図し、コンピューティングノード10及びクラウドコンピューティング環境50は、任意のタイプのネットワーク及び/又はネットワークアドレス指定可能接続を介して(例えば、ウェブブラウザを使用して)、任意のタイプのコンピュータ化デバイスと通信することができることが理解される。
【0090】
ここで
図7を参照すると、クラウドコンピューティング環境50(
図6を参照)によって提供される機能抽象化層のセットが示されている。
図7において示されているコンポーネント、層、及び機能は、単に例示を意図するものであり、本発明の実施形態はこれらに限定されるものではないことが事前に理解されるべきである。図示されているように、以下の層及び対応する機能が提供される:
【0091】
ハードウェア及びソフトウェア層60は、ハードウェア及びソフトウェアコンポーネントを備える。ハードウェアコンポーネントの例としては、メインフレーム61、RISC(縮小命令セットコンピュータ)アーキテクチャベースサーバ62;サーバ63;ブレードサーバ64;記憶デバイス65;及びネットワーク及びネットワーキングコンポーネント66が挙げられる。幾つかの実施形態では、ソフトウェアコンポーネントは、ネットワークアプリケーションサーバソフトウェア67及びデータベースソフトウェア68を含む。
【0092】
仮想化層70は、仮想エンティティの次の例:仮想サーバ71;仮想ストレージ72;仮想プライベートネットワークを含む仮想ネットワーク73;仮想アプリケーション及びオペレーティングシステム74;及び仮想クライアント75が提供され得る抽象化層を提供する。
【0093】
1つの例では、管理層80は、以下で説明される機能を提供してよい。リソースプロビジョニング81は、クラウドコンピューティング環境内でタスクを実行するために利用されるコンピューティングリソース及び他のリソースの動的な調達を提供する。計測及び価格設定82は、リソースがクラウドコンピューティング環境内で利用されるときのコスト追跡、及びこれらのリソースの消費に対する請求又はインボイス作成を提供する。1つの例では、これらのリソースは、アプリケーションソフトウェアライセンスを含んでよい。セキュリティは、クラウド消費者及びタスクに対するアイデンティティ検証、並びに、データ及び他のリソースに対する保護を提供する。ユーザポータル83は、消費者及びシステムアドミニストレータに対してクラウドコンピューティング環境へのアクセスを提供する。サービス水準管理84は、要求されるサービス水準が満たされるように、クラウドコンピューティングリソース割り当て及び管理を提供する。サービス水準合意(SLA)計画及び履行85は、将来の要件がSLAに従って予期されるクラウドコンピューティングリソースの事前の取り決め及び調達を提供する。
【0094】
ワークロード層90は、クラウドコンピューティング環境が利用され得る機能の例を提供する。この層から提供され得るワークロード及び機能の例としては、マッピング及びナビゲーション91;ソフトウェア開発及びライフサイクル管理92;仮想クラスルーム教育配信93;データ解析処理94;トランザクション処理95;及びコンパイルプロセス最適化96が挙げられる。
【手続補正書】
【提出日】2024-04-17
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータシステムであって、
中央処理ユニット(CPU);
前記CPUに結合されたメモリ;及び
前記CPUに結合された1つ又は複数のコンピュータ可読記憶媒体
を備え、前記1つ又は複数のコンピュータ可読記憶媒体は、ジャストインタイム(JIT)コンパイルプロセスを最適化する方法を実装するために前記メモリを介して前記CPUによって実行される命令を集合的に含み、前記方法は、
前記コンピュータシステムが、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する段階;
前記ソースポッドが飽和したと決定されていることに応答して、前記コンピュータシステムが、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する段階;
前記コンピュータシステムが、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する段階;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記コンピュータシステムが、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する段階
を含む、コンピュータシステム。
【請求項2】
前記仮想マシンの前記状態に関する前記情報を収集する前記段階は、
前記コンピュータシステムが、Java(登録商標)ヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する段階
を含む、請求項1に記載のコンピュータシステム。
【請求項3】
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記段階は、
前記コンピュータシステムが、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する段階
を含む、請求項1に記載のコンピュータシステム。
【請求項4】
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記段階は、
前記コンピュータシステムが、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する段階;
前記コンピュータシステムが、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する段階;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する段階;
前記コンピュータシステムが、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する段階;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する段階
を含む、請求項1に記載のコンピュータシステム。
【請求項5】
前記方法は、
前記コンピュータシステムが、一定の時間間隔でアラームを検出する段階;及び
前記アラームを検出する前記段階に応答して、前記コンピュータシステムが、タイマハンドラコードを実行する段階
を更に備え、前記実行する段階は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する段階;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関する前記データを記憶する段階;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する段階;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する段階
を有する、請求項1
から4の何れか一項に記載のコンピュータシステム。
【請求項6】
タイマハンドラメソッドを実行する前記段階は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする段階
を更に有する、請求項5に記載のコンピュータシステム。
【請求項7】
前記方法は、
前記コンピュータシステムが、前記検出されたアラームの時点で前記アプリケーションにおけるそれぞれのメソッドのコンパイルレベルを決定する段階
を更に含み、
所与のメソッドの所与のコンパイルレベルが、前記所与のメソッドがいかに頻繁に実行されるのかを示し、
前記タイマハンドラコードを実行する前記段階は、
前記コンパイルレベルをキャプチャし、前記永続的データレポジトリに前記コンパイルレベルを記憶する段階;及び
前記コンパイルレベルを集約することによって前記ソースポッドのための前記最適化スコアを計算する段階
を更に有する、請求項6に記載のコンピュータシステム。
【請求項8】
ジャストインタイム(JIT)コンパイルプロセスを最適化するコンピュータプログラ
ムであって、前記コンピュータプログラ
ムは、
コンピュータ可読プログラムコード
を備え、
前記コンピュータ可読プログラムコードは
、コンピュータシステムの中央処理ユニット(CPU)によって実行され
た場合、前記
コンピュータシステムに、
前記コンピュータシステムが、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する手順;
前記ソースポッドが飽和したと決定されていることに応答して、前記コンピュータシステムが、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する手順;
前記コンピュータシステムが、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する手順;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記コンピュータシステムが、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する手順
を含む
方法を実行させる、コンピュータプログラ
ム。
【請求項9】
前記仮想マシンの前記状態に関する前記情報を収集する前記手順は、
前記コンピュータシステムが、Javaヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する手順
を含む、請求項8に記載のコンピュータプログラ
ム。
【請求項10】
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記手順は、
前記コンピュータシステムが、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する手順
を含む、請求項8に記載のコンピュータプログラ
ム。
【請求項11】
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記手順は、
前記コンピュータシステムが、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する手順;
前記コンピュータシステムが、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する手順;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する手順;
前記コンピュータシステムが、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する手順;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する手順
を含む、請求項8に記載のコンピュータプログラ
ム。
【請求項12】
前記方法は、
前記コンピュータシステムが、一定の時間間隔でアラームを検出する手順;及び
前記アラームを検出する前記手順に応答して、前記コンピュータシステムが、タイマハンドラコードを実行する手順
を更に含み、前記実行する手順は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する手順;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関するデータを記憶する手順;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する手順;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する手順
を含む、請求項8
から11の何れか一項に記載のコンピュータプログラ
ム。
【請求項13】
タイマハンドラメソッドを実行する前記手順は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする手順
を更に含む、請求項12に記載のコンピュータプログラ
ム。
【請求項14】
前記方法は、
前記コンピュータシステムが、前記検出されたアラームの時点で前記アプリケーションにおけるそれぞれのメソッドのコンパイルレベルを決定する手順
を更に含み、
所与のメソッドの所与のコンパイルレベルが、前記所与のメソッドがいかに頻繁に実行されるのかを示し、
前記タイマハンドラコードを実行する前記手順は、
前記コンパイルレベルをキャプチャし、前記永続的データレポジトリに前記コンパイルレベルを記憶する手順;及び
前記コンパイルレベルを集約することによって前記ソースポッドのための前記最適化スコアを計算する手順
を更に含む、請求項13に記載のコンピュータプログラ
ム。
【請求項15】
コンピュータ実装方法であって、
1つ又は複数のプロセッサによって、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する段階;
前記ソースポッドが飽和したと決定されていることに応答して、前記1つ又は複数のプロセッサによって、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する段階;
前記1つ又は複数のプロセッサによって、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する段階;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記1つ又は複数のプロセッサによって、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する段階
を備える、方法。
【請求項16】
前記仮想マシンの前記状態に関する前記情報を収集する前記段階は、
前記1つ又は複数のプロセッサによって、Javaヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する段階
を有する、請求項15に記載の方法。
【請求項17】
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記段階は、
前記1つ又は複数のプロセッサによって、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する段階
を有する、請求項15に記載の方法。
【請求項18】
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記段階は、
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する段階;
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する段階;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する段階;
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する段階;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する段階
を有する、請求項15に記載の方法。
【請求項19】
前記方法は、
前記1つ又は複数のプロセッサによって、一定の時間間隔でアラームを検出する段階;及び
前記アラームを検出する前記段階に応答して、前記1つ又は複数のプロセッサによって、タイマハンドラコードを実行する段階
を更に備え、前記実行する段階は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する段階;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関する前記データを記憶する段階;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する段階;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する段階
を備える、請求項15
から18の何れか一項に記載の方法。
【請求項20】
タイマハンドラメソッドを実行する前記段階は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする段階
を更に有する、請求項19に記載の方法。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0094
【補正方法】変更
【補正の内容】
【0094】
ワークロード層90は、クラウドコンピューティング環境が利用され得る機能の例を提供する。この層から提供され得るワークロード及び機能の例としては、マッピング及びナビゲーション91;ソフトウェア開発及びライフサイクル管理92;仮想クラスルーム教育配信93;データ解析処理94;トランザクション処理95;及びコンパイルプロセス最適化96が挙げられる。
(他の可能な項目)
[項目1]
コンピュータシステムであって、
中央処理ユニット(CPU);
前記CPUに結合されたメモリ;及び
前記CPUに結合された1つ又は複数のコンピュータ可読記憶媒体
を備え、前記1つ又は複数のコンピュータ可読記憶媒体は、ジャストインタイム(JIT)コンパイルプロセスを最適化する方法を実装するために前記メモリを介して前記CPUによって実行される命令を集合的に含み、前記方法は、
前記コンピュータシステムが、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する段階;
前記ソースポッドが飽和したと決定されていることに応答して、前記コンピュータシステムが、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する段階;
前記コンピュータシステムが、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する段階;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記コンピュータシステムが、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する段階
を含む、コンピュータシステム。
[項目2]
前記仮想マシンの前記状態に関する前記情報を収集する前記段階は、
前記コンピュータシステムが、Java(登録商標)ヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する段階
を含む、項目1に記載のコンピュータシステム。
[項目3]
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記段階は、
前記コンピュータシステムが、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する段階
を含む、項目1に記載のコンピュータシステム。
[項目4]
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記段階は、
前記コンピュータシステムが、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する段階;
前記コンピュータシステムが、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する段階;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する段階;
前記コンピュータシステムが、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する段階;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する段階
を含む、項目1に記載のコンピュータシステム。
[項目5]
前記方法は、
前記コンピュータシステムが、一定の時間間隔でアラームを検出する段階;及び
前記アラームを検出する前記段階に応答して、前記コンピュータシステムが、タイマハンドラコードを実行する段階
を更に備え、前記実行する段階は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する段階;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関する前記データを記憶する段階;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する段階;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する段階
を有する、項目1に記載のコンピュータシステム。
[項目6]
タイマハンドラメソッドを実行する前記段階は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする段階
を更に有する、項目5に記載のコンピュータシステム。
[項目7]
前記方法は、
前記コンピュータシステムが、前記検出されたアラームの時点で前記アプリケーションにおけるそれぞれのメソッドのコンパイルレベルを決定する段階
を更に含み、
所与のメソッドの所与のコンパイルレベルが、前記所与のメソッドがいかに頻繁に実行されるのかを示し、
前記タイマハンドラコードを実行する前記段階は、
前記コンパイルレベルをキャプチャし、前記永続的データレポジトリに前記コンパイルレベルを記憶する段階;及び
前記コンパイルレベルを集約することによって前記ソースポッドのための前記最適化スコアを計算する段階
を更に有する、項目6に記載のコンピュータシステム。
[項目8]
ジャストインタイム(JIT)コンパイルプロセスを最適化するコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1つ又は複数のコンピュータ可読記憶媒体上で集合的に記憶されたコンピュータ可読プログラムコードを有する前記1つ又は複数のコンピュータ可読記憶媒体
を備え、前記コンピュータ可読プログラムコードは、コンピュータシステムに方法を実行させるために前記コンピュータシステムの中央処理ユニット(CPU)によって実行され、前記方法は、
前記コンピュータシステムが、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する手順;
前記ソースポッドが飽和したと決定されていることに応答して、前記コンピュータシステムが、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する手順;
前記コンピュータシステムが、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する手順;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記コンピュータシステムが、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する手順
を含む、コンピュータプログラム製品。
[項目9]
前記仮想マシンの前記状態に関する前記情報を収集する前記手順は、
前記コンピュータシステムが、Javaヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する手順
を含む、項目8に記載のコンピュータプログラム製品。
[項目10]
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記手順は、
前記コンピュータシステムが、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する手順
を含む、項目8に記載のコンピュータプログラム製品。
[項目11]
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記手順は、
前記コンピュータシステムが、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する手順;
前記コンピュータシステムが、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する手順;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する手順;
前記コンピュータシステムが、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する手順;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記コンピュータシステムが、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する手順
を含む、項目8に記載のコンピュータプログラム製品。
[項目12]
前記方法は、
前記コンピュータシステムが、一定の時間間隔でアラームを検出する手順;及び
前記アラームを検出する前記手順に応答して、前記コンピュータシステムが、タイマハンドラコードを実行する手順
を更に含み、前記実行する手順は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する手順;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関するデータを記憶する手順;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する手順;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する手順
を含む、項目8に記載のコンピュータプログラム製品。
[項目13]
タイマハンドラメソッドを実行する前記手順は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする手順
を更に含む、項目12に記載のコンピュータプログラム製品。
[項目14]
前記方法は、
前記コンピュータシステムが、前記検出されたアラームの時点で前記アプリケーションにおけるそれぞれのメソッドのコンパイルレベルを決定する手順
を更に含み、
所与のメソッドの所与のコンパイルレベルが、前記所与のメソッドがいかに頻繁に実行されるのかを示し、
前記タイマハンドラコードを実行する前記手順は、
前記コンパイルレベルをキャプチャし、前記永続的データレポジトリに前記コンパイルレベルを記憶する手順;及び
前記コンパイルレベルを集約することによって前記ソースポッドのための前記最適化スコアを計算する手順
を更に含む、項目13に記載のコンピュータプログラム製品。
[項目15]
コンピュータ実装方法であって、
1つ又は複数のプロセッサによって、コンテナオーケストレーションされた実行環境におけるソースポッドが飽和したと決定する段階;
前記ソースポッドが飽和したと決定されていることに応答して、前記1つ又は複数のプロセッサによって、JITコンパイラからのプロファイルデータ、前記ソースポッドの仮想マシンの状態に関する情報、及び前記仮想マシンのネイティブコンパイル済みコード状態を収集する段階;
前記1つ又は複数のプロセッサによって、永続的データレポジトリにおいて階層的方式における明確に定義されたデータ構造において、前記収集されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記収集された情報、及び前記仮想マシンの前記収集されたネイティブコンパイル済みコード状態を記憶する段階;及び
前記ソースポッド及び前記ソースポッド上で実行されるアプリケーションの再起動又は再展開に応答して、前記1つ又は複数のプロセッサによって、前記ソースポッドが飽和することに後続して前記アプリケーションにおけるホットコードエリアのモニタリング及び識別を必要とすることなく、前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を新たなターゲットポッドにおいて再使用する段階
を備える、方法。
[項目16]
前記仮想マシンの前記状態に関する前記情報を収集する前記段階は、
前記1つ又は複数のプロセッサによって、Javaヒープのサイズ、コンパイル済みコードヒープのサイズ、及びクラスのロードされた状態及びクラスローダを収集する段階
を有する、項目15に記載の方法。
[項目17]
前記仮想マシンの前記ネイティブコンパイル済みコード状態を収集する前記段階は、
前記1つ又は複数のプロセッサによって、コンパイル済みコードキャッシュ、前記コンパイル済みコードキャッシュに対応するメソッド及びクラス、及び前記収集されたメソッド及びクラスがロードされる仮想アドレス範囲を収集する段階
を有する、項目15に記載の方法。
[項目18]
前記記憶されたプロファイルデータ、前記ソースポッドの前記仮想マシンの前記状態に関する前記記憶された情報、及び前記仮想マシンの前記記憶されたネイティブコンパイル済みコード状態を前記新たなターゲットポッドにおいて再使用する前記段階は、
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの新たな仮想マシンにおける変更を伴うことなく、前記記憶されたプロファイルデータを適用する段階;
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの実行環境が前記ソースポッドの実行環境に合致すると決定する段階;
前記新たなターゲットポッドの前記実行環境が前記ソースポッドの前記実行環境に合致すると決定することに応答して、前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドの前記新たな仮想マシンに前記仮想マシンの前記状態に関する前記情報を適用する段階;
前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドにおける仮想アドレスマッピングの状態及び割り当てられたマシンコードのロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に合致すると決定する段階;及び
前記新たなターゲットポッドにおける前記仮想アドレスマッピングの前記状態及び前記割り当てられたマシンコードの前記ロケーションが前記ソースポッドの前記仮想マシンの前記ネイティブコンパイル済みコード状態に一致すると決定することに応答して、前記1つ又は複数のプロセッサによって、前記新たなターゲットポッドにおける同じロケーションにおいて、前記ソースポッドにおけるロケーションに存在するコンパイル済みコードを記憶する段階
を有する、項目15に記載の方法。
[項目19]
前記方法は、
前記1つ又は複数のプロセッサによって、一定の時間間隔でアラームを検出する段階;及び
前記アラームを検出する前記段階に応答して、前記1つ又は複数のプロセッサによって、タイマハンドラコードを実行する段階
を更に備え、前記実行する段階は、
前記プロファイルデータをキャプチャし、キーとしての前記アプリケーションのメソッド、及び値としての前記プロファイルデータを有するプロファイルデータ構造において前記プロファイルデータを記憶する段階;
前記ソースポッドの実行環境に関するデータをキャプチャし、環境データ構造において前記実行環境に関する前記データを記憶する段階;
前記JITコンパイラによってコンパイルされたコード、及び前記キャプチャされたコードの仮想メモリアドレスへのマッピングをキャプチャし、前記キャプチャされたコード及び前記キャプチャされたコードの前記仮想メモリアドレスへの前記マッピングをコードデータ構造において記憶する段階;及び
前記プロファイルデータ構造、前記環境データ構造、及び前記コードデータ構造におけるデータを単一の拡張されたデータ構造に拡張する段階
を備える、項目15に記載の方法。
[項目20]
タイマハンドラメソッドを実行する前記段階は、
前記単一の拡張されたデータ構造における前記拡張されたデータを前記永続的データレポジトリに、前記ソースポッドの識別子及び前記ソースポッドのための最適化スコアとともに、シリアライズする段階
を更に有する、項目19に記載の方法。
【国際調査報告】