(57)【特許請求の範囲】
【請求項１】
クラスタ内でのワークシェアリング多重化をサポートするためのシステムであって、
１つ以上のマイクロプロセッサと、
１つ以上のセレクタとを備え、各前記セレクタは読込み準備ファイルディスクリプタのキューを含み、さらに、
共有キューを備え、各前記セレクタのワークは前記共有キューに移され、さらに、
１つ以上のマイクロプロセッサ上で実行され、前記共有キューから前記ワークを得るように動作する複数のマルチプレクサスレッドを備える、システム。
【請求項２】
クラスタ内でのワークシェアリング多重化をサポートするための方法であって、
１つ以上のセレクタを提供することを含み、各前記セレクタは読込み準備ファイルディスクリプタのキューを含み、さらに、
共有キューを提供することを含み、各前記セレクタのワークは前記共有キューに移され、さらに、
１つ以上のマイクロプロセッサ上で実行される複数のマルチプレクサスレッドが前記共有キューから前記ワークを得ることを含む、方法。
【請求項３】
１つ以上の読込み準備ファイルディスクリプタを含むファイルディスクリプタキャッシュを提供することをさらに含む、請求項２に記載の方法。
【請求項４】
前記ファイルディスクリプタキャッシュ上のスキャンが完了するのを待機しているときに、前記セレクタと関連付けられたスレッドがブロックされるように構成することをさらに含む、請求項３に記載の方法。
【請求項５】
前記セレクタと関連付けられたスレッドを、前記１つ以上の読込み準備ファイルディスクリプタを前記１つ以上のセレクタにコピーするように構成することをさらに含む、請求項３または４に記載の方法。
【請求項６】
処理している読込み準備ソケットのスレッドローカルリストを維持するように各前記マルチプレクサスレッドを構成することをさらに含む、請求項２〜５のうちいずれか１項に記載の方法。
【請求項７】
前記クラスタ内の異なるサーバからの１つ以上のリクエストを処理することができるリクエストマネージャを提供することと、
前記複数のマルチプレクサスレッドによって準備された前記１つ以上のリクエストが追加される複数のキューを含むように前記リクエストマネージャを構成することとをさらに含む、請求項２〜６のうちいずれか１項に記載の方法。
【請求項８】
前記セレクタよりも多くの前記マルチプレクサスレッドを提供することをさらに含む、請求項２〜７のうちいずれか１項に記載の方法。
【請求項９】
前記セレクタから読込み準備ソケットを連続的に取得し、サスペンドされるかまたはコンテキストスイッチを行なう必要なしにそれらを処理するように１つ以上の前記マルチプレクサスレッドを構成することをさらに含む、請求項２〜８のうちいずれか１項に記載の方法。
【請求項１０】
実行されると請求項２〜９のうちいずれか１項に記載の方法をシステムに実行させるマシン読取可能な命令を含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権に関する注意
本特許文献の開示の一部には、著作権保護の対象となるものが含まれている。著作権者は、この特許文献または特許開示の何者かによる複製が、特許商標庁の特許ファイルまたは記録にある限り、それに対して異議を唱えないが、そうでなければ、いかなる場合もすべての著作権を保有する。
【０００２】
発明の分野
本発明は、概してコンピュータシステムおよびミドルウェアといったソフトウェアに関し、特にクラスタ内のサーバ間で多重化するためのシステムおよび方法に関する。
【背景技術】
【０００３】
背景
どのような大きな組織でも、その中では、長年を経て、さまざまな異なるコンピュータハードウェア、オペレーティングシステム、およびアプリケーションソフトウェアを含むＩＴインフラストラクチャが無秩序に拡大していることが多い。このようなインフラストラクチャの個々の構成要素自体は巧みに設計され適切に維持管理されているかもしれないが、このような構成要素を相互に接続、または、リソースを共有しようとすると、それは困難な管理タスクであることが多い。近年、組織の関心は、仮想化およびストレージの集中化といった技術に向けられるようになっており、さらに近年では、共有インフラストラクチャの基礎を提供できるクラウドコンピューティングに向けられている。しかしながら、このような環境に特に適したオールインワンのプラットフォームはほとんどない。これらが、本発明の実施の形態が取組もうとしている一般的な分野である。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
クラスタ内のサーバ間における効率的な低レイテンシ多重化を提供するためのシステムおよび方法が提供される。そのような１つのシステムは、各々が１つ以上のプロセッサおよび高性能メモリを含む１つ以上の高性能コンピューティングシステムのクラスタを含むことができる。クラスタは、インフィニバンドネットワークによって通信する。システムは、１つ以上のアプリケーションサーバインスタンスを含む、クラスタ上で実行するミドルウェア環境も含むことができる。システムは、１つ以上のセレクタを含むことができ、各前記セレクタは読込み準備ファイルディスクリプタのキューを含む。さらに、システムは、共有キューを含むことができ、各前記セレクタの読込み準備ファイルディスクリプタを共有キューに移すことができる。また、複数のマルチプレクサスレッドが前記共有キューからワークを得るように動作する。
【０００５】
本発明の他の目的および利点は、添付の図面に照らして読まれると、様々な実施の形態の以下の詳細な説明から当業者にとって明らかになるであろう。
【図面の簡単な説明】
【０００６】
【図１】発明のある実施の形態に従うミドルウェアマシン環境１００の例を示す図である。
【図２】発明のある実施の形態に従うミドルウェアマシンプラットフォームまたは環境の別の例を示す図である。
【図３】発明の様々な実施の形態に従う単純な多重化をサポートする例を示す図である。
【図４】発明の様々な実施の形態に従うパラレル多重化をサポートする例を示す図である。
【図５】発明の様々な実施の形態に従うワークシェアリング多重化をサポートする例を示す図である。
【図６】発明の様々な実施の形態に従うワークシェアリング多重化をサポートする典型的な擬似コードの例を示す図である。
【図７】発明の様々な実施の形態に従うワークシェアリング多重化をサポートする他の典型的な擬似コードの例を示す図である。
【図８】発明の実施の形態に従うワークシェアリング多重化をサポートするための典型的なフローチャートを例示する図である。
【発明を実施するための形態】
【０００７】
詳細な説明
クラスタ内でのワークシェアリング多重化をサポートすることができるシステムおよび方法が本明細書に記載される。
【０００８】
図１は、発明のある実施の形態に従うミドルウェアマシン環境１００の例を示す。図１に示されるように、各ミドルウェアマシンシステム１０２は、数個のミドルウェアマシンラック構成要素１０４を含み、ミドルウェアマシンラック構成要素１０４は各々、高性能ミドルウェアマシンハードウェアノード１０６（たとえば６４ビットプロセッサ、高性能大型メモリ、ならびに冗長インフィニバンドおよびイーサネット（登録商標）ネットワーキング）と、ミドルウェアマシンソフトウェア環境１０８との組合せを含む。その結果は、数日または数カ月ではなく数分でプロビジョニングすることができ、要求に応じて拡大縮小できる、完全なアプリケーションサーバ環境である。ある実施の形態に従うと、各ミドルウェアマシンシステムは、満杯の、２分の１の、もしくは４分の１のラックとしてまたはラック構成要素からなるその他の構成として準備することができ、数個のミドルウェアマシンシステムを、ここでもインフィニバンドを用いて連結することにより、より大きな環境を作ることができる。各ミドルウェアマシンソフトウェア環境に、数個のアプリケーションサーバインスタンスまたはその他のソフトウエアインスタンスを設けることができる。たとえば、図１に示されるように、アプリケーションサーバインスタンス１０９が、仮想マシン１１６と、オペレーティングシステム１２０と、仮想化層１２４と、アプリケーションサーバ層１２８（たとえば、サーブレット（Servlet）１３２、ＥＪＢ１３４、およびグリッドリンク（GlidLink）１３６それぞれのコンテナを含むウェブロジック（WebLogic））とを含み得るのに対し、別のアプリケーションサーバインスタンス１１０は、仮想マシン１１８と、オペレーティングシステム１２２と、仮想化層１２６と、データグリッド層１４０（たとえばアクティブキャッシュ１４２を含むコヒーレンス（Coherence））とを含み得る。インスタンスは各々、エクサロジック統合（integration）パックといったミドルウェアマシン統合構成要素１５０を用いて、互いに通信でき、かつ、そのミドルウェアマシンハードウェアノードおよびその他のノード双方とも通信できる。ミドルウェアマシン統合構成要素１５０自体が、以下でさらに詳細に説明するように、インフィニバンドおよびその他の特徴に対するサポートといったいくつかの最適化特徴を提供する。
【０００９】
図２は、発明のある実施の形態に従うミドルウェアマシンプラットフォームまたは環境の別の例を示す。図２に示されるように、各アプリケーションサーバインスタンスは、ミドルウェアマシン環境内において送信側および／または受信側１６０、１６１として機能し得る。各アプリケーションサーバインスタンスは、アプリケーションサーバがインフィニバンドネットワーク１６４を介して互いに通信できるようにするマルチプレクサ１６２、１６３にも関連付けられている。図２に示される例では、アプリケーションサーバインスタンスは、ソケットダイレクトプロトコル（sockets direct protocol）１６８に関連付けられ得るカーネルスペース（kernel space）１６５と、ユーザスペース１６７と、アプリケーションサーバ（たとえばウェブロジックスペース）１６６と、ＪＶＭ（たとえばジェイロキット／ホットスポット層）１７０と、ＷＬＳコア１７２と、サーブレットコンテナ１７４と、ＪＳＰコンパイラ１７６とを含み得る。他の例に従うと、ミドルウェアタイプのソフトウェアの他の組合せが含まれていてもよい。さまざまな実施の形態に従い、マシン統合構成要素は、ゼロバッファコピー、分散／収集Ｉ／Ｏ、Ｔ３接続、遅延デシリアライゼーション、およびグリッドリンクデータソースの特徴を提供することにより、共有されるインフラストラクチャの基礎を提供するとともにこのインフラストラクチャ内での性能を改善することができる。
【００１０】
単純な多重化
図３は、ミドルウェアマシン環境において単純な多重化をサポートする例を示す。図３に示されるように、ミドルウェアマシン環境３００においてオペレーティングシステム（ＯＳ）によって維持されるファイルディスクリプタキャッシュ、すなわちＦＤキャッシュ３０１は、ソケット（ｘを付してある）といった１つ以上の読込み準備ファイルディスクリプタを含むことができる。ここで、大きなキャッシュのスキャンおよび／または大きなキャッシュへの同時アクセスの維持は、ＯＳにおいて非効率的であり得る。
【００１１】
セレクタインターフェイスを介して露出され得るセレクタ３０２などのポール装置は、ソケット（リストにおいて点で示す）などの読込み準備ファイルディスクリプタのキューを含むことができる。１つ以上のマルチプレクサスレッド３０５ａ−３０５ｃによってセレクタ３０２を用いて、ＦＤキャッシュ３０１をポーリングすることができる。スレッド３０５ａ−３０５ｃは、たとえば完了するべきＦＤキャッシュ３０１上のスキャンを待機しているSelector.select()関数呼び出しを行いつつ、セレクタ３０２においてブロックされ得る。次いで、スレッド３０５ａ−３０５ｃは、読込み準備ファイルディスクリプタをセレクタリスト３０２にコピーすることができる。
【００１２】
各マルチプレクサスレッド３０５ａ−３０５ｃは、スレッドローカルリスト３０３ａ−３０３ｃを維持することができる。スレッドローカルリスト３０３ａ−３０３ｃは、スレッド３０５ａ−３０５ｃによって処理することができる読込み準備ソケット（リストにおいて点で示す）のリストを含む。リスト３０３ａ−３０３ｃはスレッドローカルであるため、他のスレッドがアイドルであっても、他のスレッドは当該リストの処理を支援することができないことがある。
【００１３】
図３に示されるように、スレッドローカルリスト３０３ａ−３０３ｃは異なる数の点を有し、これは個々のマルチプレクサスレッドに渡される異なる量のワークを表わす。たとえば、マルチプレクサスレッド３０５ｃがアイドルである間、マルチプレクサスレッド３０５ｂが読込み準備ソケットの長いリストを処理する必要があり得る。
【００１４】
リクエストマネージャ３０４を用いて、ミドルウェアマシン環境３００における異なるサーバからの１つ以上のリクエストを処理することができる。リクエストマネージャ３０４は、複数のキューを有する構成要素であり、マルチプレクサスレッド３０５ａ−３０５ｃによって準備されるリクエストをそれに追加することができる。これらのキューは、先入先出（FIFO）キューまたは優先度つきキューとすることができる。その上、スレッドカウントに対する制約は、リクエストマネージャ３０４内の様々なキューに強制され得る。
【００１５】
図３に示されるように、１つのセレクタ３０２のみが複数のマルチプレクサスレッド３０５ａ−ｃに設けられる。たとえば、マルチプレクサスレッド３０５ｂが読込み準備ソケットを取得すると、すべてそれ自身のスレッドローカルリスト３０３ｂにワークを有する。同時に、他のマルチプレクサスレッド３０５ａおよび３０５ｂがSelector.select()を入力するために待機し得る。したがって、読込み準備ソケットがシングルスレッドモデルの下で処理されるため、マルチプレクサのパフォーマンスが悪化し得る。
【００１６】
さらに、一旦マルチプレクサスレッド３０５ｂがSelector.select()から戻ると、別のスレッド、たとえば３０５ｃがSelector.select()に再び入り得る。そのような場合、セレクタ３０２がちょうど空になったため、マルチプレクサスレッド３０５ｃをブロックする可能性が高い。したがって、１つのマルチプレクサスレッドが使用中の間、大部分のマルチプレクサスレッドが待機しているという状況があり得る。
【００１７】
したがって、例では、図３に示されるように、異なるマルチプレクサスレッド３０５ａ−３０５ｃによって共有セレクタ３０２およびＦＤキャッシュ３０１にアクセスする際にコンテンションがあり得る。さらに、読込み準備ソケットの非共有はスレッド不足を招く場合があり、使用されていないスレッドは利用可能であるが、読込み準備ソケットの処理を開始することはできない場合がある。
【００１８】
単純な多重化に関する追加的な情報は、２０１１年５月１７日に提出され、「クラスタ内のサーバ間でのパラレル多重化のためのシステムおよび方法」と題された米国特許出願第１３／１０９，８７１号（代理人事件番号ORACL-05121US0）に開示されており、当該出願を引用によってここに援用する。
【００１９】
パラレル多重化
図４は、ミドルウェアマシン環境におけるパラレル多重化をサポートする例を示す。図４に示されるように、ミドルウェアマシン環境４００は多数のセレクタ４０２ａ−ｃを含むことができ、セレクタ４０２ａ−ｃの各々を用いて、１つ以上のファイルディスクリプタキャッシュ、すなわちＦＤキャッシュ４０１ａ−ｃをポーリングすることができる。その上、ミドルウェアマシン環境４００には、正確に同数のワーカースレッド、すなわちマルチプレクサスレッド４０５ａ−ｃがあり得、各マルチプレクサスレッド４０５ａ−ｃは、スレッドローカルリスト４０３ａ−ｃを維持している。
【００２０】
パラレル多重化を用いると、各セレクタは１つのマルチプレクサスレッドによってのみアクセスされ得る。たとえば、マルチプレクサスレッド４０５ａはセレクタ４０２ａを使用し、マルチプレクサスレッド４０５ｂはセレクタ４０２ｂを使用し、マルチプレクサスレッド４０５ｃはセレクタを４０２ｃを使用する。ワーカースレッド４０５ａ−ｃは、セレクタ４０２ａ−ｃをシングルスレッドでポーリングし、読込み準備ソケットをシングルスレッドで処理する。個々のセレクタ４０２ａ−ｃを使用することにより、セレクタ当たりの到着率の低下が可能となり、したがってシステムリソースに対するコンテンションが減少する。
【００２１】
パラレル多重化を用いると、単一のセレクタによってもたらされる負荷の不均衡を解決することができる。さらに、異なるセレクタおよびマルチプレクサスレッド間でのワークの均一な分配を実現する必要性が依然としてあり得る。
【００２２】
したがって、図４に示される例では、マルチプレクサスレッド４０５ａ−ｃによるセレクタ４０２ａ−ｃおよびＦＤキャッシュ４０１ａ−ｃへのアクセスにおけるコンテンションを減少させることができる。さらに、ＦＤキャッシュスキャン効率は、比較可能なＦＤの組に対して、図３に示される１つの大きなキャッシュ３０１の代わりに、いくつかのより小さなキャッシュ４０１ａ−ｃを用いることによって向上することができる。その上、図４に示される設計は、依然としてスレッド不足を被り得る。なぜなら、マルチプレクサスレッド４０５ａ−ｃは読込み準備ソケットを共有していないからである。
【００２３】
パラレル多重化に関する追加的な情報は、２０１１年５月１７日に提出され、「クラスタ内のサーバ間でのパラレル多重化のためのシステムおよび方法」と題された米国特許出願第１３／１０９，８７１号（代理人事件番号ORACL-05121US0）に開示されており、当該出願を引用によってここに援用する。
【００２４】
ワークシェアリング多重化
図５は、発明の様々な実施の形態に従うワークシェアリング多重化をサポートする例を示す。図５に示されるように、ミドルウェアマシン環境５００は、ワークの同時キュー５０６などの、たとえばバッファに構成される共有キューを含み、１つまたは多くのセレクタ５０２ａ−ｃをその中に移すことができる。共有キュー５０６は、読込み準備ソケットおよび／または関連するセレクタ５０２ａ−ｃの双方を含むことができる。
【００２５】
セレクタ５０２ａ−ｃのブロッキングキューを１つの共有キュー５０６に結合することにより、キュー処理モデルは、個々のワーカースレッド５０５ａ−ｅがすべての読込み準備ソケットを連続して処理することを必要とすることを回避する。ワーカースレッド５０５ａ−ｅは、個々のセレクタ５０２ａ−ｃからの読込み準備ソケットの同時処理を可能にするためにアクティブにすることができる。したがって、共有キュー５０６は、ＯＳによって維持されるＦＤキャッシュ５０１ａ−ｃの同時特性を向上させることができ、キュー処理モデルは、エンドツーエンド遅延の短縮を提供する。
【００２６】
このキュー処理モデルを用いると、個々のセレクタ５０２ａ−ｃから戻された１つまたは多くの読込み準備ソケットおよびセレクタ５０２ａ−ｃ自体を、複数のワーカースレッド、すなわちマルチプレクサスレッド５０５ａ−ｃ間で共有することができる。図５に示されるように、システムは１つ以上のマルチプレクサスレッド５０５ａ−ｃを含むことができ、マルチプレクサスレッド５０５ａ−ｃの各々は、ワークの共有キュー５０６から１つの読込み準備ソケットを取得することができる。したがって、各スレッドローカルリスト５０３ａ−５０３ｃは、１つの長さのみを有し得る。その上、１つ以上のマルチプレクサスレッド５０５ｄ−ｅは、セレクタ５０２ａ−ｂを用いてＦＤキャッシュ５０１ａ−ｂをポーリングすることができる。
【００２７】
共有キュー５０６が空でない限り、マルチプレクサにとって高スループットを実現するためにはマルチプレクサスレッド５０５ａ−ｅはサスペンドしてはならない。なぜなら、キュー処理モデルはいくつかのスレッドがSelector.selectにブロックされることを回避することができる一方、他のスレッドは処理すべき２つ以上のソケットを有し得るからである。したがって、このキュー処理モデルは、さもなければスレッドローカルリストにおいて浪費されるであろうリクエストのキュー待機時間を短縮することができる。
【００２８】
発明の様々な実施の形態に従うと、マルチプレクサスレッド（MUXERS）の数は、セレクタ（SELECTORS）の数以下であり得る。すなわち、１≦SELECT0RS≦MUXERSである。マルチプレクサスレッドは、可能性としてあらゆるセレクタにおいてSelector.select()にブロックされることができる。したがって、SELECTORSの数までのマルチプレクサスレッドがSelector.select()にブロックされ得る。一旦マルチプレクサスレッドが読込み準備ソケットのリストを有するセレクタから戻ると、１つ以上のスレッドが共有キュー５０６からワークを得る準備ができた状態であり得るが、マルチプレクサスレッドのうちのいくつかは、その時点でソケットを読出すのに忙しい場合がある。読込み準備ソケットを読出す準備ができているスレッドの数は、MUXERSの数とSELECTORSの数との間の差を表わすMUXERS−SELECTORSの数までであり得る。
【００２９】
マルチプレクサスレッド５０５ａ−ｅがアイドルであると、ワーカーは、セレクタ５０２ａ−ｃから読込み準備ソケットを得ようとすることがブロックされるか、または共有ブロッキングキュー５０６から読込み準備ソケットを得ようとすることがブロックされ得る。１つまたは多くの読込み準備ソケットが利用可能になると、読込み準備ソケットおよびそれらのセレクタの５０２ａ−ｃは、システム全体の進行を保証する順序で、共有ブロッキングキュー５０６となり得る。
【００３０】
発明の様々な実施の形態に従うと、セレクタから戻るすべてのワーカースレッド５０５ｄ−ｅは、１つの最後の読込み準備ソケットを保持することができる。共有キュー５０６からブロック解除されるすべてのワーカースレッド５０５ａ−ｃは、読込み準備ソケットを有することができる。ワーカースレッド５０５ａ−ｃは継続してこれらのソケットを処理し（たとえばリクエストを読出し）、次いで共有キュー５０６からより多くの読込み準備ソケットを得るために戻ることができる。最終的にセレクタ５０２ａ−ｃを共有キュー５０６から得ることができ、その場合、ワーカースレッド５０５ａ−ｃは、続いて当該セレクタ５０２ａ−ｃからより多くの読込み準備ソケットを得ることができる。
【００３１】
読込み準備ソケットが処理される順序はセレクタ５０２ａ−ｃに基づいているため、このキュー処理モデルを用いると、共有キュー５０６により多くの読込み準備ソケットを有する機会がより多い。その結果、読込み準備ソケットをブロッキングなしにセレクタ５０２ａ−ｃから取得することができ、ネットワーク集約的なワークロードに関して有意な応答時間短縮を実現することができる。
【００３２】
さらに、共有スキームによって、ワーカースレッド５０５ａ−ｅがセレクタ５０２ａ−ｃから連続的に読込み準備ソケットを取得し、サスペンドされるかまたはコンテキストスイッチを行なう必要なくそれらを処理することが可能となる。したがって、このキュー処理モデルは、大きな程度の同時性を実現することができる。
【００３３】
図６は、発明の様々な実施の形態に従うワークシェアリング多重化をサポートする典型的な擬似コードの例を示す。図６に示されるように、マルチプレクサクラスを規定することができる（１−３１行目）。ワークのキューをセットアップし、多くのセレクタ（Selector）をポピュレートすることができる（４行目）。さらに、マルチプレクサが実行しているとき、ソケットを処理するために無限ループ（１３−３０行目）を用いることができる。無限ループ内の各反復については、アレイリスト（ArrayList）から取得されるエントリがセレクタ（Selector）またはセレクションキー（SelectionKey）（１８行目）であるかをマルチプレクサクラスが判定することができる。エントリがセレクタ（Selector）である場合、マルチプレクサは、セレクタ（Selector）内のコンテンツをワークのキューに拡張することを試みることができる（１８−２５行目）。そうでない場合、マルチプレクサはセレクションキー（SelectionKey）を用いて読込み準備チャネル（readReadyChannel）を確立することができる（２６−２９行目）。
【００３４】
図７は、発明の様々な実施の形態に従うワークシェアリング多重化をサポートする他の典型的な擬似コードの例を示す。図７に示されるように、異なるマルチプレクサクラスを、未済のワークを共有することにより熱心であるように規定することができ（１−３１行目）、たとえばアレイリスト（ArrayList）が空でない場合、マルチプレクサクラスは、jobs.offerAll関数呼び出しを用いてそのコンテンツをジョブのキューに拡張することができる（１７−２１行目）。したがって、無限ループ内では、マルチプレクサクラスは、反復ごとに空でないワークのリストをダンプすることを試みる。その上、マルチプレクサクラスは、スレッドローカルリストと同様のやり方でキューへの同時アクセスを回避することができる。
【００３５】
さらに、セレクタ（Selector）において待機する代わりに、可能な限り多くのマルチプレクサスレッドをソケットを読出すのに忙しい状態に保つために、マルチプレクサクラスは、可能な限り遅くセレクタをキューに追加することを試みる。その理由は、最後のポールからの時間がより長ければ、ワーカースレッドが直ちに戻ることができる可能性が高くなり、したがってあまりブロックしなくなるからである。そうでなければ、ワーカースレッドが過度に早くSelector.selectに入ると、コールがワーカースレッドをブロックさせる可能性が高くなる。なぜなら、セレクタリストが空になったのはほんの少し前であり、ファイルディスクリプタキャッシュが再びポピュレートされるために十分な時間がない場合があるからである。
【００３６】
図８は、発明の実施の形態に従うワークシェアリング多重化をサポートするための典型的なフローチャートを例示する。図８に示されるように、ステップ８０１において、システムは１つ以上のセレクタを提供することができ、各前記セレクタは、読込み準備ファイルディスクリプタのキューを含む。次いで、ステップ８０２において、システムは共有キューを提供することができ、各前記セレクタは共有キューへと空にされる。さらに、ステップ８０３において、システムは、１つ以上のマイクロプロセッサ上で実行されている複数のマルチプレクサスレッドが前記共有キューからワークを得ることを可能にする。
【００３７】
発明の様々な実施の形態に従うと、多くのセレクタからの１つのセレクタの効率的な同時選択に基づいてシステムの効率を実現することができ、１つの大きなキャッシュの代わりに、複数の小さなＦＤキャッシュからの同時選択が可能となる。さらに、読込み準備ソケットの非ブロッキング共有の使用により、スレッド不足をなくすことができる。固定されたメモリ設置面積で非ブロッキング大量追加操作を同時キューに用いることが有益である（たとえば、図７の２０行目に示されるjobs.offerAll(...))。その上、システムは、ソケットが選択された後でセレクタが共有されるという順序（たとえば読込み準備ソケットがセレクタに関連して追加される順序））を保証することによって、読込み準備ソケットの適時の処理を保証することができ、システムの他の進行特性を全体として向上させることができる。
【００３８】
したがって、ワークシェアリング多重化を用いると、システムは効率的なキューの進行を保証することができ、様々な変わりやすい状態の共有を可能にし、読込み準備ソケットの同時処理中のスレッド不足をなくすことができる。
【００３９】
いくつかの実施の形態に従うと、上述の方法のうちの１つを実施するためのコンピュータプログラムが提供される。発明の実施の形態に従うと、コンピュータプログラムは、システムに、各セレクタが読込み準備ファイルディスクリプタのキューを含む１つ以上のセレクタを提供することと、各セレクタが共有キューへと空にされる共有キューを提供することと、複数のマルチプレクサスレッドが前記共有キューからワークを得ることを可能にすることとを含むステップを実行させる。
【００４０】
発明の一局面に従うと、クラスタにおけるワークシェアリング多重化をサポートするためのシステムが提供され、システムは、１つ以上のセレクタと、共有キューとして構成されるバッファと、１つ以上のマイクロプロセッサとを備える。各セレクタは読込み準備ファイルディスクリプタのキューを含む。バッファは共有キューとして構成される。各セレクタは共有キューへと空にされる。１つ以上のマイクロプロセッサは、前記共有キューからワークを得るように動作する複数のマルチプレクサスレッドを実行する。
【００４１】
発明の別の局面に従うと、クラスタにおけるワークシェアリング多重化をサポートするためのシステムが提供され、システムは、１つ以上のセレクタを提供するための手段と、共有キューを提供するための手段と、複数のマルチプレクサスレッドが前記共有キューからワークを得ることを可能にするための手段とを備える。各セレクタは読込み準備ファイルディスクリプタのキューを含む。各セレクタは共有キューへと空にされる。
【００４２】
本発明は、本開示の教示に従いプログラムされた、１つ以上のプロセッサ、メモリ、および／またはコンピュータ読取可能な記録媒体を含む、従来の汎用もしくは専用デジタルコンピュータ、コンピューティングデバイス、マシン、またはマイクロプロセッサを１つ以上用いて、適宜実現し得る。適切なソフトウェアコーディングは、熟練したプログラマが本開示の教示に基づいて容易に準備できる。これはソフトウェア技術における当業者には明らかであろう。
【００４３】
実施の形態によっては、本発明は、本発明のプロセスのうちいずれかを実行するためにコンピュータをプログラムするのに使用できる命令が格納された記録媒体または（１つまたは複数の）コンピュータ読取可能な媒体であるコンピュータプログラムプロダクトを含む。この記録媒体は、フロッピー（登録商標）ディスク、光ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＤＲＡＭ、ＶＲＡＭ、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム（分子メモリＩＣを含む）、または、命令および／またはデータを格納するのに適した任意の種類の媒体もしくはデバイスを含み得るものの、これらに限定されない。
【００４４】
本発明に関するこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。変更および変形は、開示されている特徴の適切な組合せを含む。実施の形態は、本発明の原理およびその実際の応用を最もうまく説明することによって他の当業者が本発明のさまざまな実施の形態および意図している特定の用途に適したさまざまな変形を理解できるようにするために、選択され説明されている。本発明の範囲は、以下の特許請求の範囲およびその均等物によって定められることが意図されている。
【図１】
0006283376.tif 000002
【図２】
0006283376.tif 000003
【図３】
0006283376.tif 000004
【図４】
0006283376.tif 000005
【図５】
0006283376.tif 000006
【図６】
0006283376.tif 000007
【図７】
0006283376.tif 000008
【図８】
0006283376.tif 000009