(57)【特許請求の範囲】
【請求項１】
コンピューティング環境においてキュープロセッシングをサポートするための方法であって、
前記コンピューティング環境において、１つ以上の中央処理装置（ＣＰＵ）によって実現される１つ以上のマイクロプロセッサ上で実行されるスレッドをキューに関連付けることと、
１つ以上のタスクが前記キューに到着すると、前記１つ以上のタスクを処理するために前記スレッドを使用することと、
前記キューにタスクが存在しない場合に、スリープ状態およびアイドル状態のうちの１つに前記スレッドを適合するように構成することとを含み、
前記スレッドがスリープ状態である場合、前記１つ以上のＣＰＵは、別のスレッドにスイッチングすることを可能にされ、
タスクが前記キューに到着すると、前記スレッドは、前記スリープ状態から起動され、
前記スリープ状態およびアイドル状態のうちの１つに前記スレッドを適合するように構成することは、
オペレーティングシステム（ＯＳ）のファンクションに基づいて、前記スレッドを前記スリープ状態にし、前記スリープ状態から前記スレッドを起動することについてのトータルコストを得ることと、
前記キューに対するワークロードに基づいて、前記スレッドを前記アイドル状態にすることについてのコストを得ることと、
前記スレッドを前記スリープ状態にし、前記スリープ状態から前記スレッドを起動することについての前記トータルコストを、前記スレッドを前記アイドル状態にすることについての前記コストと比較することと、
前記スレッドを前記スリープ状態にすることについての前記トータルコストが、前記スレッドを前記アイドル状態にすることについての前記コストよりも小さい場合、前記スレッドをスリープ状態になるように構成することと、そうでなければ、前記スレッドをアイドル状態になるように構成することとを含む、方法。
【請求項２】
前記スレッドが前記アイドル状態である場合、前記スレッドが前記１つ以上のＣＰＵをスピンすることを可能にすることをさらに含む、請求項１に記載の方法。
【請求項３】
前記１つ以上のマイクロプロセッサ上で実行される複数のスレッドを含むスレッドプールを提供することをさらに含む、請求項１または２に記載の方法。
【請求項４】
各前記スレッドがスリープ状態またはアイドル状態であるべきであるかどうかを独立して決定することを可能にすることをさらに含む、請求項３に記載の方法。
【請求項５】
マシン読取可能な形態のプログラム命令を含むコンピュータプログラムであって、前記プログラム命令は、コンピュータシステムによって実行されると、請求項１〜４のいずれか１項に記載の方法を前記コンピュータシステムに行わせる、コンピュータプログラム。
【請求項６】
分散データグリッドにおいて非同期メッセージプロセッシングをサポートするためのシステムであって、
１つ以上の中央処理装置（ＣＰＵ）によって実現される１つ以上のマイクロプロセッサと、
１つ以上のマイクロプロセッサ上で実行されるスレッドとを含み、前記スレッドはコンピューティング環境においてキューに関連付けられており、前記スレッドは、
１つ以上のタスクが前記キューに到着すると、前記１つ以上のタスクを処理することを行なうように動作し、
前記キューにタスクが存在しない場合、スリープ状態およびアイドル状態のうちの１つに適合するように構成され、
前記スレッドがスリープ状態である場合、前記１つ以上のＣＰＵは別のスレッドにスイッチングすることを可能にされ、
タスクが前記キューに到着すると、前記スレッドは前記スリープ状態から起動され、
前記システムは、オペレーティングシステム（ＯＳ）のファンクションに基づいて、前記スレッドを前記スリープ状態にし、前記スリープ状態から前記スレッドを起動することについてのトータルコストを得るよう動作し、
前記スレッドは、自らが前記アイドル状態である場合、前記１つ以上のＣＰＵをスピンするよう動作し、
前記システムは、前記キューに対するワークロードに基づいて、前記スレッドを前記アイドル状態にすることについてのコストを得るよう動作し、
前記システムは、前記スレッドを前記スリープ状態にし、前記スリープ状態から前記スレッドを起動することについての前記トータルコストを、前記スレッドを前記アイドル状態にすることについての前記コストと比較するよう動作し、
前記スレッドは、前記スレッドを前記スリープ状態にすることについての前記トータルコストが、前記スレッドを前記アイドル状態にすることについての前記コストよりも小さい場合、スリープ状態になるように構成され、そうでなければ、前記スレッドはアイドル状態になるように構成される、システム。
【請求項７】
前記１つ以上のマイクロプロセッサ上で実行される複数のスレッドを含むスレッドプールをさらに含み、前記システムは、各前記スレッドがスリープ状態またはアイドル状態であるべきであるかどうかを独立して決定する、請求項６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権表示
この特許文書の開示の一部は、著作権の保護下にある内容を含む。著作権所有者は、特許商標庁の特許ファイルまたはレコードに現れるので、誰でも当該特許文書または特許開示を複製することについて異議はないが、そうでなければ如何なる場合でもすべての著作権を留保する。
【０００２】
発明の分野
本発明は一般にコンピュータシステムに関し、特に、コンピューティング環境におけるスレッド管理に関する。
【背景技術】
【０００３】
背景
現代のコンピューティングシステム、特に大組織およびエンタープライズによって使用されるコンピューティングシステムは、サイズおよび複雑性が増加し続けている。特に、インターネットアプリケーションのような領域では、何百万ものユーザが当該アプリケーションに同時にアクセスすることが可能であるべきであるとの期待が存在し、これは、実際上、ユーザによって生成および消費されるコンテンツの量とそのコンテンツに伴うトランザクションとの指数関数的な増加に結びつく。また、そのようなアクティビティにより、データベースおよびメタデータストアへのトランザクションコールの数が対応して増加することになり、当該需要に対応するキャパシティが限られることになる。
【０００４】
これは、本発明の実施形態が対応することが意図される一般的な領域である。
【発明の概要】
【課題を解決するための手段】
【０００５】
概要
分散データグリッドのようなコンピューティング環境において、キュープロセッシングをサポートし得るシステムおよび方法が本願明細書において記載される。中央処理装置（ＣＰＵ）をサポートする１つ以上のマイクロプロセッサ上で実行されるスレッドが、コンピューティング環境においてキューに関連付けられ得る。システムは、１つ以上のタスクがキューに到着すると、上記１つ以上のタスクを処理するために当該スレッドを使用し得る。さらに、システムは、キューにタスクが存在しない場合、スリープ状態およびアイドル状態のうちの１つにスレッドを適合するように構成し得る。
【図面の簡単な説明】
【０００６】
【図１】本発明のさまざまな実施形態に従ったデータグリッドクラスタの図である。
【図２】本発明の実施形態に従った、コンピューティング環境におけるキュープロセッシングをサポートすることについての図を示す図である。
【図３】本発明の実施形態に従った、コンピューティング環境においてスレッドを管理するためにアダプティブビジーウェイトアプローチを使用する図を示す図である。
【図４】本発明の実施形態に従った、コンピューティング環境においてキュープロセッシングをサポートするためにスレッドプールを使用する図を示す図である。
【図５】本発明の実施形態に従った、コンピューティング環境においてスレッドを管理するためにアダプティブビジーウェイトアプローチを使用するための例示的なフローチャートを示す図である。
【図６】本発明の実施形態の機能的構成を示す図である。
【図７】本発明の実施形態が実現され得るコンピュータシステムを示す図である。
【発明を実施するための形態】
【０００７】
詳細な説明
コンピューティング環境においてキュープロセッシング（queue processing）をサポートし得るシステムおよび方法が本願明細書において記載される。
【０００８】
分散データグリッド
ある実施形態に従うと、本願明細書において「データグリッドクラスタ」または「データグリッド」と称されるものは、分散化またはクラスタ化された環境内において情報および演算のような関連するオペレーションを管理するために一緒に作動する複数のコンピュータサーバを含むシステムである。データグリッドクラスタは、これらのサーバにわたって共有されるアプリケーションオブジェクトおよびデータを管理するために使用され得る。好ましくは、データグリッドクラスタは、低い応答時間、高いスループット、予測可能なスケーラビリティ、連続的な可用性、および情報信頼性を有するべきである。これらの能力の結果、データグリッドクラスタは、計算集中的である、ステートフルな中間層アプリケーションにおける使用に良好に好適である。たとえばオラクルコヒーレンスデータグリッドクラスタ（Oracle Coherence data grid cluster）といったデータグリッドクラスタのいくつかの例は、より高い性能を達成するために情報をインメモリで格納し得るとともに、複数のサーバにわたって同期される当該情報のコピーを保つ際に冗長性を用い得、これにより、サーバの故障の場合にシステムの回復性とデータの可用性とを保証する。たとえば、オラクルコヒーレンスデータグリッドクラスタは、信頼性があり、非常にスケーラブルなピアツーピアクラスタリングプロトコル上で、レプリケート（replicated）および分散（パーティション化）されたデータ管理およびキャッシングサービスを提供する。
【０００９】
インメモリデータグリッドは、共に作動する多くのサーバ上にデータを分散することによってデータストレージおよび管理能力を提供し得る。データグリッドは、アプリケーションサーバと同じ層において実行されるか、または、アプリケーションサーバ内において実行されるミドルウェアであり得る。データグリッドは、データの管理および処理を提供し得、さらに、データがグリッドにおいて位置するところに処理をプッシュし得る。さらに、インメモリデータグリッドは、サーバが作動しなくなるかまたはネットワークから切断される場合に、自動的かつトランスピアレントにフェイルオーバーし、そのクラスタデータ管理サービスを再分散することによって単一障害点（single points of failure）を除去し得る。新しいサーバが追加されるか、または、フェイルしたサーバが再起動されると、当該サーバは自動的にクラスタに加わり、サービスはそれに戻るようにフェイルオーバーされ得、トランスピアレントにクラスタロードを再分散する。データグリッドはさらに、ネットワークレベルのフォールトトレランス機能と、トランスピアレントなソフトリスタート（soft restart）能力とを含み得る。
【００１０】
実施形態に従うと、データグリッドクラスタの機能は、異なるクラスタサービスの使用に基づく。クラスタサービスは、ルートクラスタサービス、パーティション化されたキャッシュサービス、および、プロキシサービスを含み得る。データグリッドクラスタ内では、各クラスタノードは、クラスタサービスを提供および消費する両方の点において多くのクラスタサービスに参加し得る。各クラスタサービスは、データグリッドクラスタ内のサービスを一意に識別するサービス名と、クラスタサービスが行うことが可能であることを定義するサービスタイプとを有する。データグリッドクラスタにおいて各クラスタノード上で実行されるルートクラスタサービス以外に、各サービスタイプの複数の名称付けされたインスタンス（multiple named instances）が存在し得る。サービスは、ユーザによって構成されるか、または、サービスのデフォルトセットとしてデータグリッドクラスタによって提供されるかのいずれかであり得る。
【００１１】
図１は、本発明のさまざまな実施形態に従ったデータグリッドクラスタの図である。図１に示されるように、たとえばオラクルコヒーレンスデータグリッドクラスタといったデータグリッドクラスタ１００は、さまざまなクラスタサービス１１１〜１１６が実行される複数のクラスタノード１０１〜１０６を含む。さらに、キャッシュコンフィギュレーションファイル１１０は、データグリッドクラスタ１００を構成するために使用され得る。
【００１２】
キュープロセッシングウェイト(Queue Processing Wait)
図２は、本発明の実施形態に従った、コンピューティング環境におけるキュープロセッシングをサポートすることについての図を示す。図２に示されるように、分散データグリッドのようなコンピューティング環境２００は、キュープロセッシングをサポートするために１つ以上のスレッド（たとえばスレッド２１１）を使用し得る。スレッド２１１は、たとえば、分散データグリッドに基づいたメッセージングバスをサポートするために、キュー２０１に到着するさまざまなタスクを扱うことを担い得る。
【００１３】
さらに、キュー２０１にタスクが存在しない場合、システムは、次のタスク（たとえばタスク２０３）がキュー２０１に到着するまでスレッド２１１が待機することを可能にする。スレッド２１１は、タスク２０３の到着を待っている間、異なる状態へ構成され得る（すなわち異なるストラテジーを使用する）。
【００１４】
本発明の実施形態に従うと、スレッド２１１は、システムがＣＰＵ２０２をスピンし得る（すなわちＣＰＵが別のスレッドを実行するようにスイッチングされ得ない）アイドル状態に構成され得る。待機の間にＣＰＵ２０２をスピンすることによって、システムは、新しいタスク２０３がキュー２０１に到着するとすぐに、タスク２０３を扱うようスレッド２１１を使用し得る。したがって、システムは、低レイテンシーおよび高性能を達成し得る。
【００１５】
スレッド２１１がアイドル状態である場合、ＣＰＵ２０２がスピンしている際にＣＰＵ２０２は他のスレッドを実行するためにスイッチングされ得ないので、トレードオフとして、ＣＰＵ時間が浪費され得る。したがって、ワークロードが重く、かつ、２つの連続するタスク間のインターバル時間が短い傾向がある場合に、このアプローチは有利である。
【００１６】
代替的には、スレッド２１１はスリープ状態にされ得、その場合には、たとえばタスク２０３がキュー１０１に到着する際にスレッド２１１が起動されるまで、ＣＰＵ２０２は別のスレッドを実行するようスイッチングするようにされる。
【００１７】
一方、スレッド２１１をキュープロセッシングのために使用するために、システムは、この第２のアプローチを使用して２つのオペレーション（すなわちスレッド２１１をスリープさせる第１のオペレーション、および、スレッド２１１を起動する第２のオペレーション）を実行する必要がある。
【００１８】
したがって、このアプローチは、２つの連続するタスク同士間のインターバル時間が、スレッド２１１をスリープさせ、その後、次のタスク２０３が到着する際にスレッド２１１を起動するのにシステムによって費やされる合計のＣＰＵ時間よりも長い場合に有利である。
【００１９】
さらに、当該システムは、コヒーレンスデータグリッドクラスタによって使用されるインフィニバンド（ＩＢ：InfiniBand）ネットワークのような高性能ネットワークを利用し得る。結果として、全体的なレイテンシーは劇的に低減され得る。そのような場合において、上記２つのオペレーションを実行するために費やされるＣＰＵ時間は、全体的なレイテンシーの有意な部分に寄与し得る。
【００２０】
アダプティブビジーウェイト（Adaptive Busy Wait）
図３は、本発明の実施形態に従った、コンピューティング環境においてスレッドを管理するためにアダプティブビジーウェイトアプローチを使用する図を示す。図３に示されるように、スレッド３１１は、コンピューティング環境３００においてキュー３０１を処理するために使用され得る。
【００２１】
キュー３０１が空の場合、システムは、新しいタスクがキュー３０１に到着するのを待っている間、スレッド３１１を構成するためにどのストラテジーを使用するべきであるか決定する（すなわちスレッド３１１をスリープにするべきかまたはＣＰＵ３０２をスピンするべきかを決める）よう、アダプティブビジーウェイトアプローチを使用し得る。
【００２２】
アダプティブビジーウェイトアプローチを使用して、システムは、スレッド２１１をスリープさせることと、その後で起動することとの両方に必要とされ得る合計のＣＰＵ時間を取得し得る。次いで、システムはまず、スレッド３１１をスリープ状態にしてスリープ状態からスレッド３１１を起動することについてのトータルコストを、ＣＰＵ３０２をスピンすることによりスレッドをアイドル状態にすることについてのコストと比較する。
【００２３】
これに対応して、スレッド３１１をスリープ状態にすることについてのトータルコストがスレッド３１１をアイドル状態にすることについてのコストよりも小さい場合、システムは、スリープ状態になるようにスレッド３１１を構成し得る。そうでなければ、システムは、アイドル状態になるようにスレッド３１１を構成し得る。
【００２４】
図３に示されるように、システムは、オペレーションを実行することについてのコストを判定するために、オペレーティングシステム（ＯＳ）３０３によって提供されるファンクション３１３を利用し得る。たとえば、ＣＰＵ３０２の上で実行されるＯＳファンクション３１３は、スレッド３１１によってどれだけ多くのＣＰＵ時間が消費されたかについての情報を提供し得る。システムは、あるオペレーションを実行する前および実行した後のスレッド３１１によって消費される合計のＣＰＵ時間を比較することにより、当該オペレーションを実行することについてのコストを推定し得る。
【００２５】
さらに、システムは、システムがスレッド３１１をスリープさせる代わりにＣＰＵ３０２をスピンする必要があり得るＣＰＵ時間を推定し得る。たとえば、システムは、キュー３０１に到着する２つの連続するタスク同士間の平均インターバル時間がどれだけ長いかに基づき、そのような情報を得ることができる。
【００２６】
本発明の実施形態に従うと、システムは、キュー３０１上のワークロードに基づいてスレッド３１１を適合するように（adaptively）構成し得る。たとえば、キュー３０１上のワークロードが軽い場合、システムは、新しいタスクを待っている間、スレッド３１１をスリープ状態になるように構成し得る。その後、ワークロードが重くなると、ＣＰＵをスピンさせておくのに必要とされるＣＰＵ時間が劇的に低減され得る。
【００２７】
結果として、システムは、スレッド３１１をスリープさせ、次いで、新しいタスクがキュー３０１に到着した後で起動させるプロセスを行うよりも、ＣＰＵ３０２をアイドル状態にしておく（またはスピンさせておく）ほうが実際にコストが低い（cheaper）であると判断し得る。その後、ワークロードが再び軽くなると、システムは、新しいタスクを待っている間、スレッド３１１をスリープ状態になるように再構成し得る。
【００２８】
さらに、アダプティブビジーウェイトアプローチを使用する代わりに、システムは、どれだけ多くのＣＰＵ時間がスピン（すなわちアイドル状態）の際に消費されることが許容されるかを定義するしきい値をセットし得る。別の態様では、スピンのために使用されるＣＰＵ時間がしきい値を越える場合には、システムはスレッド２１１をスリープ状態にセットし得る。
【００２９】
したがって、このアプローチについての不利な面は、均一なしきい値は、動的なキュープロセッシングシステムについて常に最適化され得るわけではないということである。キュー３０１上のワークロードが軽く、かつ、スレッド３１１が他のタスクを実行するためにスイッチングされ得る場合であっても、均一なしきい値では、スピンに使用されるＣＰＵ時間の一部が浪費されることが防止されない。
【００３０】
図４は、本発明の実施形態に従った、コンピューティング環境においてキュープロセッシングをサポートするためにスレッドプールを使用する図を示す。図４に示されるように、コンピューティング環境４００におけるスレッドプール４１０は、たとえばスレッドＡ４１１〜Ｃ４１３のような、ＣＰＵ４２０上で実行される複数のスレッドを含み得る。さらに、スレッドプール４１０は、たとえばキューＡ４０１〜Ｃ４０３といった複数のキューに関連付けられ得る。
【００３１】
さらに、スレッドＡ４１１〜Ｃ４１３は、キューＡ４０１〜Ｃ４０３に到着するタスクを処理するよう使用され得る。スレッドプール４１０におけるスレッドＡ４１１〜Ｃ４１３の各々について、システムは独立して、新しいタスクがキューＡ４０１〜Ｃ４０３に到着するのを待っている間、ＣＰＵ４２０をスピンするべきであるかまたはスレッドをスリープさせるべきであるかどうかを決定し得る。
【００３２】
したがって、システムは、キューＡ４０１〜Ｃ４０３上の異なるワークロードに基づいて、スレッドＡ４１１〜Ｃ４１３が異なって構成されることを可能にし得る。
【００３３】
図５は、本発明の実施形態に従った、コンピューティング環境においてスレッドを管理するためにアダプティブビジーウェイトアプローチを使用するための例示的なフローチャートを示す。図５に示されるように、ステップ５０１では、システムは、コンピューティング環境において、キューに、１つ以上のマイクロプロセッサ上で実行されるスレッドを関連付け得る。その後、ステップ５０２では、システムは、１つ以上のタスクがキューに到着すると、１つ以上のタスクを処理するためにスレッドを使用し得る。さらに、ステップ５０３では、システムは、キューにタスクが存在しない場合、スリープ状態およびアイドル状態のうちの１つにスレッドを適合するように構成し得る。
【００３４】
図６を参照して、本発明の実施形態に従ったシステム６００が示される。図６は、システム６００によって実現される機能的な構成の図を示す。システム６００は、コンピューティングモジュール６１０、マネージャ６２０、プロセッサ６３０、タスクプロセッサ６４０、および、構成モジュール６５０を含む。
【００３５】
コンピューティングモジュール６１０はマネージャ６２０にキューを提供する。マネージャ６２０は、コンピューティングモジュール６１０において、キューにスレッドを関連付ける。スレッドは、プロセッサ６２０のような１つ以上のマイクロプロセッサ上で実行される。タスクプロセッサ６４０は、１つ以上のタスクがキューに到着すると、１つ以上のタスクを処理するためにスレッドを使用する。構成モジュール６５０は、キューにタスクが存在しない場合、スリープ状態およびアイドル状態のうちの１つにスレッドを適合するように構成する。
【００３６】
図７は、周知のハードウェア要素を含むコンピュータシステム７００の図を示す。すなわち、コンピュータシステム７００は、中央処理装置（ＣＰＵ）７１０、マウス７２０、キーボード７３０、ランダムアクセスメモリ（ＲＡＭ）７４０、ハードディスク７５０、ディスクドライブ７６０、通信インターフェイス（Ｉ／Ｆ）７７０、およびモニタ７８０を含む。コンピュータシステム７００は、システム６００を構成するサーバノードとして機能し得る。
【００３７】
本発明の実施形態に従うと、コンピューティングモジュール６１０、マネージャ６２０、プロセッサ６３０、タスクプロセッサ６４０、および、構成モジュール６５０は、１つ以上のコンピュータシステム７００によって提供される。コンピューティングモジュール６１０、マネージャ６２０、プロセッサ６３０、タスクプロセッサ６４０、および、構成モジュール６５０は、ＣＰＵ７１０によって実現される。さらに別の局面において、コンピューティングモジュール６１０、マネージャ６２０、プロセッサ６３０、タスクプロセッサ６４０、および、構成モジュール６５０が実現されるように、１つより多いプロセッサが使用され得る。すなわち、コンピューティングモジュール６１０、マネージャ６２０、プロセッサ６３０、タスクプロセッサ６４０、および、構成モジュール６５０のいずれかは、互いから物理的に遠隔であり得る。
【００３８】
さらに別の局面において、システム６００は、コンピューティングモジュール６１０、マネージャ６２０、プロセッサ６３０、タスクプロセッサ６４０、および、構成モジュール６５０として機能する複数のハードワイヤード回路を使用することによって実現され得る。
【００３９】
本発明は、１つ以上のプロセッサ、メモリ、および／または本開示の教示に従ってプログラムされたコンピュータ読取可能な記録媒体を含む１つ以上の従来の汎用または専用デジタルコンピュータ、コンピューティングデバイス、マシン、またはマイクロプロセッサを用いて簡便に実施され得る。ソフトウェア技術の当業者には明らかであるように、適切なソフトウェアコーディングは、熟練したプログラマによって本開示の教示に基づき容易に用意され得る。
【００４０】
いくつかの実施形態では、本発明は、本発明の処理のいずれかを実行するようコンピュータをプログラムするのに用いられ得る命令を格納した記憶媒体またはコンピュータ読取可能媒体であるコンピュータプログラムプロダクトを含む。当該記憶媒体は、フロッピーディスク（登録商標）、光ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、マイクロドライブ、および光磁気ディスクを含む任意のタイプのディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＤＲＡＭ、ＶＲＡＭ、フラッシュメモリ素子、磁気または光学カード、ナノシステム（分子メモリＩＣを含む）、または命令および／またはデータを格納するのに好適な任意のタイプの媒体もしくは装置を含み得るが、これらに限定されない。
【００４１】
本発明の上記の記載は、例示および説明目的で与えられている。網羅的であることまたは開示されたそのものの形態に本発明を限定することを意図したものではない。当業者にとっては、多くの修正例および変形例が明確であろう。上記修正例および変形例は、記載された機能の任意の関連する組合せを含む。上記の実施形態は、本発明の原理およびその実際的な適用を最もよく説明するために選択および記載されたものであり、これにより他の当業者が、特定の使用に好適なさまざまな修正例を考慮して、さまざまな実施形態について本発明を理解するのが可能になる。本発明の範囲は、添付の特許請求の範囲およびそれらの均等物によって定義されることが意図される。
【図１】
0006556726.tif 000002
【図２】
0006556726.tif 000003
【図３】
0006556726.tif 000004
【図４】
0006556726.tif 000005
【図５】
0006556726.tif 000006
【図６】
0006556726.tif 000007
【図７】
0006556726.tif 000008