(58)【調査した分野】(Int.Cl.,DB名)
前記ファイルディスクリプタキャッシュ上のスキャンが完了するのを待機しているときに、前記セレクタと関連付けられたスレッドがブロックされるように構成することをさらに含む、請求項3に記載の方法。
前記セレクタと関連付けられたスレッドを、前記1つ以上の読込み準備ファイルディスクリプタを前記1つ以上のセレクタにコピーするように構成することをさらに含む、請求項3または4に記載の方法。
処理している読込み準備ソケットのスレッドローカルリストを維持するように各前記マルチプレクサスレッドを構成することをさらに含む、請求項2〜5のうちいずれか1項に記載の方法。
前記セレクタから読込み準備ソケットを連続的に取得し、サスペンドされるかまたはコンテキストスイッチを行なう必要なしにそれらを処理するように1つ以上の前記マルチプレクサスレッドを構成することをさらに含む、請求項2〜8のうちいずれか1項に記載の方法。
【発明を実施するための形態】
【0007】
詳細な説明
クラスタ内でのワークシェアリング多重化をサポートすることができるシステムおよび方法が本明細書に記載される。
【0008】
図1は、発明のある実施の形態に従うミドルウェアマシン環境100の例を示す。
図1に示されるように、各ミドルウェアマシンシステム102は、数個のミドルウェアマシンラック構成要素104を含み、ミドルウェアマシンラック構成要素104は各々、高性能ミドルウェアマシンハードウェアノード106(たとえば64ビットプロセッサ、高性能大型メモリ、ならびに冗長インフィニバンドおよびイーサネット(登録商標)ネットワーキング)と、ミドルウェアマシンソフトウェア環境108との組合せを含む。その結果は、数日または数カ月ではなく数分でプロビジョニングすることができ、要求に応じて拡大縮小できる、完全なアプリケーションサーバ環境である。ある実施の形態に従うと、各ミドルウェアマシンシステムは、満杯の、2分の1の、もしくは4分の1のラックとしてまたはラック構成要素からなるその他の構成として準備することができ、数個のミドルウェアマシンシステムを、ここでもインフィニバンドを用いて連結することにより、より大きな環境を作ることができる。各ミドルウェアマシンソフトウェア環境に、数個のアプリケーションサーバインスタンスまたはその他のソフトウエアインスタンスを設けることができる。たとえば、
図1に示されるように、アプリケーションサーバインスタンス109が、仮想マシン116と、オペレーティングシステム120と、仮想化層124と、アプリケーションサーバ層128(たとえば、サーブレット(Servlet)132、EJB134、およびグリッドリンク(GlidLink)136それぞれのコンテナを含むウェブロジック(WebLogic))とを含み得るのに対し、別のアプリケーションサーバインスタンス110は、仮想マシン118と、オペレーティングシステム122と、仮想化層126と、データグリッド層140(たとえばアクティブキャッシュ142を含むコヒーレンス(Coherence))とを含み得る。インスタンスは各々、エクサロジック統合(integration)パックといったミドルウェアマシン統合構成要素150を用いて、互いに通信でき、かつ、そのミドルウェアマシンハードウェアノードおよびその他のノード双方とも通信できる。ミドルウェアマシン統合構成要素150自体が、以下でさらに詳細に説明するように、インフィニバンドおよびその他の特徴に対するサポートといったいくつかの最適化特徴を提供する。
【0009】
図2は、発明のある実施の形態に従うミドルウェアマシンプラットフォームまたは環境の別の例を示す。
図2に示されるように、各アプリケーションサーバインスタンスは、ミドルウェアマシン環境内において送信側および/または受信側160、161として機能し得る。各アプリケーションサーバインスタンスは、アプリケーションサーバがインフィニバンドネットワーク164を介して互いに通信できるようにするマルチプレクサ162、163にも関連付けられている。
図2に示される例では、アプリケーションサーバインスタンスは、ソケットダイレクトプロトコル(sockets direct protocol)168に関連付けられ得るカーネルスペース(kernel space)165と、ユーザスペース167と、アプリケーションサーバ(たとえばウェブロジックスペース)166と、JVM(たとえばジェイロキット/ホットスポット層)170と、WLSコア172と、サーブレットコンテナ174と、JSPコンパイラ176とを含み得る。他の例に従うと、ミドルウェアタイプのソフトウェアの他の組合せが含まれていてもよい。さまざまな実施の形態に従い、マシン統合構成要素は、ゼロバッファコピー、分散/収集I/O、T3接続、遅延デシリアライゼーション、およびグリッドリンクデータソースの特徴を提供することにより、共有されるインフラストラクチャの基礎を提供するとともにこのインフラストラクチャ内での性能を改善することができる。
【0010】
単純な多重化
図3は、ミドルウェアマシン環境において単純な多重化をサポートする例を示す。
図3に示されるように、ミドルウェアマシン環境300においてオペレーティングシステム(OS)によって維持されるファイルディスクリプタキャッシュ、すなわちFDキャッシュ301は、ソケット(xを付してある)といった1つ以上の読込み準備ファイルディスクリプタを含むことができる。ここで、大きなキャッシュのスキャンおよび/または大きなキャッシュへの同時アクセスの維持は、OSにおいて非効率的であり得る。
【0011】
セレクタインターフェイスを介して露出され得るセレクタ302などのポール装置は、ソケット(リストにおいて点で示す)などの読込み準備ファイルディスクリプタのキューを含むことができる。1つ以上のマルチプレクサスレッド305a−305cによってセレクタ302を用いて、FDキャッシュ301をポーリングすることができる。スレッド305a−305cは、たとえば完了するべきFDキャッシュ301上のスキャンを待機しているSelector.select()関数呼び出しを行いつつ、セレクタ302においてブロックされ得る。次いで、スレッド305a−305cは、読込み準備ファイルディスクリプタをセレクタリスト302にコピーすることができる。
【0012】
各マルチプレクサスレッド305a−305cは、スレッドローカルリスト303a−303cを維持することができる。スレッドローカルリスト303a−303cは、スレッド305a−305cによって処理することができる読込み準備ソケット(リストにおいて点で示す)のリストを含む。リスト303a−303cはスレッドローカルであるため、他のスレッドがアイドルであっても、他のスレッドは当該リストの処理を支援することができないことがある。
【0013】
図3に示されるように、スレッドローカルリスト303a−303cは異なる数の点を有し、これは個々のマルチプレクサスレッドに渡される異なる量のワークを表わす。たとえば、マルチプレクサスレッド305cがアイドルである間、マルチプレクサスレッド305bが読込み準備ソケットの長いリストを処理する必要があり得る。
【0014】
リクエストマネージャ304を用いて、ミドルウェアマシン環境300における異なるサーバからの1つ以上のリクエストを処理することができる。リクエストマネージャ304は、複数のキューを有する構成要素であり、マルチプレクサスレッド305a−305cによって準備されるリクエストをそれに追加することができる。これらのキューは、先入先出(FIFO)キューまたは優先度つきキューとすることができる。その上、スレッドカウントに対する制約は、リクエストマネージャ304内の様々なキューに強制され得る。
【0015】
図3に示されるように、1つのセレクタ302のみが複数のマルチプレクサスレッド305a−cに設けられる。たとえば、マルチプレクサスレッド305bが読込み準備ソケットを取得すると、すべてそれ自身のスレッドローカルリスト303bにワークを有する。同時に、他のマルチプレクサスレッド305aおよび305bがSelector.select()を入力するために待機し得る。したがって、読込み準備ソケットがシングルスレッドモデルの下で処理されるため、マルチプレクサのパフォーマンスが悪化し得る。
【0016】
さらに、一旦マルチプレクサスレッド305bがSelector.select()から戻ると、別のスレッド、たとえば305cがSelector.select()に再び入り得る。そのような場合、セレクタ302がちょうど空になったため、マルチプレクサスレッド305cをブロックする可能性が高い。したがって、1つのマルチプレクサスレッドが使用中の間、大部分のマルチプレクサスレッドが待機しているという状況があり得る。
【0017】
したがって、例では、
図3に示されるように、異なるマルチプレクサスレッド305a−305cによって共有セレクタ302およびFDキャッシュ301にアクセスする際にコンテンションがあり得る。さらに、読込み準備ソケットの非共有はスレッド不足を招く場合があり、使用されていないスレッドは利用可能であるが、読込み準備ソケットの処理を開始することはできない場合がある。
【0018】
単純な多重化に関する追加的な情報は、2011年5月17日に提出され、「クラスタ内のサーバ間でのパラレル多重化のためのシステムおよび方法」と題された米国特許出願第13/109,871号(代理人事件番号ORACL-05121US0)に開示されており、当該出願を引用によってここに援用する。
【0019】
パラレル多重化
図4は、ミドルウェアマシン環境におけるパラレル多重化をサポートする例を示す。
図4に示されるように、ミドルウェアマシン環境400は多数のセレクタ402a−cを含むことができ、セレクタ402a−cの各々を用いて、1つ以上のファイルディスクリプタキャッシュ、すなわちFDキャッシュ401a−cをポーリングすることができる。その上、ミドルウェアマシン環境400には、正確に同数のワーカースレッド、すなわちマルチプレクサスレッド405a−cがあり得、各マルチプレクサスレッド405a−cは、スレッドローカルリスト403a−cを維持している。
【0020】
パラレル多重化を用いると、各セレクタは1つのマルチプレクサスレッドによってのみアクセスされ得る。たとえば、マルチプレクサスレッド405aはセレクタ402aを使用し、マルチプレクサスレッド405bはセレクタ402bを使用し、マルチプレクサスレッド405cはセレクタを402cを使用する。ワーカースレッド405a−cは、セレクタ402a−cをシングルスレッドでポーリングし、読込み準備ソケットをシングルスレッドで処理する。個々のセレクタ402a−cを使用することにより、セレクタ当たりの到着率の低下が可能となり、したがってシステムリソースに対するコンテンションが減少する。
【0021】
パラレル多重化を用いると、単一のセレクタによってもたらされる負荷の不均衡を解決することができる。さらに、異なるセレクタおよびマルチプレクサスレッド間でのワークの均一な分配を実現する必要性が依然としてあり得る。
【0022】
したがって、
図4に示される例では、マルチプレクサスレッド405a−cによるセレクタ402a−cおよびFDキャッシュ401a−cへのアクセスにおけるコンテンションを減少させることができる。さらに、FDキャッシュスキャン効率は、比較可能なFDの組に対して、
図3に示される1つの大きなキャッシュ301の代わりに、いくつかのより小さなキャッシュ401a−cを用いることによって向上することができる。その上、
図4に示される設計は、依然としてスレッド不足を被り得る。なぜなら、マルチプレクサスレッド405a−cは読込み準備ソケットを共有していないからである。
【0023】
パラレル多重化に関する追加的な情報は、2011年5月17日に提出され、「クラスタ内のサーバ間でのパラレル多重化のためのシステムおよび方法」と題された米国特許出願第13/109,871号(代理人事件番号ORACL-05121US0)に開示されており、当該出願を引用によってここに援用する。
【0024】
ワークシェアリング多重化
図5は、発明の様々な実施の形態に従うワークシェアリング多重化をサポートする例を示す。
図5に示されるように、ミドルウェアマシン環境500は、ワークの同時キュー506などの、たとえばバッファに構成される共有キューを含み、1つまたは多くのセレクタ502a−cをその中に移すことができる。共有キュー506は、読込み準備ソケットおよび/または関連するセレクタ502a−cの双方を含むことができる。
【0025】
セレクタ502a−cのブロッキングキューを1つの共有キュー506に結合することにより、キュー処理モデルは、個々のワーカースレッド505a−eがすべての読込み準備ソケットを連続して処理することを必要とすることを回避する。ワーカースレッド505a−eは、個々のセレクタ502a−cからの読込み準備ソケットの同時処理を可能にするためにアクティブにすることができる。したがって、共有キュー506は、OSによって維持されるFDキャッシュ501a−cの同時特性を向上させることができ、キュー処理モデルは、エンドツーエンド遅延の短縮を提供する。
【0026】
このキュー処理モデルを用いると、個々のセレクタ502a−cから戻された1つまたは多くの読込み準備ソケットおよびセレクタ502a−c自体を、複数のワーカースレッド、すなわちマルチプレクサスレッド505a−c間で共有することができる。
図5に示されるように、システムは1つ以上のマルチプレクサスレッド505a−cを含むことができ、マルチプレクサスレッド505a−cの各々は、ワークの共有キュー506から1つの読込み準備ソケットを取得することができる。したがって、各スレッドローカルリスト503a−503cは、1つの長さのみを有し得る。その上、1つ以上のマルチプレクサスレッド505d−eは、セレクタ502a−bを用いてFDキャッシュ501a−bをポーリングすることができる。
【0027】
共有キュー506が空でない限り、マルチプレクサにとって高スループットを実現するためにはマルチプレクサスレッド505a−eはサスペンドしてはならない。なぜなら、キュー処理モデルはいくつかのスレッドがSelector.selectにブロックされることを回避することができる一方、他のスレッドは処理すべき2つ以上のソケットを有し得るからである。したがって、このキュー処理モデルは、さもなければスレッドローカルリストにおいて浪費されるであろうリクエストのキュー待機時間を短縮することができる。
【0028】
発明の様々な実施の形態に従うと、マルチプレクサスレッド(MUXERS)の数は、セレクタ(SELECTORS)の数以下であり得る。すなわち、1≦SELECT0RS≦MUXERSである。マルチプレクサスレッドは、可能性としてあらゆるセレクタにおいてSelector.select()にブロックされることができる。したがって、SELECTORSの数までのマルチプレクサスレッドがSelector.select()にブロックされ得る。一旦マルチプレクサスレッドが読込み準備ソケットのリストを有するセレクタから戻ると、1つ以上のスレッドが共有キュー506からワークを得る準備ができた状態であり得るが、マルチプレクサスレッドのうちのいくつかは、その時点でソケットを読出すのに忙しい場合がある。読込み準備ソケットを読出す準備ができているスレッドの数は、MUXERSの数とSELECTORSの数との間の差を表わすMUXERS−SELECTORSの数までであり得る。
【0029】
マルチプレクサスレッド505a−eがアイドルであると、ワーカーは、セレクタ502a−cから読込み準備ソケットを得ようとすることがブロックされるか、または共有ブロッキングキュー506から読込み準備ソケットを得ようとすることがブロックされ得る。1つまたは多くの読込み準備ソケットが利用可能になると、読込み準備ソケットおよびそれらのセレクタの502a−cは、システム全体の進行を保証する順序で、共有ブロッキングキュー506となり得る。
【0030】
発明の様々な実施の形態に従うと、セレクタから戻るすべてのワーカースレッド505d−eは、1つの最後の読込み準備ソケットを保持することができる。共有キュー506からブロック解除されるすべてのワーカースレッド505a−cは、読込み準備ソケットを有することができる。ワーカースレッド505a−cは継続してこれらのソケットを処理し(たとえばリクエストを読出し)、次いで共有キュー506からより多くの読込み準備ソケットを得るために戻ることができる。最終的にセレクタ502a−cを共有キュー506から得ることができ、その場合、ワーカースレッド505a−cは、続いて当該セレクタ502a−cからより多くの読込み準備ソケットを得ることができる。
【0031】
読込み準備ソケットが処理される順序はセレクタ502a−cに基づいているため、このキュー処理モデルを用いると、共有キュー506により多くの読込み準備ソケットを有する機会がより多い。その結果、読込み準備ソケットをブロッキングなしにセレクタ502a−cから取得することができ、ネットワーク集約的なワークロードに関して有意な応答時間短縮を実現することができる。
【0032】
さらに、共有スキームによって、ワーカースレッド505a−eがセレクタ502a−cから連続的に読込み準備ソケットを取得し、サスペンドされるかまたはコンテキストスイッチを行なう必要なくそれらを処理することが可能となる。したがって、このキュー処理モデルは、大きな程度の同時性を実現することができる。
【0033】
図6は、発明の様々な実施の形態に従うワークシェアリング多重化をサポートする典型的な擬似コードの例を示す。
図6に示されるように、マルチプレクサクラスを規定することができる(1−31行目)。ワークのキューをセットアップし、多くのセレクタ(Selector)をポピュレートすることができる(4行目)。さらに、マルチプレクサが実行しているとき、ソケットを処理するために無限ループ(13−30行目)を用いることができる。無限ループ内の各反復については、アレイリスト(ArrayList)から取得されるエントリがセレクタ(Selector)またはセレクションキー(SelectionKey)(18行目)であるかをマルチプレクサクラスが判定することができる。エントリがセレクタ(Selector)である場合、マルチプレクサは、セレクタ(Selector)内のコンテンツをワークのキューに拡張することを試みることができる(18−25行目)。そうでない場合、マルチプレクサはセレクションキー(SelectionKey)を用いて読込み準備チャネル(readReadyChannel)を確立することができる(26−29行目)。
【0034】
図7は、発明の様々な実施の形態に従うワークシェアリング多重化をサポートする他の典型的な擬似コードの例を示す。
図7に示されるように、異なるマルチプレクサクラスを、未済のワークを共有することにより熱心であるように規定することができ(1−31行目)、たとえばアレイリスト(ArrayList)が空でない場合、マルチプレクサクラスは、jobs.offerAll関数呼び出しを用いてそのコンテンツをジョブのキューに拡張することができる(17−21行目)。したがって、無限ループ内では、マルチプレクサクラスは、反復ごとに空でないワークのリストをダンプすることを試みる。その上、マルチプレクサクラスは、スレッドローカルリストと同様のやり方でキューへの同時アクセスを回避することができる。
【0035】
さらに、セレクタ(Selector)において待機する代わりに、可能な限り多くのマルチプレクサスレッドをソケットを読出すのに忙しい状態に保つために、マルチプレクサクラスは、可能な限り遅くセレクタをキューに追加することを試みる。その理由は、最後のポールからの時間がより長ければ、ワーカースレッドが直ちに戻ることができる可能性が高くなり、したがってあまりブロックしなくなるからである。そうでなければ、ワーカースレッドが過度に早くSelector.selectに入ると、コールがワーカースレッドをブロックさせる可能性が高くなる。なぜなら、セレクタリストが空になったのはほんの少し前であり、ファイルディスクリプタキャッシュが再びポピュレートされるために十分な時間がない場合があるからである。
【0036】
図8は、発明の実施の形態に従うワークシェアリング多重化をサポートするための典型的なフローチャートを例示する。
図8に示されるように、ステップ801において、システムは1つ以上のセレクタを提供することができ、各前記セレクタは、読込み準備ファイルディスクリプタのキューを含む。次いで、ステップ802において、システムは共有キューを提供することができ、各前記セレクタは共有キューへと空にされる。さらに、ステップ803において、システムは、1つ以上のマイクロプロセッサ上で実行されている複数のマルチプレクサスレッドが前記共有キューからワークを得ることを可能にする。
【0037】
発明の様々な実施の形態に従うと、多くのセレクタからの1つのセレクタの効率的な同時選択に基づいてシステムの効率を実現することができ、1つの大きなキャッシュの代わりに、複数の小さなFDキャッシュからの同時選択が可能となる。さらに、読込み準備ソケットの非ブロッキング共有の使用により、スレッド不足をなくすことができる。固定されたメモリ設置面積で非ブロッキング大量追加操作を同時キューに用いることが有益である(たとえば、
図7の20行目に示されるjobs.offerAll(...))。その上、システムは、ソケットが選択された後でセレクタが共有されるという順序(たとえば読込み準備ソケットがセレクタに関連して追加される順序))を保証することによって、読込み準備ソケットの適時の処理を保証することができ、システムの他の進行特性を全体として向上させることができる。
【0038】
したがって、ワークシェアリング多重化を用いると、システムは効率的なキューの進行を保証することができ、様々な変わりやすい状態の共有を可能にし、読込み準備ソケットの同時処理中のスレッド不足をなくすことができる。
【0039】
いくつかの実施の形態に従うと、上述の方法のうちの1つを実施するためのコンピュータプログラムが提供される。発明の実施の形態に従うと、コンピュータプログラムは、システムに、各セレクタが読込み準備ファイルディスクリプタのキューを含む1つ以上のセレクタを提供することと、各セレクタが共有キューへと空にされる共有キューを提供することと、複数のマルチプレクサスレッドが前記共有キューからワークを得ることを可能にすることとを含むステップを実行させる。
【0040】
発明の一局面に従うと、クラスタにおけるワークシェアリング多重化をサポートするためのシステムが提供され、システムは、1つ以上のセレクタと、共有キューとして構成されるバッファと、1つ以上のマイクロプロセッサとを備える。各セレクタは読込み準備ファイルディスクリプタのキューを含む。バッファは共有キューとして構成される。各セレクタは共有キューへと空にされる。1つ以上のマイクロプロセッサは、前記共有キューからワークを得るように動作する複数のマルチプレクサスレッドを実行する。
【0041】
発明の別の局面に従うと、クラスタにおけるワークシェアリング多重化をサポートするためのシステムが提供され、システムは、1つ以上のセレクタを提供するための手段と、共有キューを提供するための手段と、複数のマルチプレクサスレッドが前記共有キューからワークを得ることを可能にするための手段とを備える。各セレクタは読込み準備ファイルディスクリプタのキューを含む。各セレクタは共有キューへと空にされる。
【0042】
本発明は、本開示の教示に従いプログラムされた、1つ以上のプロセッサ、メモリ、および/またはコンピュータ読取可能な記録媒体を含む、従来の汎用もしくは専用デジタルコンピュータ、コンピューティングデバイス、マシン、またはマイクロプロセッサを1つ以上用いて、適宜実現し得る。適切なソフトウェアコーディングは、熟練したプログラマが本開示の教示に基づいて容易に準備できる。これはソフトウェア技術における当業者には明らかであろう。
【0043】
実施の形態によっては、本発明は、本発明のプロセスのうちいずれかを実行するためにコンピュータをプログラムするのに使用できる命令が格納された記録媒体または(1つまたは複数の)コンピュータ読取可能な媒体であるコンピュータプログラムプロダクトを含む。この記録媒体は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム(分子メモリICを含む)、または、命令および/またはデータを格納するのに適した任意の種類の媒体もしくはデバイスを含み得るものの、これらに限定されない。
【0044】
本発明に関するこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。変更および変形は、開示されている特徴の適切な組合せを含む。実施の形態は、本発明の原理およびその実際の応用を最もうまく説明することによって他の当業者が本発明のさまざまな実施の形態および意図している特定の用途に適したさまざまな変形を理解できるようにするために、選択され説明されている。本発明の範囲は、以下の特許請求の範囲およびその均等物によって定められることが意図されている。