(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
詳細な説明
トランザクションミドルウェアマシン環境において適応セルフチューニングロックメカニズムをサポートするためのシステムおよび方法が本明細書中に記載される。
【0009】
発明の一実施形態に従うと、当該システムは、高性能ハードウェア、たとえば64ビットプロセッサ技術、高性能な大容量メモリ、ならびに冗長なインフィニバンドおよびイーサネット(登録商標)ネットワーキングと、WebLogic Suiteのようなアプリケーションサーバまたはミドルウェア環境との組合せを含み、これにより、迅速に備えられ得るとともにオンデマンドでスケール変更可能な大規模並列インメモリグリッドを含む完全なJava(登録商標)EEアプリケーションサーバコンプレックスを提供する。一実施形態に従うと、当該システムは、アプリケーションサーバグリッド、ストレージエリアネットワーク、およびインフィニバンド(IB)ネットワークを提供するフルラック、ハーフラック、もしくはクォーターラック、または他の構成としてデプロイされ得る。ミドルウェアマシンソフトウェアは、たとえばWebLogic Server、JRockitまたはHotspot JVM、Oracle Linux(登録商標)またはSolaris、およびOracle VMといった、アプリケーションサーバと、ミドルウェアと、他の機能性とを提供し得る。一実施形態に従うと、当該システムは、IBネットワークによって互いに通信する複数のコンピュートノードと、IBスイッチゲートウェイと、ストレージノードまたはユニットとを含み得る。ラック構成として実装される場合、当該ラックの未使用部分は、空のままとされるか、またはフィラー(filler)によって占有され得る。
【0010】
本明細書において「Sun Oracle Exalogic」または「Exalogic」と称される発明の一実施形態に従うと、当該システムは、Oracle Middleware SW suiteまたはWeblogicといったミドルウェアまたはアプリケーションサーバソフトウェアをホスティングするための、デプロイが容易なソリューションである。本明細書に記載されるように、一実施形態に従うと、当該システムは、1つ以上のサーバと、ストレージユニットと、ストレージネットワーキングのためのIBファブリックと、ミドルウェアアプリケーションをホストするために要求されるすべての他のコンポーネントとを含む「グリッド・イン・ア・ボックス(grid in a box)」である。たとえばReal Application ClustersおよびExalogic Open storageを用いて大規模並列グリッドアーキテクチャを活用することにより、すべてのタイプのミドルウェアアプリケーションのために有意な性能が与えられ得る。このシステムは、線形のI/Oスケーラビリティとともに向上した性能を与え、使用および管理が簡易であり、ミッションクリティカルな可用性および信頼性を与える。
【0011】
発明の一実施形態に従うと、Tuxedo(登録商標)は、高性能の分散ビジネスアプリケーションの構築、実行および管理を可能にし、多くの多階層アプリケーション開発ツールによってトランザクションミドルウェアとして使用されてきた一組のソフトウェアモジュールである。Tuxedoは、分散コンピューティング環境において分散トランザクション処理を管理するために使用することができるミドルウェアプラットフォームである。無限のスケーラビリティおよび規格に基づいたインターオペラビリティを提供しつつ、企業レガシーアプリケーションをアンロックし、それらをサービス指向のアーキテクチャに拡張するための検証済みのプラットフォームである。
【0012】
発明の一実施形態に従うと、Tuxedoシステムのようなトランザクションミドルウェアシステムは、Exalogicミドルウェアマシンのような複数のプロセッサを有する高速マシン、およびインフィニバンド(IB)ネットワークのような高性能ネットワーク接続を利用することができる。
【0013】
ロックメカニズム
図1は、発明の一実施形態に従う、ロックメカニズムをサポートするトランザクションミドルウェアマシン環境の例を示す。
図1に示されるように、トランザクションミドルウェア環境100は、同時トランザクションが(すなわちプロセス111〜115について)ある場合、Tuxedo環境においてたとえば掲示板(bulletin board:BB)などの共有メモリ101内のさまざまなトランザクションデータ102を保護するためのロックメカニズム103を採用することができる。
【0014】
発明の一実施形態に従うと、トランザクションミドルウェア環境100は、有効なロックメカニズムを実装するためのアトミックTAS(テスト・アンド・セット)104アセンブリコンポーネントを用いることによってマルチプロセッサマシンを利用することができる。その上、トランザクションアプリケーションにおけるプロセスは、必要に応じて、オペレーティングシステム(OS)によって提供されるセマフォメカニズム107を用いてデータ102に対するロックを取得することができる。
【0015】
たとえば、プロセス111がデータ102に対するロックの取得を望む場合、プロセス111はTASオペレーションを多数回行なうことができる。システムは、許容されるTASオペレーションの最大回数であるスピンカウント(spin count)105を特定することができる。
【0016】
図1に示されるように、スピンカウント105に到達する前にロック103が利用可能になった場合、プロセス111は、OSによって提供されるセマフォ107メカニズムよりもはるかに低いコストでロック103を取得することができる。
【0017】
そうでなく、許容される最大回数のTASオペレーションをプロセス111が行なうまではロック103が利用可能にならない場合、プロセス111はセマフォ107上でブロックし、ロック所有者がロック103を解除するまで待機することができる。たとえば、セマフォ107上でブロックしているロック要求を、たとえばセマフォ待機キュー106などのキューに入れることができる。
【0018】
その上、セマフォ107上でブロックしているロック要求は、TASアセンブリコンポーネント104に基づくロック要求よりも高い優先順位を有することができる。したがって、セマフォ待機キュー106が空でない限り、ロック保持者はまずロック103をセマフォ待機キュー106内のプロセスに対して解除する。
【0019】
適応セルフチューニングロックメカニズム
図2は、発明の一実施形態に従う、トランザクションミドルウェアマシン環境において適応セルフチューニングロックメカニズムをサポートする例を示す。
図2に示されるように、トランザクションミドルウェア環境200は、同時トランザクションが(すなわちプロセス211〜215について)ある場合、共有メモリ201内のさまざまなトランザクションデータ202を保護するためのロックメカニズム203を採用することができる。
【0020】
たとえば、プロセス211〜215がデータ202に対するロック203の取得を望む場合、プロセス211〜215の各々はTAS204オペレーションを多数回行なうことができる。システムは、許容されるTASオペレーションの最大回数であるスピンカウント205を特定することができる。発明の一実施形態に従うと、Tuxedo構成ファイルにおけるSPINCOUNTパラメータなどのメタデータを用いて、スピンカウント205のデフォルト値および/または初期値を特定することができる。
【0021】
図2に示されるように、スピンカウント205に到達する前にロック203が利用可能になった場合、プロセス(たとえばプロセス211〜212および214〜215の1つ)は、OSによって提供されるセマフォメカニズムよりもはるかに低いコストでロック203を取得することができる。
【0022】
そうでなく、スピンカウント205に到達するまではロック203が利用可能にならない(すなわちスピン失敗が起こる)場合は、セマフォ上でブロックし、ロック所有者がロック203を解除して覚醒させるまで待機するようにプロセス(たとえばプロセス213)を構成することができる。
【0023】
さらに、スピンカウント値205を共有メモリ201に記憶させることができる。Tuxedoデーモンプロセスのような特殊なプロセスは、先のチューニング期間中に収集された動作情報に従ってスピンカウント値205を周期的に調整(または変更)することができる。たとえば、Tuxedoデーモンは、デフォルトで目標スピンカウント値を5秒につき一度更新することができる。
【0024】
一実施形態に従うと、異なるアルゴリズムを用いてスピンカウント205の値を算出および構成することができる。たとえば、現在のチューニング期間のCPUアイドル率が十分である場合、スピン失敗レート208が目標よりも高い(すなわち、現在のチューニング期間中にあまりに多くのTAS204オペレーションがロック203の取得に失敗し、セマフォに切換わった)ときに、単純アルゴリズム206がスピンカウント205の値を増加させることができる。さらに、この単純アルゴリズムは、CPUアイドル率が高過ぎる場合、スピンカウント205の値を減少させることができる。
【0025】
単純アルゴリズム206は容易に実行できるが、単純アルゴリズム206は、たとえばOracle databaseなどの実際のリソースマネージャ(RM)上で実行されると異なる問題に直面し得る。たとえば、スピン失敗率が標準以下である限り単純アルゴリズム206はスピンカウント値205を増加させることになるため、単純アルゴリズム206は極めて大きいスピンカウント値205を生成し得る。また、スピンカウント値205を増加させるために単純アルゴリズム206が取るステップは大きくなり過ぎる傾向があり、スピンカウント値205は数回のチューニングで上限に到達し得るため、単純アルゴリズム206はスピンカウント値205を微調整できない場合がある。その上、単純アルゴリズム206は大きいスピンカウント値205を生成し得、これは実のところ、実際のRM上で実行された場合にシステムにおけるスループットの悪化の原因となる。さらに、単純アルゴリズム206は、アイドルCPU率が十分高い場合、スピンカウント値205を減少させない場合がある。さらに、単純アルゴリズム206が実際のRM環境に従ってデフォルトの元のスピンカウント値205およびスピン失敗レート208のデフォルト目標を構成することは困難であり得る。
【0026】
代替的に、システムは適応アルゴリズム207を採用して、リアルタイムでスピンカウント205の値を動的に算出することができる。適応アルゴリズム207は、単純アルゴリズム206を用いて、システムがたとえばOracle databaseなどの実際のリソースマネージャ(RM)上で実行されると起こり得るさまざまな問題を回避することができる。
【0027】
発明の一実施形態に従うと、適応アルゴリズム207は良好なチューニングを維持することによって不良のチューニングを防止することができる。たとえば、適応アルゴリズム207は、最後の良好なチューニング期間からのスピンカウント値205およびスピン失敗レート208を記憶することができる。
【0028】
チューニング期間210毎に、システムは、現在のスピン失敗レート208が、記憶された最後の良好なスピン失敗率よりも良好であるか否かを確認することができる。現在のスピン失敗レート208が最後の良好なスピン失敗率よりも良好である場合、システムは現在のチューニング期間210を良好なチューニングと見なすことができる。そして、システムは、現在のスピンカウント値205および現在のスピン失敗レート208をキャッシュすることができる。一方、現在のスピン失敗レートがチューニング後に増加した(すなわち悪化した)場合、システムは、記憶された最後の良好なスピンカウント値205を次のチューニング期間210に用いることができる。
【0029】
したがって、トランザクションミドルウェア環境200は、大規模な同時トランザクションシナリオをサポートし、高スループットを達成することができる。
【0030】
図3は、発明の一実施形態に従う、トランザクションミドルウェアマシン環境において適応セルフチューニングロックメカニズムをサポートするための例示的なフローチャートを示す。
図3に示されるように、ステップ301において、各プロセスは、共有メモリ内のデータに対するロックを取得するために1つ以上のテスト・アンド・セット(TAS)オペレーションを行なうことができる。その上、ステップ302において、システムは現在のチューニング期間のスピン失敗レートを取得することができ、許容される最大回数のTASオペレーションを行った後でプロセスがロックの取得に失敗した場合、スピン失敗が発生する。さらに、ステップ303において、システムは、取得したスピン失敗レートに基づいて次のチューニング期間のスピンカウント値を適応的に構成することができ、スピンカウントは、次のチューニング期間について許容されるTASオペレーションの最大回数を特定する。
【0031】
目標スピンカウント値を動的に算出するための適応アルゴリズム
発明の一実施形態に従うと、システムは適応アルゴリズムを用いて、リアルタイムで目標スピンカウント値を動的に求めることができる。また、システムは、ハードウェア構成およびアプリケーションシナリオのコンテキストにおいて目標スピンカウント値を算出することができる。
【0032】
たとえば、Tuxedo環境において、システムは以下に示されるようなファンクションを呼出すことによってスピンカウント値を算出することができる。
【0033】
static int _calc_spintuning(_TCADEF)
Tuxedoにおいて、アプリケーションは、たとえば各走査ユニット(RESOURCEセクションにおけるパラメータSCANUNITを用いて構成され得る)において、各チューニング期間中に上記のファンクションを呼出すことができる。
【0034】
その上、以下に示されるように、システムは、CPU率の取出しを担う別のファンクションを呼出すことができる。
【0035】
static int getCPUrate(int type, float* rate, int size)
上記のファンクションについての実装はプラットフォームに依存し得る。たとえば、上記のファンクションは、Exalogic Elastic Cloud(Linux 64bit)プラットフォームにおけるfile/proc/statツールのようなシステムツールを介してCPU率を取得することができる。代替的に、上記のファンクションは、SPARC SuperCluster(Sparc 64bit)プラットフォームにおけるkstatライブラリのようなシステムライブラリを介してCPU率を取得することができる。
【0036】
図4は、発明の一実施形態に従う、適応セルフチューニングロックメカニズムをサポートするトランザクションミドルウェアマシン環境においてスピンカウント値を動的に増加させる例を示す。
図4に示されるように、適応アルゴリズムは、適切な場合、スピンカウントを動的に増加させることができる。
【0037】
ステップ401において、システムは、現在のアイドルCPUが十分であるか否か、すなわち、現在のチューニング期間のアイドルCPUレートがユーザが構成した最小アイドルCPUレートよりも大きいか否かを確認することができる。また、ステップ402において、システムは、現在のスピン失敗率がユーザが構成した目標未満であるか否かを確認することができる。
【0038】
次に、適応アルゴリズムは、現在のアイドルCPUが不十分である場合、または現在のチューニング期間の現在のスピン失敗率がユーザが構成した目標を既に達成している場合、スピンカウントを増加させないと決定し得る。
【0039】
そうでなければ、ステップ403において、適応アルゴリズムは、現在のスピン失敗率が、記憶されている最後の良好なスピン失敗率よりも良好であるか否かを確認することができる。また、ステップ404において、適応アルゴリズムは、現在のスピン失敗率がチューニングしなくては悪化するか否かを確認することができる。
【0040】
結果として、ステップ405において、現在のチューニング期間のスピン失敗率が最後の良好なスピン失敗率未満である場合、または現在のチューニング期間のスピン失敗率がチューニングしなくては悪化する場合、システムはスピンカウントを増加させることができる。
【0041】
最後に、ステップ406において、システムは次のチューニング期間に進むことができ、これによってプロセスは、次のチューニング期間について上記のステップ401〜405を再び繰返すことができる。
【0042】
Tuxedoにおいて、システムは以下のアルゴリズムを用いてスピンカウントの増加を求める(すなわち次のチューニング期間のtuned SPINCOUNTを算出する)ことができる。
【0043】
Tuned SPINCOUNT +=
(SPINCOUNT * base_factor) * min(max_times,(idle CPU ratio/ user CPU ratio))
上記のアルゴリズムは、2つのファクターを用いて、現在のSPINCOUNT値およびidle CPU ratio/user CPU ratioの値に依存するSPINCOUNTの増加を微調整する。現在のSPINCOUNTの貢献を減少させるために用いられ得る第1のファクターであるbase
_factorは1よりも小さい。第2のファクターであるmax
_timesは、idle CPU ratio/user CPU ratioの上限として用いられ得る。
【0044】
その上、可能性のあるSPINCOUNT値の範囲はいくつかの間隔に分割され得る。以下の表1は、いくつかの間隔の例示的な分割を示す。
【0046】
上記の表1に示されるように、異なる間隔は異なるbase
_factorおよびmax
_timesの値で構成され得る。SPINCOUNTが徐々に目標値に到達可能であることを確実にするために、base
_factorおよびmax
_timesの値は、SPINCOUNTが大きくなるにつれて小さくなるように設定され得る。
【0047】
図5は、発明の一実施形態に従う、適応セルフチューニングロックメカニズムをサポートするトランザクションミドルウェアマシン環境においてスピンカウント値を動的に減少させる例を示す。
図5に示されるように、適応アルゴリズムは、適切な場合、スピンカウントを動的に減少させることができる。
【0048】
ステップ501において、適応アルゴリズムは、アプリケーションがアイドル状態であるか否かを確認することができる。また、ステップ502において、適応アルゴリズムは、現在のアイドルCPU率が限界よりも大きいか否か、およびユーザCPU率が十分であるか否かを確認することができ、ステップ503において、適応アルゴリズムは、現在のスピンカウントが十分長い期間にわたってそのまま(または安定して)保たれているか否かを確認することができる。
【0049】
次に、ステップ504において、アプリケーションがアイドル状態である場合、アルゴリズムはスピンカウントを減少させることができる。たとえば、Tuxedoは以下の数式を用いてSPINCOUNT値を減少させることができる。
【0050】
Tuned SPINCOUNT -= Tuned SPINCOUNT>>3
上記のアルゴリズムを用いて、Tuxedoは、アプリケーションがアイドル状態である場合、高いSPINCOUNT値を自動的に元のSPINCOUNT値に戻すことができる。
【0051】
また、ステップ504において、現在のアイドルCPU率が(ユーザによって構成されるような)限界よりも大きく、ユーザCPU率が十分である場合、アルゴリズムはスピンカウントを減少させることができる。たとえば、Tuxedoは以下の数式を用いてSPINCOUNT値を減少させることができる。
【0052】
Tuned SPINCOUNT = Tuned SPINCOUNT>>2
その上、ステップ504において、現在のSPINCOUNTが十分長い期間にわたって安定して保たれている場合、アルゴリズムはスピンカウントを減少させることができる。たとえば、Tuxedoは以下の数式を用いてSPINCOUNT値を減少させることができる。
【0053】
Tuned SPINCOUNT -= Tuned SPINCOUNT>>3
上記のアルゴリズムを用いて、Tuxedoは、長い安定期間の後にSPINCOUNT値を減少させることができる。したがって、Tuxedoは、負荷が軽くなると、高いSPINCOUNTを自動的に適切な値に戻すことができる。
【0054】
最後に、ステップ505において、システムは次のチューニング期間に進むことができ、これによってプロセスは、次のチューニング期間について上記のステップ501〜504を再び繰返すことができる。
【0055】
図6は、発明の一実施形態に従う、適応セルフチューニングロックメカニズムをサポートするトランザクションミドルウェアマシン環境においてスピンカウント値をそのまま維持する例を示す。
図6に示されるように、適応アルゴリズムは、異なるシナリオにおいてスピンカウントをそのまま維持することができる。
【0056】
ステップ601において、適応アルゴリズムは、現在のスピン失敗率が要件を満たしているか否かを確認することができる。また、ステップ602において、適応アルゴリズムは、現在のスピンカウントがチューニング時に上限または下限に到達するか否かを確認することができ、ステップ603において、適応アルゴリズムは、現在のスピン失敗率が安定して保たれているか否かを確認することができる。
【0057】
次に、ステップ604において、現在のスピン失敗率が要件を満たしている場合、または現在のSPINCOUNTがチューニング時に上限もしくは下限に到達する場合、または現在のスピン失敗率が安定して保たれている場合、アルゴリズムはスピンカウントをそのまま保つことができる。
【0058】
負荷サージ保護を用いたスピンカウントの構成
図7は、発明の一実施形態に従う、適応セルフチューニングロックメカニズムをサポートするトランザクションミドルウェアマシン環境において負荷サージ保護を用いてスピンカウントを構成する例を示す。
図7に示されるように、トランザクションミドルウェア環境700は、同時トランザクションが(すなわちプロセス711〜715ついて)ある場合、共有メモリ701内のさまざまなトランザクションデータ702を保護するためのロック703を採用することができる。
【0059】
さらに、トランザクションミドルウェア環境700は、アトミックTAS(テスト・アンド・セット)704アセンブリコンポーネントを用いて有効なロックメカニズムを実装することができる。その上、システムは、スピン失敗が発生すると、プロセス(たとえばプロセス711〜713)をセマフォ待機キュー706に入れることができる。
【0060】
図7に示されるように、セマフォ待機キュー706内で待機するプロセス711〜713によるロック要求は、TASアセンブリコンポーネント704に基づくプロセス714〜715によるロック要求よりも高い優先順位を有することができる。
【0061】
したがって、セマフォ待機キュー706が空でない限り、ロック保持者はまずロック703をセマフォ待機キュー706内のプロセス711〜713に対して解除し、プロセス714〜715はロック703へのアクセスを有し得ない。
【0062】
発明の一実施形態に従うと、セマフォ待機キュー706の長さは時々異なり得るため、システムはリアルタイムでスピンカウント値を動的に求めることができる。
【0063】
図7に示されるように、システムは、TASアセンブリコンポーネント704を用いるプロセス714〜715に追加のスピンを加えることができる。たとえば、Tuxedoにおいて、システムは以下のアルゴリズムを用いて、実際に使用されるスピンカウント(すなわちused SPINCOUNT)をリアルタイムで求めることができる。
【0064】
Used SPINCOUNT = tuned SPINCOUNT+ extraspin * depth of the semaphore waiting queue
上記に示されるように、使用されるSPINCOUNTを算出する際、Tuxedoはセマフォ待機キューの現在の深さを考慮に入れることができる。セマフォ待機キューが深いほど、used SPINCOUNTは大きく設定され得る。
【0065】
発明の一実施形態に従うと、トランザクションミドルウェアマシン環境700において負荷サージが起こると、TASアセンブリコンポーネント704においてスピン失敗が急激に増加し得、これによって、セマフォ待機キュー706内でロック703を待機するプロセスが増加し得る。
【0066】
TASアセンブリコンポーネント704を用いるプロセス714〜715に追加のスピンを加えることによって、システムは、セマフォキューが深い場合にスピン失敗率を減少させることができる。さらに、システム内の負荷が最終的に軽くなると、セマフォ待機キュー706の長さは短くなる。したがって、実際に使用されるスピンカウントをチューニング期間内にリアルタイムで減少させることができる。
【0067】
図8は、発明の一実施形態に従う、トランザクションミドルウェアマシン環境において負荷サージ保護を用いてスピンカウントを構成するための例示的なフローチャートを示す。
図8に示されるように、ステップ801において、スピン失敗を有するプロセスが、セマフォ待機キュー内で、共有メモリ内のデータに対するロックの解除を待機することができる。次に、ステップ802において、ロック所有者が共有メモリ内のデータに対するロックを解除すると、プロセスは当該データにアクセスすることができる。さらに、ステップ803において、セマフォ待機キューが空でない場合、システムはTASオペレーションを行なう各プロセスに追加のスピンカウントを加えることができる。
【0068】
本発明は、本開示の教示に従ってプログラムされる1つ以上のプロセッサ、メモリおよび/またはコンピュータ読取可能記憶媒体を含む、1つ以上の従来の汎用もしくは専用デジタルコンピュータ、コンピューティングデバイス、マシン、またはマイクロプロセッサを用いて便利に実装され得る。ソフトウェア技術の当業者にとっては明確であるように、適切なソフトウェアコーディングは、本開示の教示に基づいて熟練プログラマによって容易に準備され得る。
【0069】
いくつかの実施形態において、本発明は、本発明の処理のいずれかを実行するようコンピュータをプログラムするのに用いられ得る命令を格納した記憶媒体またはコンピュータ可読媒体であるコンピュータプログラムプロダクトを含む。当該記憶媒体は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスクを含む任意のタイプのディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリ素子、磁気もしくは光学カード、ナノシステム(分子メモリICを含む)、または命令および/もしくはデータを格納するのに好適な任意のタイプの媒体もしくは装置を含み得るが、これらに限定されない。
【0070】
本発明の上記の記載は、例示および説明目的で与えられている。網羅的であることまたは開示されたそのものの形態に本発明を限定することを意図したものではない。当業者にとっては、多くの修正および変形が明確であろう。これらの修正および変形は、開示された特徴の関連するあらゆる組合せを含む。上記の実施形態は、本発明の原理およびその実際的な適用をもっともよく説明するために選択および記載されたものであり、これにより他の当業者が、特定の使用に好適なさまざまな修正例を考慮して、さまざまな実施形態について本発明を理解するのが可能になる。本発明の範囲は、添付の特許請求の範囲およびそれらの均等物によって定義されることが意図される。