JP4778035B2 - 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム - Google Patents

外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム Download PDF

Info

Publication number
JP4778035B2
JP4778035B2 JP2008286523A JP2008286523A JP4778035B2 JP 4778035 B2 JP4778035 B2 JP 4778035B2 JP 2008286523 A JP2008286523 A JP 2008286523A JP 2008286523 A JP2008286523 A JP 2008286523A JP 4778035 B2 JP4778035 B2 JP 4778035B2
Authority
JP
Japan
Prior art keywords
instruction
counter
value
executed
exclusively
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.)
Expired - Fee Related
Application number
JP2008286523A
Other languages
English (en)
Other versions
JP2010113585A (ja
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
Priority to JP2008286523A priority Critical patent/JP4778035B2/ja
Priority to US12/612,920 priority patent/US8201178B2/en
Publication of JP2010113585A publication Critical patent/JP2010113585A/ja
Application granted granted Critical
Publication of JP4778035B2 publication Critical patent/JP4778035B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Description

本発明は、外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラムに関する。
大量のアクセスを受け付ける大規模なシステムでは、処理性能の向上のためにクラスタ構成がとられることが多い。クラスタ構成では、トランザクション処理を行うサーバが複数用意される。そして、該サーバが、共有の外部データベース(以下、共有DB)にアクセスする。
上記クラスタ構成では、上記サーバの1つが、共有DBのレコードを長時間ロックする場合がある。レコードが一旦ロックされると、ロックしたサーバ以外のサーバは、ロックされたレコードにアクセスできない。そのために、ロックしたサーバ以外のサーバがロックされたレコードにアクセスする場合、レコードがアンロックされるまで自身の処理を進めることができずに待たされる。よって、クラスタ構成をとったにもかかわらず、システムの性能が結局向上しないという危険性がある。
また、WebSphere Application Server(商標)(以下、WAS)のように、サーバがJAVA(商標)処理系のようなプログラム実行環境上で動作している場合、該プログラム実行環境においてガベージコレクション(以下、GC)などのハウスキーピング処理が生じる。上記ハウスキーピング処理が上記ロック中に生じると、上記ロックしたサーバの処理が遅延し、結果的に1つのサーバがロックを長時間保持してしまうことになる。
下記特許文献1は、通信時に一時的に作成されるオブジェクトを再使用することで、新規オブジェクト生成によるメモリ・アロケーションを減らし、GCが実行されるのを抑止する手段を記載する。よって、該抑止する手段は、外部資源のロック中にGCが発生するのを抑制するというものではない。
下記特許文献2は、本来のタスクとGCのタスクの優先度を調整し、GCを制御する手段を記載する。しかし、該制御する手段は、本来のタスクと同時にGCを実行できることを前提としている。よって、GCが実行されることによって本来のタスクの処理時間が遅延することは問題とされていない。
特開2007−086838号公報 特開2006−126975号公報
1つのサーバがロックを長時間保持しないように、ハウスキーピング処理が実行されるタイミングを調整したり、又はサーバ上のスレッドによってロックが獲得されるタイミングを調整したりして、ロックが長時間保持されない仕組みが求められている。
本発明は、外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐためのコンピュータ・システムを提供する。該コンピュータ・システムは、
上記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッドそれぞれに関連付けられたカウンタの値を増減するカウンタ部と、
上記カウンタの値又は上記カウンタの値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
を含む。
本発明の1つの実施態様では、上記制御部が、
プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズが上記カウンタの値の合計値に基づいて求められる値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
本発明の1つの実施態様では、上記制御部が、上記カウンタの値の合計値が減少した場合であって、プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズがカウンタの値の減少した合計値に基づいて再度求められた値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
本発明の1つの実施態様では、上記カウンタの値の合計値に基づいて求められる値がT÷(1+k×N)によって求められ、
ここで、T=外部資源を排他使用していない場合に適用される上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が開始されるメモリサイズの閾値であり、
k=カウンタの値の合計値に基づいて求められる値を調整するためのパラメータであり、
N=カウンタの値の合計値である。
本発明の1つの実施態様では、上記コンピュータ・システムが、上記カウンタの値の合計値の増減に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドの優先度を変更する第1の変更部をさらに含む。
本発明の1つの実施態様では、上記第1の変更部が、上記カウンタの値の合計値が大きい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドに低い優先度を与える。
本発明の1つの実施態様では、上記制御部が、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行する。
本発明の1つの実施態様では、上記コンピュータ・システムが、上記カウンタの値の増減に応じて、上記カウンタに対応するスレッドの優先度を変更する第2の変更部をさらに含む。
本発明の1つの実施態様では、上記第2の変更部が、上記カウンタの値が大きいスレッドに高い優先度を与える。
本発明の1つの実施態様では、上記制御部が、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行する。
本発明の1つの実施態様では、上記制御部が、メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値を重みとして付与する。該重みの付与によって、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令の実行が促進される。
本発明の1つの実施態様では、上記コンピュータ・システムが、上記スレッドにおいて上記メソッドが実行されることに応じて、上記実行回数カウンタの値を求める計算部をさらに含み、
上記制御部が、上記実行回数カウンタの値が閾値よりも大きい場合、上記スレッドそれぞれに関連付けられたメソッドについて、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行する。
本発明の1つの実施態様では、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令が、ジャストインタイム(以下、JIT)コンパイルを実行する命令であり、
上記制御部が、上記実行回数カウンタの値が上記閾値よりも大きい場合、上記実行回数カウンタに関連付けられたメソッドを上記JITコンパイルするリストに追加する。
本発明の1つの実施態様では、上記カウンタ部が、上記排他使用が獲得される前に、上記排他使用を獲得する命令の実行に応じて、上記カウンタの値を増加し、
上記制御部が、上記排他使用が獲得される前に、上記カウンタの値の増加に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
本発明の1つの実施態様では、上記カウンタ部が、上記排他使用が解放された後に、上記排他使用を解放する命令の実行に応じて、上記カウンタの値を減少し、
上記制御部が、上記カウンタの値の減少に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
本発明の1つの実施態様では、上記カウンタ部が、
上記排他使用を獲得する命令の実行に応じて、上記カウンタの値を増加し、
上記排他使用を解放する命令の実行に応じて、上記カウンタの値を減少する。
本発明の1つの実施態様では、上記プログラムの実行環境がJAVA(商標)処理系である。
本発明の1つの実施態様では、上記外部資源がデータベースを含み、上記排他使用が上記データベースに対する排他使用を含む。
本発明の1つの実施態様では、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が、ガベージコレクションを実行する命令である。
本発明の1つの実施態様では、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が、JITコンパイルを実行する命令である。
本発明はまた、外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐためのコンピュータ・システムを提供する。該コンピュータ・システムは、
上記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッド全てのカウンタの値の合計値を増減するカウンタ部と、
上記カウンタの値の合計値又はカウンタの値の合計値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
を含む。
本発明はまた、外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
上記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
上記カウンタの値又は上記カウンタの値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御するステップと、
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズが上記カウンタの値の合計値に基づいて求められる値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の合計値が減少した場合であって、上記メモリ・アロケーションに使えるメモリサイズがカウンタの値の減少した合計値に基づいて再度求められた値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップを含む。ここで、外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップは、上記カウンタの値の合計値に基づいて求められる値をT÷(1+k×N)によって求めるステップをさらに含む。T=上記カウンタの値を用いない場合に適用される上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が開始されるメモリサイズの閾値であり、k=カウンタの値の合計値に基づいて求められる値を調整するためのパラメータであり、N=カウンタの値の合計値である。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の合計値の増減に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドの優先度を変更するステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の合計値が大きい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドに低い優先度を与えるステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行するステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の増減に応じて、上記カウンタに対応するスレッドの優先度を変更するステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値が大きいスレッドに高い優先度を与えるステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行するステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値を重みとしてさらに付与するステップを含む。該重みの付与によって、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令の実行が促進される。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記スレッドにおいて上記メソッドが実行されることに応じて、上記実行回数カウンタの値を求めるステップと、
上記実行回数カウンタの値が閾値よりも大きい場合、上記スレッドそれぞれに関連付けられたメソッドについて、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行するステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。ここで、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令が、JITコンパイルを実行する命令である。該ステップは、上記実行回数カウンタの値が上記閾値よりも大きい場合、上記実行回数カウンタに関連付けられたメソッドを上記JITコンパイルするリストに追加するステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記排他使用を獲得する命令の実行に応じて、上記排他使用が獲得される前に上記カウンタの値を増加するステップと、
上記カウンタの値の増加に応じて、上記排他使用が獲得される前に上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記排他使用を解放する命令の実行に応じて、上記排他使用が解放された後に上記カウンタの値を減少するステップと、
上記カウンタの値の減少に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記排他使用を獲得する命令の実行に応じて、上記カウンタの値を増加するステップと、
上記排他使用を解放する命令の実行に応じて、上記カウンタの値を減少するステップと
を含む。
本発明はまた、外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
上記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッド全てのカウンタの値の合計値を増減するステップと、
上記カウンタの値の合計値又はカウンタの値の合計値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御するステップと、
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値を重みとしてさらに付与するステップを含む。該重みの付与によって、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令の実行が促進される。
本発明はまた、データベースを排他使用しながら命令が実行される少なくとも1のスレッドを実行するJAVA(商標)処理系において、データベースを排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
上記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
上記カウンタの値又は上記カウンタの値の変化に応じて、上記データベースを排他使用しながら実行される命令とガベージコレクション又はジャストインタイム(JIT)コンパイルとの実行順を制御するステップと
を含む。
本発明はさらに、外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐためのコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに、上記のいずれかに記載の方法の各ステップを実行させることを含む。
本発明の実施態様によると、例えばJAVA(商標)処理系上のアプリケーションが実行されるスレッドが外部資源のロックを多く保持している場合に、GC又はJITコンパイルなどのハウスキーピング処理が抑制される。また、ロックを保持しているスレッドの処理が優先的に行われるようになる。よって、ロック保持時間が長期化することを防止することが可能である。これにより、例えば、他のサーバ上の上記外部資源を使用するアプリケーションが、同じロックを獲得するために待たされ、結果としてシステム全体の性能が低下する危険性が減らされる。
本発明の実施態様において、「コンピュータ・プログラム実行環境」では、プログラムが実行されるために必要なランタイムなどのモジュール群が用意されている。上記コンピュータ・プログラム実行環境は、プログラムの開発に使われた開発ツールにより異なる。上記コンピュータ・プログラム実行環境は、例えば、JAVA(商標)処理系である。
本発明の実施態様において、「スレッド」とは、プログラムの処理の流れの単位である。本発明の実施態様において、スレッドは1又は複数である。また、本明細書においてプロセスは、少なくとも1の上記スレッドを含む。
本発明の実施態様において、「外部資源」とは、複数のプロセスから共通でアクセスされうる資源である。該プロセスを実行するコンピュータは、1台に限らず複数であってもよい。外部資源の例として、ハードウエア、データベース及びファイルがある。ハードウエアは、例えば、ハードディスクである。データベースは、例えばDB2(商標)、Oracle(商標)、SQLServer(商標)、及びPostgreSQLにおいて使用されるデータベースである。ファイルは、例えば、テキストファイル、スプレッドシート又はブックファイルである。
本発明の実施態様において、「排他使用を獲得する命令」は、上記外部資源の独占使用を開始するために、ロックを獲得する命令である。「排他使用を獲得する命令」は、例えばデータベースアクセスにおける「select for update」要求である。「排他使用を獲得する命令」は、上記スレッドにおいて実行される。
本発明の実施態様において、「排他使用を解放する命令」は、上記外部資源の独占使用を終了するために、ロックを解放する命令である。「排他使用を解放する命令」は、例えば、データベースアクセスにおける「commit」要求である。「排他使用を解放する命令」は、上記スレッドにおいて実行される。
本発明の実施態様において、「外部資源を排他使用しながら実行される命令」は、上記外部資源を独占的に使用する命令である。「外部資源を排他使用しながら実行される命令」は、上記ロックが獲得された後から上記ロックが解放される前の間における上記外部資源に対する命令である。「外部資源を排他使用しながら実行される命令」は、上記スレッドにおいて実行される。
本発明の実施態様において、「外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令」は、上記排他使用しながら実行される命令の実行中に実行された場合、上記排他使用しながら実行される命令の終了を遅らせる命令である。
「外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令」は、ハウスキーピング処理を含む。ハウスキーピング処理は、本来のプログラムの処理とは別に非同期に動いている処理である。ハウスキーピング処理は、例えば、GCの実行命令、JITコンパイルの実行命令を含む。「外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令」は、上記排他使用しながら実行される命令を実行するスレッドとは別のスレッドにおいて実行される。
本発明の実施態様において、「外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令」は、上記排他使用しながら実行される命令の実行前に実行された場合、上記排他使用しながら実行される命令の実行時間を短縮させる命令である。上記短縮化する命令は、例えば、JITコンパイルの実行命令である。該命令は、上記スレッドにおいて実行される。
本発明の実施態様において、「スレッドそれぞれに関連付けられたカウンタ」とは、スレッドそれぞれについて「今急いでいるかどうか」の度合いを示す値である。ここで「急いでいる」とは、該スレッドで実行される命令を遅延なく実行したいという意味である。上記カウンタの値が大きいスレッドほど「急いでいる」スレッドである。
本発明の実施態様では、上記カウンタの値が大きいスレッドで実行される命令がなるべく妨げられないように、下記のA〜Eに示す方法で命令の実行順が制御される。なお下記A〜Eそれぞれの具体的な方法については後述する。
A.上記カウンタの値の合計値が大きい状況では、上記遅延をもたらす命令がなるべく実行されないように制御される。
B.上記カウンタの値の合計値が大きい状況では、上記遅延をもたらす命令の優先度が下げられ、上記遅延をもたらす命令が抑制される。
C.上記カウンタの値が大きいスレッドで実行される処理の優先度が上げられる。
D.上記カウンタの値が大きいスレッドで実行されたメソッドについて、早めに短縮化する命令が実行され高速化される。
E.上記カウンタの値を大きくする場合、上記遅延をもたらす命令が前倒しで実行される。
上記カウンタの値の増減は、アプリケーションから行うこともできる。しかし典型的には、上記カウンタの値の増減は、上記プログラム実行環境のシステムライブラリ内のメソッドで実行される。例えば、外部資源がデータベースである場合、該データベースにアクセスするためのライブラリ内のデータベースレコードのロックを獲得するメソッドにおいて、上記カウンタを増加させる。また、データベースレコードのロックを解放するメソッドにおいて、上記カウンタを減少させる。例えば、コンピュータ・システムは、データベースレコードをロックするSQL命令である「select for update」が実行されたら上記カウンタの値に1を加える。また、コンピュータ・システムは、レコードロックを解放するコミット(commit)命令が実行されたら上記カウンタの値から1を引く。このようにすれば、多くのデータベースレコードがロックされている時に上記遅延をもたらす命令が抑制され、ロックが獲得される時間を短くすることができる。
上記カウンタの増減値は、ロックの対象に応じて管理者が設定してもよい。管理者は、上記カウンタの増減値に離散化スコアを与えることができる。
外部資源が、例えば、ハードディスクであり、ロックの対象が該ハードディスク上のファイル、該ファイルが格納されるフォルダA及び上記ファイルが格納されるフォルダBであるとする。ここで、上記ファイルは、アクセスされる頻度が低く、ロックされたとしてもシステム全体の処理が遅延する可能性は低いとする。また、フォルダAは、アクセスされる頻度が高く、ロックされた場合に上記ファイルに比べてシステム全体の処理が遅延する可能性が高いとする。さらに、フォルダBは、アクセスされる頻度がフォルダAよりも高く、ロックされた場合にフォルダAに比べシステム全体の処理が遅延する可能性が高いとする。この場合、管理者は上記増減値を、ファイルに対するロックに1、フォルダAに対するロックに5、フォルダBに対するロックに10を設定しうる。
また、外部資源が、例えば、データベースであり、ロックの対象が該データベース上のレコード、テーブルA及びテーブルBであるとする。ここで、上記レコードがロックされた場合、システム全体の処理が遅延する可能性は低いとする。上記テーブルAがロックされた場合、システム全体の処理が遅延する可能性は、上記レコードがロックされた場合に比べ高いとする。さらに、上記テーブルBがロックされた場合、システム全体の処理が遅延する可能性は、上記テーブルAがロックされた場合よりも高いとする。この場合、管理者は上記増減値を、レコードに対するロックに1、テーブルAに対するロックに5、テーブルBに対するロックに10を設定しうる。
また、外部資源がスプレッドシート又はブックファイルであり、ロックの対象が該スプレッドシート上のセル、ブックファイル上のセル、シート及びブックであるとする。上記セル、シート及びブックで扱われるデータは、通常セル、シート、ブックの順で少なくなる。よって、管理者は上記増減値を、セルに対するロックに1、シートに対するロックに5、ブックに対するロックに10を設定しうる。
上記管理者による増減値の設定により、ロックの影響規模に応じた上記遅延をもたらす命令の抑制が可能になる。
「GC」は、プログラムが動的に確保したメモリ領域のうち不要になった領域を自動的に解放する機能である。GCは、メモリ・アロケーションに使用できるメモリサイズが予め設定された閾値未満になると実行される。
また、本発明の実施態様においては、上記カウンタの値によって上記閾値が調整される。
本発明の実施態様において、「プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズ」は、メモリがプログラムの実行時に動的に確保される場合における、メモリが確保される時点での確保可能なメモリサイズの上限値である。
「JITコンパイル」は、プログラムコードをプログラムの実行時に機械語のプログラムに変換する処理である。該変換はメソッド単位で行われる。
JITコンパイルの機能を有する上記実行環境では、一般的にメソッドごとに実行回数カウンタが用意されている。上記メソッドがインタプリタ方式で実行されると、上記実行回数カウンタに1が加えられる。そして、該実行回数が予め設定された閾値を超えると、上記メソッドがJITコンパイルされる対象のメソッドを登録するリストに登録される。JITコンパイルは定期的に実行される。JITコンパイルが実行されると、上記リストに登録されたメソッドは、機械語のコードに変換される。また、管理者は、JITコンパイルについての最適化レベルを設定できる。該最適化レベルが高く設定されるほど、上記変換に要する時間が長くなり、変換された機械語のコードの実行時間が短くなる。
JITコンパイル処理は、それ自体は上記遅延をもたらす命令である。しかし、コンパイルされたメソッドの処理時間は高速化される。よって、JITコンパイル処理は、上記短縮化する命令でもある。
また、本発明の実施態様において、上記実行回数カウンタの増分は、1とは限らない。本発明の実施態様では、上記スレッド毎に関連付けられたカウンタの値が、「重み」として上記増分に加えられる。例えば、上記カウンタの値が5ならば、上記増分は1+5=6である。
本発明の実施態様において、「スレッドの優先度」は、スレッドそれぞれに割り当てられた、スレッドで実行される命令の実行順を決定するための情報である。優先度の異なる複数のスレッドが実行可能状態であるならば、優先度の高いスレッドに含まれる命令がより早く実行される。
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
図1は、従来技術における、ロック獲得中にGCが発生することによって、システムの処理時間が遅延する例を示す。
共有DBは、複数のサーバ(WAS1、2、・・・)から排他的にアクセスされるレコードを含むデータベースである。また、上記サーバでGCが発生した場合のアプリケーションの処理時間は、GCが発生しなかった場合の処理時間に比べて遅くなる。
ここで、WAS1上のアプリケーションが上記データベースのロックを獲得しロックを解放する前に、GCが発生したとする。すると、上記アプリケーションの処理時間は遅延する。よって、上記データベースのロックが獲得されている時間は長時間になる。そして、上記ロックが獲得されている間、別のサーバ(WAS2、3、・・・)上のアプリケーションは、上記データベースのロックを獲得できない。上記別のサーバが上記データベースのロックを獲得するためには、WAS1上のGCが完了し、そしてロックが解放されるまで待つ必要がある。このため、システム全体の処理時間の遅延が起きる。
図2は、本発明の実施態様である、システム構成の例を示す。
コンピュータ・プログラム実行環境(201)は、スレッド(202〜204)、制御部(208)、カウンタ部(209)、ロック部(210)、計算部(211)、第1の変更部(212)及び第2の変更部(213)を有する。また、スレッド(202〜204)それぞれには、カウンタ(205〜207)が関連付けられている。カウンタ部(209)は、上記カウンタ(205〜207)の値の合計値を保持する。代替的に、スレッド(202〜204)それぞれに上記カウンタ(205〜207)を関連付ける代わりに、カウンタ部(209)が、上記カウンタの値の合計値のみを保持してもよい。
外部資源(214)を排他使用する場合、スレッド(202〜204)において、外部資源(214)を排他使用しながら命令が実行される。
ロック部(210)は、外部資源(214)を排他使用するために、外部資源の排他使用を獲得する命令を実行する。
カウンタ部(209)は、上記獲得する命令の実行に応じて、外部資源(214)を排他使用しながら命令が実行されるスレッド(202〜204)に関連付けられたカウンタ(205〜207)の値を増減する。カウンタ(205〜207)の値の増減に従い、カウンタ部は、カウンタの値の合計値を増減する。例えば、スレッド(202)において上記獲得する命令が実行されたならば、カウンタ部(209)は、カウンタ(205)の値を1増加する。該カウンタ(205)の値の増加に伴い、カウンタ部(209)は、カウンタ(205〜207)の値の合計値を1増加する。代替的に、上記獲得する命令の実行に応じて、カウンタ部(209)が上記カウンタの値の合計値を増減してもよい。例えば、スレッド(202)において上記獲得する命令が実行された場合、カウンタ部(209)は、カウンタの値の合計値を1増加する。
上記外部資源(214)の排他使用を終了する場合、ロック部(210)は、外部資源の排他使用を解放する命令を実行する。カウンタ部(209)は、上記解放する命令の実行に応じて、外部資源(214)を排他使用しながら命令が実行されるスレッド(202〜204)に関連付けられたカウンタ(205〜207)の値を増減する。該カウンタ(205〜207)の値の増減により、カウンタ部は、カウンタの値の合計値を増減する。例えば、スレッド(202)において上記解放する命令が実行されたならば、カウンタ部(209)は、カウンタ(205)の値を1減少させる。該カウンタ(205)の値の減少に伴い、カウンタ部(209)は、カウンタ(205〜207)の値の合計値を1減少する。代替的に、上記解放する命令の実行に応じて、カウンタ部(209)が上記カウンタの値の合計値を増減してもよい。例えば、スレッド(202)において上記解放する命令が実行された場合、カウンタ部(209)は、カウンタの値の合計値を1減少する。
第1の変更部(212)は、上記カウンタ(205〜207)の値の合計値の増減に応じて、外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッド(図示せず)の優先度を変更する。
第2の変更部(213)は、上記カウンタ(205〜207)の値の増減に応じて、上記スレッド(202〜204)の優先度を変更する。
制御部(208)は、上記カウンタ(205〜207)の値又は値の変化に応じて、上記スレッド(202〜204)に含まれる命令の実行順を制御する。該命令は、外部資源を排他使用しながら実行される命令及び外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令である。
計算部(211)は、上記スレッドにおいてメソッドが実行されることに応じて、実行回数カウンタの値を求める。実行回数カウンタの値の増分は、該実行回数カウンタの増分に上記カウンタの値を重みとして付与した値である。
制御部(208)はまた、上記実行回数カウンタの値に応じて、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行する。
以下においては、コンピュータ・プログラム実行環境がJAVA(商標)処理系である場合を例に、本発明の実施態様を説明する。
図3は、本発明の実施態様における、JAVA(商標)処理系の構成の例を示す。
アプリケーション用スレッド(306〜308)は、プログラムが実行されるスレッドである。各アプリケーション用スレッド(306〜308)には、「カウンタ」が保持される。該カウンタは、アプリケーション用スレッド(306〜308)それぞれに関連付けられる。また、「カウンタの値の合計値」は、JDBCライブラリ(310)に保持される。なお、上記カウンタ及びカウンタの値の合計値は、プログラムを組み込める対象のどこに保持されてもよい。例えば、スレッドスケジューラ(309)に上記カウンタ及びカウンタの値の合計値が保持されてもよい。代替的に、上記スレッドそれぞれにカウンタが保持されず、上記カウンタの値の合計値のみがJDBCライブラリ(310)に保持されてもよい。
JITスレッド(305)は、JITコンパイル処理が実行されるスレッドである。JIT用プロファイラ(302)は、上記アプリケーション用スレッド(306〜308)でのメソッドの実行を監視し、上記JITコンパイルのタイミングを制御するプロファイラである。
JIT用プロファイラ(302)は、上記メソッドのプロファイリングをするときに、スレッドに関連付けられたカウンタの値を考慮する。JIT用プロファイラ(302)は、該カウンタの値が大きい状態のスレッドから呼ばれたメソッドが早めにJITコンパイルされるように、従来のメソッド実行回数カウンタに重みをつけて加算する。JIT用プロファイラ(302)は、計算部(図2、211)及び制御部(図2、208)に対応する。
JAVAヒープ(304)は、JAVA(商標)で使用できるメモリ領域である。ヒープ管理機構(303)は、上記メモリ領域を管理する仕組みであり、オブジェクトの作成処理及びGCを実行する。ヒープ管理機構(303)は、上記カウンタの値の合計値を元にGCのタイミングを調整する。ヒープ管理機構(303)は、上記カウンタの値の合計値が小さい場合はヒープに余裕があってもGCを起動する。また、ヒープ管理機構(303)は、上記カウンタの値の合計値が大きい場合は、ヒープの空きが非常に少なくなるまでGCを抑制する。ヒープ管理機構(303)は、制御部(208)に対応する。
スレッドスケジューラ(309)は、上記アプリケーション用スレッド(306〜308)及びJITスレッド(305)の実行順を制御するスケジューラである。スレッドスケジューラ(309)は、カウンタの値の合計値をもとにJITスレッドの優先度を調整する。スレッドスケジューラ(309)は、上記カウンタの値の合計値が大きい場合は、JITスレッド(305)の優先度を下げてJITコンパイル処理を抑制する。スレッドスケジューラ(309)は、上記カウンタの値の合計値が大きい場合は、JITスレッドの優先度を上げてJITコンパイル処理を起動しやすくする。
スレッドスケジューラ(309)はまた、スレッドに関連付けられたカウンタの値を考慮してスレッドスケジューリングを行う。スレッドスケジューラ(309)は、上記カウンタの値が大きいスレッドを、カウンタの値が小さいスレッドよりも優先的に実行する。スレッドスケジューラ(309)は、制御部(208)、第1の変更部(図2、212)及び第2の変更部(図2、213)に対応する。
その他のコンポ―ネット群(312〜315)は、コンピュータ・システムに様々な機能を提供するコンポーネントの集まりである。該コンポーネントは、例えば、インタプリタ及びクラスローダである。
図3の例では、外部資源として外部データベース(以下、DB)(311)が用いられる。ここで、JDBCライブラリ(310)は、JAVA(商標)プログラムがDB(311)にアクセスする機能を提供するライブラリである。JDBCライブラリ(310)は、カウンタ部(図2、209)及びロック部(図2、210)に対応する。
カウンタの値又はカウンタの値の合計値の増減は、上記JDBCライブラリ(310)のメソッドによって行われる。
図4Aは、本発明の実施態様における、JDBCライブラリ(図3、310)のメソッドの動作フローを示す。ここで、ロックの対象はDB(図3、311)のレコードとする。
ステップ401では、アプリケーション用スレッド(図3、306〜308)においてJDBCライブラリ(310)のメソッドが呼び出されると、コンピュータ・システムは、該メソッドで指定されたDBアクセスの命令を実行する。
ステップ402では、コンピュータ・システムは、上記DBアクセスの命令がDB(311)のレコードのロックを獲得する命令かどうかの判定を行う。上記DBアクセスの命令がDB(311)のレコードのロックを獲得する命令の場合、ステップ403に進む。ステップ403では、コンピュータ・システムは、上記DBアクセスの命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を増加させる。該増加に従い、カウンタの値の合計値が増加する。さらに、コンピュータ・システムは、カウンタの値又はカウンタの値の合計値が変化したことをヒープ管理機構(図3、303)及びスレッドスケジューラ(図3、309)に通知する(ステップ406)。
ステップ404では、コンピュータ・システムは、上記DBアクセスの命令がDB(311)のレコードのロックを解放する命令かどうかの判定を行う。上記DBアクセスの命令が、DB(311)のレコードのロックを解放する命令の場合、ステップ405に進む。ステップ405では、コンピュータ・システムは、上記DBアクセスの命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を減少させる。該減少に従い、カウンタの値の合計値が減少する。
ステップ406では、コンピュータ・システムは、カウンタの値が変化したことをヒープ管理機構(303)及びスレッドスケジューラ(309)に通知する。
カウンタの増減値は、上記ロックを獲得したスレッド以外のプロセスの受ける影響に応じて、管理者が変更してもよい。例えば、上記カウンタの増減値は、他のサーバの処理を妨害する危険性の度合いに応じて変更する。例えば、管理者は、レコードロックならば±1、レコードロックよりも影響の大きい(すなわち、処理を急ぐ必要のある)テーブルロックならば±5のように、ロックの影響規模によってカウンタの増減する値を変更してもよい。また、DB(311)に対する処理要求の返り値として増減する値(他サーバへの影響度)を受け取り、それに基づいてカウンタの値を増減する方法も考えられる。
図4B及び図4Cは、本発明の実施態様における、ヒープ管理機構の動作フローを示す。
図4B及び図4Cの動作フローは、上記Aの方法に対応する。
図4Bは、本発明の実施態様における、メモリの割り当てが必要な処理、すなわちオブジェクト作成が要求された場合の動作フローを示す。
ステップ411では、オブジェクト作成が要求されると、コンピュータ・システムは、ヒープ管理機構(303)を用いて、GCを実行するか否かの判定を行う。該判定の方法は、別途下記に記載する。該判定の結果、GCを実行する必要がある場合、ステップ412に進む。
ステップ412では、コンピュータ・システムは、GCを実行する。そして、ステップ413に進む。
上記判定の結果、GCを実行する必要がない場合、ステップ413に進む。
ステップ413では、コンピュータ・システムは、オブジェクトにメモリを割り当てる。
図4Cは、本発明の実施態様における、上記カウンタの値の合計値が減少した場合に、コンピュータ・システムが実行する処理の動作フローを示す。
ステップ414では、カウンタの値の合計値が減少すると、コンピュータ・システムは、ヒープ管理機構(303)を用いて、GCを実行するか否かの判定を行う。該判定の方法は、別途下記に記載する。該判定の結果、GCを実行する必要がある場合、ステップ415に進む。
ステップ415では、コンピュータ・システムは、GCを実行する。
コンピュータ・システムは、GCを、通常メモリ・アロケーションに使用できるメモリサイズがある閾値T未満になった段階で実行する。本発明の実施態様では、コンピュータ・システムは、上記閾値をカウンタの値を用いて調整する。上記調整するための式を以下に示す。
T÷(1+k×N(カウンタの値の合計値))
ここで、kは効き具合を調整するパラメータである。kの値が大きいほど、上記閾値は大きく調整される。kは、管理者又はコンピュータ・システムによって設定される値である。管理者がkを設定する場合、管理者は、例えば、0.1を設定する。コンピュータ・システムが自動的にkを設定する場合、コンピュータ・システムは、例えばGCの頻度をモニタし、該頻度があまりにも高ければ、kの値を小さくするという実装が考えられうる。
コンピュータ・システムは、GCを実行するか否かの判定を上記式から求められる値と、メモリ・アロケーションに使用できるメモリサイズとを比較して行う。なお、上記図4Bの例では、メモリ・アロケーションに使用できるメモリサイズからオブジェクトに割り当てられるメモリサイズを引いた値が、実際のメモリ・アロケーションに使用できるメモリサイズである。コンピュータ・システムは、GCをメモリ・アロケーションに使用できるメモリサイズが上記式から求められる値未満の場合に実行する。つまり、上記カウンタの値の合計値が小さい場合は、ヒープメモリに余裕があってもGCが実行される。これにより、カウンタの値の合計値が大きい状態でGCが実行される可能性を減らしている。
図4Dは、本発明の実施態様における、スレッドスケジューラ(309)の動作フローを示す。
図4Dの動作フローは、上記B及びCの方法に対応する。
図4Dの動作フローは、カウンタの値が変化した場合にコンピュータ・システムによって実行される。
ステップ421では、カウンタの値が変化したことに応じて、コンピュータ・システムは、スレッドスケジューラ(309)を用いて、カウンタの値が変化したスレッドの優先度をカウンタの値に応じて変更する。コンピュータ・システムは、カウンタの値が大きいスレッドほど、該スレッドが優先的に実行されるように設定する。
ステップ422では、コンピュータ・システムは、JITコンパイルが実行されるスレッド(図3、305)(以下、JITスレッド)の優先度をカウンタの値の合計値に応じて変更する。上記JITスレッド(305)は、上記カウンタの値の合計値が小さいほど優先的に実行されるように設定される。
つまり、カウンタの値の合計値が大きい値の場合、JITコンパイルは抑制される。よって、カウンタ値の大きいスレッドの実行が妨害されにくくなる。
図4Eは、本発明の実施態様における、JIT用プロファイラ(図3、302)の動作フローを示す。
図4Eの動作フローは、上記Dの方法に対応する。
JAVA(商標)処理系では、一般的にメソッドごとに実行回数カウンタが用意されている。上記実行回数カウンタには、上記メソッドがインタプリタ方式で実行される毎に、1が加えられる。そして、該実行回数が、閾値をこえるとJITコンパイルされるような構成になっていることが多い。上記閾値は、JAVA(商標)処理系において管理者が設定できる値である。
ステップ431では、上記スレッドにおいてメソッドが実行されることに応じて、コンピュータ・システムは、上記メソッドに用意された上記実行回数カウンタに1を加える。さらにコンピュータ・システムは、メソッドが実行されたスレッドに関連付けられたカウンタの値を上記実行回数カウンタに足し込む。該足し込みにより「急いでいる」状態で実行されたメソッドが早めにJITコンパイルされるように制御される。
ステップ432では、コンピュータ・システムは、上記カウンタの値が足し込まれた実行回数カウンタの値と閾値が比較する。上記実行回数カウンタの値が閾値より大きい場合、ステップ433に進む。
ステップ433では、コンピュータ・システムは、上記メソッドをJITコンパイルするリストに登録する。
上記動作フローにより、ロック中に実行されるメソッドが早めにコンパイルされる。よって、次回以降の該メソッドの処理の高速化が望める。
また、上記実行回数が大きいメソッドについて、コンパイルの最適化レベルを高く設定してもよい。
図4Fは、本発明の実施態様における、JDBCライブラリ(310)の拡張動作フローを示す。
図4Fの動作フローは、上記Eの方法に対応する。
図4Fの動作フローは、DB(311)にアクセスする命令が呼び出された場合にコンピュータ・システムによって実行される。
ステップ441では、DB(311)にアクセスする命令が呼び出されることに応じて、コンピュータ・システムは、JDBCドライバにおいて、上記命令がDB(311)のロックを獲得する命令かどうかの判定を行う。DB(311)にアクセスする命令がロックを獲得する命令である場合、ステップ442に進む。一方、DB(311)にアクセスする命令がロックを獲得する命令でない場合、ステップ444に進む。
ステップ442では、コンピュータ・システムは、実際にロックを獲得する前に、該命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を増加させる。該増加に従い、カウンタの値の合計値が増加する。
ステップ443では、コンピュータ・システムは、ハウスキーピング処理、例えばGC又はリストにコンパイルすべきメソッドがたまっているJITコンパイル処理を実行する。また、ロック獲得中に実行されるメソッドが判断できる場合は、コンピュータ・システムは、該メソッドをJITコンパイルする。該コンパイルにより、ロックを獲得した後に、GC又はJITコンパイル処理が発生してしまい、ロック期間が長期化してしまう危険性を下げることができる。
ステップ444では、コンピュータ・システムは、指定されたDB(311)にアクセスする命令を実行する。
ステップ445では、コンピュータ・システムは、上記DB(311)にアクセスする命令がDB(311)のロックを解放する命令かどうかの判定を行う。上記DB(311)にアクセスする命令がロックを解放する命令である場合、ステップ446に進む。一方、上記DBにアクセスする命令がロックを解放する命令でない場合、該動作は終了する。
ステップ446では、コンピュータ・システムは、上記DB(311)にアクセスする命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を減少させる。該減少に従い、カウンタの値の合計値が減少する。
ステップ447では、コンピュータ・システムは、遅延させられていたハウスキーピング処理、例えばGC又はJITコンパイル処理を行う。また、ロック獲得中に実行されたメソッドが判断できる場合、コンピュータ・システムは、上記メソッドが次回実行されるときに実行を高速化するために、明示的にJITコンパイルすることができる。
図5は、本発明の実施態様における、コンピュータ・ハードウェアのブロック図を示す。
コンピュータ・システム(501)は、CPU(503)とメイン・メモリ(502)と含み、これらはバス(514)に接続されている。CPU(503)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のXeon(商標)シリーズ、Core(商標)シリーズ、Atom(商標)シリーズ、Pentium(商標)シリーズ、Celeron(商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ及びSempron(商標)などを使用することができる。バス(514)には、ディスプレイ・コントローラ(507)を介して、LCDモニタなどのディスプレイ(512)が接続される。ディスプレイ(512)は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス(514)にはまた、IDE又はSATAコントローラ(504)を介して、ハードディスク又はシリコン・ディスク(505)と、CD−ROM、DVDドライブ又はBDドライブ(506)が接続される。
ハードディスク(505)には、オペレーティング・システム、J2EEなどのJAVA(商標)処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリにロード可能に記憶されている。
CD−ROM、DVD又はBDドライブ(506)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラムをハードディスクに追加導入するために使用される。バス(514)には更に、キーボード・マウスコントローラ(509)を介して、キーボード(510)及びマウス(511)が接続されている。
通信インタフェース(513)は、例えばイーサネット(商標)・プロトコルに従う。通信インタフェース(513)は、通信コントローラ(508)を介してバス(514)に接続され、コンピュータ・システム及び通信回線(515)を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線LAN環境、或いは例えばIEEE802.11a/b/g/nなどの無線LAN接続規格に基づく無線LAN環境であってもよい。
従来技術における、ロック獲得中にGCが発生することによって、システムの処理時間が遅延する例を示す。 本発明の実施態様である、システム構成の例を示す。 本発明の実施態様における、JAVA(商標)処理系の構成の例を示す。 本発明の実施態様における、JDBCライブラリのメソッドの動作フローを示す。 本発明の実施態様における、メモリの割り当てが必要な処理、すなわちオブジェクト作成が要求された場合の動作フローを示す 本発明の実施態様における、カウンタの値の合計値が減少した場合に、コンピュータ・システムが実行する処理の動作フローを示す。 本発明の実施態様における、スレッドスケジューラの動作フローを示す。 本発明の実施態様における、JIT用プロファイラの動作フローを示す。 本発明の実施態様における、JDBCライブラリの拡張動作フローを示す。 本発明の実施態様における、コンピュータ・ハードウェアのブロック図を示す。

Claims (25)

  1. 外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐためのコンピュータ・システムであって、
    前記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの値を増減するカウンタ部と、
    前記カウンタの値又は前記カウンタの値の変化に応じて、前記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
    を含む、前記コンピュータ・システム。
  2. 前記制御部が、
    プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズが前記カウンタの値の合計値に基づいて求められる値よりも小さい場合、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、
    請求項1に記載のコンピュータ・システム。
  3. 前記カウンタの値の合計値に基づいて求められる値がT÷(1+k×N)によって求められ、
    ここで、T=外部資源を排他使用していない場合に適用される前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が開始されるメモリサイズの閾値であり、
    k=カウンタの値の合計値に基づいて求められる値を調整するためのパラメータであり、
    N=カウンタの値の合計値である、
    請求項2に記載のコンピュータ・システム。
  4. 前記制御部が、前記カウンタの値の合計値が減少した場合であって、プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズがカウンタの値の減少した合計値に基づいて再度求められた値よりも小さい場合、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、
    請求項1に記載のコンピュータ・システム。
  5. 前記カウンタの値の合計値の増減に応じて、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドの優先度を変更する第1の変更部をさらに含む、請求項1に記載のコンピュータ・システム。
  6. 前記カウンタの値の増減に応じて、前記カウンタに対応するスレッドの優先度を変更する第2の変更部をさらに含む、請求項1に記載のコンピュータ・システム。
  7. 前記第2の変更部が、前記カウンタの値が大きいスレッドに高い優先度を与える、請求項に記載のコンピュータ・システム。
  8. 前記制御部が、前記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行する、請求項に記載のコンピュータ・システム。
  9. 上記制御部が、メソッドごとに設けられた実行回数カウンタの値を増加する際に、当該カウンタの増分に該メソッドを実行するスレッドの上記カウンタの値をさらに重みとして付与する、請求項1に記載のコンピュータ・システム。
  10. 前記スレッドにおいて前記メソッドが実行されることに応じて、前記実行回数カウンタの値を求める計算部をさらに含み、
    前記制御部が、前記実行回数カウンタの値が閾値よりも大きい場合、前記スレッドそれぞれに関連付けられたメソッドについて、前記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行する、請求項に記載のコンピュータ・システム。
  11. 前記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令が、ジャストインタイム(JIT)コンパイルを実行する命令であり、
    前記制御部が、前記実行回数カウンタの値が前記閾値よりも大きい場合、前記実行回数カウンタに関連付けられたメソッドを前記JITコンパイルするリストに追加する、
    請求項10に記載のコンピュータ・システム。
  12. 前記カウンタ部が、前記排他使用が獲得される前に、前記排他使用を獲得する命令の実行に応じて前記カウンタの値を増加し、
    前記制御部が、前記排他使用が獲得される前に、前記カウンタの値の増加に応じて、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、請求項1に記載のコンピュータ・システム。
  13. 前記カウンタ部が、前記排他使用が解放された後に、前記排他使用を解放する命令の実行に応じて前記カウンタの値を減少し、
    前記制御部が、前記カウンタの値の減少に応じて、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、請求項1に記載のコンピュータ・システム。
  14. 前記カウンタ部が、
    前記排他使用を獲得する命令の実行に応じて、前記カウンタの値を増加し、
    前記排他使用を解放する命令の実行に応じて、前記カウンタの値を減少する、
    請求項1に記載のコンピュータ・システム。
  15. 前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が、ガベージコレクションを実行する命令である、請求項2〜4、6〜8、12又は13のいずれか1項に記載のコンピュータ・システム。
  16. 前記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令が、ジャストインタイム(JIT)コンパイルを実行する命令である、請求項5、12又は13のいずれか1項に記載のコンピュータ・システム。
  17. 外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐためのコンピュータ・システムであって、
    前記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの全ての値の合計値を増減するカウンタ部と、
    前記カウンタの全ての値の合計値又は前記カウンタの全ての値の合計値の変化に応じて、前記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
    を含む、前記コンピュータ・システム。
  18. データベースを排他使用しながら命令が実行される少なくとも1のスレッドを実行するJAVA(登録商標)処理系において、データベースを排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐためのコンピュータ・システムであって、
    前記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するロック部と、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの値を増減するカウンタ部と、
    前記カウンタの値又は前記カウンタの値の変化に応じて、前記データベースを排他使用しながら実行される命令と、ガベージコレクション又はジャストインタイム(JIT)コンパイルとの実行順を制御する制御部と
    を含む、前記コンピュータ・システム。
  19. データベースを排他使用しながら命令が実行される少なくとも1のスレッドを実行するJAVA(登録商標)処理系において、データベースを排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐためのコンピュータ・システムであって、
    前記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの全ての値の合計値を増減するカウンタ部と、
    前記カウンタの全ての値の合計値又は前記カウンタの全ての値の合計値の変化に応じて、前記データベースを排他使用しながら実行される命令と、ガベージコレクション又はジャストインタイム(JIT)コンパイルとの実行順を制御する制御部と
    を含む、前記コンピュータ・システム。
  20. 外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐための方法であって、該方法は、コンピュータ・システムに下記ステップを実行させ、該ステップは、
    前記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
    前記カウンタの値又は前記カウンタの値の変化に応じて、前記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御するステップと、
    を含む、前記方法。
  21. 上記方法は、前記コンピュータ・システムに下記ステップをさらに実行させ、該ステップは、
    メソッドごとに設けられた実行回数カウンタの値を増加する際に、当該カウンタの増分に該メソッドを実行するスレッドの上記カウンタの値を重みとしてさらに付与するステップを含む、請求項20に記載の方法。
  22. 外部資源を排他使用しながら命令が実行される少なくとも1のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐための方法であって、該方法は、コンピュータ・システムに下記ステップを実行させ、該ステップは、
    前記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するステップと、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの全ての値の合計値を増減するステップと、
    前記カウンタの値の全ての値の合計値又は前記カウンタの全ての値の合計値の変化に応じて、前記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御するステップと
    を含む、前記方法。
  23. データベースを排他使用しながら命令が実行される少なくとも1のスレッドを実行するJAVA(登録商標)処理系において、データベースを排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐための方法であって、該方法は、コンピュータ・システムに下記ステップを実行させ、該ステップは、
    前記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
    前記カウンタの値又は前記カウンタの値の変化に応じて、前記データベースを排他使用しながら実行される命令と、ガベージコレクション又はジャストインタイム(JIT)コンパイルとの実行順を制御するステップと
    を含む、前記方法。
  24. データベースを排他使用しながら命令が実行される少なくとも1のスレッドを実行するJAVA(登録商標)処理系において、データベースを排他使用しながら実行される少なくとも1の命令の実行時間の遅延を防ぐための方法であって、該方法は、コンピュータ・システムに下記ステップを実行させ、該ステップは、
    前記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するステップと、
    前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの全ての値の合計値を増減するステップと、
    前記カウンタの全ての値の合計値又は前記カウンタの全ての値の合計値の変化に応じて、前記データベースを排他使用しながら実行される命令と、ガベージコレクション又はジャストインタイム(JIT)コンパイルとの実行順を制御するステップと
    を含む、前記方法。
  25. コンピュータに、請求項20〜24のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
JP2008286523A 2008-11-07 2008-11-07 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム Expired - Fee Related JP4778035B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008286523A JP4778035B2 (ja) 2008-11-07 2008-11-07 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
US12/612,920 US8201178B2 (en) 2008-11-07 2009-11-05 Preventing delay in execution time of instruction executed by exclusively using external resource

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008286523A JP4778035B2 (ja) 2008-11-07 2008-11-07 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2010113585A JP2010113585A (ja) 2010-05-20
JP4778035B2 true JP4778035B2 (ja) 2011-09-21

Family

ID=42166361

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008286523A Expired - Fee Related JP4778035B2 (ja) 2008-11-07 2008-11-07 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム

Country Status (2)

Country Link
US (1) US8201178B2 (ja)
JP (1) JP4778035B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070094669A1 (en) * 2005-10-25 2007-04-26 Microsoft Corporation Shared resource acquisition
CA2693938A1 (en) 2010-02-22 2011-08-22 Ibm Canada Limited - Ibm Canada Limitee Software object lock management using observations
US20130061213A1 (en) * 2011-08-26 2013-03-07 Cognitive Electronics, Inc. Methods and systems for optimizing execution of a program in a parallel processing environment
US9400677B2 (en) 2013-01-02 2016-07-26 Apple Inc. Adaptive handling of priority inversions using transactions
US9477471B1 (en) * 2015-07-07 2016-10-25 Versa Networks, Inc. Maintaining lock-free, high frequency, high performance counters in software
CN109445950A (zh) * 2018-09-30 2019-03-08 青岛海尔科技有限公司 Ocf资源的互斥访问方法及系统、服务端、介质、设备
US10802944B2 (en) 2019-01-23 2020-10-13 Salesforce.Com, Inc. Dynamically maintaining alarm thresholds for software application performance management
US11194591B2 (en) 2019-01-23 2021-12-07 Salesforce.Com, Inc. Scalable software resource loader
US10747551B2 (en) 2019-01-23 2020-08-18 Salesforce.Com, Inc. Software application optimization
US10922095B2 (en) 2019-04-15 2021-02-16 Salesforce.Com, Inc. Software application performance regression analysis
US10922062B2 (en) * 2019-04-15 2021-02-16 Salesforce.Com, Inc. Software application optimization

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05120041A (ja) * 1991-10-25 1993-05-18 Nec Corp 資源割り当て管理方式
JP3826626B2 (ja) * 1997-11-21 2006-09-27 オムロン株式会社 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US7188344B1 (en) * 1999-12-21 2007-03-06 Unisys Corporation Architecture for a read/write thread lock
US7159220B2 (en) * 2001-09-28 2007-01-02 Intel Corporation Flexible acceleration of java thread synchronization on multiprocessor computers
JP3908760B2 (ja) * 2004-10-26 2007-04-25 株式会社東芝 情報端末装置とそのプログラム
JP2007004595A (ja) * 2005-06-24 2007-01-11 Hitachi Ltd コンピュータ制御方法、コンピュータ、情報処理システム、及びプログラム
US7962707B2 (en) * 2005-07-06 2011-06-14 Honeywell International Inc. Apparatus and method for deterministic garbage collection of a heap memory
JP2007086838A (ja) * 2005-09-20 2007-04-05 National Institute Of Advanced Industrial & Technology ゼロガベージコレクション通信仲介装置
JP4148528B2 (ja) * 2006-10-31 2008-09-10 インターナショナル・ビジネス・マシーンズ・コーポレーション 排他制御を効率化する技術

Also Published As

Publication number Publication date
US20100122260A1 (en) 2010-05-13
US8201178B2 (en) 2012-06-12
JP2010113585A (ja) 2010-05-20

Similar Documents

Publication Publication Date Title
JP4778035B2 (ja) 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
US9727372B2 (en) Scheduling computer jobs for execution
US9619378B2 (en) Dynamically optimizing memory allocation across virtual machines
US9875145B2 (en) Load based dynamic resource sets
US8146065B2 (en) Running time of short running applications by effectively interleaving compilation with computation in a just-in-time environment
US8924981B1 (en) Calculating priority indicators for requests in a queue
US20090288090A1 (en) Priority control program, apparatus and method
US20080313639A1 (en) Policy based scheduling of software applications
US20080172670A1 (en) Method and Apparatus for Reducing Contention for Computer System Resources Using Soft Locks
US8954969B2 (en) File system object node management
US20070067762A1 (en) Exposing code contentions
JP2008204243A (ja) ジョブ実行制御方法およびシステム
Wei et al. Implementing Data Aware Scheduling In Gfarm (R) Using LSF (TM) Scheduler plugin Mechanism.
Cheng et al. Dynamic resource provisioning for iterative workloads on Apache Spark
JP5055059B2 (ja) データベース処理方法、その実施システム及びプログラム
WO2015075803A1 (ja) 情報処理装置、方法、プログラム及び記録媒体
US20090320036A1 (en) File System Object Node Management
US9367439B2 (en) Physical memory usage prediction
US20080127194A1 (en) Job allocation program and job allocation method
JP2014139845A (ja) データ処理システム、そのコンピュータプログラムおよびデータ処理方法
EP4123461A1 (en) Intelligent query plan cache size management
JP5444055B2 (ja) 仮想サーバスケールダウンシステムとスケールダウン方法およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101028

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110301

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110322

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110322

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110615

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110615

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20110615

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110630

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140708

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees