JP4564970B2 - ライトウエイト入力/出力プロトコル - Google Patents

ライトウエイト入力/出力プロトコル Download PDF

Info

Publication number
JP4564970B2
JP4564970B2 JP2006546957A JP2006546957A JP4564970B2 JP 4564970 B2 JP4564970 B2 JP 4564970B2 JP 2006546957 A JP2006546957 A JP 2006546957A JP 2006546957 A JP2006546957 A JP 2006546957A JP 4564970 B2 JP4564970 B2 JP 4564970B2
Authority
JP
Japan
Prior art keywords
server
client
credit
request
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006546957A
Other languages
English (en)
Other versions
JP2007527057A (ja
Inventor
エイチ.モハメド アーメド
エフ.ヴォールム アンソニー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2007527057A publication Critical patent/JP2007527057A/ja
Application granted granted Critical
Publication of JP4564970B2 publication Critical patent/JP4564970B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/26Special purpose or proprietary protocols or architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)
  • Information Transfer Systems (AREA)
  • Bus Control (AREA)

Description

本発明は一般に、リモートファイルアクセスのシステムおよび方法に関し、より詳細には、リモートダイレクトメモリアクセス(遠隔直接記憶呼出し:RDMA)を使用して入力/出力処理をオフロードする技術に関する。
コンピューティング環境では、一般に乏しいCPUリソース(資源)を節約することが望ましい。アプリケーションサーバノードのネットワークなど、こうした一部の環境では、こうした節約は特に重要である。ネットワークが速くなるにつれて、パケットを処理し、I/O(入力/出力)操作を実行させるためのCPUに対する需要がより多くなり、その結果、アプリケーションパフォーマンス(実行)が遅くなる。このことは、データベースのように本質的にI/Oを集中的に行うアプリケーションには特に不利である。
この問題を改善する1つの手法は、CPUから過度のI/Oおよびネットワーク処理をオフロードする(取り外す)ことである。ネットワーク環境では、NFSやSMB/CIFSなど、分散されたファイルシステムおよび転送プロトコルを使用することによって、I/O要求をローカルマシンからリモートマシン(遠隔地の装置)に送信することができる。しかし、こうした手法を使用することによって、ローカルマシンの処理の大幅な節約を達成できるとは限らない。
単一のマシンの操作状況(context)では、I/Oタスクを直接メモリアクセス(DMA)コントローラへオフロードすることによって、I/O処理の負荷を軽減することができる。リモートダイレクトメモリアクセス(RDMA)技術とは、ネットワーク接続された複数のコンピュータ用にごく最近開発されたDMAの拡張機能である。RDMAは、ソースまたは宛先のマシンのCPUおよびオペレーティングシステムの関与を必要とせずに、RDMA対応ネットワークインターフェイスカード(NIC)を備えていて、通信している2つのマシンのメモリバッファ間でのデータの移動を許容する。RDMAを使用してI/O処理をリモートマシンへオフロードし、それによってローカルマシンは、CPUサイクルをアプリケーションのために再利用することができるようになる。RDMAは、仮想インターフェイスアーキテクチャ(VIA)、InfiniBand(インフィニバンド)、iWarp(アイワープ)などの、高速、高帯域の相互接続技術で活用されてきている。これらの相互接続は、特に、データセンタ、または他のローカルのファイル共有環境内のサーバノードのクラスタ間の高信頼性ネットワーク接続用に設計されている。
ローカルのオフロード側ノードとリモートマシンとの間の通信を定義するプロトコルは、RDMA技術に関連付けられている機能が十分に使用され、それらの利点が有効に得られるように設計されなければならない。
従って、本発明によるライトウエイト(ライトウエイト)入力/出力(LWIO)プロトコルが必要とされている。
本発明の一態様によれば、I/Oタスクを第1のコンピュータから第2のコンピュータにオフロードするシステムが提供される。このシステムは、第1のコンピュータ上で稼働するクライアント、および第2のコンピュータ上で稼働するサーバを含む。システムは、第1のコンピュータと第2のコンピュータとをリンクする1つまたは複数のRDMAチャネルをさらに含む。クライアントおよびサーバは、ネットワーク発見段階およびI/O処理段階を含むLWIOプロトコルに従って通信する。LWIOプロトコルは、SMB/CIFSなど別のネットワークプロトコルとともに使用され、第2のプロトコルのセキュリティおよび認証インフラストラクチャを活用することができる。よりよいセキュリティモデルを提供するために、このプロトコルでのI/Oモデルは非対称であり、読み取りはRDMAを使用して実施され、書き込みは送信操作を使用して実施される。
本発明の別の態様によれば、I/Oタスクを第1のコンピュータから第2のコンピュータにオフロードする方法が提供される。この方法は、2つのコンピュータ上の共通のRDMA対応通信装置を使用し、ライトウエイト入力/出力(LWIO)クライアント−サーバプロトコルに関連付けられる。プロトコルは一般に、発見段階、続いてI/O処理段階を含む。この発見段階中、クライアントおよびサーバは、共有のRDMA対応プロバイダの最小リストを割出しする。I/O処理段階中、クライアントは、オフロードを求めるI/O要求を第2のマシンに送る。
発見段階中、クライアントは、最初にサーバからサーバ要求レジュームキー(server request resume key)を取得する。次いでクライアントは、サーバへのパイプを開き、それを介して第1のマシン上のRDMA対応プロバイダのリストを含む交渉要求を送信する。サーバは、第1のマシン上のプロバイダと一致する第2のマシン上の使用可能なプロバイダのリストを含む交渉応答を、そのパイプを介して送信する。次いでクライアントは、共有のプロバイダを介したサーバへのRDMA接続を設ける。クライアントおよびサーバは、新しい接続を互いに認証する。次いでクライアントは、使用する1つまたは複数のファイルをサーバに登録する。
I/O処理要求メッセージは、終了メッセージ、キャンセルメッセージ、読み取りメッセージ、書き込みメッセージ、ベクトル化読み取りメッセージ(vectored read message)、ベクトル化書き込みメッセージ(vectored write message)を含む。プロトコルは、安全上の理由から、非対称のI/Oモデルを特徴とする。読み取りデータは、RDMA書き込み操作を使用してクライアントに送信され、書き込みは、通常の送信を使用して完了される。読み取り要求および書き込み要求は、サーバによってポーリングモードまたは割り込みモードで完了されるようにクライアントによって指定することができる。クライアントが非ポーリングモードでの完了を指示した場合、サーバは、RDMA転送を介して状況ブロックを第1のコンピュータに送信することによってI/O処理要求を完了する。クライアントがポーリングモードでの完了を指示した場合、クライアントは、割り込み要求メッセージを介してI/Oの完了後にサーバによって起動されることを要求することができる。
本発明の別の態様によれば、I/Oオフロードプロトコルでバッファを管理する方法が提供される。この方法は、バッファクレジット機構(buffer credit mechanism)の使用を伴う。サーバ−クライアントクレジットトランザクションは、サーバによって開始され、完了される3方向ハンドシェイクを含む。サーバは、いくつかのクレジットに設定された情報フィールドを含めて、デルタクレジット(delta credit)メッセージをクライアントに送信する。その数が負の数−Nである場合、クライアントはN個のクレジットを捨てる必要がある。
本発明の他の態様は、コンピュータプログラムおよびデータ構造としてコンピュータ可読媒体に組み込まれた上記の特徴を含む。
特許請求の範囲には本発明の特徴を詳しく記載しているが、本発明、並びにその目的および効果は、以下の詳細な説明を添付の図面と併せ読むことによって最もよく理解することができる。
本発明のいくつかの実施形態を、図1〜図17Eを参照して以下で説明する。しかし、これらの図に関して本明細書に示した詳細な説明は例示のためのものであり、本発明はこれらの実施形態を超えて広がることを当業者は容易に理解されよう。
図1は、本発明の態様を組み込むことができる代表的なネットワーク式クライアント/サーバ環境のいくつかの特徴をおおまかに示す概略図である。図1には、ホストA101およびホストB121とラベル付けされた2つのコンピュータマシンを示している。本発明は異なる多くのタイプおよび使用のコンピュータを含む環境で実施することができるが、1つの代表的なシナリオでは、ホストA101は、データベースサーバなど、I/Oを集中的に行う作業が課せられるアプリケーションサーバマシンとして働く。
ホストA101およびホストB121のそれぞれは、一方のマシンから他方のマシンへのネットワーク式データ通信を許可するいくつかのネットワークインターフェイスカード(NIC)109、111、113、133、135、137を含む。これらのNICのうち、RDMAデータ転送を可能にするのはNIC109、111、135、137である。示したように、非RDMAネットワークリンク119およびRDMAチャネル117が2つのホスト101と121との間に存在している。
ホストA101では、カーネルモードI/O読み取り/書き込みサービス105と対話する、I/Oタスクの処理の責任を負うアプリケーションに関連付けられているLWIOクライアントアプリケーション103が実行されている。LWIOクライアント103は、I/O処理をホストA101からホストB121にオフロードするために使用される。ホストB121では、LWIOサーバ123が実行されている。本明細書に記載したLWIOプロトコルによれば、LWIOクライアント103は、LWIOサーバ123と通信する。LWIOクライアント103およびLWIOサーバ123は、送られたバッファ107、127を使用して、ファイル関連のデータを、RDMAチャネル接続117を介して直接転送することができる。読み取りタスクおよび書き込みタスクは、LWIOプロトコルメッセージを介して、ホストB121にオフロードされる。サーバ123は、ハードディスク131へのインターフェイスとして働くファイルシステム129にI/O要求を伝える。
一般に、RDMA接続117には2種類のメッセージが関連付けられている。第1のタイプは、宛先マシンで割り込みを生成する通常のネットワーク送信/受信である。第2のタイプはRDMA読み取り/書き込みであり、リモートCPUの援助無しに、従って割り込みを生成する必要なく、リモートマシン上のメモリ空間へのアクセスが行われる。リモートCPUは、RDMAのために公開されたメモリ領域を割出しするが、一般にはRDMA操作がいつ実行されるかを知らない。
本明細書に記載した本発明の一実施形態では、LWIOプロトコルは、別のプロトコルの既存のセキュリティおよび認証のインフラストラクチャを利用できるように、SMBやCIFSなど別のネットワークプロトコルとともに使用される。これは、LWIOプロトコルのオーバーヘッドを最低限に抑えるのを助ける。図1に示すように、ホストB121上のLWIOサーバ123は、SMBサーバ125の上で動作する。同様にSMBクライアント(図示せず)もホストA101上で稼働し、LWIOクライアントアプリケーション103と対話する。
LWIOプロトコルは、発見段階(discovery phase)、次いでI/O段階(I/O phase)の2段階を含む。本明細書に記載した実施形態に関連付けられているデータ構造では、データサイズは次の通りである。
Figure 0004564970
図2は、本発明の一実施形態におけるLWIOプロトコルの発見段階で行われるステップを示している。LWIOサーバが実行されているホストに関して、ステップ201で、LWIOサーバをそのホストマシン上で稼働しているSMB/CIFSサーバに登録する。この登録に従って、ステップ203で、SMB/CIFSサーバは、リモートホスト上で稼働しているSBM/CIFSクライアントに、LWIOサーバが使用可能であることを通知する。ステップ205で、LWIOクライアントは、サーバ要求レジュームキーを要求する。再開キーとは認証機構であり、これについては、本出願と同じ譲受人を有する別の出願、すなわち、参照により本明細書に組み込まれている「Method and System for Accessing a File (Resume Key)」という名称の2003年10月24日に出願した米国特許出願第 号の明細書に開示されている。
ステップ207で、LWIOサーバは、サーバ要求レジュームキーをクライアントに返す。本発明の一実施形態では、サーバ要求レジュームキーは、次の構造を有する。
Figure 0004564970
図3は、サーバ要求レジュームキー219の表現例を提示する。ResumeKey(レジュームキー)221、Timestamp(タイムスタンプ)223、およびPid(ピッド)225は、サーバ上で生成され、クライアントからは見えない。Context(コンテキスト)229は、サーバに連絡するためにLWIOクライアントによって使用されるUNC名を含むアレイである。ContextLength(コンテキストレングス)227は、Context229におけるバイト数である。
ネットワークの発見
クライアントアプリケーションは、サーバ要求レジュームキー219を受信すると、コンテキストフィールド229からサーバUNC名を取り出す。図2に戻って、ステップ209で、クライアントはLWIOサーバへのパイプを開く。パイプは、以下でさらに詳しく説明するように、ネットワークで使用可能なRDMA対応装置を自動的に発見するために使用される。これは本発明の重要かつ有用な特徴であり、一般にVIAネットワークおよび同様のネットワークには、ARPのようなアドレス解決機構がない。
次にクライアントは、サーバに対して、LWIOプロトコルとともに使用可能なそのRDMA対応装置(「プロバイダ」)のリストについての照会を行う。照会は、クライアントが構築し、ステップ211で新しく開かれたパイプを介してサーバに送信する交渉(ネゴシエーション)要求を介して達成される。本発明の一実施形態では、交渉要求は、次の構造を有する。
Figure 0004564970
図4Aは、本発明の一実施形態による交渉要求パケット231の表現例を示す。交渉要求は、制御ヘッダ233、固定長Unicode(ユニコード)クライアント名フィールド235、キーとして使用されるクライアントUUID237、応答を受信するローカルバッファサイズ239、およびプロバイダのリスト241を含む。制御ヘッダ233には、Protocol(プロトコル)Id「LWIO」243がヘッダの最初の4バイトとして格納されている。
RevId245は、現在定義されている値0x1001、LWIO_REV_IDを保持する。Opcode247は、現在定義されている値0xfe、LWIO_CONTROL_OPCODE_NEGOTIATEを保持する。Length(レングス)249は、すべての演算コード固有のデータを含めて、サーバに送信される完全なパケットのバイト単位のサイズである。
ClientName(クライアントネーム)235は、サーバがクライアントを識別するために使用する。Key(キー)237は、後述するように、その後のネットワーク固有の認証手順で使用される。ResponseLength(レスポンスレングス)239は、後述するように、サーバからの交渉応答を受信するバッファのサイズである。ProviderCount(プロバイダカウント)251は、クライアントマシンに関連付けられているプロバイダの数であり、クライアントはそれについてサーバに知らせている。プロバイダリスト241は、ProviderCountプロバイダのリストを含む。
プロバイダリスト241の要素の中のName(ネーム)253はプロバイダの名前である。互換性のあるネットワークを検出するために、クライアントおよびサーバは、同じ名前を同じプロバイダに使用することが好ましい。InstanceCount(インスタンスカウント)255は、特定のプロバイダタイプの装置数である。インスタンステーブル257は、ネットワーク/識別子の対のテーブルであり、1対は、装置固有の方法で、リモート接続をどのように形成するかを説明するよう働く。HostAddressLen(ホストアドレスレン)259は、ネットワーク固有のホストアドレス263の長さである。DiscriminatorLen(ディスクリミネータレン)261は、ネットワーク固有の識別子265の長さである。これらの長さフィールドに続いて、HostAddressLenバイトのホストアドレス263、およびDiscriminatorLenバイトの識別子265がある。
図2に戻ると、クライアントのプロバイダのリストを含む交渉要求を受信すると、ステップ213で、サーバは、クライアントと共通するRDMA対応通信装置を割出しする。ステップ215で、サーバは、共有プロバイダのリストを含めて、交渉応答をパイプを介してクライアントに送信する。本発明の一実施形態では、交渉応答は、次の構造を有する。
Figure 0004564970
図4Bは、本発明の一実施形態による交渉応答267の表現例を示す。制御ヘッダ269は、ここではLength(レングス)271が応答メッセージ267のサイズを反映することを除いて、交渉要求のものと同様である。SrvName(サーバネーム)273は、サーバ名を保持する。Key(キー)275は、クライアントによって使用するためのサーバ生成GUIDである。以下でさらに説明するように、クライアントは、このKeyを、共通の通信装置のうちの1つを使用する新しい接続を介して認証要求でサーバに返送する。ProviderCount(プロバイダカウント)277は、プロバイダリスト279内のプロバイダ数である。プロバイダリスト279は、サーバおよびクライアントに共通のプロバイダのリストを含む。クライアントが実際にこれらのプロバイダに接続することができるという保証はない。
図2に戻ると、この時点で、サーバおよびクライアントは通信装置情報を共有しており、共通プロバイダの最小リストが割出しされている。ステップ217で、クライアントは、共有の装置のうちの1つまたは複数を介したLWIOサーバへの1つまたは複数のRDMA接続を設ける。本発明の一実施形態では、本明細書に記載するように、クライアントからサーバへの通信には次の演算コードが定義される。
Figure 0004564970
クライアントからサーバへの通信では、次の定義されたフラグが変更子(modifier)として使用される。
Figure 0004564970
LWIOプロトコルでの対応するクライアントからサーバへのメッセージは、共通のヘッダ構造を特徴とする。本発明の一実施形態では、共通ヘッダは以下のフォーマットを有する。
Figure 0004564970
接続の認証
図5は、LWIOプロトコルの最初の段階の残りの間に本発明の一実施形態においてクライアントおよびサーバによって行われるステップを示している。ステップ601で、クライアントは、上述したように、共有の通信装置を介してサーバへの接続を確立する。ここでクライアントおよびサーバは、新しい接続を互いに認証する。ステップ603で、クライアントは、認証要求メッセージ(LWIO_OPCODE_AUTH)をサーバに送信する。サーバ側およびクライアント側のスプーフィングを防ぐために認証が行われる。認証がタイムリーに完了しない場合、接続が中断される。
図6Aは、本発明の一実施形態によるクライアント認証要求メッセージの表現例を示す。認証メッセージ617は、共通ヘッダ619、次いでLWIO_AUTH_PARAMS構造621を含む。ヘッダ619の中のLength(レングス)623は、サーバに送信されるバイト数(共通ヘッダ619のサイズプラスLWIO_AUTH_PARAMS621のサイズ)に設定される。Opcode(オプコード)625はLWIO_OPCODE_AUTH(0x6)に設定される。Flags(フラッグス)627はLWIO_HDR_FLAG_INTERRUPTに設定される。Cookie(クッキー)629は、これおよび他のクライアントプロトコルメッセージでは、クライアントによって選択された値に送信され、サーバの応答で返送される。Cookie値は一般に、要求をサーバの応答に一致させるために使用される。DataVa(データVa)631は、サーバがサーバ認証パラメータにRDMAすべきアドレスに設定される。DataMh(データMh)633は、DataVa631に関連付けられているRDMAメモリハンドルを保持する。
本発明の一実施形態では、LWIO_AUTH_PARAMS構造は、次のフォーマットを有する。
Figure 0004564970
認証メッセージ617の中のLWIO_AUTH_PARAMS621は、パケットの第2の部分を形成する。Magic(マジック)635は「LWIO」に設定される。RevId637はLWIO_REV_IDに設定される。Endian(エンディアン)639はsizeof(ULONG_PTR)に設定される。PageSize(ページサイズ)641は、CPUページサイズ(32ビットマシンでは4k、64ビットマシンでは8k)に設定される。BaseSequence(ベースシーケンス)643は0に設定される。MaxRdmaWindowSize(マックスRDMAウインドウサイズ)645は、クライアントがRDMA転送で受け入れることができる最大バイト数に設定されるものとし、図に描いた実施形態では、64kに設定される。MaxSendBufferSize(マックスセンドバッファサイズ)647は、単一の要求でクライアントがサーバに送信することができるバイト数に設定されるものとし、図に描いた実施形態では、1kに設定される。MaxRecvBufferSize(マックスレシーブバッファサイズ)649は、サーバからデータを受信するためにクライアントが送ったバイト数に設定されるものとし、図に描いた実施形態では、16バイトに設定される。HeaderSize(ヘッダサイズ)651は、LWIO制御ヘッダ619でのバイト数に設定される。Credits(クレジット)652は、クライアントが有したい最初のバッファクレジット数に設定される。クレジットの使用については、以下でさらに説明する。サーバは、クライアントの要求を満たしても満たさなくてもよい。RdmaReadSupported(RMADAリードサポーテッド)653は、クライアントがRDMA読み取り操作をサポートしていない場合は0に設定され、クライアントがRDMA読み取り操作をサポートしている場合は1に設定される。
LWIO_AUTH_PARAMS構造の一部は、1つまたは複数の選択肢の組である。選択肢は、認証をより柔軟にするために使用される。各選択肢は、選択肢のリストを終了させるヌルの選択肢として働く、選択肢コードのみを有するリスト内の最後の選択肢LWIO_AUTH_OPTION_END以外は、選択肢コード、長さ、およびデータを有する。認証メッセージでは、クライアントはサーバに、Key(LWIO_AUTH_OPTION_KEY)およびSignature(LWIO_AUTH_OPTION_SIGNATURE)の選択肢を送信する。Key(キー)655は、交渉応答でサーバによって以前返されたKeyに設定される。Signature(シグネチャ)657は、署名なしのLWIO_AUTH_PARAMS621のMD5署名である。
図5に戻って、ステップ605で、認証メッセージで送信されたKeyがパイプを介して交渉応答で返されたキーに一致する場合、サーバは、クライアントによって認証メッセージで提供されたDataVaアドレス、および関連のDataMhメモリハンドル宛てに、認証応答として、8バイトのSessionId(セッションId)を含むLWIO_AUTH_PARAMS構造をクライアントにRDMA(リモートダイレクトメモリアクセス)する。ステップ607で、サーバは認証を完了するためにLWIO_MSG_STATUS_RESPONSEを送信する。
図6Bは、本発明の一実施形態においてサーバによって返されるLWIO_AUTH_PARAMS構造659の表現例を示している。Magic(マジック)661は「LWIO」に設定される。RevId663はLWIO_REV_IDに設定される。Endian(エンディアン)665はsizeof(ULONG_PTR)に設定される。PageSize(ページサイズ)667はCPUページサイズに設定される。BaseSequence(ベースシーケンス)669は、(クライアントBaseSequence+1)に設定されるものとする。MaxRdmaWindowSize(マックスRDMAウインドウサイズ)671は、クライアントがRDMA転送で受け入れることができる最大バイト数に設定されるものとし、図に描いた実施形態では、512kに設定される。MaxSendBufferSize(マックスセンドバッファサイズ)673は、単一の応答でサーバがクライアントに送信するバイト数に設定されるものとし、図に描いた実施形態では、16バイトに設定される。MaxRecvBufferSize(マックスRECVバッファサイズ)675は、クライアントからデータを受信するためにサーバが事前に送ったバイト数に設定されるものとし、図に描いた実施形態では、8kに設定される。HeaderSize(ヘッダサイズ)677は、共通のヘッダにおけるバイト数に設定される。Credits(クレジット)679は、サーバがクライアントに使用可能な最初のクレジット数に設定される。RdmaReadSupported(RDMAリードサポーテッド)681は、サーバがRDMA読み取りをサポートしていない場合は0に設定され、サーバがRDMA読み取りをサポートしている場合は1に設定される。サーバは、Key(LWIO_AUTH_OPTION_KEY)683、SessionId(LWIO_AUTH_OPTION_SESSION_ID)685、およびSignature(LWIO_AUTH_OPTION_SIGNATURE)687の選択肢を送信する。Key(キー)683は、交渉要求でクライアントが前もって送信したKeyに設定される。SessionId(セッションID)685値は、後述するように、クライアントファイルをサーバに登録する際にクライアントによって使用される。Signature(シグネチャ)687は、署名なしのLWIO_AUTH_PARAMSのMD5署名である。
本発明の一実施形態では、LWIO_MSG_STATUS_RESPONSE構造は、次のフォーマットを有する。
Figure 0004564970
図6Cは、本発明の一実施形態において認証を完了させるためにサーバによって返されるLWIO_MSG_STATUS_RESPONSE689の表現例を示している。Cookie691は、認証メッセージのヘッダ内のクライアントによって設定されたクッキー値に設定される。Information(インフォメーション)693は、LWIO_AUTH_PARAMSプラス8バイトのバイト数に設定される。Status(ステータス)695は、0x0(成功を示す)または0xC0000022(「アクセス拒否」を示す)に設定される。
ファイル登録
図5に戻って、ステップ609で、新しい接続がクライアントおよびサーバによって互いに認証されると、クライアントは、使用するファイルのサーバへの登録を開始する。ファイルのファイル操作は、クライアントが使用するファイルをサーバに登録するまで、リンクを介して処理されない。
図7Aは、本発明の一実施形態によるクライアントからサーバに送信されるファイル登録メッセージの表現例を示している。登録メッセージ701は、共通ヘッダ703、次いでLWIO_FID_PARAMS構造705を含む。Length(レングス)707は、サーバに送信されるバイト数(ヘッダ703のサイズプラスLWIO_FID_PARAMS705のサイズ)に設定される。Opcode(オプコード)709はLWIO_OPCODE_REGISTER(0×7)に設定される。Flags(フラッグス)711はLWIO_HDR_FLAG_INTERRUPTに設定される。このクライアントメッセージおよびその後のクライアントメッセージでは、Credits(クレジット
)713は、クライアント上の保留中のI/O要求の数に設定される。Creditsフィールドは、より多くのクレジットを接続に割り振ることについてのサーバへのヒントとしての役割を果たし、従って以下でさらに説明するように、追加の未解決のI/O要求を許可する。1回の未解決のクライアント要求の数が「Credits」値を超えることはできない。上述したように、Cookie(クッキー)715は、クライアント指定の値に設定される。
本発明の一実施形態では、LWIO_FID_PARAMS構造は、次のフォーマットを有する。
Figure 0004564970
ファイル登録メッセージ701のLWIO_FID_PARAMS705では、ResumeKey(レジュームキー)717は、最初のファイルアクセスチャネルを介して返されたサーバ要求レジュームキーに設定される。SessionId(セッションId)719は、接続認証段階中、サーバによって返されたSessionIdに設定される。FlagsAndAttributes(フラッグスアンドアンドリブーツ)721は、最初にファイルを開くために使用されるWin32 Create Flagsに設定される。
図5に戻って、ステップ611で、サーバはファイル登録を完了するためにLWIO_MSG_STATUS_RESPONSEで応答する。図7Bは、本発明の一実施形態においてサーバによって送信されるLWIO_MSG_STATUS_RESPONSE723の表現例を示している。Information(インフォメーション)727は、I/O要求を送信するときに使用されるFid(FileID)に設定される。Status(ステータス)729は、0×0(成功)、または失敗時は別のNTSTATUSコードに設定される。Cookie(クッキー)725は、ファイル登録メッセージのヘッダ内にクライアントが設定したクッキー値に設定される。
I/O処理
この時点で、クライアント接続が確立され、ファイルが登録されており、LWIOプロトコルのI/O処理段階が開始する。LWIOプロトコルの実施形態の1つの重要な特徴は、読み取りおよび書き込みについての非対称のI/Oモデルである。読み取り操作はRDMAを使用して実施され、書き込みは送信操作を使用して実施される。より良いセキュリティモデルを提供するように、書き込みの実施にはRDMAは使用されない。サーバがRDMAのためにNIC(ネットワークインターフェイスカード)を介してそのアドレス空間を公開すると、悪意のあるクライアントによって悪用されるおそれのあるデータ破損の脆弱性がもたらされる。このシナリオでは、悪意のあるクライアントは、ループ内で所与のサーバ仮想アドレスに対するRDMA書き込み操作を発行する。サーバアドレス空間は有限であり、ある時点でサーバ仮想アドレスを再利用しなければならないため、悪意のあるクライアントは、最終的に、異なる接続に同じ仮想アドレスを使用するサーバをつかまえ、異なるクライアントに関連付けられている可能性のあるサーババッファにデータが書き込まれてしまう。LWIOプロトコルでの非対称のI/Oモデルは、この可能性を防ぐ。この特徴は、LWIOプロトコルと、DAFS(Direct Access File System)などの他のRDMAベースのファイル転送プロトコルとの間の主な違いである。
図5に戻って、ステップ613で、クライアントはI/O処理要求を送り始める。サーバからクライアントへのI/O要求の完了は、非ポーリングモードまたはポーリングモードのいずれかで行われる。非ポーリングモードでは、I/Oの完了は、通常の送信/受信メッセージを使用した割り込みベースである。ポーリングモードでは、I/Oの完了は、RDMAを使用し、割り込みベースではない。
図8の流れ図は、LWIOサーバからの一般的な観点から、ポーリングモードまたは非ポーリングモードでのI/O要求の完了に関して本発明の一実施形態で行われるステップをおおまかに示している。クライアントI/O要求は、サーバが送信後(post−send)メッセージ(CPUの割り込み)またはRDMAメッセージを返送するべきかどうかを指定する。ステップ801で、サーバは、LWIO_HDR_FLAG_INTERRUPTフラグがクライアントI/O要求メッセージの共通ヘッダに設定されているかどうかを割出しする。このフラグが設定されている場合、ステップ803で、サーバは、通常の送信を使用してLWIO_MSG_STATUS_RESPONSEを介してクライアント要求を完了する。LWIO_HDR_FLAG_INTERRUPTフラグが設定されていない場合(ポーリングモード)、ステップ805で示すように、サーバは、LWIO_IO_STATUS_BLOCKをクライアントにRDMAすることによってクライアント要求を完了する。
ポーリングモードでのクライアントの起動
ポーリングモードでは、クライアントは、サーバからのI/Oの完了を待つ間スリープしたい場合がある。この場合の完了はRDMAを介してクライアントに送信されるため、クライアントを起動させて、完了が行われたことをクライアントに通知する機構が必要となる。クライアントは、起動したい場合、図8のステップ807でサーバによって受信された割り込み要求(LWIO_OPCODE_INTERRUPT)メッセージをサーバに送信する。割り込み要求を受信するサーバは、サーバにおいてI/O要求が完了する(ステップ809)まで応答を送信しない。完了は、ステップ811で、通常の送信を介してクライアントに送信され、クライアントに割り込みがかかる。所与のクライアント接続について、未解決とすることができる割り込みメッセージは1つのみである。
図9Aは、本発明の一実施形態においてクライアントからサーバに送信される割り込み要求メッセージの表現例を示している。メッセージは、共通ヘッダ815を含んでいる。Opcode(オプコード)817はLWIO_OPCODE_REGISTER(0×9)に設定される。Flags(フラッグス)819は(LWIO_HDR_FLAG_INTERRUPT|LWIO_HDR_FLAG_CONTROL)(0×C0)に設定される。Credits(クレジット)821は、クライアント上の保留中のI/O要求の数に設定され、Cookie(クッキー)823は、クライアント指定の値に設定される。
サーバは、別のI/O要求が処理された後、割り込み要求メッセージに応答する。図9Bは、本発明の一実施形態においてサーバによって送信されるLWIO_MSG_STATUS_RESPONSEメッセージ825の表現例を示している。Information(インフォメーション)827は0に設定される。Status(ステータス)829は、0×0(成功)、または失敗時は別のNTSTATUSコードに設定される。Cookie831は、クライアントによって送信された割り込み要求のヘッダ内のCookie値に設定される。
クレジット
上述したように、すべてのクライアントからサーバへのI/O要求は、ヘッダ内にクレジットフィールドを含んでいる。クレジットフィールドは、クライアントがサーバに送信したい未解決のI/O要求の数に関するサーバへのヒントである。クレジットを管理するのはサーバの責任である。クレジットは、バッファのフラッシュの問題に新しい解決策を提供する。クライアントが現在N個のクレジットを有している場合、サーバがクライアントにクレジットメッセージを送信するには、N+1個の受信バッファを送る必要がある。サーバは、クライアント接続に沿って未解決のクレジット要求を常に1つだけ有する。クレジットメッセージは常に、割り込みモードで送信される。
クレジットトランザクションは、クライアントとサーバとの間のサーバが開始する3方向のハンドシェイクを含む。図10は、本発明の一実施形態におけるクレジットトランザクションを含むステップをおおまかに示している。ステップ1001で、サーバは、デルタクレジット要求メッセージを、クライアント接続に沿って送信する。
図11Aは、本発明の一実施形態によるサーバデルタクレジットメッセージの表現例を示す。このメッセージは、LWIO_MSG_STATUS_RESPONSE1011の形をとる。クレジットはバッファに対応する。Information(インフォメーション)1013は、クライアントが捨てるべき(負の数)クレジットの数、またはクライアントの使用のためにサーバが新しく割り振った(正の数)クレジットの数(余分なバッファ)に設定される。Status(ステータス)1015は、LWIO_NOTIFY_CREDIT(0×1)に設定される。Cookie(クッキー)1017は0に設定される。
図10に戻って、クライアントは、サーバからクレジットメッセージを受信する。クライアントは、同じ接続で、サーバに対してLWIO_OPCODE_CREDITで応答する必要がある。このメッセージは、単一のクレジットの解放、またはクライアントが使用した新しく割り振られたクレジットの数のサーバへの通知のいずれかを指定する。サーバクレジットメッセージ内のInformationフィールドが負の数−Nを含んでいる場合(ステップ1003)、ステップ1005で示すように、クライアントは、N個のLWIO_OPCODE_CREDITメッセージ(捨てる必要があるのはクレジットごとに1つ)を送信する。情報フィールドが正である場合、ステップ1007で示すように、クライアントは、LWIO_OPCODE_CREDITメッセージを1つだけ送信する。
図11Bは、本発明の一実施形態においてクライアントによって送信されるLWIO_OPCODE_CREDITメッセージの表現例を示している。LWIO_OPCODE_CREDITメッセージ1019は、共通ヘッダ1021を含む。Opcode1023は、LWIO_OPCODE_CREDIT(0×8)に設定される。Flags1025はLWIO_HDR_FLAG_INTERRUPT(0×80)に設定される。Credits1027は、クライアント上の保留中のI/O要求の数に設定される。Cookie1031はクライアント指定の値に設定される。クライアントが正のデルタクレジットメッセージを受信した場合、Offset(オフセット)1029の上位32ビットは、クレジットが使用しなかった、サーバによって割り振られたクレジットの数に設定される。クライアントがこのフィールド内にゼロより大きい値を返すと、サーバは通常、少なくとも1つの負の更新が送信されるまで、別の正の更新メッセージを送信しない。一般に、クライアントはゼロを返す。
上述したように、クライアントは、負(−N)のデルタクレジットメッセージを受信した場合、捨てるクレジットごとに1つのN個のクレジットメッセージをサーバに送信することが必要である。この場合のOffset1029の上位32ビットは、従って−N、−(N−1)、・・・−1に設定される。サーバは、Offset1029の上位32ビットが−1に設定された状態でクライアントクレジットメッセージを受信した場合、クライアントがサーバクレジットメッセージの処理を終了し、新しいクレジットメッセージを受信する資格があると判断する。
図10に戻って、ステップ1009に示すように、サーバは、クライアントにLWIO_MSG_STATUS_RESPONSEメッセージを送信することによって3方向ハンドシェイクを完了する。図11Cは、本発明の一実施形態においてサーバによって送信されるLWIO_MSG_STATUS_RESPONSE1033の表現例を示している。Information1037は0に設定される。クライアントによって送信されたLWIO_OPCODE_CREDITメッセージのヘッダ内のOffsetの上位32ビットが0以上であった場合、Status(ステータス)1039は、成功を示す0×0に設定される。Offsetの上位32ビットが負の数に設定されている場合、サーバは、クライアントがクレジットを廃棄するのを許可するように、Status1039をLWIO_CREDIT_NOTIFYに設定する。Cookie1035は、LWIO_OPCODE_CREDITメッセージの共通ヘッダ内のクライアントによって設定されたCookie値に設定される。
終了
終了メッセージは、登録段階中に交換された特定のFidのI/O処理を停止するために使用される。サーバが応答すると、Fidが再利用されるまで、新しい要求は失敗する。図12Aは、本発明の一実施形態においてクライアントによって送信される終了メッセージの表現例を示している。終了メッセージ1041は、共通ヘッダ1043を含む。Opcode1045はLWIO_OPCODE_CLOSE(0×4)に設定される。Flags1047はLWIO_HDR_FLAG_INTERRUPT(0×80)に設定される。Credits1049は、クライアント上の保留中のI/O要求の数に設定される。Cookie1053はクライアント指定の値に設定される。Fid1051は、終了すべきファイルのFile Idに設定される。
サーバは、LWIO_MSG_STATUS_RESPONSEで応答する。図12Bは、本発明の一実施形態においてサーバによって返される終了完了LWIO_MSG_STATUS_RESPONSE1055の表現例を示している。Information1059は0に設定される。Status1061は、成功を示す0に設定される。Cookie1057は、クライアント終了要求で設定されたCookie値に設定される。
キャンセル
キャンセルメッセージは、登録段階中に交換された特定のFidのI/O処理を停止するために使用される。キャンセルが発行されると、サーバは要求を終える。しかし、キャンセルできないI/O要求は、サーバ上で依然として続行している場合がある。図13Aは、本発明の一実施形態においてクライアントによって送信されるキャンセルメッセージの表現例を示している。キャンセルメッセージ1063は、共通ヘッダ1065を含む。Opcode1067はLWIO_OPCODE_CANCEL(0×5)に設定される。Flags1069はLWIO_HDR_FLAG_INTERRUPT(0×80)に設定される。Credits1071は、クライアント上の保留中のI/O要求の数に設定される。Cookie1075はクライアント指定の値に設定される。Fid1073は、キャンセルが発行されているFile Idに設定される。
サーバは、LWIO_MSG_STATUS_RESPONSEメッセージでキャンセルを完了する。図13Bは、本発明の一実施形態においてサーバによって返されるキャンセル完了LWIO_MSG_STATUS_RESPONSE1077の表現例を示している。Information1081は0に設定される。Status1083は、成功を示す0に設定される。Cookie1079は、クライアントキャンセル要求で設定されたCookie値に設定される。
読み取りメッセージは、登録段階中に交換された特定のFidからデータを取得するために使用される。1キロバイトより小さい読み取り要求については、ユーザバッファがNICに登録されていない場合、データは、予め登録されていた内部バッファ内に受信され、データがサーバから受信されると、ユーザバッファ内にコピーが行われる。これが行われるのは、小さいユーザバッファを登録するより、少量のデータをコピーすることがより効率的であるからである。大量の読み取りでは、ユーザバッファが登録され、データは、RDMA書き込みを介して直接受信される。単一の読み取り要求に従って読み取られたデータの量は、サーバのMaxRdmaWindowSizeによって限定される。
図14Aおよび図14Cは、本発明の一実施形態においてクライアントによって送信される読み取りメッセージの表現例を示しており、図14Aは非ポーリングの場合、図14Cはポーリングの場合を示している。読み取りメッセージ1401は、共通ヘッダ1403を含む。Length1405は、関連のファイルから読み取られるバイト数に設定される。Opcode1407はLWIO_OPCODE_READ(0×0)に設定される。Offset1417は、ファイルの読み取りを開始するバイト位置に設定される。Marker1413は0×FFに設定される。Flag1409、1427は、ポーリングの場合1427では0×0に設定され、非ポーリングの場合1409ではLWIO_HDR_FLAG_INTERRUPT(0×80)に設定される。Credits1411は、クライアント上の保留中のI/O要求の数に設定される。Fid1415は、I/Oを発行するFile Idに設定される。DataVa1419は、読み取りデータがRDMAされるアドレスに設定され、DataMh1421は、関連のメモリハンドルに設定される。
非ポーリングの場合、ImmediateCookie1423およびCookie1425は、クライアント指定の値に設定される。サーバは、この場合、通常の送信を介してLWIO_MSG_STATUS_RESPONSEで、または読み取りが成功した場合、即値データによりRDMAで読み取り要求を完了することができる。RDMA書き込みの即値データは、それに応じて読み取り要求のImmediateCookie値に設定される。ポーリングの場合、IosVa1431は、サーバ応答状況(LWIO_IO_STATUS_BLOCK)がRDMAされる位置に設定され、IosMh1429は、関連のメモリハンドルに設定される。
非ポーリングの場合、サーバは、まず、読み取りデータをRDMAする。次いでサーバは、LWIO_MSG_STATUS_RESPONSEで応答することができ、またはサーバは、即値データをRDMA読み取りデータとともに送信することができる。この場合即値データは、読み取り要求のImmediateCookie値に送信される。図14Bは、本発明の一実施形態において、非ポーリングの場合にサーバによって返されるLWIO_MSG_STATUS_RESPONSE1433の表現例を示している。
Information1437は、読み取られるバイト数に設定される。Status1439は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。Cookie1435は、読み取りメッセージのヘッダ内のクライアントによって設定されたCookie値に設定される。
ポーリングの場合、サーバは、まず、読み取りデータをRDMAする。次いでサーバは、LWIO_IO_STATUS_BLOCKをクライアントにRDMAする。図14Dは、本発明の一実施形態においてサーバによって返されるLWIO_IO_STATUS_BLOCK1441の表現例を示している。Information1443は、読み取られるバイト数に設定される。Status1445は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。
書き込み
書き込みメッセージは、ファイル登録中に交換された特定のFidにデータを入れるために使用される。すべての書き込みデータは、通常の送信操作を使用して送信される。書き込まれるデータ量は、サーバのMaxRecvBufferSizeによって限定される。クライアントがこれより多くのデータを送信すると、接続が中断される。
図15Aおよび図15Cは、本発明の一実施形態においてクライアントによって送信される書き込みメッセージの表現例を示しており、図15Aは非ポーリングの場合、図15Cはポーリングの場合を示している。書き込みメッセージ1501は、共通ヘッダ1503を含む。Length1505は、書き込まれるデータのバッファ数に設定される。0Opcode1507はLWIO_OPCODE_WRITE(0×1)に設定される。Offset1517は、ファイルデータの書き込みを開始するバイト位置に設定される。Flag1509、1529は、ポーリングの場合1529では0×0に設定され、非ポーリングの場合1509ではLWIO_HDR_FLAG_INTERRUPT(0×80)に設定される。Marker1513は0×FFに設定される。Credits1511は、クライアント上の保留中のI/O要求の数に設定される。Fid1515は、I/Oを発行するFile Idに設定される。書き込まれるデータ1527は、書き込みメッセージの共通ヘッダ1503のすぐ次に来る。
非ポーリングの場合、Cookie1525は、クライアント指定の値に設定される。ポーリングの場合、IosVa1533は、サーバ応答状況(LWIO_IO_STATUS_BLOCK)がRDMAされる位置に設定され、IosMh1531は、関連のメモリハンドルに設定される。
非ポーリングの場合、サーバは、LWIO_MSG_STATUS_RESPONSEで書き込みメッセージに応答する。図15Bは、本発明の一実施形態においてサーバによって返されるLWIO_MSG_STATUS_RESPONSE1535の表現例を示している。Information1539は、書き込まれるバイト数に設定される。Status1541は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。Cookie1537は、書き込みメッセージのヘッダ内のクライアントによって設定されたCookie値に設定される。ポーリングの場合、サーバは、LWIO_IO_STATUS_BLOCKをRDMAする。図15Dは、本発明の一実施形態においてサーバによって返されるLWIO_IO_STATUS_BLOCK1543の表現例を示している。Information1545は、書き込まれるバイト数に設定される。Status1547は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。
ベクトル化読み取り
ベクトル化読み取りは、登録段階中に交換された特定のFidからデータを取得し、データをページごとに要求側の複数のセグメントに分散するために使用される。読み取られたすべてのデータは、読み取りセグメントごとにサーバから1つのRDMA書き込みを介して要求側に送信される。ディスクから読み取られたデータは連続している。読み取られたデータ量は、単一の要求で記載することができる最大数の宛先ページによって限定される。この限定は、sizeof(LWIO_RDMA_REGION)によって分割されるサーバMaxRecvBufferSizeである。LWIO_RDMA_REGIONの構造を以下に示す。
図16Aおよび図16Cは、本発明の一実施形態においてクライアントによって送信されるベクトル化読み取りメッセージの表現例を示しており、図16Aは非ポーリングの場合、図16Cはポーリングの場合を示している。読み取りメッセージ1401は、共通ヘッダ1603、次いで1つまたは複数のLWIO_RDMA_REGIONセグメント1605、1607を含む。ヘッダ1603の中のLength1609は、ファイルから読み取られるデータのバイト数に設定される。Opcode1611はLWIO_OPCODE_VEC_READ(0×2)に設定される。Offset1621は、ファイルデータの読み取りを開始するバイト位置に設定される。Flag1613、1631は、ポーリングの場合1631では0×0に設定され、非ポーリングの場合1613ではLWIO_HDR_FLAG_INTERRUPT(0×80)に設定される。Marker1617は0×FFに設定される。Credits1615は、クライアント上の保留中のI/O要求の数に設定される。Fid1619は、I/Oを発行するFile Idに設定される。Numpages1623は、共通ヘッダ1603に続くLWIO_RDMA_REGIONの数に設定される。PageSize1625はローカルページサイズにバイト単位で設定される。
非ポーリングの場合、ImmediateCookie1627およびCookie1629は、クライアント指定の値に設定される。サーバは、この場合、通常の送信を介してLWIO_MSG_STATUS_RESPONSEで、または読み取りが成功した場合は即値データによりRDMAでベクトル化読み取り要求を完了することができる。RDMA書き込みの即値データは、それに応じて読み取り要求のImmediateCookie1627値に設定される。ポーリングの場合、IosVa1635は、サーバ応答状況(LWIO_IO_STATUS_BLOCK)がRDMAされる位置に設定され、IosMh1633は、関連のメモリハンドルに設定される。
共通ヘッダ1603のすぐ次に十分な数のLWIO_RDMA_REGIONセグメント1605、1607が続き、要求の長さをカバーする。中間セグメントのサイズは、すべて1ページとすべきである。最後のセグメントは1つのページより小さくてもよいが、バックエンドディスクセクタサイズ(backend disk sector size)の倍数とする必要がある。本発明の一実施形態では、LWIO_RDMA_REGION構造は、次のフォーマットを有する。
Figure 0004564970
第1のLWIO_RDMA_REGIONは、読み取られる第1のPageSizeバイトに対応し、第2のLWIO_RDMA_REGIONは、読み取られる第2のPageSizeバイトに対応し、以下同様である。DataVa1637は、読み取りデータが入れられるページの先頭を示す位置に設定される。DataMh1639は、DataVa1637のメモリハンドルに設定される。Length1641は、最後の領域を除くすべての領域についてPageSize1625に設定される。最後の領域は、Lengthは小さくてもよいが、バックエンドディスクセクタサイズの倍数とする必要がある。
非ポーリングの場合、サーバは、まず、読み取りデータをRDMAする。次いでサーバは、LWIO_MSG_STATUS_RESPONSEで応答することができ、またはサーバは、即値データをRDMA読み取りデータとともに送信することができる。この場合即値データは、読み取り要求のImmediateCookie値に送信される。図16Bは、本発明の一実施形態において、非ポーリングの場合にサーバによって返されるLWIO_MSG_STATUS_RESPONSE1643の表現例を示している。Information1647は、読み取られるバイト数に設定される。Status1649は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。Cookie1645は、ベクトル化読み取りメッセージのヘッダ内のクライアントによって設定されたCookie値に設定される。
ポーリングの場合、サーバはまず、読み取りデータをRDMAし、次いでLWIO_IO_STATUS_BLOCKをRDMAする。図16Dは、本発明の一実施形態においてサーバによって返されるLWIO_IO_STATUS_BLOCK1651の表現例を示している。Information1653は、読み取られるバイト数に設定される。Status1655は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。
ベクトル化書き込み
ベクトル化書き込みメッセージは、ファイル登録中に交換された特定のFidへの収集的な書き込み(gather write)を行うために使用される。すべての書き込みデータは、通常の送信操作を使用して送信される。書き込まれるデータ量は、サーバのMaxRecvBufferSizeによって限定される。クライアントがこれより多くのデータを送信すると、接続が中断される。
図17A、図17B、図17Cは、本発明の一実施形態におけるクライアントによって送信されるベクトル化書き込みメッセージの表現例を示しており、図17Aは、非ポーリング、非折りたたみの場合、図17Bは、非ポーリング、折りたたみの場合、および図17Cはポーリング、折りたたみの場合を示している。
書き込みメッセージ1701は、共通ヘッダ1703、次いで書き込まれるデータ1705を含む。共通ヘッダ1703の中のLength1707は、書き込まれるデータのバイト数に設定される。Opcode1709はLWIO_OPCODE_WRITE(0×3)に設定される。Offset1719は、ファイルデータの書き込みを開始するバイト位置に設定される。Marker1715は0×FFに設定される。Credits1713は、クライアント上の保留中のI/O要求の数に設定される。Fid1717は、I/Oを発行するFile Idに設定される。
Flag1711、1721、1727は、ポーリング1727を示す0×0に設定され、そうでない場合はLWIO_HDR_FLAG_INTERRUPT(0×80)1711に設定される。後者の場合、フラグは、書き込み内のすべてのページが同じデータを含み、従ってデータの単一ページのみが送信されたことを示すためにLWIO_HDR_FLAG_COLLAPSE1721を含むことができる。これは、冗長データの転送を最低限に抑えるための最適化である。LWIO_HDR_FLAG_COLLAPSEは、登録されたファイルフラグがFILE_NO_INTERMEDIATE_BUFFERING(0×8)を含み、認証段階中に交換されたPageSizeが偶数による互いの倍数である場合にのみ使用することができる。折りたたみされたI/Oの場合、NumPages1723は、I/Oがまたがるデータのページ数に設定される。最後のページは、Lengthパラメータのために部分的である場合がある。PageSize1725はローカルページサイズにバイト単位で設定される。ポーリングの場合、IosVa1731は、サーバ応答状況(LWIO_IO_STATUS_BLOCK)がRDMAされる位置に設定される。IosMh1729は、関連のメモリハンドルである。
非ポーリングの場合、非折りたたみおよび折りたたみのI/Oの両方で、サーバは、LWIO_MSG_STATUS_RESPONSEで書き込みメッセージに応答する。
図17Dは、本発明の一実施形態においてサーバによって返されるLWIO_MSG_STATUS_RESPONSE1733の表現例を示している。Information1737は、書き込まれるバイト数に設定される。Status1739は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。Cookie1735は、書き込みメッセージのヘッダ内のクライアントによって設定されたCookie値に設定される。
ポーリングの場合、非折りたたみおよび折りたたみのI/Oの両方で、サーバはLWIO_IO_STATUS_BLOCKをRDMAする。図17Eは、本発明の一実施形態においてサーバによって返されるLWIO_IO_STATUS_BLOCK1741の表現例を示している。Information1743は、書き込まれるバイト数に設定される。Status1745は、成功を示す0、または失敗を示す別のNTSTATUSに設定される。
結論
本発明の実施形態の例を示し、説明してきたが、本発明から逸脱することなく様々な変更を加えることができることを理解されたい。同様に、本明細書に記載した任意のプロセスステップを他のステップと交換して同じ結果を達成することができる。さらに、上述した例は、網羅的なものではなく、開示された正確なフォーマットに本発明を限定するためのものでもない。むしろ、本発明は、本発明が意図する特許請求の範囲内に含まれるすべての変更、変形、構成、および均等物をカバーするものとする。
本発明の態様を組み込むことができる、RDMA転送を介して通信することができる2つのコンピュータを含む典型的なクライアント−サーバコンピューティング環境を示す概略図である。 本発明の一実施形態によるLWIOプロトコルの発見段階において行われる最初のステップを示す概略流れ図である。 本発明の一実施形態による典型的なサーバ要求レジュームキーの表現を示す概略図である。 本発明の一実施形態による典型的なクライアント交渉要求メッセージの表現を示す概略図である。 本発明の一実施形態による典型的なサーバ交渉応答の表現を示す概略図である。 本発明の一実施形態によるLWIOプロトコルの発見段階において行われる追加のステップを示す概略流れ図である。 本発明の一実施形態による典型的なクライアント認証要求メッセージの表現を示す概略図である。 本発明の一実施形態による典型的なサーバ認証応答の表現を示す概略図である。 本発明の一実施形態による認証を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態による典型的なクライアントファイル登録メッセージの表現を示す概略図である。 本発明の一実施形態によるファイル登録を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態によるポーリングモードおよび非ポーリングモードにおいてI/O要求の完了に関して行われるステップを示す概略流れ図である。 本発明の一実施形態による典型的なクライアント割り込み要求メッセージの表現を示す概略図である。 本発明の一実施形態による割り込み要求を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一態様によるサーバ−クライアントクレジットトランザクションに関して行われるステップを示す概略流れ図である。 本発明の一実施形態による典型的なサーバデルタクレジットメッセージの表現を示す概略図である。 本発明の一実施形態による典型的なクライアントからサーバへのクレジットメッセージの表現を示す概略図である。 本発明の一実施形態によるクレジット−サーバクレジットトランザクションを完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態による典型的なクライアント終了要求メッセージの表現を示す概略図である。 本発明の一実施形態による終了要求を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態による典型的なクライアントキャンセル要求メッセージの表現を示す概略図である。 本発明の一実施形態によるキャンセル要求を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態による非ポーリングモードの場合の典型的なクライアント読み取り要求メッセージの表現を示す概略図である。 本発明の一実施形態による非ポーリングモードの場合の読み取り要求を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態によるポーリングモードの場合の典型的なクライアント読み取り要求メッセージの表現を示す概略図である。 本発明の一実施形態によるポーリングモードの場合の読み取り要求を完了する典型的なサーバI/O状況ブロックの表現を示す概略図である。 本発明の一実施形態による非ポーリングモードの場合の典型的なクライアント書き込み要求メッセージの表現を示す概略図である。 本発明の一実施形態による非ポーリングモードの場合の書き込み要求を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態によるポーリングモードの場合の典型的なクライアント書き込み要求メッセージの表現を示す概略図である。 本発明の一実施形態によるポーリングモードの場合の書き込み要求を完了する典型的なサーバI/O状況ブロックの表現を示す概略図である。 本発明の一実施形態による非ポーリングモードの場合の典型的なクライアントベクトル化読み取り要求メッセージの表現を示す概略図である。 本発明の一実施形態による非ポーリングモードの場合のベクトル化読み取り要求を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態によるポーリングモードの場合の典型的なクライアントベクトル化読み取り要求メッセージの表現を示す概略図である。 本発明の一実施形態によるポーリングモードの場合のベクトル化読み取り要求を完了する典型的なサーバI/O状況ブロックの表現を示す概略図である。 本発明の一実施形態による、非ポーリングモードで折りたたみされていない場合の典型的なクライアントベクトル化書き込み要求メッセージの表現を示す概略図である。 本発明の一実施形態による、非ポーリングモードで折りたたみされた場合の典型的なクライアントベクトル化書き込み要求メッセージの表現を示す概略図である。 本発明の一実施形態による、ポーリングモードで折りたたみされた場合の典型的なクライアントベクトル化書き込み要求メッセージの表現を示す概略図である。 本発明の一実施形態による非ポーリングモードの場合のベクトル化書き込み要求を完了する典型的なサーバ状況応答の表現を示す概略図である。 本発明の一実施形態によるポーリングモードの場合のベクトル化書き込み要求を完了する典型的なサーバI/O状況ブロックの表現を示す概略図である。
符号の説明
101 ホストA
103 LWIOクライアント
105 カーネルモード読み取り/書き込み
107 バッファ
109 RDMA対応NIC
111 RDMA対応NIC
113 NIC
117 RDMAチャネル
119 非RDMAネットワークリンク
121 ホストB
123 LWIOサーバ
125 SMBサーバ
127 バッファ
129 NTFS
131 リードディスク
133 NIC
135 RDMA対応NIC
137 RDMA対応NIC
219 サーバ要求レジュームキー
231 交渉要求パケット
233 制御ヘッダ
241 プロバイダのリスト
257 インスタンステーブル
267 交渉応答
269 制御ヘッダ
279 プロバイダリスト
617 認証メッセージ
619 共通ヘッダ
621 LWIO_AUTH_PARAMS構造
659 LWIO_AUTH_PARAMS構造
689 サーバ認証完了LWIO_MSG_STATUS_RESPONSE
701 登録メッセージ
703 共通ヘッダ
705 LWIO_FID_PARAMS構造
723 サーバ登録完了LWIO_MSG_STATUS_RESPONSE
815 共通ヘッダ
825 サーバ割り込み完了LWIO_MSG_STATUS_RESPONSE
1011 LWIO_MSG_STATUS_RESPONSE
1019 CREDITメッセージ
1021 共通ヘッダ
1033 サーバクレジット完了LWIO_MSG_STATUS_RESPONSE
1041 終了メッセージ
1043 共通ヘッダ
1055 サーバ終了完了LWIO_MSG_STATUS_RESPONSE
1063 キャンセルメッセージ
1065 共通ヘッダ
1077 サーバキャンセル完了LWIO_MSG_STATUS_RESPONSE
1401 読み取りメッセージ
1403 共通ヘッダ
1433 読み取り完了(非ポーリング)
LWIO_MSG_STATUS_RESPONSE
1441 読み取り完了(ポーリング)
LWIO_IO_STATUS_BLOCK
1501 書き込みメッセージ
1503 共通ヘッダ
1535 書き込み完了(非ポーリング)
LWIO_MSG_STATUS_RESPONSE
1543 書き込み完了(ポーリング)
LWIO_IO_STATUS_BLOCK
1603 共通ヘッダ
1605 LWIO_RDMA_REGIONセグメント
1607 LWIO_RDMA_REGIONセグメント
1643 ベクトル化完了(非ポーリング)
LWIO_MSG_STATUS_RESPONSE
1651 ベクトル化完了(ポーリング)
LWIO_IO_STATUS_BLOCK
1701 書き込みメッセージ
1703 共通ヘッダ
1705 書き込まれるデータ
1733 クライアントVEC書き込み完了(非ポーリング)
LWIO_MSG_STATUS_RESPONSE
1741 クライアントVEC書き込み完了(ポーリング)
LWIO_IO_STATUS_BLOCK

Claims (20)

  1. 入力/出力(I/O)タスクを第1のコンピュータから第2のコンピュータにオフロードするシステムであって、前記システムは、
    前記第1のコンピュータ上で稼働するクライアントと、
    前記第2のコンピュータ上で稼働するサーバと、
    前記第1のコンピュータと前記第2のコンピュータとをリンクする少なくとも1つのRDMAチャネルと
    備え
    前記第1のコンピュータおよび前記2のコンピュータは、
    ネットワーク発見段階であって、
    前記クライアントが、共有のRDMA対応プロバイダを介した前記サーバへのRDMA接続を生成すること、
    前記クライアントおよび前記サーバが、前記RDMA接続を相互に認証すること、
    前記サーバが、前記サーバのバッファの状況を表すクレジット要求メッセージを送信することであって、前記バッファの状況は、前記クライアントが前記サーバへオフロードしようとするI/O要求を処理する前記サーバの可用性に対応し、前記クレジット要求メッセージは、複数のフィールドから成る第1のフィールドを含み、前記第1のフィールドは、前記サーバが前記サーバの可用性に基づきこれ以上I/O要求を処理できない場合は前記クライアントが捨てるべきクレジットの数を表す負の値を、前記サーバが前記サーバの可用性に基づき前記クライアントからのさらなるI/O要求を受け入れることができる場合は前記サーバが前記クライアントによる使用のために新たに割り振ったクレジットの数を表す正の値を含み、前記クレジットは、前記クライアントが前記サーバへオフロードしようとするI/O要求の数に対応すること、
    前記クライアントが、前記クレジット要求メッセージを受信すること、および
    前記クライアントが前記クレジット要求メッセージを受信することに応答して、前記クライアントから前記サーバに、前記クレジット要求メッセージ中の前記第1のフィールドが前記正の値を含む場合は第1の指標を、前記クレジット要求メッセージ中の前記第1のフィールドが前記負の値を含む場合は少なくとも1つの第2の指標を送信することであって、前記第1の指標は、前記クライアントが使用した新たに割り振られたクレジットのうちの少なくとも1つを前記サーバに通知し、各第2の指標は、前記クライアントが解放した各クレジットに対応し、各第2の指標は、各第2の指標内の複数のフィールドから成る第2のフィールドのオフセット内にクレジットの解放値を含み、前記クレジットの解放値は、各第2の指標により前記負の値の大きさを減少させることで、解放できるクレジットの残りの量と関連付けられており、前記第2のフィールドのオフセットは、前記クレジットの解放値を32ビット表現で伝達することができること
    を行うように構成されるネットワーク発見段階ならびに
    前記サーバにオフロードされる前記I/O要求を処理するよう構成されるI/O処理段階であって、前記I/O処理段階の読み取り操作は、RDMA操作を使用して実施され、前記I/O処理段階の書き込み操作は、送信操作を使用して実施され、前記書き込み操作は、前記RDMA操作を使用して実施されないI/O処理段階
    を含むプロトコルに従って通信することを特徴とするシステム。
  2. 前記プロトコルはSMB(Server Message Block)と共に使用されることを特徴とする請求項に記載のシステム。
  3. 前記プロトコルはCIFS(Common Internet File System)と共に使用されることを特徴とする請求項に記載のシステム。
  4. 入力/出力(I/O)タスクを第1のコンピュータから第2のコンピュータにオフロードするシステムで使用するためのコンピュータプログラムを含むコンピュータ実行可能命令およびコンピュータ可読データを格納するコンピュータ可読媒体であって、前記システムは
    前記第1のコンピュータと前記第2のコンピュータとをリンクする少なくとも1つのRDMAチャネルを含み、
    前記第1のコンピュータおよび前記2のコンピュータは、
    ネットワーク発見段階であって、
    前記クライアントが、共有のRDMA対応プロバイダを介した前記サーバへのRDMA接続を生成すること、
    前記クライアントおよび前記サーバが、前記RDMA接続を相互に認証すること、
    前記サーバが、前記サーバのバッファの状況を表すクレジット要求メッセージを送信することであって、前記バッファの状況は、前記クライアントが前記サーバへオフロードしようとするI/O要求を処理する前記サーバの可用性に対応し、前記クレジット要求メッセージは、複数のフィールドから成る第1のフィールドを含み、前記第1のフィールドは、前記サーバが前記サーバの可用性に基づきこれ以上I/O要求を処理できない場合は前記クライアントが捨てるべきクレジットの数を表す負の値を、前記サーバが前記サーバの可用性に基づき前記クライアントからのさらなるI/O要求を受け入れることができる場合は前記サーバが前記クライアントによる使用のために新たに割り振ったクレジットの数を表す正の値を含み、前記クレジットは、前記クライアントが前記サーバへオフロードしようとするI/O要求の数に対応すること、
    前記クライアントが、前記クレジット要求メッセージを受信すること、および
    前記クライアントが前記クレジット要求メッセージを受信することに応答して、前記クライアントから前記サーバに、前記クレジット要求メッセージ中の前記第1のフィールドが前記正の値を含む場合は第1の指標を、前記クレジット要求メッセージ中の前記第1のフィールドが前記負の値を含む場合は少なくとも1つの第2の指標を送信することであって、前記第1の指標は、前記クライアントが使用した新たに割り振られたクレジットのうちの少なくとも1つを前記サーバに通知し、各第2の指標は、前記クライアントが解放した各クレジットに対応し、各第2の指標は、各第2の指標内の複数のフィールドから成る第2のフィールドのオフセット内にクレジットの解放値を含み、前記クレジットの解放値は、各第2の指標により前記負の値の大きさを減少させることで、解放できるクレジットの残りの量と関連付けられており、前記第2のフィールドのオフセットは、前記クレジットの解放値を32ビット表現で伝達することができること
    を行うように構成されるネットワーク発見段階ならびに
    前記サーバにオフロードされる前記I/O要求を処理するよう構成されるI/O処理段階であって、前記I/O処理段階の読み取り操作は、RDMA操作を使用して実施され、前記I/O処理段階の書き込み操作は、送信操作を使用して実施され、前記書き込み操作は、前記RDMA操作を使用して実施されないI/O処理段階
    を含むプロトコルに従って通信することを特徴とするコンピュータ可読媒体。
  5. 入力/出力(I/O)タスクを第1のコンピュータから第2のコンピュータにオフロードする方法であって、前記方法は、
    前記第1のコンピュータ上のクライアントおよび前記第2のコンピュータ上のサーバによって少なくとも1つの共有のRDMA対応プロバイダを発見するステップであって、
    前記クライアントが、前記少なくとも1つの共有のRDMA対応プロバイダを介した前記サーバへのRDMA接続を生成するステップ、
    前記クライアントおよび前記サーバが、前記RDMA接続を相互に認証するステップ、
    前記サーバが、前記サーバのバッファの状況を表すクレジット要求メッセージを送信するステップであって、前記バッファの状況は、前記クライアントが前記サーバへオフロードしようとするI/O要求を処理する前記サーバの可用性に対応し、前記クレジット要求メッセージは、複数のフィールドから成る第1のフィールドを含み、前記第1のフィールドは、前記サーバが前記サーバの可用性に基づきこれ以上I/O要求を処理できない場合は前記クライアントが捨てるべきクレジットの数を表す負の値を、前記サーバが前記サーバの可用性に基づき前記クライアントからのさらなるI/O要求を受け入れることができる場合は前記サーバが前記クライアントによる使用のために新たに割り振ったクレジットの数を表す正の値を含み、前記クレジットは、前記クライアントが前記サーバへオフロードしようとするI/O要求の数に対応するステップ、
    前記クライアントが、前記クレジット要求メッセージを受信するステップ、および
    前記クライアントが前記クレジット要求メッセージを受信するステップに応じて、前記クライアントから前記サーバに、前記クレジット要求メッセージ中の前記第1のフィールドが前記正の値を含む場合は第1の指標を、前記クレジット要求メッセージ中の前記第1のフィールドが前記負の値を含む場合は少なくとも1つの第2の指標を送信するステップであって、前記第1の指標は、前記クライアントが使用した新たに割り振られたクレジットのうちの少なくとも1つを前記サーバに通知し、各第2の指標は、前記クライアントが解放した各クレジットに対応し、各第2の指標は、各第2の指標内の複数のフィールドから成る第2のフィールドのオフセット内にクレジットの解放値を含み、前記クレジットの解放値は、各第2の指標により前記負の値の大きさを減少させることで、解放できるクレジットの残りの量と関連付けられており、前記第2のフィールドのオフセットは、前記クレジットの解放値を32ビット表現で伝達することができるステップ
    を含む前記発見するステップならびに
    前記クライアントによって前記第2のコンピュータ上の前記サーバによる完了を求める前記クライアントからオフロードされる前記I/O処理要求を送るステップであって、読み取り操作は、RDMA操作を使用して実施され、書き込み操作は、送信操作を使用して実施され、前記書き込み操作は、前記RDMA操作を使用して実施されないステップ
    を含むことを特徴とする方法。
  6. 少なくとも1つの共有のRDMA対応プロバイダを発見する前記ステップは、
    前記クライアントによって前記サーバからサーバ要求レジュームキーを取得するステップと、
    前記クライアントによって前記サーバへのパイプを開くステップと、
    前記クライアントによって前記パイプを介して交渉要求を送信するステップと、
    前記サーバによって前記パイプを介して共通プロバイダの最小リストを含む交渉応答を送信するステップと
    をさらに含むことを特徴とする請求項に記載の方法。
  7. 前記クライアントによって、前記RDMA接続を介して、使用する1つまたは複数のファイルを前記サーバに登録するステップ
    をさらに含むことを特徴とする請求項に記載の方法。
  8. 少なくとも1つのファイルを登録する前記ステップは、
    前記クライアントによって前記サーバにファイル登録メッセージを送信するステップと、
    前記サーバによって前記クライアントにファイル登録完了メッセージを送信するステップと
    を含むことを特徴とする請求項に記載の方法。
  9. 前記RDMA接続を認証する前記ステップは、
    前記クライアントによって前記サーバにキーを含む認証要求メッセージを送信するステップと、
    前記キーが前記サーバから前記クライアントに送信された以前のキーと一致する場合、前記サーバによって前記クライアントに認証応答メッセージを送信するステップと
    をさらに含むことを特徴とする請求項に記載の方法。
  10. 前記以前のキーは前記サーバから前記クライアントに送信された交渉応答メッセージ内に含まれるキーであることを特徴とする請求項に記載の方法。
  11. 前記サーバによって前記クライアントに、前記認証ステップを完了するために状況応答メッセージを送信するステップ
    をさらに含むことを特徴とする請求項に記載の方法。
  12. 前記I/O処理要求を送る前記ステップは、前記クライアントによって(a)終了要求、(b)キャンセル要求、(c)読み取り要求、(d)書き込み要求、(e)ベクトル化読み取り要求、および(f)ベクトル化書き込み要求のうちの1つを送信するステップを含むことを特徴とする請求項に記載の方法。
  13. 前記サーバによって、RDMA書き込み操作を使用してデータを送信することによって前記読み取り要求および前記ベクトル化読み取り要求を完了するステップと、
    前記サーバによって、通常の送信操作を使用してデータを送信することによって前記書き込み要求および前記ベクトル化書き込み要求を完了するステップと
    をさらに含むことを特徴とする請求項12に記載の方法。
  14. 前記ベクトル化書き込み要求は前記要求のヘッダ内に折りたたみフラグを含むことを特徴とする請求項12に記載の方法。
  15. 前記I/O処理要求を送る前記ステップは、前記サーバによる前記完了がポーリングモードであるかどうかを示すステップをさらに含むことを特徴とする請求項に記載の方法。
  16. 前記完了がポーリングモードであるかどうかを示す前記ステップは、前記I/O処理要求のヘッダ内に割り込みフラグを設定することによって前記完了がポーリングモードではないことを示すステップを含むことを特徴とする請求項15に記載の方法。
  17. 前記クライアントが非ポーリングモードでの前記完了を指示した場合、前記サーバによって、RDMA転送を介して状況ブロックを前記第1のコンピュータに送信することによって前記I/O処理要求を完了するステップ
    をさらに含むことを特徴とする請求項15に記載の方法。
  18. 前記クライアントがポーリングモードでの前記完了を指示し、前記クライアントが割り込み要求メッセージを前記サーバに送信した場合、前記サーバによって前記クライアントに通常の送信を介して割り込み応答メッセージを送信するステップ
    をさらに含むことを特徴とする請求項15に記載の方法。
  19. 前記I/O処理要求を送るステップは、前記要求のヘッダ内にいくつかのクレジットを指定するステップをさらに含むことを特徴とする請求項に記載の方法。
  20. 入力/出力(I/O)タスクを第1のコンピュータから第2のコンピュータにオフロードする方法を実施するコンピュータ実行可能命令を格納するコンピュータ可読媒体であって、前記コンピュータ実行可能命令により実行される前記方法は
    前記第1のコンピュータ上のクライアントおよび前記第2のコンピュータ上のサーバによって、少なくとも1つの共有のRDMA対応プロバイダを発見するステップと、
    前記第1のコンピュータが、サーバ要求レジュームキーを要求するステップと、
    前記第2のコンピュータが、前記サーバ要求レジュームキーを認証機構として渡すステップであって、前記サーバ要求レジュームキーを要求するステップと前記サーバ要求レジュームキーを渡すステップとは、
    前記クライアントが、前記少なくとも1つの共有のRDMA対応プロバイダを介した前記サーバへのRDMA接続を生成するステップ、
    前記クライアントおよび前記サーバが、前記RDMA接続を相互に認証するステップ、
    前記サーバが、前記サーバのバッファの状況を表すクレジット要求メッセージを送信するステップであって、前記バッファの状況は、前記クライアントが前記サーバへオフロードしようとするI/O要求を処理する前記サーバの可用性に対応し、前記クレジット要求メッセージは、複数のフィールドから成る第1のフィールドを含み、前記第1のフィールドは、前記サーバが前記サーバの可用性に基づきこれ以上I/O要求を処理できない場合は前記クライアントが捨てるべきクレジットの数を表す負の値を、前記サーバが前記サーバの可用性に基づき前記クライアントからのさらなるI/O要求を受け入れることができる場合は前記サーバが前記クライアントによる使用のために新たに割り振ったクレジットの数を表す正の値を含み、前記クレジットは、前記クライアントが前記サーバへオフロードしようとするI/O要求の数に対応するステップ、
    前記クライアントが、前記クレジット要求メッセージを受信するステップ、
    前記クライアントが前記クレジット要求メッセージを受信するステップに応じて、前記クライアントから前記サーバに、前記クレジット要求メッセージ中の前記第1のフィールドが前記正の値を含む場合は第1の指標を、前記クレジット要求メッセージ中の前記第1のフィールドが前記負の値を含む場合は少なくとも1つの第2の指標を送信するステップであって、前記第1の指標は、前記クライアントが使用した新たに割り振られたクレジットのうちの少なくとも1つを前記サーバに通知し、各第2の指標は、前記クライアントが解放した各クレジットに対応し、各第2の指標は、各第2の指標内の複数のフィールドから成る第2のフィールドのオフセット内にクレジットの解放値を含み、前記クレジットの解放値は、各第2の指標により前記負の値の大きさを減少させることで、解放できるクレジットの残りの量と関連付けられており、前記第2のフィールドのオフセットは、前記クレジットの解放値を32ビット表現で伝達することができるステップ
    を含むステップと、
    前記クライアントによって前記第2のコンピュータ上の前記サーバによる完了を求める前記クライアントからオフロードされる前記I/O処理要求を送るステップであって、読み取り操作は、RDMA操作を使用して実施され、書き込み操作は、送信操作を使用して実施され、前記書き込み操作は、前記RDMA操作を使用して実施されないステップ
    を含むことを特徴とするコンピュータ可読媒体。
