特許第6283376号(P6283376)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

特許6283376クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法
<>
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000002
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000003
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000004
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000005
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000006
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000007
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000008
  • 特許6283376-クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6283376
(24)【登録日】2018年2月2日
(45)【発行日】2018年2月21日
(54)【発明の名称】クラスタにおけるワークシェアリング多重化をサポートするためのシステムおよび方法
(51)【国際特許分類】
   G06F 9/54 20060101AFI20180208BHJP
【FI】
   G06F9/46 480B
【請求項の数】10
【全頁数】13
(21)【出願番号】特願2015-555995(P2015-555995)
(86)(22)【出願日】2013年10月29日
(65)【公表番号】特表2016-509306(P2016-509306A)
(43)【公表日】2016年3月24日
(86)【国際出願番号】US2013067286
(87)【国際公開番号】WO2014120304
(87)【国際公開日】20140807
【審査請求日】2016年10月28日
(31)【優先権主張番号】13/756,207
(32)【優先日】2013年1月31日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】オテンコ,オレクサンドル
【審査官】 大桃 由紀雄
(56)【参考文献】
【文献】 特表2005−505833(JP,A)
【文献】 特表2002−530736(JP,A)
【文献】 米国特許出願公開第2003/0110232(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/54
(57)【特許請求の範囲】
【請求項1】
クラスタ内でのワークシェアリング多重化をサポートするためのシステムであって、
1つ以上のマイクロプロセッサと、
1つ以上のセレクタとを備え、各前記セレクタは読込み準備ファイルディスクリプタのキューを含み、さらに、
共有キューを備え、各前記セレクタのワーク前記共有キューに移され、さらに、
1つ以上のマイクロプロセッサ上で実行され、前記共有キューから前記ワークを得るように動作する複数のマルチプレクサスレッドを備える、システム。
【請求項2】
クラスタ内でのワークシェアリング多重化をサポートするための方法であって、
1つ以上のセレクタを提供することを含み、各前記セレクタは読込み準備ファイルディスクリプタのキューを含み、さらに、
共有キューを提供することを含み、各前記セレクタのワーク前記共有キューに移され、さらに、
1つ以上のマイクロプロセッサ上で実行される複数のマルチプレクサスレッドが前記共有キューから前記ワークを得ることを含む、方法。
【請求項3】
1つ以上の読込み準備ファイルディスクリプタを含むファイルディスクリプタキャッシュを提供することをさらに含む、請求項2に記載の方法。
【請求項4】
前記ファイルディスクリプタキャッシュ上のスキャンが完了するのを待機しているときに、前記セレクタと関連付けられたスレッドがブロックされるように構成することをさらに含む、請求項3に記載の方法。
【請求項5】
前記セレクタと関連付けられたスレッドを、前記1つ以上の読込み準備ファイルディスクリプタを前記1つ以上のセレクタにコピーするように構成することをさらに含む、請求項3または4に記載の方法。
【請求項6】
処理している読込み準備ソケットのスレッドローカルリストを維持するように各前記マルチプレクサスレッドを構成することをさらに含む、請求項2〜5のうちいずれか1項に記載の方法。
【請求項7】
前記クラスタ内の異なるサーバからの1つ以上のリクエストを処理することができるリクエストマネージャを提供することと、
前記複数のマルチプレクサスレッドによって準備された前記1つ以上のリクエストが追加される複数のキューを含むように前記リクエストマネージャを構成することとをさらに含む、請求項2〜6のうちいずれか1項に記載の方法。
【請求項8】
前記セレクタよりも多くの前記マルチプレクサスレッドを提供することをさらに含む、請求項2〜のうちいずれか1項に記載の方法。
【請求項9】
前記セレクタから読込み準備ソケットを連続的に取得し、サスペンドされるかまたはコンテキストスイッチを行なう必要なしにそれらを処理するように1つ以上の前記マルチプレクサスレッドを構成することをさらに含む、請求項2〜のうちいずれか1項に記載の方法。
【請求項10】
実行されると請求項2〜のうちいずれか1項に記載の方法をシステムに実行させるマシン読取可能な命令を含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
著作権に関する注意
本特許文献の開示の一部には、著作権保護の対象となるものが含まれている。著作権者は、この特許文献または特許開示の何者かによる複製が、特許商標庁の特許ファイルまたは記録にある限り、それに対して異議を唱えないが、そうでなければ、いかなる場合もすべての著作権を保有する。
【0002】
発明の分野
本発明は、概してコンピュータシステムおよびミドルウェアといったソフトウェアに関し、特にクラスタ内のサーバ間で多重化するためのシステムおよび方法に関する。
【背景技術】
【0003】
背景
どのような大きな組織でも、その中では、長年を経て、さまざまな異なるコンピュータハードウェア、オペレーティングシステム、およびアプリケーションソフトウェアを含むITインフラストラクチャが無秩序に拡大していることが多い。このようなインフラストラクチャの個々の構成要素自体は巧みに設計され適切に維持管理されているかもしれないが、このような構成要素を相互に接続、または、リソースを共有しようとすると、それは困難な管理タスクであることが多い。近年、組織の関心は、仮想化およびストレージの集中化といった技術に向けられるようになっており、さらに近年では、共有インフラストラクチャの基礎を提供できるクラウドコンピューティングに向けられている。しかしながら、このような環境に特に適したオールインワンのプラットフォームはほとんどない。これらが、本発明の実施の形態が取組もうとしている一般的な分野である。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
クラスタ内のサーバ間における効率的な低レイテンシ多重化を提供するためのシステムおよび方法が提供される。そのような1つのシステムは、各々が1つ以上のプロセッサおよび高性能メモリを含む1つ以上の高性能コンピューティングシステムのクラスタを含むことができる。クラスタは、インフィニバンドネットワークによって通信する。システムは、1つ以上のアプリケーションサーバインスタンスを含む、クラスタ上で実行するミドルウェア環境も含むことができる。システムは、1つ以上のセレクタを含むことができ、各前記セレクタは読込み準備ファイルディスクリプタのキューを含む。さらに、システムは、共有キューを含むことができ、各前記セレクタの読込み準備ファイルディスクリプタを共有キューに移すことができる。また、複数のマルチプレクサスレッドが前記共有キューからワークを得るように動作する。
【0005】
本発明の他の目的および利点は、添付の図面に照らして読まれると、様々な実施の形態の以下の詳細な説明から当業者にとって明らかになるであろう。
【図面の簡単な説明】
【0006】
図1】発明のある実施の形態に従うミドルウェアマシン環境100の例を示す図である。
図2】発明のある実施の形態に従うミドルウェアマシンプラットフォームまたは環境の別の例を示す図である。
図3】発明の様々な実施の形態に従う単純な多重化をサポートする例を示す図である。
図4】発明の様々な実施の形態に従うパラレル多重化をサポートする例を示す図である。
図5】発明の様々な実施の形態に従うワークシェアリング多重化をサポートする例を示す図である。
図6】発明の様々な実施の形態に従うワークシェアリング多重化をサポートする典型的な擬似コードの例を示す図である。
図7】発明の様々な実施の形態に従うワークシェアリング多重化をサポートする他の典型的な擬似コードの例を示す図である。
図8】発明の実施の形態に従うワークシェアリング多重化をサポートするための典型的なフローチャートを例示する図である。
【発明を実施するための形態】
【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】
本発明に関するこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。変更および変形は、開示されている特徴の適切な組合せを含む。実施の形態は、本発明の原理およびその実際の応用を最もうまく説明することによって他の当業者が本発明のさまざまな実施の形態および意図している特定の用途に適したさまざまな変形を理解できるようにするために、選択され説明されている。本発明の範囲は、以下の特許請求の範囲およびその均等物によって定められることが意図されている。
図1
図2
図3
図4
図5
図6
図7
図8