(57)【特許請求の範囲】
【請求項１】
第１のリモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ）ネットワークインタフェースコントローラ（第１のＲＮＩＣ）で、信頼できるトランスポートプロトコルを利用して第２のＲＮＩＣから前記第１のＲＮＩＣへのＲＤＭＡデータトランスファーとの関連で利用される宛先バッファとして利用されるメモリの登録要求を含む第１のメッセージを受信する段階と、
前記要求に関するメモリ登録オペレーション及びページフォルトイベントが生じたことに呼応して、前記第１のメッセージが受信されたことを確認し、ページフォルト遅延イベントが生じていることを示す情報を含む第１の確認メッセージを前記第２のＲＮＩＣに送信する段階と
を備える方法。
【請求項２】
前記第１の確認メッセージは、バックオフタイムを含み、前記第２のＲＮＩＣに対して、前記バックオフタイムが終了するまで前記ＲＤＭＡデータトランスファーに対応する複数のパケットを送信しないよう要求する要求を含む、請求項１に記載の方法。
【請求項３】
更に、
前記ページフォルト遅延中に前記第２のＲＮＩＣから複数のパケットを受信する段階と、
前記ページフォルト遅延が生じている間、前記第１のＲＮＩＣ上に前記複数のパケットを一時的にバッファリングする段階と、
前記ページフォルト遅延が完了した後に、前記複数のパケットが受信されたことを示す第２の確認メッセージを前記第２のＲＮＩＣに送信する段階と
を備える、請求項１又は２に記載の方法。
【請求項４】
前記第１のＲＮＩＣは、複数の宛先バッファに利用されるシステムメモリと、前記システムメモリに対するアクセスを管理するために利用されるメモリ管理ユニット（ＭＭＵ）を有するプロセッサとを含むホストプラットフォームにインストールされ、
仮想メモリを利用するオペレーティングシステムが前記ホストプラットフォーム上で実行され、
前記方法は更に、
複数の宛先バッファに割り当てられた複数のページのための前記ＭＭＵが利用するページテーブル情報の一部と、前記第１のＲＮＩＣによってローカルにアクセスされる前記ページテーブル情報のキャッシュされているコピーとを同期させるメカニズムを実装する段階を備える、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記要求に対応している、登録される前記システムメモリは、１つ又は複数のメモリページを含み、
前記方法は更に、
前記１又は複数のメモリページがピニングされていない場合、前記１つ又は複数のメモリページのピニングを要求する印（indicia）を前記ＭＭＵに提供する段階を備える、請求項４に記載の方法。
【請求項６】
前記ＲＤＭＡデータトランスファーが完了した後に、ピニングされている前記１つ又は複数のメモリページがピニングされないように要求する印を前記ＭＭＵに提供する段階を更に備える、請求項５に記載の方法。
【請求項７】
前記第１のＲＮＩＣは、複数の宛先バッファに利用されるシステムメモリと、前記システムメモリに対するアクセスを管理するために利用されるメモリ管理ユニット（ＭＭＵ）を含むプロセッサとを含むホストプラットフォームにインストールされ、
仮想メモリを利用するオペレーティングシステムが前記ホストプラットフォーム上で実行され、カーネルメモリのページングテーブルを利用し、
前記方法は更に、
複数のメモリページのピニング状態を特定するべく、前記第１のＲＮＩＣを介して前記ページングテーブルの複数のページテーブルエントリを更新する段階を備える、請求項１から６のいずれか一項に記載の方法。
【請求項８】
複数のメモリページを利用する宛先バッファの利用が完了した後に、前記複数のメモリページがピニングされていないことを特定するべく、前記第１のＲＮＩＣを介して前記複数のページテーブルエントリを更新する段階を更に備える、請求項７に記載の方法。
【請求項９】
前記第１のＲＮＩＣは、複数の宛先バッファに利用されるシステムメモリと、前記システムメモリに対するアクセスを管理するために利用されるメモリ管理ユニット（ＭＭＵ）を含むプロセッサとを有するホストプラットフォームにインストールされ、
仮想メモリを利用するオペレーティングシステムが前記ホストプラットフォーム上で実行され、カーネルメモリのページングテーブルを利用し、
前記方法は更に、
前記第１のＲＮＩＣを介して、前記ページフォルトが生じていることを検出する段階を備える、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記宛先バッファに利用されるメモリの登録を試みる前に、ページフォルトが生じると判断する段階を更に備える、請求項１から９のいずれか一項に記載の方法。
【請求項１１】
単一のＲＤＭＡワーク要求に対応する進行中のＲＤＭＡデータトランスファー中に、宛先バッファを割り当てよ、又は、既存の宛先バッファのサイズを拡張せよ、と要求する要求を受信する段階と、
現在ページアウトされている１つ又は複数のメモリページを利用して、前記宛先バッファを割り当てる、又は、前記既存の宛先バッファのサイズを拡張する段階と
を更に備え、
前記１つ又は複数のページは、ページイン、登録、及びピニングされる、請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
前記宛先バッファを割り当てよ、又は、既存の宛先バッファのサイズを拡張せよ、と要求する前記要求は、該要求を、宛先バッファを予め割り当てよと要求する要求であると特定する印を含み、
メモリのページアウトされたページを利用することでページフォルトが生じ、
前記方法は更に、
前記ページフォルトに呼応して、バックオフタイムを含む確認メッセージを前記第２のＲＮＩＣに送信しない段階を備える、請求項１１に記載の方法。
【請求項１３】
信頼できるトランスポートプロトコルを利用してパケット化されたデータを送信及び受信するネットワークインタフェースと、
リモート・ダイレクト・メモリ・アクセス論理（ＲＤＭＡ論理）と
を備える装置であり、
前記ＲＤＭＡ論理は、前記装置が動作中に、
信頼できるトランスポートプロトコルを利用して遠隔の装置からのＲＤＭＡデータトランスファーとの関連で利用される宛先バッファとして利用されるメモリの登録要求を含む第１のメッセージを受信する動作と、
前記要求に関するメモリ登録オペレーション及びページフォルトイベントが生じたことに呼応して、前記第１のメッセージが受信されたことを確認し、ページフォルト遅延イベントが生じていることを示す情報を含む第１の確認メッセージを前記遠隔の装置に送信する動作と
を含む複数の動作の実行を促すべく利用され、
前記第１の確認メッセージは、バックオフタイムを含み、前記遠隔の装置に対して、前記バックオフタイムが終了するまで前記ＲＤＭＡデータトランスファーに対応する複数のパケットを送信しないよう要求する要求を含む、装置。
【請求項１４】
前記装置は、ＲＤＭＡイネーブルされたネットワークインタフェースコントローラ（ＲＮＩＣ）を備える、請求項１３に記載の装置。
【請求項１５】
前記装置は、複数の宛先バッファに利用されるシステムメモリと、前記システムメモリに対するアクセスを管理するために利用されるメモリ管理ユニット（ＭＭＵ）を含むプロセッサとを有するホストプラットフォームにインストールされ、
前記ホストプラットフォームの動作中に、仮想メモリを利用するオペレーティングシステムが前記ホストプラットフォーム上で実行され、
前記装置は更に、
複数の宛先バッファに割り当てられた複数のページのための前記ＭＭＵが利用するページテーブル情報の一部と、前記装置によってローカルにアクセスされる前記ページテーブル情報のキャッシュされているコピーとを同期させるメカニズムを備える、請求項１３又は１４に記載の装置。
【請求項１６】
前記装置は、複数の宛先バッファに利用されるシステムメモリと、前記システムメモリに対するアクセスを管理するために利用されるメモリ管理ユニット（ＭＭＵ）を含むプロセッサとを含むホストプラットフォームにインストールされ、
前記ホストプラットフォームの動作中に、仮想メモリを利用するオペレーティングシステムが前記ホストプラットフォーム上で実行され、カーネルメモリのページングテーブルを利用し、
前記装置は更に、
複数のメモリページのピニング状態を特定するべく、前記ページングテーブルの複数のページテーブルエントリを更新する、請求項１３から１５のいずれか一項に記載の装置。
【請求項１７】
前記装置は更に、動作中に、
単一のＲＤＭＡワーク要求に対応する進行中のＲＤＭＡデータトランスファー中に、宛先バッファを動的に割り当てよ、又は、既存の宛先バッファのサイズを拡張せよ、と要求する要求を受信する動作と、
現在ページアウトされている１つ又は複数のメモリページを利用して、前記宛先バッファを割り当てる、又は、前記既存の宛先バッファのサイズを拡張する動作と
を含む複数の動作を実行し、
前記１つ又は複数のページは、ページイン、登録、及びピニングされる、請求項１３から１５のいずれか一項に記載の装置。
【請求項１８】
第１のリモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ）ネットワークインタフェースコントローラ（第１のＲＮＩＣ）から第２のＲＮＩＣに、信頼できるトランスポートプロトコルを利用して前記第１のＲＮＩＣから前記第２のＲＮＩＣへのＲＤＭＡデータトランスファーとの関連で利用される宛先バッファとして利用されるメモリの登録要求を含む第１のメッセージを送信する段階と、
前記第１のＲＮＩＣから前記第２のＲＮＩＣに、前記ＲＤＭＡデータトランスファーに対応する第１の複数のパケットをストリーミングする段階と、
前記第１のメッセージが受信されたことを確認し、ページフォルト遅延イベントが生じていることを示す情報とバックオフタイムとを含む第１の確認メッセージを前記第２のＲＮＩＣから受信する段階と、
前記受信に呼応して、
バックオフタイマにより利用される前記バックオフタイムを利用して、前記バックオフタイマが時間切れになるまで、前記第１のＲＮＩＣから前記第２のＲＮＩＣに、前記ＲＤＭＡデータトランスファーのための更なるパケットを送信しない段階と
を備える方法。
【請求項１９】
前記バックオフタイムの利用に関するバックオフ期間中には、前記第１の複数のパケットのいずれも再送信しない段階を更に備える、請求項１８に記載の方法。
【請求項２０】
前記ＲＤＭＡデータトランスファーは、ファイルサイズをもつファイルをトランスファーせよとのＲＤＭＡワーク要求に対応し、
前記第１のメッセージで前記メモリの登録が要求された前記宛先バッファは、前記ファイルサイズ未満のサイズをもち、第１の宛先バッファを含み、
前記方法は更に、
前記ファイルのＲＤＭＡデータトランスファーに対応する複数のパケットのストリームを、前記第１のＲＮＩＣから前記第２のＲＮＩＣに送信する段階と、
前記ファイルの前記ＲＤＭＡデータトランスファー中に、前記ファイルの前記ＲＤＭＡデータトランスファーとの関連で利用される第２の宛先バッファとして利用されるメモリの暗示的な登録要求を含む第２のメッセージを送信する段階と
を備える、請求項１８又は１９に記載の方法。
【請求項２１】
前記第２のメッセージは、前記第２の宛先バッファのための前記メモリの前記暗示的な登録中に生じうると推定されるページフォルト遅延より大きい事前期間を利用して、前記第２の宛先バッファが必要とされるよりも前に送信される、請求項２０に記載の方法。
【請求項２２】
信頼できるトランスポートプロトコルを利用してパケット化されたデータを送信及び受信するネットワークインタフェースと、
リモート・ダイレクト・メモリ・アクセス論理（ＲＤＭＡ論理）と
を備える装置であり、
前記ＲＤＭＡ論理は、前記装置が動作中に、
前記装置から遠隔の装置に、信頼できるトランスポートプロトコルを利用して前記装置から前記遠隔の装置へのＲＤＭＡデータトランスファーとの関連で利用される宛先バッファとして利用されるメモリの登録要求を含む第１のメッセージを送信する動作と、
前記遠隔の装置に、前記ＲＤＭＡデータトランスファーに対応する第１の複数のパケットをストリーミングする動作と、
前記第１のメッセージが受信されたことを確認し、ページフォルト遅延イベントが生じていることを示す情報とバックオフタイムとを含む第１の確認メッセージを前記遠隔の装置から受信する動作と、
前記受信に呼応して、
バックオフタイマにより利用される前記バックオフタイムを利用して、前記バックオフタイマが時間切れになるまで、前記遠隔の装置に、前記ＲＤＭＡデータトランスファーのための更なるパケットを送信しない動作と
を含む複数の動作の実行を促すべく利用される、装置。
【請求項２３】
前記装置は更に、前記バックオフタイムの利用に関するバックオフ期間中には、前記第１の複数のパケットのいずれも再送信しない、請求項２２に記載の装置。
【請求項２４】
前記ＲＤＭＡデータトランスファーは、ファイルサイズをもつファイルをトランスファーせよとのＲＤＭＡワーク要求に対応し、
前記第１のメッセージで前記メモリの登録が要求された前記宛先バッファは、前記ファイルサイズ未満のサイズをもち、第１の宛先バッファを含み、
前記装置は更に、
前記ファイルのＲＤＭＡデータトランスファーに対応する複数のパケットのストリームを、前記遠隔の装置に送信する動作と、
前記ファイルの前記ＲＤＭＡデータトランスファー中に、前記ファイルの前記ＲＤＭＡデータトランスファーとの関連で利用される第２の宛先バッファとして利用されるメモリの暗示的な登録要求を含む第２のメッセージを送信する動作と
を含む複数の動作を実行する、請求項２２又は２３に記載の装置。
【請求項２５】
前記第２のメッセージは、前記第２の宛先バッファのための前記メモリの前記暗示的な登録中に生じうると推定されるページフォルト遅延より大きい事前期間を利用して、前記第２の宛先バッファが必要とされるよりも前に送信される、請求項２４に記載の装置。
【請求項２６】
複数のメモリページを有するシステムメモリと、
前記システムメモリに動作可能に連結され、前記システムメモリの複数のページに対するアクセスを管理するメモリ管理ユニット（ＭＭＵ）を含むプロセッサと、
二次格納デバイスと、
前記プロセッサに動作可能に連結又は集積され、前記メモリと前記二次格納デバイスとに動作可能に連結された入出力インタフェースコンポーネント（ＩＯインタフェースコンポーネント）と、
前記ＩＯインタフェースコンポーネントに動作可能に連結され、ドライバを介して前記ＭＭＵとインタフェースする論理を有し、更に、複数のリモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ）ネットワークオペレーションを実行する論理を有するネットワークアダプタと
を備えるコンピュータシステムであって、
前記複数のリモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ）ネットワークオペレーションは、
遠隔のコンピュータシステムから、信頼できるトランスポートプロトコルを利用して前記遠隔のコンピュータシステムから前記コンピュータシステムへの第１のＲＤＭＡデータトランスファーに対応したデータを格納するために利用される宛先バッファとして利用されるメモリの登録要求を含む第１のメッセージを受信することと、
前記宛先バッファに利用されるメモリの登録に関連して、ページフォルトが生じたことを特定することと、
前記第１のメッセージが受信されたことを確認し、ページフォルト遅延イベントが生じていることを示す情報を含む第１の確認メッセージを前記遠隔のコンピュータシステムに送信することと
を含む、コンピュータシステム。
【請求項２７】
前記第１の確認メッセージは、バックオフタイムを含み、前記遠隔のコンピュータシステムに対して、前記バックオフタイムが終了するまで前記第１のＲＤＭＡデータトランスファーに対応するパケットを送信しないよう要求する要求を含む、請求項２６に記載のコンピュータシステム。
【請求項２８】
前記ＭＭＵとインタフェースするために利用される前記論理は、複数の宛先バッファに割り当てられた複数のページのための前記ＭＭＵが利用するページテーブル情報の一部と、前記ネットワークアダプタによってローカルにアクセスされる前記ページテーブル情報のキャッシュされているコピーとを同期させる、請求項２６又は２７に記載のコンピュータシステム。
【請求項２９】
前記ネットワークアダプタは、ＰＣＩｅリンク（Peripheral Component Interconnect Express link）を介して前記ＩＯインタフェースコンポーネントに動作可能に連結されている、請求項２６から２８のいずれか一項に記載のコンピュータシステム。
【請求項３０】
前記ネットワークアダプタは、
信頼できるトランスポートプロトコルを利用して前記コンピュータシステムから前記遠隔のコンピュータシステムへの第２のＲＤＭＡデータトランスファーとの関連で利用される宛先バッファとして利用されるメモリの登録要求を含む第２のメッセージを送信する動作と、
前記遠隔のコンピュータシステムに、前記第２のＲＤＭＡデータトランスファーに対応する第１の複数のパケットをストリーミングする動作と、
前記第２のメッセージが受信されたことを確認し、ページフォルト遅延イベントが生じていることを示す情報とバックオフタイムとを含む第１の確認メッセージを前記遠隔のコンピュータシステムから受信する動作と、
前記受信に呼応して、
バックオフタイマにより利用される前記バックオフタイムを利用して、前記バックオフタイマが時間切れになるまで、前記遠隔のコンピュータシステムへの前記第２のＲＤＭＡデータトランスファーのための更なるパケットを送信しない動作と
を含む複数の動作を実行する、請求項２６から２９のいずれか一項に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、概して、コンピュータネットワーキングに関しており、より詳しくは、暗示的なメモリの登録を利用する、ＲＤＭＡトランスファーのためのフロー制御の実行のための技術に関するが、これに限定はされない。
【背景技術】
【０００２】
リモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ）は、あるコンピュータに、別のコンピュータからの、コンピュータのオペレーティングシステムを利用しない、メモリへのアクセスを許可するダイレクト・メモリ・アクセス・メカニズムである。ＲＤＭＡは、ネットワークアダプタに、アプリケーションメモリから、又はアプリケーションメモリに、データを直接トランスファーさせることにより、ゼロコピーネットワーキングをサポートして、オペレーティングシステムのデータバッファとアプリケーションメモリとの間でデータをコピーする必要がないようにする。このようなトランスファーは、ＣＰＵ，キャッシュ、又はコンテキストスイッチ等の動作を必要とせず、トランスファーは、他のシステムオペレーションと平行して続けられる。アプリケーションがＲＤＭＡ読み出し又は書き込み要求を実行するとき、アプリケーションデータがネットワークに直接配信されることで、待ち時間が低減され、高速メッセージトランスファーが可能となる。
【０００３】
ユーザ空間（つまり、オペレーティングシステムによってアプリケーションに割り当てられる非カーネルメモリ空間のこと）を介して遠隔システムと効率的に通信するために、従来のＲＤＭＡデバイスは、ファブリック又はネットワークにより全てのデータをトランスファーするために、予め登録され、予めピニングされた（pre-pinned）メモリ領域を必要とする。こうすると、他のアプリケーションが利用できたであろうシステムメモリが大量に消費される。ページフォルトを避けるべく、メモリは多くの場合、（願わくは）最悪のケースのトラフィック状況に対応するべく、過剰割り当てを行う。しかし、トラフィック負荷が大きい場合には、このような方策も失敗し、予めピニングされたメモリ領域に割り当てられたメモリの量が不十分になりページフォルトが生じ、結果として、システムメモリではなく、ローカル又は遠隔の二次格納デバイスからアクセスされる仮想メモリが一時的に利用されるが、ハードディスクドライブ等のこれらのデバイスは、典型的なシステムメモリのマグニチュードのオーダ又はそれより遅いアクセス速度を有している。従来の方法を利用した場合、ページフォルトは、ＲＤＭＡの送信者にとってトランスペアレントであるか、又は、ページフォルトが生じてからかなり後に間接的に特定される（例えば、タイムアウト期間内に受領確認が受け取られない場合には、何等かの種類のフォルト又は混雑状態が示唆されるであろうから）。
【０００４】
暗示的なメモリの登録のためにオープンソースの方法及び所有権がある方法両方を提供する現在の市場では、いくつかのＲＤＭＡ可能なネットワークインタフェースカード（ＲＮＩＣ）が市販されている。これらは全てが、ＲＤＭＡトランスファーのためにメモリ領域を予めピニングする必要があるという要件を低減させようとしている。これらの場合には、ＲＮＩＣは、原則、メモリ管理ユニット（ＭＭＵ）として動作して、システムＭＭＵと何らかの形の同期を提供する。このＭＭＵ同期には、多くの形態があるが、原則的には、アダプタが、全てのユーザメモリ領域のアクセスに参加して、データトランスファー中のページフォルト及びページピニングを許すことを保証している。これらページングイベントは非決定論的であり、特にシステムがビジーであったり、フォルトがローカルの又はネットワーク接続されたドライブからのページングを要求する場合に、データストリームを顕著に失速させる可能性がある。
【図面の簡単な説明】
【０００５】
本発明の前述した側面及びそれに付随する利点は、以下の詳細な記載を、添付図面とともに読んだときによく理解され、明らかになるだろう。図面においては、そうではないと明記しない場合を除き、全図にわたり同様の参照番号は同様の部材を表す。
【図１】標準的なトランスポートフロー制御メカニズムを利用する従来の手法における、ＲＤＭＡ宛先バッファのための暗示的なメモリの登録に関連したページフォルトの結果を示す概略図である。
【図２】一実施形態において、ＲＤＭＡ宛先バッファのための暗示的なメモリの登録に関連したページフォルトが、明示的なフロー制御を利用してどのように処理されるかを示す概略図である。
【図３】ここに記載する実施形態の側面を実装するために利用することができるプラットフォームの構成を示す概略図である。
【図４】一実施形態における、暗示的なメモリの登録とパイプライン式にバッファを予め割り当てる方法を利用するＲＤＭＡデータトランスファーの側面を示すメッセージフロー図である。
【図５】ここで開示する実施形態の側面を実装するために利用することができるＲＮＩＣのためのアーキテクチャを示す概略図である。
【発明を実施するための形態】
【０００６】
ここに、暗示的なメモリの登録を利用するＲＤＭＡトランスファーのためのフロー制御を実行する方法及び装置の実施形態を記載する。以下の詳細な記載では、複数の特定の詳細を述べて、本発明の実施形態の完全な理解を促す。しかし、当業者であれば本発明をこれらの特定の詳細の１又は複数なしに、又は他の方法、コンポーネント、材料等を利用して、実行することができることを理解する。又は反対に、公知の構造、材料、又はオペレーションを詳細に示さない又は記載しないことで、本発明の側面を曖昧にしないようにしている箇所もある。
【０００７】
また、本明細書全体において、"一実施形態"、"ある実施形態"、等と言っている場合、本発明の少なくとも１つの実施形態が、実施形態に関連した特定の特徴、構造又は特性を含むことを意味する。従って、"一実施形態"、又は、"ある実施形態"といった言葉が本明細書の随所にあるからといって、これらは必ずしもすべてが同じ実施形態のことを指すわけではない。更に、特定の特徴、構造又は特性は、１又は複数の実施形態においては任意の適切な方法で組み合わせることができる。
【０００８】
記載した実施形態の側面に従って、有線で（on the wire）明示的なデータフローの受領確認を提供することで、不要なパケットのトランスファー及び混雑状態を回避することにより、ＲＤＭＡデバイスに、予めピニングする必要がある要件を回避して、ページフォルトをよりよく許容することを可能とする新規な通信方法が提供される。本開示は、１つのＲＤＭＡデバイス又は複数のＲＤＭＡデバイスに対して最適なバックプレッシャーを可能とする、明示的なフロー制御のアーキテクチャ及び方法を記載する。
【０００９】
＜明示的なメモリの登録とメモリページピニング＞
【００１０】
実施形態の利点をより良く理解するべく、まずは、現行の従来の手法との比較を行う。  前述したように、ＲＤＭＡは、システムＣＰＵとオペレーティングシステムとをバイパスする形で、遠隔システムのメモリに直接メモリアクセスを行うことを可能とする。ＲＤＭＡは、オペレーティングシステムが利用するカーネルメモリについて別個に維持されるアプリケーションメモリ（つまり、アプリケーションに対して割り当てられるシステムメモリ内のメモリ空間）へ、又はアプリケーションメモリから、データを直接トランスファーさせることをＲＮＩＣに可能とすることにより、ゼロコピーネットワーキングをサポートして、オペレーティングシステムが利用するカーネルメモリのデータバッファとアプリケーションメモリとの間でデータをコピーする必要をなくす。これは、ＲＮＩＣ上のＤＭＡエンジンが、ＲＮＩＣに割り当てられたシステムメモリ内のデータバッファに直接データを書き込んだり、ここから直接データを読み出したりすることができる、ＤＭＡオペレーションによって促される。
【００１１】
現代のオペレーティングシステムは、仮想メモリにページを割り当て、仮想メモリアドレス空間が利用する論理アドレスと、物理的メモリに対応する物理アドレス（つまりシステムメモリハードウェアアドレス）との間のマッピングを処理することにより、メモリ管理を実行する。これにより、システムの物理的メモリを超えてメモリのサイズを拡張することができるようになるなど、幾つかの利点が提供される。更に、各プロセスが、自身の論理アドレス空間で実行される。通常は、命令を処理するために、アプリケーションが見ている仮想アドレスを、ハードウェアが利用する物理アドレスに変換するためにページテーブルを利用するが、通常、この特定の変換を処理するハードウェアは、メモリ管理ユニット（ＭＭＵ）である。ページテーブルの各エントリは、対応するページが現実の（つまり物理的な）メモリ内にあるか否かを示すフラグを保持している。現実のメモリにある場合には、ページテーブルエントリは、ページが格納されている現実のメモリアドレスを含んでいる。
【００１２】
ハードウェアによってあるページに参照が行われると、該ページのページテーブルエントリが、それが今現実のメモリ内にないことを示している場合には、ハードウェアは、ページフォルト例外を提起して、オペレーティングシステムのページング監視コンポーネントを呼び出す。ページフォルトに呼応して、ページング監視コンポーネントは、二次ストレージ（又は仮想メモリがマッピングされるストレージ）にアクセスして、ページフォルトを生じさせた仮想アドレスをもつページに返り、ページテーブルを更新して、仮想アドレスの物理的位置を反映させて、変換メカニズムに要求を再開するよう指示する。全ての物理的メモリが既に利用中である場合には、ページング監視コンポーネントは、物理的メモリの中のページを解放して、スワップされた（swapped-in）（別名としては「ページインされた（"paged in"）」）ページを保持する。同時に、ページインされた各ページについて、物理的メモリに存在しているページをページアウト（paged out）する必要がある。原則として、メモリページのページアウトには、メモリページのデータを、その物理的メモリ内の位置から、二次格納デバイスに格納されているファイルへとコピーすることが伴う。メモリページのページインにより、ページアウトの逆が達成された、という場合には、二次格納デバイスのファイルに格納されているページに対応しているデータが、物理的メモリ内のページにコピーされる。ページング監視コンポーネントは、どのページを解放するかを判断するために最長時間未使用等の様々なページ置き換えアルゴリズムのうちの１つを利用することができる。理想的には、利用率の低いページがまずページアウトされるが、ページングを行うと、常に、メモリアクセスの待ち時間が長くなる。状況が十分悪くなると、メモリでページが絶えずページイン・アウトする、ディスク「スラッシング（thrashing）」が生じうる。
【００１３】
前述したように、ゼロコピーメモリアクセスは、ＣＰＵをバイパスするよう設計されているが、これは、ＭＭＵもバイパスすることを意味する（少なくともＲＤＭＡメモリ書き込み及び読み出し中には）。これにより、通常の仮想メモリ利用に関して問題が生じ、これは、明示的なメモリの登録と、ＲＤＭＡ利用に対して割り当てられたメモリページの「ピニング」とを利用することにより解決される。
【００１４】
ＲＤＭＡコンソーティアムは、ＲＮＩＣホスト（つまり、ＲＮＩＣが実装されているコンピュータシステム又はプラットフォーム）から見たＲＮＩＣハードウェア、ファームウェア、及びソフトウェアの振る舞いを説明したＲＤＭＡプロトコル動詞仕様（RDMA Protocol Verbs Specification）を発行している。振る舞いの記述は、ＲＮＩＣインタフェース、及び、ＲＮＩＣ動詞のセット、という形で示されている。ＲＮＩＣインタフェースは、ＲＮＩＣ動詞仕様をサポートするＲＮＩＣが提供するＲＤＭＡサービスの意味論を定義しており、ハードウェア、ファームウェア、及びソフトウェアの組み合わせによって実装することができる。動詞とは、ＲＮＩＣインタフェースが実行することを期待されているオペレーションのことである。現在のドラフト版であるＲＤＭＡ動詞仕様は、http://tools.ietf.org/html/draft-hilland-rddp-verbs-00.で発行されている。以下では、仕様は、ＲＤＭＡ動詞と称される。
【００１５】
ＲＤＭＡ動詞は、メモリの登録と称されるメモリを割り当てるためのメカニズムを定義する。メモリの登録によって、特定のＲＮＩＣによってメモリ領域にアクセスが可能となる。メモリウィンドウをバインディングすることで、特定のＲＮＩＣが、該メモリウィンドウが表すメモリにアクセスすることができるようになる。メモリの登録は、ＲＮＩＣに、ステアリングタグ（ＳＴａｇ）及びタグ付けされたオフセットを利用して、実質的に連続したバッファとしてのいずれかとしてアクセスすることを可能とするべく、ＲＩに対する実質的に連続したメモリ位置のセット又は物理的に連続した位置のセットを記述することをコンシューマ（つまり、データトランスファーのためにＲＤＭＡを利用するアプリケーション）に許可するメカニズムを提供する。メモリの登録は、ＲＮＩＣに、ＳＴａｇ及びタグ付けされたオフセットと物理的なメモリアドレスとの間のマッピングを提供する。更に、ＲＮＩＣに、メモリ位置に関連付けられたアクセス制御の記述も提供する。登録されたメモリ位置のセットは、メモリ領域と称される。ＲＮＩＣがメモリ領域を利用することができるようになるまでに、メモリ領域に関連付けられたリソースが割り当てられ、メモリ領域がＲＮＩＣに登録される必要がある。
【００１６】
ＲＤＭＡの従来の利用法においては、ＲＤＭＡ通信チャネルの両端のＲＤＭＡコンポーネント（つまり、送信コンピュータプラットフォーム及び受信コンピュータプラットフォームにおけるコンポーネントのこと、例えばサーバ）が、所与のアプリケーションのためにシステムメモリにバッファを割り当てる（又は、バッファの割り当てをＯＳに要求する）。アプリケーション間のデータトランスファーは、ソースバッファ及び送信側コンピュータのデータを、受信側コンピュータの宛先バッファにコピーすることによって実行される。ＯＳ、ＣＰＵ、及びＭＭＵはトランスファー中に利用されないので、バッファのアドレスは、トランスファー中に変更することができない。これは、メモリ領域に関連付けられたメモリページをピニングすることで達成される。ピニングされたメモリページは、二次ストレージにスワッピングすることができない。具体的には、従来の利用法では、直接メモリアクセス又は入出力（ＩＯ）チャネルを利用する周辺機器によって直接アクセスされるデータバッファは、ＩＯオペレーションが進行中はピニングされたページに存在しておらねばならない。これは、これらのデバイス及びデバイスが接続されるバスが、データバッファが物理的なメモリアドレスに位置していると予期しており、バスがＩＯのためのメモリ管理ユニットを有していようともなかろうとも、ページフォルトが生じるとトランスファーを止めることができず、ページフォルトが処理中に再開することができないからである。従って、ページをゼロコピーＲＤＭＡシステムにピニングしないと、メモリの内容が破損する場合がある。
【００１７】
明示的なメモリの登録においては、ＲＤＭＡデータトランスファーに利用されるバッファは、実際のデータトランスファーを開始する前に、ＲＮＩＣに登録される。これは、一部、ワーク要求（ＷＲ）を利用することで促される。各ＷＲは、１）データトランスファーオペレーションのタイプ（送信、受信、ＲＤＭＡ読み出し、ＲＤＭＡ書き込み）、２）送信、ＲＤＭＡ読み出し及びＲＤＭＡ書き込みのためのソースバッファ、及び、３）受信、ＲＤＭＡ読み出し及びＲＤＭＡ書き込みのための宛先バッファを定義する。ソースバッファ及び宛先バッファのそれぞれは、明示的に定義された位置を（つまりアドレスレンジ）、ピニングされたメモリ領域内に有する。登録後、前述したように、これらバッファは「タグ付けされたバッファ」と称され、固有のＳＴａｇにより特定される。
【００１８】
明示的なメモリの登録とピニングされたメモリとの利用は、これまでＲＤＭＡを実装する最もよく利用される方法であったが、顕著な欠点も有する。特に、メモリのピニングには時間がかかり、更なるメモリを設定する必要があり、オペレーティングシステムが他のプロセスに割り当てることができるメモリの量が低減され、メモリシステムが経時的に適合できる柔軟性が全体的に制限され、プロセスが無駄にページをピニングするとメモリの利用率の低下につながる場合すらある。
【００１９】
＜従来のフロー制御とともに暗示的なメモリの登録を利用する場合＞
【００２０】
ピニングされたメモリ領域を必要とするという欠点の幾つかを解決するべく、暗示的なメモリの登録スキームが開発された。暗示的なメモリの登録という手法においては、ＲＤＭＡデータトランスファーが、宛先バッファの割り当て前に開始されてよく、ここではバッファがオンザフライ方式で割り当てられる。こうすることで、このバッファに割り当てられた１又は複数のメモリページが二次ストレージにページアウトされた場合、ページフォルトが生じうる。このようなページフォルトイベントが生じると、宛先バッファにデータを書き込む前に、メモリページ又はページを、まず、システムメモリにページインする必要がある。
【００２１】
ページフォルトイベントに呼応した従来のフロー制御及び暗示的なメモリの登録をサポートするよう構成されたアーキテクチャの一例を図１に示す。アーキテクチャは、インターコネクト１０５及び１０７をそれぞれ介してシステムメモリ１０４及びＩＯチップセット１０６に連結された中央処理装置（ＣＰＵ）１０２を有するコンピュータプラットフォーム１００を含み、ＩＯチップセット１０６は、システムメモリ１０４に、インターコネクト１０９を介して動作可能に連結されている。ＩＯチップセット１０６は、更に、ＲＮＩＣ１０８にも、ＰＣＩエクスプレス(ＰＣＩｅ)リンク等のＰＣＩ（Peripheral Component Interconnect）１１０を介して接続されている。同様に、ＩＯチップセット１０６は、ＰＣＩインターコネクト１１３を介して二次ストレージ１１２を含む大容量記憶装置（例えばハードディスク又は固体ディスク）に接続されている。プラットフォーム１００は更に、ＣＰＵ１０２上のメモリ管理ユニット１１４、ＭＭＵ同期論理１１８を含むＲＮＩＣドライバ１１６、及び、オペレーティングシステム（ＯＳ）１２０により示される、メモリ管理及びメモリアクセスを促すためのコンポーネントを含む。
【００２２】
前述したように、ＲＤＭＡイネーブルされたシステムは、システムＣＰＵをバイパスする形の、遠隔システム（例えばプラットフォーム１００）上のメモリに対する直接メモリアクセスをサポートする。これは、ＲＮＩＣ１０８のＤＭＡエンジンが、システムメモリ１０４のＲＤＭＡメモリ領域１２２のバッファに直接書き込む、又は該バッファから直接読み出すことができる、ＤＭＡオペレーションによって実行される。ＲＮＩＣ１０８とシステムメモリ１０４との間の接続は、ＩＯチップセット１０６、インターコネクト１０９、及びＰＣＩリンク１１０を介して促され、ＩＯチップセット１０６は、ＲＮＩＣ１０８とシステムメモリ１０４との間のＩＯインタフェースとして動作する。
【００２３】
従来のＲＤＭＡメモリアクセスはＣＰＵをバイパスするので、ＭＭＵもバイパスする。メモリ領域１２２のバッファのためのページ全てがピニングされる場合には、これでよい。しかし、バッファを仮想メモリのページに割り当てることができるようにするために双方が、ページフォルトが生じたときを、及び、バッファがシステムメモリにページバックされたとき、ＭＭＵがどのように仮想メモリと物理的メモリとの間でページをマッピングするかを、ＲＮＩＣに知らせるメカニズムの提供が必要である。これは、ＲＮＩＣドライバ１１６内のＭＭＵ同期論理１１６を、ＭＭＵ１１４が実行するオペレーションと、システムメモリ１０４のカーネル空間内のページテーブル１２５の利用と組み合わせて利用することで促される。
【００２４】
暗示的なメモリの登録を開始するために、第２のＲＤＭＡホスト（不図示）が、第１のパケット「Ｐ１」を含むバッファ登録要求メッセージ１２６を、割り当てられるバッファ要求に書き込まれるデータを含む第２のパケット及び第３のパケット「Ｐ２」及び「Ｐ３」を含むＲＤＭＡデータトランスファーに関連するパケットストリーム１２８に含めて、送信する。一実施形態では、パケットＰ１のバッファアドレス情報は、アドレス、バッファが要求される長さ（ｌｅｎ）、及び、アクセス権を認証するために利用され、アダプタ側でアドレス変換を提供する「ｒｋｅｙ」と称されるキー値を含む。ＲＤＭＡデータトランスファーを開始する前に宛先バッファのメモリページが予め登録される明示的なメモリの登録の場合と異なり、暗示的なメモリの登録においては、宛先バッファの割り当て要求が行われるときに、要求されたバッファの特定された位置（アドレス）及びサイズ（ｌｅｎ）が、メモリ領域１２２の利用されている部分（used portion）から割り当てることができないとき（又は物理的なシステムメモリに存在しているとき）にはページフォルトが生じる可能性がある。この状況の一例を図１に示している。ここでは、バッファ１２４（要求されているバッファの割り当てに対応している）が、ページフォルトイベントに呼応して、二次ストレージ１１２からメモリ領域１２２にページインされている様子が示されている。
【００２５】
現行のＲＮＩＣの実装は、有線にバックプレッシャーを提供するために標準的なトランスポートフロー制御メカニズムと現行のリンクレベルタイマとを利用している。暗示的なメモリの登録に関連したページフォルトイベントが生じると、早計なパケットの再送信、混雑状態、及び、信頼できる接続の終了が生じる可能性がある。より詳しくは、図１が、標準的なトランスポートフロー制御メカニズムを利用する従来の手法において暗示的なメモリの登録を利用するＲＤＭＡデータトランスファーに関連したページフォルトの結果の一例を示す。以下のように進められる。
【００２６】
パケットＰ１を受信すると、要求されたバッファについて暗示的なメモリの登録が開始される。これによって、メモリページフォルトが生じ、パケットストリーム１２８のデータをバッファ１２４に書き込むことができるようになるまでに、二次ストレージの仮想メモリのページを物理的メモリにページインする必要がある。前述したように、メモリのページインには、データをメモリに書き込むことができない待ち時間が伴い、この待ち時間は、図１でページインタイム（Ｐｔｉｍｅ）として示されている。
【００２７】
よく利用されるタイプの標準的な信頼できるトランスポートプロトコルにおいては、パケット又はパケットシーケンスの受信は、ＡＣＫメッセージ等を利用して確認される。この手法においては、再送信のタイムアウト期間が終了してもＡＣＫメッセージを受信しないパケットに関して、ソース又は送信側は、該パケットを再送信する。  ＴＣＰ等の一部のプロトコルにおいては、再送信タイムアウト期間の長さは、最初、接続の往復時間の計算の関数から始められ（例えば、平均的な往復計算をいくらかの差分（delta）超える値に設定され、又は、往復時間計算を利用するアルゴリズムを利用して）、この後に、各後続する再送信についてのタイムアウト期間が二倍になる指数関数的なタイムアウトのバックオフシーケンスが続く。タイムアウトの終了に呼応して、パケットを再送信のために待ち行列に入れる。パケットのＡＣＫが送信側によって受信されるか、接続自身がタイムアウトしてリセットが要求されるまで、該パケットは数回再送信されてよい。
【００２８】
図１に更に示されているように、宛先バッファのためのメモリページのページインが完了するまで、第１のＡＣＫメッセージ１３０（パケットＰ１に対応している）が、ＲＮＩＣ１０８から送信されないので、Ｐｔｉｍｅのページフォルト遅延が生じる。このＰｔｉｍｅページフォルト遅延期間において、パケットＰ１又はパケットシーケンスＰ１、Ｐ２、及びＰ３は、数回再送信され（利用されているプロトコルに応じて、両方の場合が、灰色の背景を持つ「Ｐ１」と称されたパケットにより示されている）、次に、接続リセット（ＲＳＴ）が行われる。
【００２９】
前述した従来の手法は、無駄が多く、非効率的である。」パケットを再送信する必要がある場合はいつでも、ネットワーク帯域幅の対応する部分が失われる。加えて、パケットを再送信する場合にはいつでも、特にＰｔｉｍｅ期間が延長された場合に同じパケットを複数回再送信する場合には、送信側及び受信側のＲＮＩＣの一方又は両方が、更なるバッファリング及び／又はオペレーションを必要とする場合がある。
【００３０】
＜明示的なフロー制御とともに暗示的なメモリの登録を利用する場合＞
【００３１】
ここに記載する実施形態によって開示される教示及び原理においては、前述した欠点が、暗示的なメモリの登録のページフォルトに呼応して実装される明示的なフロー制御メカニズムにより解決され、Ｐｔｉｍｅ期間中のパケットの再送信を実質的に低減させたりなくしたりするよう構成されている。教示及び原理は更に、ＲＤＭＡのためのメモリページ割り当てをより精度高く行うことで、メモリ管理を向上させる。
【００３２】
一側面によると、トランスポート有線プロトコル（transport wire protocol）の一部として提供される新たなタイプのＡＣＫメッセージを利用する明示的なフロー制御メカニズムの利用により、より効率的なデータフローが促進される。暗示的なメモリの登録中に、ページングイベントが生じた場合に、この新たなＡＣＫ（受信確認（ＲＡＣＫ）と称される）が、対応するＲＤＭＡの暗示的なメモリの登録メッセージの受信を確認して、ページフォルト「遅延」イベントが生じていることを示すために利用される。確認機能の実行に加えて、ＲＡＣＫは、基礎となるファブリック又はネットワークプロトコルが定義する標準的なＡＣＫタイマタイムアウト値に基づき計算されたバックオフタイムを含む。この結果、遠隔ＲＮＩＣのトランスポートエンジンは、通常のＡＣＫが受信されるまで一時的に、接続のデータストリームのＡＣＫタイムアウトを調節する。バックオフがあまりに長い場合には、送信側のＲＮＩＣは中断を選択する。メモリページフォルトのページインが完了してページがピニングされると、通常のＡＣＫが送信され、遠隔ＲＮＩＣが、信頼できるデータチャネルのために設定された元のＡＣＫタイムアウトに基づいて送信を再開する。
【００３３】
ＲＡＣＫ確認を利用する例を図２に示す。ここでは、共通の参照番号をもつプラットフォーム１００に類似したコンポーネントをもつプラットフォーム１００ａが示されている。プラットフォーム１００と１００ａとの違いは、ハードウェアベースのＭＭＵ同期論理２０２を含む修正されたＲＮＩＣ２００、及び、ＭＭＵ同期ドライバ２０６を含むＲＮＩＣドライバ２０４を含む点である。
【００３４】
前の場合同様、パケットＰ１、Ｐ２、及びＰ３のストリームが、遠隔の送信側のＲＮＩＣ（不図示）から送信され、ＲＮＩＣ２００で受信されて、メモリページフォルトイベントが生じる。メモリフォルトの検出に呼応して、ＲＮＩＣ２００は、Ｐｔｉｍｅ値を含むＲＡＣＫメッセージを返す。Ｐｔｉｍｅ値は、バックオフタイムに対応しており、バックオフタイムにおいては、送信側のＲＮＩＣは、更なるパケットを送信しないように要求される（つまり、送信をバックオフするよう要求される）。フォルトが生じたメモリページがシステムメモリ１０４にページインされた後に（したがって、パケットＰ２及びＰ３にデータのためのバッファ空間を割り当てた後に）、ＲＮＩＣ２００は、従来のＡＣＫメッセージ２０８を返し、パケットＰ１、Ｐ２、及びＰ３が成功裏に受信されたことを示す。この時点で、「Ｐ４−データ」と称されたデータパケットが示すように、送信側のＲＮＩＣは、該パケットストリームに対応するパケットの送信を再開する。
【００３５】
明示的なフロー制御をサポートするべく、ＭＭＵ同期論理２０２及びＭＭＵ同期ドライバ２０６は、ＭＭＵ同期論理２０２がシステムＭＭＵ１１４と同期されて、ＲＤＭＡメモリの利用に関するメモリマッピングの現在の状態を識別するよう構成される（つまり、一部、メモリ領域１２０に対して割り当てられたページによって図示されている）。一実施形態では、ＭＭＵ同期論理２０２は、自身のローカルにキャッシュされたページテーブル１２５ａにビットをセットして、システムメモリ１０４のアクティブなＲＤＭＡアドレス空間のピニング状態を示す。波線の輪郭をもつボックス１２６によって示す、ローカルにキャッシュされたページテーブル１２５ａのこの部分は、ＲＤＭＡバッファの利用に関連してＭＭＵ１１４が維持している、対応するページテーブル情報と同期されたページテーブル情報に対応している。幾つかの実施形態では、ローカルにキャッシュされたページテーブル１２５ａは、更に、データストリームの動的制御のための、以前のページングイベントの最小／最大時間も含む。ＲＤＭＡ書き込み又は読み出しオペレーションが到着すると、ＲＮＩＣは、自身にキャッシュされているページテーブルエントリを利用して、ＲＤＭＡアドレスのマッピング状態をチェックする。マッピングされており、ページがピニングされている場合には、ＲＮＩＣは、即座に通常のＡＣＫに応答する。ピニングされていない場合には、ＲＮＩＣはＲＡＣＫメッセージを返し、ＭＭＵ１１４を介して、ページのピニングを要求する。ＲＡＣＫメッセージは、バックオフタイムを含んでもよく、バックオフタイムは、一実施形態では、前のページングイベントについてキャッシュされている最小／最大時間に基づいている。データフローが始まると、トランスファー寿命（the life of the transfers）の間は、ページがピニングされ続け、かつ、ページアウト又は移動がなされないことが想定される。ＲＤＭＡデータトランスファーのインオーダ要件があるために、この凍結されたマッピング状態は重要である。
【００３６】
図３は、プラットフォーム１００の変形例であるプラットフォーム１００ａのアーキテクチャを示しており、プラットフォーム１００ａにおいては、ＣＰＵ１０２とＩＯチップセット１０６とが、前述したＩＯチップセット１０６と同様のオペレーションを実行するよう構成されているＩＯインタフェースの集積セット１０６ａを含むＣＰＵ１０２ａで置き換えられている。一実施形態では、ＣＰＵ１０２ａは、システムオンチップ（ＳｏＣ）アーキテクチャを含み、ＳｏＣは、複数のプロセッサコア２１０と、ＳｏＣ上の様々なコンポーネント及び論理を通信可能に接続する複数のインターコネクト（コヒーレントなインターコネクト２１２がその一例である）とを含む。一般的に、ＩＯインタフェース１０６ａは、システムメモリ１０４、二次ストレージ１１２、及びＲＮＩＣ２００に対する直接又は別のコンポーネントを介したアクセスをサポートするよう構成されていてよい１又は複数のＩＯインタフェースを表している。図示されているように、一実施形態では、ＩＯインタフェースの少なくとも一部分が、ＰＣＩｅインタフェース等のＰＣＩインターコネクトをサポートするＰＣＩベースのインタフェースとして構成される。
【００３７】
幾つかの実施形態では、ＲＮＩＣ２００とシステムメモリ１０４との間のＤＭＡデータ通信には、ＣＰＵ１０２ａ上のメモリコントローラ２１６（システムメモリ１０４にアクセスするために利用される）とＩＯインタフェース１０６ａとの間の、更なる内部インタフェース及びインターコネクト２１４が関与してよい。それぞれの実施形態において、この内部インターコネクトは、Ｉｎｔｅｌ（登録商標）ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（登録商標）（ＱＰＩ）又はＩｎｔｅ（登録商標）Ｋｅｉｚｅｒ  Ｔｅｃｈｎｏｌｏｇｙ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（登録商標）（ＫＴＩ）を含む。一実施形態において、コア２１０とメモリコントローラ２１６とは、ＱＰＩ又はＫＴＩインターコネクト有線を利用し、ＱＰＩ又はＫＴＩプロトコルを利用するリングインターコネクトに連結されており、ＩＯインタフェース１０６ａのＩＯインタフェースは、ＰＣＩｅメモリ書き込み及び読み出し要求パケットを受信するように構成されており、これらを、ＱＰＩ又はＫＴＩメモリ書き込みトランザクションとメモリ読み出しトランザクションとに変換する。これらＤＭＡオペレーションのためのメッセージ／書き込みパケットは、ＣＰＵ１０２ａは通過するが、コア２１０をバイパスして、プラットフォーム１００ａ上で実行されるオペレーティングシステムの利用を伴わない。
【００３８】
図４の４００は、ソースＲＮＩＣと宛先ＲＮＩＣとが、前述した明示的なフロー制御メカニズムの側面を利用してＲＤＭＡデータトランスファー中に実行する様々なオペレーション及び論理を示す方法フロー及び処理図である。ソースＲＮＩＣに対するプロセスは、次に到着するＲＤＭＡデータトランスファーについてバッファを割り当てる必要があるかを判断するブロック４０２から始まる。ブロック４０４で、バッファ割り当てが、データトランスファーの開始に対応しているのか、データトランスファー中に生じた、動的な更なるバッファ割り当てに関したものなのか、の判断を行う。
【００３９】
バッファ割り当てが、トランスファーの開始に対応している場合には、ソースＲＮＩＣは、ブロック４０６で宛先バッファ割り当て要求を送信し、ブロック４０８でパケットのストリーミングを開始する。これらオペレーションの両方に対応しているパケットが宛先ＲＮＩＣの入力バッファ４０９で受信され、パケット処理論理及びＲＤＭＡ処理論理を利用して処理される（入力バッファ４０９に示す処理ブロックによって示すように）。
【００４０】
ブロック４１０に示すように、宛先ＲＮＩＣは、宛先バッファ要求を受信して、バッファについて利用する１又は複数のメモリページの登録を開始する。メモリ登録オペレーションに関連して、前述したように、対応するページがページアウトされている場合にはページフォルトが生じる。従って、決定ブロック４１２で、ページフォルトが生じるかを判断する。ページフォルトが生じる場合には、論理はブロック４１４に進み、ここでＰｔｉｍｅバックオフ計算を実行する。前述したように、一実施形態では、この計算は、前のページフォルトイベント、例えば、前のページフォルトイベントの最小及び最大期間に基づいて行われる。キャッシュされたページテーブル１２５ａに示すように、各メモリページについて最小値及び最大値が存在していてよい。任意で、最小値及び最大値並びに／又は他の統計データが、メモリページ群又はメモリ領域全体について維持されてもよい。Ｐｔｉｍｅ計算は、更に、リンク往復時間、又は、これを基に得られた値の考慮を含んでもよい。
【００４１】
Ｐｔｉｍｅが計算されると、ブロック４１６で、Ｐｔｉｍｅバックオフを含むＲＡＣＫ確認メッセージが、宛先ＲＮＩＣからソースＲＮＩＣに送信される。ＲＡＣＫメッセージの受信に呼応して、ソースＲＮＩＣは、ブロック４１８に示すように、バックオフタイムをセットして、時間切れになるまで更なるパケットの送信を保留する。時間切れになると、ブロック４２２で、ソースＲＮＩＣから宛先ＲＮＩＣへのパケットのストリーミングを再開する。
【００４２】
Ｐｔｉｍｅ期間においては、宛先バッファに割り当てられた１又は複数のメモリページが、システムメモリにページインされ、そして、登録及びピニングが行われる（ブロック４２０参照）。この段階では、宛先バッファは、ブロック４２４におけるバッファリングのためのＤＭＡ書き込みデータが示すようなデータの受信準備ができている。ブロック４２２でストリーミングされたパケットの処理に加えて、ブロック４０６で前にストリーミングされ、入力バッファ４０９に一時的にバッファリングされているパケットも処理される。ＲＤＭＡ仕様においては、パケットはインオーダでストリーミングされ、ストリーミングされた順序で書き込まれる。必要であれば、ソースＲＮＩＣは、ブロック４０６で送信されたパケットのうち、宛先ＲＮＩＣがドロップしたパケットを再送する必要がある場合がある。
【００４３】
ソースＲＮＩＣ及び宛先ＲＮＩＣは、更に、同じデータトランスファー（つまり同じワーク要求）に対応するバッファの動的割り当て（例えばパイプライン法を利用する）をサポートするよう構成されてもよい。一実施形態では、バッファ（又は更なるバッファ空間）の要求を、バッファの必要が予測される前に行うこともでき、例えばページフォルトイベントによってそのバッファのためのメモリページ（１又は複数）の登録が遅れた場合であっても、該メモリページが、必要となる前に既に登録及びピニングされているようにする。こうすることでデータトランスファーが途切れない。
【００４４】
この機能をサポートするオペレーション及び論理が図４に示されており、ここでは、次のバッファを割り当てるかの判断を行う決定ブロック４２６から始められる。判断結果がＹＥＳの場合は、論理はブロック４０２に返り、バッファ割り当てプロセスを開始する。しかしこの場合、バッファの割り当てが、データトランスファーの開始に対応していない場合、したがって、決定ブロック４０４での判断結果がＮＯである場合には、論理はブロック４２８に進み、ここでバッファを予め割り当てる要求を宛先ＲＮＩＣに送信する。一実施形態では、バッファの割り当て要求又はバッファを予め割り当てる要求は、同種（one in the same）であってよく、つまり、宛先ＲＮＩＣの観点からは、これらが同一に見えてよい。別の実施形態では、バッファを予め割り当てよと要求する要求は、フラグ等でマークされることで、宛先ＲＮＩＣに、それがどのタイプのバッファ割り当て要求であるかを知らせる。したがって一実施形態では、宛先ＲＮＩＣは、ページフォルトイベントの検出に呼応してＲＡＣＫメッセージを返さない、というのも、バッファのピニング状態への登録が計画されるまでは（ページフォルトが生じると仮定して）、ソースＲＮＩＣは、該バッファに格納すべき（割り当て用に）パケットのストリーミングを計画しないからである。任意で、宛先ＲＮＩＣは、ソースＲＮＩＣが単に無視するＲＡＣＫを返してもよい。推定されるページフォルト遅延に対応する期間の間、ブロック４３０に示すように、ソースＲＮＩＣは、予め割り当てられたバッファに格納すべきデータの部分のストリーミングを開始しない。バッファを予め割り当てるタイミングは、データトランスファーの連続したパケットストリームが途切れず続けられるようなものとすると好適である。同時に、ＲＤＭＡバッファリングに利用するメモリ空間の利用の効率化のために、バッファを予め割り当てる場合には、必要となる時点より前過ぎないことが望ましい。
【００４５】
前述した実施形態に加えて、データフローを最適化してバックオフ期間の利用を制限するために他の方法を実行してもよい。例えば、ＲＮＩＣアダプタが、順序が維持され、後のピニングが到着するデータより前にスケジュールされている（前述したパイプライニングの例と同様）、という前提のもとで、全領域ではなくＲＤＭＡメモリ領域のセグメントへのピニングを要求することもできる。別のオプションとして、プロトコルが、暗示的なメモリの登録の利用を示すセットアップ中に、信頼できる接続属性を提供することもできる。これにより、ソースＲＮＩＣは、新たなＲＤＭＡトランスファーオペレーションを開始するときには、最初のＡＣＫを受信するまで、又は、ＲＡＣＫ  Ｐｔｉｍｅが終了するまで、データストリームの開始を遅延させるよう伝えることができる。
【００４６】
ＲＮＩＣ５００のシステムアーキテクチャの一例を図５に示す。ＲＮＩＣ５００は、ネットワークプロセッサ／コントローラ５０４、並びに、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）５０６及びＳＲＡＭ５０８を含むメモリが搭載されたＮＩＣシステムボード５０２を含む。一実施形態では、ＳＲＡＭ５０８が、プロセッサ／コントローラ５０４上に集積されている。様々な実施形態では、ＮＩＣシステムボード５０２が、Ｅｔｈｅｒｎｅｔ（登録商標）コントローラカード、子ボード（daughter board）、マルチチップモジュールボード又は基板を表し、又は、コンピュータサーバのためのメインボード又はマザーボード等のコンピュータシステムボードの一部であってもよい。プロセッサ／コントローラ５０４は、Ｅｔｈｅｒｎｅｔ（登録商標）処理及び／又は制御ユニットを表し、Ｅｔｈｅｒｎｅｔ（登録商標）コントローラチップ又はネットワークプロセッサユニット（ＮＰＵ）を含む様々な形態で具現化されてよい。
【００４７】
例示されている実施形態では、プロセッサ／コントローラ５０４が、命令ストア５１０、プロセッサエンジンのクラスタ５１２、ＳＲＡＭコントローラ５１４、ＤＲＡＭコントローラ５１６、書き込みＤＭＡブロック５１８、読み出しＤＭＡブロック５２０、ＰＣＩｅインタフェース５２２、スクラッチメモリ５２４、ハッシュユニット５２６、直列化回路／非直列化回路（ＳｅｒＤｅｓ）５２８及び５３０、並びに、物理層（ＰＨＹ）インタフェース５３２及び５３４を含む。コンポーネントそれぞれは、内部インターコネクトクラウド５３５として集合的に示されている適用可能なインターコネクト構造及び論理によって１又は複数の他のコンポーネントにインターコネクトされている。
【００４８】
命令ストア５１０は、パケット識別／分類命令５３６、ＲＤＭＡメイン論理５３８、ＭＭＵ同期論理２０２、及びパケットアセンブル論理５４０を含む、プロセッサエンジンクラスタ５１２によって実行される様々な命令を含む。プロセッサエンジンクラスタ５１２は、複数のマイクロエンジン５４２を含み、複数のマイクロエンジン５４２はそれぞれが、ローカル制御ストア５４４に連結されている。一実施形態では、図５に示すように、パケット識別及び分類等の様々なオペレーションが、パイプライン化されたアーキテクチャを利用して実行され、ここでは各マイクロエンジンが、パイプラインにおける関連するオペレーションを実行する。又は、プロセッサエンジンクラスタ５１２が、中央処理装置又はコントローラの１又は複数のプロセッサコアを表している。また別のオプションとして、プロセッサエンジン５１２と命令ストア５１０との組み合わせが、エンベデッド論理として、例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）等によって実装されてもよい。
【００４９】
一実施形態では、命令ストア５１０は、図５に示すように、オンチップストアとして実装されている。任意で、命令ストア５１０内に図示されている命令の一部又は全てをＳＲＡＭ５０８に格納して（オフチップの場合）、インタフェース５４６を介してＳＲＡＭコントローラ５１４を利用してアクセスしてもよい。ＳＲＡＭ５０８は、更に、パケット処理オペレーションに関して選択されたデータ及び／又は命令、並びに、キャッシュページテーブルエントリを格納するために利用されてもよい。
【００５０】
ＤＲＡＭ５０６は、１又は複数の入力バッファ４０９及び１又は複数の出力バッファ５４８を実装するために利用され、インタフェース５５０を介してＤＲＡＭコントローラ５１６を利用してアクセスされる。書き込みＤＭＡブロック５１８及び読み出しＤＭＡブロック５２０は、それぞれ、ここに記載される実施形態に従ってＤＭＡ書き込み及び読み出しオペレーションをサポートするよう構成される。例示された実施形態においては、ＤＲＡＭ５０６とプラットフォームホスト回路との間のＤＭＡ通信が、ＰＣＩｅインターコネクト又はＰＣＩｅ拡張スロット５５４に連結されたＰＣＩｅリンク５５２を介してＰＣＩｅインタフェース５２２によって促され、ＰＣＩｅプロトコルを利用したホスト５５６のためのＤＲＡＭ５０６とシステムメモリとの間のＤＭＡ書き込み及び読み出しトランスファーが可能となる。
【００５１】
スクラッチメモリ５２４及びハッシュユニット５２６は、パケット処理に関連したスクラッチメモリとハッシュ演算とを促すためにＮＩＣが利用するコンポーネントの例を示したものである。例えば、ハッシュ演算は、フローＩＤを導出して、パケット識別を行うために実装されてよい。
【００５２】
ＰＨＹ５３２及び５３４は、ＲＮＩＣの物理層オペレーションを促し、ＲＮＩＣ論理及びコンポーネントが利用するデジタルドメインと、電気、光、又は有線信号によってデータを送信するために利用されるアナログドメインとの間のブリッジとして動作する。例えば、図５の例示された実施形態では、ＰＨＹ５３２及び５３４のそれぞれが、Ｃａｔ５ｅ又はＣａｔ６ケーブル等の有線ケーブルを介して電気信号を送信するよう構成されたＩ／Ｏポートの対に連結されている。光信号及び無線信号の実施形態は、光信号及び無線信号（不図示）を介した接続を促すために更なる回路及びインタフェースを利用してよいだろう。ＰＨＹオペレーションとの関連では、ＳｅｒＤｅｓ５２８及び５３０が、出力パケットストリームを直列化して、入力パケットストリームを非直列化するために利用される。
【００５３】
命令ストア５１０に示される命令に加えて、更なるオペレーションを促すためにプロセッサエンジン５１２又は他の処理手段の実行により他の命令が実装されてもよい。例えば一実施形態では、ＮＩＣ５００が、ＲＮＩＣ自身の上にＴＣＰ／ＩＰスタックを実装するよう構成されている。ＲＮＩＣ５００も、オペレーティングシステムＴＣＰ設備からオフロードされるようにＴＣＰオペレーションを促すことで、パケットが外へ送信されると、ＲＮＩＣ５００がＡＣＫメッセージを処理して、ＡＣＫメッセージが適用可能なＴＣＰタイムアウト期間中に受信されなかった場合にパケットを再送する責任を負うように構成されてよい。
【００５４】
ＲＤＭＡメイン論理５３８は、ＲＤＭＡデータトランスファーオペレーションを促す命令及び論理を含み、これらには、ここで説明するＲＤＭＡデータトランスファープロセスに対する補強（augmentation）に加えて、従来のＲＤＭＡオペレーションが含まれてよい。ＭＭＵ同期論理２０２は、ここで説明するＭＭＹ同期論理及びオペレーションを実装するよう構成される。
【００５５】
ＲＤＭＡオペレーションのサポートに加えて、ＲＮＩＣは、パケットの転送（forwarding）に関するオペレーションを含む従来のＮＩＣオペレーションを実行するよう構成されてよい。したがって、ＲＮＩＣ５００は、ローカルに又はシステムメモリ内のメモリマップドＩＯ（ＭＭＩＯ）アドレス空間を利用してフィルタ及び規則を転送することを含む、パケットの識別及び分類を促すためのデータを格納するよう構成されてよい。ローカルに格納されている場合、このデータは、ＤＲＡＭ５０６又はＳＲＡＭ５０８に格納されていてよい。ＭＭＩＯアドレス空間に格納されているデータは、読み出しＤＭＡオペレーションによってＲＮＩＣ５００によりアクセスされてよい。一般的に、ＭＭＩＯアドレス空間のマッピングの設定は、ＲＮＩＣデバイスドライバがオペレーティングシステムと協働することにより促されてよい。ＲＮＩＣデバイスドライバは、更に、命令ストア５１０内の命令を、オペレーティングシステムによって更新するよう構成されてよい。任意で、命令ストア内の命令は、プロセッサ／コントローラ５０４の上に集積されていてもよいし、又は、ＮＩＣシステムボード５０２（不図示）に搭載されていてもよいフラッシュメモリ等の不揮発性メモリに格納されたファームウェア命令を含んでよい。
【００５６】
一般的に、ここに開示する実施形態の側面は、ＲＤＭＡ実装及びフロー制御をサポートする現行又は将来のネットワークプロトコルに適用されてよい。これらには、ＴＣＰ、又は、Ｅｔｈｅｒｎｅｔ（登録商標）、ｉＷＡＲＰ、及びＩｎｆｉｎｉｂａｎｄを介した信頼できる他のトランスポートプロトコルが含まれるが、これらに限定はされない。更に、有線、光、及び無線送信を含む、通信の物理的送信を促すために利用される任意の現行の物理トランスポート層が利用されてよい。
【００５７】
幾つかの実施形態が特定の実装例を参照して記載されたが、実施形態によっては他の実装例も可能である。加えて、エレメント、又は、図面に示した、及び／もしくは、ここで記載した他の特徴の配置及び／もしくは順序は、例示され記載された特定の方法で構成される必要は必ずしもない。他の多くの配置も実施形態によっては可能である。
【００５８】
図に示す各システムでは、幾つかの場合のエレメントが、それぞれ、表すエレメント同士が異なる、及び／又は類似していることを示すべく、同じ参照番号を付されても、異なる参照番号を付されてもよい。しかし、エレメントは、ここで示す、又は記載するシステムの一部又は全てと異なる実装例及びワークを有するに足る柔軟性を有してよい。図面に示す様々なエレメントが同じであっても異なっていてもよい。どれが第１のエレメントと称され、どれが第２のエレメントと称されるかは任意である。
【００５９】
説明及び請求項において、"連結（ｃｏｕｐｌｅｄ）"及び"接続（ｃｏｎｎｅｃｔｅｄ）"という用語、並びにこれらの派生語が使用されることがある。これらの用語は、同義語として使用されているのではないことを理解されたい。特定の実施形態において、"接続"は、２つ又はそれ以上のエレメントが直接物理的に又は電気的に互いに接触していることを指すのに使用されてよい。一方、"連結"は、２つ又はそれ以上のエレメントが直接物理的又は電気的接触状態にあることを示す場合がある。しかし"連結"は、２つ又はそれ以上のエレメントが、互いに直接接触はしていないが、それでも互いに協動又は相互作用することを指すのに使用されてもよい。
【００６０】
ここでいうアルゴリズムは、及び一般的にアルゴリズムは、所望の結果につながる一連の首尾一貫した動作又はオペレーションとみなされる。これらには、物理量の物理的操作が含まれる。通常は、必ずしもではないが、これらの量は、格納、トランスファー、組み合わせ、比較、又は操作が可能な電気信号又は磁気信号の形態をとる。主に慣用されているという理由から、これらの信号をビット、値、エレメント／要素（element）、シンボル、文字、期間（terms）、数等と称すると都合がよい場合があることが証明されている。しかし、これら及び類似した用語の全てが、適切な物理量と関連付られるべきものであり、これらの量に付された便利な名前に過ぎないことを理解されたい。
【００６１】
実施形態は発明の１つの実装例又は例である。明細書における"ある実施形態"、"一実施形態"、"幾つかの実施形態"、又は"他の実施形態"といった言及は、実施形態と関連させて記載されている特定の特徴、構造又は特性が、少なくとも幾つかの実施形態に含まれることを意味しているが、必ずしも本発明の全ての実施形態に含まれると意味しているわけではない。"ある実施形態"、"一実施形態"、又は"幾つかの実施形態"が幾つか記載されていても、必ずしもこれらが全て同じ実施形態を言及しているわけではない。 
【００６２】
ここに記載され例示されているコンポーネント、特徴、構造、特性等の全てが特定の実施形態（１又は複数）に含まれる必要はない。明細書が、例えば、コンポーネント、特徴、構造、特性が、「してよい(may)」「するかもしれない(might)」「することができる(can)」「することができるかもしれない、できた（could）」と記載している場合には、この特定のコンポーネント、特徴、構造、特性は、必ずしも含まれる必要はない。明細書又は請求項で、エレメント（"a" or "an" element）と言及されている場合には、このエレメントが１つだけあることを意味しているわけではない。明細書又は請求項で、「更なる」エレメント（"an additional" element）と言及されている場合には、更なるエレメントが１を超える数存在する場合を排除しない。
【００６３】
ここにおいて本文及び図面に示すように、幾つかの実施形態の側面は、ＲＤＭＡ関連のオペレーションを促すために実装されるいずれかの論理を介して、１又は複数の集積されたコンポーネント（例えば半導体チップ）を含むＲＮＩＣに実装されてよい。更に、本記載の実施形態は、半導体チップ内のみならず、機械可読媒体内に実装されてよい。例えば、前述した設計は、半導体素子を設計するために利用される設計ツールに関する機械可読媒体上に格納されてよい、及び／又は、機械可読媒体内に埋め込まれてよい。例としては、ＶＨＳＩＣハードウェア記述言語（ＶＨＤＬ）、Ｖｅｒｉｌｏｇ言語又はＳＰＩＣＥ言語でフォーマットされたネットリストが含まれる。幾つかのネットリストの例には、振る舞いレベルのネットリスト、登録トランスファーレベル（ＲＴＬ）のネットリスト、ゲートレベルのネットリスト、及び、トランジスタレベルのネットリストが含まれる。機械可読媒体は更に、ＧＤＳ−ＩＩファイル等のレイアウト情報を有する媒体を含む。更に、半導体チップ設計のためのネットリストファイル又はその他の機械可読媒体は、前述した教示の方法を実行するべくシミュレーション環境で利用されてもよい。
【００６４】
加えて、ここに記載するいくつかの実施形態の側面は、これらに限定はされないがＲＮＩＣドライバ、ＭＭＵ同期ドライバ、及び、ＲＮＩＣ上に実装されたファームウエアを含む、対応するソフトウェア及び／又はファームウェアコンポーネント及びアプリケーションにより促されてよい。ゆえに、本発明の実施形態は、ソフトウェアプログラム、ソフトウェアモジュール、ファームウェア、及び／又は何らかの形態の処理コア上に実行される分散ソフトウェア（例えばコンピュータのＣＰＵ、マルチコアプロセッサの１又は複数のコア）、プロセッサ又はコア上で実行されている又は機械可読媒体上で又はその内部で実装又は実現されている仮想マシンとして利用されてよい、又はこれらをサポートしてよい。機械可読媒体は、機械（例えばコンピュータ）が可読な形態の情報を格納又は送信する任意のメカニズムを含む。例えば、機械可読媒体は、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光記憶媒体、及びフラッシュメモリデバイス等を含んでよい。
【００６５】
本発明の例示した実施形態の前述した記載は、要約に記載したことを含み、排他的なことを意図したり、本発明を開示した形態そのものに限定したりする意向がない。本発明の特定の実施形態及び例をここに例示目的で説明したが、様々な均等的な修正が本発明の範囲内で可能であることは、当業者が理解するところである。
【００６６】
前述した詳細な説明に鑑みて本発明にこれら修正を加えることができる。以下の請求項で利用される用語は、本発明を明細書及び図面で開示した特定の実施形態に限定するものとして解釈されるべきではない。むしろ、本発明の範囲は、以下の請求項によってその全体が決定され、以下の請求項は、請求項の解釈に関する確立された教義に従って解釈されるべきである。
【図１】
0005902834.tif 000002
【図２】
0005902834.tif 000003
【図３】
0005902834.tif 000004
【図４】
0005902834.tif 000005
【図５】
0005902834.tif 000006