JP2006546957A 2003-12-31 2004-07-26 ライトウエイト入力/出力プロトコル Expired - Fee Related JP4564970B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/749,959 US7698361B2 (en) 2003-12-31 2003-12-31 Lightweight input/output protocol
PCT/US2004/024026 WO2005067430A2 (en) 2003-12-31 2004-07-26 Lightweight input/output protocol

Publications (2)

Publication Number Publication Date
JP2007527057A JP2007527057A (ja) 2007-09-20
JP4564970B2 true JP4564970B2 (ja) 2010-10-20

Family

ID=34701133

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006546957A Expired - Fee Related JP4564970B2 (ja) 2003-12-31 2004-07-26 ライトウエイト入力/出力プロトコル

Country Status (17)

Country Link
US (2) US7698361B2 (ja)
EP (1) EP1700264A4 (ja)
JP (1) JP4564970B2 (ja)
KR (1) KR101084897B1 (ja)
CN (1) CN101375263B (ja)
AU (1) AU2004279182B2 (ja)
BR (1) BRPI0406413A (ja)
CA (1) CA2501521A1 (ja)
IL (1) IL168595A (ja)
MX (1) MXPA05006638A (ja)
MY (2) MY158076A (ja)
NO (1) NO20052054L (ja)
NZ (2) NZ580159A (ja)
RU (2) RU2388039C2 (ja)
TW (2) TW201240413A (ja)
WO (1) WO2005067430A2 (ja)
ZA (1) ZA200503161B (ja)

