(57)【要約】物理的に別個のネットワーク接続された計算デバイス間でメモリーを共有する。各計算デバイスは、ローカルに実行するプロセスからのコマンドを受け入れ、このようなコマンドを、リモート計算デバイスに送信可能な形態に変換するリモート・メモリー・インターフェース（ＲＭＩ）を含む。また、ＲＭＩは、それに宛てられたリモート通信も受け入れて、これらを、ローカル・メモリーを対象とするコマンドに変換する。共有される記憶容量の量は、集中コントローラー、１つのコントローラー、コントローラーの階層的集合体、またはピア・ツー・ピア・ネゴシエーションのいずれかによって通知される。離れた高速不揮発性記憶媒体を対象とする要求は、検出されるか、またはフラグが立てられ、その要求を出したプロセスは、それを効率的に回復させることができるように保留される。リモート・メモリーによって供給される記憶容量は、ローカルに実行するプロセスのプロセス空間にマッピングされる。【選択図】図３ｂ
2016513846.tif 000002
【特許請求の範囲】
【請求項１】
多数の計算デバイス間でメモリー記憶容量を共有する方法であって、
第１計算デバイスにおいて、前記第１計算デバイス上で実行するプロセスから、前記第１計算デバイスのローカル・アドレス可能メモリー名前空間におけるメモリー・アドレスを指定するメモリー中心要求を受けるステップと、
前記第１計算デバイスにおいて、前記指定されたメモリー・アドレスが、第２計算デバイス上にインストールされたメモリーによってサポートされると判断するステップと、
前記第１計算デバイスにおいて、前記受けた要求を、前記第２計算デバイスに宛てられるネットワーク通信に変換するステップと、
前記第１計算デバイスにおいて、前記第２計算デバイスからのネットワーク通信を受信するステップと、  
前記第１計算デバイスにおいて、前記第２計算デバイスから受信した前記ネットワーク通信を、前記要求に対する応答に変換するステップと、
前記第１計算デバイスにおいて、前記プロセスに前記応答を供給するステップと、
を含む、方法。
【請求項２】
請求項１に記載の方法であって、更に、
前記第２計算デバイスにおいて、前記第２計算デバイスに宛てられた前記ネットワーク通信を受信するステップと、
前記第２計算デバイスにおいて、前記第２計算デバイスに宛てられた前記ネットワーク通信をメモリー中心要求に変換するステップと、
前記第２計算デバイスにおいて、前記第２計算デバイス上にインストールされた前記メモリーの位置部分に対して前記メモリー中心要求を実行するステップと、
前記第２計算デバイスにおいて、前記第２計算デバイス上にインストールされた前記メモリーの前記位置部分に対する前記メモリー中心要求の実行に対する応答を受けるステップと、
前記第２計算デバイスにおいて、前記メモリー中心要求の実行に対する前記応答を、前記第２計算デバイスからの前記ネットワーク通信に変換するステップと、
を含む、方法。
【請求項３】
請求項１に記載の方法であって、更に、
前記第１計算デバイスのメモリーにおいて、前記多数の計算デバイス間で共有される部分を識別するステップと、
前記第１計算デバイスの前記メモリーの前記識別された部分が、前記第１計算デバイスの前記ローカル・アドレス可能メモリー名前空間の一部となることを禁止するステップと、
を含む、方法。
【請求項４】
請求項３に記載の方法において、前記識別するステップが、前記多数の計算デバイス間で前記メモリー記憶容量の共有を調整するメモリー共有コントローラーから受信される通信に応答して実行される、方法。
【請求項５】
請求項３に記載の方法において、前記識別するステップが、前記多数の計算デバイス間におけるピア・ツー・ピア・ネゴシエーションに応答して実行される、方法。
【請求項６】
請求項１に記載のステップを実行することを目的とするコンピューター実行可能命令を含む１つ以上のコンピューター読み取り可能媒体。
【請求項７】
多数の計算デバイス間でメモリー記憶容量を共有するシステムであって、
第１計算デバイスであって、
第１ローカル・アドレス可能メモリー名前空間と、
第１メモリーと、
第１リモート・メモリー・インターフェースと、
前記第１計算デバイス上で実行する第１プロセスと、
を含む、第１計算デバイスと、
前記第１計算デバイスとは物理的に別個である第２計算デバイスであって、
第２オペレーティング・システムと、
一部が前記システムの他の計算デバイスとの共有のために利用可能な第２メモリーであって、前記一部が前記第２オペレーティング・システムによってその境界が定められる、第２メモリーと、
前記第２メモリーの前記一部に対して直接アクセスが可能な第２リモート・メモリー・インターフェースと、
を含む、第２計算デバイスと、
を含み、
前記第１ローカル・アドレス可能メモリー名前空間が、前記第１計算デバイスの前記第１メモリーと、前記第２計算デバイスの前記第２メモリーの前記一部との双方によってサポートされる、システム。
【請求項８】
請求項７に記載のシステムにおいて、前記第１リモート・メモリー・インターフェースが、
前記第１プロセスから、前記第１ローカル・アドレス可能メモリー名前空間におけるメモリー・アドレスを指定するメモリー中心要求を受けるステップと、
前記指定されたメモリー・アドレスが、前記第２メモリーの前記一部によってサポートされる前記第１ローカル・アドレス可能メモリー名前空間の一部に対応すると判断するステップと、
前記受けた要求を、前記第２計算デバイスに宛てられるネットワーク通信に変換するステップと、
前記第２計算デバイスからネットワーク通信を受信するステップと、
前記第２計算デバイスから受信した前記ネットワーク通信を、前記要求に対する応答に変換するステップと、
前記応答を前記第１プロセスに供給するステップと、
を実行する、システム。
【請求項９】
請求項７に記載のシステムであって、更に、第１メモリー共有コントローラーを含み、前記第１メモリー共有コントローラーが、共有のために利用される前記第１メモリーの一部と前記第２メモリーの前記一部とを決定する、システム。
【請求項１０】
第１計算デバイス上に物理的にインストールされたリモート・メモリー・インターフェースであって、
前記計算デバイス上で実行するプロセスから、前記第１計算デバイスのローカル・アドレス可能メモリー名前空間におけるメモリー・アドレスを指定するメモリー中心要求を受けるステップであって、前記ローカル・アドレス可能メモリー名前空間が、前記第１計算デバイス上にインストールされた第１メモリーと、第２計算デバイス上にインストールされた第２メモリーの一部との双方によってサポートされる、ステップと、
前記指定されたメモリー・アドレスが、前記第２計算デバイス上にインストールされた前記第２メモリーの前記一部に対応すると判断するステップであって、前記第２計算デバイスが、前記第１計算デバイスとは離れている、ステップと、
前記受けた要求を、前記第２計算デバイスに宛てられるネットワーク通信に変換するステップと、
前記第２計算デバイスからネットワーク通信を受信するステップと、
前記第２計算デバイスから受信した前記ネットワーク通信を、前記要求に対する応答に変換するステップと、
前記応答を前記プロセスに供給するステップと、
を実行するように構成される、リモート・メモリー・インターフェース。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  計算デバイス間における通信のスループットが向上する程、計算デバイス同士でデーターを転送することが増々安価になる。その結果、離れて位置するサーバー計算デバイスが、大規模な処理を実行するために増々利用され、このような処理から得られるデーターが、コンピューター・ネットワークを介して伝達され、このようなサーバー計算デバイスに通信可能に結合されたローカルな個人用計算デバイスに戻される。
【０００２】
[0002]  従前からのサーバー計算デバイスは、通例、大量のこのようなサーバー計算デバイスを物理的に同じ位置に配置できるように最適化される。例えば、従前のサーバー計算デバイスは、多くの場合、「ブレード」アーキテクチャ(blade architecture）を利用して構築され、サーバー計算デバイスのハードウェアは、物理的な筐体内に配置される。この物理的な筐体は、物理的に小型であり、多数のこのようなブレードを「ラック」アーキテクチャ状に垂直に積み上げる(arranged vertically)ことができるように設計される。ラック内にある各サーバー計算デバイスは、一緒にネットワーク接続することができ、多数のこのようなラックを、データー・センター内におけるように、物理的に同じ位置に配置することができる。すると、１つのデーター・センター内にある多数のこのようなサーバー計算デバイスを跨いで計算タスクを分散することができ、これによって一層効率的なタスクの完了が可能になる。 
【０００３】
[0003]  計算タスクを多数のサーバー計算デバイスにわたって分散するとき、これら多数のサーバー計算デバイスの各々は、１組のデーターにアクセスすることができる。この１組のデーターは、ストレージ・エリア・ネットワーク（ＳＡＮ）または他の同様のメカニズムによってというようにして、多数のサーバー計算デバイスのいずれによっても等しくアクセスすることができるディスク・アレイという形態で編成されたコンピューター読み取り可能記憶媒体または他の同様のコンピューター読み取り可能記憶媒体の集合体に格納することができる。すると、計算タスクは、このような計算タスクが実行される格納データーのコピーを必ずしも多数作る必要なく、多数のサーバー計算デバイスによって並列に実行することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0004]  生憎、各サーバー計算デバイスの処理ユニットは、計算タスクを実行するためにこれらが利用できるメモリー量に限りがある。更に具体的には、各サーバー計算デバイスの処理ユニットは、当該処理ユニットと同じサーバー計算デバイス内に物理的にあるメモリーでなければ、直接アクセスすることはできない。所与のサーバー計算デバイス上に物理的にインストールされているメモリー量よりも多くのメモリーにアクセスする必要がある計算タスクの処理を可能にするためには、通例、仮想メモリー技法が利用される。このような仮想メモリー技法は、メモリーからディスクにデーターをスワップすることによって、見かけ上よりも大量のメモリーを生成することができる。生憎、メモリーからディスクへのデーター・スワップ、そして再度その逆のスワップを行うと、容認できない遅延が生ずる。このような遅延は、ディスクが物理的に同じサーバー計算デバイス上に配置されても、あるいは他の計算デバイス上、またはＳＡＮの一部として離れて配置されても、等しく発生する可能性がある。更に具体的には、このようなスワップをサポートするために使用される記憶媒体の速度を高めても、仮想メモリー技法の使用によって生ずる遅延を解決することにはならない。
【課題を解決するための手段】
【０００５】
[0005]  一実施形態では、物理的に１つの計算デバイスの一部であるメモリーを、この最初の計算デバイスに通信可能に結合された他の異なる計算デバイスのプロセス空間にマッピングし、この異なる計算デバイス上で実行するプロセスによって直接アクセス可能にすることができる。１つの計算デバイスのローカルにアクセス可能なメモリー名前空間(locally addressable memory namespace)は、これによって、物理的に他の異なる計算デバイス上に位置することができるメモリーによってサポートされる。
【０００６】
[0006]  他の実施形態では、リモート・メモリー・インターフェース（ＲＭＩ）が、メモリー管理機能をローカルに実行するプロセスに提供することができ、ローカルに実行するプロセスからのコマンドを受け入れ、これらのコマンドを、ローカル・アドレス可能メモリー名前空間に送り出し、次いで、このようなコマンドを、リモート計算デバイスへの通信接続を介して送信可能な形態に変換し、リモート計算デバイスの物理メモリーが、ローカル・アドレス可能メモリー名前空間の一部をサポートする。また、ＲＭＩは、それに宛てられるリモート通信を受け入れ、これらの通信を、ローカルにインストールされたメモリーを対象とするコマンドに変換することもできる。
【０００７】
[0007]  更に他の実施形態では、コントローラーが、どれ位のメモリー記憶容量を、他の計算デバイス上で実行するプロセスと共有すべきか決定することができる。このようなコントローラーは、多数の計算デバイス間におけるメモリーの共有を調整することができる集中コントローラーとすることができ、または多数の計算デバイス自体の間でピア・ツー・ピア通信の形態で実現することができる。更に他の代替案では、このようなコントローラーは、階層的フォーマットで実現することができ、あるレベルのコントローラーが複数組の計算デバイス間におけるメモリーの共有を調整し、他のレベルのコントローラーが、個々の各組の計算デバイスにおいて個々の計算デバイス間における共有を調整する。
【０００８】
[0008]  更に他の実施形態では、ローカルに実行するプロセスが、リモート計算デバイス上の物理メモリーによってサポートされる、ローカル・アドレス可能メモリー名前空間の一部にアクセスしようとする場合、このようなアクセスを検出する、またはこのようなアクセスにフラグを立てることができ、このような要求を発生するタスクの実行は、データーのリモート・アクセスの完了まで保留することができる。このような保留は、このようなリモート・メモリー動作の効率に合わせて変更することができ、現在の仮想メモリー動作よりも数桁高速化することができる。
【０００９】
[0009]  更に他の実施形態では、メモリーを共有する個々の計算デバイスのオペレーティング・システムは、共有されるこのようなメモリーの記憶量を調節する機能、およびこのようなプロセスが実行している計算デバイスから離れているメモリーによってサポートされる記憶容量を、このような計算デバイス上で実行するプロセスのプロセス空間にマッピングする機能を含むことができる。
【００１０】
[0010]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
【００１１】
[0011]  更に他の特徴および利点は、添付図面を参照して進められる以下の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【００１２】
[0012]  以下の詳細な説明は、添付図面と合わせて検討することによって、最良に理解することができる。
【図１】図１は、メモリー共有環境例のブロック図である。
【図２】図２は、メモリー共有を可能にするアーキテクチャ例のブロック図である。
【図３ａ】図３ａは、メモリー共有メカニズム例の流れ図である。
【図３ｂ】図３ｂは、メモリー共有メカニズム例の流れ図である。
【図４】図４は、汎用計算デバイス例を示すブロック図である。
【発明を実施するための形態】
【００１３】
[0017]  以下の説明は、ネットワークを介したメモリー共有に関する。ネットワークを介してというように、互いに通信可能に結合された計算デバイス間において、メモリーを共有することができる。各計算デバイスは、リモート・メモリー・インターフェース（ＲＭＩ）を含むことができる。リモート・メモリー・インターフェースは、メモリー管理機能をローカルに実行するプロセスに提供することができ、ローカルに実行するプロセスからのコマンドを受け入れ、これらのコマンドを、ローカル・アドレス可能メモリー名前空間に送り出し、次いで、このようなコマンドを、リモート計算デバイスへの通信接続を介して送信可能な形態に変換する。また、ＲＭＩは、それに宛てられるリモート通信を受け入れ、これらの通信を、ローカル・メモリーを対象とするコマンドに変換することもできる。共有されるメモリー量は、集中コントローラー、１つのコントローラー、またはコントローラーの階層的集合体のいずれかによって通知することができ、あるいはメモリー共有を実行する個々の計算デバイス間におけるピア・ツー・ピア・ネゴシエーションによって通知することができる。実際にリモート・メモリーに格納されているデーターにアクセスする要求を検出する、またはこの要求にフラグを立てることができ、このような要求を発生するタスクの実行を保留し、リモート・メモリー・アクセスの効率に適した様態で、効率的に回復させるようにすることができる。オペレーティング・システムは、ローカルに実行するアプリケーションに、ローカル・アドレス可能メモリー名前空間を供給することができる。ローカル・アドレス可能メモリー名前空間は、１つ以上のリモート計算デバイスの物理メモリーによって実際にサポートされる容量を含む。このようなオペレーティング・システムのメカニズムは、多数の計算デバイス間において共有に利用可能なメモリー量を調節することもできる。
【００１４】
[0018]  本明細書において説明する技法は、特定のタイプの計算リソースの共有を引き合いに出す。具体的には、説明するメカニズムは、「メモリー」の共有を対象とする。本明細書において利用する場合、「メモリー」という用語は、ローカル・アドレス可能メモリー名前空間を介して、中央処理ユニット上で実行する命令に直接アクセス可能なデーターの格納をサポートする任意の物理記憶媒体を意味する。本明細書において定義される場合の「メモリー」という用語の例には、限定ではなく、ランダム・アクセス・メモリー（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、サイリスターＲＡＭ（Ｔ−ＲＡＭ）、ゼロ・キャパシターＲＡＭ（Ｚ−ＲＡＭ）、およびツイン・トランジスターＲＡＭ（ＴＴＲＡＭ）が含まれる。このような例の列挙は限定されないが、「メモリー」という用語の定義を、以上で規定したこと以上に広げることも意図していない。特に、「メモリー」という用語は、本明細書において利用する場合、記憶名前空間またはファイル・システムを介してアクセス可能なデーターを格納する記憶媒体を特定的に除外する。
【００１５】
[0019]  必須ではないが、以下の説明の態様は、計算デバイスによって実行される、プログラム・モジュールのような、コンピューター実行可能命令という一般的なコンテキストにおいて行われる。更に具体的には、説明の態様は、別段指示がなければ、１つ以上の計算デバイスまたは周辺機器によって実行される動作(operation)のアクト(act)および象徴的表現を参照する。したがって、このようなアクトおよび動作は、場合によってはコンピューターによって実行されると言われることもあり、構造化形態でデーターを表現する電子信号の処理ユニットによる操作を含む。この操作は、データーを変形するか、またはそれをメモリー内の位置に維持し、当業者にはよく理解される方法で、計算デバイスまたは周辺機器の動作を再構成するか、またそうでなければ変化させる。データーが維持されるデーター構造は、データーのフォーマットによって定められる特定のプロパティを有する物理位置である。
【００１６】
[0020]  一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データー構造等を含み、特定のタスクを実行するか、または特定の抽象データー型を実装する。更に、計算デバイスは、従来のサーバー計算ラックや従来のパーソナル・コンピューターに限定される必要はなく、他の計算構成を含むことは、当業者には認められよう。他の計算構成には、ハンドヘルド・デバイス、マルチプロセッサー・システム、マイクロプロセッサー・ベースまたはプログラマブル消費者用電子機器、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター等が含まれる。同様に、計算デバイスは、単体計算デバイスに限定される必要もない。何故なら、本メカニズムは、通信ネットワークを介してリンクされた分散型計算環境においても実施することができるからである。分散型計算環境では、プログラム・モジュールはローカルおよびリモート双方の記憶デバイスに配置されてもよい。
【００１７】
[0021]  図１を参照すると、計算デバイスのネットワーク１９０を含むシステム例１００が示されている。以下の説明に対して基準の一例を設けるために、サーバー計算デバイス１１０、１２０、および１３０の形態である３つのサーバー計算デバイスが、ネットワーク１９０を介して互いに通信可能に結合されていることが示されている。サーバー計算デバイス１１０、１２０、および１３０の各々は、コンピューター実行可能命令を実行することができる処理ユニットを含むことができる。このようなコンピューター実行可能命令の実行中、処理ユニットによってデーターをメモリーに格納することができる。実行されるコンピューター実行可能命令に応じて、メモリーに格納することが望まれるデーター量が、サーバー計算デバイス上にインストールされた物理メモリーの記憶容量よりも大きくなる可能性がある。このような場合、通例、仮想メモリー・メカニズムが利用され、これによって、あるデーターがメモリーから、ハード・ディスク・ドライブのような、もっと遅い不揮発性記憶媒体に「スワップ」(swap)される。このようにして、より多くのメモリー容量が利用可能になる。メモリーからディスクにスワップされたデーターを、実行中のプロセスによってメモリーから読み出そうとすると、ページ・フォールトが発生する可能性がある。このようなデーターは、遅い方のディスクから読み出され再度メモリーに格納され、次いでメモリーから処理ユニットに供給することができるが、その間、処理は一時的に中断される可能性がある。当業者には認められようが、このようなプロセスは、特にサーバー計算のコンテキストにおいて、望ましくない可能性がある遅延を生ずるおそれがある。
【００１８】
[0022]  図１のシステム例１００は、サーバー計算デバイス１３０にジョブ１４０が割り当てられ、ジョブ１４０は、処理機能を実行するために、サーバー計算デバイス１３０を必要とする可能性がある実施形態を示す。更に具体的には、サーバー計算デバイス１３０の中央処理ユニット（ＣＰＵ）１３２のような、１つ以上の処理ユニットが、ジョブ１４０に関連するコンピューター実行可能命令を実行することができる。通例、ジョブ１４０に関連するコンピューター実行可能命令の実行は、サーバー計算デバイス１３０のメモリー１３５のような、メモリーにおけるデーターの格納を必要とする可能性がある。以下の説明に限って、ジョブ１４０に関連するコンピューター実行可能命令が必要とする可能性があるメモリー量は、メモリー１３５の量を超過する可能性がある、また更に正確には、ジョブ１４０の処理に割り当てることができるメモリー１３５のメモリー記憶容量を超過する可能性があるとする。
【００１９】
[0023]  図１に示す実施形態では、サーバー計算デバイス１３０のＣＰＵ１３２は、ジョブ１４０に関連するコンピューター実行可能命令を実行している可能性があり、メモリー１３５にデーターを格納し、そこからデーターを引き出すために、ＭＭＵ１３３のような、１つ以上のメモリー管理ユニット（ＭＭＵ）と通信することができる。当業者には認められようが、データーをメモリー１３５に格納するためには格納(STORE)命令を利用することができ、メモリー１３５からデーターを読み出してＣＰＵ１３２の１つ以上のレジスターにそれをロードするためにはロード(LOAD)命令を利用することができる。別々に示されているが、ＭＭＵ１３３は、多くの場合、ＣＰＵ１３２の一体部分である。先に示したように、ジョブ１４０に関連する実行可能命令を実行するときに、ＣＰＵ１３２が、それに割り当てられたメモリー容量を超えるメモリーに追加のデーターを格納しようとする場合、一実施形態では、このような追加のメモリー容量は、リモート・メモリー・インターフェース（ＲＭＩ）１３１の機能によって、ローカル・アドレス可能メモリー名前空間の一部として入手可能にすることができる。更に特定すれば、コンピューター実行可能命令によるローカル・アドレス可能メモリー名前空間の一部にアクセスする試みは、このようなアクセスをＲＭＩ１３１に送り出させることができる。ＲＭＩ１３１は、このようなアクセスをネットワーク通信に変換し、例えば、サーバー計算デバイス１１０および１２０の内の１つのような、他の異なる計算デバイスと通信することができ、それによって、計算デバイス１３０上で実行するプロセスのために、このような他の計算デバイス上にインストールされた物理メモリーを利用することができる。
【００２０】
[0024]  つまり、一実施形態では、リモート・メモリー・インターフェース１３１は、ＣＰＵ１３２およびそれによって実行されるコンピューター実行可能命令の観点からは、ＭＭＵ１３３のようなメモリー管理ユニットとして機能することができる。例えば、メモリー・ページ・テーブル、または他の同様のメモリー・インターフェース・メカニズムが、リモート・メモリー・インターフェース１３１と関連付けることができる特定のページまたは特定のアドレス範囲のような、ローカル・アドレス可能メモリー名前空間の特定部分を識別することができる。ローカル・アドレス可能メモリー名前空間のこれらの部分を対象とするロード命令または格納命令、あるいは他の同様の命令を、リモート・メモリー・インターフェース１３１に宛てることができる。つまり、サーバー計算デバイス１３０によって実行されるプロセスによって利用可能なローカル・アドレス可能メモリー名前空間は、物理メモリー１３５よりも大きいことが可能である。何故なら、リモート・メモリー・インターフェース１３１は、例えば、サーバー計算デバイス１２０のメモリー１２５、またはサーバー計算デバイス１１０のメモリー１１５のような、リモート計算デバイスのメモリーを利用して、計算デバイス１３０上において、拡大したメモリー名前空間をサポートできるからである。
【００２１】
[0025]  このような実施形態では、計算デバイス１３０において、リモート・メモリー・インターフェース１３１によってサポートされるローカル・メモリー名前空間の部分を対象とするコマンドを受けたとき、リモート・メモリー・インターフェース１３１は、このコマンドを、サーバー計算デバイス１１０および１２０のような、１つ以上の他の計算デバイスにネットワーク１９０を介して通信することができるフォーマットに変換することができる。例えば、リモート・メモリー・インターフェース１３１は、ネットワーク１９０によって利用されるネットワーク・プロトコルによって定められたパケット構造にしたがって、メモリーをパケット化することができる。他の例として、リモート・メモリー・インターフェース１３１は、例えば、サーバー計算デバイス１２０のリモート・メモリー・インターフェース１２１、またはサーバー計算デバイス１１０のリモート・メモリー・インターフェース１１１のような、特定の計算デバイスのリモート・メモリー・インターフェースに通信を宛てるために、ネットワーク１９０によって使用されるプロトコルによって指令される通りに、しかるべきネットワーク・アドレシング情報および他の同様のルーティング情報を生成することができる。
【００２２】
[0026]  続いて、これら他の計算デバイス上のリモート・メモリー・インターフェースは、これらに宛てられたネットワーク通信を受信すると、これらのネットワーク通信をしかるべきメモリー中心コマンド(memory-centric command)に変換し、このようなネットワーク通信を受信したリモート・メモリー・インターフェースと同じ計算デバイス上に物理的に存在するメモリー上でこのようなコマンドを実行することができる。例えば、リモート・メモリー・インターフェース１３１から通信を受信すると、サーバー計算デバイス１２０上のリモート・メモリー・インターフェース１２１は、メモリー１２５の部分１２６に関するアクションを実行することができる。メモリー１２５の部分１２６は、以下で更に詳しく説明するように、他の計算デバイスと共有するために取り置きされている可能性がある部分とすることができる。同様に、サーバー計算デバイス１１０上のリモート・メモリー・インターフェース１１１は、サーバー計算デバイス１３０のリモート・メモリー・インターフェース１３１からの、ネットワーク１９０を介した、通信を受信したことに応答して、サーバー計算デバイス１１０のメモリー１１５の部分１１６に関するアクションを実行することができる。別個の物理部分として示されているが、メモリー１１５および１２５の部分１１６および１２５は、それぞれ、メモリー１１５および１２５のメモリー記憶容量の一部が、これらの計算デバイスのリモート・メモリー・インターフェース、即ち、それぞれリモート・メモリー・インターフェース１１１および１２１による利用のために保存されることを図式的に例示することを意図するに過ぎない。当業者には認められようが、ローカル・アドレス可能メモリー名前空間をサポートするメモリー１１５および１２５の、トランジスターのような、実際の物理データー記憶ユニットと、リモート・メモリー・インターフェース１１１および１２１それぞれによる利用のために保存されるメモリー記憶容量を提供する記憶ユニットとの間には、明確な境界が存在する必要はない。
【００２３】
[0027]  更に説明すると、例えば、ジョブ１４０を実行するとき、サーバー計算デバイス１３０のＣＰＵ１３２が、メモリー管理ユニット１３３ではなく、リモート・メモリー・インターフェース１３１によってサポートされるローカル・アドレス可能メモリー名前空間の一部にデーターを格納しようとした場合、このような要求をリモート・メモリー・インターフェース１３１に宛てることができ、次いで、リモート・メモリー・インターフェース１３１は、この要求をネットワーク通信に変換することができ、このネットワーク通信を、サーバー計算デバイス１２０上のリモート・メモリー・インターフェース１２１、およびサーバー計算デバイス１１０上のリモート・メモリー・インターフェース１１１に宛てることができる。このようなネットワーク通信を受信すると、リモート・メモリー・インターフェース１２１は、このネットワーク通信をデーター格納要求に変換することができ、次いでサーバー計算デバイス１２０のメモリー１２５の部分１２６へのデーターの格納を実行することができる。同様に、このようなネットワーク通信を受信すると、リモート・メモリー・インターフェース１１１もこのネットワーク通信をデーター格納要求に変換することができ、サーバー計算デバイス１２０のメモリー１１５の部分１１６へのそのデーターの格納を実行することができる。このように、サーバー計算デバイス１３０上で実行するプロセスによってアドレス可能であるメモリー名前空間は、サーバー計算デバイス１３０上に存在するメモリー１３５よりも大きくなることができる。更に特定すれば、そして以下で更に詳しく説明するように、サーバー計算デバイス１２０のメモリー１２５の部分１２６、およびサーバー計算デバイス１１０のメモリー１１５の部分１１６のような、他の計算デバイスからの共有メモリーは、例えば、ジョブ１４０に関連するプロセスのような、サーバー計算デバイス１３０上で実行するプロセスによってアドレス可能であるメモリー名前空間をサポートすることができ、これによって、このようなプロセスが実行しているサーバー計算デバイス１３０上のメモリー１３５から入手可能であるメモリーよりも多いメモリーを、このようなプロセスが利用することを可能にする。
【００２４】
[0028]  一実施形態では、共有のために利用可能とされるメモリー記憶容量の量は、メモリー共有コントローラー１７０のような、集中メカニズムによって調整することができる。例えば、メモリー共有コントローラー１７０は、サーバー計算デバイス例１１０、１２０、および１３０のような、計算デバイスから情報を受信し、このような受信した情報に基づいて、共有のために利用可能にすべきサーバー計算デバイス１１０、１２０、および１３０のメモリー記憶容量の量を決定することができる。例えば、メモリー共有コントローラー１７０は、サーバー計算デバイス１２０に、そのメモリー１２５の部分１２６を共有のために利用可能にするように命令することができる。同様に、メモリー共有コントローラー１７０は、サーバー計算デバイス１１０に、そのメモリー１１５の部分１１６を共有のために利用可能にするように命令することができる。応答して、サーバー計算デバイス１１０および１２０のオペレーティング・システムまたは他の同様のメモリー・コントローラー・プロセスが、メモリー１１５および１２５それぞれの部分１１６および１２６をそれぞれ取り置きし、これらのサーバー計算デバイス上でローカルに実行するプロセスには、これらの部分を利用しないようにすることができる。更に特定すれば、ローカル・アドレス可能メモリー名前空間を、リモート・メモリー・インターフェースによる利用のために保存され、これによって、リモート計算デバイス上で実行するプロセスによって共有されるメモリー記憶容量から明確に分けるために、メモリーの特定のページ、メモリーの特定のアドレス、または他の同様の識別子を利用することができる。つまり、例えば、サーバー計算デバイス１２０上で実行するプロセスによって利用することができる、ローカル・アドレス可能メモリー名前空間を、共有のために取り置かれた部分１２６を除くメモリー１２５の部分によってサポートすることができる。同様に、サーバー計算デバイス１１１０上で実行するプロセスによって利用することができるローカル・アドレス可能メモリー名前空間を、部分１１６を除くメモリー１１５の部分によってサポートすることができる。
【００２５】
[0029]  サーバー計算デバイス例１１０、１２０、および１３０のような、計算デバイスからのメモリー共有コントローラー１７０によって受信された情報は、このような計算デバイス上に物理的にインストールされているメモリーの総量、またそうでなければこのような計算デバイスに入手可能なメモリーの総量を指定する情報、現在利用されているメモリー記憶容量の量、所望のメモリー記憶容量の量、および他の同様の情報を指定する情報を含むことができる。このような情報に基づいて、メモリー共有コントローラー１７０は、サーバー計算デバイス１１０、１２０、および１３０の各々によって共有のために利用可能にされるべきメモリー記憶容量の量を識別することができる。一実施形態では、メモリー共有コントローラー１７０は、サーバー計算デバイス１１０、１２０、および１３０にしかるべく命令することができ、一方、他の実施形態では、メモリー共有コントローラー１７０は単に要求を発行することもでき、個々の計算デバイスのオペレーティング・システムまたは他の同様の制御メカニズムは、この要求を受け入れることもまたは無視することもできる。
【００２６】
[0030]  一実施形態では、メモリー共有コントローラー１７０は、共有されるメモリー記憶容量の量を連続的に調節することができる。このような実施形態では、個々の計算デバイスのオペレーティング・システムまたは他の同様の制御メカニズムは、ローカル・アドレス可能メモリー名前空間のサイズを動的にランタイム中に変更できるメカニズムを含むことができる。例えば、サーバー計算デバイス１３０によるジョブ１４０の実行が、メモリーに対する要求増大になる可能性がある。応答して、サーバー計算デバイス１３０上で実行するプロセスは、メモリー共有コントローラー１７０と通信することができ、追加の共有メモリーを要求することができる。次いで、メモリー共有コントローラー１７０は、一例として、サーバー計算デバイス１１０が、共有のために利用可能にしたメモリー１１５の部分１１６を増大することを要求することができる。応答して、一実施形態では、サーバー計算デバイス１１０上で実行するオペレーティング・システムまたは他の同様の制御メカニズムは、サーバー計算デバイス１１０上でローカルに実行するプロセスに既に割り当てられたメモリー１１５の部分に格納されているデーターをスワップし、このようなデーターを、例えば、ディスク・ドライブに格納することができる。続いて、メモリー１１５のこれらの部分を、共有に利用可能である部分に追加することができ、これによって、共有に利用可能である部分１１６を増大させ、サーバー計算デバイス１３０上におけるジョブ１４０の実行によって増大した要求に対処する。次いで、サーバー計算デバイス１１０上でローカルに実行するプロセスが、このようなプロセスに既に割り当てられ、その後共有されている部分１１６に再度割り当てられたメモリー１１５の部分にアクセスしようとした場合、ページ・フォールトが発生する可能性があり、メモリー１１５の他の部分から他のデーターをディスクに移動させるために仮想メモリー・メカニズムを利用することができ、これによって、以前にスワップされてディスクに出されたデーターをメモリー１１５にスワップして戻すための余裕を作る。
【００２７】
[0031]  他の実施形態では、共有専用にされる個々の計算デバイスのメモリーの部分のその調節において、メモリー共有コントローラー１７０を制限することができる。例えば、メモリー共有コントローラー１７０は、例えば、計算デバイスが再起動している間、または計算デバイスが他のタスクの実行を中断した時間期間の間というような、定められた時間期間の間だけ、任意の特定の計算デバイスによって共有されるメモリーの量を調節できるのでもよい。
【００２８】
[0032]  メモリー共有コントローラー１７０は、１つのデバイスとして示されているが、階層的手法も利用することができる。例えば、メモリー共有コントローラー１７０は、一般にデーター・センターにおいて見られるように、サーバー計算デバイスの１つのラック内というような、物理的に同じ位置に設けられたサーバー計算デバイス例１１０、１２０、および１３０のような、前述したサーバー計算デバイスへの共有メモリーの制御を行うことを専用にすることができる。そして、他の異なるメモリー共有コントローラーが、例えば、データー・センターにおける他のラックのサーバー計算デバイス間というような、他の１組の計算デバイス間における共有メモリーの制御を行うことを専用にすることができる。次いで、更に高いレベルのメモリー共有コントローラーが、サーバー計算デバイスの特定のラックに割り当てられた個々のメモリー共有コントローラーを制御することができる。例えば、ラック・レベルのメモリー共有コントローラーは、１つのラック内にあるサーバー計算デバイス間におけるメモリーの共有を制御することができ、一方データー・センター・レベルのメモリー共有コントローラーは、サーバー計算デバイスのラック間におけるメモリーの共有を制御することができ、ラック・レベルのメモリー共有コントローラーに、個々のサーバー計算レベルでのこのような共有の実施を任せる。
【００２９】
[0033]  更に他の実施形態では、メモリー共有コントローラー１７０は別個のプロセスまたはデバイスである必要はなく、むしろ、例えば、サーバー計算デバイス１１０、１２０、および１３０のような、それらのメモリーを共有する計算デバイス間におけるピア・ツー・ピア通信によって実現することもできる。更に特定すれば、サーバー計算デバイス１１０、１２０、および１３０の各々において個々に実行するプロセスが互いに通信することができ、サーバー計算デバイス１１０、１２０、および１３０の各々の共有されるメモリー１１５、１２５、および１３５の量をそれぞれネゴシエートすることができる。このようにローカルに実行するプロセスは、次いで、ネゴシエートされ同意された共有を実現するために、オペレーティング・システムのメモリー管理機能に関連するプロセスのような、他のプロセスに命令することができる。
【００３０】
[0034]  図２に移ると、そこに示されるシステム２００は、リモート・メモリー・インターフェースの動作例を更に詳しく検証する一連の通信例を示す。説明の目的に限って、サーバー計算デバイス１３０の処理ユニット１３２が、ジョブ１４０に関連するコンピューター実行可能命令を実行するものとして示される。このようなコンピューター実行可能命令の実行の一部として、ＣＰＵ１３２は、サーバー計算デバイス１３０上に物理的にインストールされたメモリー１３５によって表されるようなメモリーに、データーを格納するまたはこのメモリーからデーターを引きだそうとすることがある。図２のシステム２００において、ローカル・アドレス可能メモリー名前空間２３１が示され、当業者には理解されるであろうが、計算デバイス１３０のＣＰＵ１３２上で実行するプロセスによって直接アクセスすることができるメモリーを含む。一実施形態では、そして以下で更に詳しく説明するように、ローカル・アドレス可能メモリー名前空間２３１は、ローカルにインストールされたメモリー１３５によってサポートすることができる部分２３４と、リモート・メモリー・インターフェース１３５によってサポートすることができる部分とを含むことができる。例えば、計算デバイス１３０が、１６ＧＢのローカル・インストール・メモリーを含む場合、ローカル・アドレス可能メモリー名前空間２３１の部分２３４も約１６ＧＢとすることができる。同様に、ローカル・アドレス可能メモリー名前空間２３１の部分２３５が４ＧＢである場合、本明細書において説明するメカニズムによってサポートすることができる、リモート計算デバイス上の共有メモリーは、４ＧＢにすることができる。
【００３１】
[0035]  データーをメモリーに格納するために、ＣＰＵ１３２は、周知の格納コマンドのような、しかるべきコマンドを発行することができ、このコマンドは１つ以上のメモリー管理ユニット１３３が受けることができる。一方、メモリー管理ユニット１３３は、メモリー１３５とインターフェースし、ＣＰＵ１３２によって供給されたデーターを、物理メモリー１３５におけるしかるべき記憶位置、アドレス、ページ、または同様の記憶単位に格納することができる。同様に、高速揮発性記憶媒体からデーターを引き出すために、ＣＰＵ１３２は、周知のロード・コマンドのような、他のしかるべきコマンドを発行することができ、このコマンドはＭＭＵ１３３によって受け取られることができる。一方、ＭＭＵ１３３は、図１に示した物理メモリー１３５とインターフェースして、ＣＰＵによって要求されたデーターを該当する記憶位置から引き出し、ジョブ１４０に関連するコンピューター実行可能命令の実行の一部として、ＣＰＵ１３２による更なる消費のために、ＣＰＵ１３２のレジスター内にこのようなデーターをロードすることができる。ＣＰＵ１３２によって発行される格納コマンドおよびロード・コマンドが、ローカル・インストール・メモリー１３５によってサポートされるローカル・アドレス可能メモリー名前空間２３１の部分２３４を対象とする範囲では、このような格納およびロード・コマンド、ならびにメモリー１３５に対して結果的に行われる動作は、通信２２１および２２２によって図２のシステム２００において図式的に表されるように、メモリー管理ユニット２３３によって管理することができる。
【００３２】
[0036]  一実施形態では、ローカル・アドレス可能メモリー名前空間２３１は、計算デバイス１３０上にインストールされたメモリーよりも大きいことが可能である。このような実施形態では、ジョブ例１４０のような、計算デバイス１３０上で実行するプロセスは、より大きなローカル・アドレス可能メモリー名前空間２３１に直接アドレスすることができ、その部分をこれらのプロセスのプロセス空間にマッピングさせることができる。このようなより大きなローカル・アドレス可能メモリー名前空間２３１は、サーバー計算デバイス１３０上にインストールされたメモリー１３５だけでなく、他の異なる計算デバイス上に物理的にインストールされた、メモリー１２５のような、リモート・メモリーによってもサポートすることができる。しかしながら、計算デバイス１３０上で実行するプロセスは、ローカル・アドレス可能メモリー名前空間２３１によってどの物理メモリーが実際に表されるかについては、不可知論的であることが可能である。
【００３３】
[0037]  例えば、ジョブ１４０に関連するコンピューター実行可能命令は、ＣＰＵ１３２上で実行する間、ローカル・アドレス可能メモリー名前空間２３１の部分２３５にデーターを格納しようとする。示されるように、このようなコンピューター実行可能命令は、ローカル・アドレス可能メモリー名前空間２３１のいずれの他の部分と同様に、ローカル・アドレス可能メモリー名前空間２３１を認識する。次いで、ＣＰＵ１３２は、以上で説明した格納コマンドのような、部分２３５の一部であるローカル・アドレス可能メモリー名前空間２３１のある部分を識別するアドレス、ページ、または同様の位置識別子を指定する、しかるべきコマンドを発行することができる。このようなコマンドは、ＭＭＵ１３３に宛てられるのではなく、代わりに、リモート・メモリー・インターフェース１３１に宛てることができる。例えば、変換索引バッファ（ＴＬＭ）または他の同様のテーブル、あるいはデーターベースを参照して、ＣＰＵ１３２によって発行されたメモリー中心コマンドによって指定された位置識別子が、部分２３４ではなく部分２３５の一部であり、したがって、このようなコマンドをリモート・メモリー・インターフェース１３１に宛てることができると判断することができる。図２のシステム例２００では、このようなコマンドは、ＣＰＵ１３２からリモート・メモリー・インターフェース１３１への通信２２３によって示される。
【００３４】
[0038]  このようなコマンドを受けると、リモート・メモリー・インターフェース１３１は、このようなコマンドを、ネットワーク通信２４１のような、ネットワーク通信に変換し、これらのネットワーク通信を、例えば、サーバー計算デバイス１２０のリモート・メモリー・インターフェース１２１のような、１つ以上の他の計算デバイス上のリモート・メモリー・インターフェースにアドレスすることができる。コマンド２２３をネットワーク通信２４１に変換するとき、リモート・メモリー・インターフェース１３１はコマンドをパケット化することができ、またそうでなければ、ネットワーク１０を実現するために利用されたプロトコルに適したネットワーク通信を生成することができる。例えば、ネットワーク１９０がイーサネット（登録商標）・ハードウェアを利用して実現される場合、リモート・メモリー・インターフェース１３１は、単位がイーサネット（登録商標）の最大通信単位を超えないネットワーク通信を生成することができる。同様に、ネットワーク１９０が送信制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）を利用して実現される場合、リモート・メモリー・インターフェース１３１は、ＴＣＰ／ＩＰヘッダを有し、リモート・メモリー・インターフェース１２１のＩＰアドレスをそれらの宛先として指定することができるパケットを生成することができる。他の同様の変換も、ネットワーク１９０を実現するために利用されたプロトコルに応じて実行することができる。
【００３５】
[0039]  一旦ネットワーク通信２４１が、これらが宛てられた先のサーバー計算デバイス１２０のリモート・メモリー・インターフェース１２１によって受信されたなら、リモート・メモリー・インターフェース１２１は、このようなネットワーク通信２４１をしかるべきメモリー中心コマンド２５１に変換することができ、このメモリー中心コマンド２５１を、サーバー計算デバイス１２０上にインストールされたメモリー１２５を対象にすることができる。更に特定すれば、リモート・メモリー・インターフェース１２１は、ネットワーク通信２４１をパケット分解(un-packetize)することができ、メモリー１２５の部分１２６における１つ以上のアドレスに対してしかるべきメモリー中心コマンド２５１を生成することができる。メモリー１２５の部分１２６は、既に共有可能メモリーとして取り置きされており、したがって、例えば、計算デバイス１２０のメモリー管理単位ではなく、リモート・メモリー・インターフェース１２１の制御下に入ることができ、したがって、計算デバイス１２０上で実行するプロセスに利用可能にされたローカル・アドレス可能メモリー名前空間から除外することができる。
【００３６】
[0040]  メモリー中心コマンド２５１に応答して、リモート・メモリー・インターフェース１２１は、コマンド２５１が格納コマンドであったときには、承認を受信することができ、コマンドがロード・コマンドであった場合には、要求したデーターを受信することができる。このような応答は、図２のシステム２００において、メモリー１２５の部分１２６からリモート・メモリー・インターフェース１２１への通信２５２によって示される。応答通信２５２を受信すると、リモート・メモリー・インターフェース１２１はそれらをネットワーク通信２５２に変換することができ、通信２４１を送信したリモート・メモリー・インターフェース１３１に、ネットワーク通信２４２を宛てることができる。リモート・メモリー・インターフェース１３１を参照して先に詳細に説明したように、リモート・メモリー・インターフェース１２１は、通信２５２をネットワーク通信２４２に変換するとき、ネットワーク１９０を実現するために利用されたプロトコルにしたがって、通信２５２をネットワーク通信２４２にパケット化する、パッケージ化する、フォーマットする、またそうでなければ変換することができる。
【００３７】
[0041]  リモート・メモリー・インターフェース１３１がネットワーク通信２４２を受信すると、それをパケット分解し、通信２２５によって示されるように、ＣＰＵ１３２に対してしかるべき応答を生成することができる。更に特定すれば、ＣＰＵ１３２からの通信２２３が格納コマンドであった場合、通信２２５は、データーが適正に格納されたことの承認とすることができるが、本例では、このような承認は、データーが実際にはサーバー計算デバイス１２０のメモリー１２５の部分１２６に適正に格納されたことの承認となる。同様に、ＣＰＵ１３２からの通信２２３がロード・コマンドであった場合、通信２２５は、ＣＰＵ１３２がそのレジスターの１つ以上にロードすることを要求したデーター、即ち、本例では、メモリー１２５の部分１２６から読み出されたデーターとすることができる。
【００３８】
[0042]  このように、サーバー計算デバイス１３０上で実行するプロセスは、それらの知識がなくても、そしてこのようなプロセス自体に対する変更を全くすることなく、例えば、計算デバイス１２０のメモリー１２５のような、他の計算デバイス上にインストールされたメモリーを利用することができる。更に特定すれば、リモート・メモリー・インターフェース１３１は、メモリーと通信するメモリー管理ユニットとして機能し、サーバー計算デバイス１３０上で実行するプロセスによって直接アドレスすることができる、ローカル・アドレス可能メモリー名前空間２３１の一部であるように見える。
【００３９】
[0043]  コマンド２２３の受信と応答２２５の供給との間のレイテンシーを低減するために、一実施形態では、リモート・メモリー・インターフェース１３１が、サーバー計算デバイス１３０の一部であるネットワーキング・ハードウェアと直接通信することができる。例えば、リモート・メモリー・インターフェース１３１は、サーバー計算デバイス１３０のネットワーク・インターフェースへの直接接続を含む専用プロセッサーであることが可能である。このような専用プロセッサーは、周知のメモリー管理ユニット・プロセッサー（ＭＭＵ）に類似することができ、単体プロセッサーとすることができ、または１つ以上のＣＰＵというような他のプロセッサーと統合することもできる。また、リモート・メモリー・インターフェース１２１も、サーバー計算デバイス１２０のネットワーク・インターフェースへの直接接続を含む専用プロセッサーであることが可能であり、これによって通信の他端におけるレイテンシーを低減する。
[0044]  他の実施形態では、リモート・メモリー・インターフェース１３１によって設けられると以上で説明した機能は、サーバー計算デバイス１３０上で実行するオペレーティング・システムまたはユーティリティにおいて実現することができる。同様に、リモート・メモリー・インターフェース１２１によって設けられると以上で説明した機能も同様に、サーバー計算デバイス１２０上で実行するオペレーティング・システムまたはユーティリティにおいて実現することができる。このような実施形態では、このようなリモート・メモリー・インターフェースによって生成されそれに宛てられる通信は、少ないネットワーク・スタックを通過し、レイテンシーを低減することができる。例えば、このようなリモート・メモリー・インターフェースを表すコンピューター実行可能命令に、内蔵ドライバまたは該当する機能を有することによってというようにして、ネットワーキング・ハードウェアへの直接アクセスを設ける。
【００４０】
[0045]  当業者には認められようが、以上で説明したメカニズムは、従前からの仮想メモリー・メカニズムとは異なり、データーがメモリーからスワップされる記憶媒体の交換に過ぎない。したがって、応答２２５は、従前からの仮想メモリーのコンテキストで可能であったよりも遙かに素早く供給することができるので、軽量保留および再開(lightweight suspend and resume)を、コマンド２２３のようなコマンドを発行する実行プロセスに適用することができる。更に特定すれば、そして当業者には認められようが、仮想メモリーのコンテキストでは、もはやメモリーには格納されていないデーターがそのようなメモリーに要求され、そのデーターが代わりにディスクにスワップされている場合、要求元プロセスの実行は、このようなデーターが遅い方のディスクからメモリーに戻されるまで、保留することができる。このようなスワップが完了すると、要求元プロセスを再開することができ、例えば、１つ以上の処理ユニットのしかるべきレジスターにロードすることによってというようにして、要求されたデーターをそれに供給することができる。しかし、以上で説明したメカニズムを使用すれば、遅い方のディスク媒体からスワップするときよりも、遙かに素早くデーターをリモート物理メモリーから得ることができる。これは、物理的にディスクがこのようなプロセスが実行している計算デバイスの一部であっても、当てはまる。したがって、より一層完全に保留された実行スレッドまたは他の同様の処理を再開するときの不必要な遅延を回避するために、軽量保留および再開を利用することができる。
【００４１】
[0046]  例えば、一実施形態では、コマンド２２３によって指定される、またはコマンド２２３が対象とするメモリー・アドレス、ページ、あるいは他の同様の位置識別情報に基づいて、コマンド２２３がアドレス可能なリモート・メモリー２３５を対象とすると判定することができる。このような実施形態では、コマンド２２３が、リモート・メモリーによってサポートされるローカル・アドレス可能メモリー名前空間２３１の部分２３５を対象とすると判定された場合、ＣＰＵ１３２によって実行されるプロセスを保留状態に置くことができ、この状態から、従前の保留状態よりも素早く再開することができる。更に特定すれば、実行されつつあるプロセスは、それ自体で、実行中のプロセスによって指定されたメモリー位置に基づいて、コマンド２２３が部分２３５を対象とすると判断することができる。したがって、実行中のプロセスは、自動的にそれ自体を保留状態に置くことができ、この保留状態から、従前の保留状態よりも素早く再開することができる。あるいは、このような決定は、ＣＰＵ１３２によって、または実行中のプロセスを自動的に保留状態に置く能力を有する他の同様のコンポーネントによって下すこともできる。
【００４２】
[0047]  他の実施形態では、リモート・メモリー・インターフェース１３１、または他のメモリー管理コンポーネントが、コマンド２２３が部分２３５を対象とすることを検出することができ、それにしたがって実行中のプロセスに通知することができる。更に特定すれば、そして既に示したように、コマンド２２３が対象とするメモリー位置を検出することができ、これらのメモリー位置から、コマンド２２３が部分２３５を対象とするのか否かについて判断することができる。コマンド２２３が部分２３５を対象とすると判断された場合、実行中のプロセスにまたはプロセス管理コンポーネントにというような、通知を生成することができる。このような通知に応答して、実行中のプロセスはそれ自体を保留状態に置くことができ、この保留状態から、従前の保留状態よりも素早く再開することができ、あるいは通知が実行中のプロセスに直接供給されたのか、またはプロセス管理コンポーネントに供給されたのかに応じて、保留状態に置くことができる。
【００４３】
[0048]  図３ａおよび図３ｂに移ると、そこには流れ図３０１および３０２がそれぞれ示されており、物理的にリモート計算デバイス上にインストールされたメモリーを、ローカルに実行するプロセスによって利用することができる一連のステップ例を示す。まず図３ａに進み、最初にステップ３１０において、ローカル・リモート・メモリー・インターフェースにアドレスされたネットワーク通信を受信することができる。一旦受信されると、これらのネットワーク通信は、ロード・コマンドまたは格納コマンドのような、しかるべきネットワーク中心コマンドに組み立てることができる。このような組立は、ステップ３１５の一部として行うことができ、既に示したように、種々の計算デバイス間の通信が確立されたネットワーク・プロトコルを想定して、該当するいずれのフォーマットからでも、ネットワーク通信のパッケージ分解を行うことを伴うことができる。ステップ３２０において、ローカル・メモリーを使用して、該当するコマンドを実行することができる。例えば、受信したコマンドが格納コマンドであり、特定のメモリー・アドレスにおいて開始してデーターを格納することを指定する場合、ステップ３２０において、あるアドレス、または受信したコマンドによって指定されたアドレスに相応する他の同様のメモリー位置から開始して、このようなデーターをローカル・メモリーに格納することができる。同様に、受信したコマンドがロード・コマンドであり、指定されたアドレスまたは他の同様のメモリー位置から開始してローカル・メモリーに格納されているデーターを要求する場合、ステップ３２０において、ローカル・メモリーの相応する位置に格納されているデーターを得ることができる。一実施形態では、受信したコマンドが、ローカル・メモリーと関連して利用されるアドレスを指定することができ、一方、他の実施形態では、受信したコマンドによって指定されるアドレスを、共有されるメモリーとして定められているアドレス、ページ、または他の位置の範囲にしたがって変換することができる。
【００４４】
[0049]  ステップ３２０において要求されたコマンドを実行した結果、例えば、データーがローカル・メモリーに格納された場合には承認応答のような応答を得ることができ、またはローカル・メモリーから読み出すことが要求されたデーターを含む応答を得ることができる。このような応答は、ステップ３２５において受信することができる。ステップ３３０において、このような応答をネットワーク通信に変換することができ、次いでこのネットワーク通信を、ステップ３１０において受信されたネットワーク通信を送った計算デバイスのリモート・メモリー・インターフェースに宛てることができる。既に示したように、ステップ３３０における応答のネットワーク通信への変換は、他の計算デバイスとの通信が確立されたときに経由したネットワークによって履行されるネットワーク・プロトコルにしたがって、応答をパケット化することを含むことができ、例えば、しかるべきパケット・ヘッダを適用し、データーを最大送信単位に相応するサイズに分割し、しかるべきアドレシング情報を提供し、更に他の同様のアクションを含む。ネットワーク通信は、一旦生成されると、ステップ３３５において、ステップ３１０においてネットワーク通信を送信した計算デバイスのリモート・メモリー・インターフェースに送信することができる。次いで、ステップ３４０において、関連する処理を終了することができる。
【００４５】
[0050]  図３ｂに移り、類似する１組のステップがステップ３５０において開始することができ、ローカル・アドレス可能メモリー名前空間を対象とするロード・コマンドまたは格納コマンドのようなメモリー中心コマンドを、ローカル・プロセスから受信する。この要求は、ローカル・アドレス可能メモリー名前空間における１つ以上のアドレス、または他の同様の位置識別子を指定することができる。したがって、初期の事項として、一実施形態では、ステップ３５５において、ステップ３５０のメモリー中心コマンドによって指定されたアドレスが、先に詳細に説明したような、リモート・メモリー・インターフェースによってサポートされるアドレス範囲内に入るか否かについてチェックを行うことができる。ステップ３５５において、メモリー中心コマンドが、ローカルにインストールされたメモリーによってサポートされるローカル・アドレス可能メモリー名前空間のアドレス範囲内にあるアドレスを対象とする場合、リモート・メモリー共有に関連する処理は、流れ図３０２において示すように、ステップ３８５において終了することができる。しかしながら、逆に、ステップ３５５において、メモリー中心コマンドが、リモート・メモリー・インターフェースによってサポートされるローカル・アドレス可能メモリー名前空間のアドレス範囲内にあるアドレスを対象とすると判断された場合、処理はステップ３６０に進む。
【００４６】
[0051]  ステップ３６０において、ステップ３５０において受けた要求の対象であったアドレスを、１つ以上のリモート計算デバイスの識別に変換することができる。このリモート計算デバイスのメモリーは、要求の対象であるデーターを格納するために使用される。更に特定すれば、一実施形態では、リモート・メモリー・インターフェースが格納コマンドを受信し、先に詳細に説明したようにしてというように、リモート計算デバイスのメモリーにデーターを格納する毎に、リモート・メモリー・インターフェースは、格納コマンドの対象となった、ローカル・アドレス可能メモリー名前空間のアドレスと、このようなデーターが最終的にメモリーに格納されるリモート計算デバイスの、ネットワーク・アドレスのような、識別子との間の関連を記録することができる。その後、ロード・コマンドが、ローカルに実行するプロセスから、ローカル・アドレス可能メモリー名前空間における同じアドレスに対して発行されると、リモート・メモリー・インターフェースは、以前に記録された関連を参照し、そのデーターを得るためにはどのリモート計算デバイスと通信すればよいか判定することができる。加えて、一実施形態では、ローカル・アドレス可能メモリー名前空間における特定のアドレスに宛てられた格納コマンドを最初に受信したとき、リモート・メモリー・インターフェースは、メモリー共有コントローラーによってリモート・メモリー・インターフェースに対して識別することができるリモート計算デバイスの共有メモリー内に、またはメモリー共有コントローラーによって識別された計算デバイスの中からリモート・メモリー・インターフェースによって選択することができる、リモート計算デバイスの共有メモリー内に、このようなデーターを格納しようとすることができる。一旦ステップ３６０においてリモート計算デバイスが識別されたなら、処理はステップ３６５に進むことができる。ステップ３６５において、ステップ３５０において受信した要求を、ステップ３６０において識別された計算デバイスの識別されたリモート・メモリー・インターフェースにアドレスすることができる、ネットワーク通信に変換することができる。既に示したように、このような変換は、ローカル計算デバイスと、メモリーを含むリモート計算デバイスとの間で通信が搬送されるネットワークによって利用されるプロトコルにしたがって要求をパケット化すること、およびそれ以外でデーター・ストリームを生成することを含むことができる。
【００４７】
[0052]  ステップ３６５における送信に応答して、ステップ３７０において、ローカル計算デバイス上のリモート・メモリー・インターフェースに宛てられた応答ネットワーク通信を受信することができる。ステップ３７５において、これらのネットワーク通信を、先に詳細に説明したようにしてというように、ステップ３５０において受信した要求に対する応答に組み立てることができる。ステップ３８０において、このような応答を、ステップ３５０において受けられた要求を生成した実行中のプロセスに供給することができる。次いで、関連する処理はステップ３８５において終了することができる。
【００４８】
[0053]  図４に移ると、計算デバイス例が示されており、これは、以上で詳細に説明したメカニズムの一部を実行することができるような汎用計算デバイス、および以上で説明したスイッチのような、特殊目的計算デバイスの双方を含むことができる。計算デバイス例４００は、１つ以上の中央処理ユニット（ＣＰＵ）４２０、システム・メモリー４３０、およびシステム・メモリーから処理ユニット４２０までを含む種々のシステム・コンポーネントを結合するシステム・バス４２１を含むことができるが、これらに限定されるのではない。システム・バス４２１は、メモリー・バスまたはメモリー・コントローラー、周辺バス、および種々のバス・アーキテクチャーの内任意のものを使用するローカル・バスを含む、様々なタイプのバス構造の内任意のものでよい。具体的な物理的実施態様に依存して、ＣＰＵ４２０、システム・メモリー４３０、および計算デバイス４００の他のコンポーネントの内１つ以上を、単体チップ上のように、物理的に同じ場所に配置することができる。このような場合、システム・バス４２１の一部または全部は、単体チップ構造内部の通信経路と全く同様にすることができ、図４におけるその図示は、例示を目的とした表記上の都合に他ならない。
【００４９】
[0054]  また、計算デバイス４００は、通例、コンピューター読み取り可能媒体も含み、コンピューター読み取り可能媒体は、計算デバイス４００によってアクセスすることができる任意の入手可能な媒体を含むことができる。一例として、そして限定ではなく、コンピューター読み取り可能媒体は、コンピューター記憶媒体および通信媒体を含むことができる。コンピューター記憶媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、または他のデーターというような情報の格納のためのいずれかの方法または技術で実現される媒体を含む。コンピューター記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、ディジタル・バーサタイル・ディスク（ＤＶＤ）または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたは他の磁気記憶デバイス、または所望の情報を格納するために使用することができそして計算デバイス４００によってアクセスすることができる他のあらゆる媒体を含む。しかしながら、コンピューター記憶媒体は、通信媒体を含まない。通信媒体は、通例、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、または他のデーターを、搬送波のような変調データー信号または他の移送メカニズムに具体化し、任意の情報配信媒体を含む。一例として、そして限定ではなく、通信媒体は、有線ネットワークまたは直接有線接続というような有線媒体と、音響、ＲＦ、赤外線、および他のワイヤレス媒体というようなワイヤレス媒体とを含む。以上の内任意のものの組み合わせも、コンピューター読み取り可能媒体の範囲に含まれてしかるべきである。
【００５０】
[0055]  システム・メモリー５３０は、リード・オンリー・メモリー（ＲＯＭ）４３１およびランダム・アクセス・メモリー（ＲＡＭ）４３２のような、揮発性および／または不揮発性メモリーの形態としたコンピューター記憶媒体を含む。基本入力／出力システム４３３（ＢＩＯＳ）は、起動中におけるように、コンピューター４００内部にあるエレメント間で情報を転送するのに役立つ基本的なルーチンを含み、通例ＲＯＭ４３１に格納される。ＲＡＭ４３２は、通例、処理ユニット４２０によって直ちにアクセス可能なデーターおよび／または現在処理ユニット４２０によって処理されているデーターおよび／またはプログラム・モジュールを含む。一例として、そして限定ではなく、図４は、オペレーティング・システム４３４、他のプログラム・モジュール４３５、およびプログラム・データー４３６を示す。
【００５１】
[0056]  通信媒体を使用するとき、計算デバイス４００は、１つ以上のリモート・コンピューターへの論理接続を介して、ネットワーク接続環境において動作することができる。図４に示す論理接続は、ネットワーク１９０への汎用ネットワーク接続４７１であり、これはローカル・エリア・ネットワーク（ＬＡＮ）、インターネットのようなワイド・エリア・ネットワーク（ＷＡＮ）、またはその他のネットワークとすることができる。計算デバイス４００は、ネットワーク・インターフェースまたはアダプター４７０を介して汎用ネットワーク接続４７１に接続され、一方、ネットワーク・インターフェースまたはアダプター４７０はシステム・バス４２１に接続される。ネットワーク接続環境では、計算デバイス４００またはその一部または周辺部に関して図示したプログラム・モジュールは、汎用ネットワーク接続４７１を介して計算デバイス４００に通信可能に結合された１つ以上の他の計算デバイスのメモリーに格納することもできる。尚、図示したネットワーク接続は一例であり、計算デバイス間に通信リンクを確立する他の手段を使用してもよいことは認められよう。
【００５２】
[0057]  また、計算デバイス５００は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピューター記憶媒体も含むことができる。一例としてに過ぎないが、図４は、非リムーバブル、不揮発性媒体に対して読み取りおよび書き込みを行うハード・ディスク・ドライブ４４１を示す。この計算デバイス例と共に使用することができる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピューター記憶媒体には、磁気テープ・カセット、フラッシュ・メモリー・カード、ディジタル・バーサタイル・ディスク、ディジタル・ビデオ・テープ、ソリッド・ステートＲＡＭ、ソリッド・ステートＲＯＭ等が含まれる。ハード・ディスク・ドライブ４４１は、通例、インターフェース４４０のような非リムーバブル・メモリー・インターフェースを介して、システム・バス４２１に接続される。
【００５３】
[0058]  以上で論じ図４に示すこれらのドライブおよびそれに関連するコンピューター記憶媒体は、計算デバイス４００のためのコンピューター読み取り可能命令、データー構造、プログラム・モジュール、および他のデーターの格納を行う。図４では、例えば、ハード・ディスク・ドライブ４４１は、オペレーティング・システム４４４、他のプログラム・モジュール４４５、およびプログラム・データー４４６を格納することが示される。尚、これらのコンポーネントは、オペレーティング・システム４３４、他のプログラム・モジュール４３５、およびプログラム・データー４３６と同一であること、または異なることもできることを注記しておく。オペレーティング・システム４４４、他のプログラム・モジュール４４５、およびプログラム・データー４４６は、ここでは、少なくともこれらが異なるコピーであることを示すために、異なる番号が与えられる。
【００５４】
[0059]  以上の説明から分かるように、多数の物理的に別個の計算デバイス間でメモリーを共有するメカニズムを紹介した。本明細書において説明した主題には多くの可能な変形があることを考慮して、以下の請求項およびその均等物の範囲に該当し得る全ての実施形態を本発明として、特許請求する。
【図１】
2016513846.tif 000003
【図２】
2016513846.tif 000004
【図３ａ】
2016513846.tif 000005
【図３ｂ】
2016513846.tif 000006
【図４】
2016513846.tif 000007
【国際調査報告】
2016513846.tif 000008
2016513846.tif 000009