(57)【要約】【課題】  複数のネットワークインタフェースを有する同一のデバイス中で、第１のネットワークインタフェースによって生成された識別子をそのインタフェースが送信した後に第１のネットワークインタフェースと少なくとも第２のネットワークインタフェース間でコントロールを転送する方法を提供すること。【解決手段】  この方法では、第２のデバイスからの識別子の受信を知らせるメッセージを受信することを含み、第１のネットワークインタフェースによって生成された識別子のリストと、それら識別子に関連付けられた、複数ネットワークインタフェースを有するデバイスのメモリ中の記憶域とをプログラムコンポーネントに供給するように第１のネットワークインタフェースに問い合わせる。第２のデバイスによって受信された識別子がリストにある場合、この方法は、その識別子に関連付けられた記憶域を第２のネットワークインタフェースに送信する。【選択図】  図５
2005044353.tif 000002
【特許請求の範囲】
【請求項１】
複数のネットワークインタフェースを備えるデバイス中で、第１のネットワークインタフェースが、前記第１のネットワークインタフェースによって生成され、前記複数のネットワークインタフェースを備えるデバイス中の記憶域に関連付けられた識別子を第２のデバイスに送信した後に前記第１のネットワークインタフェースと少なくとも第２のネットワークインタフェースとの間でコントロールを転送する方法であって、前記識別子および関連付けられたデータフィールドは前記第２のネットワークインタフェースによって受信されることが可能であり、前記方法は、
前記第２のデバイスからの前記識別子の受信を知らせる、前記第２のネットワークインタフェースからプログラムコンポーネントへのメッセージを受信すること、
前記第１のネットワークインタフェースによって生成された識別子のリストと、該識別子に関連付けられた、前記複数のネットワークインタフェースを備えるデバイスのメモリ中の記憶域とを前記プログラムコンポーネントに供給するように前記第１のネットワークインタフェースに問い合わせること、および
前記識別子に関連付けられた記憶域を前記第２のネットワークインタフェースに送信することであって、前記第２のネットワークインタフェースは、前記関連付けられたデータフィールドを前記識別子に関連付けられた記憶域に送信することができること
を備えることを特徴とする方法。
【請求項２】
前記識別子は、前記識別子に付加されたビットフィールドと、前記第２のデバイスから受信される関連付けられたデータフィールドとの制御下で無効にされることを特徴とする請求項１に記載の方法。
【請求項３】
前記識別子が無効にされた場合、前記関連付けられたデータフィールドを破棄することを特徴とする請求項２に記載の方法。
【請求項４】
前記記憶域はランダムアクセスメモリであることを特徴とする請求項１に記載の方法。
【請求項５】
前記プログラムコンポーネントはコンピュータのオペレーティングシステムであることを特徴とする請求項１に記載の方法。
【請求項６】
前記第１のネットワークインタフェースおよび前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルの下で動作することを特徴とする請求項１に記載の方法。
【請求項７】
前記第１のネットワークインタフェースおよび前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルｏｖｅｒＴＣＰ／ＩＰプロトコルの下で動作することを特徴とする請求項１に記載の方法。
【請求項８】
第１のネットワークインタフェースと第２のネットワークインタフェースを含むホストコンピュータ中で前記第１のネットワークインタフェースと少なくとも前記第２のネットワークインタフェースとの間でコントロールを転送する方法であって、
前記第１のネットワークインタフェースによって生成され、前記ホストコンピュータ中の記憶域に関連付けられた識別子をリモートコンピュータから受信すること、
前記識別子の受信を知らせるメッセージをプログラムコンポーネントに送信することであって、前記プログラムコンポーネントは、前記第１のネットワークインタフェースによって生成された識別子のリストと、前記識別子に関連付けられた前記ホストコンピュータ中の記憶域とを前記第１のネットワークインタフェースに問い合わせるように構成されること、
前記識別子のリストが前記リモートコンピュータからの識別子を含む場合、前記識別子に関連付けられた記憶域を受信すること、および
前記識別子のリストが前記リモートコンピュータからの識別子を含まない場合、前記リモートコンピュータからの識別子を無効にすること
を備えることを特徴とする方法。
【請求項９】
前記識別子は、前記識別子に付加されたビットフィールドと、前記リモートコンピュータから受信される関連付けられたデータフィールドとの制御下で無効にされることを特徴とする請求項８に記載の方法。
【請求項１０】
前記識別子が無効にされた場合、前記関連付けられたデータフィールドを破棄することを特徴とする請求項９に記載の方法。
【請求項１１】
前記記憶域はランダムアクセスメモリであることを特徴とする請求項８に記載の方法。
【請求項１２】
前記プログラムコンポーネントはコンピュータのオペレーティングシステムであることを特徴とする請求項８に記載の方法。
【請求項１３】
前記第１のネットワークインタフェースおよび前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルの下で動作することを特徴とする請求項８に記載の方法。
【請求項１４】
前記第１のネットワークインタフェースと前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルｏｖｅｒＴＣＰ／ＩＰプロトコルの下で動作することを特徴とする請求項８に記載の方法。
【請求項１５】
複数のネットワークインタフェースを備えるデバイス中で、第１のネットワークインタフェースが、前記第１のネットワークインタフェースによって生成され、前記複数のネットワークインタフェースを備えるデバイス中の記憶域に関連付けられた識別子を第２のデバイスに送信した後に前記第１のネットワークインタフェースと少なくとも前記第２のネットワークインタフェースとの間でコントロールを転送する動作を行う命令が格納されたコンピュータ可読媒体であって、前記識別子および関連付けられたデータフィールドは前記第２のネットワークインタフェースによって受信されることが可能であり、前記動作は、
前記第２のデバイスからの前記識別子の受信を知らせる、前記第２のネットワークインタフェースからプログラムコンポーネントへのメッセージを受信する動作と、
前記第１のネットワークインタフェースによって生成された識別子のリストと、該識別子に関連付けられた、前記複数のネットワークインタフェースを備えるデバイスのメモリ中の記憶域とを前記プログラムコンポーネントに供給するように前記第１のネットワークインタフェースに問い合わせる動作と、
前記識別子に関連付けられた記憶域を前記第２のネットワークインタフェースに送信する動作であって、前記第２のネットワークインタフェースは、前記関連付けられたデータフィールドを前記識別子に関連付けられた記憶域に送信することができる動作と
を備えることを特徴とするコンピュータ可読媒体。
【請求項１６】
前記識別子は、前記識別子に付加されたビットフィールドと、前記第２のデバイスから受信される関連付けられたデータフィールドとの制御下で無効にされることを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
前記識別子が無効にされた場合、前記関連付けられたデータフィールドを破棄することを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１８】
前記記憶域はランダムアクセスメモリであることを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１９】
前記プログラムコンポーネントはコンピュータのオペレーティングシステムであることを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項２０】
前記第１のネットワークインタフェースおよび前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルの下で動作することを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項２１】
前記第１のネットワークインタフェースおよび前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルｏｖｅｒＴＣＰ／ＩＰプロトコルの下で動作することを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項２２】
第１のネットワークインタフェースと第２のネットワークインタフェースを含むホストコンピュータ中で前記第１のネットワークインタフェースと少なくとも前記第２のネットワークインタフェースとの間でコントロールを転送する動作を行う命令が格納されたコンピュータ可読媒体であって、前記動作は、
前記第１のネットワークインタフェースによって生成され、前記ホストコンピュータ中の記憶域に関連付けられた識別子をリモートコンピュータから受信する動作と、
前記識別子の受信を知らせるメッセージをプログラムコンポーネントに送信する動作であって、前記プログラムコンポーネントは、前記第１のネットワークインタフェースによって生成された識別子のリストと、前記識別子に関連付けられた前記ホストコンピュータ中の記憶域とを前記第１のネットワークインタフェースに問い合わせるように構成される動作と、
前記識別子のリストが前記リモートコンピュータからの識別子を含む場合、前記識別子に関連付けられた記憶域を受け取る動作と、
前記識別子のリストが前記リモートコンピュータからの識別子を含まない場合、前記リモートコンピュータからの識別子を無効にする動作と
を備えることを特徴とするコンピュータ可読媒体。
【請求項２３】
前記識別子は、前記識別子に付加されたビットフィールドと、前記第２のデバイスから受信される関連付けられたデータフィールドとの制御下で無効にされることを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記識別子が無効にされた場合、前記関連付けられたデータフィールドを破棄することを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記記憶域はランダムアクセスメモリであることを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２６】
前記プログラムコンポーネントはコンピュータのオペレーティングシステムであることを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２７】
前記第１のネットワークインタフェースおよび前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルの下で動作することを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２８】
前記第１のネットワークインタフェースと前記第２のネットワークインタフェースは、リモートダイレクトメモリアクセス（ＲＤＭＡ）プロトコルｏｖｅｒＴＣＰ／ＩＰプロトコルの下で動作することを特徴とする請求項２２に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にはネットワーキングに関し、より詳細には、ネットワーク機器のＣＰＵリソースをより効率的に使用することに関する。
【背景技術】
【０００２】
ネットワークコンピューティングはすっかり普及したと言ってよい。今日使用されるコンピュータの多くは、複数のネットワークインタフェースコントローラ、すなわちＮＩＣを備えている。こうしたＮＩＣで可能なデータ転送速度は、そのデータを処理するために利用できるＣＰＵの処理能力とメモリシステムの帯域幅とを上回る速さで増大している。その結果、この処理が次第にＮＩＣカード自体に移されるようになっている。この解決法はある程度は有効であるが、ネットワーク処理の負担をＣＰＵおよびメモリバスからＮＩＣに移すことをさらに支援するプロトコルを開発するためにさらに標準の取り組みが進められている。
【０００３】
そのようなプロトコルの１つがリモートダイレクトメモリアクセス、すなわちＲＤＭＡである。ＲＤＭＡは、ＮＩＣカードがコンピュータシステムのメインメモリ中の所定の記憶域にデータパケットを置くことを可能にするプロトコルである。標準的なネットワークプロトコルスタックでは、ＲＤＭＡソフトウェアは、トランスポート制御プロトコル（ＴＣＰ）ソフトウェアのすぐ上位に存在する。これにより、最小限のＣＰＵの介入でデータパケットを直接システムメモリに置くことが可能になる。
【０００４】
ＲＤＭＡプロトコルを使用して、第１のマシンのメインシステムメモリの一区画を遠隔の第２のマシンが直接利用できるようにする。このプロトコルは、第１のマシンのメモリをＳＴａｇと称されるハンドルに関連付ける。第１のマシンのＣＰＵから可能な限り多くの処理を軽減するために、第１のマシンのＮＩＣがＳＴａｇを生成する。次いでそのＳＴａｇが第２のマシンに送信され、第２のマシンは、関連付けられたデータとともにＳＴａｇを送り返すことにより書き込みを行うことができる。このデータおよび関連付けられたＳＴａｇを受信すると、第１のマシンのＮＩＣは、ＳＴａｇを読み取り、ＤＭＡ転送を使用してそのデータをＳＴａｇに関連付けられたメモリに移す。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
インターネットを通じて移動するデータは、１つのマシンから別のマシンまでいくつかの異なる経路をとることができる。このインターネット中の経路は、複数のサーバへの負荷が変化すると、またはサーバに一斉に障害が発生すると変化する。この経路の変化により、複数のＮＩＣを有するマシンがＲＤＭＡ転送を行う際に問題が生じる可能性がある。データがインターネット中でとる経路が変化すると、第１のマシンから第２のマシンまで選択された経路が、それら２つのマシン間の経路をマシン１のＮＩＣ１からＮＩＣ２に変える形で変化する。ＮＩＣがＳＴａｇを生成することを思い出されたい。したがって、ＮＩＣ２は、ＮＩＣ１によって生成されたＳＴａｇについての知識を持たないことになる。Ｓｔａｇの生成時にはマシン１からマシン２への経路がＮＩＣ１を使用しており、その後マシン２がマシン１にデータを送信する前にＮＩＣ２を使用する経路に変化した場合、マシン２は、ＮＩＣ２にとって未知のＳＴａｇとともにデータを返すことになる。
【０００６】
同一マシン中の１つのＮＩＣによって生成され、別のＮＩＣによって受信されたＳＴａｇに対処する方法が必要とされる。
【課題を解決するための手段】
【０００７】
諸実施形態は、あるＳＴａｇを生成しなかったネットワークインタフェースにそのＳＴａｇが到着する問題を克服する方法を対象とする。この方法は、一意のＳＴａｇを有する所与のコンピュータのネットワークインタフェースに依拠する。これは、オペレーティングシステムによって確実にされることができる。所与のコンピュータのＳＴａｇは一意なので、同じコンピュータ上の別のネットワークインタフェースによって生成されたＳＴａｇを受信するネットワークインタフェースは、そのＳＴａｇが別のネットワークインタフェースによって生成されたことを検出できるようにされる。そのようなＳＴａｇが検出されると、そのＳＴａｇを受信するネットワークインタフェースは、ＯＳカーネルに常駐するＲＤＭＡプログラムコンポーネントである、より高位レベルのソフトウェアにＳＴａｇを渡す。ＲＤＭＡプログラムコンポーネントは、どのネットワークインタフェースがＳＴａｇを発信したのかを識別し、そのネットワークインタフェースによって生成されたすべてのＳＴａｇと、それらのＳＴａｇに関連付けられた割り当てられたメモリのアドレスとを関連付けられたネットワークインタフェースに問い合わせることができる。そしてそのアドレスが、未知のＳＴａｇを受信したネットワークインタフェースに渡される。このメモリアドレスを用いて、ネットワークインタフェースはデータ転送を完了することができる。
【０００８】
より詳細には、一実施形態は、複数のネットワークインタフェースを有するデバイス中で第１のネットワークインタフェースが第１のネットワークインタフェースによって生成された識別子を第２のデバイスに送信した後に、第１のネットワークインタフェースと少なくとも第２のネットワークインタフェースとの間でコントロールを転送する方法を対象とする。この識別子は、複数のネットワークインタフェースを有するデバイス中の記憶域に関連付けることができ、識別子とそれに関連付けられたデータフィールドは、第２のネットワークインタフェースが受信することができる。この方法はさらに、第２のデバイスからの識別子の受信を知らせる第２のネットワークインタフェースからプログラムコンポーネントへのメッセージを受信することを含む。次いで、この方法では、第１のネットワークインタフェースによって生成された識別子のリストと、それら識別子に関連付けられた、複数のネットワークインタフェースを有するデバイスのメモリ中の記憶域とをそのプログラムコンポーネントに供給するように第１のネットワークインタフェースに問い合わせる。第２のデバイスによって受信された識別子がリストにある場合、この方法は、その識別子に関連付けられた記憶域を第２のネットワークインタフェースに送信する。したがって、第２のネットワークインタフェースは、識別子に関連付けられた記憶域に、関連付けられたデータフィールドを送信することができるようになる。
【０００９】
別の実施形態は、第１のネットワークインタフェースと第２のネットワークインタフェースを含むホストコンピュータ中で、第１のネットワークインタフェースと少なくとも第２のネットワークインタフェースとの間でコントロールを転送する方法を対象とする。この方法は、第１のネットワークインタフェースによって生成され、ホストコンピュータ中の記憶域に関連付けられた識別子をリモートコンピュータから受信することを含む。次いで、この方法では、プログラムコンポーネントにメッセージを送信して識別子の受信を知らせ、プログラムコンポーネントは、第１のネットワークインタフェースによって生成された識別子のリストと、それら識別子に関連付けられたホストコンピュータ中の記憶域とを第１のネットワークインタフェースに問い合わせるように構成される。識別子のリストにリモートコンピュータからの識別子が含まれる場合、この方法は、その識別子に関連付けられた記憶域を受け取る。識別子のリストがリモートコンピュータからの識別子を含まない場合、この方法は、リモートコンピュータからの識別子を無効にする。
【００１０】
本発明のこの他の特徴および利点は、添付図面を参照して進める以下の例示的実施形態の詳細な説明から明らかになろう。
【発明を実施するための最良の形態】
【００１１】
添付の特許請求の範囲に本発明の特徴を詳細に記載するが、本発明とその目的および利点は、添付図面と併せて以下の詳細な説明を読むことにより最もよく理解することができる。
【００１２】
図面では同様の要素は同様の参照符号で参照し、本発明は、適切なコンピューティング環境で実施されるものとして説明する。これは必須ではないが、本発明は、パーソナルコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令とそれに関連する電子回路に概ね即して説明する。一般に、プログラムモジュールには、特定のタスクを行うか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらに、当業者には、本発明は、ハンドヘルド機器、マルチプロセッサシステム、マイクロプロセッサを利用した、あるいはプログラム可能な家庭電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成で実施してもよいことが認識されよう。本発明は、通信ネットワークを通じてリンクされた遠隔の処理機器によってタスクが行われる分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモート両方のメモリ記憶装置に置くことができる。
【００１３】
図１に、本発明を実施することが可能な適切なコンピューティングシステム環境１００の一例を示す。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能性の範囲について何らの制限を示唆するものではない。また、コンピューティング環境１００は、例示的動作環境であるコンピューティング環境１００に図示する構成要素の１つまたは組み合わせに関する依存性または必要性を有するものとも解釈すべきでない。
【００１４】
本発明は、他の多数の汎用または特殊目的のコンピューティングシステム環境または構成で動作することができる。本発明に使用するのに適する可能性がある、よく知られるコンピューティングシステム、環境、および／または構成の例には、これらに限定しないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド機器またはラップトップ機、タブレット機、マルチプロセッサシステム、マイクロプロセッサを利用したシステム、セットトップボックス、プログラム可能な家庭電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは機器を含む分散コンピューティング環境などがある。
【００１５】
本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令に概ね即して説明することができる。一般に、プログラムモジュールには、特定タスクを行うか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明は、通信ネットワークを通じてリンクされた遠隔の処理機器によってタスクを行う分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよび／またはリモートのコンピュータ記憶媒体に置くことができる。
【００１６】
図１を参照すると、最も基本的な構成で、コンピューティングデバイス１００は、少なくとも処理装置１０２とメモリ１０４を含む。コンピューティングデバイスの正確な構成とタイプに応じて、メモリ１０４は、揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリなど）、またはこれら２種の何らかの組み合わせとすることができる。この基本的構成を図１では点線１０６で示す。また、デバイス１００は、追加的な特性／機能を備えることもできる。例えば、デバイス１００は、これらに限定しないが磁気または光学的なディスクまたはテープを含む追加的ストレージ（取り外し可能および／または取り外し不能）も含むことができる。このような追加的ストレージを図１では取り外し可能ストレージ１０８および取り外し不能ストレージ１１０で表す。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を記憶するための任意の方法または技術として実装された揮発性および不揮発性、取り外し可能および取り外し不能の媒体が含まれる。メモリ１０４、取り外し可能ストレージ１０８、および取り外し不能ストレージ１１０は、すべてコンピュータ記憶媒体の例である。コンピュータ記憶媒体には、これらに限定しないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気記憶装置、あるいは所望の情報の記憶に使用することができ、デバイス１００によるアクセスが可能な他の媒体が含まれる。そのようなコンピュータ記憶媒体をいずれもデバイス１００の一部とすることができる。
【００１７】
デバイス１００は、デバイスが他のデバイスと通信することを可能にする１つまたは複数の通信接続１１２も含むことができる。通信接続１１２は、通信媒体の一例である。通信媒体は通例、コンピュータ可読命令、データ構造、プログラムモジュール、あるいはその他のデータを、搬送波などの変調データ信号またはその他のトランスポート機構として実施し、任意の情報伝達媒体を含む。用語「変調データ信号」とは、信号中に情報を符号化する形でその特性の１つまたは複数を設定または変化させた信号を意味する。これらに限定しないが、通信媒体の例には、有線ネットワークや直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、およびその他の無線媒体などの無線媒体が含まれる。上記のように、本明細書で使用する用語「コンピュータ可読媒体」は、記憶媒体と通信媒体の両方を含む。
【００１８】
デバイス１００は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置などの１つまたは複数の入力装置１１４も有することができる。ディスプレイ、スピーカ、プリンタなどの１つまたは複数の出力装置１１６も含めることができる。これらのデバイスはいずれも当技術分野でよく知られており、ここでさらに詳細に説明する必要はない。
【００１９】
リモートダイレクトメモリアクセスは、データネットワーク中でより効率的にデータを移送するためのプロトコルである。このプロトコルは、業界コンソーシアムによって採用され、２００２年１０月にコンソーシアムによって承認された。ＲＤＭＡプロトコルは、広く普及しているＴＣＰ／ＩＰプロトコルの最上位で使用することができる。ＲＤＭＡは、ホストプロセッサの介入の必要なしにシステムメモリに直接データを転送することを可能にし、それにより、ホストプロセッサにかかるデータ転送の負担を大幅に軽減することができる。
【００２０】
リモートダイレクトメモリアクセス（ＲＤＭＡ）は、業界コンソーシアムによって承認されたプロトコルである。このプロトコルは、ＩＥＴＦ標準としての承認を求めてＩＥＴＦ（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）に提出されている。ＲＤＭＡの目的は、ネットワークトラフィックに対処するために必要とされるＣＰＵへの負荷を軽減することである。ＣＰＵへの負荷の軽減が必要となったのは、ネットワークのデータ転送速度が、利用可能なホストＣＰＵの処理能力と利用可能なメモリ帯域幅とを上回る速度で増大したためである。例えば、わずか１０年前には１０Ｍｂ／秒のイーサネット（登録商標）が普通であったのに対し、現在では１０Ｇｂ／秒のイーサネット（登録商標）が業界標準になっている。
【００２１】
ＲＤＭＡは、ＣＰＵによる介入を最小に抑え、利用可能なメモリ帯域幅の需要を可能な限り抑えて、１つのマシンが別のマシンのメモリに直接データを置くことを可能にする。ＲＤＭＡは、ＲＤＭＡｏｖｅｒＴＣＰ／ＩＰと称される特定のバージョンで標準的なＴＣＰ／ＩＰネットワークを通じて透過に機能するように設計されている。これは、送信されるデータにＲＤＭＡ固有の制御フィールドを埋めこんでＲＤＭＡパケットを形成し、そのＲＤＭＡパケットをＴＣＰ／ＩＰデータグラムに埋め込むことによって達成される。したがって、ネットワークにとってＴＣＰ／ＩＰパケットは他のＴＣＰ／ＩＰパケットと同じように見え、ＲＤＭＡヘッダのないＴＣＰ／ＩＰパケットと全く同じ形で処理される。
【００２２】
ネットワークインタフェースコントローラ（ＮＩＣ）の進歩により、ＲＤＭＡが有用になることが可能となった。最初のそのような進歩は、ＴＣＰ／ＩＰオフロードエンジン（ＴＯＥ）である。ＴＯＥ技術は、ＴＣＰ／ＩＰの処理の多くをＮＩＣに移し、ホストＣＰＵからこの負荷の多くを取り除く。ただし、ＴＯＥはそれ自体では着信データのゼロコピーが常に可能である訳ではなく、すなわち、しばしば、ＴＯＥ  ＮＩＣがＤＭＡを使用して着信データをメモリに転送する場合でも、そのデータはなおネットワークレイヤソフトウェアでコピーする必要がある。この追加的なコピーの必要性は、ＮＩＣおよびＮＩＣとのインタフェースをとるソフトウェアが必要とするアプリケーションプログラマインタフェース（ＡＰＩ）に大きく依存する。ＲＤＭＡは、このコピーの必要性を軽減または除去し、したがってＣＰＵの介入の必要性を低減するように設計されている。
【００２３】
ＲＤＭＡは、特定のデータ転送を開始する前にその転送のための記憶域を割り当てることによってゼロコピー動作を実現する。この記憶域は、ＳＴａｇと称する識別子に関連付けられる。ＳＴａｇは、ＲＤＭＡヘッダの一部として送信され、リモートマシンに送信される。ＲＤＭＡｏｖｅｒＴＣＰ／ＩＰが使用される場合は、このヘッダはＴＣＰ／ＩＰパケットに埋め込まれる。リモートマシンは、データおよび同じＳＴａｇを別のＴＣＰ／ＩＰパケットに埋め込んで返す。送信元マシンのＲＤＭＡおよびＴＯＥに対応するＮＩＣカードは、そのパケットのＴＣＰ／ＩＰ部分を処理し、データ中にＳＴａｇが埋め込まれていることを認識する。次いで、ＮＩＣカードはこのＳＴａｇを調べ、関連付けられた記憶域を見つけ、ＤＭＡを使用してその記憶域に直接データを置く。ＲＤＭＡと非ＲＤＭＡ転送との違いは、ＲＤＭＡのない単独のＴＣＰ／ＩＰパケットは、関連付けられた記憶域を持たず、一般には、ソフトウェアに渡してデータの最終的な宛先を判断しなければならない点である。この宛先が判定されると、ソフトウェアは、ＣＰＵリソースを使用して宛先のアプリケーションに対応するバッファにデータをコピーしなければならない。ＲＤＭＡではこの宛先はデータが到着する前に判定することができ、したがってコピーの必要がない。
【００２４】
セキュリティは、ＲＤＭＡコンソーシアムによって取り組まれた重要な課題である。ＲＤＭＡを使用すると、リモートコンピュータがホストコンピュータのメモリに直接コマンドを置くことができる。このセキュリティの問題に対処するために使用される方法の１つは、転送が完了した後にＳＴａｇを無効化できるようにすることである。このために、ＲＤＭＡヘッダは、ＳＴａｇを無効にするビットを含んでいる。受信パケットにこのビットが設定されている場合は、アクティブなＳＴａｇのリストからそのＳＴａｇが削除され、そのＳＴａｇとともに受信される以降のＲＤＭＡパケットはいずれも破棄される。ＳＴａｇ自体は３２ビット数であり、ＳＴａｇを直ちに無効にすれば、アクティブなＳＴａｇを推測しようとする悪意ある試みの機会は少なくなる。ＲＤＭＡ標準では所与の回数の転送が行われた後にＳＴａｇを無効にすることは必須としていないが、セキュリティ上の理由から、ＲＤＭＡを使用する大半のアプリケーションは、データ転送が完了するたびに所与のＳＴａｇを無効にする。
【００２５】
簡略化したＲＤＭＡの読み取りサイクルのフローチャート２００を図２に示す。この開示の恩恵を受ける当業者は、図に示す簡略化したＲＤＭＡの読み取りサイクルは、以下の説明のための例示であることを理解されよう。フローチャート２００では、ネットワークを通じて転送されるデータはＴＣＰ／ＩＰプロトコルを使用するものと想定する。当業者には、他の伝送プロトコルが可能であることが理解されよう。初めに、ブロック２０１でＳＴａｇと称する識別子を生成する。次いでブロック２０３で、ＳＴａｇをデータストレージ、通例はメインシステムメモリに関連付ける。ブロック２０１と２０３をまとめてバインディングと称する。次いで、ブロック２０５で、ＴＣＰ／ＩＰデータグラム中にカプセル化されたＲＤＭＡパケットのＳＴａｇと読み取り要求とを、リモートマシンからデータを取得する要求としてリモートマシンに送信する。ブロック２０７で、リモートマシンでＳＴａｇを必要なデータフィールドと連結する。次いで、ＳＴａｇとデータフィールドを連結したものとが送信元マシンに返される。受信すると、ブロック２０９でＴＣＰ／ＩＰデータグラムおよびＲＤＭＡパケットからＳＴａｇを取り出し、関連付けられた記憶域を確定する。記憶域が分かると、ブロック２１１でデータをその記憶域に転送し、データは、そのデータ転送を開始したアプリケーションから利用できるようになる。
【００２６】
図３は、典型的なＲＤＭＡ読み取りの転送を実施することが可能なネットワークコンピュータシステム３００のブロック図である。コンピュータ３０１がホストコンピュータであり、このコンピュータを使用してＲＤＭＡ転送を例示する。コンピュータ３０１は、これに限定しないが通例はランダムアクセスメモリ（ＲＡＭ）であるメモリシステム３０２、アプリケーションプログラム３０３、オペレーティングシステム（ＯＳ）３０５、およびＮＩＣ３０９からなる。これらの構成要素は、一般的なコンピュータのすべての構成要素を表すものではない。これらの構成要素は、ＲＤＭＡ転送を実施するのに必要な構成要素である。さらに、メモリシステム３０２は、割り当てられたメモリブロック、すなわちメモリ割り当て３１１を含む。この説明ではこのデータストレージをメモリと称し、これは本コンピュータシステムでは通例はＲＡＭである。ただし、本発明の範囲はＲＡＭに限定されず、一般には、これらに限定しないがＦＬＡＳＨ、ハードディスク、ＲＡＭ、または読み取りおよび書き込みを行うことができる任意の他の記憶装置を含む任意のデータ記憶装置でよい。コンピュータシステム３０１もこの説明ではコンピュータと称するが、これは、一般にはこれらに限定しないがＰＤＡ、コンピュータ、携帯電話、セットトップボックスを含むネットワークインタフェースをサポートすることが可能な任意の装置でよい。
【００２７】
次いで図３と図４を併せて参照し、図４の流れ図でＲＤＭＡの読み取り動作を説明する。転送は、ブロック４０２でアプリケーション３０３がデータの転送要求をＯＳ３０５に対して行うことによって開始される。この場合のすべてのオペレーティングシステムコマンドは、カーネルモードで行うことができる。ＯＳは、その要求にはネットワークアクセスが必要であることを判断する。ＮＩＣ３０９がＲＤＭＡ機能を有する場合、ＯＳ３０５は、この転送をＲＤＭＡを利用して行って処理の負荷の一部をホストＣＰＵから軽減することができる。ＲＤＭＡ転送は、ＯＳ３０５がブロック４０４でＮＩＣ３０９にＳＴａｇを要求することによって開始する。ＮＩＣ３０９は、ブロック４０６で、ＳＴａｇ４０１と称する識別子をネットワークＯＳ３０５に返す。ブロック４０８で、ＯＳ３０５は、その転送のためのメモリを割り当ててメモリ割り当て３１１を作成し、割り当てられたメモリ割り当て３１１のアドレスをＮＩＣ３０９に送信する。次いでＮＩＣ３０９は、メモリ割り当て３１１をＳＴａｇ４０１に関連付ける。この関連付けにより、ＮＩＣ３０９は、ＳＴａｇ４０１とともに到着するデータをメモリ割り当て３１１に置くことができる。次いでブロック４１０で、ＮＩＣ３０９がＲＤＭＡパケット４０３を作成する。ＲＤＭＡパケット４０３は、ＳＴａｇ４０１とデータ読み取りのコマンドとからなる。次いでブロック４１２で、ＮＩＣ３０９は、ＲＤＭＡパケット４０３をＴＣＰ／ＩＰデータグラム４０５中にカプセル化する。ブロック４１４で、ＴＣＰ／ＩＰデータグラム４０５をインターネット３１３上に送信し、インターネット３１３は、ブロック４１６でＴＣＰ／ＩＰデータグラム４０５をリモートコンピュータ３１５までルーティングする。リモートコンピュータ３１５は、ブロック４１８で、ＴＣＰ／ＩＰデータグラム４０５からＲＤＭＡパケット４０３を抽出する。この抽出は、ＮＩＣまたはソフトウェアで行うことができる。ブロック４２０でＲＤＭＡパケット４０３からＳＴａｇ４０１を抽出し、要求されたデータ４０７と組み合わせて使用してＲＤＭＡパケット４０６を形成する。ブロック４２２で、ＴＣＰ／ＩＰデータグラム４０９にＲＤＭＡパケット４０６をカプセル化する。次いでブロック４２４でインターネット３１３上にデータグラム４０９を送信し、インターネット３１３はＴＣＰ／ＩＰデータグラム４０９をコンピュータ３０１にルーティングする。次いでブロック４２６でＮＩＣ３０９がＴＣＰ／ＩＰデータグラム４０９を受信する。次いでブロック４２８で、ＮＩＣ３０９はＴＣＰ／ＩＰデータグラム４０９からＲＤＭＡパケット４０６を抽出する。ブロック４３０で、ＮＩＣ３０９は、ＲＤＭＡパケット４０６からＳＴａｇ４０１を抽出し、ＲＤＭＡヘッダ中の無効化ビットを調べる。このビットが設定されている場合はＳＴａｇが無効にされる。次いでブロック４３２で、ＳＴａｇ４０１を使用して、関連付けられたメモリ割り当て３１１を取り出し、要求されるデータ４０７をＤＭＡを使用してこのメモリ割り当てに送る。
【００２８】
データ転送全体で必要とされるＣＰＵの介入が非常に少ないことに留意されたい。ＯＳ３０５は、ＮＩＣ３０９への転送を行うことを要求し、メモリ割り当て３１１を行い、そのメモリの場所をＮＩＣ３０９に通知するだけでよい。ＮＩＣ３０９がすべてのデータ転送を処理する。メモリは転送ごとに割り当てられるので、メモリは、アプリケーションが直接データにアクセスできる形で割り当てることができる。アプリケーションが直接アクセスするので、ＮＩＣがメモリにデータを置いた後にデータを移動しなくて済む。これにより、ＣＰＵが多量のデータを移動し、その結果高速ネットワーク中で多量のＣＰＵリソースを消費せずに済む。
【００２９】
図５に、本発明による２つのネットワークコンピュータ間のＲＤＭＡ読み取り転送のブロック図５００を示す。ブロック図５００は、コンピュータ５０１が第２のＮＩＣ５１０を有する点を除いてはブロック図３００と同じである。同様の構成要素は同様の符号を使用して表す（例えば、図５のコンピュータ５０１は、コンピュータ３０１と同一である）。
【００３０】
図６ａおよび６ｂと併せて図５を参照すると、流れ図により一実施形態によるＲＤＭＡの読み取り動作を説明する。この流れ図では、分かりやすいように図５で使用した識別符号を参照する。転送は、ＴＣＰ／ＩＰデータグラムがリモートコンピュータから返される箇所までは図４に示す手順と同じ手順をたどる。しかし、図６ａおよび６ｂに示す転送ではインターネットで使用される経路が変化しており、ＴＣＰ／ＩＰデータグラム６０９は、転送を開始したＮＩＣ５０９ではなくＮＩＣ５１０で終端する経路をとる。ＮＩＣ５１０は転送を開始しなかったので、ＮＩＣ５１０は、ＳＴａｇ６０１およびそれに関連付けられた記憶域（メモリ割り当て）５１１の知識を持たない。しかしこの知識はＮＩＣ５０９には存在する。
【００３１】
ＮＩＣ５１０は、図６ａのブロック６２６でＴＣＰ／ＩＰデータグラム６０９を受信すると、必要なすべてのＴＣＰ／ＩＰ処理を行い、ブロック６２８でＲＤＭＡパケット６０６を抽出する。次いでブロック６３０でＲＤＭＡパケット６０６からＳＴａｇ６０１を除去する。ブロック６３２で、ＮＩＣ５１０は、ＮＩＣ５１０で作成されたすべての有効なＳＴａｇのリストを検索するが、ＳＴａｇ６０１は見つからない。この時点で、ＳＴａｇ６０１が無効であるか、またはＳＴａｇ６０１が同じコンピュータ５０１の別のＮＩＣによって作成されたかの２つの可能性がある。ＮＩＣ５１０は、後者が該当すると想定し、ブロック６３４で認識されないＳＴａｇとしてＳＴａｇ６０１をＯＳ５０５に報告する。ＯＳ５０５は、ＳＴａｇ６０１が有効であるかどうかを確認することを試みる。確認を行うために、ブロック６３６で、ＯＳ５０５は、ＮＩＣ５０９によって生成されたすべての有効なＳＴａｇとそのＳＴａｇに関連付けられたアドレスをＮＩＣ５０９に問い合わせる。ブロック６３８で、ＮＩＣ５０９は、要求されたリストを返す。次いで、ＯＳ５０５は、ブロック６４０でそのリストを検索してＳＴａｇ６０１を探す。ブロック６４２で、ＯＳ５０５は、ＳＴａｇ６０１が見つかったかどうかについて判定を行う。見つからない場合はブロック６５０が実施され、ここでＳＴａｇ６０１を無効とＮＩＣ５１０に報告する。次いでＮＩＣ５１０は、パケットを転送する有効な記憶域がないのでそのパケットを破棄する。有効な記憶域を利用できる場合に、無効なＳＴａｇを有するパケットをメモリに転送するとセキュリティ上のリスクが生じる。この例では、ＮＩＣ５０９がＳＴａｇ６０１を作成したとしているのでこの分岐は明らかに可能でないことに留意されたい。しかし、無効なＳＴａｇを正しく処理しなければならない完全なアルゴリズムを説明するためにこの分岐を含めている。ブロック６４２でＳＴａｇ６０１がＮＩＣ５０９によって生成されたＳＴａｇのリストにあると判定された場合は、ブロック６４４で、ＯＳ５０５がＳＴａｇ６０１に関連付けられた記憶域５１１を見つける。ブロック６４６で、関連付けられた記憶域５１１をＮＩＣ５１０に報告する。関連付けられたメモリ割り当て５１１の知識により、ＮＩＣ５１０は、要求されるデータ６０７をメモリ割り当て５１１に転送して、転送を完了することができる。
【００３２】
１つのＮＩＣから別のＮＩＣに切り替わる間、ＣＰＵは、ＲＤＭＡプロトコルスタックの一部の処理にアクティブに関わらなければならない。この状況が無限に続く場合は明らかに望ましくない。さらに、経路の変化によって影響を受ける、ＮＩＣ５０９での処理を待つ多くの未処理のＳＴａｇが存在する可能性もある。最悪の場合、例えばＮＩＣ５０９からケーブルが抜かれた場合は、ＮＩＣ５０９に残っているすべてのＳＴａｇがＮＩＣ５１０によって処理されることになる。ＲＤＭＡ標準ではＳＴａｇの寿命について時間的な制限は設定しておらず、したがって、それらのＳＴａｇの使用にＣＰＵが無限に関与することが必要となる可能性がある。しかし、実際にはＳＴａｇは通例転送が終わるたびに無効にされ、多数回の転送にわたって使用されることはめったにない。したがって、大半の場合は、ＳＴａｇの転送にソフトウェアが関与するのはごく限られた継続時間である。ＳＴａｇの無効化は、ＲＤＭＡヘッダに無効化フラグを設定することによって達成することができるが、ソフトウェアアプリケーションからの明示的なコマンドによって行うことも可能である。セキュリティ上の理由から、ＲＤＭＡを使用する大半のアプリケーションは、無効化ビットが設定されていない場合でも１回の転送が終わるとＳＴａｇを無効にする。
【００３３】
実際には、リモートコンピュータ５１５も、ＳＴａｇを割り当て、そのＳＴａｇをリモートコンピュータ５１５のメモリに関連付け、ローカルコンピュータ５０１のアプリケーション５０３に送信するアプリケーションを含む。そして、アプリケーション５０３がＲＤＭＡの書き込みを行う。より詳細には、リモートのＳＴａｇとデータとを含むＲＤＭＡ書き込みパケットが作成される。データとリモートＳＴａｇは、ＴＣＰ／ＩＰデータグラム中にカプセル化され、リモートコンピュータ５１５に送信される。リモートコンピュータ５１５のＲＤＭＡ  ＮＩＣは、このデータグラムを受信し、ＳＴａｇを介して、データを置くメモリ中の場所を知る。ＲＤＭＡ  ＮＩＣは、ＤＭＡを介してそのデータをそのメモリに置く。上記のＲＤＭＡ読み取りの場合と同様にＩＰ経路の変化がこのＳＴａｇに影響を与える可能性があり、リモートコンピュータ５１５は、ＲＤＭＡ読み取りの場合について上述した方式と同じように経路の変化に対処することができる。
【００３４】
同様に、分かりやすくするために上述の説明ではすべて単一のＳＴａｇを扱った。実際にはＲＤＭＡ読み取りの動作には２つのＳＴａｇが伴う。再度図２を参照すると、ステップ２０１の前でさえ、リモートコンピュータ３１５（図３）のアプリケーションは、ＳＴａｇを割り当て（これを「リモートＳＴａｇ」と称する）、そのＳＴａｇをコンピュータ３１５のメモリに関連付ける。そして、リモートコンピュータ３１５のアプリケーションが、このリモートＳＴａｇをローカルコンピュータ３０１のアプリケーションに送信する。これにより、ローカルアプリケーション３０３がＲＤＭＡの読み取りを行うことが可能になる（図２のブロック２０１〜２１１）。ＲＤＭＡ読み取り要求パケット（ブロック２０５）は、実際には２つのＳＴａｇ、すなわちローカルＳＴａｇとリモートＳＴａｇとを搬送する。ＩＰ経路の変化は、ローカルＳＴａｇと同じようにリモートＳＴａｇに影響しうる。その場合は、リモートコンピュータ３１５によるリモートＳＴａｇの処理は、ローカルコンピュータ３０１によるローカルＳＴａｇの処理と全く同じに行われる。
【００３５】
本発明の原理を応用することが可能な多くの可能な実施形態を考慮すると、図面との関係で本明細書に記載する実施形態は、説明のみを目的とするものであり、本発明の範囲を限定するものと解釈すべきでないことが理解されよう。例えば、当業者は、ソフトウェアとして図示した例示実施形態の要素は、ハードウェアとして実施することもでき、その逆も同様であり、あるいは、例示した実施形態は本発明の精神から逸脱することなく構成と詳細を変更できることを認識されよう。したがって、本明細書に記載する本発明は、添付の特許請求の範囲とその均等物に該当するすべてのそのような実施形態を企図する。
【図面の簡単な説明】
【００３６】
【図１】本発明が存在する例示的コンピュータシステムを概略的に示すブロック図である。
【図２】本発明の一実施形態によるＲＤＭＡのデータ転送の概略を説明する流れ図である。
【図３】本発明の一実施形態による典型的なＲＤＭＡ転送を実施することが可能なネットワークコンピュータシステムのブロック図である。
【図４】本発明の一実施形態による標準的なＲＤＭＡ転送の実施を説明する流れ図である。
【図５】本発明の一実施形態を実施することが可能なネットワークコンピュータシステムのブロック図である。
【図６ａ】本発明の一実施形態による方法を説明する流れ図である。
【図６ｂ】本発明の一実施形態による方法を説明する流れ図である。
【符号の説明】
【００３７】
３０１  コンピュータ
３０２  システムメモリ
３０３  アプリケーション
３０５  オペレーティングシステム
３０７  ネットワーク層
３１３  インターネット
３１５  リモートコンピュータ
５０１  コンピュータ
５０２  システムメモリ
５０３  アプリケーション
５０５  オペレーティングシステム
５０７  ネットワーク層
５１３  インターネット
５１５  リモートコンピュータ
【図１】
2005044353.tif 000003
【図２】
2005044353.tif 000004
【図３】
2005044353.tif 000005
【図４】
2005044353.tif 000006
【図５】
2005044353.tif 000007
【図６ａ】
2005044353.tif 000008
【図６ｂ】
2005044353.tif 000009