Families Citing this family (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7529778B1 (en) 2001-12-12 2009-05-05 Microsoft Corporation System and method for providing access to consistent point-in-time file versions
US7698361B2 (en) * 2003-12-31 2010-04-13 Microsoft Corporation Lightweight input/output protocol
US7617256B2 (en) * 2004-07-19 2009-11-10 Microsoft Corporation Remote file updates through remote protocol
US20060168094A1 (en) * 2005-01-21 2006-07-27 International Business Machines Corporation DIRECT ACCESS OF SCSI BUFFER WITH RDMA ATP MECHANISM BY iSCSI TARGET AND/OR INITIATOR
US8316129B2 (en) 2005-05-25 2012-11-20 Microsoft Corporation Data communication coordination with sequence numbers
US7549037B1 (en) * 2005-09-01 2009-06-16 Symantec Operating Corporation Efficient off-host backup of a file set clone
US8151116B2 (en) * 2006-06-09 2012-04-03 Brigham Young University Multi-channel user authentication apparatus system and method
EP2047379B1 (en) * 2006-07-27 2012-02-08 ConteXtream Ltd. Distributed edge network
US7836143B2 (en) 2007-04-25 2010-11-16 International Business Machines Corporation Message communications of particular message types between compute nodes using DMA shadow buffers
US8325633B2 (en) 2007-04-26 2012-12-04 International Business Machines Corporation Remote direct memory access
US7827024B2 (en) 2007-05-09 2010-11-02 International Business Machines Corporation Low latency, high bandwidth data communications between compute nodes in a parallel computer
US7966618B2 (en) * 2007-05-29 2011-06-21 International Business Machines Corporation Controlling data transfers from an origin compute node to a target compute node
US8037213B2 (en) 2007-05-30 2011-10-11 International Business Machines Corporation Replenishing data descriptors in a DMA injection FIFO buffer
US7921428B2 (en) 2007-06-18 2011-04-05 International Business Machines Corporation Multi-registration of software library resources
US8478834B2 (en) 2007-07-12 2013-07-02 International Business Machines Corporation Low latency, high bandwidth data communications between compute nodes in a parallel computer
US8018951B2 (en) 2007-07-12 2011-09-13 International Business Machines Corporation Pacing a data transfer operation between compute nodes on a parallel computer
US8959172B2 (en) 2007-07-27 2015-02-17 International Business Machines Corporation Self-pacing direct memory access data transfer operations for compute nodes in a parallel computer
US7805546B2 (en) * 2007-07-27 2010-09-28 International Business Machines Corporation Chaining direct memory access data transfer operations for compute nodes in a parallel computer
US8929372B2 (en) * 2007-10-30 2015-01-06 Contextream Ltd. Grid router
US8467295B2 (en) 2008-08-21 2013-06-18 Contextream Ltd. System and methods for distributed quality of service enforcement
IT1391040B1 (it) * 2008-10-01 2011-10-27 St Microelectronics Srl Procedimento per eseguire operazioni in reti di comunicazione, rete di comunicazione e prodotto informatico relativi
US8521821B2 (en) * 2009-03-17 2013-08-27 Brigham Young University Encrypted email based upon trusted overlays
US8949453B2 (en) 2010-11-30 2015-02-03 International Business Machines Corporation Data communications in a parallel active messaging interface of a parallel computer
US8806030B2 (en) * 2010-12-06 2014-08-12 Microsoft Corporation Multichannel connections in file system sessions
US8631277B2 (en) 2010-12-10 2014-01-14 Microsoft Corporation Providing transparent failover in a file system
US9146765B2 (en) 2011-03-11 2015-09-29 Microsoft Technology Licensing, Llc Virtual disk storage techniques
FR2973185B1 (fr) * 2011-03-22 2013-03-29 Sagem Defense Securite Procede et dispositif de connexion a un reseau de haute securite
US9331955B2 (en) * 2011-06-29 2016-05-03 Microsoft Technology Licensing, Llc Transporting operations of arbitrary size over remote direct memory access
US8856582B2 (en) 2011-06-30 2014-10-07 Microsoft Corporation Transparent failover
US8949328B2 (en) 2011-07-13 2015-02-03 International Business Machines Corporation Performing collective operations in a distributed processing system
US8788579B2 (en) 2011-09-09 2014-07-22 Microsoft Corporation Clustered client failover
US20130067095A1 (en) 2011-09-09 2013-03-14 Microsoft Corporation Smb2 scaleout
JP5966229B2 (ja) 2011-10-27 2016-08-10 ▲ホア▼▲ウェイ▼技術有限公司Huawei Technologies Co.,Ltd. 高速データ配布のための方法および装置
US8930962B2 (en) 2012-02-22 2015-01-06 International Business Machines Corporation Processing unexpected messages at a compute node of a parallel computer
CN102708062A (zh) * 2012-04-10 2012-10-03 深圳市佳信捷电子有限公司 基于数据块的多媒体存储方法和装置
US9111081B2 (en) 2012-06-26 2015-08-18 International Business Machines Corporation Remote direct memory access authentication of a device
US9251201B2 (en) * 2012-12-14 2016-02-02 Microsoft Technology Licensing, Llc Compatibly extending offload token size
US9986028B2 (en) * 2013-07-08 2018-05-29 Intel Corporation Techniques to replicate data between storage servers
AU2013245529A1 (en) 2013-10-18 2015-05-07 Cisco Technology, Inc. Network Interface
US20150326684A1 (en) * 2014-05-07 2015-11-12 Diablo Technologies Inc. System and method of accessing and controlling a co-processor and/or input/output device via remote direct memory access
CN104202391B (zh) * 2014-08-28 2018-09-25 浪潮(北京)电子信息产业有限公司 共享系统地址空间的非紧耦合系统间的rdma通信方法
RU2599937C1 (ru) * 2015-03-26 2016-10-20 Общество с ограниченной ответственностью "Научно-производственное предприятие "Цифровые решения" Способ предотвращения сбоев в локальной компьютерной сети, вызванных возникновением неправильно настроенных узлов
US10257273B2 (en) * 2015-07-31 2019-04-09 Netapp, Inc. Systems, methods and devices for RDMA read/write operations
US9952797B2 (en) 2015-07-31 2018-04-24 Netapp, Inc. Systems, methods and devices for addressing data blocks in mass storage filing systems
RU2638781C2 (ru) * 2016-09-29 2017-12-15 Общество с ограниченной ответственностью "ГРЭК" Способ организации прямого доступа в память при передаче информации между физическими объектами
JP2019016101A (ja) * 2017-07-05 2019-01-31 富士通株式会社 情報処理システム、情報処理装置、および情報処理システムの制御方法
US10523675B2 (en) * 2017-11-08 2019-12-31 Ca, Inc. Remote direct memory access authorization
RU2731321C2 (ru) 2018-09-14 2020-09-01 Общество С Ограниченной Ответственностью "Яндекс" Способ определения потенциальной неисправности запоминающего устройства
RU2714219C1 (ru) 2018-09-14 2020-02-13 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования передачи операций ввода/вывода
RU2718215C2 (ru) 2018-09-14 2020-03-31 Общество С Ограниченной Ответственностью "Яндекс" Система обработки данных и способ обнаружения затора в системе обработки данных
RU2721235C2 (ru) 2018-10-09 2020-05-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для маршрутизации и выполнения транзакций
RU2714602C1 (ru) 2018-10-09 2020-02-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки данных
RU2711348C1 (ru) 2018-10-15 2020-01-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки запросов в распределенной базе данных
CN109377778B (zh) * 2018-11-15 2021-04-06 浪潮集团有限公司 一种基于多路rdma和v2x的协同自动驾驶系统及方法
RU2714373C1 (ru) 2018-12-13 2020-02-14 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования выполнения операций ввода/вывода
RU2749649C2 (ru) 2018-12-21 2021-06-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования обработки операций ввода/вывода
RU2720951C1 (ru) 2018-12-29 2020-05-15 Общество С Ограниченной Ответственностью "Яндекс" Способ и распределенная компьютерная система для обработки данных
RU2746042C1 (ru) 2019-02-06 2021-04-06 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для передачи сообщения

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10612A (en) * 1854-03-07 Seaman
WO1995003586A1 (en) * 1993-07-21 1995-02-02 Persistence Software, Inc. Method and apparatus for generation of code for mapping relational data to objects
US6014681A (en) * 1997-07-15 2000-01-11 Microsoft Corporation Method for saving a document using a background save thread
US6226680B1 (en) * 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6219761B1 (en) * 1998-05-06 2001-04-17 International Business Machines Corporation Load/store assist engine
US6356863B1 (en) * 1998-09-08 2002-03-12 Metaphorics Llc Virtual network file server
EP1232450A2 (en) * 1999-09-29 2002-08-21 Cyberset Technologies, Inc. Method and apparatus for an active file system
US6718370B1 (en) * 2000-03-31 2004-04-06 Intel Corporation Completion queue management mechanism and method for checking on multiple completion queues and processing completion events
US7103626B1 (en) * 2000-05-24 2006-09-05 Hewlett-Packard Development, L.P. Partitioning in distributed computer system
JP4192416B2 (ja) * 2000-06-08 2008-12-10 株式会社日立製作所 計算機システムおよびそのデータ転送方法
AU2002220108A1 (en) 2000-11-02 2002-05-15 Pirus Networks Switching system
US7313614B2 (en) * 2000-11-02 2007-12-25 Sun Microsystems, Inc. Switching system
US6891635B2 (en) * 2000-11-30 2005-05-10 International Business Machines Corporation System and method for advertisements in web-based printing
US6976174B2 (en) * 2001-01-04 2005-12-13 Troika Networks, Inc. Secure multiprotocol interface
US6898638B2 (en) * 2001-01-11 2005-05-24 International Business Machines Corporation Method and apparatus for grouping data for transfer according to recipient buffer size
US6748502B2 (en) * 2001-01-12 2004-06-08 Hitachi, Ltd. Virtual volume storage
US6898740B2 (en) * 2001-01-25 2005-05-24 Hewlett-Packard Development Company, L.P. Computer system having configurable core logic chipset for connection to a fault-tolerant accelerated graphics port bus and peripheral component interconnect bus
US7401126B2 (en) * 2001-03-23 2008-07-15 Neteffect, Inc. Transaction switch and network interface adapter incorporating same
US20020144037A1 (en) * 2001-03-29 2002-10-03 Bennett Joseph A. Data fetching mechanism and method for fetching data
US8051212B2 (en) * 2001-04-11 2011-11-01 Mellanox Technologies Ltd. Network interface adapter with shared data send resources
US20020184362A1 (en) * 2001-05-31 2002-12-05 International Business Machines Corporation System and method for extending server security through monitored load management
US6832297B2 (en) * 2001-08-09 2004-12-14 International Business Machines Corporation Method and apparatus for managing data in a distributed buffer system
DE60222782D1 (de) * 2001-08-24 2007-11-15 Intel Corp Eine allgemeine eingabe-/ausgabearchitektur und entsprechende verfahren zur unterstützung von bestehenden unterbrechungen
US6895590B2 (en) * 2001-09-26 2005-05-17 Intel Corporation Method and system enabling both legacy and new applications to access an InfiniBand fabric via a socket API
US20030065856A1 (en) * 2001-10-03 2003-04-03 Mellanox Technologies Ltd. Network adapter with multiple event queues
US20030145230A1 (en) * 2002-01-31 2003-07-31 Huimin Chiu System for exchanging data utilizing remote direct memory access
US20040010612A1 (en) * 2002-06-11 2004-01-15 Pandya Ashish A. High performance IP processor using RDMA
US20040003069A1 (en) * 2002-06-28 2004-01-01 Broadcom Corporation Selective early drop method and system
US6760793B2 (en) * 2002-07-29 2004-07-06 Isys Technologies, Inc. Transaction credit control for serial I/O systems
US7107385B2 (en) * 2002-08-09 2006-09-12 Network Appliance, Inc. Storage virtualization by layering virtual disk objects on a file system
US7051140B2 (en) * 2002-11-13 2006-05-23 International Business Machines Corporation Connector that enables aggregation of independent system resources across PCI/PCI-X bus and interlocked method for aggregating independent system resources across PCI/PCI-X bus
US7366092B2 (en) * 2003-10-14 2008-04-29 Broadcom Corporation Hash and route hardware with parallel routing scheme
US7457861B1 (en) * 2003-12-05 2008-11-25 Unisys Corporation Optimizing virtual interface architecture (VIA) on multiprocessor servers and physically independent consolidated NICs
US6996070B2 (en) * 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US8549170B2 (en) * 2003-12-19 2013-10-01 Nvidia Corporation Retransmission system and method for a transport offload engine
US20050137966A1 (en) * 2003-12-19 2005-06-23 Munguia Peter R. Flow control credit synchronization
US7698361B2 (en) * 2003-12-31 2010-04-13 Microsoft Corporation Lightweight input/output protocol

Also Published As

Publication number Publication date
US20050198113A1 (en) 2005-09-08
EP1700264A2 (en) 2006-09-13
AU2004279182B2 (en) 2010-03-11
CN101375263B (zh) 2012-06-20
TW200522630A (en) 2005-07-01
NZ580159A (en) 2011-01-28
CA2501521A1 (en) 2005-06-30
RU2009109685A (ru) 2010-09-27
RU2388039C2 (ru) 2010-04-27
IL168595A (en) 2011-02-28
MY143575A (en) 2011-05-31
BRPI0406413A (pt) 2005-10-04
EP1700264A4 (en) 2011-06-15
KR20060112178A (ko) 2006-10-31
ZA200503161B (en) 2008-01-30
JP2007527057A (ja) 2007-09-20
MXPA05006638A (es) 2006-02-22
US20100161855A1 (en) 2010-06-24
KR101084897B1 (ko) 2011-11-17
US7698361B2 (en) 2010-04-13
WO2005067430A3 (en) 2008-04-24
TW201240413A (en) 2012-10-01
AU2004279182A1 (en) 2005-07-14
MY158076A (en) 2016-08-30
WO2005067430A2 (en) 2005-07-28
CN101375263A (zh) 2009-02-25
NZ540173A (en) 2009-11-27
RU2005120695A (ru) 2006-01-20
NO20052054L (no) 2005-06-10
NO20052054D0 (no) 2005-04-26

Similar Documents

Publication Publication Date Title
JP4564970B2 (ja) ライトウエイト入力/出力プロトコル
US5913028A (en) Client/server data traffic delivery system and method
US8180928B2 (en) Method and system for supporting read operations with CRC for iSCSI and iSCSI chimney
US8713180B2 (en) Zero-copy network and file offload for web and application servers
US9438696B2 (en) Data communication protocol
US7930349B2 (en) Method and apparatus for reducing host overhead in a socket server implementation
US7921240B2 (en) Method and system for supporting hardware acceleration for iSCSI read and write operations and iSCSI chimney
JP4406604B2 (ja) Tcp/ip、rdma、及びipストレージアプリケーションのための高性能ipプロセッサ
US7917597B1 (en) RDMA network configuration using performance analysis
EP1759317B1 (en) Method and system for supporting read operations for iscsi and iscsi chimney
JP2012018699A (ja) クライアントとサーバ間の接続を管理するためのシステムおよび方法
JP2008529109A (ja) ターゲットによるiSCSIデータ移動機能のRNICベースのオフロード
US20070233886A1 (en) Method and system for a one bit TCP offload
US20050283545A1 (en) Method and system for supporting write operations with CRC for iSCSI and iSCSI chimney
US20050281261A1 (en) Method and system for supporting write operations for iSCSI and iSCSI chimney
US20060029036A1 (en) Method and apparatus for remote management
Neeser et al. SoftRDMA: Implementing iWARP over TCP kernel sockets

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070726

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100312

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100319

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100618

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100727

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100802

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130806

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees