(57)【要約】【課題】  イニシエータ・ノードとターゲット・ノードの間でデータを転送するための方法、システム、およびプログラムを提供することにある。【解決手段】  ターゲット・ノードに伝送するためにイニシエータ・ノードで第１のデータ転送プロトコルに適合する要求が受信される。その要求をターゲット・ノードに転送するために使用するための記憶場所への参照が入手される。イニシエータ・ノードのユーザ・アドレス・スペースで実行される少なくとも１つの機能が呼び出され、イニシエータ・ノードはカーネル・アドレス・スペースとユーザ・アドレス・スペースとを含む。ユーザ・アドレス・スペースで実行される少なくとも１つの機能は、第２のデータ転送プロトコルを使用してターゲット・ノードにその要求と記憶場所への参照を伝送するために、アダプタとのインターフェースを取る。【選択図】  図２
2005310130.tif 000002
【特許請求の範囲】
【請求項１】
イニシエータ・ノードとターゲット・ノードの間でデータを転送するための製品において、前記イニシエータ・ノードがアダプタと、カーネル・アドレス・スペースと、ユーザ・アドレス・スペースとを含み、前記製品が操作を実行させ、前記操作が、
前記ターゲット・ノードに伝送するために前記イニシエータ・ノードで第１のデータ転送プロトコルに適合する要求を受信するステップと、
前記要求を前記ターゲット・ノードに転送するために使用するための記憶場所への参照を入手するステップと、
前記イニシエータ・ノードの前記ユーザ・アドレス・スペースで実行される少なくとも１つの機能を呼び出すステップと、
前記ユーザ・アドレス・スペースで実行される前記少なくとも１つの機能により、第２のデータ転送プロトコルを使用して前記ターゲット・ノードに前記要求と前記記憶場所への前記参照を伝送するために、前記アダプタとのインターフェースを取るステップと、
を有する、製品。
【請求項２】
前記記憶場所への前記参照が、前記カーネル・アドレス・スペース内のアダプタ・ドライバを呼び出すことによって入手される、請求項１に記載の製品。
【請求項３】
前記アダプタが、データ転送に使用するための前記記憶場所への前記参照を初期設定する、請求項１に記載の製品。
【請求項４】
前記少なくとも１つの機能が、前記第２のデータ転送プロトコルを使用して操作を呼び出すために使用される複数機能のライブラリの一部であり、前記操作が、
前記アダプタにより、前記少なくとも１つの機能に対する前記呼出しを呼び出した第１のデータ転送プロトコル層に状況を伝達するために前記ユーザ・アドレス・スペースで実行される前記ライブラリ内の前記少なくとも１つの機能を呼び出すステップ
をさらに有する、請求項１に記載の製品。
【請求項５】
前記要求が入出力（Ｉ／Ｏ）要求を有し、前記記憶場所が前記入出力要求を実現するために使用される、請求項１に記載の製品。
【請求項６】
前記記憶場所に書き込まれた応答が、前記第１のデータ転送プロトコルに適合し、前記イニシエータ・ノードの前記ユーザ・アドレス・スペースで実行される第１のデータ転送層プロトコルによって処理される、請求項５に記載の製品。
【請求項７】
前記入出力要求が、前記要求に含まれるデータを書き込むための書込み要求を有し、前記操作が、
書き込むべき前記データを含む前記記憶場所への前記参照とともに前記書込み要求をパケット内にカプセル化するステップであって、前記第２のデータ転送プロトコルを使用して前記イニシエータ・ノード内の前記記憶場所から書き込むべき前記データを読み取るために前記イニシエータ・ノードで前記アダプタによって前記ターゲット・ノードに伝送された前記記憶場所への前記参照を前記ターゲット・ノードが使用するステップ
をさらに有する、請求項５に記載の製品。
【請求項８】
前記入出力要求が前記ターゲット・ノードからデータを読み取るための読取り要求を有し、前記ターゲット・ノードが前記要求されたデータを前記記憶場所に書き込む、請求項５に記載の製品。
【請求項９】
前記第１のデータ転送プロトコルがｉＳＣＳＩプロトコルを有し、前記要求が前記イニシエータ・ノード内の前記ユーザ・アドレス・スペースで実行されるｉＳＣＳＩ層によって生成され、前記第２のデータ転送プロトコルがＲＤＭＡデータ転送プロトコルを有し、前記アダプタとのインターフェースを取る前記少なくとも１つの機能がｉＳＥＲ機能を有し、前記アダプタがＲＮＩＣアダプタを有する、請求項１に記載の製品。
【請求項１０】
ターゲット・ノードと通信しているシステムにおいて、
複数の記憶場所を含むメモリと、
カーネル・アドレス・スペースと、
ユーザ・アドレス・スペースと、
アダプタと、
操作を実行させることができる回路であって、
（ｉ）前記ターゲット・ノードに伝送するために第１のデータ転送プロトコルに適合する要求を受信するステップと、
（ｉｉ）前記要求を前記ターゲット・ノードに転送するために使用するための少なくとも１つの記憶場所への参照を入手するステップと、
（ｉｉｉ）前記ユーザ・アドレス・スペースで実行される少なくとも１つの機能を呼び出すステップと、
（ｉｖ）前記ユーザ・アドレス・スペースで実行される前記少なくとも１つの機能により、第２のデータ転送プロトコルを使用して前記ターゲット・ノードに前記要求と前記記憶場所への前記参照を伝送するために、前記アダプタとのインターフェースを取るステップと、
を有する回路と、
を有する、システム。
【請求項１１】
アダプタ・ドライバをさらに有し、前記記憶場所への前記参照が、前記カーネル・アドレス・スペース内の前記アダプタ・ドライバを呼び出すことによって入手される、請求項１０に記載のシステム。
【請求項１２】
前記アダプタが、データ転送に使用するための前記記憶場所への前記参照を初期設定する、請求項１０に記載のシステム。
【請求項１３】
前記第２のデータ転送プロトコルを使用して操作を呼び出すために使用される複数機能のライブラリと、
第１のデータ転送プロトコルであって、前記少なくとも１つの機能が前記ライブラリの一部であり、前記少なくとも１つの機能に対する前記呼出しを呼び出した第１のデータ転送プロトコル層に状況を伝達するために前記ユーザ・アドレス・スペースで実行される前記ライブラリ内の前記少なくとも１つの機能を前記アダプタが呼び出す第１のデータ転送プロトコルと、
をさらに有する、請求項１０に記載のシステム。
【請求項１４】
前記要求が入出力（Ｉ／Ｏ）要求を有し、前記記憶場所が前記入出力要求を実現するために使用される、請求項１０に記載のシステム。
【請求項１５】
前記ユーザ・アドレス・スペースで実行される第１のデータ転送層プロトコルをさらに有し、前記記憶場所に書き込まれた応答が前記第１のデータ転送プロトコルに適合する、請求項１４に記載のシステム。
【請求項１６】
前記入出力要求が、前記要求に含まれるデータを書き込むための書込み要求を有し、前記回路操作が、
書き込むべき前記データを含む前記記憶場所への前記参照とともに前記書込み要求をパケット内にカプセル化するステップであって、前記第２のデータ転送プロトコルを使用して前記記憶場所から書き込むべき前記データを読み取るために前記アダプタによって前記ターゲット・ノードに伝送された前記記憶場所への前記参照を前記ターゲット・ノードが使用するステップ
をさらに有する、請求項１５に記載のシステム。
【請求項１７】
前記入出力要求が前記ターゲット・ノードからデータを読み取るための読取り要求を有し、前記ターゲット・ノードが前記要求されたデータを前記記憶場所に書き込む、請求項１５に記載のシステム。
【請求項１８】
前記第１のデータ転送プロトコルがｉＳＣＳＩプロトコルを有し、前記要求が前記ユーザ・アドレス・スペースで実行されるｉＳＣＳＩ層によって生成され、前記第２のデータ転送プロトコルがＲＤＭＡデータ転送プロトコルを有し、前記アダプタとのインターフェースを取る前記少なくとも１つの機能がｉＳＥＲ機能を有し、前記アダプタがＲＮＩＣアダプタを有する、請求項１０に記載のシステム。
【請求項１９】
イニシエータ・ノードとターゲット・ノードの間でデータを転送するための方法において、
前記ターゲット・ノードに伝送するために前記イニシエータ・ノードで第１のデータ転送プロトコルに適合する要求を受信するステップと、
前記要求を前記ターゲット・ノードに転送するために使用するための記憶場所への参照を入手するステップと、
前記イニシエータ・ノードのユーザ・アドレス・スペースで実行される少なくとも１つの機能を呼び出すステップであって、前記イニシエータ・ノードがカーネル・アドレス・スペースと前記ユーザ・アドレス・スペースとを含むステップと、
前記ユーザ・アドレス・スペースで実行される前記少なくとも１つの機能により、第２のデータ転送プロトコルを使用して前記ターゲット・ノードに前記要求と前記記憶場所への前記参照を伝送するために、アダプタとのインターフェースを取るステップと、
を有する、方法。
【請求項２０】
前記記憶場所への前記参照が、前記カーネル・アドレス・スペース内のアダプタ・ドライバを呼び出すことによって入手される、請求項１９に記載の方法。
【請求項２１】
前記アダプタが、データ転送に使用するための前記記憶場所への前記参照を初期設定する、請求項１９に記載の方法。
【請求項２２】
前記少なくとも１つの機能が、前記第２のデータ転送プロトコルを使用して操作を呼び出すために使用される複数機能のライブラリの一部であり、
前記アダプタにより、前記少なくとも１つの機能に対する前記呼出しを呼び出した第１のデータ転送プロトコル層に状況を伝達するために前記ユーザ・アドレス・スペースで実行される前記ライブラリ内の前記少なくとも１つの機能を呼び出すステップ
をさらに有する、請求項１９に記載の方法。
【請求項２３】
前記要求が入出力（Ｉ／Ｏ）要求を有し、前記記憶場所が前記入出力要求を実現するために使用される、請求項１９に記載の方法。
【請求項２４】
前記記憶場所に書き込まれた応答が、前記第１のデータ転送プロトコルに適合し、前記イニシエータ・ノードの前記ユーザ・アドレス・スペースで実行される第１のデータ転送層プロトコルによって処理される、請求項２３に記載の方法。
【請求項２５】
前記入出力要求が、前記要求に含まれるデータを書き込むための書込み要求を有し、
書き込むべき前記データを含む前記記憶場所への前記参照とともに前記書込み要求をパケット内にカプセル化するステップであって、前記第２のデータ転送プロトコルを使用して前記イニシエータ・ノード内の前記記憶場所から書き込むべき前記データを読み取るために前記イニシエータ・ノードで前記アダプタによって前記ターゲット・ノードに伝送された前記記憶場所への前記参照を前記ターゲット・ノードが使用するステップ
をさらに有する、請求項２３に記載の方法。
【請求項２６】
前記入出力要求が前記ターゲット・ノードからデータを読み取るための読取り要求を有し、前記ターゲット・ノードが前記要求されたデータを前記記憶場所に書き込む、請求項２３に記載の方法。
【請求項２７】
前記第１のデータ転送プロトコルがｉＳＣＳＩプロトコルを有し、前記要求が前記イニシエータ・ノード内の前記ユーザ・アドレス・スペースで実行されるｉＳＣＳＩ層によって生成され、前記第２のデータ転送プロトコルがＲＤＭＡデータ転送プロトコルを有し、前記アダプタとのインターフェースを取る前記少なくとも１つの機能がｉＳＥＲ機能を有し、前記アダプタがＲＮＩＣアダプタを有する、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送要求を実行するための方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
ストレージ環境では、データ・アクセス・コマンドがホスト・システムからストレージ・コントローラへ伝達され、そのストレージ・コントローラがディスクへのアクセスを管理する。ストレージ・コントローラは、ホスト・システム内のカードかまたは個別のデバイスにすることができる。インターネット小型コンピュータ・システム・インターフェース（Internet Small Computer Systems Interface：ｉＳＣＳＩ）プロトコルは、イーサネット・スイッチおよびイーサネット・ルータを含むイーサネット接続を使用するストレージ・ネットワークに使用される。本明細書で使用する「ｉＳＣＳＩ」という用語は、ＩＥＴＦ（Internet Engineering Task Force）規格団体によって定義されたｉＳＣＳＩプロトコルの構文およびセマンティックならびにそのプロトコルの任意の変形を指す。ｉＳＣＳＩが使用される現在のストレージ・ネットワークでは、そのパケット構成は、インターネット・プロトコル(ＩＰ)および伝送制御プロトコル（ＴＣＰ）のパッケージ層をカプセル化するイーサネット・パッケージを有し、これらの層はさらに1つまたは複数のＳＣＳＩコマンドを含むｉＳＣＳＩパッケージをカプセル化する。イーサネット・プロトコルは、任意のネットワーク・セグメント（リンク）上の２地点間からパケットが流れるときにリンク・レベルのエラー・チェックを行って、リンク上を通過する間にデータが破壊されているかどうかを判定する。ネットワーク・データ伝送操作では、イニシエータ・デバイスがネットワークによりターゲット・デバイスにデータまたはコマンドを伝送する。ＴＣＰ／ＩＰパッケージは、エンドツーエンド・チェックを実行して、パケットがスイッチおよびルータを通過したときに伝送されたパケットが伝送中に変化したかどうかを反対側で判定するためのエラー検出コードを含む。エラーを検出する受信側デバイスは、エラーが検出されたパケットの再伝送を要求するために送信側デバイスに否定通知を送信することになる。
【０００３】
リモート直接メモリ・アクセス（RemoteDirect Memory Access：ＲＤＭＡ）プロトコルは、あるコンピュータがメモリ・バス帯域幅およびプロセッサ・オーバヘッドに対する最小限の要求で他のコンピュータのメモリ内に情報を直接配置する機能を提供する。ＴＣＰ／ＩＰによるＲＤＭＡ（ｉＷＡＲＰとしても知られている）は、標準のＴＣＰ／ＩＰネットワークによるＲＤＭＡ操作をサポートするための相互運用プロトコルを定義する。ＲＤＭＡネットワーク・インターフェース・カード（ＲＮＩＣ）ネットワーク・アダプタ・カードは、ＲＤＭＡプロトコルを実現し、ローカル・メモリおよびリモート・メモリにデータを転送するためのＲＤＭＡ操作を実行する。ＲＤＭＡプロトコルの詳細については、ＲＤＭＡコンソーシアムによって発行された「RDMA Protocol Verbs Specification (Version 1.0)」（２００３年４月）、ＲＤＭＡコンソーシアムによって発行された「Direct DataPlacement over Reliable Transports (Version 1.0)」（２００２年１０月）、およびＲＤＭＡコンソーシアムによって発行された「Marker PDU Aligned Framing for TCP Specification (Version 1.0)」（２００２年１０月）というタイトルの規格に記載されており、これらの規格は参照によりその全体が本明細書に関係している。
【０００４】
ＲＤＭＡコンソーシアムによって公表されたＭｉｃｈａｅｌ  Ｋｏ他による「iSCSI Extensions for RDMA Specification (Version 1.0)」（２００３年７月）というタイトルのある規格は、その全体が本明細書に関係しているものであり、ＲＤＭＡの上にｉＳＣＳＩを層化することによりｉＳＣＳＩにＲＤＭＡデータ転送機能を提供するためのプロトコルを定義する。
【０００５】
上述のＲＤＭＡおよびその他のものを含むデータ転送システムは、概して、ストレージ・デバイスとの間の読取り操作および書込み操作を処理するために、カーネル・モード・プロセスの介入を必要とする。
【非特許文献１】ＲＤＭＡコンソーシアムによって発行された「RDMA Protocol Verbs Specification (Version 1.0)」（２００３年４月）
【非特許文献２】ＲＤＭＡコンソーシアムによって発行された「Direct Data Placement over Reliable Transports (Version 1.0)」（２００２年１０月）
【非特許文献３】ＲＤＭＡコンソーシアムによって発行された「Marker PDU Aligned Framing for TCP Specification (Version 1.0)」（２００２年１０月）
【非特許文献４】ＲＤＭＡコンソーシアムによって公表されたＭｉｃｈａｅｌ  Ｋｏ他による「iSCSI Extensions for RDMA Specification (Version 1.0)」（２００３年７月）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
イニシエータ・ノードとターゲット・ノードの間でデータを転送するための方法、システム、およびプログラムを提供する。
【課題を解決するための手段】
【０００７】
ターゲット・ノードに伝送するためにイニシエータ・ノードで第１のデータ転送プロトコルに適合する要求が受信される。その要求をターゲット・ノードに転送するために使用するための記憶場所への参照が入手される。イニシエータ・ノードのユーザ・アドレス・スペースで実行される少なくとも１つの機能が呼び出され、イニシエータ・ノードはカーネル・アドレス・スペースとユーザ・アドレス・スペースとを含む。ユーザ・アドレス・スペースで実行される少なくとも１つの機能は、第２のデータ転送プロトコルを使用してターゲット・ノードにその要求と記憶場所への参照を伝送するために、アダプタとのインターフェースを取る。
【０００８】
次に添付図面を参照するが、図面全体を通して同様の参照番号は対応する部分を表している。
【発明を実施するための最良の形態】
【０００９】
以下の説明では、本明細書の一部を形成し、本発明のいくつかの実施形態を図示する添付図面を参照する。他の諸実施形態を使用することができ、本発明の範囲を逸脱せずに構造上および操作上の変更を行うことができることは言うまでもない。
【００１０】
図1は、ネットワーク４により通信する複数のコンピューティング・ノード２ａ、２ｂ、・・・２ｎからなるネットワーク・コンピューティング環境を示している。このネットワークは、ローカル・エリア・ネットワーク（ＬＡＮ）、広域ネットワーク(ＷＡＮ)、ストレージ・エリア・ネットワーク（ＳＡＮ）を含むことができる。代わって、このノードは、ＳＣＳＩバスなどのバスにより通信することができる。
【００１１】
図1のノード２ａ、２ｂ、・・・２ｎは、イニシエータおよびターゲットの両方として動作することができる。図2は、ネットワーク４による通信を可能にするためにノード２ａ、２ｂ、２ｃなどのノードに含まれるコンポーネントを示している。ノード２は、中央演算処理装置または中央演算処理複合システムなどのプロセッサ６と、オペレーティング・システム8とを含む。オペレーティング・システム８はユーザ・アドレス・スペース１０とカーネル・アドレス・スペース１２とを提供し、ユーザ・アドレス・スペース１０ではユーザ・アプリケーションが実行され、カーネル・アドレス・スペース１２ではリソース割振り、下位ハードウェア・インターフェース、セキュリティなどの本質的な操作が実行される。
【００１２】
ユーザ・スペース１０ではアプリケーション１４が実行され、アプリケーション１４は、データベース・プログラム、サーバ・プログラムなどのユーザ・アプリケーションを含む。入出力操作を実行するために、アプリケーション１４は、ＳＣＳＩ層１６への呼出しを行って、入出力要求を有するプロトコル・データ単位（ＰＤＵ）を生成することになり、次にその入出力要求がｉＳＣＳＩ層１８への呼出しを行うことになり、次にそのｉＳＣＳＩ層１８がｉＳＥＲライブラリ２０から機能を呼び出すことになるであろう。ｉＳＥＲライブラリ２０内の特定の機能はカーネル・スペース１２で実行されるＲＮＩＣドライバ２２を呼び出すことになり、他の機能はユーザ・スペース１０から直接ＲＮＩＣを呼び出すことになる。ＲＮＩＣ２４は、ネットワーク４により伝送するためにトランスポート層にパケットをパックするかまたはネットワーク４から受信したパケットをアンパックするために、ＲＤＭＡ層２６と、ＴＣＰ層、ＩＰ層、イーサネット層などのネットワーク層２８とを含む。
【００１３】
特定の諸実施形態では、入出力操作を実行するために、入出力要求を処理するために呼び出されたｉＳＥＲ機能は、入出力操作に使用するためのメモリ３０内の記憶場所を登録する必要がある。アプリケーション１４は記憶場所を登録することができ、その記憶場所はメモリ領域とメモリ・ウィンドウとを含む。ＲＮＩＣ２４は、論理的に隣接するように（ローカルに、またはローカルかつリモートに）登録済み記憶場所に直接アクセスすることができる。メモリ領域またはメモリ・ウィンドウなどの定義済み記憶場所は、ＲＮＩＣ２４によって作成され、登録済み記憶場所を参照するために使用されるステアリング・タグ（「ＳＴａｇ」）によって識別される。特定の諸実施形態では、メモリ領域またはメモリ・ウィンドウというメモリ領域のサブセットを登録することができ、各登録済み記憶場所（領域またはウィンドウ）には個別のＳＴａｇが関連付けられるであろう。ＲＮＩＣ２４は、参照済み記憶場所にアクセスするためにＳＴａｇを使用する。特定の諸実施形態では、ｉＳＥＲライブラリ内のｉＳＥＲ機能は、カーネル・スペース１２で実行されるＲＮＩＣドライバ２２を呼び出すことにより、メモリ領域を登録するためにＲＮＩＣ２２を呼び出すことになるであろう。ＲＮＩＣドライバ２２は、オペレーティング・システム８とＲＮＩＣアダプタ２４とのインターフェースを取るためのデバイス・ドライバを含む。記憶場所、たとえば、メモリ領域またはメモリ・ウィンドウを宣言し登録するためのｉＳＥＲライブラリ内の機能からの呼出しに応答して、ＲＮＩＣドライバ２２はＲＮＩＣ２４を呼び出すことになるであろう。ＲＮＩＣ２４内のＲＤＭＡ層２６とともにＲＮＩＣドライバ２２（時には「動詞」（Verb）層とも呼ばれる）は、メモリ領域（ＭＲ）３２などの登録すべき記憶場所を固定し、そのメモリ領域／ウィンドウ用のＳＴａｇを生成する。
【００１４】
ＲＮＩＣ２４のＲＤＭＡ層２６は、メモリ変換テーブル３４を維持するものであり、メモリ領域／ウィンドウを登録する場合、登録済みメモリ領域と、ＲＮＩＣ２４がそのメモリ領域にＳＴａｇを関連付けられるようにそのメモリ領域を参照するために生成されたＳＴａｇとを識別する項目をメモリ変換テーブル３４に追加することになるであろう。メモリ変換テーブル３４は、ＲＮＩＣ２４のバッファ内またはメモリ３０内に維持することができる。ＳＴａｇは、入出力操作に使用するために登録を要求するｉＳＥＲ機能に返されることになるであろう。
【００１５】
ＲＮＩＣ２４がＳＴａｇを生成し、入出力操作を処理するｉＳＥＲ機能にそのＳＴａｇを返した後、ｉＳＥＲ機能は入出力操作を続行することができる。ｉＳＥＲ機能は、ヘッダ情報とともにｉＳＣＳＩ層１８から受信したパケットと、ＲＮＩＣ２４から受信したＳＴａｇとをラップし、転送するためにそのパケットをＲＮＩＣ２４に渡すことになるであろう。ＲＤＭＡデータ転送操作を実行するためにＲＮＩＣ２４とのインターフェースを取るｉＳＥＲライブラリ２０の機能はユーザ・アドレス・スペース１０で実行され、それにより、カーネル・スペース１２で実行されるＲＮＩＣドライバ２２を迂回（バイパス）する。
【００１６】
ＲＤＭＡデータ転送を管理するために、ＲＮＩＣ２４は、送信キュー３６と、受信キュー３８と、完了キュー４０とを維持する。送信キュー３６と受信キュー３８は、ＲＤＭＡデータ転送要求を管理するためにＲＮＩＣ２４が使用する作業キューを含む。完了キュー４０は、複数の作業キューに関する完了通知の単一ポイントを提供するために完了項目を有する１つまたは複数の項目を含む共用可能キューを有することができる。これらのキュー３６、３８、４０は、メモリ３０内またはＲＮＩＣ２４のバッファ内でＲＮＩＣ２４によって割り振ることができる。
【００１７】
図３は、諸実施形態とともに使用される伝送パッケージのフォーマットを示している。ＳＣＳＩコマンド５０（読取りコマンドまたは書込みコマンドなど）は、ＳＣＳＩ層１６によって生成され、ｉＳＣＳＩ層１８によってｉＳＣＳＩプロトコル・データ単位（ＰＤＵ）５２内にカプセル化され、さらにそれはｉＳＥＲヘッダ５４とともにｉＳＥＲライブラリ２０内の機能によってカプセル化される。ｉＳＥＲヘッダ５２は、ＳＴａｇと、公示されたＳＴａｇを受信するリモート・ノードがその要求に関連する作業キューおよびＳＴａｇによって参照されるメモリ領域（ウィンドウ）に対する読取りまたは書込みを行うかどうかを示す情報とを含むことになるであろう。ｉＳＥＲカプセル化メッセージ５４は、追加のネットワーク・プロトコルを使用する伝送を可能にするために、ＴＣＰ層、ＩＰ層、および／またはイーサネット層などの１つまたは複数の追加ネットワーク層５６内にさらにカプセル化される。特定の諸実施形態では、ＲＮＩＣ２４内のネットワーク層２８は、ＴＣＰ、ＩＰ、イーサネットなどの追加ネットワーク層５６内のｉＳＥＲカプセル化メッセージ５４をアセンブルすることになるであろう。
【００１８】
図４および図５は、入出力操作を実現するためにユーザ・スペース１０で実行される操作を示している。図４に関しては、イニシエータのｉＳＣＳＩ層１８が（ブロック１００で）ＳＣＳＩ書込み要求を受信すると、ｉＳＣＳＩ層は（ブロック１０２で）ｉＳＥＲライブラリ２０から１つまたは複数のｉＳＥＲ機能を呼び出して、ターゲット・ノードに書き込むべきデータを含む記憶場所３０を含むＳＣＳＩ書込みコマンドのアウトバウンド転送を実行し、そのターゲット・ノードはストレージ・デバイスを有することができる。呼び出されたｉＳＥＲ機能は（ブロック１０４で）カーネル・スペース１２内のＲＮＩＣドライバ２２を呼び出して、受信したＳＣＳＩコマンドを含むｉＳＣＳＩ  ＰＤＵが含まれるメモリ領域に関するＳＴａｇを入手する。また、ＳＴａｇは、カーネル１２の呼出しを介して前に登録されたＳＴａｇのプールから取られている可能性もあり、それにより、個々のコマンドの際にカーネル１２を迂回することができる。呼び出されたｉＳＥＲ機能は（ブロック１０６で）ｉＳＣＳＩ  ＰＤＵポインタ（ｉＳＥＲ機能呼出しによってそれに渡されたもの）を使用して、カーネル・アドレス・スペース１２を迂回するために、ＲＮＩＣへの「送信」要求の一部として、ｉＳＣＳＩヘッダを記述するＳＴａｇおよびオフセットと、オプショナル・データとから構成された分散／収集リスト（Scatter/Gather List：ＳＧＬ）を作成する。ユーザ・スペース１０からのｉＳＥＲ機能２０は（ブロック１０８で）ＲＮＩＣ  ＲＤＭＡ層２６を呼び出して、ｉＳＣＳＩ  ＰＤＵに示される長さまで追加の「ＳＣＳＩ書込み」データを抽出するためにリモート・ノードが使用すべき記憶場所３２を（ＳＴａｇを介して）公示するｉＳＥＲヘッダを含むＲＤＭＡ「送信」を介して複合ｉＳＣＳＩ  ＰＤＵを送信する。リモート・ノードは、リモート・ターゲット・ノード内のメモリ領域にｉＳＣＳＩ  ＰＤＵを受信すると、リモート・ターゲット・ノードでｉＳＣＳＩ層１８およびＳＣＳＩ層１６を使用してｉＳＣＳＩ書込み要求を処理することができ、そのリモート・ターゲット・ノードはストレージ・デバイスを有することができる。ターゲット・ノードに書き込むべきすべてのデータがｉＳＣＳＩ  ＰＤＵの一部として送信されていない場合、ターゲット・ノードは、ｉＳＥＲヘッダ内に含まれるＳＴａｇを使用して、イニシエータ・ノードからのデータの残りを抽出することになる。（イニシエータ・ノード上で）ｉＳＥＲ機能によって呼び出されると、ＲＮＩＣ２４は（ブロック１１０で）ＲＤＭＡ２６とネットワーク層２８を使用して、メッセージ・ペイロードをリモート・ノードに転送する。ターゲット側のｉＳＥＲ層は、１つまたは複数のＲＤＭＡ操作を使用して、ＳＴａｇによって指定された公示済みメモリ領域から要求されたデータを抽出することができる。イニシエータＲＮＩＣが入出力操作の状況を含むｉＳＣＳＩ  ＰＤＵをターゲット・ノードから受信した後、ＲＮＩＣは、無効にすべきものとしてメッセージ内に識別された任意のＳＴａｇを無効にすることになる。ＲＮＩＣ２４は、（ブロック１１２で）ｉＳＥＲライブラリ２０内の機能を呼び出して、ｉＳＣＳＩ  ＰＤＵに含まれる状況を返すことがで��、呼び出されたｉＳＥＲ機能は（ブロック１１４で）非特権ユーザとしてユーザ・スペースで実行され、メッセージを送信した結果をｉＳＣＳＩ層に通知し、任意の他の関連ＳＴａｇを無効にする。データを書き込むためのｉＳＣＳＩ／ｉＳＥＲプロトコルの詳細については、上記で参照した「iSCSI Extensions for RDMA Specification」という文献に記載されている。
【００１９】
ターゲット・ノードは、ｉＳＥＲ／ｉＳＣＳＩ  ＰＤＵを受信すると、基礎となるＳＣＳＩ書込みをアンパックする。ターゲットＳＣＳＩ層１６は、イニシエータによって書き込まれるデータのためにメモリ内のバッファをセットアップし、次にデータの伝送を開始するための要求をｉＳＣＳＩ層に返すことになる。次にターゲットｉＳＣＳＩ層は、その要求をｉＳＣＳＩヘッダ内にパックすることになるであろう。ターゲットｉＳＥＲ層は、書き込むべきデータに関するターゲットからのｉＳＣＳＩ要求をインターセプトすることになり、ｉＳＥＲヘッダからＳＴａｇを抽出することにより、参照済みデータをイニシエータのメモリから読み取らせるＲＤＭＡ読取りコマンドを発行できるようになる。特定の諸実施形態では、ターゲット・ノードのｉＳＥＲ／ＲＤＭＡ呼出しは、完全にまたは部分的にカーネル・アドレス・スペースに含めることができる。（発明の要所は、イニシエータがｉＳＥＲ、ｉＳＣＳＩ、ＳＣＳＩ機能にユーザ・スペースを使用しなければならないことである。）イニシエータからのデータをすべて書き込んだ後、ターゲット上のＳＣＳＩ／ｉＳＣＳＩプロセスは、ＳＣＳＩ操作の完了状況を記述する状況ＰＤＵを構築し、ｉＳＥＲを使用してＲＤＭＡ「無効化付き送信（Send-with-Invalidate）」メッセージ（無効にすべきＳＴａｇを含む）を介してイニシエータにＰＤＵを送信する。
【００２０】
図５は、リモート・ロケーションからデータを読み取るためにノードで実行される操作を示している。イニシエータｉＳＣＳＩ層１８が（ブロック１５０で）ＳＣＳＩ読取りコマンドを受信すると、ｉＳＣＳＩ層１８は（ブロック１５２で）ｉＳＥＲ機能を呼び出して、ＳＣＳＩ読取りコマンドを含むｉＳＣＳＩ  ＰＤＵをリモート・ノードに送信する。呼び出されたｉＳＥＲ機能は（ブロック１５４で）カーネル・スペース１２内のＲＮＩＣドライバ２２を呼び出して、ｉＳＣＳＩ／ｉＳＥＲ  ＰＤＵヘッダが抽出されるメモリ領域３２に関するＳＴａｇと、リモート・ターゲット・ノードからの「ＳＣＳＩ読取り」データが配置されるロケーションを入手する。また、ＳＴａｇは、カーネル１２の呼出しを介して前に登録されたＳＴａｇのプールから取られている可能性もあり、それにより、個々のコマンドの際にカーネル・アドレス・スペース１２を迂回することができる。呼び出されたｉＳＥＲ機能は（ブロック１５６で）、ｉＳＣＳＩ  ＰＤＵ内にパックされたＳＣＳＩ読取り要求で指定された要求済みデータをターゲット・ノードにより公示されたＳＴａｇによって参照されたメモリ領域３２に書き込ませるための読取り要求を含むｉＳＣＳＩ  ＰＤＵを有するパケット内にｉＳＥＲヘッダ５２の一部としてＳＴａｇを含めることにより、データが書き込まれるメモリ領域を公示するＳＴａｇをそのｉＳＥＲヘッダに含む。ユーザ・アドレス・スペース内で動作するイニシエータＲＮＩＣ２４は（ブロック１５８で）ターゲット・ノードにメッセージを送信する。ターゲット・ノード側のｉＳＥＲ層は（ブロック１６０で）１つまたは複数のＲＤＭＡ書込みを使用して、ＳＴａｇで参照されたイニシエータ・ノード内の公示されたメモリ領域に要求されたデータを転送する。ターゲット・ノード側のｉＳＥＲ／ｉＳＣＳＩ／ＳＣＳＩ層は、ユーザ・アドレス・スペース１０またはカーネル・アドレス・スペース１２内で実行することができる。ｉＳＥＲ層に応答して、ターゲットＲＮＩＣのＲＤＭＡ層は（ブロック１６２で）ＲＤＭＡ書込みを実行し、要求側のｉＳＣＳＩ／ｉＳＥＲ  ＰＤＵで公示されたＳＴａｇを指定するメッセージ・ペイロードとともに要求されたデータを転送する。ターゲットで発行されたＲＤＭＡ書込みからデータを受信すると、イニシエータＲＮＩＣ２４は（ブロック１６４で）ＳＴａｇで参照されたメモリ領域内に要求されたデータを配置する。ＳＣＳＩ／ｉＳＣＳＩ／ｉＳＥＲターゲットは、ＳＣＳＩ読取り要求を完了するＲＤＭＡ書込み操作を完了すると、（ブロック１６６で）ターゲットＲＮＩＣを呼び出して、ＲＤＭＡ書込みデータで使用されるＳＴａｇをＲＤＭＡヘッダに含む無効化付き送信メッセージを介してＳＣＳＩ完了状況の送信を発行する。イニシエータＲＮＩＣ２４は、（ブロック１６８で）イニシエータからの無効化付き送信を受信すると、作業キュー内の指定されたＳＴａｇを無効にし（使用不能にし）、次に（ブロック１７０で）ユーザ・アドレス・スペース１０でイニシエータのｉＳＥＲライブラリ２０内の機能を呼び出して、入出力状況メッセージを含むｉＳＣＳＩ  ＰＤＵを送達し、次にその入出力状況メッセージはｉＳＣＳＩ層１８によってＳＣＳＩ層１６に送達されることになり、これは読取りによって要求された戻りデータがメモリ３０内にあることも示す。データを読み取るためのｉＳＣＳＩ／ｉＳＥＲプロトコルの詳細については、上記で参照した「iSCSI Extensions for RDMA Specification」という文献に記載されている。
【００２１】
図４および図５は、カーネル・スペース内のＲＮＩＣドライバ２２への呼出しを行う必要なしに、ＲＤＭＡ関連操作を実行するためにＲＮＩＣ２４と直接通信するために非特権ユーザとしてユーザ・スペース１０によりｉＳＥＲライブラリ内の機能をｉＳＣＳＩ層が呼び出す方法を示している。特定の諸実施形態では、メモリ領域が割り振られ、ＳＴａｇがカーネル・スペース１０によりｉＳＥＲ機能によって入手された後、ｉＳＣＳＩ読取りおよび書込み操作を実現するためのＲＤＭＡ読取りおよび書込み操作はユーザ・スペース１０により呼び出され、それにより、カーネル・スペース１２によりＲＮＩＣドライバ２２を呼び出す必要性を回避する。カーネル・スペース１２による呼出しはユーザ・スペース１０による呼出しよりシステムにかかるリソース割振りの負担が大きくなるので、入出力要求を処理するためにカーネル・アドレス・スペースを回避すると、ノード・プロセッサの負担が軽減される。したがって、入出力操作はユーザ・アドレス・スペースで実行されるプロセスにより進行し、それにより、カーネル・アドレス・スペースを回避する。
【００２２】
上述の操作では、ｉＳＣＳＩ層１８はｉＳＥＲライブラリ２０内の機能を呼び出している。代替の諸実施形態では、ＳＣＳＩ層１６またはアプリケーション１４などの他の層は、それぞれの専用のｉＳＣＳＩ  ＰＤＵを構築し、ｉＳＥＲ層２０を呼び出して、ｉＳＥＲライブラリ２０により行われるＲＤＭＡ呼出しによりＳＣＳＩ読取りおよび書込み要求を実現することができる。同様に、アプリケーションによっては、それ専用のコード内にＳＣＳＩ層の機能を含むことができる。
【００２３】
さらに、ｉＳＣＳＩ層１８は、カーネル・スペース１２で実行されるＲＮＩＣドライバ２２を呼び出す必要性なしに、ユーザ・スペース１０によって行われるｉＳＥＲライブラリ２０への呼出しにより上述のものとは異なる追加のタイプのＲＤＭＡ操作を呼び出すことができる。さらに、ＲＮＩＣは、ユーザ・スペース１０で実行されるｉＳＥＲライブラリ２０内の機能を呼び出して、カーネル・スペース１２を通過せずに状況およびメッセージをｉＳＣＳＩ層１８に返すことにより、状況およびその他の情報を返すことができる。
【００２４】
追加実施形態の詳細
本明細書に記載した諸実施形態は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを生産するための標準的なプログラミングおよび／またはエンジニアリング技法を使用する方法、装置、または製品として実現することができる。本明細書で使用する「製品（article of manufacture）」という用語は、ハードウェア・ロジック（たとえば、集積回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）など）または磁気記録媒体（たとえば、ハード・ディスク・ドライブ、フレキシブル・ディスク、テープなど）、光学記憶装置（ＣＤ−ＲＯＭ、光ディスクなど）、揮発性および不揮発性メモリ・デバイス（たとえば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、ファームウェア、プログラマブル・ロジックなど）などのコンピュータ可読媒体で実現されたコードまたはロジックを指す。コンピュータ可読媒体内のコードは、プロセッサによってアクセスされ、実行される。好ましい諸実施形態が実現されるコードはさらに、伝送媒体により、またはネットワークを介してファイル・サーバからアクセス可能なものにすることができる。いわゆるプログラムという物としても実現することができる。このような場合、そのコードが実現される製品は、ネットワーク伝送回線、ワイヤレス伝送媒体、空間を伝搬する信号、電波、赤外線信号などの伝送媒体を含むことができる。したがって、「製品」は、そのコードが実施される媒体を含むことができる。さらに、「製品」は、そのコードが実施され、処理され、実行されるハードウェアおよびソフトウェア・コンポーネントの組合せを含むことができる。当然のことながら、当業者であれば、本発明の範囲を逸脱せずにこの構成に対して多くの変更を行うことができ、製品は当技術分野で知られている任意の情報担持媒体を含むことができることを認識するであろう。
【００２５】
上述の操作は回路によって実行することができ、「回路」はハードウェアまたはソフトウェアのいずれか一方あるいはそれらの組合せを指す。上述の諸実施形態の操作を実行するための回路は、集積回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）などのハードウェア・デバイスを含むことができる。また、この回路は、集積回路などのプロセッサ・コンポーネントと、メモリなどのコンピュータ可読媒体内のコードも含むことができ、そのコードは上述の諸実施形態の操作を実行するためにプロセッサによって実行される。
【００２６】
上述の諸実施形態では、ユーザ・スペース１０によりＲＤＭＡ転送機能を実現してｉＳＣＳＩ読取りおよび書込み操作を実行するためにｉＳＥＲ層を使用している。追加の諸実施形態では、ｉＳＣＳＩ層がｉＳＥＲ層を呼び出して、ＲＤＭＡ転送操作を実行し、状況、メッセージなどを提供するためなど、読取りおよび書込み操作以外の操作を実行することができる。
【００２７】
上述の実現例では、物理層がイーサネット・プロトコルを使用している。代替実現例では、イーサネットの代わりに、シリアル・アドバンスト・テクノロジー・アタッチメント（Serial Advanced Technology Attachment：ＳＡＴＡ）、インフィニバンド（Infiniband）、シリアル接続ＳＣＳＩケーブルなど、パケットのリンク間チェックサム／ＣＲＣ（またはその他のデータ保護技法）を提供する代替プロトコルを使用することができる。
【００２８】
上述の実現例では、トランスポート層がｉＳＣＳＩプロトコルを有している。代替実現例では、パケットで入出力コマンドを伝送し、エンドツーエンド・チェックサム／ＣＲＣ（またはその他のデータ保護技法）を提供するために当技術分野で知られているその他のプロトコルを使用することができる。
【００２９】
上述の実現例では、パッケージ化した入出力コマンドがＳＣＳＩコマンドを含んでいる。代替実現例では、コマンドは、アドバンスト・テクノロジー・アタッチメント（Advanced Technology Attachment：ＡＴＡ）コマンドなど、ＳＣＳＩ以外の入出力コマンド・フォーマットにすることができる。
【００３０】
上述の諸実施形態では、ユーザ・スペースによりＲＤＭＡデータ転送機能にアクセスするためにｉＳＣＳＩ層がｉＳＥＲ層に対する呼出しを行っている。追加の諸実施形態では、アプリケーションまたはその他のデータ転送プロトコルなど、ユーザ・スペースで実行されるｉＳＣＳＩ以外のデータ転送プロトコル層がｉＳＥＲ層を呼び出して、ＲＤＭＡデータ転送機能に直接アクセスすることができる。
【００３１】
図４および図５は、特定の順序で行われる特定の操作を記載している。代替実現例では、特定の操作を異なる順序で実行するか、変更するか、または除去することができる。その上、上述のロジックに複数ステップを追加することができ、それでもなお上述の実現例に適合することができる。さらに、本明細書に記載した操作は順次行われる場合もあれば、特定の操作が並行して処理される場合もある。さらに、操作は単一処理装置によって実行される場合もあれば、分散処理装置によって実行される場合もある。
【００３２】
諸実現例に関する上記の説明は、例示および説明のために提示されたものである。網羅的なものにするため、あるいは開示した正確な形式に本発明を制限するためのものではない。上記の教示を考慮すると、多くの変更および変形が可能である。本発明の範囲はこの詳細な説明によって制限されるのではなく、特許請求の範囲によって制限されるものである。上記の明細書、例、およびデータは、本発明の構成の製造および使用に関する完全な記述を提供するものである。本発明の精神および範囲を逸脱せずに本発明の多くの実現例が可能であるので、本発明は特許請求の範囲に帰するものである。
【図面の簡単な説明】
【００３３】
【図１】諸実施形態が実現されるネットワーク・ノードの一例を示す図である。
【図２】上述の諸実施形態によるコンピューティング・アーキテクチャの一例を示す図である。
【図３】従来技術で知られているようにパケット・フォーマットを示す図である。
【図４】諸実施形態によりデータを転送するために実行される操作を示す図である。
【図５】諸実施形態によりデータを転送するために実行される操作を示す図である。
【符号の説明】
【００３４】
２  ノード
６  プロセッサ
８  オペレーティング・システム
１０  ユーザ・アドレス・スペース
１２  カーネル・アドレス・スペース
１４  アプリケーション
１６  ＳＣＳＩ
１８  ｉＳＣＳＩ
２０  ｉＳＥＲライブラリ
２２  ＲＮＩＣドライバ
２４  ＲＮＩＣ
２６  ＲＤＭＡ
２８  ネットワーク層
３０  メモリ
３２  メモリ領域
３４  メモリ変換テーブル
３６  送信キュー
３８  受信キュー
４０  完了キュー
【図１】
2005310130.tif 000003
【図２】
2005310130.tif 000004
【図３】
2005310130.tif 000005
【図４】
2005310130.tif 000006
【図５】
2005310130.tif 000007