JP4508195B2 - アウト・オブ・オーダのrdma送信メッセージの配信に関する書き込み動作の回数の減少 - Google Patents

アウト・オブ・オーダのrdma送信メッセージの配信に関する書き込み動作の回数の減少 Download PDF

Info

Publication number
JP4508195B2
JP4508195B2 JP2006543909A JP2006543909A JP4508195B2 JP 4508195 B2 JP4508195 B2 JP 4508195B2 JP 2006543909 A JP2006543909 A JP 2006543909A JP 2006543909 A JP2006543909 A JP 2006543909A JP 4508195 B2 JP4508195 B2 JP 4508195B2
Authority
JP
Japan
Prior art keywords
segment
tcp
rdma
connection
ddp
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
JP2006543909A
Other languages
English (en)
Other versions
JP2007515719A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2007515719A publication Critical patent/JP2007515719A/ja
Application granted granted Critical
Publication of JP4508195B2 publication Critical patent/JP4508195B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • 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
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • 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]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols
    • 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/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/329Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)
  • Bus Control (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)

Description

本発明は、一般に、データ転送に関し、更に具体的には、整列(aligned)DDPセグメントのためのカットスルー(cut-through)実施を用いたRDMA対応ネットワーク・インタフェース・コントローラ(RNIC:RDMA enabled network interface controller)に関する。
1.概要
図1を参照すると、従来のデータ転送環境1のブロック図が示されている。データ転送環境1は、データ・ソース2(すなわちピア(peer))を含み、これは、データ転送3Aを、1つ以上の遠隔メモリ・データ・アクセス(RDMA:remote memory data access)対応ネットワーク・インタフェース・コントローラ(複数のコントローラ)(RNIC)4を介して、データ転送3Bを受信するデータ・シンク(data sink)5(すなわちピア)に送信する。RNIC4は、とりわけ(更に以下で説明する)、リアセンブリ・バッファ6を含む。最近、ネットワーキング通信速度は、毎秒10メガビット(Mbps)から100Mbpsを経て毎秒1ギガビット(Gbps)まで著しく高速化し、今や10Gbpsの範囲の速度に近付いている。しかしながら、現在、通信帯域幅の拡大は、中央演算処理装置(CPU)がデータを効率的に処理することができる速度を上回り始めており、結果として、例えばRNIC4のようなサーバ・プロセッサにおけるネックになっている。例えば、一般的な1Gbpsネットワーク通信は、いっぱいに利用された場合、2GHzのCPUに対して大きな負担となり得る。特に、このようなCPUは、その処理能力の約半分を拡張して、ネットワーク・カードから来るデータから低レベルの伝送制御プロトコル(TCP:transmission control protocol)処理を扱うことができるだけである。
この問題を解決するための1つの手法は、CPUが処理するソフトウェアとしてでなく、ハードウェア有限状態マシン(FSM:finite state machine)において伝送制御およびインターネット・プロトコル(TCP/IP:transmission controland Internet protocol)スタックを実施することである。この手法によって、極めて高速のパケット処理が可能となり、結果として、バック・トゥー・バック(back-to-back)・ショート・パケットをワイヤ・スピードで処理することができる。更に、この手法は、非常にコンパクトかつ強力な解決策を低コストで提供する。しかしながら、TCP/IPスタックは、ソフトウェアにおける実施のために定義され開発されたので、ハードウェアでTCP/IPスタックを作成すると、様々な新しい問題が生じることになる。発生する問題とは、例えば、ソフトウェア・ベースのプロトコルをどのようにハードウェアFSMにおいて実施し、どのように性能向上を達成するかということ、上位レイヤのプロトコル(ULP:upper layer protocol)(例えばアプリケーション・プロトコル)に対する便利で効率的なインタフェースをどのように設計してULPの高速実施を可能とするかということ、および、スケールアップした実施における新しいネックをどのように回避するかということである。
これらの新しい問題に対処するために、従来のULPとTCP/IPスタックとの間に配するための新しい通信レイヤが開発されている。しかしながら、TCP/IPスタック上に置かれるプロトコルは、通常、多くのコピー動作を必要とする。なぜなら、ULPは間接的なデータ配置のためのバッファを提供しなければならないからである。これによって待ち時間が増し、多くのCPUおよびメモリ・リソースが消費される。コピー動作の量を減らすために、iWARPと呼ばれる新しいプロトコル・スイートが開発されている。
2.プロトコル
これより、図2を参照して、iWARPを含む様々なプロトコルの簡単な概要、および、データ転送フォーマット構造について説明する。図に見られるように、各データ転送は、多数の異なるプロトコルに関連する情報を含む場合があり、その各々がデータ転送に関する異なる機能性を提供する。例えば、図2に示すように、イーサネット・プロトコル100は、IEEE規格802.3によって規定されているようなローカル・エリア・ネットワーク(LAN)アクセスを提供する。インターネット・プロトコル(IP)102は、必要なネットワーク・ルーティング情報を追加する。転送制御プロトコル(TCP)104は、アウトバウンドTCPセグメント106のスケジュールを設定し、配信保証を満足させる。プロトコル・データ・ユニット(PDU)整列プロトコルを有するマーカ(MPA)108は、MPAフレーム109を提供し、これは、DDPセグメント112(1つのみ図示するが、ストリームである場合がある)間に、固定間隔で(すなわち512バイトごとに)、後方MPAマーカ(複数のマーカ)110を含み、さらに、各MPAフレーム109に対して、長さフィールド114および巡回冗長検査(CRC)フィールド116を追加する。更に、直接データ配置(DDP:direct data placement)プロトコル120は、アウトバウンド・メッセージを1つ以上のDDPセグメント112に分け、1つ以上のDDPセグメントをDDPメッセージ113へとリアセンブルする(組み立て直す)。遠隔データ・メモリ・アクセス(RDMA)プロトコル122は、DDPメッセージ内に/DDPメッセージから、RDMAの書き込み、読み取り、送信を変換する。明確さのため、DDPセグメント112は1つのみ図示するが、各TCPセグメント106に多数のDDPセグメント112を提供可能であることは認められよう。
特にRDMAプロトコル122に関して説明すると、RDMAコンソーシアムによって開発されたこのプロトコルは、あるコンピュータが直接他のコンピュータ・メモリに情報を置くことを可能とすることによって、データ・コピー動作を不要とすると共に待ち時間を短縮化する。その際に、メモリ・バス帯域幅に対する要求および中央演算処理装置(CPU)の処理オーバーヘッドは最小限に抑えられ、一方でメモリ保護方式(semantics)は維持される。TCP/IP上でRDMAを用いると、プロセッサおよびメモリに対するオーバーヘッドの負担が減ることによって、データ・センタ内でいっそう効率的かつスケーラブルなコンピューティングおよびデータ転送が期待される。このため、ユーザ・アプリケーション等の他の作業にプロセッサ・リソースを用いることができ、インフラストラクチャの利用が改善される。この場合、より大きく高価なシステムにおける集中化作業とは対照的に、ネットワークが効率化すると、ネットワーク中でタスクを共有することによって、アプリケーションがいっそうスケーラブルになることができる。RDMA機能を用いると、送信器は、フレーミングを用いてイーサネット・バイト・ストリーム上にヘッダを置くことができるので、受信器において、それらのバイト・ストリームをアウト・オブ・オーダ(out-of-order)モードで容易に復号および実行することができる。これによって、特にインターネット周辺機器接続インタフェース(iSCSI:Internet Small Computer System Interface)および他のストレージ・トラヒック・タイプにおいて性能が向上する。RDMAが提供する別の利点は、より少数の種類の相互接続を介してデータ・センタに機能を集める能力である。より少数の相互接続を介して機能を集めることによって、結果として得られるインフラストラクチャは、複雑さが軽減され、管理が容易であり、アーキテクチャ上の冗長性が得られる可能性があり、これによりシステムの回復力が改善する。
特にDDPプロトコルに関して説明すると、このプロトコルによって導入される機構により、中間バッファなしで直接データを上位レイヤ・プロトコル(ULP)の受信バッファに置くことができる。DDPは、インバウンドのTCPセグメントを処理する場合に、RDMA対応ネットワーク・インタフェース・コントローラ(RNIC)が実行する(リアセンブリ・バッファへの、またはリアセンブリ・バッファからの)追加的なコピーを少なくし、場合によっては不要とする。
3.課題
ハードウェア設定においてRDMAおよびDDPを用いてTCP/IPを効率的に実施することに伴う1つの課題は、標準的なTCP/IPオフロード・エンジン(TOE)実施において、アウト・オブ・オーダの受信TCPストリームを配列させるためのリアセンブリ・バッファが受信ロジック内に含まれ、このためにコピー動作が増えることである。更に、受信器のデータ・バッファに対する直接データ配置を完了させるために、RNICは、到着するTCPセグメント・ペイロード127の各々について宛先バッファの位置を特定することができなければならない。この結果、全てのTCPセグメントは、それらがイン・オーダ(in-order)であり宛先バッファの位置を特定可能であることを保証するために、リアセンブリ・バッファにセーブされる。この問題に対処するため、iWARP仕様では、送信RNICに対して、RDMAメッセージのセグメント化を実行する際に、生成されるDDPセグメントがTCPセグメントに対して「整列」するように行うことが強く推薦される。それにもかかわらず、多くの場合、特にデータ転送が多数の相互接続を通過する場合には、非整列の(non-aligned)DDPセグメントは避けられない。
図2を参照すると、「整列」が意味するのは、TCPヘッダ126のすぐ後にDDPセグメント112があり(すなわちMPAヘッダがTCPヘッダの次にあり、次いでDDPヘッダがある)、DDPセグメント112が完全に1つのTCPセグメント106内に含まれることである。更に具体的には、各TCPセグメント106は、TCPヘッダ126およびTCPペイロード/TCPデータ127を含む。「TCPホール」130は、TCPデータ・ストリーム内の欠落したTCPセグメント(複数のセグメント)である。MPAマーカ110が提供するデータは、アウト・オブ・オーダのTCPセグメント106が受信されて、TCPセグメント106内のMPAフレーム109がTCPセグメント106に対して整列しているか否かを受信器が知りたい場合のためのものである。各マーカ110は、特定の接続の初期シーケンス番号で始まるTCPストリーム内において等しい間隔(512バイト)で配置され、それが含まれるMPAフレーム109のDDP/RDMAヘッダ124を指し示す。第1のTCPセグメント106には、第1の順次識別番号が割り当てられ、以降のTCPセグメント106内の各初期シーケンス番号は、増分されたシーケンス番号を含む。
図2において、実線は整列したデータ転送の一例を示し、TCPヘッダ126のすぐ後にMPA長フィールド114およびDDP/RDMAヘッダ124があり、DDPセグメント112は完全にTCPセグメント106内に含まれている。DDPプロトコル120のレイヤにおける点線は、非整列のDDPセグメント112NAを示し、TCPヘッダ126のすぐ後にはMPA長フィールド114およびDDP/RDMAヘッダ124が存在しない。非整列のDDPセグメントは、例えば、送信器のRNICおよび受信器のRNIC間にあり得る中間ボックスによる再セグメント化、または実行中の最大セグメント・サイズ(MSS:maximum segment size)の縮小の結果として生じる場合がある。送信器のRNICは、DDPセグメント化を変える(TCPストリーム内のDDPヘッダの位置を変える)ことはできないので、最初のDDPセグメントが大きなMSSによって作成されたのにもかかわらず、再送信動作では、新しい小さくしたMSSが必要となり得る。いずれの場合であっても、コピー動作が増えることによって速度および効率が低下する。従って、当技術分野においては、非整列DDPセグメントの配置および配信とは異なる方法で整列DDPセグメントの配置および配信を扱う方法が必要とされている。
非整列DDPセグメント112NAの処理に関する別の課題は、何によって非整列が生じているかの判断が難しいことが多いという事実によって生じる。例えば、単一の非整列DDPセグメント112NAは、2つ以上のTCPセグメント106間で分割される可能性があり、それらのうち一方は到着するが他方は到着しない場合がある。別のケースでは、いくつかのDDPセグメント112NAがMPAマーカ110の間に位置し、ヘッダが欠落したり、またはセグメント末端部が欠落したりする(後者の場合、セグメントが部分的に配置され、残りの部分が到着した場合にどこにそれを配置するかを理解するために何らかの情報を保持する必要があり得る)等の可能性がある。この後者の場合に関して、図3は、1つ以上の非整列DDPセグメント112NAについて、MPAマーカ参照に関して起こり得る状況をブロック図で示す。ケースAは、新たに受信したDDPセグメント162のDDPセグメンド・ヘッダ160が、以前に処理したDDPセグメント166のMPA長フィールド164によって参照されている状況を示す。ケースBは、新たに受信したDDPセグメント162のヘッダ160が、新たに受信したDDPセグメント162内に位置するマーカ168によって参照されている状況を示す。すなわち、マーカ168は、新たに受信したDDPセグメント162の開始を指し示している。ケースCは、マーカ168が新たに受信したDDPセグメント162内に位置するがセグメントの外を指し示す状況を示す。ケースDは、マーカ168が新たに受信したDDPセグメント162内に位置してセグメント内を指し示す状況を示す。ケースEは、新たに受信したDDPセグメント162内に位置するマーカが存在しない状況を示す。いずれの場合であっても、DDPセグメントの非整列の原因を判定することができない場合、RNICは直接データ配置を行うことができない。なぜなら、ケースが多すぎて適切に対処することができず、情報/部分セグメントが多すぎて中間ストレージ内に保持することもできないからである。従って、整列および非整列DDPセグメントの異なる処理を提供する解決策はいずれも、非整列を発生させ得る様々な状況に対処しなければならない。
4.DDP/RDMA動作フロー
これより、図4から図8を参照して、後の記載のために、DDP/RDMA動作フローの簡単な概要を説明する。特にDDPプロトコル120(図2)に関して述べると、DDPは、タグ付きメッセージおよびタグなしメッセージと称する2つのタイプのメッセージを提供する。図4を参照すると、「タグ付きメッセージ」において、各DDPセグメント112(図2)は、DDP/RDMAヘッダ124内に、データを直接配置することができる受信器上の宛先バッファ内のメモリ領域/ウインドウ(例えば図7のメモリ領域232)を識別するステアリング・タグ(「STag」:steering tag)、この領域/ウインドウ内のターゲット・オフセット(TO)、およびセグメント・ペイロード(図示せず)を保持する。この場合、宛先バッファの可用性は、STagを介して「発表」される。図5を参照すると、「タグなしメッセージ」は、遠隔の送信器が受信器におけるバッファを知らず、キューID(QN)、メッセージ・シーケンス番号(MSN)、およびメッセージ・オフセット(MO)を用いてメッセージを送信するものであり、これらが受信器によって用いられて、適切なバッファを判定することができる。
図6から図8を参照すると、RDMAプロトコルは、4つのタイプのメッセージを規定する。すなわち、送信200、書き込み202、読み取り204、および読み取り応答206である。図1に戻ると、バーブ・インタフェース(verb interface)7は、RNIC4をコンシューマ(consumer)に提示し、RNIC4リソースの割り当ておよび割り当て解除を行うため、ならびに、ワーク要求(WR:work request)208をRNIC4にポストするための方法を含む。バーブ・インタフェース7は、通常、2つの部分を有するバーブ・ライブラリ8によって実施される。すなわち、ユーザ空間コンシューマのためのユーザ空間ライブラリ9A、および、カーネル空間コンシューマのためのカーネル・モジュール9Bである。バーブ・インタフェース7は、特定のRNIC用のソフトウェアであり、RNIC4のハードウェアおよびファームウェアと共に動作する。バーブ・インタフェース7(バーブ・ライブラリ8)、ハードウェア、およびファームウェアにおいて何を実施しなければならないかに関して、厳密な規定はない。バーブ・インタフェース7は、RNIC4のサービスをコンシューマに提供する単一のパッケージと考えることができるので、コンシューマは主に2つのタイプの動作を実行することができる。すなわち、RNIC4のリソース管理(割り当ておよび割り当て解除)、ならびに、RNIC4へのワーク要求(複数の要求)(WR)のポスティングである。RNIC4のリソース管理の例は、キュー対の割り当ておよび割り当て解除、完了キュー(以降、「CQ(completion queue)」と称する)の割り当ておよび割り当て解除、またはメモリ領域の割り当ておよび割り当て解除である。これらの管理タスクについては、以下で更に詳細に説明する。
図6から図8に示すように、コンシューマは、ワーク要求208をポストするキュー対を割り当てる。「キュー対(queue pair)」(以降、「QP」と称する)は、TCP接続に関連付けられ、1対のワーク・キュー(work queue)(例えば送信および受信)210、212、ならびに、各キューごとのポスティング機構(図示せず)を含む。各ワーク・キュー210、212は、ワーク・キュー要素(WQE:work queue elements)216のリストであり、各WQEは1つのワーク要求(WR)208を記述する何らかの制御情報を保持し、コンシューマバッファを示す(または指し示す)。コンシューマは、ワーク要求(WR)208をワーク・キュー210、212にポストして、バーブ・インタフェース7(図1)およびRNIC4(図1)に、ポストしたワーク要求(WR)208を実行させる。更に、読み取りキュー214(図8)およびワーク・キュー要素(WQE)216等、コンシューマが直接インタラクトしないQPを構成することができるリソースがある。
WQE216によって保持することができる典型的な情報は、コンシューマワーク要求(WR)のタイプ(すなわち、送信WR208Sでは、RDMA送信、RDMA書き込み、RDMA読み取り等とすることができ、受信WR208Rでは、RDMA受信のみとすることができる)、および、送信するためのデータを保持するか、または受信データのための位置を表すコンシューマバッファの記述である。WQE216は、常に、単一のRDMAメッセージを記述する/単一のRDMAメッセージに対応する。例えば、コンシューマがRDMA書き込みタイプの送信ワーク要求(WR)208Sをポストした場合、バーブ・ライブラリ8(図1)は、RDMA書き込みメッセージを用いて、WQE216Sを構築し、データを取得し応答側に送信する必要があるコンシューマバッファを記述する。別のケースでは、受信ワーク要求(WR)208R(図6)が存在する。この場合、バーブ・ライブラリ(図1)は、受信した送信メッセージ200のペイロードを配置するために用いられるコンシューマバッファを保持する受信キュー(RQ)212に、WQE216Rを追加する。
バーブ・ライブラリ8(図1)が、新しいWQE216を送信キュー(SQ)210または受信キュー(RQ)212に追加すると、バーブ・ライブラリ8は、RNIC4(図1)に、新しいWQE216が送信キュー(SQ)/受信キュー(RQ)にそれぞれ追加されたことを知らせる(ここでは「呼び鈴を鳴らす」と言う)。この「呼び鈴を鳴らす」動作は通常、RNICメモリ空間に対する書き込みであり、これはRNICハードウェアによって検出されて復号される。従って、呼び鈴を鳴らすことによって、RNICに、特定のSQ/RQについてそれぞれ実行する必要がある新たなワークがあることを知らせる。
RNIC4(図1)は、待ち状態の(ポストされた)WQE216を有する送信キュー(SQ)210のリストを保持する。更に、RNICは、それらの送信キュー(SQ)210間のアービトレーションを行い、それらを一つずつ処理する。RNIC4が処理対象の送信キュー(SQ)210を選ぶと、処理対象の次のWQE216を読み出し(WQEはコンシューマによってポストされた順序でRNICによって処理される)、要求されたRDMAメッセージに属する1つ以上のDDPセグメント220を作成する。
ここで、図6から図8を参照して、特定のタイプのRDMAメッセージの処理について説明する。図6に示すように、RNIC(要求側)は、特定の送信キュー(SQ)210Sを処理することを選択する。RNICは、送信キュー(SQ)210SからWQE216Sを読み取る。このWQE216SがRDMA送信要求に相当する場合、RNICは送信メッセージを作成し、このメッセージをピアのRNIC(応答側)に送信する。作成したメッセージは、例えば、3つのDDPセグメント220を含む場合がある。RNIC(応答側)は、送信メッセージを受信すると、受信キュー(RQ)212からWQE216Rを読み取り、受信したDDPメッセージ220のペイロードを、そのWQE216Rが参照するコンシューマバッファ(すなわち応答側Rxバッファ)230に配置する。送信メッセージ200がイン・オーダで受信された場合、RNICは、受信キュー(RQ)212から、第1の未使用のWQE216Rを選択する。WQE216Rは、コンシューマによってポストされた順序で要求キュー(RQ)212内に連鎖されている(chained)。タグなしDDPメッセージに関しては、送信メッセージ200は、メッセージ・シーケンス番号(MSN)(図5)を保持する。これは1に初期化され、送信側によって単調に増分される。送信された各DDPメッセージ220は、同じDDPキューに属する。(タグ付きメッセージについては、以下でRDMA書き込みメッセージ202に関連付けて説明する)。DDPキューは、DDPヘッダ内のキュー番号(QN)(図5)によって識別される。RDMAプロトコルは、3つのDDPキューを規定する。すなわち、インバウンドRDMA送信についてQN#0、インバウンドRDMA読み取り要求についてQN#1、インバウンド終了についてQN#2である。従って、送信メッセージ200がアウト・オブ・オーダで到着した場合、RNIC4は、そのメッセージのMSNを用いて、その送信メッセージ200に対応するWQE216Rを見つけることができる。1つの受信された送信メッセージ200は、受信キュー(RQ)212から、1つのWQE216Rを消費する。ポストされたWQEが無いこと、またはメッセージ・データ長がWQEバッファの長さを超えることは、重大なエラーと見なされ、接続終了となる。
これより、図7および図8を参照して、タグ付き動作を用いたRDMA書き込みメッセージ202、およびRDMA読み取りメッセージ204の一部について説明する。タグ付き動作を用いるために、コンシューマはメモリ領域232を登録する必要がある。メモリ領域232は、受信器すなわち図7の応答側のピン・メモリ(pinned memory)の仮想連続領域である。メモリ領域232は、その開始仮想アドレス(VA)、長さ、アクセス許可、およびそのメモリ領域232に関連した物理ページのリストによって記述される。メモリ領域232を登録した結果、コンシューマはステアリング・タグ(STag)を再び受信し、これを用いてその登録メモリ領域232にアクセスすることができる。遠隔コンシューマ(例えば図7の要求側)によるメモリ領域232のアクセスは、RNIC4によって実行され、ローカルなコンシューマ(例えば図7の応答側)とのインタラクションは行われない。コンシューマが遠隔メモリ232にアクセスしたい場合、RDMA書き込みまたはRDMA読み取りタイプの送信ワーク要求(WR)208Wまたは208R(図8)をそれぞれポストする。バーブ・ライブラリ8(図1)は、対応するWQE216W(図7)または216R(図8)を、送信キュー(SQ)210Wまたは210Rにそれぞれ追加し、RNIC4に通知する。接続がアービトレーションで使用権を得た場合、RNIC4はWQE216Wまたは216Rを読み、RDMA書き込みメッセージ202またはRDMA読み取りメッセージ204をそれぞれ作成する。
特にRDMA書き込みメッセージ202について説明すると、図7に示すように、RDMA書き込みメッセージ202がRNIC4によって受信されると、RNICは、(そのメッセージに属する)DDPセグメントのヘッダ内のSTagおよびTO(図4)および長さを用いて、登録されたメモリ領域232を探し出し、RDMA書き込みメッセージ202のペイロードをメモリ232に配置する。受信器のソフトウェアまたはCPU(すなわち図示する応答側)は、データ配置動作には関与せず、この動作が行われていることを認識しない。
特にRDMA読み取りメッセージ204について説明すると、図8に示すように、メッセージがRNIC4(図1)によって受信されると、RNICは、RDMA読み取り応答メッセージ206を作成し、これを、遠隔ホストすなわち図示するような要求側に返信する。この場合、受信キューを読み取りキュー214と呼ぶ。また、RDMA読み取り応答206の作成は、ローカルなコンシューマ(すなわち応答側)の関与なしに行われ、コンシューマはこの動作が行われていることを認識しない。RDMA読み取り応答206が受信されると、RNIC4(図1)は、このメッセージを、RDMA書き込みメッセージ204と同様に処理する。すなわち、要求側のメモリ領域232に書き込みを行う。
コンシューマワーク要求の処理に加えて、RNIC4(図1)は、図6から図8に示すように、それらの要求の完了についてコンシューマに通知する。完了通知は、完了キュー240を用いて行われる。これは、別のRNICリソースであり、コンシューマによって(バーブ・ライブラリ8が提供する専用の機能を介して)割り当てられる。完了キュー240は、完了キュー要素(CQE:completion queue elements)242を含む。RNIC4(図1)がコンシューマワーク要求(WR)208S、208W、208RRの完了を報告した場合、RNIC4は、CQE242を完了キュー(CQ)240に配置する。各ワーク・キュー(すなわち送信キュー(SQ)210、受信キュー(RQ)212)は、関連する完了キュー(CQ)240を有する。(注:読み取りキュー214はハードウェアによって維持される内部キューであり、ソフトウェアには見えない。従って、CQ240はこのキューに関連付けられず、コンシューマはこのキューを割り当てず、その存在について知らない)。しかしながら、同一の完了キュー(CQ)240を、2つ以上の送信キュー(SQ)210および受信キュー(RQ)212に関連付けることが可能であることに留意すべきである。関連付けは、キュー対(QP)の割り当て時に行われる。動作において、コンシューマがワーク要求WR208を送信キュー(SQ)210にポストする際に、この要求が完了した場合に通知を受け取りたいか否かを指定することができる。コンシューマが完了通知を要求した場合、RNIC4は、ワーク要求(WR)の完了時に、送信キュー(SQ)210に関連付けられた関連完了キュー(CQ)240に完了キュー要素(CQE)242を配置する。RDMAプロトコルでは、送信キュー(SQ)210にポストされたワーク要求(WR)208について、極めて単純な完了順序付けが規定されている。具体的には、RDMA送信ワーク要求(WR)208SおよびRDMA書き込みワーク要求(WR)208Wは、それらが高い信頼性で送信された場合に完了する。RDMA読み取りワーク要求(WR)208Rは、対応するRDMA読み取り応答メッセージ206が受信されてメモリ領域232に配置された場合に完了する。コンシューマのワーク要求(WR)は、それらが送信キュー(SQ)210にポストされた順序で完了する。図6を参照すると、受信キュー(RQ)212にポストされた各ワーク要求(WR)も完了通知を必要とする。従って、RNIC4(図1)は、受信した送信メッセージ200の配置を終えると、受信キュー(RQ)212に関連付けた完了キュー(CQ)240に完了キュー要素(CQE)242を配置する。
前述のことを考慮すると、当技術分野において、非整列DDPセグメントの配置および配信とは異なる方法で整列DDPセグメントの配置および配信を処理する方法が必要とされている。
本発明が含むRNIC実施は、特定の接続の全ての受信DDPセグメントが整列している場合にはメモリに直接データ配置を行い、特定の接続のいくつかのDDPセグメントが非整列である場合にはリアセンブリ・バッファを通してデータを移動させる。リアセンブリ・バッファにアクセスすることなくカットスルーを行う接続のタイプを「高速(Fast)」接続と称し、他方のタイプを「低速(Slow)」接続と称する。コンシューマは、接続を確立する場合、接続タイプを指定する。例えば、インターネットを介して別の大陸へと至る接続は、整列したセグメントで宛先に到着する可能性が低く、従って、コンシューマによって「低速」接続タイプとして指定されるはずである。これに対して、1つのストレージ・エリア・ネットワーク(SAN)内で2つのサーバが接続されている接続は、全てのDDPセグメントが整列している可能性が高く、従って、コンシューマによって「高速」接続タイプとして指定されるであろう。接続タイプは、高速から低速に、およびその逆に変更することができる。本発明は、メモリ帯域幅、待ち時間、TCP再送信を用いたエラー回復を少なくし、空の受信キュー、すなわち、受信キューが、インバウンドのタグなしDDPセグメントについて、ポストされたワーク・キュー要素(WQE)を有しない場合に、「適切な」回復を行うことができる。従来の実施では、接続が終了することになる。これに対して、本発明による高速接続では、かかるセグメントをドロップし、TCP再送信プロセスを用いて、この状況から回復し、接続の終了を回避する。また、この実施では、高速接続において、インバウンドDDPセグメントの大部分について巡回冗長検査(CRC)の妥当性確認を行い、その後でセグメント受信を確認するTCP肯定応答(Ack)を送信することができる。これによって、TCPの信頼性の高いサービスを用いて、CRC検査で検出されたデータ破損から効率的に回復することができる。
本発明の第1の態様は、アウト・オブ・オーダのRDMA送信メッセージの配信に関連した書き込み動作の回数を減らす方法に関する。この方法は、参照カウンタに完了キュー要素(CQE)を供給するステップと、参照カウンタを、選択したTCPホールについて完了したRDMA送信メッセージの数にセットするステップと、RDMAバーブ・インタフェースによって行われる各完了のためのポーリングごとに、参照カウンタを1だけ減らすステップと、カウンタがゼロになった場合に、CQEを各完了キュー(CQ)から除去するステップと、を含む。
本発明の第2の態様は、アウト・オブ・オーダのRDMA送信メッセージの配信に関連した書き込み動作の回数を減らすためのシステムに関する。このシステムは、完了キュー要素(CQ)の参照カウンタを、選択したTCPホールについて完了したRDMA送信メッセージの数にセットするための手段と、RDMAバーブ・インタフェースによって行われる各完了のためのポーリングごとに、参照カウンタを1だけ減らすための手段と、カウンタがゼロになった場合に、CQEを各完了キュー(CQ)から除去するための手段と、を含む。
本発明の第3の態様は、アウト・オブ・オーダのRDMA送信メッセージの配信に関連した書き込み動作の回数を減らすためのコンピュータ読み取り可能プログラム・コードが埋め込まれたコンピュータ使用可能媒体を含むコンピュータ・プログラムに関する。このコンピュータ・プログラムは、完了キュー要素(CQE)に関連した参照カウンタを、選択したTCPホールについて完了したRDMA送信メッセージの数にセットするように構成されたプログラム・コードと、RDMAバーブ・インタフェースによって行われる各完了のためのポーリングごとに、参照カウンタを1だけ減らすように構成されたプログラム・コードと、カウンタがゼロになった場合に、CQEを各完了キュー(CQ)から除去するように構成されたプログラム・コードと、を含む。
本発明の前述およびその他の特徴は、本発明の実施形態の以下の更に具体的な説明から明らかとなろう。
図面を参照して、本発明の実施形態を詳細に説明する。図面において、同様の名称は同様の要素を表す。
以下の概略は、整理する目的のみのため与える。すなわち、I.概要、II.イン・ロジック、III.アウト・ロジック、IV.結論である。
I.概要
A.環境
添付図面を参照すると、図9は、本発明の一実施形態によるデータ転送環境10のブロック図である。データ転送環境10は、データ・ソース12(すなわちピア)を含み、これは、データ転送14Aを、1つ以上の遠隔メモリ・データ・アクセス(RDMA)対応ネットワーク・インタフェース・コントローラ(複数のコントローラ)(RNIC)16を介して、データ転送14Bを受信するデータ・シンク18(すなわちピア)に送信する。説明の目的のため、データ転送を開始するエンティティを、本明細書において「要求側」と称し、データ転送に応答するものを、本明細書において「応答側」と称する。同様に、データを伝送するエンティティを、本明細書において「送信側」と称し、データ転送を受信するものを、本明細書において「受信側」と称する。データ・ソース12およびデータ・シンク18の各々は、異なる時点で、データの送信側もしくは受信側、または要求側もしくは応答側になる場合があり、「ソース」および「シンク」という表示は、転送するデータを保持するエンティティを最初に表す目的のためにのみ与えることを認識すべきである。また、以下の説明は、上述のエンティティの1つを「コンシューマ」と示す場合があり(RNIC16のリソースを消費するので)、この場合、これより具体的な表示は必要ない。「宛先バッファ」は、受信側においてデータを最終的に受信するデータ・ストレージ、すなわちデータ・ソース12またはデータ・シンク18のデータ・バッファ50を示す。データ・ソース12およびデータ・シンク18は、各々、データをストアするためのデータ・バッファ50を含む。
ハードウェアに関して説明すると、RNIC16は、iWARPおよびバーブ機能性を有するネットワークI/Oアダプタまたは埋め込みコントローラ等、いずれかのネットワーク・インタフェース・コントローラである。また、RNIC16は、バーブ・インタフェース20、アクセス制御30、RNIC入力ロジック(以下では「イン・ロジック」と呼ぶ)32、リアセンブリ・バッファ34、内部データ・バッファ38、RNIC出力ロジック(以下では「アウト・ロジック」と呼ぶ)40、接続コンテキスト42、妥当性確認ユニット44、および他のコンポーネント46を含む。バーブ・インタフェース20は、コンシューマに対するRNIC16の提示であり、RNIC16ハードウェアおよびRNICドライバ(図示せず)の組み合わせによって実施されて動作を実行する。バーブ・インタフェース20は、バーブ・ライブラリ22を含み、これは2つの部分、すなわちユーザ空間ライブラリ24およびカーネル・モジュール26を含む。アクセス制御30は、イン・ロジック32に対するアクセスを制御するためのいずれかの現在既知のロジックまたは後に開発されるロジックを含むことができる。リアセンブリ・バッファ34は、データ転送14A、14Bに関するデータを一時的にストアするためのいずれかの機構を含む場合がある。特に、リアセンブリ・バッファ34は、一般に、アウト・オブ・オーダのTCPストリームを一時的にストアするために用いられる。これについては、以下で更に詳細に説明する。他のコンポーネント46は、RNIC16の動作のために必要な他のいずれかのロジック、ハードウェア、ソフトウェア等を含む場合があるが、本明細書において特に説明は行わない。
図10を参照すると、接続コンテキスト42は、接続に特定的なデータをストアするための多数のフィールドを含む。他のコンテキストデータ60は、接続に特定的なデータを提供し、これは、本明細書において特に説明しないが、当業者には認められるものである。本発明によれば、2つの接続タイプが規定される。すなわち、高速(以降「FAST」と呼ぶ)接続および低速(以降「SLOW」と呼ぶ)接続である。「高速」および「低速」という言葉は、接続が整列DDPセグメントを配信する可能性を示す。接続タイプは、接続タイプ62と呼ぶ接続コンテキストフィールドにおいて識別される。SLOW接続は、SLOW接続として生成されたか、または、インバウンド・データの処理中にRNIC16によって格下げされた(downgraded)RDMA接続のために用いることができる。これについては、以下で更に詳細に説明する。図10に示す他のフィールドについては、本開示中の他の節において、関連する処理に基づいて説明する。図11を参照すると、妥当性確認ユニット44は、妥当性確認処理の必要性に応じて、巡回冗長検査(CRC)ロジック64、TCPチェックサム・ロジック66、および蓄積交換(store-and-forward)バッファ68を含む。
B.RNICの全体的な動作
図9に戻ると、動作において、RNIC16は、イン・ロジック32に対するアクセスを制御するアクセス制御30を介して、データ転送14Aを受信する。接続を維持するための情報は、従来のように、他のコンテキストデータ60(図10)に保持されている。イン・ロジック32は、データ転送14AにおけるインバウンドTCPセグメントを処理し、TCPチェックサム・ロジック66(図11)によって受信したTCPセグメントの妥当性確認を実行し、CRCロジック64(図11)によってMPA CRCを計算し、FAST接続データ・ストリームをSLOW接続データ・ストリームから分離する。後者の機能に関して、以下で更に充分に説明するイン・ロジック32は、SLOW接続でRNIC16が受信した全てのデータをリアセンブリ・バッファ34に送出し、FAST接続を多数の異なる方法で処理する。FAST接続に関して説明すると、イン・ロジック32が整列の違反を検出した(すなわち、TCPヘッダのすぐ後にDDPヘッダがなく、DDPセグメントが完全に1つのTCPセグメント内に含まれていない)場合、接続はSLOW接続に格下げされ、データはリアセンブリ・バッファ34に送出される。これに対して、整列の違反が存在しない場合、イン・ロジック32は、整列したインバウンドDDPストリームを、内部データ・バッファ38に、次いでアウト・ロジック40に送出して、宛先データ・バッファ50に直接配置する。あるいは、TCPセグメント106がドロップされ、肯定応答(Ack)が送信されず、このためセグメントの再送信を必要とする場合がある。
アウト・ロジック40は、FAST接続およびSLOW接続の間のアービトレーションを行い、双方の接続タイプのストリームをデータ・シンク18のデータ・バッファ50に対してデータ配置する。FAST接続上の整列したDDPセグメントが内部データ・バッファ38に送出され、宛先バッファに直接配置されるという状況を、「カットスルー・モード」と呼ぶ。なぜなら、整列DDPセグメントを有するFAST接続は、直接アウト・ロジック40によって配置され、リアセンブリ・バッファ34を無視するからである。しかしながら、接続タイプの双方で、イン・オーダの受信データ・ストリームのみが、アウト・ロジック40を介してデータ・シンク18に配信される。
II.イン・ロジック
図12を参照して、本発明によるイン・ロジック32(図9)およびそのデータ転送14Aの処理のフロー図を更に詳細に記載する。上述したように、イン・ロジック32は、インバウンドTCPセグメントを処理し、受信したセグメントのTCP妥当性確認を実行し、MPA CRCを計算し、SLOW接続データ・ストリームからFAST接続データ・ストリームを分離する。特に注記しない限り、「S」が付かない参照番号は、図9から図11に示す構造を示す。
第1のステップS1において、イン・ロジック32は、RNIC16接続に属するデータ転送14AのTCPセグメント106をフィルタリングし、受信したセグメントについて(妥当性確認ユニット44によって)計算したCRC妥当性確認の結果と共にパケットを取得する。(CRC妥当性確認は、イン・ロジック32決定処理の前に行わなければならないことに留意すべきである。また、CRC妥当性確認は、ステップS2においてTCPセグメント106をFAST接続に属するものとして識別する前に、TCPチェックサム計算と同時に実行可能である。)
ステップS2において、イン・ロジック32は、TCPセグメント106がSLOW接続に属するか否かを判定する。この場合、イン・ロジック32は、送信側がどのように接続をラベリングしたかを判定する。YESの場合、TCPセグメント106はリアセンブリ・バッファ34に送出され、ステップS3において、TCPロジックはこのセグメントの受信が成功したと見なす。
NOの場合、イン・ロジック32は先に進み、ステップS4において、TCPセグメント106長が、提示(state)されたMPAセグメント長より大きいか否かを判定する。すなわち、TCPヘッダ126において提示されているTCPセグメント106長が、MPA長フィールド114において提示されているMPA長よりも長いか否かが判定される。YESの場合、これは、TCPセグメント106が多数のDDPセグメント112を含むことを示す。その処理については以下で説明する。NOの場合、これは、TCPセグメント106が単一のDDPセグメント112または112NAを含むことを示す。
この後者の場合、ステップS5において、イン・ロジック32は、MPA長がTCPセグメント106長より大きいか否かを判定する。YESの場合、これは、3つの状況のうち1つを示す。(1)単一のDDPセグメント112NAがTCPセグメント106に整列しておらず、MPA長フィールドと想定されたフィールドは長さフィールドではない。(2)単一のDDPセグメント112の最初の部分がTCPセグメント106に整列しているが、単一のDDPセグメントの長さがTCPセグメント106のペイロード・サイズを超えている。(3)受信した単一のDDPセグメント112がTCPセグメント106に整列しているが、そのMPA長フィールド114が破損している。最初の2つの場合((1)および(2))は、非整列の単一DDPセグメント112NAがFAST接続上で受信され、従って、ステップ3において、接続をSLOW接続に格下げしなければならないことを示す。第3の場合(3)は、接続の格下げを必要としない。しかしながら、MPAフレーム109の長さがTCPセグメント106の長さを超えている理由は識別および確認することができないので、かかるTCPセグメント106のドロップ(すなわち取り消しおよび非転送)は得策ではない。なぜなら、これはデッドロックを生じる恐れがあるからである(上述のケース(2))。すなわち、かかるTCPセグメントが実際に非整列DDPセグメントを保持する場合、送信側は同一の非整列DDPセグメントを再送信するが、これは同じフローに従うので、受信側によって繰り返しドロップされて、デッドロックを生じる。従って、イン・ロジック32は、ステップS3において、TCPセグメント106のデータ転送をリアセンブリ・バッファ34に送出し、Ackをスケジューリングして、TCPセグメント106の受信が成功したことを確認し、接続をSLOW接続に格下げする(すなわち、図10における接続タイプ・フィールド62を高速から低速に切り替える)。以下で説明するように、MPA長フィールド114が破損している場合(上述のケース(3))、これはアウト・ロジック40によって検出され、妥当性確認ユニット44が検出するCRCエラーのために、接続は閉じられる。従って、ステップS3における接続の格下げでは、整列DDPセグメント112におけるデータ破損のためにFAST接続を永続的にSLOW接続にするわけではない。
ステップS5に戻ると、MPA長がTCP長より大きくない場合、すなわちNOの場合、これは、MPAフレーム109長がTCPセグメント106長に一致する(等しい)ことを示す。イン・ロジック32は、ステップS6に進み、このTCPセグメント106についてCRC妥当性確認の結果が有効であるか否か、すなわち、CRCロジック64が「有効」という指示を戻したか否かを判定する。YESの場合、これは、単一のDDPセグメント112がTCPセグメント106の境界にちょうど適合し(すなわち長さが互いに等しい)、このセグメントについてデータ破損が検出されていないことを示す。この結果、ステップS7では、受信したTCPセグメント106を、RNIC16の内部データ・バッファ38に配置し、アウト・ロジック40によって処理することによって、単一のDDPセグメント112を「高速経路モード」で処理する。これによって、例えばデータ・シンク18のような受信側の宛先データ・バッファ50に、受信したTCPセグメント106を直接配置する。更に、このTCPセグメント106の受信成功を確認するように、Ackをスケジューリングする。
CRCロジック64が「無効」という指示を返した場合、すなわちステップS6においてNOの場合、これは、本発明に従って判定可能である5つの起こり得るケースのうち1つが存在することを示す。図3は、5つの起こり得るケースを示し、ステップS8からステップS10は、どのようにイン・ロジック32が各ケースを処理するかを示す。いずれの場合でも、処理の目的は、(1)送信側によってFAST接続として宣言されたものであっても、非整列接続の終了を回避すること、(2)FAST接続に属する整列DDPセグメントにおけるデータ破損による接続終了の可能性を低くすること、および(3)別個に処理されるケースの数を最小限に抑えながら、可能な限りイン・ロジック32を単純にすること、である。
ステップS8において、イン・ロジック32は、図3のケースAに示すように、新たに受信したDDPセグメント162のDDPセグメント・ヘッダ160が、以前に処理したDDPセグメント166のMPA長フィールド164によって参照されているか否かを判定する。この場合、以前に処理したDDPセグメント166のMPA長は、新たに受信したDDPセグメント162のMPA CRCの妥当性確認中にチェックされたので、次のセグメント内のDDPヘッダ160の正しい位置を示す。ステップS6において、ケースAについてCRCが無効であったことは、単一のDDPセグメント162のデータまたはヘッダ160が破損していることを意味する。この問題は、新たに受信したセグメント162のTCP再送信によって解決される。従って、ステップS9において、TCPセグメント106をドロップし、セグメント受信は確認されていないと見なされる。
新たに受信したDDPセグメント162のヘッダ160が、以前に処理したDDPセグメント166のMPA長フィールド164によって参照されていない場合(ステップS8においてNO)、イン・ロジック32はステップS10に進み、図3のケースBに示すように、新たに受信したDDPセグメント162のヘッダ160が、新たに受信したDDPセグメント162の内部に位置するマーカ168によって参照されているか否かを判定する。すなわち、マーカ168は、新たに受信したDDPセグメント162の最初の部分を示している。この場合、ステップS6においてCRCが無効であることは、次のいずれかを示す。(1)マーカ168が正しい値を保持し、新たに受信したDDPセグメント162が有するDDPヘッダ160またはデータが破損している、または、(2)新たに受信したDDPセグメント162の内部のマーカ168が破損している。双方の場合で、この問題は、新たに受信したDDPセグメント162を再送信することによって解決される。従って、ステップS9において、TCPセグメントをドロップし、セグメント受信は確認されない。
新たに受信したDDPセグメント162のヘッダ160が、新たに受信したDDPセグメント162内部に位置するマーカ168によって参照されない場合、すなわちステップS10においてNOの場合、3つのケースのうち1つが存在する。第1に、図3のケースCに示すように、マーカ168は新たに受信したDDPセグメント162内に位置するが、セグメントの外部を指し示す。第2に、図3のケースDに示すように、マーカ168は新たに受信したDDPセグメント162に位置するが、セグメント内部を指し示す。第3に、図3のケースEに示すように、新たに受信したDDPセグメント162内に位置するマーカは存在しない。
ケースC、D、およびEにおいて、CRCロジック64が無効という指示を戻す理由は明らかでなく、非整列DDPセグメント112NA(図2)のデータ破損あるいは受信またはその両方の結果である可能性がある。かかるセグメントを無制限に再送信すると、非整列DDPセグメント112NAの場合にデッドロックを生じる恐れがある。起こり得るデッドロックを回避するために、イン・ロジック32は、ステップS3に示すように、新たに受信したDDPセグメント162をリアセンブリ・バッファ34に送出し、セグメントの受信成功を確認するようにAckをスケジューリングし、接続をSLOW接続に格下げすることによって、ケースC、D、およびEを処理する。CRCロジック64が無効という指示を戻す理由が、整列DDPセグメント112におけるデータ破損であった場合、以下で説明するように、このエラーはアウト・ロジック40によって検出され、この場合、SLOW接続のデータ処理および接続は終了する。その他の場合、接続は永続的にSLOW接続のままである。しかしながら、以下で説明するように、有限再送信試行モード(Limited Retransmission Attempt Mode)によって、この問題を防ぐことができる。
図3のステップS4に戻り、イン・ロジック32が、TCPセグメント106長がMPAフレーム109長より大きいと判定した場合、これは、TCPセグメント106が多数のDDPセグメント112を含むことを示す。この場合、ステップS11において、第1から最後までのDDPセグメント112において、CRCロジック64の妥当性確認結果を順次検査する。全てのDDPセグメント112が有効CRCを有する場合、すなわちYESの場合、全てのDDPセグメント112は完全にTCPセグメント106に含まれ、全て有効な、適切に整列されたDDPセグメント112である。この場合、ステップS7において、イン・ロジック32は、受信したTCPセグメント106をRNIC16の内部データ・バッファ38に配置し、アウト・ロジック40によって処理することによって、高速経路モードでDDPセグメント112を処理する。これにより、受信したTCPセグメント106を、例えばデータ・シンク18のデータ・バッファ50のような宛先データ・バッファに配置する。更に、このTCPセグメント106の受信成功を確認するように、Ackをスケジューリングする。第1の故障が検出された場合、イン・ロジック32は、CRC妥当性確認結果の検査を停止する。その処理について、ステップS12からS13に関連付けて説明する。
ステップS12において、イン・ロジック32は、第1のDDPセグメント112が無効CRCを有することがCRCロジック64によって判定されたか否かを判定する。YESの場合、イン・ロジック32は、第1のDDPセグメント112を、単一のDDPセグメントの無効CRCの場合と同様に処理する(ステップS8)。すなわち、イン・ロジック32は、無効CRCを有する第1のDDPセグメント112を単一DDPセグメント112として扱い、更に先に進んで、何がCRCの無効を引き起こしたか、すなわち図3のケースAからEのどれが当てはまるか、および、どのようにこのケースを適切に扱うかを判断する。
ステップS12の結果がNOである場合、すなわち第1のDDPセグメント112が有効CRCを有する場合、イン・ロジック32は先に進んで、ステップS13において、中間または最後のDDPセグメント112を検査した場合にCRC無効が検出されたか否かを判定する。YESの場合、イン・ロジック32(図1)はステップS9に進む。なぜなら、このエラーは、CRC無効を引き起こしたDDPセグメント112のデータまたはヘッダが破損していることを示すからである(すなわち、有効CRCを有する以前のDDPセグメントの長さ)。すなわち、CRCエラーは、同一のTCPセグメント106内の中間または最後のDDPセグメント112上で検出された。これが意味するのは、先行するDDPセグメントが有効CRCを有し、従って、先行するDDPセグメントの長さは、無効CRCを有するセグメントのヘッダを指し示すということである。これは、ケースA(図1)の説明に一致する。従って、ケースAに示すように、ヘッダの位置は既知であり、このため、CRCエラーはデータ破損またはヘッダ破損のいずれかによって引き起こされたことがわかる。従って、この問題は、全TCPセグメントの再送信によって解決され、デッドロック状況が生じる危険はない。ステップS9において、TCPセグメントはドロップされ、セグメント受信は確認されない。
ステップS13の結果がNOである場合、すなわち、中間または最後のDDPセグメント112がCRC無効を引き起こしたのではない場合、これは、最後のDDPセグメント112のMPA長フィールド114がTCPセグメント106境界を超えていること、すなわち、最後のDDPセグメントがTCPセグメント106境界の外にあることすなわち長すぎることを示す。この場合、イン・ロジック32は、単一のDDPセグメントが長すぎるのと同じ状況として処理を行う。具体的には、イン・ロジック32は、ステップS3に進んで、TCPセグメント106のデータ転送14Aをリアセンブリ・バッファ34に送出し、TCPセグメント106の受信が成功したことを確認するようにAckをスケジューリングし、接続をSLOW接続に格下げする。このようにして、デッドロックを回避する。RNIC16が、TCPセグメント106に含まれる多数のDDPセグメント112の1つをドロップすることを決めた場合、全TCPセグメント106はドロップされ、これによって、実施を簡略化し、処理する必要のあるケースの数を減らす。
先に明確には論じていないが、イン・ロジック32の上述の動作に関連付けて、他のデータ転送処理も実行可能であることは認められよう。例えば、TCPチェックサム・ロジック66(図11)によるチェックサム妥当性確認を含めて、RNIC16接続に属するTCPセグメントのフィルタリング、および、受信したセグメントのTCP/IP妥当性確認を行うことができる。また、インバウンドTCPセグメント106の処理は、MPA CRCの計算、およびCRCロジック64(図11)によるこのCRCの妥当性確認を含む場合がある。CRC計算および妥当性確認の1つの具体的な実施形態については、以下で更に説明する。
A.有限再送信試行モード
検出されたエラーの原因の不明確さに関連した代替的な実施形態として(例えば、図12のステップS10においてNOの場合は、かかる状況を生じる結果となり得る1つの例示的な判定である)、「有限再送信試行モード」を実施して、再送信試行の回数を制限して、デッドロックを回避し、不必要にSLOW接続に変えられるFAST接続の数を減らすことができる。具体的には、上述のように、ケースC、D、およびEが表すいくつかの例では、検出されたエラーの原因が不明確であるために、接続をSLOW接続に格下げし(ステップS3)、DDPセグメント112の整列が損なわれたためでなくデータ破損によってエラーが生じた場合には、接続が終了する可能性がある(アウト・ロジック40によって)。
再送信試行の回数を制限するため、本発明は、接続コンテキスト42(図10)に追加のフィールドを提供して、接続を格下げする前にある回数の再送信を可能とする。具体的には、図10に示すように、接続コンテキスト42は1組のフィールド290を含む。これは、回復試行回数フィールド(RecoveryAttemptsNum)292、最後の回復シーケンス番号フィールド(LastRecoverySN)294、および最大回復試行回数フィールド(MaxRecoveryAttemptsNum)296を含む。RecoveryAttemptsNumフィールド292は、最後の更新以来、接続に対して実行された回復試行の回数を維持する。LastRecoverySNフィールド294は、最後に開始された回復動作のシーケンス番号(SN)を維持する。MaxRecoveryAttempsNumフィールド296は、接続を格下げする前にイン・ロジック32が実行しなければならない回復試行の最大回数を規定する。
図13を参照すると、動作において、イン・ロジック32が、新しいイン・オーダ受信データ転送がエラーを含むことを検出した場合(図13のステップS101として一般的に示す)、接続をSLOW接続にすぐに格下げするのではなく(図12のステップS3)、イン・ロジック32は、そのエラーを含むデータ転送について、ある回数の再送信を行うことになっている。ステップS101は、非整列のDDPセグメント112NAまたはデータ破損のいずれかによって引き起こされる多数のエラー判定について当てはまることは認められよう(ステップS101は、例えば図12のステップS5のYESまたは図12のステップS10のNOに当てはまる)。ステップS102において、イン・ロジックは次に、このエラーを含むデータ転送についてこの送信試行を記録し、ステップS102において、RecoveryAttemptsNumを1だけ増やす。更に、イン・ロジックは、LastRecoverySnを更新して、以前にストアしたシーケンス番号と新たに受信した(がドロップした)データ転送のものとのうち最大のシーケンス番号をストアする。すなわち、イン・ロジックは、LastRecoverySNを更新して、少なくとも1つの以前に受信したエラーを含むデータ転送と新たに受信したエラーを含む(がドロップした)データ転送とのうち最大のシーケンス番号をストアする。新たに受信したエラーを含むデータ転送のシーケンス番号を、ストアされた最大のシーケンス番号と比較することによって、新たに受信したエラーを含むデータ転送が、最大のシーケンス番号より大きいシーケンス番号を有することが判定される。LastRecoverySnの記録の重要性は、以下で明らかになる。
次に、ステップS103において、イン・ロジック32は、RecoveryAttemptsNum(フィールド292)がMaxRecoveryAttemptsNum(フィールド296)より大きいか否かを判定する。NOの場合、ステップS104において、イン・ロジック32はTCPセグメント106をドロップし、受信成功を確認せず、これによってTCPセグメントの再送信が行われる。次いで、処理はステップS1(図12)に戻る。TCPセグメント106が破損していた場合、再送信によって破損を修復し、データ転送14AがFAST接続としてメモリに直接配置されるようにする(図12のステップS7)。あるいは、処理が引き続き他のエラー検出へと戻る場合(図12のステップS10)、RecoveryAttemptsNum(フィールド292)は、最終的にMaxRecoveryAttemptsNum(フィールド296)より大きくなり、結果としてステップS103でYESになる。この場合、イン・ロジック32はステップS105に進み、ここでイン・ロジック32は接続をSLOW接続に格下げし、エラーを含むデータ転送14Aをリアセンブリ・バッファ34に配置し、このTCPセグメントの受信成功を確認するAckをスケジューリングする。上述のプロセスは、エラーを含むデータ転送の各々について行われる。
図14は、有限再送信試行モードの別のコンポーネントを表す。これは、データ破損が通常は多数の連続したTCPセグメントにおいて発生するのでなく、非整列セグメントはいくつかの以降のTCPセグメントに影響を与え得るという事実に対処するものである。例えば、FAST接続は、例えば5時間のような長い時間期間にわたって維持される場合があり、例えば1時間に1度のように時々データ破損が生じ、CRC妥当性確認が失敗する恐れがある。これが起こると、エラーを含むデータ転送(すなわち破損したセグメント)がドロップされるたびに、RecoveryAttemptsNum(フィールド292)が増えることがある。このプロセスは、異なるセグメントが異なる時間期間でデータ破損のためにドロップされ、いくつかの(おそらくは1つの)再送信動作の後に、これらのセグメントが受信成功し、メモリに配置されるという状況に対処する。従って、これらのセグメントのための回復動作は正常に完了しており、回復されるデータ破損のケース、すなわち新たな誤ったセグメントの受信によって新たな回復モードに入る場合は、カウントされない。
有限再送信試行モードから出るためには、ステップS105において、新たに受信したイン・オーダのデータ転送のTCPセグメント・シーケンス番号(SN)(すなわちInOrderTCPSegmentSN)が、LastRecoveryシーケンス番号(SN)(図10のフィールド294)より大きいか否かについての判定を行う。すなわち、FAST接続に属する新たに受信したイン・オーダの各TCPセグメントのシーケンス番号を、1つ以上の以前に受信したエラーを含むデータ転送から選択されたストアされた最大シーケンス番号と比較する。(もっと大きいSNを有するアウト・オブ・オーダのセグメントの受信は、エラー回復が完了したことを意味しないことに留意すべきである)。しかしながら、回復が完了していることを示す1つの指示は、回復モードに入らせたセグメント(複数のセグメント)の後に送信されたTCPセグメントが受信されることである。この状況は、InOrderTCPSegmentSNをLastRecoverySNと比較することによって判定することができる。この判定は、この接続のために受信されたTCPセグメントの処理中の実質的にどの段階においても行うことができる。例えば、図12のステップS9の後、または図13のステップS102の前である。イン・オーダ・セグメントSNがLastRecoverySnより大きい場合、すなわち新たなTCPセグメントが受信された場合、および、ステップS105においてYESが判定された場合、ステップS106において、RecoveryAttemptsNum(図10のフィールド292)はリセットされる、すなわちゼロにセットされる。上述の例に関連して、ステップS105は、例えば5時間のような長い時間期間の後、FAST接続をSLOW接続に不必要に格下げすること(すなわちRecoveryAttemptsNumがMaxRecoveryAttemptsNumを超えるので)を防ぐ。この場合、ドロップしたセグメントは、データ破損のためにドロップしており、送信側がセグメントを再送信した後で正常に受信され、整列セグメントとして処理された。ステップS105においてNOである場合、またはS106の後、セグメント処理は通常のように、例えば図12のステップS1に進む。
上述の処理を用いて、許可される再送信の回数は、MaxRecoveryAttemptsNumフィールド296を設定することによってユーザが規定することができる。有限再送信試行モードは、図13から図14および図12のステップS10においてエラー検出に関して上述したが、有限再送信試行モードは、ステップS10のエラー検出だけでなく適用可能であり、以下で更に説明することは認められよう。有限再送信試行モードは、以下で説明する「D.TCP再送信プロセスの高速化」において、有利に使用可能であることに留意すべきである。この場合、ULPの問題点のためにセグメントがドロップした場合、即座に複製Ack(Duplicate Ack)を送信する。
B.接続の格下げ
これより、図15を参照して、高速経路モードにおいて1つ以上のアウト・オブ・オーダの受信DDPセグメント112を宛先データ・バッファ50に配置した後に接続を格下げする(図12のステップS3)という独特の状況の処理について説明する。図15に示すように、パケット(Pkt)と標示された4つのTCPセグメントは、アウト・オブ・オーダで、すなわち3、4、1、2の順序で受信される。接続をSLOW接続に格下げすると、格下げの時点で受信された全てのデータはリアセンブリ・バッファ34に配置され、イン・オーダに、すなわちPkt1、2、3、4にリアセンブルされる。この場合、TCPプロトコルに従って、イン・ロジック32はそれらのセグメントが受信されたことの記録を維持する。
まれではあるが、例えばPkt#3(斜線を付けている)のようなセグメント(複数のセグメント)が宛先データ・バッファ50に直接配置されるという状況が生じ得る。この状況では、イン・ロジック32が全てのデータが受信されたと見なしたとしても、リアセンブリ・バッファ34内で通常はパケット3(Pct#3)を保持する位置が、「無意味な」データ、すなわち隙間または穴で埋められることになる。処理が正しくないまま継続することができた場合、アウト・ロジック40がリアセンブリ・バッファ34を宛先データ・バッファ50に転送すると、高速経路モードで先に転送されたパケット3(Pkt#3)は、「無意味な」データによって上書きされ、データを破損させてしまう。
ハードウェアの複雑さを増すことなくこの問題を解決するため、代替的な実施形態では、接続がFAST接続である場合に受信したアウト・オブ・オーダのセグメント(すなわち図15のPkt#3)について忘れるように、イン・ロジック32がTCPロジックに指示する。具体的には、イン・ロジック32は、ステップS3において接続がSLOW接続に格下げされる場合(図12)にアウト・オブ・オーダで配置されたデータ転送についてのTCPホールをクリアするように構成され、受信を停止し、これらのパケットを受信したことを送信側に報告する(SACKオプション)。この結果、送信側は、宛先データ・バッファ50に直接配置されたアウト・オブ・オーダのセグメント(複数のセグメント)すなわちPkt#3を含めて、全ての承認されていないデータを再送信する。再送信されたデータを受信すると、これはリアセンブリ・バッファ34に書き込まれて、アウト・ロジック40がリアセンブリ・バッファ34からデータを転送すると、宛先データ・バッファ50において、アウト・オブ・オーダの直接配置されたセグメントは全て上書きされる。この機能性が効果的に示すのは、この接続において、RNIC16が、宛先データ・バッファ50にアウト・オブ・オーダで配置されたセグメントを「ドロップする」ということである。かかる手法によって、リアセンブリ・バッファ34においてイン・オーダのストリームに「隙間があいている」というケースがなくなり、かかる挙動に至るまれな状況のために目に見える性能劣化が生じることを防ぐ。
C.接続の格上げ
別の代替的な実施形態として、本発明は、図16に示すような接続格上げ手順を含むことができる。上述の高速経路モード手法の目的は、整列DDPセグメント112を保持する接続について、リアセンブリ・バッファ34の回避を可能とすることである。しかしながら、FAST接続においても、データ・ソース12または中間ネットワーク・デバイスは、間欠的な非整列DDPセグメント112NAを発生する可能性があり、これによって、FAST接続は上述の技法に従ってSLOW接続に格下げされる。間欠的な挙動は、例えば、TCP再送信の間に最大セグメント・サイズ(MSS)が変化すること、または他の単発的な状況によって生じる場合がある。
図16に示すように、この状況から回復するために、本発明は、例えばステップS3(図12)における先行する格下げの後に、SLOW接続からFAST接続へと接続の格上げを提供することができる。格上げに対応するためには、多数の状況が存在しなければならない。代替的な実施形態の第1のステップS31では、イン・ロジック32は、リアセンブリ・バッファ34が空であるか否かを判定する。NOの場合、ステップS32において、格上げを行わない。ステップS31においてYESが判定されると、次いでステップS33において、イン・ロジック32は、整列DDPセグメント112が受信されているか否かを判定する。NOの場合、ステップS32において、格上げを行わない。ステップS33においてYESが判定されると、次いでステップS34において、イン・ロジック32は、接続が、例えばデータ・ソース12のような送信側によってFAST接続として始められたか否かを判定する。ステップS34においてNOが判定されると、ステップS32において、格上げを行わない。ステップS34においてYESが判定されると、ステップS35において、接続はFAST接続に格上げされる。
D.TCP再送信プロセスの高速化
別の代替的な実施形態では、TCPセグメント106が受信されるが、例えばDDPセグメントの破損、無効なCRC等のようなRDMAまたはULPの問題点のためにドロップされるという状況に対処する。上述の手順に従って、TCPセグメント106が受信されてTCPチェックサムを通過するが、セグメントをカバーするTCP Ackを送信することなくイン・ロジック32によってドロップされる(すなわち図12のステップS9)ということは数多い。従来の手順では、次いで、それらのパケットの再送信試行が行われる。具体的には、基本的な方式(いわゆる「Renoプロトコル」)では、TCP送信側は、3つの複写Ack(すなわち、イン・オーダで受信されたデータのシーケンス番号を進めないAck)を得た場合、「高速再送信」モードを開始する。例えば、2つのTCPセグメントAおよびBを想定し、TCPオーダにおいてセグメントBがセグメントAの次に来ると想定する。セグメントAがドロップされると、受信側は、セグメントBを受信した場合にのみ複写Ackを送信する。この複写Ackが示すのは、「私はセグメントAを待っているが、別のセグメントを受信した」ということ、すなわちセグメントBである。Renoプロトコルのもとでの「高速再送信」モードでは、送信側は、1つのセグメントを送信し、次いで別の3つの複写Ackを待って、別のパケットを再送信する。もっと進んだ方式(いわゆる「New−Renoプロトコル」のような)では、「高速回復」モードにおいて受信した複写の各々について、セグメントの再送信が可能である。このプロセスの背後にある論理は、1つのセグメントがネットワークから出ると、送信側は別のパケットをネットワークに置くことができるということである。
再送信を容易にするために、本発明の代替的な実施形態に従って、イン・ロジック32は、TCPによって有効と判定され上位レイヤ・プロトコル(ULP)の決定(例えば図12のステップS9)に基づいてTCPによってドロップされた受信TCPセグメントをカバーする第1の複写TCP肯定応答(Ack)を発生し、この複写TCP Ackを送信する。上述のように、ULPは、MPAプロトコル、DDPプロトコル、およびRDMAプロトコルのうち1つ以上を含むことができる。TCPセグメントがイン・オーダかアウト・オブ・オーダかに関わらず、次のイン・オーダTCPセグメントが受信されていない場合でも、TCPセグメントについて第1の複写TCP Ackを発生する。また、イン・ロジック32は、次のアウト・オブ・オーダ受信TCPセグメントをカバーする第2の複写TCP肯定応答(Ack)を発生し、この第2の複写TCP Ackを送信することができる。
この上述の処理が効果的に示すのは、次のイン・オーダのセグメント(例えば上述の例ではセグメントB)がまだ受信されていない場合があるとしても、複写Ack(例えば上述の例ではセグメントAのための)を発生するということであり、このため、上述の再送信ルールのもとで送信側を再び高速経路モードにするプロセスを高速化しなければならない。更に具体的には、セグメントBが受信されていない場合であっても、送信側は、セグメントAすなわち有効TCPセグメントが受信され、ULPの問題点のためにドロップされたことを知っている。この結果、再送信開始の前に多数の複写Ackを受信しなければならない場合、追加の複写Ackは、もっと早期に送信側に再送信手順を開始させる。この手法は、TCPの原理に反する。なぜなら、TCPセグメント106はULPに正常に配信され、ULPの問題点(無効CRC)のためにドロップされたからである。従って、このパケットはドロップされず、IPプロトコルによる再順序付けもされなかった。この手法は、図13に概要を示したように、RNIC16が有限再送信試行モードを実施する場合、すなわちステップS104でAckを送信する場合、特に有益である。
E.CRC計算および妥当性確認
入来するイーサネット・フレームの従来の処理は、フィルタリング・プロセスから始まる。フィルタリングの目的は、有効なイーサネット・フレームを無効なものを分離することである。「無効フレーム」は、破損したフレームではなく、RNIC16によって受信してはならないフレームである。例えば、MACフィルタリングすなわちMACアドレスに基づくフレーム選択、仮想ローカル・エリア・ネットワーク(VLAN)フィルタリングすなわちVLADタグに基づくフレーム選択等である。有効フレームは、RNIC16内に入ることができ、異なるタイプに分離される。これらのタイプの1つがTCPセグメントである。フィルタリング・プロセスは実行中に行われ、全イーサネット・フレームの蓄積交換処理を行う必要はない。
TCPセグメント処理の次のステップは、TCPチェックサムの計算および妥当性確認である。チェックサムの計算は、エラーなしでデータが送信されたか否かを判定するものであり、通常はデータ・ブロックにおける二進値を用いて送信時の値を計算し、何らかのアルゴリズムを用いて、その結果と共にデータをストアし、受信時に同じように計算した値と比較する。チェックサムの計算および妥当性確認には、全TCPセグメント・ペイロードをカバーするために、全TCPセグメントの蓄積交換処理が必要である。従来、巡回冗長検査(CRC)の計算および妥当性確認は、通常、TCPチェックサム妥当性確認の後に行われる。すなわち、接続をRDMA接続として認識した後、および、DDPセグメントの境界を、以前のDDPセグメント長またはMPAマーカのいずれかを用いて検出した後である。CRCの計算および妥当性確認は、正確にデータを送信したか否かを判定するため、メッセージを所定の長さに分割し、これは被除数として用いられ、固定の除数で除算される。計算の剰余は、メッセージに追加されて、受信側によって行われる同一の計算により比較される。また、CRCの計算および妥当性確認には、全DDPセグメントの蓄積交換が必要であり、これは待ち時間を増大させ、ストアのために大きなデータ・バッファを必要とする。CRC計算の1つの要件は、DDPセグメント境界を知ることであり、これは、先行するDDPセグメント長を用いること、またはMPCマーカ110(図2)を用いることのいずれかによって求められる。マーカに基づいた決定は、多くの例外およびコーナー・ケース(corner case)が多いので、極めて複雑である。また、部分的に受信したDDPセグメントのCRC計算は、複雑なプロセスである。
上述の問題に対処するため、図11に示すように、本発明は、TCPチェックサム・ロジック66によるTCPチェックサム計算および妥当性確認と平行して、同じ蓄積交換バッファ68を用いて、CRCロジック64によってCRC計算および妥当性確認を行う。更に、本発明は、DDPセグメント境界の位置をすぐに特定してその後にDDPセグメントCRCを計算し妥当性確認するのではない。本発明は、CRCを計算し、その後にDDP境界を求めることによって、動作の順序を切り替える。この切り替えを行うため、CRCロジック64は、各TCPセグメントが(セグメントがRDMA接続に属することがわかる前に)整列DDPセグメントで開始すると想定する。更に、本発明は、TCPペイロード127(図2)の最初の2バイトが、MPAフレームのMPA長フィールド114(図2)であると想定する。次いで、この長さを用いて、DDPセグメント境界を識別し、そのセグメントのCRCを計算する。妥当性確認ユニット44が、TCPセグメント106において最初の可能なDDPセグメント112の境界を識別した後、これは、TCPセグメント・ペイロード127のその部分についてのチェックサム計算と同時に、そのDDPセグメントのCRCを計算し妥当性確認し、次いで、同じTCPセグメント106に含まれる次の存在し得るDDPセグメント112(存在する場合)に進む。TCPセグメント106において発見される各「存在する可能性のある」DDPセグメントでは、CRC妥当性確認の結果は、有効、無効、または長すぎるという場合がある。CRC妥当性確認の結果はストアされて、図12に関して上述したように用いられる。
上述のようにCRCを実際に計算するために、TCPセグメント106のペイロードを処理する場合、イン・ロジック32は、TCPセグメント106内のどこにMPAマーカ110があるのかを知る必要がある。図2に関して上述したように、MPAマーカ110は、TCPセグメント106において512バイトごとに配置され、第1のMPAマーカは、接続コンテキスト42のStartNumフィールド248(図10)としてストアされているTCPヘッダ126(図2)における初期シーケンス番号から512バイトである。しかしながら、各MPAマーカ110を評価することでは、StartNum248(図10)に対するその位置は明らかにならない。更に、MPAマーカ110は、CRCデータ116によってカバーされているが、MPA長フィールド114には含まれず、これはMPAフレームのペイロードのみを含む。従って、MPAマーカ110を識別するためには、RNIC16は、StartNum248(図10)を知る必要があり、これを接続コンテキスト42からフェッチしなければならない。しかしながら、接続コンテキスト42の読み取りは、TCP処理の間に行うのは極めて不便である。これは、処理において極めて早期に行われ、パケット処理を分解するかまたは停止させるからである。
接続コンテキスト42のフェッチを低減するまたは削除するために、本発明は、4つの代替案を提示して、DDPセグメント112長のMPA CRCを計算し妥当性確認するために必要であるDDPセグメント112長の正確な計算を可能とする。これらのオプションについて、以下の節で述べる。
1.接続コンテキストプリフェッチ(prefetch)方法
DDPセグメント112長を正確に計算するための第1の代替的な実施形態は、StartNumフィールド248(図10)としてストアされている初期シーケンス番号の接続コンテキスト42のプリフェッチを実施することを含む。ここでは、MPA仕様の変更は提示しない。現在のMPA仕様では、TCPセグメント106内のMPAマーカ110の位置を識別するために、初期シーケンス番号(StartNum)を知ることが必要である。初期シーケンス番号は、TCP接続属性であり、これは接続ごとに異なり、接続確立時に取り決められる。従って、StartNum248(図10)は、接続ごとに維持される。MPAマーカ110の位置を識別するため、CRCロジック64(図11)は、512を法とした特定のセグメントのシーケンス番号(SeqNum)およびStartNumの剰余(SeqNum-StartNum)がゼロであることを調べる。すなわち、各TCPセグメント106のヘッダがそのペイロードの第1のバイトのシーケンス番号を保持するので、CRCロジック64は、特定のセグメントのシーケンス番号とStartNum248との間の差を取り、次いでこの位置から始めて、512バイトごとにマーカを位置付けることによって、どこでマーカを探すべきかを判定することができる。MPA仕様は、上述のマーカ検出方法を定義する。このように、ハッシュ照合(TCPタプルに基づく)および接続コンテキスト42のプリフェッチを、TCPチェックサム妥当性確認を行う前に実行することができる。これは、通常の接続コンテキスト42のフェッチ・フローである。RNIC16が接続コンテキスト42を取得したい場合、まず、このコンテキストがどこに位置付けられているかを理解するか、または接続IDを得る必要がある。TCPセグメント106ヘッダは、TCPタプル(IPアドレス(ソースおよび宛先)ならびにTCPポート(ソースおよび宛先))を保持する。タプルは、ハッシュ関数に対する入力である。ハッシュ関数の出力は接続IDである。むろん、異なるタプルに対して同じ接続IDを使う結果となる場合があり、これは「衝突」と呼ばれる。衝突を処理するために、RNIC16は、接続コンテキスト42を読み取り、接続コンテキスト42におけるタプルをパケット内のタプルと照合し、一致しない場合、RNIC16は次の接続コンテキスト42に対するポインタを取得する。RNIC16は、一致を見出すまで、またはセグメントが既知の接続のどれにも属さないと認識されるまで、タプル照合を続ける。このプロセスによって、TCPストリーム内でMPAマーカ110の位置を特定することができる。この結果、CRC計算および妥当性確認は、TCPチェックサム妥当性確認と同時に行うことができる。
2.初期シーケンス番号取り決め方法
第2の代替的な実施形態では、MPA仕様に多数の変更を行うことによって、接続コンテキストのフェッチを行うことなく、DPセグメント長を正確に計算することができる。第1に、MPA仕様におけるMPAマーカ110の配置の定義を変更する。上述の接続コンテキストプリフェッチ方法の1つの欠点は、TCPセグメント106においてMPAフレーム109の境界を識別するために、ハッシュ照合および接続コンテキスト42のプリフェッチを行う必要があるということである。これを防ぐため、本発明は、MPAマーカ110を512バイトごとに配置し、初期シーケンス番号(SN)(StartNum248としてセーブされている)で開始する512バイトごと(これは、上述の512を法としたSN-StartNum処理を必要とする)には配置しない。このように、MPAマーカ110の位置は、MPAマーカ110の位置を特定するための512を法としたシーケンス番号プロセスによって求めることができ、接続コンテキスト42のフェッチは必要ない。
本実施形態によるMPA仕様の第2の変更は、1つのマーカが2つのDDPセグメント112間で分割される状況、すなわち、初期シーケンス番号がワードに整列していない状況を回避するように機能する。結果として、512を法とするシーケンス番号のプロセスは、全ての環境で機能するわけではない可能性がある。なぜなら、標準的なTCP実施では、初期SNは、ランダムに発生したバイトに整列した値を有することができるからである。すなわち、初期シーケンス番号がワード整列であるか否かは、RNIC16によって制御することはできない。このため、所与の接続についてのTCPストリームは、必ずしもMPAマーカ110で開始するわけではない。従って、CRCロジック64が、単に512を法とするシーケンス番号プロセスを用いることによってマーカ110の位置を選ぶ場合、得られるマーカはバイト整列位置に配置されている可能性があるが、これは許容できない。この状況を回避するため、本発明は、MPA取り決め段階の間に交換されるMPAフレームに、パディング、すなわち、いわゆる「MPA要求/応答フレーム」を追加して、RDMAモードに移行する場合のRDMA接続の初期SNをワードに整列させる。すなわち、図17に示すように、初期SNをワードに整列させるために必要なバイト数を含むTCPセグメント106のMPA要求/応答フレーム152に、補正ファクタ150を挿入する。補正ファクタ150の正確な位置を図示する必要がないことは認められよう。このように、CRCロジック64は、512を法とするシーケンス番号プロセスを実施して、接続コンテキストフェッチを行うことなく、TCPストリーム内でのMPAマーカ110の正確な位置を得ることができる。MPA仕様の上述の変更を用いて、本発明は、接続コンテキスト42のプリフェッチを行うことなく、MPAマーカ110の位置を特定し、MPAセグメントの長さを適正に計算することができる。
3.MPA長フィールド変更方法
接続コンテキストフェッチを行うことなくDDPセグメント112長を正確に計算するための第3の代替的な実施形態では、MPA仕様におけるMPA長フィールド114の定義を変更する。従来、MPA長フィールド114は、各MPAフレーム109のULPペイロードの長さを保持するように規定され、MPAレイヤによって追加されたマーカ110、パディング121(図2)、CRCデータ116は除く。しかしながら、この情報では、TCPセグメント106が提供する情報を用いてMPAフレーム境界の位置を特定することができない。これに対処するため、この代替的な実施形態によれば、MPA仕様におけるMPA長の定義を変更して、次のものを含む全MPAフレーム109の長さを明記する。すなわち、MPA長フィールド114の最上位14ビット(MSB)、ULPペイロード118長、MPAマーカ110、CRCデータ116、MPAG長フィールド114の最下位2ビット(LSB)、およびパディング121における有効ビットである。
この修正した定義によって、そのMPAフレームに埋め込まれた全てのMPAマーカ110の位置を特定することなく、MPA長フィールド114を用いて、MPAフレーム109の境界を検出することができる。MPAレイヤ・プロトコルは、マーカ110、CRCデータ116、およびパディング121を取り除く役割があり、ULP(DDPレイヤ)にULPペイロード長を提供する。
図18を参照すると、このMPA長の定義を用いて、CRCロジック64は、以下のプロセスによってMPAフレーム109の境界の位置を特定する。ステップS100において、CRCロジック64は、MPAフレーム109の最初のワードがゼロに等しいか否かを判定する。YESの場合、イン・ロジック32(図9)は、ステップS102において、次のワードからMPA長フィールド114を読み取る。これは、マーカ110が2つのMPAフレーム109間にある場合に当てはまる。この状況では、ステップ104に示すように、対のワード内にMPA長フィールド114の位置を特定する。ステップS100においてNOと判定された場合、このワードはMPA長フィールド114を保持する。ステップS106において、MPA長を用いて、このMPAフレーム109をカバーするCRCデータ116の位置を探し出す。次いで、上述のプロセスは繰り返し、TCPセグメント106に埋め込まれた他のMPAフレーム109の位置を特定する。この実施形態によって、接続コンテキスト42からの追加の情報を用いずに、MPAフレーム109の境界の位置を特定することができる。
4.マーカなしのカットスルー実施
第4の代替的な実施形態では、CRC計算および妥当性確認に関して、マーカなしのカットスルー実施を用いる。これについて以下で説明する。DDPセグメント長を正確に計算するための上述の3つの代替的な実施形態の欠点は、各々が、MPA仕様の変更または接続コンテキスト42のプリフェッチを必要とすることである。この実施形態は、到着するMPAフレームのCRCを計算するために接続コンテキスト42のプリフェッチを行うことなく、更に、MPA仕様に対する追加の変更を行うことなく、インバウンド・セグメントのカットスルー処理を実施する。更に、この実施形態は、MPAマーカを用いることなく、アウト・オブ・オーダの直接データ配置を可能とする。この実施形態は、MPA仕様の新しい更新バージョンに従って、所与の接続について「マーカなし」のオプションを取り決めることができる受信側の能力に部分的に基づいている。具体的には、更新されたMPA仕様によって、MPA受信側は、所与の接続についてマーカを用いるか否かを決定することができ、送信側は受信側の決定を尊重しなければならない。この実施形態は、妥当性確認ユニット44ロジックを変更して、TCPチェックサム計算と同時に、接続コンテキスト42のプリフェッチを行うことなく、実行中にCRC計算を行うことを可能とする。
CRC計算は、マーカを用いた場合について説明したのと全く同様に行う。すなわち、本発明は、TCPセグメントが整列DDPセグメントで開始することを想定し、MPA長フィールドを用いてCRCの位置を探し出し、次いでCRCを計算し妥当性確認する。しかしながら、この実施形態における相違は、MPAヘッダのMPA長フィールドが与えられれば、DDPセグメント長を計算する場合にマーカを考慮する必要がないということである。
図19を参照すると、この実施形態の第1の代替案に関連したイン・ロジック32の機能性を示すフロー図が示されている。イン・ロジック32の機能性の多くは、図12に関して上述したものとほぼ同様であることは認められよう。明確さの目的のため、イン・ロジック32の機能性が図12に関して上述したものとほぼ同様である場合、ステップを破線で示す枠内で繰り返し示す。
更新したMPA仕様のもとで、受信側は、接続初期化の時点で特定の接続について「マーカなし」オプションを取り決める。図19に示すように、この実施形態では、ステップS201において、イン・ロジック32は、インバウンドTCPセグメント106がマーカ110を含むか否かを判定する。YESの場合、イン・ロジック32は図12に示すような処理に進み、上述のように、他の何らかのCRC計算および妥当性確認の方法を用いる。NOの場合、ステップS202において、インバウンドMPAフレーム109は、TCPチェックサム・ロジック66と同じ蓄積交換バッファ68を用いて実行中にCRCの計算および妥当性確認を行うが、接続コンテキスト42のフェッチは行わない。また、図12に示すのと同様のステップS2およびS3で、接続がSLOW接続であるか否かの判定を行うことができる。CRC妥当性確認の結果は、以下のうちの1つであり得る。(1)MPAフレーム109の長さがTCPセグメント106の長さに一致し、MPAフレーム109が有効MPA CRCを有する。(2)MPAフレーム109の長さがCGPセグメント106の長さに一致するが、MPAフレーム109は無効CRCを有する。(3)MPAフレーム109の長さがTCPセグメントの長さより大きい、(4)MPAフレーム109の長さがTCPセグメント106の長さよりも小さい。
(1)の場合、イン・ロジック32は、図12のステップS4からS7とほぼ同様に動作する。すなわち、MPAフレーム109がTCPセグメント106と同じ長さを有し(図12のステップS4およびS5)、かつ有効MPA CRCを保持する(ステップS6)場合、フレームは有効MPAフレームと見なされ、更に別の処理のために、内部データ・バッファ38を介してアウト・ロジック40に渡され、更に、高速経路モードで宛先データ・バッファ50に渡される。
(2)において、MPAフレーム109はTCPセグメント106と同じ長さを有する(図12のステップS4およびS5)が、無効CRCを有する(図12のステップS6)場合、イン・ロジック32は、図12に関して説明したのとは異なる方法で動作する。具体的には、受信したMPAフレーム109がMPAマーカ110を含まないので、(図12のステップS10におけるように)マーカ関連情報を回復のために用いることができない。これによって、対処する必要があるケースは2つのみ生じる。ケースA、すなわち、MPAフレーム109が以前に受信したセグメント(および妥当性確認された)MPAフレーム109の長さによって参照される場合(図12のステップS8において判定したように)、および、ケースB、すなわち他の全ての場合である。ケースAでは、MPAフレーム109は破損し、ケースBでは、MPAフレーム109は破損しているかまたは整列していない可能性がある。双方の場合で、受信したTCPセグメント106はドロップされ(図12のステップS9)、受信は確認されない。この場合、図13に関連して述べた有限再送信試行モードを実施して、そのTCPセグメント106のドロップから回復することができる。これによって、送信側は、ドロップしたTCPセグメント106を再送信し、いずれかのあり得るデータ破損を解決することができる。MPAフレーム109がTCPセグメント106に整列していなかった場合、上述のように、有限再送信試行モードは、接続をSLOW接続に格下げして終了することになる。
(3)において、MPAフレーム109の長さがTCPセグメント106の長さを超えている(図12のステップS5)場合、MPAフレーム109はTCPセグメント106に整列していないか、または、その長さが破損している。この場合、受信したTCPセグメント106はドロップされ(図12のステップS9)、TCPは受信を確認しない。この場合も、図13に関して説明した有限再送信試行モードを実施して、そのTCPセグメント106から回復することができる。これによって、送信側は、ドロップしたTCPセグメントを再送信し、いずれかのあり得るデータ破損を解決することができる。ここでも、MPAフレーム109がTCPセグメント106に整列していない場合、上述のように、有限再送信試行モードは、接続をSLOW接続に格下げして終了することになる。
(4)において、MPAフレーム109の長さがTCPセグメント106より小さい(図12のステップS4)か、またはTCPセグメント106が多数のMPAフレーム109を保持する可能性がある(送信側がパッキング・オプションを実行する)場合、イン・ロジック32は、受信したTCPセグメント106に埋め込まれた全てのDDPセグメント112のCRCを順次チェックする(図12のステップS11からS13)。全てのDDPセグメント112が有効CRCを有する場合、イン・ロジック32は、そのTCPセグメント106の受信を承認し、全てのMPAフレームは、更に別の処理のために、高速経路モードで転送される(図12のステップS7)。DDPセグメント112のうち1つが無効CRCを有する場合、または最後のセグメントが完全にはTCPセグメントに含まれていない場合(図12のステップS12からS13)、全TCPセグメントはドロップされ(図12のステップS9)、イン・ロジック32はそのTCPセグメントの受信を確認しない。上述のように、図13に関連して述べた有限再送信試行モードを実施して、そのTCPセグメント106から回復することができ、これによって、送信側は、ドロップしたTCPセグメントを再送信し、いずれかのあり得るデータ破損を解決することができる。MPAフレーム109がTCPセグメント106に整列していなかった場合、上述のように、有限再送信試行モードは、接続がSLOW接続に格下げして終了することになる。
図20に移ると、この実施形態に関連したイン・ロジック32の機能性を示し、有限再送信試行モードおよびTCP再送信高速化の態様を含む別の代替的なフロー図が示されている。図19とは異なり、イン・ロジック32の機能性は、図12に比べて大幅に簡略化されている。明確さの目的のため、イン・ロジック32の機能性が図12に関連して上述したものとほぼ同様である場合、ステップを破線で示す枠内で繰り返し示す。
図20において、ステップS151からS153は、図12のステップS1からS3とほぼ同一である。ステップS154において、イン・ロジック32は、CRC妥当性確認が合格したか否かを判定する。この評価は、図12のステップS4とは異なり、DDPセグメントごとに指示を与えるのではなく、CRCロジック54はCRCValidationPassedビットを提供する。これは、受信したTCPセグメント内の全DDPセグメントのCRC妥当性確認の成功または失敗を示す。受信したTCPセグメントに含まれる全てのDDPセグメントについてCRC妥当性確認が合格した場合には、このビットがセットされ、セグメントの1つについてCRC妥当性確認が不合格であった場合または最後の(唯一の)セグメントが長すぎた場合には、このビットはクリアされる。NOの場合、イン・ロジック32はステップS155に進み、RecoveryAttemptsNum(図10のフィールド292)が、MaxRecoveryAttemptsNum(図10のフィールド296)より大きいか否かを判定する。YESの場合、イン・ロジックはステップS153に進み、DDPセグメントをリアセンブリ・バッファ34に配置し、Ackを送信し、接続を(これがFAST接続であった場合)SLOW接続に格下げする。ステップS155においてNOの場合、次いでステップS156において、TCPセグメント106をドロップし、確認はスケジューリングされない。更に、RecoveryAttemptNum(図10のフィールド292)を1だけ増分し、LastRecoverySN(図10のフィールド294)を更新する。
ステップS154に戻り、判定結果がYESの場合、イン・ロジック32は、ステップS157に進み、新たに受信したイン・オーダのデータ転送シーケンス番号(イン・オーダSN)がLastRecoverySN(図2のフィールド294)より大きいか否かを判定する。YESの場合、次いでステップS158において、イン・ロジック32は、RecoveryAttemptsNum(図2のフィールド292)をクリアする、すなわちこれをゼロにセットする。ステップS157においてNOの場合、またはステップS158の次に、ステップS159において、セグメントを宛先データ・バッファ50に配置することによって、セグメントを「高速経路モード」で処理する。また、ステップS159は、TCP再送信高速化オプションに関連付けて述べたように、複写Ackの実施を含むことができる。
上述の図20の実施形態は、本発明のカットスルー・モードおよび有限再送信試行モードおよびTCP再送信高速化オプションを、MPAマーカを用いることなく実施する。
III.アウト・ロジック
アウト・ロジック40(図9)は、RDMAメッセージごとの情報を保持することなく、RDMAメッセージのイン・オーダ配信を実行する。対処される状況は2つある。すなわち、(1)送信メッセージを除く全てのRDMAメッセージについて、および、(2)RDMA送信メッセージ、である。
図6から図8に戻って、アウト・ロジック40(図9)の動作を説明する。アウト・ロジックは、上述のように、高速経路モードで配置された内部データ・バッファ38(図9)からの整列DDPセグメント220を処理し、整列DDPセグメントのデータ配置および受信側データ・バッファへの配信を行う。本明細書中で用いる場合、「配置」は、データを実際にバッファ内に置くプロセスを示し、「配信」は、データ転送の完了を確認するプロセスを示す。「配置」は、セグメントおよびメッセージの双方に適用可能であるが、「配信」はメッセージのみに適用される。RDMAプロトコルのもとで、整列DDPセグメントは、アウト・オブ・オーダで配置される場合があるが、配信は、整列DDPセグメントの全てがイン・オーダに配置されるまで行われない。例えば、3つの整列DDPセグメント1、2、および3について、セグメント2および3が最初にセグメント1なしで配置される場合、セグメント1が配置されるまで配信は行われない。
A.配置
配置に関して、アウト・ロジック40は、RDMA読み取りメッセージを除いて、RDMAメッセージの従来の配置を行う。これについて、以下で述べる。
タグ付きDDPセグメントに関して、例えば図4に戻ると、RDMAプロトコルに従って、タグ付きDDPセグメントのヘッダ124は、受信側の以前に登録したメモリ領域(例えば図7のメモリ領域232)のアドレスを保持する。上述したように、このアドレスは、メモリ領域/ウインドウ(例えばRDMA書き込みメッセージについて図7のメモリ領域232)内にある宛先バッファを示す開始タグ(STag)、この領域/ウインドウにおけるターゲット・オフセット(TO)、およびトランザクション長(セグメント・ペイロード)を含む。この場合、データ配置は、従来の方法でアウト・ロジック40によって行われ、接続コンテキスト42(図9)から何ら追加情報を検索しない。従来のアドレス翻訳および保護(ATP:Address Translation and Protection)プロセスは、STagおよびTOを、宛先データ・バッファを記述するメモリ領域の物理バッファのリストに変換するものであり、これは、アウト・ロジック40によるデータ配置より前に行われる。
RDMA読み取りメッセージ等のタグなしDDPセグメントに関して、図8を参照すると、RDMAプロトコルは、待ち状態のインバウンド読み取り要求222の最大数を規定する。これは、交渉時に交換される。各RDMA読み取りメッセージ204は、単一のDDPセグメント222を消費する。RNIC16がRDMA読み取りメッセージ204を受信すると、これは、RDMA読み取り応答WQE216RRを読み取りキュー214にポストする。別の例では、図6を参照すると、各送信メッセージ200は、例えばデータ・シンク18(図9)のような応答側の受信キュー(RQ)212に配置される。上述のように、各受信キュー(RQ)212は、制御命令が配置されるバッファであり、ペイロードが配置されるWQE216Rを含む。受信キュー(RQ)212は、WQE216Rを含む。各WQE216Rは、コンシューマによってポストされた受信WR208Rを記述する制御情報を保持する。また、各WQE216Rは、そのWR208Rにおいてポストされたコンシューマバッファ(複数のバッファ)を指し示す。それらのバッファを用いて、ペイロードを配置する。従って、各メッセージ200は、WQE216Rを消費する。
図21を参照すると、図8と同様のRDMA読み取りメッセージ204およびRDMA読み取り応答206が表されている。しかしながら、本発明によれば、読み取りキュー414は、循環バッファとして実施される特別なワーク・キュー(WQ)として設けられ、この循環バッファの各エントリは、送信ロジックによって作成する必要があるRDMA読み取り応答を記述するWQE216RRである。これによって、アウト・オブ・オーダのRDMA読み取り要求222を容易かつ効率的に配置することができる。なぜなら、各インバウンドRDMA読み取り要求ごとに、読み取りキュー414内に周知の位置すなわちWQE216RRがあるからである。例えば、RDMA読み取りメッセージ#3が受信され、RDMA読み取りメッセージ#2が失われた場合、RDMA読み取りメッセージ#3は配置される。この配置は、RDMA読み取り要求メッセージ222、すなわち要求側の読み取りWR208Rのポスティングにより送信されたメッセージの受信時に行われる。読み取りキュー414におけるWQE216RRの位置は、RDMA読み取りメッセージ・ヘッダ124(図4)内のMSNによって識別される。
B.配信
RDMAプロトコルによって、アウト・オブ・オーダのデータ配置が可能となるが、配信はイン・オーダである必要がある。従って、従来の実施では、メモリに(全体的にまたは部分的に)配置されたがまだ配信されていない各メッセージに関する情報を維持する必要がある。しかしながら、単一のTCPセグメントが失われると、多くのアウト・オブ・オーダのRDMAメッセージが受信されることになる恐れがあり、これは宛先バッファに配置され、失われたセグメントが再送信されてメモリに正常に配置されるまで完了しない。従来の環境のもとでは、アウト・オブ・オーダのストリームをストアするために限られたリソースを利用可能であり、アウト・オブ・オーダのストリームを受信した後に、ある数のみの以降のメッセージをストアすることができるようになっている。
しかしながら、本発明によれば、配信されていないRDMAメッセージごとにある情報を保持し、従ってサポートされるアウト・オブ・オーダの受信メッセージの数を制限するのではなく、TCPホールごとに情報をストアすることによって、無限の数の配信されないRDMAメッセージをサポートする。「TCPホール」は、アウト・オブ・オーダのTCPセグメントを受信した結果としてTCPストリーム内に生成される空きを表す言葉である。
図22を参照すると、白いブロックは、TCPホール130Aから130Cを形成する失われたTCPセグメント400を示し、陰影を付けた/グレーのブロック402は、連続して受信されるTCPストリームを示す。TCPホール130A〜130Cごとの情報は、接続コンテキスト42(図10)にストアされる。限られた数のTCPホール130Aから130Cのサポートは、TCPプロトコルの実施から引き継がれた特徴である。具体的には、TCPプロトコルは通常、サポートするTCPホール130Aから130Cの数を、例えば1、2、または3のホールに制限する。通常、限られた数のTCPホール130Aから130Cのサポートによって効果的に示されるのは、アウト・オブ・オーダのTCPセグメントが到着し、新たなTCPホールを開くと、このセグメントがTCPロジックによってドロップされるということである。図22は、3TCPホールの実施を示す。この場合、下部TCPホール130C、すなわち2つの下部の失われたセグメント400の後に、新たなセグメントが到着した場合、このセグメントは第4のホールを「開く」が、これはサポートされない。この結果、そのセグメントはドロップされる。
この状況に対処するため、本発明は、アウト・オブ・オーダのメッセージ/セグメントの追跡ではなく、接続コンテキスト42(図9および図10)によって、TCPホール130(図22)の追跡を実施する。具体的には、図10に示すように、本発明は、PendingReadResponseNum フィールド300をストアして、完了したRDMA読み取り要求をカウントし、CompletedSendsNumフィールド302ストアして、完了した送信メッセージをカウントし、CompletedReadResponseNumフィールド306をストアして、完了したRDMA読み取り応答をカウントする。当業者によって認められるように、各ホールごとに他のフィールドが必要とされる場合があるが、簡潔にするためにその説明は行わない。この手法によって、無限の数のアウト・オブ・オーダの受信RDMAメッセージが、完了およびイン・オーダの配信を待つことができる。この手法は、何ら制限なく、受信キュー212および送信キュー210の双方によって完了キュー240(図6から図8)を共有する能力を制限しない。これより、特定のタイプのメッセージの処理の詳細について説明する。
第1に、RDMA書き込みメッセージ202(図7)の配信では、動作の性質のため、応答側にいかなる報告も行われず、他のハードウェア・ロジックにいかなる通知も行われないことに留意すべきである。従って、このタイプのRDMAメッセージに関しては、配信の問題は存在しない。
第2に、図21に戻ると、RDMA読み取り応答メッセージ206に関して、この動作は、待ち状態のRDMA読み取りメッセージ204の完了を表す。この場合、待ち状態のRDMA読み取りワーク要求208Rを完了するための充分な情報を要求側の完了処理ロジックに与えるためには、TCPホール130ごとにある数の完了したRDMA読み取り応答メッセージ206を含む接続コンテキスト42においてCompletedReadResponseNumフィールド306(図10)をストアすることで充分である。TCPホールが閉じると、このホールに関連したある数の完了RDMA読み取り応答は、要求側の完了処理ロジックに報告されて、待ち状態のRDMA読み取りワーク要求208Rの完了を示す。
RDMA読み取り要求に関して、WQE216RRポストの動作は、2つのステップを含む。すなわち、WQE216RRを読み取りキュー414に配置すること、および、通知すなわち呼び鈴を鳴らして、このWQEを処理可能であることをRNIC16に通知することである。WQE216RRの配置は、アウト・オブ・オーダで行うことができる。しかしながら、上述のように、WQE処理の開始(従って、呼び鈴を鳴らすこと)は、RDMA順序付けルールに従わなければならない。すなわち、RDMAプロトコルは、全ての以前に送信したあらゆる種類のRDMAメッセージが完了するまで、インバウンドRDMA読み取りメッセージ204の処理を遅延させなければならない。従って、呼び鈴を鳴らすこと、すなわち通知は、全てのイン・オーダの先行するRDMA読み取りメッセージ204が完了するまで、遅延させなければならない。単一の呼び鈴を鳴らす動作すなわち通知は、いくつかのWQE216RRのポスティングを意味する場合がある。
上述の問題を解決するため、本発明によるRNIC16は、接続コンテキスト42において(PendingReadResponseNumフィールド300(図10))、各TCPホール130ごとに(図2)、呼び鈴を鳴らすこと(通知)を待っているポストされたRDMA読み取り応答WQE216RRの数をストアする。TCPホール130を閉じた場合、RNIC16は、呼び鈴を鳴らして(通知)、読み取りキュー214に対するPendingReadResponseNumWQE216RRのポスティングを確認する。これは、全ての先行する読み取りメッセージ204が完了したことを示し、RNIC16は、ポストされた読み取り応答WQE216RRの処理を開始することができる。
図23を参照すると、RDMA送信メッセージ500は、独特の状況を表す。具体的には、完了した送信メッセージの配信は、CQ540にCQE542を配置することを含む。CQE542は、完了したメッセージを記述する情報(例えば長さ、STagの無効化等)を保持する。この情報は、メッセージに特定的な情報であり、従って待ち状態の送信メッセージ500ごとに保持しなければならない。RNIC16は、送信メッセージ500が完了する前にCQE542を配置することができない(受信した読み取りワーク要求508RにおけるRDMA読み取り応答WQE508RRの配置と同様)。なぜなら、CQ540は、いくつかの送信キュー510および受信キュー512によって共有することができるからである。
この問題を、追加のRNICリソースを消費することなく解決し、スケーラブルな実施を提供するため、本発明によるアウト・ロジック40は、CQE542に含まなければならない全ての情報を、その送信メッセージ500によって消費されるWQE516Rに配置する。次いで、この情報は、完了のためのポーリング要求の際に、バーブ・インタフェース20(図9)によってWQE516Rから検索される。RNIC16は、接続コンテキスト42にTCPホール130ごとの完了した送信メッセージ500の数を(CompletedSendsNumフィールド302に)維持しなければならない。これは、対応するTCPホールが閉じた場合に、CQE542をCQ540にポストするために用いられる。TCPホール130が閉じると、RNIC16は、CQE542をCQ540に配置する。配置されるCQE542の数は、このホールについてカウントされる完了送信メッセージ500の数に等しい。この手法は、2N回の書き込み動作を伴う。ここで、Nは、完了した送信メッセージ500の数である。
RDMA送信メッセージ500の配信に関連して上述した手法の1つの欠点は、RNIC16によって行われる書き込み動作の数が二倍になることである。すなわち、各完了送信メッセージ500ごとに、WQE516R1回の書き込みおよびCQE542の1回の書き込みが行われる。この問題に対処するため、図24に示すように、本発明の代替的な実施形態によれば、CQE542の内容を変更して、特定のCQE542が完了させるWQE516Rの参照カウンタ544を保持する。参照カウンタ544は、RNIC16によって、所与のTCPホール130のために完了した送信メッセージ500の数に初期化される。バーブ・インタフェース20は、完了のためのポーリング動作(完了ポーリング動作)ごとに、参照カウンタ544を1だけ減らし、カウンタがゼロになったCQ540からCQE542を除去する。更に、RNIC16は、完了を待っている送信メッセージ500の数がその閾値(M)より大きい場合にのみ、WQE516Sを更新する。Mは構成可能なパラメータであり、待ち状態のインバウンド送信メッセージ500の情報を保持するために割り当てられた内部リソース量を示す。Mがゼロに等しい場合、アウト・オブ・オーダで受信された送信メッセージ500はいずれも、WQE516Rの更新を伴う(イン・オーダで受信された送信メッセージ500では更新は必要ない)。
また、この実施形態は、2種類のCQE542を規定すること、および、CQE542をインジケータ546に与えることを含み、CQEがCQEの本体に全ての完了データを保持するものであるか、または完了データの一部を保持し、完了情報の残りは1つ以上のRDMA送信メッセージに関連するWQE516Rにストアされているものであるかを示す。この代替的な実施形態は、書き込み動作の回数をN+1に減らす。ここで、Nは、TCPホール130が閉じる前に待ち状態であった、完了した送信メッセージ500の数である。
IV.結論
先の考察において、この方法ステップは、本発明の機能タスクの1つ以上を実行するための専門のハードウェアを含む特定のユーザ・コンピュータ、すなわち有限状態マシンによって実行されることが好ましい。しかしながら、この方法ステップは、メモリにストアされたプログラムの命令を実行するCPU等のプロセッサによっても実行可能である。本明細書中で記載した様々なデバイス、モジュール、機構、およびシステムは、ハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせによって実現可能であり、図示したもの以外に区分化することができることは理解されよう。それらは、本明細書中に記載した方法を実行するために適合されたいずれかのタイプのコンピュータ・システムまたは他の装置によって実施可能である。ハードウェアおよびソフトウェアの典型的な組み合わせは、コンピュータ・プログラムを有する汎用コンピュータ・システムであり、このプログラムがロードされて実行されると、コンピュータ・システムを制御して、本明細書中に記載した方法を実行するようになっている。また、本発明は、コンピュータ・プログラムに埋め込むことも可能である。このプロダクトは、本明細書中に記載した方法および機能の実施を可能とする全ての特徴を含み、コンピュータ・システムにロードされた場合、これらの方法および機能を実行することができる。このコンテキストにおいて、コンピュータ・プログラム、ソフトウェア・プログラム、プログラム、またはソフトウェアは、いずれの言語、記号体系、または表記においても、1組の命令の表現を意味し、直接に、または、(a)別の言語、符号体系、または表記への変換、あるいは(b)異なる材料形態での再生、またはその両方の後に、情報処理機能を有するシステムに特定の機能を実行させるように意図されている。
本発明について、上述の具体的な実施形態に関連付けて説明したが、当業者には、多くの代替、変更、および変形が明らかであろう。従って、上述の本発明の実施形態は、限定でなく例示のために意図されたものである。特許請求の範囲において規定される本発明の精神および範囲から逸脱することなく、様々な変更を行うことができる。特に、記載したステップの順序は、異なる1組のステップによって与えられ、本発明の範囲から逸脱しないある状況または機能において、変更することができる。
本発明は、コンピュータ・プログラミングおよび情報技術の分野において有用である。
従来のデータ転送環境およびRNICのブロック図を示す。 TCP/IPデータ転送構造上の従来のMPA/RDMA/DDPのブロック図を示す。 1つ以上のDDPセグメントについて可能なMPAマーカ参照のブロック図を示す。 従来のタグ付きDDPヘッダのブロック図を示す。 従来のタグなしDDPヘッダのブロック図を示す。 従来のRDMAメッセージ・データ転送のブロック図を示す。 従来のRDMAメッセージ・データ転送のブロック図を示す。 従来のRDMAメッセージ・データ転送のブロック図を示す。 本発明によるデータ転送環境およびRNICのブロック図を示す。 図9のRNICの接続コンテキストのブロック図を示す。 図9のRNICの妥当性確認ユニットのブロック図を示す。 RNIC入力ロジック(すなわちイン・ロジック)機能のフロー図を示す。 図12のイン・ロジックの有限再送信試行モードの実施形態のフロー図を示す。 図12のイン・ロジックの有限再送信試行モードの実施形態のフロー図を示す。 代替的な実施形態による接続格下げの後のTCセグメントの処理を示すブロック図を示す。 図12のイン・ロジックの接続格上げの実施形態のフロー図を示す。 巡回冗長検査(CRC)の計算および妥当性確認のための初期シーケンス番号取り決め実施と共に用いるMPA要求/応答フレームを示す。 CRC計算および妥当性確認のための代替的な変更MPA長実施のためのフロー図を示す。 CRC計算および妥当性確認のためのマーカなしカットスルー実施を用いたイン・ロジックの第1の代替的な実施形態のフロー図を示す。 CRC計算および妥当性確認のためのマーカなしカットスルー実施を用いたイン・ロジックの第2の代替的な実施形態のフロー図を示す。 本発明による読み取りキューを含むRDMA読み取りおよび読み取り応答メッセージ・データ転送のブロック図を示す。 RNIC出力ロジック(すなわちアウト・ロジック)が処理するメッセージのためのワーク・キュー要素(WQE)およびTCPホールのブロック図を示す。 本発明による完了キュー要素(CQE)を含むRDMA送信メッセージ・データ転送のブロック図を示す。 図23のCQEのブロック図を示す。

Claims (14)

  1. アウト・オブ・オーダの遠隔メモリ・データ・アクセス(RDMA送信メッセージの配信において受信キューへのワーク・キュー要素(WQE)の書き込み動作及び完了キューへの完了キュー要素(CQE)の書き込み動作の回数を減らす方法であって、システムに下記ステップを実行させることを含み、前記完了キューはCQEを格納し、前記CQEは当該CQEが完了させるWQEの参照カウンタを保持し、
    前記ステップは、
    アウト・オブ・オーダのTCPセグメントを受信した結果としてTCPストリーム内に生成される空きのために完了されたRDMA送信メッセージの数に前記参照カウンタをセットするステップと、
    完了ポーリング動作ごとに、前記参照カウンタを1だけ減らすステップと、
    前記参照カウンタがゼロになった完了キューからCQEを除去するステップと
    を含む、前記方法。
  2. 前記システムに、
    待ち状態のRDMA送信メッセージの数がその閾値の数より大きい場合にのみ送信キューのWQEを更新するステップを更に実行させることを含む、請求項1に記載の方法。
  3. 前記閾値が、待ち状態のRDMA送信メッセージについての情報をストアするために割り当てられたリソースの数である、請求項2に記載の方法。
  4. 前記システムに、
    前記CQEに完了データの少なくとも一部を含ませるステップを更に実行させることを含む、請求項1に記載の方法。
  5. 前記完了データの残りが、1つ以上のRDMA送信メッセージに関連付けられたWQEに含まれる、請求項4に記載の方法。
  6. 前記システムに、
    (1)前記CQEが全ての完了データを含むこと、および、(2)CQE完了データが、1つ以上のRDMA送信メッセージに関連付けられたWQE少なくとも部分的に含まれること、の一方を示すステップを更に実行させることを含む、請求項4に記載の方法。
  7. 書き込み動作の回数がN+1に等しく、ここで、Nは、前記空きが閉じる前に待ち状態であった完了されたRDMA送信メッセージの数である、請求項1に記載の方法。
  8. アウト・オブ・オーダの遠隔メモリ・データ・アクセス(RDMA送信メッセージの配信において受信キューへのワーク・キュー要素(WQE)の書き込み動作及び完了キューへの完了キュー要素(CQE)の書き込み動作の回数を減らすためのシステムであって、
    CQEを格納する完了キューであって、前記CQEは当該CQEが完了させるWQEの参照カウンタを保持する、前記完了キューと、
    アウト・オブ・オーダのTCPセグメントを受信した結果としてTCPストリーム内に生成される空きのために完了されたRDMA送信メッセージの数に前記参照カウンタをセットする手段と、
    完了ポーリング動作ごとに、前記参照カウンタを1だけ減らす手段と、
    前記参照カウンタがゼロになった完了キューからCQEを除去する手段と
    を備えている、前記システム。
  9. 待ち状態のRDMA送信メッセージの数がその閾値の数より大きい場合にのみ送信キューのWQEを更新する手段を更に備えている、請求項8に記載のシステム。
  10. 前記閾値が、待ち状態のRDMA送信メッセージについての情報をストアするために割り当てられたリソースの数である、請求項9に記載のシステム。
  11. 前記CQEに完了データの少なくとも一部をストアし、前記完了データの残りを1つ以上のRDMA送信メッセージに関連付けられたWQEにストアする手段を更に備えている、請求項8に記載のシステム。
  12. (1)前記CQEが全ての完了データを含むこと、および、(2)CQE完了データが、1つ以上のRDMA送信メッセージに関連付けられたWQE少なくとも部分的に含まれること、の一方を示す手段を更に備えている、請求項11に記載のシステム。
  13. 書き込み動作の回数がN+1に等しく、ここで、Nは、前記空きが閉じる前に待ち状態であった完了したRDMA送信メッセージの数である、請求項8に記載のシステム。
  14. アウト・オブ・オーダの遠隔メモリ・データ・アクセス(RDMA送信メッセージの配信において受信キューへのワーク・キュー要素(WQE)の書き込み動作及び完了キューへの完了キュー要素(CQE)の書き込み動作の回数を減らすためのコンピュータ・プログラムであって、コンピュータに、請求項1〜7のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
JP2006543909A 2003-12-11 2004-12-07 アウト・オブ・オーダのrdma送信メッセージの配信に関する書き込み動作の回数の減少 Expired - Fee Related JP4508195B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/733,594 US7441006B2 (en) 2003-12-11 2003-12-11 Reducing number of write operations relative to delivery of out-of-order RDMA send messages by managing reference counter
PCT/US2004/040745 WO2005060579A2 (en) 2003-12-11 2004-12-07 Reducing number of write operations relative to delivery of out-of-order rdma send messages

Publications (2)

Publication Number Publication Date
JP2007515719A JP2007515719A (ja) 2007-06-14
JP4508195B2 true JP4508195B2 (ja) 2010-07-21

Family

ID=34653127

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006543909A Expired - Fee Related JP4508195B2 (ja) 2003-12-11 2004-12-07 アウト・オブ・オーダのrdma送信メッセージの配信に関する書き込み動作の回数の減少

Country Status (6)

Country Link
US (1) US7441006B2 (ja)
EP (1) EP1692582B1 (ja)
JP (1) JP4508195B2 (ja)
KR (1) KR100850254B1 (ja)
CN (1) CN100476769C (ja)
WO (1) WO2005060579A2 (ja)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7539780B2 (en) * 2003-12-01 2009-05-26 International Business Machines Corporation Asynchronous completion notification for an RDMA system
CA2548085C (en) * 2003-12-11 2014-04-29 International Business Machines Corporation Data transfer error checking
US20060259570A1 (en) * 2005-05-13 2006-11-16 Microsoft Corporation Method and system for closing an RDMA connection
US7693138B2 (en) * 2005-07-18 2010-04-06 Broadcom Corporation Method and system for transparent TCP offload with best effort direct placement of incoming traffic
US7596628B2 (en) * 2006-05-01 2009-09-29 Broadcom Corporation Method and system for transparent TCP offload (TTO) with a user space library
US20070255866A1 (en) * 2006-05-01 2007-11-01 Eliezer Aloni Method and system for a user space TCP offload engine (TOE)
US7765317B1 (en) * 2008-06-30 2010-07-27 Qlogic, Corporation System and methods for locating FPDU headers when markers are disabled
CN102388385B (zh) * 2011-09-28 2013-08-28 华为技术有限公司 数据处理的方法和装置
US9490988B2 (en) 2012-04-10 2016-11-08 Intel Corporation Continuous information transfer with reduced latency
DE112012006227B4 (de) * 2012-04-10 2023-07-27 Intel Corporation Systeme und verfahren für den remotezugriff auf den direkten speicher mit reduzierter latenzzeit
US8989037B2 (en) * 2012-06-01 2015-03-24 Broadcom Corporation System for performing data cut-through
US9558146B2 (en) * 2013-07-18 2017-01-31 Intel Corporation IWARP RDMA read extensions
US10223326B2 (en) * 2013-07-31 2019-03-05 Oracle International Corporation Direct access persistent memory shared storage
EP3126977A4 (en) * 2014-04-02 2017-11-01 Strato Scale Ltd. Remote asymmetric tcp connection offload over rdma
US10509764B1 (en) * 2015-06-19 2019-12-17 Amazon Technologies, Inc. Flexible remote direct memory access
US11340814B1 (en) 2017-04-27 2022-05-24 EMC IP Holding Company LLC Placing data in a data storage array based on detection of different data streams within an incoming flow of data
US11243899B2 (en) 2017-04-28 2022-02-08 International Business Machines Corporation Forced detaching of applications from DMA-capable PCI mapped devices
US10778767B2 (en) * 2017-04-28 2020-09-15 International Business Machines Corporation Persistent memory replication in RDMA-capable networks
US10803039B2 (en) 2017-05-26 2020-10-13 Oracle International Corporation Method for efficient primary key based queries using atomic RDMA reads on cache friendly in-memory hash index
US10719446B2 (en) 2017-08-31 2020-07-21 Oracle International Corporation Directly mapped buffer cache on non-volatile memory
US10956335B2 (en) 2017-09-29 2021-03-23 Oracle International Corporation Non-volatile cache access using RDMA
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US10802766B2 (en) 2017-09-29 2020-10-13 Oracle International Corporation Database with NVDIMM as persistent storage
US10732836B2 (en) 2017-09-29 2020-08-04 Oracle International Corporation Remote one-sided persistent writes
CN109067506A (zh) * 2018-08-15 2018-12-21 无锡江南计算技术研究所 一种基于多滑动窗口并发的轻量级异步消息实现方法
US11025564B2 (en) * 2019-02-22 2021-06-01 Microsoft Technology Licensing, Llc RDMA transport with hardware integration and out of order placement
US11068412B2 (en) * 2019-02-22 2021-07-20 Microsoft Technology Licensing, Llc RDMA transport with hardware integration
CN114090495A (zh) * 2019-03-01 2022-02-25 华为技术有限公司 数据处理的方法、网卡和服务器
CN113874848A (zh) 2019-05-23 2021-12-31 慧与发展有限责任合伙企业 用于促进网络接口控制器(nic)中对加速器的操作管理的系统和方法
CN110602211B (zh) * 2019-09-16 2022-06-14 无锡江南计算技术研究所 一种带异步通知的乱序rdma方法与装置
CN111064680B (zh) * 2019-11-22 2022-05-17 华为技术有限公司 一种通信装置及数据处理方法
CN110830516B (zh) * 2019-12-19 2022-03-22 深信服科技股份有限公司 一种网络访问方法、装置、网络控制设备及存储介质
CN112073434B (zh) * 2020-09-28 2022-06-07 山东产研集成电路产业研究院有限公司 降低基于toe的高频交易终端接收通道传输延迟的方法
CN113572575B (zh) * 2021-07-16 2024-06-25 北京东方国信科技股份有限公司 一种自适应数据传输方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62183638A (ja) * 1986-02-07 1987-08-12 Fujitsu Ltd ロ−カルエリア・ネツトワ−クにおける同報通信制御方式
US8051212B2 (en) * 2001-04-11 2011-11-01 Mellanox Technologies Ltd. Network interface adapter with shared data send resources
US20030050990A1 (en) * 2001-06-21 2003-03-13 International Business Machines Corporation PCI migration semantic storage I/O
US6839896B2 (en) * 2001-06-29 2005-01-04 International Business Machines Corporation System and method for providing dialog management and arbitration in a multi-modal environment
US20030105931A1 (en) * 2001-11-30 2003-06-05 Weber Bret S. Architecture for transparent mirroring
US20030145230A1 (en) * 2002-01-31 2003-07-31 Huimin Chiu System for exchanging data utilizing remote direct memory access
US7543037B2 (en) * 2003-12-02 2009-06-02 International Business Machines Corporation RDMA completion and retransmit system and method

Also Published As

Publication number Publication date
WO2005060579A2 (en) 2005-07-07
EP1692582A4 (en) 2011-06-29
EP1692582A2 (en) 2006-08-23
US7441006B2 (en) 2008-10-21
CN100476769C (zh) 2009-04-08
KR100850254B1 (ko) 2008-08-04
US20050132017A1 (en) 2005-06-16
KR20070001892A (ko) 2007-01-04
EP1692582B1 (en) 2012-07-11
JP2007515719A (ja) 2007-06-14
WO2005060579A3 (en) 2006-08-17
CN1997977A (zh) 2007-07-11

Similar Documents

Publication Publication Date Title
JP4583383B2 (ja) Tcp再送信プロセス速度の向上方法
JP4508195B2 (ja) アウト・オブ・オーダのrdma送信メッセージの配信に関する書き込み動作の回数の減少
US7383483B2 (en) Data transfer error checking
US7243284B2 (en) Limiting number of retransmission attempts for data transfer via network interface controller
US20220311544A1 (en) System and method for facilitating efficient packet forwarding in a network interface controller (nic)
US7912979B2 (en) In-order delivery of plurality of RDMA messages
US20050129039A1 (en) RDMA network interface controller with cut-through implementation for aligned DDP segments
JP4979823B2 (ja) データ転送エラー検査
US20140310369A1 (en) Shared send queue
US9692560B1 (en) Methods and systems for reliable network communication

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071002

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091201

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100126

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100126

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20100126

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100127

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: 20100419

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100419

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20100419

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: 20100426

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

Free format text: PAYMENT UNTIL: 20130514

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140514

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees