(57)【要約】【課題】大量のデータを処理するコンピュータシステムのコストを減らし、パフォーマンスを高めることのできるホスト及びストレージサービスの動作方法並びにＮＶＭｅＳＳＤを提供する。【解決手段】本発明によるホストは、ホストプロセッサと、メモリと、ホストプロセッサ上で実行されるオペレーティングシステムと、ホストプロセッサ上のオペレーティングシステム下で実行され、リモートプロシージャコール（ＲＰＣ）を含むアプリケーションと、不揮発性メモリエクスプレス（ＮＶＭｅ）ソリッドステートドライブ（ＳＳＤ）へのＰＣＩｅトンネルと、アプリケーションからＲＰＣをキャプチャし、ＲＰＣの結果をホストプロセッサからのように、アプリケーションに伝達するオペレーティングシステム内のＲＰＣキャプチャモジュールと、を備え、不揮発性メモリエクスプレスソリッドステートドライブは、ＲＰＣを実行して結果を生成する。【選択図】  図３
2020064634.tif 000002
【特許請求の範囲】
【請求項１】
ホストであって、
ホストプロセッサと、
メモリと、
前記ホストプロセッサ上で実行されるオペレーティングシステムと、
前記ホストプロセッサ上の前記オペレーティングシステム下で実行され、リモートプロシージャコール（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ：ＲＰＣ）を含むアプリケーションと、
不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）へのＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルと、
前記アプリケーションから前記ＲＰＣをキャプチャ（ｃａｐｔｕｒｅ）し、前記ＲＰＣの結果を前記ホストプロセッサからのように、前記アプリケーションに伝達する前記オペレーティングシステム内のＲＰＣキャプチャモジュールと、を備え、
前記不揮発性メモリエクスプレスソリッドステートドライブ（以下、ＮＶＭｅＳＳＤと記す）は、前記ＲＰＣを実行して前記結果を生成することを特徴とするホスト。
【請求項２】
前記ＲＰＣキャプチャモジュールは、ＭｉｔＭ（Ｍａｎ  ｉｎ  ｔｈｅ  Ｍｉｄｄｌｅ）シム（ｓｈｉｍ）を含むことを特徴とする請求項１に記載のホスト。
【請求項３】
前記ＲＰＣキャプチャモジュールは、前記アプリケーションから前記ＲＰＣをキャプチャする第１システムコールと、
前記ＰＣＩｅトンネルを介して前記ＮＶＭｅＳＳＤから前記ＲＰＣの前記結果を受信する第２システムコールと、を含むことを特徴とする請求項１に記載のホスト。
【請求項４】
前記ＲＰＣキャプチャモジュールは、イーサネット（登録商標）フレームを検査して、前記イーサネット（登録商標）フレームが前記ＲＰＣを含むか否かを判断するイーサネット（登録商標）フレーム検査器を含むことを特徴とする請求項１に記載のホスト。
【請求項５】
前記ＲＰＣキャプチャモジュールから前記ＲＰＣを受信するローカルトンネルエージェントをさらに備え、
前記ローカルトンネルエージェントは、前記ＲＰＣをメッセージにラップ（ｗｒａｐ）するメッセージラッパーと、
前記メッセージをリモートトンネルエージェントバッファに収納（ｐｌａｃｅ）するメッセージ伝送器と、を含むことを特徴とする請求項１に記載のホスト。
【請求項６】
前記ローカルトンネルエージェントは、前記リモートトンネルエージェントバッファが前記メッセージのための容量を有するか否かを判断するリモートトンネルエージェントバッファ容量チェックをさらに含むことを特徴とする請求項５に記載のホスト。
【請求項７】
前記ＲＰＣの前記結果を前記ＲＰＣキャプチャモジュールに伝達するローカルトンネルエージェントをさらに備え、
前記ＲＰＣキャプチャモジュールは、ローカルトンネルエージェントバッファから前記ＲＰＣの前記結果を含むメッセージを読み出すメッセージ受信器と、
前記メッセージから前記ＲＰＣの前記結果をアンラップ（ｕｎｗｒａｐ）するメッセージアンラッパーと、を含むことを特徴とする請求項１に記載のホスト。
【請求項８】
前記ＮＶＭｅＳＳＤをさらに備え、
前記ＮＶＭｅＳＳＤは、前記ホストへのインターフェースと、
データのためのストレージと、
前記ホストから前記ＰＣＩｅトンネルを経て前記インターフェースを介して前記ＲＰＣを含む第１メッセージを受信するメッセージ受信器と、
前記第１メッセージから前記ＲＰＣをアンラップするメッセージアンラッパーと、
前記ＲＰＣを実行して前記ＲＰＣの前記結果を生成するイン−ストレージ（ｉｎ−ｓｔａｒａｇｅ）プロセッサと、
前記ＲＰＣの前記結果を第２メッセージにラップするメッセージラッパーと、
前記第２メッセージを、前記インターフェースを介して前記ＰＣＩｅトンネルを経て前記ホストに伝送するメッセージ伝送器と、を含むことを特徴とする請求項１に記載のホスト。
【請求項９】
不揮発性メモリエクスプレスソリッドステートドライブ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ  Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ；以下、ＮＶＭｅＳＳＤと記す）であって、
ホストへのインターフェースと、
データのためのストレージと、
前記ホストからＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルを経て前記インターフェースを介してリモートプロシージャコール（ｒｅｍｏｔｅ  ｐｒｏｃｅｄｕｒｅ  ｃａｌｌ：ＲＰＣ）を含む第１メッセージを受信するメッセージ受信器と、
前記第１メッセージから前記ＲＰＣをアンラップするメッセージアンラッパーと、
前記ＲＰＣを実行して前記ＲＰＣの結果を生成するイン−ストレージプロセッサと、
前記ＲＰＣの前記結果を第２メッセージにラップするメッセージラッパーと、
前記第２メッセージを、前記インターフェースを介し、前記ＰＣＩｅトンネルを経て前記ホストに伝送するメッセージ伝送器と、を備えることを特徴とするＮＶＭｅＳＳＤ。
【請求項１０】
ローカルトンネルエージェントバッファから前記第１メッセージを読み出し、前記第２メッセージをリモートトンネルエージェントバッファに書き込むローカルトンネルエージェントをさらに備えることを特徴とする請求項９に記載のＮＶＭｅＳＳＤ。
【請求項１１】
前記ローカルトンネルエージェントは、前記第１メッセージを有する前記ローカルトンネルエージェントバッファの少なくとも一部分に基づいて、前記ローカルトンネルエージェントバッファから前記第１メッセージを読み出すことを特徴とする請求項１０に記載のＮＶＭｅＳＳＤ。
【請求項１２】
前記ローカルトンネルエージェントは、前記リモートトンネルエージェントバッファが前記第２メッセージのための容量を有する否かを判断するリモートトンネルエージェントバッファ容量チェックをさらに含むことを特徴とする請求項１０に記載のＮＶＭｅＳＳＤ。
【請求項１３】
ストレージサービスの動作方法であって、
アプリケーションからホストプロセッサへのリモートプロシージャコール（ｒｅｍｏｔｅ  ｐｒｏｃｅｄｕｒｅ  ｃａｌｌ：ＲＰＣ）をインターセプトする段階と、
ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルを介して不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）に前記ＲＰＣを伝達する段階と、
前記ＰＣＩｅトンネルを介して前記不揮発性メモリエクスプレスソリッドステートドライブ（以下、ＮＶＭｅＳＳＤと記す）から前記ＲＰＣの結果を受信する段階と、
前記ＲＰＣの前記結果を前記ホストプロセッサからのように、前記アプリケーションに伝達する段階と、を備えることを特徴とするストレージサービスの動作方法。
【請求項１４】
前記インターセプトする段階は、ＲＰＣクライアントによって伝送された前記ＲＰＣをＭｉｔＭ（Ｍａｎ  ｉｎ  ｔｈｅ  Ｍｉｄｄｌｅ）シム（ｓｈｉｍ）を用いてキャプチャする段階を含み、
前記ＲＰＣの前記結果を受信する段階は、前記ＮＶＭｅＳＳＤから前記ＰＣＩｅトンネルを介して前記ＲＰＣの前記結果を前記ＭｉｔＭシム（ｓｈｉｍ）から受信する段階を含むことを特徴とする請求項１３に記載のストレージサービスの動作方法。
【請求項１５】
前記インターセプトする段階は、前記アプリケーションから前記ＲＰＣを第１システムコールを用いてキャプチャする段階を含み、
前記ＲＰＣの前記結果を受信する段階は、前記ＮＶＭｅＳＳＤから前記ＲＰＣの前記結果を第２システムコールを用いて受信する段階を含むことを特徴とする請求項１３に記載のストレージサービスの動作方法。
【請求項１６】
前記インターセプトする段階は、イーサネット（登録商標）フレームを検査して、前記イーサネット（登録商標）フレームがＲＰＣを含むか否かを判断する段階と、
前記ＲＰＣを含む前記イーサネット（登録商標）フレームの少なくとも一部分に基づいて、前記イーサネット（登録商標）フレームをキャプチャする段階と、を含み、
前記ＲＰＣの前記結果を受信する段階は、前記ＮＶＭｅＳＳＤから前記ＲＰＣの前記結果を第２イーサネット（登録商標）フレームで受信する段階を含むことを特徴とする請求項１３に記載のストレージサービスの動作方法。
【請求項１７】
前記ＲＰＣを伝達する段階は、ローカルトンネルエージェントによって前記ＲＰＣをメッセージにラップする段階と、
前記ローカルトンネルエージェントによって前記メッセージをリモートトンネルエージェントバッファに収納（ｐｌａｃｅ）する段階と、を含むことを特徴とする請求項１３に記載のストレージサービスの動作方法。
【請求項１８】
前記メッセージをリモートトンネルエージェントバッファに収納する段階は、前記メッセージのための容量を有する前記リモートトンネルエージェントバッファの少なくとも一部分に基づいて、前記ローカルトンネルエージェントによって前記メッセージを前記リモートトンネルエージェントバッファに収納する段階を含むことを特徴とする請求項１７に記載のストレージサービスの動作方法。
【請求項１９】
前記ＲＰＣの前記結果を受信する段階は、ローカルトンネルエージェントによってローカルトンネルエージェントバッファからメッセージを取得する（ｒｅｔｒｉｅｖｉｎｇ）段階と、
前記ローカルトンネルエージェントによって前記メッセージから前記ＲＰＣの前記結果をアンラップする段階と、を含むことを特徴とする請求項１３に記載のストレージサービスの動作方法。
【請求項２０】
前記メッセージを取得する段階は、前記メッセージを有する前記ローカルトンネルエージェントバッファの少なくとも一部分に基づいて、前記ローカルトンネルエージェントによって前記ローカルトンネルエージェントバッファから前記メッセージを取得する段階を含むことを特徴とする請求項１９に記載のストレージサービスの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムに関し、特に大量のデータを処理するコンピュータシステムのコストを減らし、パフォーマンスを高めることのできるホスト及びストレージサービスの動作方法並びにＮＶＭｅＳＳＤに関する。
【背景技術】
【０００２】
現在、情報技術（ＩＴ）の基盤施設（ｉｎｆｒａｓｔｒｕｃｔｕｒｅｓ）において、非常に大量のデータが多様な装置やプロセスによって生成されている。
このようなデータのジェネレータに対するくつかの例示は、スマートマシン、自律車両、ソーシャルネットワーク、並びにモノのインターネット（Ｉｎｔｅｒｎｅｔ−ｏｆ−Ｔｈｉｎｇｓ：ＩｏＴ）装置である。
新しい人工知能（ＡＩ）及びマシンラーニング（ＭＬ）アルゴリズムが開発され、収集されたデータを効率的に分析し、そしてこれを使用して、アプリケーションの非常に大きな効率及び生産性を達成している。
このようなシステムにおいて、最も重大なのは、データを処理し、分析することである。
【０００３】
従来のシステムアーキテクチャにおいて、データは永続性ストレージ（ｐｅｒｓｉｓｔｅｎｔ  ｓｔｏｒａｇｅ）から高性能ネットワークを通してストレージに接続された高性能の高価なサーバにフェッチ（ｆｅｔｃｈ）される。
処理及び分析のために、そのような大量のローデータ（ｒａｗ  ｄａｔａ）を中央処理装置（ＣＰＵ）に移すことは、消費されるエネルギーの量や展開される計算リソースとネットワークリソースの観点から高いコストがかかる。
これは、ネットワーク帯域幅、ＣＰＵサイクル及びＣＰＵメモリのようなリソースに負担を増加させる。
処理のために大量のローデータをサーバに移すことは、またアプリケーションが経験するレイテンシーを増加させる。
アプリケーションは、処理が遂行され、そして決定が下される前に、まずデータがサーバにフェッチされることを待たなければならない。
このような追加のリソース要求は、高い資本支出及び運営コストを誘発するという問題がある。
【０００４】
したがって、大量のデータを処理することに関連付けられたコンピュータシステムのコストを減らし、性能を向上させる方法についてのさらなる開発が課題となっている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第７１７１４９４号明細書
【特許文献２】米国特許第７５９６６３４号明細書
【特許文献３】米国特許出願公開第２０１６０１９７８５０号明細書
【特許文献４】米国特許出願公開第２０１８０２４６８３３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は上記従来のコンピュータシステムにおける課題に鑑みてなされたものであって、本発明の目的は、大量のデータを処理するコンピュータシステムのコストを減らし、パフォーマンスを高めることのできるホスト及びストレージサービスの動作方法並びにＮＶＭｅＳＳＤを提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するためになされた本発明によるホストは、ホストプロセッサと、メモリと、前記ホストプロセッサ上で実行されるオペレーティングシステムと、前記ホストプロセッサ上の前記オペレーティングシステム下で実行され、リモートプロシージャコール（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ：ＲＰＣ）を含むアプリケーションと、不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）へのＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルと、前記アプリケーションから前記ＲＰＣをキャプチャ（ｃａｐｔｕｒｅ）し、前記ＲＰＣの結果を前記ホストプロセッサからのように、前記アプリケーションに伝達する前記オペレーティングシステム内のＲＰＣキャプチャモジュールと、を備え、前記不揮発性メモリエクスプレスソリッドステートドライブ（以下、ＮＶＭｅＳＳＤと記す）は、前記ＲＰＣを実行して前記結果を生成することを特徴とする。
【０００８】
上記目的を達成するためになされた本発明による不揮発性メモリエクスプレスソリッドステートドライブ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ  Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ；以下、ＮＶＭｅＳＳＤと記す）は、ホストへのインターフェースと、データのためのストレージと、前記ホストからＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルを経て前記インターフェースを介してリモートプロシージャコール（ｒｅｍｏｔｅ  ｐｒｏｃｅｄｕｒｅ  ｃａｌｌ：ＲＰＣ）を含む第１メッセージを受信するメッセージ受信器と、前記第１メッセージから前記ＲＰＣをアンラップするメッセージアンラッパーと、前記ＲＰＣを実行して前記ＲＰＣの結果を生成するイン−ストレージプロセッサと、前記ＲＰＣの前記結果を第２メッセージにラップするメッセージラッパーと、前記第２のメッセージを、前記インターフェースを介し、前記ＰＣＩｅトンネルを経て前記ホストに伝送するメッセージ伝送器と、を備えることを特徴とする。
【０００９】
上記目的を達成するためになされた本発明によるストレージサービスの動作方法は、アプリケーションからホストプロセッサへのリモートプロシージャコール（ｒｅｍｏｔｅ  ｐｒｏｃｅｄｕｒｅ  ｃａｌｌ：ＲＰＣ）をインターセプトする段階と、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルを介して不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）に前記ＲＰＣを伝達する段階と、前記ＰＣＩｅトンネルを介して前記不揮発性メモリエクスプレスソリッドステートドライブ（以下、ＮＶＭｅＳＳＤと記す）から前記ＲＰＣの結果を受信する段階と、前記ＲＰＣの前記結果を前記ホストプロセッサからのように、前記アプリケーションに伝達する段階と、を備えることを特徴とする。
【発明の効果】
【００１０】
本発明に係るホスト及びストレージサービスの動作方法並びにＮＶＭｅＳＳＤによれば、サーバのリモートプロシージャコールは、ＰＣＩｅトンネルを介してＮＶＭｅＳＳＤで処理される。
したがって、サーバの負荷が減少されるため、コンピュータシステムのコストが減少し、性能が向上するという効果がある。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態による、クライアントコンピュータにサービスを提供するサーバのセットを示す図である。
【図２】図１のサーバの詳細構成を示すブロック図である。
【図３】図１のサーバ及び図２のストレージ装置内のソフトウェアスタックの詳細構成を示すブロック図である。
【図４】リモートプロシージャコール（ＲＰＣ）を図３のマイクロサービスに伝送し、ＲＰＣの応答を受信する図３のアプリケーションの動作を説明するための図である。
【図５】図１のサーバの追加の詳細構成を示すブロック図である。
【図６】図３のアプリケーションによって発行された図４のＲＰＣがキャプチャされ得る図３のソフトウェアスタック内の多様な位置を示すブロック図である。
【図７】図３のＰＣＩｅトンネルを経て通信するのに使用されるトンネルエージェント及びトンネルエージェントバッファを説明するための図である。
【図８】図７のトンネルエージェントの詳細構成を示すブロック図である。
【図９】ＤＭＡエンジン及び図７のトンネルエージェントバッファについての可能な配置を説明するための図である。
【図１０】図２のＮＶＭｅＳＳＤの詳細構成を示すブロック図である。
【図１１】本発明の一実施形態による図１のサーバが図３のアプリケーションからの図４のＲＰＣをインターセプトし、図２のＮＶＭｅＳＳＤに伝送する例を説明するためのフローチャートである。
【図１２Ａ】図１のサーバが、図３のアプリケーションからのＲＰＣをキャプチャする例を説明するためのフローチャートである。
【図１２Ｂ】図１のサーバが、図３のアプリケーションからのＲＰＣをキャプチャする例を説明するためのフローチャートである。
【図１３】図７のトンネルエージェントが図７のメッセージを図７のトンネルエージェントに伝送する例を説明するためのフローチャートである。
【図１４】図７のトンネルエージェントが図７のトンネルエージェントからメッセージを受信する例を説明するためのフローチャートである。
【図１５】本発明の一実施形態による図２のＮＶＭｅＳＳＤが図１のサーバからのＲＰＣを処理する例を説明するためのフローチャートである。
【図１６Ａ】図２のＮＶＭｅＳＳＤが、図３のＰＣＩｅトンネルを介してＲＰＣを受信する例を説明するためのフローチャートである。
【図１６Ｂ】図２のＮＶＭｅＳＳＤが、図３のＰＣＩｅトンネルを介してＲＰＣを受信する例を説明するためのフローチャートである。
【図１７】図７のトンネルエージェントが図７の他のトンネルエージェントからメッセージを受信する例を説明するためのフローチャートである。
【図１８】図７のトンネルエージェントがメッセージを図７の他のトンネルエージェントに伝送する例を説明するためのフローチャートである。
【発明を実施するための形態】
【００１２】
次に、本発明に係るホスト及びストレージサービスの動作方法並びにＮＶＭｅＳＳＤを実施するための形態の具体例を図面を参照しながら説明する。
【００１３】
以下の詳細な説明では、多数の具体的な詳細が、本発明の技術的思想に対する徹底した理解を可能にするように提供する。
しかし、この分野における通常の技術を有する者は、これらの具体的な詳細なしに本発明の技術的思想を実施できることが理解されるべきである。
他の例示で、よく知られている方法、手順、構成要素、回路、並びにネットワークは実施形態の側面を不必要に曖昧にしないように詳細に記述しない。
【００１４】
ここで、第１、第２などの用語が多様なエレメントを記述するために使用するが、これらのエレメントは、これらの用語によって限定されないことが理解されるだろう。
これらの用語は、一つのエレメントを他の一つのエレメントから区別するためにだけ使用される。
例えば、本発明の技術的思想の範囲から離れずに、第１モジュールは、第２モジュールと命名され得、同様に、第２モジュールは、第１モジュールと命名され得る。
【００１５】
本発明の実施形態の説明において使用する用語は、特定の実施形態だけを記述するための目的であり、本発明の技術的思想の限定を意図しない。
本発明の実施形態の説明及び添付された請求項において使用するように、文脈上明確に別の意味を示していると判断されない限り、単数形は、複数形もまた含むことを意図する。
ここで使用するように、「及び／又は」の用語は、関連付けられてリストされたアイテムのいずれか一つ、又はそれより多くの任意の及びすべての可能な組み合わせを調べて包含することもまた理解されるだろう。
この明細書で使用するとき、「含む（ｃｏｍｐｒｉｓｅｓ）」及び／又は「含む（ｃｏｍｐｒｉｓｉｎｇ）」の用語は、記載された特徴、整数、段階、動作、エレメント、及び／又は構成要素の存在を明示し、一つ以上の多くの他の特徴、整数、段階、動作、エレメント、構成要素、及び／又はこれらのグループの存在又は追加を排除しないことがより理解されるだろう。
図面の構成要素及び特徴は、比率のまま描かれる必要はない。
【００１６】
ストレージ装置においてローデータを可能な限り多く処理することは、増加する量のローデータのマネタイゼーション（ｍｏｎｅｔｉｚａｔｉｏｎ）のために必要なデータ分析の使用ケースにコスト効率的なソリューションである。
加えて、データの移動を除去することで、アプリケーションへの応答レイテンシーは大いに向上する。
なお、データの分析作業は、しばしば大量のデータを読み出し、これを処理し、そしてフィルタリング、及び他の減少動作により減少させる。
これら及び他の多くの類似の作業の、これらすべては、装置内の高い可用帯域幅を利用し、そして減少した結果だけを移すので、ソリッドステートドライブ（ＳＳＤ）と中央処理装置（ＣＰＵ）との間（すなわち、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）インターフェース）に制限された帯域幅を保つので、ＳＳＤベースのサービスに完璧に適している。
したがって、データの処理をストレージ装置の近く又は内部で可能にする技術は、「データの時代（Ｄａｔａ  Ａｇｅ）」に必要な新たなシステムアーキテクチャの核心部分である。
【００１７】
クライアント・サーバ・プロトコルは、システムのアーキテクチャにおいて、情報技術（ＩＴ）のサーバベースの設備（ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）をすっきり効果的に分割するために使用される。
アプリケーションサーバ（フロント・エンド顧客向けサーバでも知られている）は、エンドユーザー（ｅｎｄ  ｕｓｅｒ）向けアプリケーションソフトウェアを管理し、多様なユーザーサービスを提供するために必要な実際のヘビーデューティーデータ（ｈｅａｖｙ  ｄｕｔｙ  ｄａｔａ）の処理は、バックエンドサーバ上で遂行される。
フロント・エンド及びバックエンドサーバ上で実行されるアプリケーションソフトウェアスタック（ｓｔａｃｋｓ）は、しばしば、相互に通信するために、「クライアント・サーバ」のプロトコルを使用する。
ｇＲＰＣ、ＪＳＯＮ、及びＨＴＴＰは、リモートプロシージャコール（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ：ＲＰＣ）のメカニズムの例であり、プロトコルは一つのホストマシン上のアプリケーションソフトウェアによって使用され、他のマシンで管理されて実行される１つ以上の多くの機能、手順、又はより一般的に「サービス」にアクセスする。
このような論理レベルに対するクライアント・サーバのプロトコルは、異なるホストマシンに常駐し、そしていくつかのネットワークによって接続された多様なアプリケーション間での通信を可能にする。
クライアント・サーバのプロトコルは、クライアントとサーバマシンとの間の通信ネットワークの伝送側を要約することで、アプリケーションのプログラミングを単純化する。
【００１８】
リモートプロシージャコールは、その名前が暗示するように、呼び出しクライアントのためにサービスを提供するサーバ上からリモートで具体的な手順を実行する。
この手順は、同じシステムにおいて仮想アドレス空間分離（しかし、物理的に同一）により、又はネットワークによって分離されることにより、「リモート」と呼ばれる。
リモートで実行されるとき、この手順は、ローカルデータを扱い、そしてそうすることにより、呼び出し側のレイテンシーで、より効率的に作業することができる。
ＲＰＣは、呼び出し側で入力パラメータをパッケージにして、呼び出されたプロシージャ（呼び出されたマーシャルリング（ｍａｒｓｈａｌｌｉｎｇ）とも呼ばれる）に送るメカニズムである。
受信するサーバ側でスタブ（ｓｔｕｂ）を受信するＲＰＣは、パック（ｐａｃｋ）された入力をアンパック（ｕｎｐａｃｋ）し、そしてこれらをサービスにパス（ｐａｓｓ）する。
このように、実際のコンテンツは、ローカル（異なるアドレス空間）又はリモート（ネットワークに接続された異なるシステム）である場合、伝送において不透明になる。
ＲＰＣは、ローカル又はリモートで動作し、そのローカリティを隠す可能性があるため、呼び出し側アプリケーションはサーバがどこにあるかを知る必要がない。
ＲＰＣの使用に対しよく知られている例は、いくつかの例を挙げると、ＮＦＣは、「Ｍｉｃｒｏｓｏｆｔドットネットリモーティング（Ｍｉｃｒｏｓｏｆｔ．ＮＥＴ  Ｒｅｍｏｔｉｎｇ）」、ＸＭＬ−ＲＰＣ、ＪＳＯＮ−ＲＰＣ、及びＣＯＢＲＡである。
【００１９】
装置ベース（ｄｅｖｉｃｅ−ｂａｓｅｄ）のサービスメカニズムでは、装置がローカル的であるが、仮想又は物理アドレス空間で分離されている場合に第３タイプの使用が始動
する。
これは、装置とアプリケーションがｘ８６アーキテクチャに構築された伝統的なシステムにおいてのように一つである必要がないそれら自身の物理アドレス空間を管理するためである。
これらの独立した物理アドレス空間は、装置の製造業者に装置をサーバとして管理する新しい方法を提供する。
ＲＰＣなどのメカニズムは、装置によって管理されるアプリケーションとサーバとの間の通信の架け橋として理想的であり、そしてそうすることは、現在の使用を、新しい特定装置向け実装（ｄｅｖｉｃｅ  ｓｐｅｃｉｆｉｃ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎｓ）にシームレスに（ｓｅａｍｌｅｓｓｌｙ）移行することができる。
【００２０】
一般的に、ＲＰＣプロトコルは、通信のためのＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）のようなネットワークプロトコルスタックを利用して実装される。
ＴＣＰ／ＩＰを使用することに対する代案として、本発明の実施形態では、ＲＰＣメッセージをＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）を介して伝送する。
ＰＣＩｅは、ネットワークプロトコルではなく、ホストサーバ又はシャーシ内で使用される末端装置と周辺装置をホストに接続するバスインターフェースである。
ＰＣＩｅを介したｇＲＰＣトンネリングは、ｘ８６ホストで実行中のソフトウェアスタックをホストに直接付着されたＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）で管理されるサービスに接続するのに使用される。
このメカニズムは、ホストスタックを著しく変更せずに、特定のアプリケーションがＤＡＳ（Ｄｉｒｅｃｔ−Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）ＮＶＭｅＳＳＤにオフロードされて、そして加速され機能するようになる。
【００２１】
例示の目的のために、本発明の実施形態が具体的なｇＲＰＣ（グーグル開発）で独創的に開発されたオープンソースＲＰＣ）で記述するが、本発明の実施形態は、他のＲＰＣシステムの具現に同様に適用可能である。
ｇＲＰＣに対する任意の参照は、「ＲＥＳＴ  ＡＰＩ」ベースのプロトコルだけでなく、ＸＭＬ、ＪＳＯＮ、ＨＴＴＰ、などのような他のクライアント・サーバプロトコルもまた適用され得ることが理解されるべきである。
【００２２】
＜＜ＰＣＩｅを介したｇＲＰＣトンネリング＞＞
「ｇＲＰＣ」のような「クライアント・サーバ」のプロトコルは、クライアント及びサーバがネットワークインターコネクトを用いて、接続された別のサーバ装置に位置した際に一般的に使用される。
イーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））を介したＴＣＰ／ＩＰなどのようなネットワークプロトコルは、トランスポート（ｔｒａｎｓｐｏｒｔ）のメカニズムを使用する。
このような方式で、ＴＣＰ／ＩＰ及びイーサネット（登録商標）を使用する代わりに、本発明の実施形態は、「クライアント」を、サーバマシンに位置させ、そして「サーバ」をＮＶＭｅＳＳＤに位置させるようにする。
ＮＶＭｅＳＳＤは、ホストＣＰＵと通信するために、ＰＣＩｅのホストインターフェースを使用する。
ＮＶＭｅＳＳＤは、トランスポートメカニズムとしてネットワークプロトコルを使用する代わりに、ＣＰＵ（ＤＡＳ）に直接取り付けられる。
したがって、ＤＡＳモードでは、ホストＣＰＵとＮＶＭｅＳＳＤとの間に「クライアント・サーバ」の通信を可能にするためのソリューションが必要である。
【００２３】
この目的のために、ホストで実行中の「クライアント・サーバ」プロトコルをＮＶＭｅＳＳＤにトンネリング（ｔｕｎｎｅｌｉｎｇ）をする方法が必要である。
このような方法で、クライアント・サーバの方法論（ｍｅｔｈｏｄｏｌｏｇｙ）を使用する現在のアプリケーションは、重大な変化なしに（そしておそらく、全体的にどのような変化もなく）システムアーキテクチャで動作するはずである。
なお、新しいアプリケーションは、ストレージ装置から提供されるデータ処理サービスからの利点を得る「クライアント・サーバ」の方法論を利用して開発される。
本発明の実施形態で使用するアプリケーションは、携帯用であり、根本的なストレージ、及びネットワークインフラについて知る必要のないアグノスティック（ａｇｎｏｓｔｉｃ）であり得る。
このようなアプリケーションは、ストレージデバイス自体で可能な限りデータを処理することにより、ホストＣＰＵへのデータの移動を大幅に削減できる。
データ移動の減少は、減少されたエネルギー消費量、減少された計算資源、及び減少されたネットワークインフラのコストの観点から大きなメリットを与える。
【００２４】
ＰＣＩｅを介してｇＲＰＣをトンネルするための２つの主要構成要素がある。
第１番目はｇＲＰＣメッセージをインターセプト（ｉｎｔｅｒｃｅｐｔｉｏｎ）することであり、第２番目は、信頼性の高い、そして順次的な方法（ｉｎ−ｏｒｄｅｒ  ｆａｓｈｉｏｎ）でＰＣＩｅインターフェースを経てｇＲＰＣメッセージを伝送することである。
ｇＲＰＣメッセージがネットワークインターフェースを介して伝送される前に、ｇＲＰＣメッセージをキャプチャできる多数の方法がある。
後にキャプチャされたｇＲＰＣメッセージは、他の側に伝送するためにＰＣＩｅトンネルモジュールに伝達される。
これらのｇＲＰＣトンネリングは、全二重（ｆｕｌｌ−ｄｕｐｌｅｘ）方式で双方向の両方で遂行される。
提案されたＰＣＩｅトンネルは、メッセージのための信頼性の高い順次的伝送を提供する。
【００２５】
つまり、ＰＣＩｅトンネルモジュールは、ｇＲＰＣメッセージを受信したのと同じ順序で伝送できる。
ＰＣＩｅトンネルは、ＰＣＩｅのレベルエラーによって、必要な任意の再伝送にだけでなく、メッセージフロー制御もまた管理することができる。
ＰＣＩｅトンネルが異なるトレードオフ（ｔｒａｄｅ  ｏｆｆｓ）で実装される多数の方法がある。
ここで、記述したトンネリング方法は、また、「Ｇｅｎ−Ｚ．ＣＣＩＸ」、及び「ＯｐｅｎＣＡＰＩ」のような他のホスト装置のインターフェースにも適用される。
下のセクションは、ｇＲＰＣメッセージキャプチャ／再生及びＰＣＩｅトンネルのすべての詳細を記述する。
【００２６】
＜＜ｇＲＰＣ呼び出しインターセプト（ｃａｌｌ  ｉｎｔｅｒｃｅｐｔｉｏｎ）＞＞
ｇＲＰＣメッセージをＰＣＩｅを経てトンネリングするためには、ｇＲＰＣクライアントとｇＲＰＣサーバとの間を移動するこれらのメッセージが、まず、一端でキャプチャされ、他端に伝達され、そして他端で再生されるべきである。
メッセージのインターセプトポイント（ｉｎｔｅｒｃｅｐｔｉｏｎ  ｐｏｉｎｔ）は、ＰＣＩｅトンネルに進入する前に、メッセージが経るホストソフトウェアスタックのデプス（ｄｅｐｔｈ）を決定する。
これは、言い換えると、全体的なクライアント・サーバスタックの性能に影響を与える。
一般的に、ホストソフトウェアスタックにおいてキャプチャポイントがより高いほど、性能は向上するが、ソフトウェアスタックの変更は、より複雑になる。
【００２７】
１）＜ｇＲＰＣ  ＭｉｔＭ方法＞
本発明の一実施形態で、ｇＲＰＣメッセージは、ＭｉｔＭ（Ｍａｎ−ｉｎ  ｔｈｅ−Ｍｉｄｄｌｅ）モジュールを用いてキャプチャされる。
基本的に、ＭｉｔＭのシム（ｓｈｉｍ）モジュールは、ｇＲＰＣメッセージをキャプチャし、これらをＰＣＩｅトンネルモジュールに伝送する。
ＭｉｔＭモジュールは、次の二つの機能を使用する。
「ｂｏｏｌ  ＰＵＳＨ」（ｑｕｅｕｅ、ｍｓｇ＿ｄａｔａ）；／／成功又は失敗を返す。失敗してはならない。
「ｍｓｇ＿ｄａｔａ  ＰＯＰ」（ｑｕｅｕｅ）；／／データ又はチャネルが空きになると、ＮＵＬＬを返す。
これらのメッセージのプッシュ（ｐｕｓｈ）／ポップ（ｐｏｐ）の関数は、要請・メッセージ・キュー（ｒｅｑｕｅｓｔ−ｍｅｓｓａｇｅｓ−ｑｕｅｕｅ）及び応答・メッセージ・キュー（ｒｅｓｐｏｎｓｅ−ｍｅｓｓａｇｅｓ−ｑｕｅｕｅ）の二つのキューとともに使用される。
ＰＣＩｅトンネルモジュールは、基本的にこのような２つのキューを介してＭｉｔＭモジュールと接続（ｉｎｔｅｒｆａｃｅ）してｇＲＰＣメッセージを交換する。
【００２８】
２）＜システムコールのキャプチャ方法＞
本発明の他の実施形態で、ｇＲＰＣ及び他のクライアント・サーバのプロトコルは、ソケットシステムコールを用いて、通信チャネルを確立する。
ｇＲＰＣ接続を実行するために用いられるシステムコールの例は、「ｓｏｃｋｅｔ（）」、「ｓｅｎｄｍｓｇ（）」、及び「ｒｅｓｃｖｍｓｇ（）」を含む。
識別されたシステムコールは、再実行され（ｒｅ−ｉｍｐｌｅｍｅｎｔｅｄ）、オリジナルのライブラリ関数を代わりにすることができる。
例として、リナックス（登録商標）（Ｌｉｎｕｘ（登録商標））オペレーティングシステム（ＯＳ）の動的リンカ（ｄｙｎａｍｉｃ  ｌｉｎｋｅｒ）は、「ＬＤ−ＰＲＥＬＯＡＤ」特徴（ｆｅａｔｕｒｅ）を用いて、識別されたシステムコールの新しい定義とリンクできる。
リナックス（登録商標）ＯＳの「ＬＤ＿ＰＲＥＬＯＡＤ」特徴は、標準ライブラリの代案的なシンボル定義を供給するメカニズムを提供する。
インターセプトされたシステムコールは、その後でｇＲＰＣメッセージをキャプチャし、これらをＰＣＩｅトンネルモジュールに発送するために使用される。
オリジナルのシステムコールを完全に代替する代わりに、オリジナルのシステムコールを新しい定義において、ただラップすることもまた可能である。
つまり、識別されたシステムコールの新しい定義は、ｇＲＰＣではない、すべてのアプリケーションのためのオリジナル関数及び／又は他のトンネルされたクライアント・サーバのプロトコルを交互に呼び出すことができる。
【００２９】
３）＜イーサネット（登録商標）フレームのトランスポート＞
本発明の他の実施形態で、ｇＲＰＣメッセージを運ぶイーサネット（登録商標）フレームは、ＰＣＩｅトンネルを介して伝送される。
本発明の実施形態では、ソフトウェアスタックに非常に少ない変化を誘発するが増加されたレイテンシーの潜在的なコストがある。
フィルタモジュールは、ネットワークプロトコルフィールドの検査（ｉｎｓｐｅｃｔｉｏｎ）に基づいて、適切なイーサネット（登録商標）フレームを識別する。
このフィルタは、イーサネット（登録商標）、ＴＣＰ、ＵＤＰ、ＩＰなどのヘッダをチェックして、関心あるｇＲＰＣ連結に適切なイーサネット（登録商標）フレームを識別する。
識別されたフレームは、その後で、通常のパスに沿って、イーサネット（登録商標）のメディアアクセス制御（ＭＡＣ）（Ｍｅｄｉｕｍ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）を介してリモートネットワークのデスティネーションに伝送される代わりに、ＮＶＭｅＳＳＤに伝送されるためにＰＣＩｅトンネルに渡される。
同様のイーサネット（登録商標）フレームのフィルタリング動作が、反対方向、つまりＮＶＭｅＳＳＤからホストに遂行される。
【００３０】
４）＜ｇＲＰＣ端末（ｅｎｄｐｏｉｎｔ）の仮想テーブル（ｖｔａｂｌｅ）＞
本発明の他の実施形態において、ｇＲＰＣのトランスポート層は、端末「ｖｔａｂｌｅ」定義を用いて定義される。
通常、ｇＲＰＣは、ＨＴＴＰ／２、クロネット（Ｃｒｏｎｅｔ）、及びイン・プロセス（Ｉｎ−Ｐｒｏｃｅｓｓ）の三つのトランスポートを定義する。
本発明の実施形態では、第４番目のトランスポートのメカニズムが「ｇｒｐｃ＿ｅｎｄｐｏｉｎｔ＿ｖｔａｂｌｅ」によって提供される要約（ａｂｓｔｒａｃｔｓ）を利用して定義される。
ＲＰＣは、定義をローカルで、そしてリモートで拡張するため、本発明の実施形態は、トランスポートが活用されるとき、ローカル及びリモートサーバを要約することができる。
これらのｇＲＰＣのトランスポートは、リモートＤＭＡ（ＲＤＭＡ：Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）とＴＣＰなどのようなネットワークインターフェースに要約される。
【００３１】
下記に示す表１は、本発明の実施形態にて用いて露出される「ｖｔａｂｌｅ」の例としてのプロシージャコールを提供する。
【表１−１】
2020064634.tif 000003
【表１−２】
2020064634.tif 000004
ｇＲＰＣトランスポートを確立するために、生成関数を実装して、末端テーブルを確立する。
【００３２】
＜＜ＰＣＩｅトンネル＞＞
ＰＣＩｅトンネルは、ホストからのメッセージをＮＶＭｅＳＳＤなどに伝送するための方法、あるいはその逆の方法を提供する。
ＰＣＩｅトンネルは、実際のメッセージのコンテンツを知る必要のないアグノスティック（ａｇｎｏｓｔｉｃ）であり、メッセージを解釈しない。
ＰＣＩｅトンネルに関しては、メッセージは、トンネルの他の側に信頼性の高い、且つ順次的な方法で伝送されるデータのブロックにすぎない。
ＰＣＩｅトンネルは、ＰＣＩｅメモリ読み出し（Ｍｅｍｏｒｙ  Ｒｅａｄ）及びＰＣＩｅメモリの書き込み（Ｍｅｍｏｒｙ  Ｗｒｉｔｅ）のトランザクションを使用して、データ伝送を行うことができる。
異なるトレードオフを有するＰＣＩｅトンネル実装の多くの方法が存在する。
【００３３】
１）＜別途のメモリモデル＞
本発明の一実施形態では、ホストとＮＶＭｅＳＳＤは、互いによって書き込まれる別途のトンネルエージェントバッファを有し得る。
本発明の一実施形態は、両方からＰＣＩｅメモリの読み出しトランザクションを使用しない。
ＰＣＩｅメモリの読み出しトランザクションは、ノン・ポステッド（ｎｏｎ−ｐｏｓｔｅｄ）動作であるので、これらは性能に影響を与える傾向がある。
一端が他端にメッセージを伝送する必要があるときに、一端は、メッセージをリモートバッファに書き込むことができる。
リモート端（ｒｅｍｏｔｅ  ｅｎｄ）は、自分のローカルバッファへの書き込みを監視し、バッファからメッセージを取得（ｒｅｔｒｉｅｖｅ）することができる。
通信のために必要なフロー制御は、トンネルエージェントがバッファの適切な読み出し及び書き込みのポインタを相互に交換することにより達成される。
ＰＣＩｅ読み出しを除去することにより、本発明の一実施形態は、高性能の全二重（ｆｕｌｌ  ｄｕｐｌｅｘ）のＰＣＩｅトンネルを提供することができる。
【００３４】
トンネルエージェント（ＴＡ）は、トンネルの各端（ｅｎｄ）で使用される。
ＰＣＩｅトンネルは、同じＴＡモジュールが両端でインスタンス化（ｉｎｓｔａｎｔｉａｔｅ）される点で対称的である。
各ＴＡは、リモートＴＡからメッセージを受信するローカルメモリを有する。
ＴＡは、メッセージ交換、及びフロー制御のために四つのポインタを使用することができる。
ＴＡは、自分のローカルバッファから受信されたメッセージを読み取るための「ＲＬ」（ローカル読み出し）及び新しいメッセージをリモート端（ｒｅｍｏｔｅ  ｅｎｄ）に伝送するための「ＷＲ」（リモート書き込み）の２つのポインタを維持する。
他の２つのポインタは、リモートＴＡからバッファ内の固定された位置でＴＡによって受信され、リモートＴＡが新しいメッセージのための利用可能な空間を有するかを知るための「ＲＲ」（リモート読み出し）及びローカルＴＡによって読み出される（ｒｅａｄ）されるメッセージのデータが、リモートＴＡによってどのくらいの大きさで書き込まれる（ｗｒｉｔｅ）されたのかを知るための「ＷＬ」（ローカル書き込み）である。
これらのポインタで、「Ｒ」は読み出しアドレスを指し、「Ｗ」は、書き込みアドレスを指し、「Ｌ」は、ローカルアドレスを指し、「Ｒ」は、リモートアドレスを指す。
【００３５】
各ＴＡインスタンスは、上位レベルのソフトウェア又はファームウェアによってローカル及びリモートバッファのベースアドレス及びサイズに対し適用可能なものとして知ることになる。
これらの４つのバッファへのポインタと、ＰＣＩｅメモリ書き込みトランザクションだけを使用することにより、二つのＴＡは、高性能の全二重ＰＣＩｅトンネルを確立して、さまざまなサイズのメッセージを交換する。
【００３６】
ＴＡがメッセージを伝送しようとするとき、ＴＡは、それ自身の「ＷＲ」ポインタを利用して、メッセージをリモートＴＡバッファに書き込む。
メッセージを書き込み後、ＴＡは、固定された位置でリモートバッファの「ＷＲ」ポインタを更新する。
更新された「ＷＲ」ポインタは、その後、リモートＴＡが新しいメッセージを受信していたかどうかを知るために使用される。
ＴＡはまた、「ＲＬ」ポインタを更新し、より多くのメッセージを受信するための空間を有していることを（例えば、ＴＡのローカルバッファからメッセージが削除されるにつれて）リモートＴＡに知らせることができる。
４つのバッファのポインタは、各ＴＡによって使用され、読み出しのための利用可能なローカルデータの量及び書き込みのための利用可能なリモート空間の量を計算する。
これらのデータと空間の利用可能な値は、交互に使用されて信頼性の高いメッセージの伝送を達成する。
バッファはリング方式で使用される。
読み出しと書き込みのポインタは、最大値（つまり、バッファサイズ）に到達した後、ゼロに戻る。
【００３７】
下記に示す表２は、４つのバッファのポインタを示し、下記に示す表３は、４つのバッファポインタからどのような情報が導き出されるかを示す。
【表２】
2020064634.tif 000005
上記の４つのポインタは、以下に記載されているように、ローカルデータ及びリモート空間の利用可能な状態を計算するのに使用される。
【表３】
2020064634.tif 000006
【００３８】
ホストメモリ及びＳＳＤのメモリの別途のバッファの位置とサイズは、ＳＳＤのベースアドレスレジスタ（Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｓｔｅｒ：ＢＡＲ）のアドレス空間内の所定のオフセットに位置したレジスタを介して報告される。
ＳＳＤは、パワーオン後に自分のローカルバッファアドレスとサイズをＢＡＲを介して通知し、ホストはこれを読み取る。
ホストは、ホストメモリ内のそれ自身のバッファの位置とサイズをＳＳＤＢＡＲアドレス空間内のよく知られているレジスタに設定し、ＳＳＤはこれを読み取る。
必要であれば、複数のバッファを使用することにより、多重メッセージチャネルがサポートされる。
本発明の実施形態では、各ポインタに対して両側から１つの所有者のみが存在しなければならない。
ホスト及びアプリケーションに対して、特定のカーネル装置ドライバ又はユーザー空間内の類似のあるものが、ＴＡ及びバッファを実装するために使用される。
【００３９】
リングキューバッファのモデルを使用して、本発明の一実施形態で、ＴＡはリモートＴＡへのアクセスが容易なメモリの他の部分に位置する物理ページのコレクション（ｃｏｌｌｅｃｔｉｏｎ）を含むショートバッファだけを露出する。
本発明の実施形態は、実際のトンネルのデータバッファの位置に対する間接参照を提供する。
ポインタは、上記記述した通り、処理され得るが、実際のトンネルデータは、このようなショートバッファに記載されたページの位置に配置される。
このモデルは、ローカルユーザーによって変化されるデータバッファの位置のスケーラブルバッファスキームを提供する。
例えば、一つのＴＡは、初期に１６ＭＢの総計データバッファのサイズを要請し、その後で時間が経つにつれてデータの総計バッファサイズを２５６ＭＢに変更できる。
ＳＳＤ又はホストトンネルエージェントバッファの位置は更新され、対応するバッファの値に新しいサイズを反映できる。
データバッファアドレスのコレクションを含む両端のリングバッファキューが小さいので、リングバッファキューは、必要に応じて時間とともに、複数のキューに複製されて拡張される。
【００４０】
２）＜共有メモリモデル＞
本発明他の実施形態では、ＮＶＭｅＳＳＤ（又はホスト）は、ＰＣＩｅインターフェースを介して他の装置と共有されているメモリバッファを提供する。
基本的に、ストレージ装置、又はホストは、ＰＣＩｅＢＡＲを利用して他側（ｏｔｈｅｒ  ｓｉｄｅ）に知られているメモリバッファを提供する。
他側は、その後、ＰＣＩｅメモリの読み出し／書き込みトランザクションを用いて、共有バッファを読み書きする。
つまり、ＰＣＩｅインターフェースの他側から共有メモリにアクセスしているパーティーは、ＰＣＩｅインターフェースを介してバッファにメッセージを移動させる責任があり得る。
【００４１】
たとえば、ＮＶＭｅＳＳＤが自分のメモリバッファをホストと共有すれば、ホストは、ホストメモリのバッファからＮＶＭｅＳＳＤメモリのバッファに、又はその逆にメッセージを移動させる責任があり、ＮＶＭｅＳＳＤはローカルバッファメモリにメッセージを読み書きする。
ホスト装置内の共有バッファの位置は、ＢＡＲアドレスに対して固定され、又はＢＡＲアドレス空間内の所定の位置でレジスタを介して他のパーティーに知られる。
バッファのサイズは、もう一つの一定のＢＡＲのオフセットを使用して明示される。
情報と関連付けられたメッセージフロー制御は、また、ＢＡＲレジスタ空間内の所定の位置のレジスタを介してホストとＮＶＭｅＳＳＤとの間に同様に共有される。
多重トンネルのチャネルは、これらの複数のバッファを介してサポートされ得る。
【００４２】
ＮＶＭｅＳＳＤが本発明の実施形態を用いて、それ自身のメモリバッファをホストと共有すれば、ホストソフトウェアは、すべてのＰＣＩｅトランザクションを実行して、メッセージをホストとＮＶＭｅＳＳＤとの間で移動させることができる。
この実装は、性能の観点から最適ではない可能性がある。
上記提案したように、共有メモリは、またホスト側に位置することができ、ストレージ装置は、そのバッファに対しすべてのＰＣＩｅの読み出し／書き込みのトランザクションを実行する。
本発明の実施形態において、ホストは、ＰＣＩｅトランザクションを実行せず、よって全体的な性能は、より良くなる。
ホストソフトウェアは、共有バッファをポール（ｐｏｌｌ）してＮＶＭｅＳＳＤからのメッセージの受信をチェックする。
ＮＶＭｅＳＳＤは、また、メッセージをホストメモリにデポジットした後、ホストに「ＭＳＩ」又は「ＭＳＩ−Ｘ」のような割り込みを発行する。
【００４３】
割り込みモデルを使用することにより、ホストソフトウェアは、受信バッファをポール（ｐｏｌｌ）する必要がなく、受信された割り込みをトリガとして用いて、受信したメッセージを読み出す。
ホストメモリ内の共有バッファの位置及びサイズは、ＮＶＭｅＳＳＤＢＡＲアドレス空間内の所定のオフセットに位置したレジスタを介してＮＶＭｅＳＳＤトンネルエージェントに知られる。
情報と関連付けられたメッセージフロー制御は、また、ＳＳＤＢＡＲアドレス空間内の所定の位置を介してホストとＮＶＭｅＳＳＤとの間で共有される。
複数のメッセージチャンネルが複数のバッファを利用してサポートされる。
【００４４】
図１は、本発明の一実施形態による、クライアントコンピュータにサービスを提供するサーバのセットを示す図である。
図１において、サーバ（１０５−１、１０５−２、１０５−３）は、ネットワーク１１５を介してクライアントマシン１１０と通信することを図に示す。
一般的に、サーバシステムは、サービスを提供する、一つより多くのサーバを含むが、任意の数のサーバが有り得るし、ただ一つであり得る。
【００４５】
ネットワーク１１５は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋｓ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋｓ）、ＭＡＮ（Ｍｅｔｒｏｐｏｌｉｔａｎ  Ａｒｅａ  Ｎｅｔｗｏｒｋｓ）、及びインターネットのようなグローバルネットワークを含む、任意の必要且つ多様なネットワークであり得る。
さらに、ネットワーク１１５は、有線ネットワーク、無線ネットワーク、又はそれらの両方を含む。
ネットワーク１１５は、また、これらのネットワークの組み合わせを含むことができる。
たとえば、クライアントマシン１１０は、ＬＡＮ（クライアントマシン１１０を含まれ得る）、グローバルネットワーク、及びＬＡＮ（サーバ１０５−１に含まれ得る）を介してサーバ（１０５−１）と接続される。
【００４６】
図１は、サーバ（スタンドアロン又はラックマウント型サーバであり得る）としてサーバ（１０５−１、１０５−２、１０５−３）を示しているが、本発明の実施形態は、限定されない任意の必要なタイプのサーバ（１０５−１、１０５−２、１０５−３）を含む。
同様に、クライアントマシン１１０は、限定されない任意の必要なタイプであり得る。
たとえば、サーバ（１０５−１）は、デスクトップ、ラップトップ、又は本発明の実施形態から利益を取得できる任意の他のマシンに置き換えられる。
サーバ（１０５−１）は、スペシャライズドポータブルコンピューティングマシン、タブレットコンピュータ、スマートフォン、及び他のコンピューティングマシンを含む。
【００４７】
図２は、図１のサーバ（１０５−１、１０５−２、１０５−３）（以下、単にサーバ１０５で参照する。）の詳細構成を示すブロック図である。
図２において、一般的に、サーバ１０５は、１つ以上の複数のプロセッサ２０５を含み得、プロセッサ２０５は、（メモリ）コントローラ２１０とクロック２１５を含み、クロック２１５は、サーバ１０５の構成要素の動作を調整するために使用される。
プロセッサ２０５は、任意の様々なプロセッサ、例えば「Ｉｎｔｅｌ  Ｘｅｏｎ」（登録商標）、Ｃｅｌｅｒｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、Ａｔｏｍ（登録商標）プロセッサ、「ＡＭＤ  Ｏｐｔｅｒｏｎ」（登録商標）プロセッサ、ＡＲＭプロセッサなどであり得る。
図２は、サーバ１０５内の単一のプロセッサ２０５を示しているが、サーバ１０５は、複数のプロセッサを含むことができ、これらのそれぞれは、シングルコア又はマルチコアプロセッサであり得るし、任意の必要な組み合わせで混合することができる。
【００４８】
プロセッサ２０５は、また、メモリ２２０と結合される。
メモリ２２０は、任意の様々なメモリであり得、例えば、フラッシュメモリ、ＤＲＡＭ、ＳＲＡＭ、永続性ランダムアクセスメモリ（Ｐｅｒｓｉｓｔｅｎｔ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、強誘電性ランダムアクセスメモリ（ＦＲＡＭ（登録商標））、磁気ランダムアクセスメモリ（ＭＲＡＭ）などのような不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、又は他の状態の保存媒体であり得る。
メモリ２２０は、また、異なるメモリタイプの任意の必要な組み合わせでもあり得る。
【００４９】
プロセッサ２０５は、ストレージ装置２２５に結合される。
以下で説明するように、ストレージ装置２２５は、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）インターフェースを介してプロセッサ２０５と通信する任意の形態のストレージ装置であり、ＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）が以下で例示として使用される。
プロセッサ２０５は、またネットワークコネクタ２３０に結合され得、ネットワークコネクタ２３０は、例えば、イーサネット（登録商標）コネクタ又は無線コネクタであり得る。
プロセッサ２０５は、またバス２３５に接続され、バス２３５は、他の構成要素の中で、ユーザーインターフェース２４０と入力／出力エンジン２４５を用いて管理される入力／出力インターフェースポートに付着する。
【００５０】
図３は、図１のサーバ１０５及び図２のストレージ装置２２５内のソフトウェアスタックの詳細構成を示すブロック図である。
図３において、アプリケーション（３０５−１、３０５−２）が図に示され、これらは図２のプロセッサ２０５で実行される。
図３は、二つのアプリケーション（３０５−１、３０５−２）を示しているが、本発明の実施形態は、任意の与えられた時間に、任意の数のアプリケーションが実行されることをサポートし、図２のプロセッサ２０５で実行されるアプリケーション（３０５−１、３０５−２）の数は、時間に応じて変化する。
各アプリケーション（３０５−１又は３０５−２）は、リモートプロシージャコール（ＲＰＣ）を開始することができる。
通常のサーバで、アプリケーション（３０５−１、３０５−２）は、図２のプロセッサ２０５がＲＰＣを実行することを期待する。
本発明の実施形態は、アプリケーション（３０５−１、３０５−２）を修正することを必要とせず、既存のアプリケーションがＲＰＣのイン−ストレージ（ｉｎ−ｓｔｏｒａｇｅ）の実行から利益を得るようにする。
【００５１】
通常、アプリケーション（３０５−１、３０５−２）がＲＰＣを発行するときに、ＲＰＣは、ＲＰＣクライアント（３１０−１、３１０−２）によって受信される。
図３は、アプリケーション（３０５−１、３０５−２）のそれぞれが、単一のＲＰＣクライアント（３１０−１又は３１０−２）と相互作用することを示しているが、任意の数のＲＰＣクライアント（３１０−１、３１０−２）（例えば、ＲＰＣを介して提供される各サービスをサポートするための一つ）が有り得るし、どのようなＲＰＣクライアント（３１０−１又は３１０−２）がＲＰＣを処理するかは、要請されたサービスに依存する。
したがって、本発明の実施形態は、任意の数のＲＰＣクライアント（３１０−１、３１０−２）を含むことができ、アプリケーション（３０５−１、３０５−２）は、必要に応じて、ＲＰＣクライアント（３１０−１、３１０−２）のいずれのもの及び／又は両方と相互作用することができる。
【００５２】
ＲＰＣクライアント（３１０−１、３１０−２）は、ＲＰＣをＲＰＣ層３１５に伝達（おそらく適切なトランスポートプロトコルとしてラップされる。つまり、例えば、いくつかのＲＰＣクライアント（３１０−１又は３１０−２）がＲＰＣを処理したかを明示するために）される。
ＲＰＣ層３１５は、その後で、ＲＰＣをもう他のトランスポートプロトコルで、よりラップしてＲＰＣをネットワークスタック３３０に伝達する。
ネットワークスタック３３０は、それからＲＰＣをもう他のトランスポートプロトコル（例えば、ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）を用いて伝送されるイーサネット（登録商標））データとして）にラップし、これは、その時ネットワークポート３２５を介してネットワーク接続を介してデスティネーション（アプリケーション（３０５−１、３０５−２）と同じサーバ１０５内の、又は物理的に別のサーバ内の図２のプロセッサ２０５であり得る）に伝送する。
【００５３】
ＲＰＣクライアント（３１０−１、３１０−２）、ＲＰＣ層３１５、及びネットワークスタック３３０は、すべて図２のプロセッサ２０５において実行中のオペレーティングシステム３３５の一部であり得る。
図３は、ソフトウェアスタックの単純化された表現であり、ソフトウェアスタック（又はオペレーティングシステム３３５）のすべてのエレメントを必ずしも示すものではないことに留意しなければならない。
さらに、実装に依存して、ソフトウェアスタックは、図３に示したいくつかのエレメントを省略（又は同様に動作するが、他のネーム（ｎａｍｅ）を有するエレメントに代替する）し得る。
【００５４】
ＮＶＭｅＳＳＤ２２５は、通常、ネットワーク接続をサポートせずに、代わりにＰＣＩｅインターフェースを用いて、図２のプロセッサ２０５と通信する。
ＮＶＭｅＳＳＤ２２５が、ネットワーク接続を含むと、ネットワーク接続を介して、通常のＲＰＣを提供して受信するようにＮＶＭｅＳＳＤ２２５を単純に実装することができるが、ネットワーク接続なしにはＮＶＭｅＳＳＤ２２５は、通常のシステムのように、ネットワーク接続を介して伝送されるＲＰＣ要請を受信することをサポートすることができない。
したがって、ソリューションは、いくつかのポイント（ｐｏｉｎｔ）でのＲＰＣ呼び出しをインターセプト（又はキャプチャして）し、そしてインターセプトされたＲＰＣの呼び出しをＰＣＩｅトンネル３２０を介してＮＶＭｅＳＳＤ２２５に伝送するものであり、ＰＣＩｅトンネル３２０は、図２のプロセッサ２０５をＮＶＭｅＳＳＤ２２５に接続する。
【００５５】
以下で記述するように、ＲＰＣがキャプチャされるサーバ１０５のソフトウェアスタック内部に様々な場所がある。
本発明のもっとも良い実施形態では、ＲＰＣの結果（ＮＶＭｅＳＳＤ２２５によって実行された）は、同じポイントでのソフトウェアスタックに再び挿入される。
たとえば、ＲＰＣがＲＰＣクライアント（３１０−１又は３１０−２）とＲＰＣ層３１５との間でキャプチャされると、ＲＰＣの結果は、同じポイントのソフトウェアスタックに挿入されると予想されるであろう。
ＲＰＣは、ネットワークスタックの下でキャプチャされると、ＲＰＣの結果が同じポイントのソフトエアスタックに挿入されると予想されるであろう。
しかし、ＲＰＣ呼び出しの結果をソフトウェアスタックの同じ位置に挿入することが有用であるが、その結果が、その場所に挿入されることが要求されない。
このような選択は、単に対称性のための利便性（そして、より高い層のソフトウェアスタックに挿入される応答を追跡する、ソフトウェアスタックの任意の階層から誘発される任意の複雑度の回避）である。
したがって、ＲＰＣは、ソフトウェアスタックの一つの階層でキャプチャされ、そしてＲＰＣの結果は、ソフトウェアスタックの他の層に挿入することが可能である。
【００５６】
また、ＲＰＣをキャプチャするためにサーバ１０５内で複数の技術が並列的に使用されることに留意しなければならない。
たとえば、サーバ１０５は、ネットワークスタックの下でＲＰＣをキャプチャ（ＮＶＭｅＳＳＤに伝送される任意のＲＰＣが識別されることを保障するために）することができるが、また、アプリケーションからの新たなシステムコールの結果として使用される新しいトランスポート層の実装を提供する。
任意の与えられたサーバ１０５は、任意の数のＲＰＣキャプチャ技術を実行する。
【００５７】
任意の数の異なるＲＰＣキャプチャ技術を含み得るサーバ１０５をサポートするために、ＮＶＭｅＳＳＤ２２５は、サーバ１０５に実装されたことを反映したソフトウェアスタックを含む。
このような方式で、ＮＶＭｅＳＳＤ２２５は、ＲＰＣの結果がソフトウェアスタックの適切なポイントで返還されることを保障することができる。
このためには、ＮＶＭｅＳＳＤ２２５は、マイクロサービス（３４０−１、３４０−２）、ＲＰＣサーバ（３４５−１、３４５−２）、ＲＰＣ層３５０、ネットワークスタック３５５、並びにＰＣＩｅトンネル３２０を含む。
マイクロサービス（３４０−１、３４０−２）は、ＮＶＭｅＳＳＤ２２５によってサポートされる個々のサービスである。
【００５８】
図３は、二つのマイクロサービス（３４０−１、３４０−２）を示しているが、本発明の実施形態は、任意の数のマイクロサービス（３４０−１、３４０−２）を含む。
ＲＰＣサーバ（３４５−１、３４５−２）は、ＲＰＣクライアント（３１０−１、３１０−２）のミラー（ｍｉｒｒｏｒｓ）として動作し、各マイクロサービス（３４０−１、３４０−２）について一つずつのＲＰＣサーバ（３４５−１、３４５−２）を有する。
ＲＰＣサーバ（３４５−１、３４５−２）は、（究極的に）ＲＰＣを受信して、イン−ストレージプロセッサ（図３に図示せず）によって実行されるＲＰＣのパラメータをマイクロサービス（３４０−１、３４０−２）に伝達する。
ＲＰＣ層３５０と、ネットワークスタック３５５は、ソフトウェアスタックの隣接した層とインターフェースするために、適切なプロトコル情報を追加／削除することにより、ＲＰＣ層３１５及びネットワークスタック３３０と同じように機能する。
【００５９】
図４は、リモートプロシージャコール（ＲＰＣ）を図３のマイクロサービス（３４０−１）に伝送し、そしてＲＰＣの応答を受信する図３のアプリケーション（３０５−１）の動作を説明するための図である。
図４で、アプリケーション（３０５−１）は、ＲＰＣ４０５を発行する。
前述で説明したように、アプリケーション（３０５−１）は、ＲＰＣ４０５が図２のプロセッサ２０５によって処理されることを仮定し、ＲＰＣ４０５が、実際に、図２のＮＶＭｅＳＳＤ２２５によって究極的に処理されることを知ることができない。
図３に示したソフトウェアスタックのいくつかのポイントで、ＲＰＣ４０５は、キャプチャされて図２のＮＶＭｅＳＳＤに向けられ、最終的にはＲＰＣ４０５は、実行のためにマイクロサービス（３４０−１）に伝達される。
ＲＰＣ４０５を実行した後、マイクロサービス（３４０−１）は、結果４１０を生成し、その結果４１０は、アプリケーション（３０５−１）に再伝送される（例えば、アプリケーション（３０５−１）からマイクロサービス（３４０−１）にＲＰＣ４０５を「伝送」するために使用されたパスの逆に）。
【００６０】
図５は、図１のサーバ１０５の追加の詳細構成を示すブロック図である。
図５において、サーバ１０５は、プロセッサ２０５、メモリコントローラ２１０、メモリ２２０、アプリケーション３０５−１、オペレーティングシステム３３５、並びにＲＰＣキャプチャモジュール５０５を、備えるものとして示す。
プロセッサ２０５、メモリコントローラ２１０、及びメモリ２２０は、上記記述したとおり構成される。
アプリケーション（３０５−１）は、プロセッサ２０５で実行中であり得るし、オペレーティングシステム３３５と通信できるし、オペレーティングシステム３３５は、結果的に、図３に示したもののようなエレメントを含むことができる。
【００６１】
図３に示したオペレーティングシステム３３５と比較すると、図５のオペレーティングシステム３３５は、またＲＰＣキャプチャモジュール５０５を含む。
上記で説明したように、アプリケーション（３０５−１）によって発行されるＲＰＣは、図３のソフトウェアスタック内の任意の数の位置においてキャプチャされることができ、したがってＲＰＣキャプチャモジュールの具体的な実装は、位置に応じて異なる。
ＲＰＣキャプチャモジュール５０５は、プロセッサ２０５で実行されるソフトウェア（例えば、オペレーティングシステム３３５の一部又はプラグイン（ｐｌｕｇ−ｉｎ）として）として、適切なハードウェアで実行されているファームウェアとして、又は純粋なハードウェアモジュール（例えば、イーサネット（登録商標））フレームが配線を介して伝送される直前にキャプチャするように設計された）として実装される。
【００６２】
図６は、図３のアプリケーションによって発行された図４のＲＰＣ４０５がキャプチャされ得る図３のソフトウェアスタック内の多様な位置を示すブロック図である。
図６で、図３のソフトウェアスタックを再び示すが、図５のＲＰＣキャプチャモジュール５０５に対する一部の可能な実装を共に図に示す。
本発明の一実施形態で、図５のＲＰＣキャプチャモジュール５０５は、ＭｉｔＭ（Ｍａｎ−ｉｎ−ｔｈｅ−Ｍｉｄｄｌｅ）シム（ｓｈｉｍ）６０５として実装される。
ＭｉｔＭシム（ｓｈｉｍ）６０５は、ＲＰＣクライアント（３１０−２）によって伝送されるＲＰＣをキャプチャする。
ＭｉｔＭシム６０５は、その後でパス６１０を介して、図２のＮＶＭｅＳＳＤ２２５にＰＣＩｅトンネル３２０を経て伝送される、キャプチャされたＲＰＣをアレンジする。
【００６３】
ＭｉｔＭシム（ｓｈｉｍ）６０５を用いる利点は、図４のＲＰＣ４０５が非常に簡単にキャプチャされることである。
これは、図４のＲＰＣ４０５を処理するソフトウェアスタック（例えば、ＲＰＣ層３１５と、ネットワークスタック３３０）内の追加の層の要求を回避し、順番に図４のＲＰＣ４０５を処理するのに消費される時間の量を減らす。
ＭｉｔＭシム（ｓｈｉｍ）６０５を用いる欠点は、ＲＰＣクライアントによって処理されたＲＰＣがＰＣＩｅトンネル３２０を介して図２のＮＶＭｅＳＳＤ２２５に向けられるかに依存し、各ＲＰＣクライアント（３１０−１、３１０−２）が、それ自身のＭｉｔＭシム（ｓｈｉｍ）６０５を必要とするということであり、コードの複製を誘発する可能性がある（ＲＰＣクライアントが存在しているだけのＭｉｔＭシム（ｓｈｉｍ）６０５の複製が有り得る）。
【００６４】
本発明の他の実施形態で、図５のＲＰＣキャプチャモジュール５０５は、システムコール６１５を用いて実施される。
「Ｓｏｃｋｅｔ（）」、「Ｓｅｎｄｍｓｇ（）」、及び「Ｒｅｓｃｖｍｓｇ（）」のようなこれらのシステムコールは、多様なＲＰＣをパス６１０を介して、図２のＮＶＭｅＳＳＤ２２５に伝達することをサポートするように修正される。
【００６５】
本発明の一実施形態で、議論しているシステムコールは、オリジナル定義を新しい定義で代替するように実装される。
これらの再実装されたシステムコールは、その後でオペレーティングシステムにリンクされ、オリジナル実装の代わりに使用される。
たとえば、リナックス（登録商標））オペレーティングシステムで、「ＬＤ＿ＰＲＥＬＯＡＤ」の環境変数は、代替（置換）ライブラリがどこに位置するかを明示するために使用され、システムコールの再実装されたバージョンをフェッチすることができる。
これらの実装は、再実装されたシステムコールがすべてのＲＰＣを正確に管理できるようにすることを犠牲にして（一部はＰＣＩｅトンネル３２０を介して図２のＮＶＭｅＳＳＤ２２５に向けられることができ、他の一部は、通常のシステムでのように、ネットワークポート３２５を介して伝送されるため）、アプリケーションを変更したり、又はオペレーティングシステムを再構成する必要性を回避する。
【００６６】
本発明の他の実施形態において、議論しているシステムコールは、「ラップ」（ｗｒａｐ）され得る。
つまり、新しいシステムコールが定義され、オペレーティングシステムによって優先して呼び出される。
これらの新しいシステムコールは、その後、オリジナルシステムコール、又は図４のＲＰＣ４０５をＰＣＩｅトンネル３２０を介して伝送する特殊なシステムコールを呼び出せる。
オリジナルシステムコールがまだ使用されるため、このような実装は、より少ないコーディングを必要とし、オペレーティングシステムの再構成を必要とする（ラッパー（ｗｒａｐｐｅｒｓ）が、オリジナルシステムコールの代わりに、呼び出されなければならないから）。
【００６７】
本発明の他の実施形態で、図５のＲＰＣキャプチャモジュール５０５は、フレーム検査器６２０として実装される。
フレーム検査器６２０は、ネットワークスタック３３０によって生成されたイーサネット（登録商標））フレームをテストし、図４のＲＰＣ４０５を含むフレームを識別し、そしてこれらのフレームをパス６１０を介してＰＣＩｅトンネル３２０を経て伝送する。
図４のＲＰＣ４０５を含まないフレームは、平常通りネットワークポート３２５に伝送される。
フレーム検査器６２０は、フレームを「アンパック（ｕｎｐａｃｋ）」して、ＲＰＣをラップした多様なプロトコルを削除して、個々のフレームが図４のＲＰＣ４０５と関連付けられるかを判断する。
【００６８】
フレーム検査器６２０の利点は、ＲＰＣキャプチャモジュール５０５を実装するのにソフトウェアスタックに非常に少ない変化のみが必要だという点である。
フレーム検査器６２０の欠点は、すべてのフレームがＲＰＣを含むかを検査されるべきだというる点であり、これはＰＣＩｅトンネル３２０を介して図２のＮＶＭｅＳＳＤ２２５に向けられる図４のＲＰＣ４０５を含んでいないデータの処理を遅くする可能性があり、図４のＲＰＣ４０５は、ソフトウェアスタック内の複数のレベルを経験するため、図４のＲＰＣ４０５に対する応答レイテンシーを増加させる。
【００６９】
本発明の他の実施形態で、図５のＲＰＣキャプチャモジュール５０５は、新しいトランスポート層６２５として実装される。
つまり、新しいトランスポート層全体がパス６１０を介してＰＣＩｅトンネル３２０を経て、図２のＮＶＭｅＳＳＤ２２５に向けられる図４のＲＰＣ４０５を管理するように定義される。
新しいトランスポート層６２５を実装するように定義されうるコマンドの例は、上記の表１に示す。
【００７０】
新トランスポート層６２５を用いる利点は、図４のＲＰＣ４０５は、ソフトウェアスタックの非常に高いレベルでキャプチャされ、図４のＲＰＣ４０５を処理する図２のＮＶＭｅＳＳＤ２２５の応答レイテンシーを減らせることができる。
新しいトランスポート層６２５を利用する欠点は、ＲＰＣクライアント（３１０−１、３１０−２）が新しいトランスポート層６２５を使用するように修正される必要があり、単に図５のＲＰＣキャプチャモジュールを超えたソフトウェアスタックを修正することである。
【００７１】
図６は、単一のパス６１０を介してＰＣＩｅトンネル３２０と通信する本発明の様々な実施形態を示しているが、本発明の実施形態は、図４のＲＰＣ４０５をＰＣＩｅトンネル３２０に伝送するため、別のパスを使用する。
図６は、ＰＣＩｅトンネル３２０に到達する単に１つのパス６１０のみが存在し、そして本発明のすべての実施形態が、単一のパス６１０を利用しなければならないことを暗示する、とみなしてはならない。
【００７２】
上述のように、ソフトウェアスタックは、図４のＲＰＣ４０５がキャプチャされる複数のポイントを含む。
したがって、図６に示したソフトウェアスタックは、図５のＲＰＣキャプチャモジュール５０５のための任意の、又はすべての記述された実装（そして潜在的に前述で記述されていない別の実装）を含む。
ＲＰＣキャプチャモジュール５０５が、ソフトウェアスタックの異なる複数のポイントにおいて、キャプチャされた図４のＲＰＣ４０５をラップできることに基づいて、ＲＰＣキャプチャモジュール５０５は、複数の異なるデータ形式を、図３のＰＣＩｅトンネル３２０を介した伝送のためのメッセージでラップする。
【００７３】
なお、図３を参照して、前述で説明したように、図２のＮＶＭｅＳＳＤ２２５は、図３のソフトウェアスタックを反映したそれ自身のソフトウェアスタックを含む。
したがって、図２のＮＶＭｅＳＳＤ２２５は、ＲＰＣキャプチャモジュール５０５が実装される方法に対応する類似の要素を含み、図４のＲＰＣ４０５の図４の結果４１０を適切な位置で図３のサーバ１０５のソフトウェアスタックに再び挿入するのを助ける。
図２のＮＶＭｅＳＳＤ２２５のソフトウェアスタックに追加されるこれらのエレメントは、図６に示していないが、図６に示して前述したエレメントに対応して適切に理解される。
【００７４】
図７は、図３のＰＣＩｅトンネル３２０を経て、通信するために使用されるトンネルエージェント及びトンネルエージェントバッファを説明するための図である。
図７において、ＰＣＩｅトンネル３２０は、図２のホストプロセッサ２０５を図２のＮＶＭｅＳＳＤ２２５との再接続するものとして示す。
ＰＣＩｅトンネル３２０の双方の側にトンネルエージェントが存在する。
トンネルエージェント（７０５−１）は、図２のホストプロセッサ２０５の側に示し、トンネルエージェント（７０５−２）は、図２のＮＶＭｅＳＳＤ２２５の側に示す。
トンネルのエージェント（７０５−１、７０５−２）の動作は同じであり、（互いにミラーに映ったイメージ（ｍｉｒｒｏｒ  ｉｍａｇｅ）で動作する）、したがって共通のソフトウェア及び／又はハードウェアベース（ｂａｓｅ）を用いて実装される。
【００７５】
ＰＣＩｅトンネル３２０の各側は、またトンネルエージェントバッファを含む。
トンネルエージェントバッファ（７１０−１）は、図２のホストプロセッサ２０５の側に示し、トンネルエージェントバッファ（７１０−２）は、図２のＮＶＭｅＳＳＤ２２５の側に示す。
トンネルエージェントバッファ（７１０−１、７１０−２）は、メッセージがＰＣＩｅトンネル３２０を介して伝達されるメカニズムである。
以下でより説明するように、トンネルエージェントバッファ（７１０−１、７１０−２）は、ＰＣＩｅトンネル３２０の各側に物理的に位置することも、位置しないこともあり得るが、図に示した通り位置したように使用される。
トンネルエージェントバッファ（７１０−１、７１０−２）は、読み出しや、書き込み得るストレージとして、例えばメモリ又は他のストレージとして実装される。
トンネルエージェントバッファ（７１０−１、７１０−２）は、任意の必要なアプローチを利用して実装されうるが、メッセージは、先入れ先出し（ＦＩＦＯ：Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）の順に伝達されるべきことを念頭におく必要があり、例えば、リングバッファを用いて実装される。
【００７６】
トンネルエージェント（７０５−１、７０５−２）は、互いに知っているが、これらは、互いに部分的に動作することを理解する価値がある。
つまり、各トンネルエージェントは、トンネルエージェントバッファ（７１０−１、７１０−２）が、読み出し及び書き込みを行うことができる限り、トンネルエージェントバッファ（７１０−１、７１０−２）からのメッセージを読み出したり、メッセージを書き込むことができる。
たとえば、トンネルエージェントバッファに読み出すメッセージがなければ、トンネルエージェントバッファは、どのようなメッセージも読み出さない可能性がある。
トンネルエージェントバッファがフル（ｆｕｌｌ）になると、トンネルエージェントは、新しいメッセージを書き込まない可能性がある。
【００７７】
ＰＣＩｅトンネル３２０の観点から、ＰＣＩｅトンネル３２０の一側のトンネルエージェント及びトンネルエージェントバッファは、ローカルトンネルエージェントとローカルトンネルエージェントバッファと呼ばれ、そしてＰＣＩｅトンネル３２０の他側のトンネルエージェント及びトンネルエージェントバッファは、リモートトンネルエージェント及びリモートトンネルエージェントバッファと呼ばれる。
したがって、例えば、図２のホストプロセッサ２０５の側で、トンネルエージェント（７０５−１）及びトンネルエージェントバッファ（７１０−１）は、ローカルであり、トンネルエージェント（７０５−２）及びトンネルエージェントバッファ（７１０−２）は、リモートであり、図２のＮＶＭｅＳＳＤ２２５の側ではその逆が真である。
【００７８】
したがって、「ローカル」及び「リモート」の用語は、システムが示しているＰＣＩｅトンネル３２０の側に相対的である。
「ローカル」は、必ず「内部的」を意味するとみなしてはならない。
例えば、図９を参照して、以下で説明するように、ＰＣＩｅトンネル３２０のホスト側で、ＰＣＩｅトンネル３２０の共有バッファモデルを使用することができ、トンネルエージェントバッファ（７１０−１、７１０−２）の両方は、物理的に同じメモリ内にある。
特定のトンネルエージェントに「ローカル」のトンネルエージェントバッファがＰＣＩｅトンネル３２０の「リモート」側に物理的に位置することができるとしても、そのトンネルエージェントバッファは、まだ「ローカル」であると理解されるべきである。
【００７９】
各トンネルエージェント（７０５−１、７０５−２）は、トンネルエージェントバッファ（７１０−１、７１０−２）への２つのポインタを含む。
１つのポインタは、ローカルトンネルエージェントバッファからメッセージを読み出すために使用され、他のポインタは、リモートトンネルエージェントバッファにメッセージを書き込むために使用される。
これらのポインタは、これらのメッセージを読み書きするために使用されるのか、そしてこれらがローカル又はリモートトンネルエージェントバッファを指すのかに基づいて、命名されうる。
したがって、上記の表２に示しているネームを使用し、そしてトンネルエージェント（７０５−１）の観点を用いて、ポインタ（７１５−１）は、ＲＬポインタであり、ポインタ（７１５−２）は、ＲＲポインタであり、ポインタ（７２０−１）は、ＷＲポインタであり、ポインタ（７２０−２）は、ＷＬポインタである。
逆に、トンネルエージェント（７０５−２）の観点から、ポインタ（７１５−２）は、ＲＬポインタであり、ポインタ（７１５−１）は、ＲＲポインタであり、ポインタ（７２０−２）は、ＷＲポインタであり、ポインタ（７２０−１）はＷＬポインタである。
トンネルのエージェントのすべては、他のトンネルエージェントによって「所有された」ポインタの値にアクセスすることができる。
この時点から、ポインタは、図の参照符号ではなくネームにより参照される。
【００８０】
次に、トンネルエージェント（７０５−１）を検討する。
トンネルエージェント（７０５−１）は、ポインタのＲＬ及びＷＬの値を比較することにより、（ローカル）トンネルエージェントバッファ（７１０−１）から読み出すメッセージがあるか否かをチェックする。
値が同じであれば、読み出すメッセージがない。
そうでなければ、トンネルエージェント（７０５−１）は、メッセージを読み出し、ＲＬを更新する（メッセージのサイズに基づいて）。
【００８１】
トンネルエージェント（７０５−１）が（リモート）トンネルエージェントバッファ（７１０−２）にメッセージを書き込むことを望めば、トンネルエージェント（７０５−１）は、ポインタのＲＲ及びＷＲの値を比較することにより、メッセージを書き込む空間があるか否かをチェックする。
トンネルエージェントバッファ（７１０−２）のサイズ（現在のメッセージによって占有された空間を引いた（数学的には、ＳＩＺＥＲＴＡＢ−（ＷＲ−ＲＲ）ｍｏｄｕｌｏ  ＳＩＺＥＲＴＡＢ）がトンネルエージェント（７０５−１）が書き込もうとするメッセージのサイズよりも小さい場合、メッセージを書き込む空間が十分ではない。
そうでなければ、トンネルエージェント（７０５−１）は、メッセージを書き込んでＷＲを更新する（トンネルエージェント（７０５−２）は、同じように動作するが、どちらのトンネルエージェントバッファがローカル的と見なされるとか、リモート的と見なされるとかによって、他のポインタを使用する）。
【００８２】
メッセージ自体の観点から、メッセージを伝送するために使用される２つの方法がある。
本発明の一実施形態では、ローカルトンネルエージェントは、メッセージ７２５をリモートトンネルエージェントバッファに書き込む（完全に）ことができる。
しかし、メッセージのサイズが変化するため、このようなアプローチは、リモートトンネルエージェントバッファが個々のメッセージのための容量を有するか否かを判断するのにもっと複雑な方法を要求する。
本発明の他の実施形態では、ローカルトンネルエージェントは、メッセージ７２５を、いくつかの他の共有空間に書き込み、それからアドレス７３０をリモートトンネルエージェントバッファに書き込む。
アドレス７３０は、予測可能な（そして、一般的に一定の）サイズを有するため、アドレス７３０からメッセージ７２５を逆参照する複雑度が追加されるという犠牲を払って、リモートトンネルエージェントバッファは、「（ＷＲ＋ＳＩＺＥＭｅｓｓａｇｅ）＝＝ＲＲ（リモートトンネルエージェントバッファのサイズのｍｏｄｕｌｏ）」であるかどうかの単純な比較から、リモートトンネルエージェントバッファが別のメッセージのための容量を有するか否かを判断する（勿論、メッセージが常に一定のサイズであれば、メッセージ７２５は、リモートトンネルエージェントバッファに直接配置されるときにも、より単純な計算式を使用することができる）。
【００８３】
図８は、図７のトンネルエージェント７０５−１の詳細構成を示すブロック図である。
図８において、トンネルエージェント（７０５−１）は、メッセージラッパー８０５（ｍｅｓｓａｇｅ  ｗｒａｐｐｅｒ）、メッセージ伝送器８１０、容量チェック８１５、信号器８２０（ｓｉｇｎａｌｅｒ）、メッセージ受信器８２５、メッセージアンラッパー８３０（ｍｅｓｓａｇｅ  ｕｎｗｒａｐｐｅｒ）、受信器８３５、並びにポインタストレージ８４０を含むものとして示す。
【００８４】
メッセージラッパー８０５は、図３のＰＣＩｅトンネル３２０を介して伝達されるメッセージをラップする。
たとえば、メッセージが図３のアプリケーション（３０５−１）によって要請された図４のＲＰＣ４０５を含むと、メッセージラッパー８０５は、図４のＲＰＣ４０５を、適切なヘッダ情報（例えば、図５のＲＰＣキャプチャモジュール５０５が、図４のＲＰＣ４０５をどのポイントでキャプチャしたか、又はどのマイクロサービス（３４０−１又は３４０−２）が図４のＲＰＣを実行しようとするのかを明示する）とともに、それ自身のデータ構造に格納する。
メッセージ伝送器８１０は、メッセージをリモートトンネルエージェントバッファに配置する。
メッセージ伝送器８１０は、また、容量チェック８１５を用いて、リモートトンネルエージェントバッファがメッセージのための容量を有するか否かを確認する責任がある（前述したように。）。
【００８５】
リモートトンネルエージェントバッファがメッセージのための容量を有しなければ、メッセージ伝送器８１０は、リモートトンネルエージェントバッファがメッセージを格納する容量を有するまで、メッセージの伝送を待機する（そして、任意の後続のメッセージも伝送されることを待機）。
最終的に、本発明の一実施形態で、（ローカル）トンネルエージェント（７０５−１）は、図７の（リモート）トンネルエージェントバッファ（７１０−２）に新しいメッセージが配置されていることを、図７の（リモート）トンネルエージェント（７０５−２）に通知する（ｓｉｇｎａｌ）信号器８２０を含む。
例えば、信号器８２０は、新しいメッセージが読み出されるのを待っている（リモート）トンネルエージェントに割り込み（ｉｎｔｅｒｒｕｐｔ）信号を伝送する。
【００８６】
メッセージ受信器８２５は、ローカルトンネルエージェントバッファからメッセージを読み出す。
メッセージアンラッパー８３０は、読み出されたメッセージをアンラップして、コンテンツを抽出する。
たとえば、メッセージが図４の結果４１０であれば、メッセージアンラッパー８３０は、メッセージから図４の結果４１０を抽出し、そして図２のホストプロセッサ２０５が、図４のＲＰＣ４０５を実行したかのように図４の結果４１０を図３のアプリケーション（３０５−１）に伝達する。
最終的に、本発明の一実施形態で、（ローカル）トンネルエージェント（７０５−１）は、図７の（ローカル）トンネルエージェントバッファ（７１０−１）に新しいメッセージが配置されたときに、図７の（リモート）トンネルエージェント（７０５−２）から信号を受信する受信器８３５を含む。
受信器８３５が含まれていなければ、トンネルエージェント（７０５−１）は、ローカルトンネルエージェントバッファを周期的に（任意の必要な間隔で）調査して、読み出すべき新しいメッセージがあるか否かを見ることができる。
最後に、ポインタストレージ８４０は、トンネルエージェント（７０５−１）によって「所有された」ローカルポインタの値を格納する。
【００８７】
図９は、ＤＭＡエンジン及び図７のトンネルエージェントバッファ（７１０−１、７１０−２）の可能な配置を説明するための図である。
図７を参照して、前述で説明したように、トンネルエージェントバッファ（７１０−１、７１０−２）は、図３のＰＣＩｅトンネル３２０の相対的な側に対しローカルと見なされるが、その側に物理的に位置しなければならない必要はない。
本発明の一実施形態で、トンネルエージェントバッファ（７１０−１、７１０−２）の両方は、これらが論理的に図３のＰＣＩｅトンネル３２０の分離された側にあると見なされても、物理的に図３のＰＣＩｅトンネル３２０の同じ側に有り得る。
例えば、ＮＶＭｅＳＳＤ２２５は、トンネルエージェントバッファ（７１０−１、７１０−２）の両方を含む共有バッファをサポートしているメモリ（以下、図１０にて示す）を含む。
つまり、共有バッファは、トンネルエージェント（７０５−２）（ＮＶＭｅＳＳＤ２２５上の）及びトンネルエージェント（７０５−１）（図２のホストプロセッサ２０５側の）の両方により書き込まれ、読み出される。
【００８８】
共有バッファを含む側は、何の問題もなく共有バッファにデータを書き込み、読み出す。
一方、他側は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）エンジンを用いて、共有バッファにアクセスすることができる（ローカルトンネルエージェントバッファからメッセージを読み出すか、又はリモートトンネルエージェントバッファにメッセージを書き込む）。
したがって、共有バッファがＮＶＭｅＳＳＤ２２５に含まれる場合、図２のホストプロセッサ２０５は、共有バッファにアクセスするためのＤＭＡエンジン（９０５−１）を含む。
共有バッファがメモリ２２０に含まれると、ＮＶＭｅＳＳＤ２２５は、共有バッファにアクセスするためのＤＭＡエンジン（９０５−２）を含む。
【００８９】
共有バッファがＮＶＭｅＳＳＤ２２５の一部であるメモリにある場合、図２のホストプロセッサ２０５は、図２のホストプロセッサ２０５とＮＶＭｅＳＳＤ２２５との間のすべてのメッセージを移す負担を耐えられる。
この配置は、図２のホストプロセッサ２０５に追加の負担を与えるので、最適ではない。
代わりに、共有バッファを（ホスト）メモリ２２０に配置することにより、図２のホストプロセッサ２０５は、メッセージを移すＰＣＩｅトランザクションを実行する負担を免れ、図２のホストプロセッサ２０５が、他のタスク（ｔａｓｋ）を実行するように自由にする。
【００９０】
共有バッファとＤＭＡエンジン（９０５−１及び／又は９０５−２）を図３のＰＣＩｅトンネル３２０の同じ側に有することも可能である。
言い換えると、ＤＭＡエンジン（９０５−１及び／又は９０５−２）は、共有バッファの物理的な位置と独立して、図３のＰＣＩｅトンネル３２０のどちらにも配置され得る。
たとえば、共有バッファ及びＤＭＡエンジン（９０５−２）の両方は、ＮＶＭｅＳＳＤ２２５の一部であり、ＮＶＭｅＳＳＤ２２５は、ＤＭＡエンジン（９０５−２）を用いて、図２のホストプロセッサ２０５によって使用されるために、図２のメモリ２２０にメッセージを移動する責任が有り得る。
【００９１】
図１０は、図２のＮＶＭｅＳＳＤ２２５の詳細構成を示すブロック図である。
図１０に、ＮＶＭｅＳＳＤ２２５は、インターフェース１００５、ホストインターフェースロジック１０１０、ＳＳＤコントローラ１０１５、様々なチャネル（１０２５−１〜１０２５−４）に組織化される様々なフラッシュメモリチップ（１０２０−１〜１０２０−８）を含む。
インターフェース１００５は、図１のサーバ１０５に対する物理的なインターフェース、特にＮＶＭｅＳＳＤ２２５のＰＣＩｅ接続ポイントである。
ホストインターフェースロジック１０１０は、ＮＶＭｅＳＳＤ２２５と、図１のサーバ１０５との間の通信を管理する。
ＳＳＤコントローラ１０１５は、フラッシュメモリチップ（１０２０−１〜１０２０−８）に対する読み出し及び書き込みの動作とともにガービッジコレクションと他の動作を管理する。
図１０は、ＮＶＭｅＳＳＤ２２５が、４つのチャンネル（１０２５−１〜１０２５−４）に組織化される８つのフラッシュメモリチップ（１０２０−１〜１０２０−８）を含むものとして示すが、本発明の実施形態は、任意の数のチャンネルに組織化される任意の数のフラッシュメモリチップをサポートする。
【００９２】
ＳＳＤコントローラ１０１５は、フラッシュ変換階層１０３０を含む。
フラッシュ変換階層１０３０は、図１のサーバ１０５によって使用される論理ブロックアドレス（ＬＢＡ）をＮＶＭｅＳＳＤ２２５に格納されたデータの物理ブロックアドレス（ＰＢＡ）に変換する通常の機能を実行する。
ＳＳＤコントローラ１０１５は、またイン−ストレージプロセッサ１０３５を含む。
イン−ストレージプロセッサ１０３５は、前述したように、様々なプロセッサであり、ＮＶＭｅＳＳＤ２２５に提示した図３のマイクロサービス（３４０−１、３４０−２）を実行する。
図１０は、ＳＳＤコントローラ１０１５の一部としてイン−ストレージプロセッサ１０３５を示しているが、本発明の実施形態は、ＮＶＭｅＳＳＤ２２５の内部のどこにでも配置されるイン−ストレージプロセッサを含む。
【００９３】
最後に、ＳＳＤコントローラ１０１５は、メモリ１０４０を含む。
図１０を参照して、説明したように、ＮＶＭｅＳＳＤ２２５は、図７のトンネルエージェントバッファ（７１０−１及び／又は７１０−２）を格納するメモリを含む。
メモリ１０４０は、図７のトンネルエージェントバッファ（７１０−１及び／又は７１０−２）を格納するために使用される。
トンネルエージェントバッファ（７１０−２）が図２のメモリ２２０で管理される場合、ＳＳＤコントローラ１０１５は、また、図９のＤＭＡエンジン（９０５−２）（図１０に図示されずに）を含み、図７のトンネルエージェントバッファ（７１０−１）とトンネルエージェントバッファ（７１０−２）との間の図３のＰＣＩｅトンネル３２０を介してメッセージが移動するようにする。
【００９４】
図１１は、本発明の実施形態による図１のサーバ（１０５−１）が図３のアプリケーション（３０５−１）からの図４のＲＰＣ４０５をインターセプトし、図２のＮＶＭｅＳＳＤ２２５に伝送する例を説明するためのフローチャートである。
図１１において、ステップＳ１１０５で、図５のＲＰＣキャプチャモジュール５０５は、図３のアプリケーション（３０５−１）によって伝送された図４のＲＰＣ４０５をキャプチャし、図４のＲＰＣ４０５を図７のトンネルエージェント（７０５−１）に伝達する。
【００９５】
ステップＳ１１１０で、図７のトンネルエージェント（７０５−１）は、図４のＲＰＣ４０５を図７のメッセージ７０５として、図７のトンネルエージェント（７０５−１）に伝達する。
ステップＳ１１１５で、図７のトンネルエージェント（７０５−１）は、図７のトンネルエージェント（７０５−２）から図４のＲＰＣ４０５に対する図４の結果４１０を受信する。
ステップＳ１１２０で、トンネルエージェント（７０５−１）は、図２のホストプロセッサ２０５が図４のＲＰＣ４０５を実行したかのように、図４の結果４１０を図３のアプリケーション（３０５−１）に伝達する。
【００９６】
図１２Ａ及び図１２Ｂは、図１のサーバ（１０５−１）が図３のアプリケーション（３０５−１）から図４のＲＰＣ４０５をキャプチャする例を説明するためのフローチャートである。
図１２Ａ、１２Ｂを参照すると、ステップＳ１２０５で、図６のＭｉｔＭシム（ｓｈｉｍ）６０５は、図４のＲＰＣ４０５をキャプチャして図７のトンネルエージェント（７０５−１）に伝達し、図３のＰＣＩｅトンネル３２０を介して伝送する。
ステップＳ１２１０で、図６のＭｉｔＭシム（ｓｈｉｍ）は、図７のトンネルエージェント（７０５−１）から図４の結果４１０を受信して図３のアプリケーション（３０５−１）に伝達する。
【００９７】
代案として、ステップＳ１２１５で、図３のＲＰＣクライアント（３１０−１）は、図４のＲＰＣ４０５を呼び出すのに使用されるが、代わりに図４のＲＰＣ４０５を図７のトンネルエージェント（７０５−１）に伝達して図３のＰＣＩｅトンネル３２０を介して伝送できる図６のシステムコール６１５を生成する。
ステップＳ１２２０で、図７のトンネルエージェント（７０５−１）は、図４の結果４１０を図３のＲＰＣクライアント（３１０−１）に返還する図６の他のシステムコール６１５を生成する。
【００９８】
代案として、ステップＳ１２２５（図１２Ｂ）で、図６のフレーム検査器６２０は、フレームをチェックして、図４のＲＰＣ４０５を見つける。
ステップＳ１２３０で、図６のフレーム検査器６２０は、フレームが図４のＲＰＣ４０５を含むかどうかを判断する。
含まなければ（矢印いいえ）、その後、図６のフレーム検査器６２０は、フレームを配線に置く（又はソフトウェアスタックの他層に伝達する）。
しかし、フレームが図４のＲＰＣ４０５を含む場合（矢印はい）、その後、ステップＳ１２３５で、図６のフレーム検査器６２０は、フレームを図７のトンネルエージェント（７０５−１）に伝達し、図３のＰＣＩｅトンネル３２０を介して伝送する。
最終的に、ステップＳ１２４０で、図６のフレーム検査器６２０は、図４の結果４１０を含むフレームを検査し、ソフトウェアスタック、究極的には、図３のアプリケーション（３０５−１）に再び伝達する。
【００９９】
代案として、ステップＳ１２４５で、図３のＲＰＣクライアント（３１０−１）は、図６の新しいトランスポート層コマンド６２５を利用して、図４のＲＰＣ４０５を図７のトンネルエージェント（７０５−１）に伝達して、図３のＰＣＩｅトンネル３２０を介して伝送する。
ステップＳ１２５０で、図７のトンネルエージェント（７０５−１）は、図６の新しいトランスポート層コマンドを遂行して図４の結果４１０を、図３のＲＰＣクライアント（３１０−１）（その時から図３のアプリケーション（３０５−１）に）に返還する。
【０１００】
図１３は、図７のトンネルエージェント（７０５−１）が図７のメッセージ７２５を図７のトンネルエージェント（７０５−１）に伝送する例を説明するためのフローチャートである。
図１３に先立ち、いくつかの点（ｐｏｉｎｔ）で、図７のトンネルエージェント（７０５−１）は、図５のＲＰＣキャプチャモジュール５０５から図４のＲＰＣ４０５を受信した。
【０１０１】
図１３を参照すると、ステップＳ１３０５で、図８のメッセージラッパー８０５は、図４のＲＰＣ４０５を図７のメッセージ７２５内にラップする。
ステップＳ１３１０で、図８の容量チェック８１５は、図７のトンネルエージェントバッファ（７１０−２）が図７のメッセージ７２５のための容量を有するかどうかをチェックする。
有しない場合（いいえの矢印）、矢印１３１５で示すように、図７のトンネルエージェント（７０５−１）は、図７のトンネルエージェントバッファ（７１０−２）が図７のメッセージ７２５のための容量を有することを図８の容量チェック８１５が判断するまで図７のメッセージ７２５を待機（ｈｏｌｄ）する。
図７のメッセージ７２５の待機は、図７のトンネルエージェント（７０５−１）がブロックすることを暗示しない。
図７のトンネルエージェント（７０５−１）は、図７のトンネルエージェントバッファ（７１０−２）が図７のメッセージ７２５のための容量を有することを待っている間、他の動作を実行する。
例えば、図７のトンネルエージェント（７０５−１）は、図７のトンネルエージェントバッファ（７１０−１）から読み出されたメッセージを処理する。
【０１０２】
図７のトンネルエージェントバッファ（７１０−２）が図７のメッセージ７２５のための容量を有すると図８の容量チェック８１５が判断した場合（はいの矢印）、その後、ステップＳ１３２０で、図８のメッセージ伝送器８１０は、図７のメッセージ７２５を図７のトンネルエージェントバッファ（７１０−２）に書き込む。
ステップＳ１３２５で、図８の信号器８２０は、図８のメッセージ７２５が図７のトンネルエージェントバッファ（７１０−２）に書き込まれたことを、図７のトンネルエージェント（７０５−２）に信号を送る。
破線１３３０で示すように、ステップＳ１３２５は、省略され得る。
【０１０３】
図１４は、図７のトンネルエージェント（７０５−１）が図７のトンネルエージェント（７０５−２）から図７のメッセージ７２５を受信する例を説明するためのフローチャートである。
図１４を参照すると、ステップＳ１４０５で、図８の受信器８３５は、図７のメッセージ７２５が、図７のトンネルエージェントバッファ（７１０−１）に書き込まれたことを知らせる信号を、図７のトンネルエージェント（７０５−２）から受信する。
代案として、ステップＳ１４１０ブロックで、図７のトンネルエージェント（７０５−１）は、図７のトンネルエージェントバッファ（７１０−１）が処理するメッセージを有するまで図７のトンネルエージェントバッファ（７１０−１）を調査する。
いずれにせよ、ステップＳ１４１５で、図８のメッセージ受信器８２５は、図７のトンネルエージェントバッファ（７１０−１）から図７のメッセージ７２５を読み取る。
ステップＳ１４２０で、図８のメッセージアンラッパー８３０は、図７のメッセージ７２５から図４の結果４１０をアンラップし、その後、トンネルエージェント（７０５−１）は、図４の結果４１０を図３のアプリケーション（３０５−１）に向けて再伝送する。
【０１０４】
図１５は、本発明の一実施形態による図２のＮＶＭｅＳＳＤ２２５が図１のサーバ（１０５−１）からの図４のＲＰＣ４０５を処理する例を説明するためのフローチャートである。
図１５を参照すると、ステップＳ１５０５で、図２のＮＶＭｅＳＳＤ２２５は、図１のサーバ（１０５−１）から図３のＰＣＩｅトンネル３２０を介して、図４のＲＰＣ４０５を受信する。
ステップＳ１５１０で、図１０のイン−ストレージプロセッサ１０３５は、図３のマイクロサービス（３４０−１）又は（３４０−２）に基づいて、図４のＲＰＣ４０５を実行する。
最終的に、ステップＳ１５１５で、図２のＮＶＭｅＳＳＤ２２５は、図４の結果４１０を図３のＰＣＩｅトンネル３２０を介して、図１のサーバ（１０５−１）に再伝送する。
【０１０５】
図１６Ａ及び図１６Ｂは、図２のＮＶＭｅＳＳＤ２２５が図３のＰＣＩｅトンネル３２０を介して図４のＲＰＣ４０５を受信する例を説明するためのフローチャートである。
図３を参照して説明したように、図２のＮＶＭｅＳＳＤ２２５は、図１のサーバ（１０５−１）のソフトウェアスタックに示したものに対応する構成要素を有し、図３のＰＣＩｅトンネル３２０を介して受信されるメッセージを処理する。
図２のＮＶＭｅＳＳＤ２２５が有し得るこれらの構成要素への参照は、以下において、図１のサーバ（１０５−１）のソフトウェアスタックのものと同じ参照符号で指定する。
【０１０６】
図１６Ａ、１６Ｂを参照すると、ステップＳ１６０５で、図７のトンネルエージェント（７０５−２）は、図３のＰＣＩｅトンネル３２０を介して図４のＲＰＣ４０５を含む図７のメッセージ７２５を受信し、図４のＲＰＣ４０５を図６のＭｉｔＭシム（ｓｈｉｍ）６０５に伝達する。
その後、ステップＳ１６１０で、図６のＭｉｔＭシム（ｓｈｉｍ）６０５は、図７のトンネルエージェント（７０５−２）が、図４の結果４１０を図７のメッセージ７２５にラップし、図７のメッセージを図３のＰＣＩｅトンネル３２０を介して再伝送するように、図４の結果４１０を図７のトンネルエージェント（７０５−２）に伝送する。
【０１０７】
代案として、ステップＳ１６１５で、図３のＲＰＣサーバ（３４５−１）は、図７のトンネルエージェント（７０５−２）で図３のＰＣＩｅトンネル３２０を介して図７のメッセージ７２５として受信し、図３のマイクロサービス（３４０−１）を呼び出して、図４のＲＰＣ４０５を実行するのに使用される図６のシステムコール６１５を受信する。
その後、ステップＳ１６２０で、図３のＲＰＣサーバ（３４５−１）は、図３のＰＣＩｅトンネル３２０を介して伝送される図７のメッセージ７２５でラップするために、図６の他のシステムコール６１５を生成して、図４の結果４１０を図７のトンネルエージェント（７０５−２）に返還する。
【０１０８】
代案として、ステップＳ１６２５（図１６Ｂ）で、図６のフレーム検査器６２０は、図４のＲＰＣ４０５を含むフレームを図７のトンネルエージェント（７０５−２）から受信し、フレームは図７のメッセージでラップされて、図３のＰＣＩｅトンネル３２０を介して受信する。
その後、ステップＳ１６３０で、図６のフレーム検査器は、図７のメッセージ７２５で包装されて図３のＰＣＩｅトンネル３２０を介して伝送される結果を含むフレームを図７のトンネルエージェント（７０５−２）に伝送する。
【０１０９】
図１のサーバ（１０５−１）のソフトウェアスタックと比較すると、図２のＮＶＭｅＳＳＤ２２５は、イーサネット（登録商標）フレームを正常に伝送・受信していないため、（図２のＮＶＭｅＳＳＤ２２５は、イーサネット（登録商標）データを正常に伝送・受信せずに、イーサネット（登録商標）ポートさえも有しないため）、図２のＮＶＭｅＳＳＤ２２５の一部である場合、図６のフレーム検査器６２０は、イーサネット（登録商標）フレームを検査する必要がない。
これらは、すべて図４のＲＰＣ４０５又は図４の結果４１０を含む。
しかし、図２のＮＶＭｅＳＳＤ２２５が、イーサネット（登録商標）通信を直接サポートできる本発明の実施形態で、フレーム検査器６２０は、ステップＳ１６２５及びステップＳ１６３０で記述したように、図１のサーバ（１０５−１）内で動作（図１２Ｂを参照して、前述したように）するときの、図６のフレーム検査器６２０と同様に動作するように修正される。
【０１１０】
代案として、ステップＳ１６３５で、図３のＲＰＣサーバ（３４５−１）は、図７のトンネルエージェント（７０５−２）が図３のＰＣＩｅトンネル３２０を介して図７のメッセージ７２５として受信した図４のＲＰＣ４０５を実行するために、図３のマイクロサービス（３４０−１）を呼び出して使用される新しいトランスポート層コマンド６２５を図７のトンネルエージェント（７０５−２）から受信する。
次に、ステップＳ１６４０で、図３のＲＰＣサーバ（３４５−１）は、図７のメッセージ７２５でラップされ、図３のＰＣＩｅトンネル３２０を介して伝送されるための図４の結果４１０を図７のトンネルエージェント（７０５−２）に返還する図６の新しいトランスポート層コマンド６２５を生成する。
【０１１１】
図１７は、図７のトンネルエージェント（７０５−２）が図７の他のトンネルエージェント（７０５−１）から図７のメッセージ７２５を受信する例を説明するためのフローチャートである。
図１７を参照すると、ステップＳ１７０５で、図８の受信器８３５は、図７のメッセージ７２５が、図７のトンネルエージェントバッファ（７１０−２）に書き込まれたことを知らせる信号を、図７のトンネルエージェント（７０５−１）から受信する。
代案として、ステップＳ１７１０で、図７のトンネルエージェント（７０５−２）は、図７のトンネルエージェントバッファ（７１０−２）が処理するメッセージを有するまで図７のトンネルエージェントバッファ（７１０−２）をポーリングする。
いずれにせよ、ステップＳ１７１５で、図８のメッセージ受信器８２５は、図７のトンネルエージェントバッファ（７１０−２）から図７のメッセージ７２５を読み出す。
ステップＳ１７２０で、図８のアンラッパー８３０は、図７のメッセージ７２５から図４のＲＰＣ４０５をアンラップし、それからトンネルエージェント（７０５−２）は、図４のＲＰＣ４０５を図２のＮＶＭｅＳＳＤ２２５のソフトウェアスタック内のＲＰＣキャプチャモジュール５０５と類似したのものに伝送する。
【０１１２】
図１８は、図７のトンネルエージェント（７０５−２）が図７のメッセージ７２５を図７のトンネルエージェント（７０５−１）に伝送する例を説明するためのフローチャートである。
図１８の前に、いくつかのポイントにおいて、図７のトンネルエージェント（７０５−１）は、図２のＮＶＭｅＳＳＤ２２５のソフトウェアスタック内の図５のＲＰＣキャプチャモジュール５０５と類似したものから図４の結果４１０を受信した。
【０１１３】
図１８を参照すると、ステップＳ１８０５で、図８のメッセージラッパーは、図４の結果４１０を図７のメッセージ７２５でラップする。
ステップＳ１８１０で、図８の容量チェック８１５は、図７のトンネルエージェントバッファ（７１０−１）が図７のメッセージ７２５のための容量を有しているかどうかを確認するためチェックする。
有していない場合（矢印いいえ）、矢印１８１５で示すように、図７のトンネルエージェント（７０５−２）は、図７のトンネルエージェントバッファ（７１０−１）が図７のメッセージ７２５のための容量を有すると判断するまで図７のメッセージ７２５を待機する。
図７のメッセージ７２５を待機することは、図７のトンネルエージェント（７０５−２）がブロックすることを暗示していない。
図７のトンネルエージェント（７０５−２）は、図７のトンネルエージェントバッファ（７１０−１）が図７のメッセージ７２５のための容量を有するのを待っている間、他の動作を実行する。
例えば、図７のトンネルエージェント（７０５−２）は、図７のトンネルエージェントバッファ（７１０−２）から読み出されたメッセージを処理する。
【０１１４】
図７のトンネルエージェントバッファ（７１０−１）が図７のメッセージ７２５のための容量を有すると図８の容量チェック８１５が判断した場合（矢印はい）、その時からステップＳ１８２０で、図８のメッセージ伝送器８１０は、図７のメッセージ７２５を図７のトンネルエージェントバッファ（７１０−１）に書き込む。
ステップＳ１８２５で、図８の信号器８２０は、図７のメッセージ７２５が、図７のトンネルエージェントバッファ（７１０−１）に書き込まれたことを、図７のトンネルエージェント（７０５−１）に信号を送る。
破線１８３０で示すように、ステップＳ１８２５は省略され得る。
【０１１５】
図１１〜図１８に、本発明の実施形態を示した。
しかし、この分野に熟練した者は、工程の順番を変えることで、工程を省略することにより、又は図に示していないリンクを含むことにより、本発明の他の実施形態又は可能であることを理解するであろう。
これらの様々なフローチャートのすべては明示的に記述されたり、記述されなかったりしても、本発明の実施形態と見なされる。
【０１１６】
本発明の実施形態は、先行技術よりも技術的な利点を提供する。
ＲＰＣを図２のＮＶＭｅＳＳＤ２２５にオフロード（ｏｆｆｌｏａｄ）することにより、図２のホストプロセッサ２０５の処理負荷が減少して、図２のホストプロセッサ２０５が、他のコマンドを実行することが許容される。
なお、図５のＲＰＣキャプチャモジュール５０５を使用することにより、図１のサーバ（１０５−１）のソフトウェアスタックに相対的に最小限変更しながら、図３のアプリケーション（３０５−１、３０５−２）を修正する必要がなく、ＲＰＣ処理を図２のＮＶＭｅＳＳＤ２２５にオフロードすることが可能である。
したがって、現在のアプリケーションは、図２のＮＶＭｅＳＳＤ２２５が、図４のＲＰＣ４０５を実行することを知らずに、図２のＮＶＭｅＳＳＤ２２５で、図４のＲＰＣ４０５が実行されるメリットを得る。
【０１１７】
次の議論は、本発明の技術的思想の特定の側面が実装されうる適切なマシン又はマシンの簡潔で一般的な説明を提供することを意図する。
マシン又は複数のマシンは、少なくとも一部分、キーボード、マウスなどのような通常の入力装置からの入力だけでなく、他のマシンから受信される指示、仮想現実（ＶＲ）環境との相互作用、生体フィードバック、又は他の入力信号によって制御される。
ここで使用するように、「マシン」の用語は、単一のマシン、仮想マシン、又はともに動作する通信的に結合されたマシン、仮想マシン、又は装置のシステムを広く含むものと意図する。
模範的なマシンは、パーソナルコンピュータ、ワークステーション、サーバ、ポータブルコンピュータ、ハンドヘルド装置、電話機、タブレットのようなコンピューティング装置だけではなく、自動車、電車、タクシーのようなパーソナル又は公共の輸送のような輸送装置を含む。
【０１１８】
マシン又は複数のマシンは、プログラム可能な、又はプログラム可能ではない論理装置、アレイ、特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ：ＡＳＩＣｓ）、エンベデッドコンピュータ、スマートカードのようなエンベデッドコントローラを含む。
マシン又は複数のマシンは、ネットワークインターフェース、モデム、又は他の通信連結などの１つ以上の多くの接続を活用して、一つ以上の多くのリモートマシンを利用できる。
マシンは、イントラネット、インターネット、ローカル地域ネットワーク、広域ネットワークになどのような物理的及び／又は論理的なネットワークの方法によって互いに接続され得る。
この分野における熟練した者は、ネットワーク通信が、無線周波数（ＲＦ）、衛星、マイクロウェーブ、ＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ）８０２．１１、ブルートゥース（登録商標）、光学、赤外線、ケーブル、レーザーなどを含む、多様な有線及び／又は無線の短距離又は長距離キャリアとプロトコルを活用できることを理解するはずである。
【０１１９】
本発明の実施形態が、マシンによってアクセスされた際にマシンがタスクを実行したり、抽象データ型又は低レベルのハードウェアコンテキストを定義することを誘発する関数、プロシージャ、データ構造、アプリケーションプログラムなどを含むデータを参照したり、又はこれと共に記述されたりする。
関連付けられたデータは、例えば、揮発性及び／又は不揮発性メモリ（例えば、ＲＡＭ、ＲＯＭ等）、又は他のストレージ装置とそれらの関連したストレージ媒体（ハードディスクドライブ、フロッピーディスク（登録商標）、光学ストレージ、テープ、フラッシュメモリ、メモリスティック（登録商標）、デジタルビデオディスク、生体ストレージなどを含む）に格納される。
関連付けられたデータは、物理的及び／又は論理的ネットワークを含む伝送環境を通じて、パケット、シリアルデータ、パラレルデータ、伝送信号などの形で伝達され得、圧縮又は暗号化された形で使用することができる。
関連付けられたデータは、分散環境で使用することができ、そしてマシンへのアクセスにローカルに及び／又はリモートで格納され得る。
【０１２０】
本発明の実施形態は、１つ又はそれより多くのプロセッサによって実行可能であり、そしてここに記述した技術的思想のエレメントを遂行するコマンドを含む、実在する（ｔａｎｇｉｂｌｅ）、非一時的（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ）、マシンに読み出し可能な（ｍａｃｈｉｎｅ−ｒｅａｄａｂｌｅ）媒体を含む。
【０１２１】
前述した方法の多様な動作は、多様なハードウェア及び／又はソフトウェアの構成要素、回路、及び／又はモジュールのような、動作を実行できる任意の適切な手段によって実行される。
ソフトウェアは、論理関数を実施するための実行可能なコマンドの順に記載されたリストを含むことができ、単一又は多重コアプロセッサ又はプロセッサを含むシステムのようなコマンドを実行システム又は装置によって使用されるために、又は接続されるために、「プロセッサにより読み出し可能な媒体」に実装され得る。
【０１２２】
ここで記述された実施形態と関連して記述された方法又はアルゴリズム、及び関数のブロック又はステップは、ハードウェアに直接、プロセッサによって実行されるソフトウェアモジュールに、又はそれらの組み合わせで実装される。
ソフトウェアで実装されると、関数は、一つ以上の多くのコマンド又はコードとして、実在する非一時的コンピュータで読み出し可能な媒体に格納・伝送される。
ソフトウェアモジュールは、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、レジスタ、ハードディスク、専用の取り外し可能ディスク、ＣＤ−ＲＯＭ、又はこの分野に知られている他の形態のストレージ媒体に存在し得る。
【０１２３】
図に示した実施形態を参照して、本発明の技術的思想の原理を記述して説明したが、図に示した実施形態は、このような原理から離れずに配列と詳細で修正することができ、任意の必要な方法で組み合わせられることを理解するであろう。
前の議論は具体的な実施形態に集中したが、他の構成も考慮することができる。
具体的には、「本発明の実施形態による」などのような表現をここで使用したが、これらの表現は、一般的に実施形態の可能性を意味し、本発明の技術的思想が具体的な実施形態の構成に限定することを意図しない。
ここで使用したように、これらの用語は、他の実施形態と組み合わせ可能な同一又は他の実施形態を参照することができる。
【０１２４】
上記した例としての実施形態は、ここの技術的思想を制限するものと解釈されてはならなない。
いくつかの実施形態を記述したが、この分野における熟練した者は、本記載の新規な教え及び利点から実質的に離れずに、これらの実施形態に多くの修正が可能であることを十分に理解するであろう。
したがって、これらのすべての修正は、請求項に定義されたように、本発明の技術的思想の範囲内に含まれるものと意図される。
【０１２５】
本発明の実施形態は、限定されず、以下のステートメントに拡張される。
ステートメント１。本発明の一実施形態は、ホストを含む。
ホストは、ホストプロセッサと、メモリと、ホストプロセッサ上で実行されるオペレーティングシステムと、ホストプロセッサ上のオペレーティングシステム下で実行され、リモートプロシージャコール（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ：ＲＰＣ）を含むアプリケーションと、不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）へのＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルと、アプリケーションからのＲＰＣをキャプチャし、ＲＰＣの結果をホストプロセッサからのように、アプリケーションに伝達するオペレーティングシステム内のＲＰＣキャプチャモジュールと、を備え、ＮＶＭｅＳＳＤは、ＲＰＣを実行して、結果を生成する。
【０１２６】
ステートメント２。本発明の一実施形態は、ステートメント１によるホストを含み、ＲＰＣキャプチャモジュールは、ＭｉｔＭ（Ｍａｎ  ｉｎ  ｔｈｅ  Ｍｉｄｄｌｅ）シム（ｓｈｉｍ）を含む。
ステートメント３。本発明の一実施形態は、ステートメント１によるホストを含み、ＲＰＣキャプチャモジュールは、アプリケーションからＲＰＣをキャプチャする第１システムコールは、ＰＣＩｅトンネルを介してＮＶＭｅＳＳＤからＲＰＣの結果を受信する第２システムコールを含む。
ステートメント４。本発明の一実施形態は、ステートメント３によるホストを含み、第１システムコールは、代替システムコールやラップされたシステムコールを含む。
ステートメント５。本発明の一実施形態は、ステートメント３によるホストを含み、第２システムコールは、代替システムコールやラップされたシステムコールを含む。
【０１２７】
ステートメント６。本発明の一実施形態は、ステートメント１によるホストを含み、ＲＰＣキャプチャモジュールは、イーサネット（登録商標）フレームを検査して、イーサネット（登録商標）フレームが、ＲＰＣを含むかを判断するイーサネット（登録商標）フレーム検査器を含む。
ステートメント７。本発明の一実施形態は、ステートメント１によるホストを含み、ＲＰＣキャプチャモジュールは、ＲＰＣを受信する第１新しいトランスポート層コマンド及びＲＰＣの結果を受信する第２新しいトランスポート層コマンドを含む。
【０１２８】
ステートメント８。本発明の一実施形態は、ステートメント１によるホストを含み、ＲＰＣキャプチャモジュールからＲＰＣを受信するローカルトンネルエージェントをさらに含み、ローカルトンネルエージェントは、ＲＰＣをメッセージにラップするメッセージラッパーと、メッセージをリモートトンネルエージェントバッファに配置するメッセージ伝送器と、を備える。
ステートメント９。本発明の一実施形態は、ステートメント８によるホストを含み、メモリは、リモートトンネルエージェントバッファを含む。
ステートメント１０。本発明の一実施形態は、ステートメント８によるホストを含み、ＮＶＭｅＳＳＤは、リモートトンネルエージェントバッファを含む。
ステートメント１１。本発明の一実施形態は、ステートメント８によるホストを含み、ローカルトンネルエージェントは、ホストプロセッサにローカルＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）エンジンを利用する。
【０１２９】
ステートメント１２。本発明の一実施形態は、ステートメント８によるホストを含み、ローカルトンネルエージェントは、ＮＶＭｅＳＳＤにローカルＤＭＡエンジンを利用する。
ステートメント１３。本発明の一実施形態は、ステートメント８によるホストを含み、ローカルトンネルエージェントは、メッセージのアドレスをリモートトンネルエージェントバッファに配置する。
ステートメント１４。本発明の一実施形態は、ステートメント８によるホストを含み、ローカルトンネルエージェントは、リモートトンネルエージェントバッファがメッセージのための容量を有するか否かを判断するリモートトンネルエージェントのバッファ容量のチェックをさらに含む。
ステートメント１５。本発明の一実施形態は、ステートメント８によるホストを含み、ローカルトンネルエージェントは、メッセージがリモートトンネルエージェントバッファに配置されたことを、ＮＶＭｅＳＳＤに信号を送る信号機をさらに含む。
【０１３０】
ステートメント１６。本発明の一実施形態は、ステートメント１によるホストを含み、ＲＰＣの結果をＲＰＣキャプチャモジュールに伝達するローカルトンネルエージェントをさらに含み、ＲＰＣキャプチャモジュールは、ローカルトンネルエージェントバッファからＲＰＣの結果を含むメッセージを読み出すメッセージ受信器と、メッセージからＲＰＣの結果をアンラップするメッセージアンラッパーと、を備える。
ステートメント１７。本発明の一実施形態は、ステートメント１６によるホストを含み、ローカルトンネルエージェントは、メッセージがローカルトンネルエージェントバッファに配置されたことを知らせる信号をＮＶＭｅＳＳＤから受信する受信器をさらに含む。
ステートメント１８。本発明の一実施形態は、ステートメント１６によるホストを含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１９。本発明の一実施形態は、ステートメント１６によるホストを含み、ローカルトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
【０１３１】
ステートメント２０。本発明の一実施形態は、ステートメント１６によるホストを含み、ローカルトンネルエージェントは、ホストプロセッサにローカルＤＭＡエンジンを使用する。
ステートメント２１。本発明の一実施形態は、ステートメント１６によるホストを含み、ローカルトンネルエージェントは、ＮＶＭｅＳＳＤにローカルＤＭＡエンジンを使用する。
ステートメント２２。本発明の一実施形態は、ステートメント１６によるホストを含み、メッセージ受信器は、ローカルトンネルエージェントバッファからアドレスを読み出し、メッセージ受信器は、メッセージのアドレスを用いてメッセージをリトリーブ（ｒｅｔｒｉｅｖｅ）する。
【０１３２】
ステートメント２３。本発明の一実施形態は、ステートメント１によるホストを含み、ＮＶＭｅＳＳＤをさらに含み、ＮＶＭｅＳＳＤは、ホストに対するインターフェースと、データのためのストレージと、ホストからＰＣＩｅトンネルを介してインターフェースを経て、ＲＰＣを含む第１メッセージを受信するメッセージ受信器と、第１メッセージからＲＰＣをアンラップするメッセージアンラッパーと、ＲＰＣを実行してＲＰＣの結果を生成するイン−ストレージプロセッサと、ＲＰＣの結果を第２メッセージにラップするメッセージラッパーと、第２メッセージをインターフェースを経てＰＣＩｅトンネルを介してホストに伝送するメッセージ伝送器と、を備える。
ステートメント２４。本発明の一実施形態は、ステートメント２３によるホストを含み、ＮＶＭｅＳＳＤは、メッセージアンラッパー及びメッセージラッパーを含むＭｉｔＭシム（ｓｈｉｍ）をさらに含む。
ステートメント２５。本発明の一実施形態は、ステートメント２３によるホストを含み、メッセージアンラッパーは、第１システムコールを用いてＲＰＣを呼び出し、メッセージラッパーは、第２システムコールからＲＰＣの結果を受信する。
【０１３３】
ステートメント２６。本発明の一実施形態は、ステートメント２５によるホストを含み、第１システムコールは、代替システムコール又はラッパーされたシステムコールを含む。
ステートメント２７。本発明の一実施形態は、ステートメント２５によるホストを含み、第２システムコールは、代替システムコール又はラッパーされたシステムコールを含む。
【０１３４】
ステートメント２８。本発明の一実施形態は、ステートメント２３によるホストを含み、メッセージアンラッパーは、第１メッセージでＲＰＣを含むイーサネット（登録商標）フレームをアンラップし、メッセージラッパーは、ＲＰＣの結果を含むイーサネット（登録商標）フレームを第２メッセージにラップする。
ステートメント２９。本発明の一実施形態は、ステートメント２３によるホストを含み、メッセージアンラッパーは、第１メッセージでＲＰＣを含む第１の新しいトランスポート層コマンドをアンラップし、メッセージラッパーは、ＲＰＣの結果を格納する第２新しいトランスポート層コマンドを第２メッセージにラップする。
ステートメント３０。本発明の一実施形態は、ステートメント２３によるホストを含み、ＮＶＭｅＳＳＤは、ローカルトンネルエージェントバッファから第１メッセージを読み出し、リモートトンネルエージェントバッファに第２メッセージを書き込むローカルトンネルエージェントを含む。
【０１３５】
ステートメント３１。本発明の一実施形態は、ステートメント３０によるホストを含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント３２。本発明の一実施形態は、ステートメント３０によるホストを含み、ローカルトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント３３。本発明の一実施形態は、ステートメント３０によるホストを含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント３４。本発明の一実施形態は、ステートメント３０によるホストを含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント３５。本発明の一実施形態は、ステートメント３０によるホストを含み、ローカルトンネルエージェントは、ＤＭＡエンジンを用いてローカルトンネルエージェントバッファから第１メッセージを読み出し、リモートトンネルエージェントバッファに第２メッセージを書き込む。
【０１３６】
ステートメント３６。本発明の一実施形態は、ステートメント３５によるホストを含み、ＤＭＡエンジンは、ホストプロセッサに対してローカルである。
ステートメント３７。本発明の一実施形態は、ステートメント３５によるホストを含み、ＤＭＡエンジンは、ＮＶＭｅＳＳＤに対してローカルである。
【０１３７】
ステートメント３８。本発明の一実施形態は、ステートメント３０によるホストを含み、ローカルトンネルエージェントは、ローカルトンネルエージェントバッファから第１メッセージのアドレスを読み出し、第１メッセージのアドレスを用いて第１メッセージを読み出す。
ステートメント３９。本発明の一実施形態は、ステートメント３０によるホストを含み、ローカルトンネルエージェントは、第２メッセージを前記第２メッセージのアドレスに書き込み、第２メッセージのアドレスをリモートトンネルエージェントバッファに書き込む。
ステートメント４０。本発明の一実施形態は、ステートメント３０によるホストを含み、ローカルトンネルエージェントは、第１メッセージを有するローカルトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントバッファから第１メッセージを読み出す。
ステートメント４１。本発明の一実施形態は、ステートメント３０によるホストを含み、ローカルトンネルエージェントは、リモートトンネルエージェントバッファが第２メッセージのための容量を有するのか否かを判断するリモートトンネルエージェントバッファ容量のチェックをさらに含む。
【０１３８】
ステートメント４２。本発明の一実施形態は、不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）を含み、ＮＶＭｅＳＳＤは、ホストに対するインターフェイスと、データのためのストレージと、ホストからＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルを経てインターフェースを介してリモートプロシージャコール（ｒｅｍｏｔｅ  ｐｒｏｃｅｄｕｒｅ  ｃａｌｌ：ＲＰＣ）を含む第１メッセージを受信するメッセージ受信器と、第１メッセージから前記ＲＰＣをアンラップするメッセージアンラッパーと、ＲＰＣを実行してＲＰＣの結果を生成するイン−ストレージプロセッサと、ＲＰＣの結果を第２メッセージにラップするメッセージラッパーと、第２メッセージをインターフェースを介してＰＣＩｅトンネルを経てホストに伝送するメッセージ伝送器と、を備える。
【０１３９】
ステートメント４３。本発明の一実施形態は、ステートメント４２によるＮＶＭｅＳＳＤを含み、ＮＶＭｅＳＳＤは、メッセージアンラッパー及びメッセージラッパーを含むＭｉｔＭシム（ｓｈｉｍ）と、をさらに備える。
ステートメント４４。本発明の一実施形態は、ステートメント４２によるＮＶＭｅＳＳＤを含み、メッセージアンラッパーは、第１システムコールを用いてＲＰＣを呼び出し、メッセージラッパーは第２システムコールからＲＰＣの結果を受信する。
ステートメント４５。本発明の一実施形態は、ステートメント４４によるＮＶＭｅＳＳＤを含み、第１システムコールは、代替システムコール又はラップされたシステムコールを含む。
ステートメント４６。本発明の一実施形態は、ステートメント４４によるＮＶＭｅＳＳＤを含み、第２システムコールは、代替システムコール又はラップされたシステムコールを含む。
【０１４０】
ステートメント４７。本発明の一実施形態は、ステートメント４２によるＮＶＭｅＳＳＤを含み、メッセージアンラッパーは、第１メッセージで、ＲＰＣを含むイーサネット（登録商標）フレームをアンラップし、メッセージラッパーは、ＲＰＣの結果を含むイーサネット（登録商標）フレームを第２メッセージにラップする。
ステートメント４８。本発明の一実施形態は、ステートメント４２によるＮＶＭｅＳＳＤを含み、メッセージアンラッパーは、第１メッセージで、ＲＰＣを含む第１の新しいトランスポート層命令をアンラップし、メッセージラッパーは、ＲＰＣの結果を格納する第２新しいトランスポート層コマンドを第２メッセージにラップする。
ステートメント４９。本発明の一実施形態は、ステートメント４２によるＮＶＭｅＳＳＤを含み、ＮＶＭｅＳＳＤは、ローカルトンネルエージェントバッファから第１メッセージを読み出し、リモートトンネルエージェントバッファに第２メッセージを書き込むローカルトンネルエージェントを含む。
【０１４１】
ステートメント５０。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント５１。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、ローカルトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント５２。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント５３。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント５４。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、ローカルトンネルエージェントは、ＤＭＡエンジンを用いてローカルトンネルエージェントバッファから第１メッセージを読み出し、リモートトンネルエージェントバッファに第２メッセージを書き込む。
【０１４２】
ステートメント５５。本発明の一実施形態は、ステートメント５４によるＮＶＭｅＳＳＤを含み、ＤＭＡエンジンは、ホストプロセッサに対してローカルである。
ステートメント５６。本発明の一実施形態は、ステートメント５４によるＮＶＭｅＳＳＤを含み、ＤＭＡエンジンは、ＮＶＭｅＳＳＤに対してローカルである。
【０１４３】
ステートメント５７。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、ローカルトンネルエージェントは、ローカルトンネルエージェントバッファから第１メッセージのアドレスを読み出し、第１メッセージのアドレスを用いて第１メッセージを読み出す。
ステートメント５８。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、ローカルトンネルエージェントは、第２メッセージを第２メッセージのアドレスに書き込み、第２メッセージのアドレスをリモートトンネルエージェントバッファに書き込む。
ステートメント５９。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、ローカルトンネルエージェントは、第１メッセージを有するローカルトンネルエージェントバッファの少なくとも一部分に基づいてローカルトンネルエージェントバッファから第１メッセージを読み出す。
ステートメント６０。本発明の一実施形態は、ステートメント４９によるＮＶＭｅＳＳＤを含み、ローカルトンネルエージェントは、リモートトンネルエージェントバッファが第２メッセージのための容量を有するのか否かを判断するリモートトンネルエージェントバッファ容量のチェックをさらに含む。
【０１４４】
ステートメント６１。本発明の一実施形態は、ストレージサービスの動作方法を含み、ストレージサービスの動作方法は、アプリケーションからホストプロセッサへのリモートプロシージャコール（ｒｅｍｏｔｅ  ｐｒｏｃｅｄｕｒｅ  ｃａｌｌ：ＲＰＣ）をインターセプトする段階と、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルを介して不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）でＲＰＣを伝達する段階と、ＰＣＩｅトンネルを介してＮＶＭｅＳＳＤからＲＰＣの結果を受信する段階と、ＲＰＣの結果をホストプロセッサからのように、アプリケーションに伝達する段階と、を備える。
【０１４５】
ステートメント６２。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、インターセプトする段階は、ＲＰＣクライアントによって伝送されたＲＰＣをＭｉｔＭ（Ｍａｎ  ｉｎ  ｔｈｅ  Ｍｉｄｄｌｅ）シム（ｓｈｉｍ）を利用してキャプチャする段階を含み、ＲＰＣの結果を受信する段階は、ＮＶＭｅＳＳＤからＰＣＩｅトンネルを介してＲＰＣの結果をＭｉｔＭシムから受信する段階を含む。
ステートメント６３。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、インターセプトする段階は、アプリケーションからのＲＰＣを第１システムコールを利用してキャプチャする段階を含み、ＲＰＣの結果を受信する段階は、ＮＶＭｅＳＳＤからＲＰＣの結果を第２システムコールを利用して受信する段階を含む。
ステートメント６４。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、第１システムコールは、代替システムコール又はラップされたシステムコールを含む。
ステートメント６５。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、第２システムコールは、代替システムコール又はラップされたシステムコールを含む。
【０１４６】
ステートメント６６。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、インターセプトする段階は、イーサネット（登録商標）フレームを検査して、イーサネット（登録商標）フレームがＲＰＣを含むか否かを判断する段階と、ＲＰＣを含むイーサネット（登録商標）フレームの少なくとも一部分に基づいて、イーサネット（登録商標）フレームをキャプチャする段階と、を備え、ＲＰＣの結果を受信する段階は、ＮＶＭｅＳＳＤからＲＰＣの結果を第２イーサネット（登録商標）フレームで受信する段階と、を含む。
ステートメント６７。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、インターセプトする段階は、第１新しいトランスポート層コマンドを用いてアプリケーションからのＲＰＣをインターセプトする段階を含み、受信する段階は、第２新しいトランスポート層コマンドを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤからＲＰＣの結果を受信する段階を含む。
ステートメント６８。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、伝達する段階は、ローカルトンネルエージェントによってＲＰＣをメッセージにラップする段階と、ローカルトンネルエージェントによってメッセージをリモートトンネルエージェントバッファに配置する段階と、を含む。
【０１４７】
ステートメント６９。本発明の一実施形態は、ステートメント６８によるストレージサービスの動作方法を含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント７０。本発明の一実施形態は、ステートメント６８によるストレージサービスの動作方法を含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント７１。本発明の一実施形態は、ステートメント６８によるストレージサービスの動作方法を含み、配置する段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント７２。本発明の一実施形態は、ステートメント６８によるストレージサービスの動作方法を含み、配置する段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
【０１４８】
ステートメント７３。本発明の一実施形態は、ステートメント６８によるストレージサービスの動作方法を含み、配置する段階は、メッセージのアドレスにメッセージを書き込む段階と、ローカルトンネルエージェントによってリモートトンネルエージェントバッファにメッセージのアドレスを配置する段階と、を含む。
ステートメント７４。本発明の一実施形態は、ステートメント６８によるストレージサービスの動作方法を含み、配置する段階は、メッセージのための空間を有するリモートトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントによってメッセージをリモートトンネルエージェントバッファに配置する段階を含む。
ステートメント７５。本発明の一実施形態は、ステートメント６８によるストレージサービスの動作方法を含み、伝達する段階は、メッセージがリモートトンネルエージェントバッファに配置されたことを、リモートトンネルエージェントに信号を送る段階をさらに含む。
【０１４９】
ステートメント７６。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、ＲＰＣの結果を受信する段階は、ローカルトンネルエージェントによってローカルトンネルエージェントバッファからメッセージをリトリーブする段階と、ローカルトンネルエージェントによってメッセージからＲＰＣの結果をアンラップする段階と、を含む。
ステートメント７７。本発明の一実施形態は、ステートメント７６によるストレージサービスの動作方法を含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント７８。本発明の一実施形態は、ステートメント７６によるストレージサービスの動作方法を含み、ローカルトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント７９。本発明の一実施形態は、ステートメント７６によるストレージサービスの動作方法を含み、受信する段階は、メッセージがローカルトンネルエージェントバッファに配置されたことを知らせる信号をリモートトンネルエージェントから受信する段階をさらに含む。
【０１５０】
ステートメント８０。本発明の一実施形態は、ステートメント７６によるストレージサービスの動作方法を含み、リトリーブするス段階は、メッセージのための空間を有するローカルトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントによってローカルトンネルエージェントバッファからメッセージをリトリーブする段階を含む。
ステートメント８１。本発明の一実施形態は、ステートメント７６によるストレージサービスの動作方法を含み、リトリーブする段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント８２。本発明の一実施形態は、ステートメント７６によるストレージサービスの動作方法を含み、リトリーブする段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント８３。本発明の一実施形態は、ステートメント７６によるストレージサービスの動作方法を含み、リトリーブする段階は、ローカルトンネルエージェントによってリモートトンネルエージェントバッファからメッセージのアドレスをリトリーブする段階と、メッセージのアドレスを用いてメッセージをリトリーブする段階と、を含む。
【０１５１】
ステートメント８４。本発明の一実施形態は、ステートメント６１によるストレージサービスの動作方法を含み、ＮＶＭｅＳＳＤで、ＰＣＩｅトンネルを介してＲＰＣを含む第１メッセージを受信する段階と、第１メッセージからＲＰＣをアンラップする段階と、ＮＶＭｅＳＳＤのイン−ストレージプロセッサで、ＲＰＣを実行してＲＰＣの結果を生成する段階と、ＲＰＣの結果を第２メッセージにラップする段階と、第２メッセージをＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから伝送する段階と、をさらに備える。
ステートメント８５。本発明の一実施形態は、ステートメント８４によるストレージサービスの動作方法を含み、ＮＶＭｅＳＳＤで、第１のメッセージを受信する段階は、ＭｉｔＭシム（ｓｈｉｍ）で第１メッセージを受信する段階を含み、ＮＶＭｅＳＳＤから第２メッセージを伝送する段階は、ＭｉｔＭシム（ｓｈｉｍ）用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階と、を含む。
ステートメント８６。本発明の一実施形態は、ステートメント８４によるストレージサービスの動作方法を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、第１システムコールを利用して、第１メッセージを受信する段階を含み、ＮＶＭｅＳＳＤから第２メッセージを伝送する段階は、第２システムコールを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２のメッセージを伝送する段階を含む。
【０１５２】
ステートメント８７。本発明の一実施形態は、ステートメント８６によるストレージサービスの動作方法を含み、第１システムコールは、代替システムコール又はラップされたシステムコールを含む。
ステートメント８８。本発明の一実施形態は、ステートメント８６によるストレージサービスの動作方法を含み、第２システムコールは、代替システムコール又はラップされたシステムコールを含む。
【０１５３】
ステートメント８９。本発明の一実施形態は、ステートメント８４によるストレージサービスの動作方法を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、ＲＰＣを含む第１イーサネット（登録商標）フレームを受信する段階を含み、ＮＶＭｅＳＳＤから第２メッセージを伝送する段階は、ＲＰＣの結果を包含する第２イーサネット（登録商標）フレームをＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから伝送する段階を含む。
ステートメント９０。本発明の一実施形態は、ステートメント８４によるストレージサービスの動作方法を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、第１新しいトランスポート層コマンドを利用して第１のメッセージを受信する段階を含み、ＮＶＭｅＳＳＤから前記第２メッセージを送信する段階は、第２新しいトランスポート層コマンドを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント９１。本発明の一実施形態は、ステートメント８４によるストレージサービスの動作方法を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、ローカルトンネルエージェントによってローカルトンネルエージェントバッファから第１メッセージを読み出す段階を含む。
【０１５４】
ステートメント９２。本発明の一実施形態は、ステートメント９１によるストレージサービスの動作方法を含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント９３。本発明の一実施形態は、ステートメント９１によるストレージサービスの動作方法を含み、ローカルトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント９４。本発明の一実施形態は、ステートメント９１によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント９５。本発明の一実施形態は、ステートメント９１によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
【０１５５】
ステートメント９６。本発明の一実施形態は、ステートメント９１によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階は、ローカルトンネルエージェントが、ローカルトンネルエージェントバッファから第１メッセージのアドレスを読み出す段階と、第１メッセージのアドレスを用いて第１メッセージを読み出す段階と、を含む。
ステートメント９７。本発明の一実施形態は、ステートメント９１によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階は、ローカルトンネルエージェントが第１メッセージを有するローカルトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントバッファから第１メッセージを読み出す段階を含む。
ステートメント９８。本発明の一実施形態は、ステートメント９１によるストレージサービスの動作方法を含み、第１メッセージを受信する段階は、第１メッセージがローカルトンネルエージェントバッファに配置されたことを知らせる信号をリモートトンネルエージェントから受信する段階をさらに含む。
【０１５６】
ステートメント９９。本発明の一実施形態は、ステートメント８４によるストレージサービスの動作方法を含み、第２メッセージを伝送する段階は、ローカルトンネルエージェントは、リモートトンネルエージェントバッファに第２メッセージに配置する段階を含む。
ステートメント１００。本発明の一実施形態は、ステートメント９９によるストレージサービスの動作方法を含み、第２メッセージを配置する段階は、ローカルトンネルエージェントが第２メッセージのための容量を有するリモートトンネルエージェントバッファの少なくとも一部分に基づいて、リモートトンネルエージェントバッファに第１メッセージを配置する段階を含む。
ステートメント１０１。本発明の一実施形態は、ステートメント９９によるストレージサービスの動作方法を含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１０２。本発明の一実施形態は、ステートメント９９によるストレージサービスの動作方法を含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
【０１５７】
ステートメント１０３。本発明の一実施形態は、ステートメント９９によるストレージサービスの動作方法を含み、第２メッセージを配置する段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを使用する。
ステートメント１０４。本発明の一実施形態は、ステートメント９９によるストレージサービスの動作方法を含み、第２のメッセージを配置する段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを使用する。
ステートメント１０５。本発明の一実施形態は、ステートメント９９によるストレージサービスの動作方法を含み、第２メッセージを配置する段階は、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２メッセージのアドレスを配置する段階を含む。
【０１５８】
ステートメント１０６。本発明の一実施形態は、ストレージサービスの動作方法を含み、ストレージサービスの動作方法は、ＮＶＭｅＳＳＤでＰＣＩｅトンネルを介してＲＰＣを含む第１メッセージを受信する段階と、第１メッセージからＲＰＣをアンラップする段階と、ＮＶＭｅＳＳＤ上のイン−ストレージプロセッサで、ＲＰＣを実行してＲＰＣの結果を生成する段階と、ＲＰＣの結果を第２メッセージにラップする段階と、ＮＶＭｅＳＳＤからＰＣＩｅトンネルを介して第２メッセージを伝送する段階と、を備える。
【０１５９】
ステートメント１０７。本発明の一実施形態は、ステートメント１０６によるストレージサービスの動作方法を含み、第１メッセージを受信する段階は、ＭｉｔＭシム（ｓｈｉｍ）用いて第１メッセージを受信する段階を含み、第２メッセージを伝送する段階は、ＭｉｔＭシム（ｓｈｉｍ）用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１０８。本発明の一実施形態は、ステートメント１０６によるストレージサービスの動作方法を含み、第１メッセージを受信する段階は、第１システムコールを利用して第１メッセージを受信する段階を含み、第２メッセージを伝送する段階は、第２システムコールを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１０９。本発明の一実施形態は、ステートメント１０８によるストレージサービスの動作方法を含み、第１システムコールは、代替システムコールやラップされたシステムコールを含む。
ステートメント１１０。本発明の一実施形態は、ステートメント１０８によるストレージサービスの動作方法を含み、第２システムコールは、代替システムコール又はラップされたシステムコールを含む。
【０１６０】
ステートメント１１１。本発明の一実施形態は、ステートメント１１０によるストレージサービスの動作方法を含み、第１メッセージを受信する段階は、ＲＰＣを含む第１イーサネット（登録商標）フレームを用いて第１メッセージを受信する段階を含み、第２メッセージを伝送する段階は、ＲＰＣの結果を包含する第２イーサネット（登録商標）フレームを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１１２。本発明の一実施形態は、ステートメント１０６によるストレージサービスの動作方法を含み、第１メッセージを受信する段階は、第１新しいトランスポート層コマンドを利用して第１メッセージを受信する段階を含み、第２メッセージを伝送する段階は、第２新しいトランスポート層コマンドを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１１３。本発明の一実施形態は、ステートメント１０６によるストレージサービスの動作方法を含み、第１メッセージを受信する段階は、ローカルトンネルエージェントがローカルトンネルエージェントバッファから第１メッセージを読み出す段階を含む。
ステートメント１１４。本発明の一実施形態は、ステートメント１０６によるストレージサービスの動作方法を含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１１５。本発明の一実施形態は、ステートメント１０６によるストレージサービスの動作方法を含み、ローカルトンネルエージェントバッファはＮＶＭｅＳＳＤに対してローカルである。
【０１６１】
ステートメント１１６。本発明の一実施形態は、ステートメント１１３によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１１７。本発明の一実施形態は、ステートメント１１３によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階はＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１１８。本発明の一実施形態は、ステートメント１１３によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階は、ローカルトンネルエージェントが、ローカルトンネルエージェントバッファから第１メッセージのアドレスを読み出す段階と、第１メッセージのアドレスを用いて第１メッセージを読み出す段階と、を含む。
ステートメント１１９。本発明の一実施形態は、ステートメント１１３によるストレージサービスの動作方法を含み、第１メッセージを読み出す段階は、第１メッセージを有するローカルトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントが、ローカルトンネルエージェントバッファから第１メッセージを読み出す段階と、を含む。
ステートメント１２０。本発明の一実施形態は、ステートメント１１３によるストレージサービスの動作方法を含み、第１メッセージを受信する段階は、第１メッセージがローカルトンネルエージェントバッファに配置されたこと知らせる信号をリモートトンネルエージェントから受信する段階をさらに含む。
【０１６２】
ステートメント１２１。本発明の一実施形態は、ステートメント１０６によるストレージサービスの動作方法を含み、第２メッセージを伝送する段階は、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２メッセージを配置する段階を含む。
ステートメント１２２。本発明の一実施形態は、ステートメント１２１によるストレージサービスの動作方法を含み、第２メッセージを配置する段階は、第２メッセージのための容量を有する、リモートトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２メッセージを配置する段階を含む。
ステートメント１２３。本発明の一実施形態は、ステートメント１２１によるストレージサービスの動作方法を含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１２４。本発明の一実施形態は、ステートメント１２１によるストレージサービスの動作方法を含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
【０１６３】
ステートメント１２５。本発明の一実施形態は、ステートメント１２１によるストレージサービスの動作方法を含み、第２メッセージを配置する段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１２６。本発明の一実施形態は、ステートメント１２１によるストレージサービスの動作方法を含み、第２メッセージを配置する段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１２７。本発明の一実施形態は、ステートメント１２１によるストレージサービスの動作方法を含み、第２メッセージを配置する段階は、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２メッセージのアドレスを配置する段階を含む。
【０１６４】
ステートメント１２８。本発明の一実施形態は、物品（ａｒｔｉｃｌｅ）を含み、物品は実在する非一時的記憶媒体を含み、実在する非一時的記憶媒体は、マシンによって実行されるとき、以下の動作を実行させるためのコマンドを格納し、コマンドは、アプリケーションからホストプロセッサへのリモートプロシージャコール（ｒｅｍｏｔｅ  ｐｒｏｃｅｄｕｒｅ  ｃａｌｌ：ＲＰＣ）をインターセプトする段階と、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）トンネルを介して不揮発性メモリエクスプレス（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ：ＮＶＭｅ）ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）にＲＰＣを伝達する段階と、ＰＣＩｅトンネルを介してＮＶＭｅＳＳＤからＲＰＣの結果を受信する段階と、ＲＰＣの結果をホストプロセッサからのように、アプリケーションに伝達する段階と、を備える。
【０１６５】
ステートメント１２９。本発明の一実施形態は、ステートメント１２８による物品を含み、インターセプトする段階は、ＲＰＣクライアントによって伝送されたＲＰＣをＭｉｔＭ（Ｍａｎ  ｉｎ  ｔｈｅ  Ｍｉｄｄｌｅ）シム（ｓｈｉｍ）を利用してキャプチャする段階を含み、ＲＰＣの結果を受信する段階は、ＮＶＭｅＳＳＤからＰＣＩｅトンネルを介してＲＰＣの結果をＭｉｔＭシムから受信する段階を含む。
ステートメント１３０。本発明の一実施形態は、ステートメント１２８による物品を含み、インターセプトする段階は、アプリケーションからのＲＰＣを第１システムコールを利用してキャプチャする段階を含み、ＲＰＣの結果を受信する段階は、ＮＶＭｅＳＳＤからＲＰＣの結果を第２システムコールを利用して受信する段階を含む。
ステートメント１３１。本発明の一実施形態は、ステートメント１３０による物品を含み、第１システムコールは、代替システムコール又はラップされたシステムコールを含む。
ステートメント１３２。本発明の一実施形態は、ステートメント１３０による物品を含み、第２システムコールは、代替システムコール又はラップされたシステムコールを含む。
【０１６６】
ステートメント１３３。本発明の一実施形態は、ステートメント１２８による物品を含み、インターセプトする段階は、イーサネット（登録商標）フレームを検査してイーサネット（登録商標）フレームがＲＰＣを含むのか否かを判断する段階と、ＲＰＣを含むイーサネット（登録商標）フレームの少なくとも一部分基づいて、イーサネット（登録商標）フレームをキャプチャする段階と、を含み、ＲＰＣの結果を受信する段階は、ＮＶＭｅＳＳＤからＲＰＣの結果を第２イーサネット（登録商標）フレームで受信する段階を含む。
ステートメント１３４。本発明の一実施形態は、ステートメント１２８による物品を含み、インターセプトする段階は、第１新しいトランスポート層コマンドを用いてアプリケーションからのＲＰＣをインターセプトする段階を含み、受信する段階は、第２新しいトランスポート層コマンドを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤからＲＰＣの結果を受信する段階を含む。
ステートメント１３５。本発明の一実施形態は、ステートメント１２８による物品を含み、伝達する段階は、ローカルトンネルエージェントによってＲＰＣをメッセージにラップする段階と、ローカルトンネルエージェントによってメッセージをリモートトンネルエージェントバッファに配置する段階と、を含む。
【０１６７】
ステートメント１３６。本発明の一実施形態は、ステートメント１３５による物品を含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１３７。本発明の一実施形態は、ステートメント１３５による物品を含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント１３８。本発明の一実施形態は、ステートメント１３５による物品を含み、配置する段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１３９。本発明の一実施形態は、ステートメント１３５による物品を含み、配置する段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
【０１６８】
ステートメント１４０。本発明の一実施形態は、ステートメント１３５による物品を含み、配置する段階は、メッセージのアドレスにメッセージを書き込む段階と、ローカルトンネルエージェントによってリモートトンネルエージェントバッファにメッセージのアドレスを配置する段階と、を含む。
ステートメント１４１。本発明の一実施形態は、ステートメント１３５による物品を含み、配置する段階は、メッセージのための空間を有するリモートトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントによってメッセージをリモートトンネルエージェントバッファに配置する段階を含む。
ステートメント１４２。本発明の一実施形態は、ステートメント１３５による物品を含み、伝達する段階は、メッセージがリモートトンネルエージェントバッファに配置されたことを、リモートトンネルエージェントに信号する段階をさらに含む。
【０１６９】
ステートメント１４３。本発明の一実施形態は、ステートメント１２８による物品を含み、ＲＰＣの結果を受信する段階は、ローカルトンネルエージェントによってローカルトンネルエージェントバッファからメッセージをリトリーブする段階と、ローカルトンネルエージェントによってメッセージからＲＰＣの結果をアンラップする段階と、を含む。
ステートメント１４４。本発明の一実施形態は、ステートメント１４３による物品を含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１４５。本発明の一実施形態は、ステートメント１４３による物品を含み、ローカルトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント１４６。本発明の一実施形態は、ステートメント１４３による物品を含み、受信する段階は、メッセージがローカルトンネルエージェントバッファに配置されたことを知らせる信号をリモートトンネルエージェントから受信する段階をさらに含む。
【０１７０】
ステートメント１４７。本発明の一実施形態は、ステートメント１４３による物品を含み、リトリーブする段階は、メッセージのための区間を有するローカルトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントによってローカルトンネルエージェントバッファからメッセージをリトリーブする段階を含む。
ステートメント１４８。本発明の一実施形態は、ステートメント１４３による物品を含み、リトリーブする段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１４９。本発明の一実施形態は、ステートメント１４３による物品を含み、リトリーブする段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１５０。本発明の一実施形態は、ステートメント１４３による物品を含み、リトリーブする段階は、ローカルトンネルエージェントによってリモートトンネルエージェントバッファからメッセージのアドレスをリトリーブする段階と、メッセージのアドレスを用いてメッセージをリトリーブする段階と、を含む。
【０１７１】
ステートメント１５１。本発明の一実施形態は、ステートメント１２８による物品を含み、実在する非一時的記憶媒体は、マシンによって実行された時に、次の動作を実行させるコマンドをさらに含み、コマンドは、ＮＶＭｅＳＳＤで、ＰＣＩｅトンネルを介してＲＰＣを含む第１メッセージを受信する段階と、第１メッセージからＲＰＣをアンラップする段階と、ＮＶＭｅＳＳＤのイン−ストレージプロセッサで、ＲＰＣを実行して、ＲＰＣの結果を生成する段階と、ＲＰＣの結果を第２メッセージにラップする段階と、第２メッセージをＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから伝送する段階と、をさらに含む。
ステートメント１５２。本発明の一実施形態は、ステートメント１５１による物品を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、ＭｉｔＭシム（ｓｈｉｍ）で第１メッセージを受信する段階を含み、ＮＶＭｅＳＳＤから第２メッセージを送信する段階は、ＭｉｔＭシム（ｓｈｉｍ）用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１５３。本発明の一実施形態は、ステートメント１５１による物品を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、第１システムコールを利用して、第１メッセージを受信する段階を含み、ＮＶＭｅＳＳＤから第２メッセージを伝送する段階は、第２システムコールを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２のメッセージを伝送する段階を含む。
【０１７２】
ステートメント１５４。本発明の一実施形態は、ステートメント１５３による物品を含み、第１システムコールは、代替システムコール又はラップされたシステムコールを含む。
ステートメント１５５。本発明の一実施形態は、ステートメント１５３による物品を含み、第２システムコールは、代替システムコール又はラップされたシステムコールを含む。
ステートメント１５６。本発明の一実施形態は、ステートメント１５３による物品を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、ＲＰＣを含む第１イーサネット（登録商標）フレームを受信する段階を含み、ＮＶＭｅＳＳＤから第２メッセージを伝送する段階は、ＲＰＣの結果を有する第２イーサネット（登録商標）フレームをＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから伝送する段階を含む。
【０１７３】
ステートメント１５７。本発明の一実施形態は、ステートメント１５１による物品を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、第１新しいトランスポート層コマンドを利用して、第１メッセージを受信する段階を含み、ＮＶＭｅＳＳＤから第２メッセージを伝送する段階は、第２新しいトランスポート層コマンドを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１５８。本発明の一実施形態は、ステートメント１５１による物品を含み、ＮＶＭｅＳＳＤで、第１メッセージを受信する段階は、ローカルトンネルエージェントによってローカルトンネルエージェントバッファから第１メッセージを読み出す段階を含む。
【０１７４】
ステートメント１５９。本発明の一実施形態は、ステートメント１５８による物品を含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１６０。本発明の一実施形態は、ステートメント１５８による物品を含み、ローカルトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
ステートメント１６１。本発明の一実施形態は、ステートメント１５８による物品を含み、第１メッセージを読み出す段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１６２。本発明の一実施形態は、ステートメント１５８による物品を含み、第１メッセージを読み出す段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
【０１７５】
ステートメント１６３。本発明の一実施形態は、ステートメント１５８による物品を含み、第１メッセージを読み出す段階は、ローカルトンネルエージェントが、ローカルトンネルエージェントバッファから第１メッセージのアドレスを読み出す段階と、第１メッセージのアドレスを用いて第１メッセージを読み出す段階と、を含む。
ステートメント１６４。本発明の一実施形態は、ステートメント１５８による物品を含み、第１メッセージを読み出す段階は、ローカルトンネルエージェントが第１メッセージを有するローカルトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントバッファから第１メッセージを読み出す段階を含む。
ステートメント１６５。本発明の一実施形態は、ステートメント１５８による物品を含み、第１メッセージを受信する段階は、第１メッセージがローカルトンネルエージェントバッファに配置されたことを知らせる信号をリモートトンネルエージェントから受信する段階をさらに含む。
ステートメント１６６。本発明の一実施形態は、ステートメント１５８による物品を含み、第２メッセージを伝送する段階は、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２メッセージに配置する段階を含む。
【０１７６】
ステートメント１６７。本発明の一実施形態は、ステートメント１６６による物品を含み、第２メッセージを配置する段階は、ローカルトンネルエージェントが第２メッセージのための容量を有するリモートトンネルエージェントバッファの少なくとも一部分に基づいて、リモートトンネルエージェントバッファに第１メッセージを配置する段階を含む。
ステートメント１６８。本発明の一実施形態は、ステートメント１６６による物品を含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１６９。本発明の一実施形態は、ステートメント１６６による物品を含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである
【０１７７】
ステートメント１７０。本発明の一実施形態は、ステートメント１６６による物品を含み、第２メッセージを配置する段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを使用する。
ステートメント１７１。本発明の一実施形態は、ステートメント１６６による物品を含み、第２メッセージを配置する段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを使用する。
ステートメント１７２。本発明の一実施形態は、ステートメント１６６による物品を含み、第２メッセージを配置する段階は、ローカルトンネルエージェントがリモートトンネルエージェントバッファに第２メッセージのアドレスを配置する段階を含む。
【０１７８】
ステートメント１７３。本発明の一実施形態は、物品を含み、物品は、実在する非一時的記憶媒体を含み、実在する非一時的記憶媒体は、装置によって実行されるとき、以下の動作を実行させるためのコマンドを格納し、コマンドは、ＮＶＭｅＳＳＤでＰＣＩｅトンネルを介してＲＰＣを含む第１メッセージを受信する段階と、第１メッセージからＲＰＣをアンラップする段階と、ＮＶＭｅＳＳＤ上のイン−ストレージプロセッサからＲＰＣを実行してＲＰＣの結果を生成する段階と、ＲＰＣの結果を第２メッセージにラップする段階と、ＮＶＭｅＳＳＤからＰＣＩｅトンネルを介して第２メッセージを伝送する段階と、を備える。
【０１７９】
ステートメント１７４。本発明の一実施形態は、ステートメント１７３による物品を含み、第１メッセージを受信する段階は、ＭｉｔＭシム（ｓｈｉｍ）を用いて第１メッセージを受信する段階を含み、第２メッセージを伝送する段階は、ＭｉｔＭシム（ｓｈｉｍ）を用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１７５。本発明の一実施形態は、ステートメント１７３による物品を含み、第１メッセージを受信する段階は、第１システムコールを利用して第１のメッセージを受信する段階を含み、第２メッセージを伝送する段階は、第２システムコールを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１７６。本発明の一実施形態は、ステートメント１７３による物品を含み、第１システムコールは、代替システムコール又はラップされたシステムコールを含む。
ステートメント１７７。本発明の一実施形態は、ステートメント１７３による物品を含み、第２システムコールは、代替システムコール又はラップされたシステムコールを含む。
【０１８０】
ステートメント１７８。本発明の一実施形態は、ステートメント１７３による物品を含み、第１メッセージを受信する段階は、ＲＰＣを含む第１イーサネット（登録商標）フレームを用いて第１メッセージを受信する段階を含み、第２メッセージを伝送する段階は、ＲＰＣの結果を包含する第２イーサネット（登録商標）フレームを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１７９。本発明の一実施形態は、ステートメント１７３による物品を含み、第１メッセージを受信する段階は、第１新しいトランスポート層コマンドを利用して、第１メッセージを受信する段階を含み、第２のメッセージを伝送する段階は、第２新しいトランスポート層コマンドを用いてＰＣＩｅトンネルを介してＮＶＭｅＳＳＤから第２メッセージを伝送する段階を含む。
ステートメント１８０。本発明の一実施形態は、ステートメント１７３による物品を含み、第１メッセージを受信する段階は、ローカルトンネルエージェントがローカルトンネルエージェントバッファから第１メッセージを読み出す段階を含む。
【０１８１】
ステートメント１８１。本発明の一実施形態は、ステートメント１８０による物品を含み、ローカルトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１８２。本発明の一実施形態は、ステートメント１８０による物品を含み、ローカルトンネルエージェントバッファはＮＶＭｅＳＳＤに対してローカルである。
ステートメント１８３。本発明の一実施形態は、ステートメント１８０による物品を含み、第１メッセージを読み出す段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１８４。本発明の一実施形態は、ステートメント１８０による物品を含み、第１メッセージを読み取る段階はＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
【０１８２】
ステートメント１８５。本発明の一実施形態は、ステートメント１８０による物品を含み、第１メッセージを読み出す段階は、ローカルトンネルエージェントが、ローカルトンネルエージェントバッファから第１メッセージのアドレスを読み出す段階と、第１メッセージのアドレスを用いて第１メッセージを読み出す段階と、を含む。
ステートメント１８６。本発明の一実施形態は、ステートメント１８０による物品を含み、第１メッセージを読み出す段階は、第１メッセージを有するローカルトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントが、ローカルトンネルエージェントバッファから第１メッセージを読み出す段階を含む。
ステートメント１８７。本発明の一実施形態は、ステートメント１８０による物品を含み、第１メッセージを受信する段階は、第１メッセージがローカルトンネルエージェントバッファに配置されたことを知らせる信号をリモートトンネルエージェントから受信する段階をさらに含む。
【０１８３】
ステートメント１８８。本発明の一実施形態は、ステートメント１７３による物品を含み、第２メッセージを伝送する段階は、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２メッセージを配置する段階を含む。
ステートメント１８９。本発明の一実施形態は、ステートメント１８８による物品を含み、第２メッセージを配置する段階は、第２メッセージのための容量を有する、リモートトンネルエージェントバッファの少なくとも一部分に基づいて、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２のメッセージを配置する段階を含む。
ステートメント１９０。本発明の一実施形態は、ステートメント１８８による物品を含み、リモートトンネルエージェントバッファは、ホストプロセッサに対してローカルである。
ステートメント１９１。本発明の一実施形態は、ステートメント１８８による物品を含み、リモートトンネルエージェントバッファは、ＮＶＭｅＳＳＤに対してローカルである。
【０１８４】
ステートメント１９２。本発明の一実施形態は、ステートメント１８８による物品を含み、第２メッセージを配置する段階は、ホストプロセッサに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１９３。本発明の一実施形態は、ステートメント１８８による物品を含み、第２メッセージを配置する段階は、ＮＶＭｅＳＳＤに対してローカルであるＤＭＡエンジンを利用する段階を含む。
ステートメント１９４。本発明の一実施形態は、ステートメント１８８による物品を含み、第２メッセージを配置する段階は、ローカルトンネルエージェントが、リモートトンネルエージェントバッファに第２メッセージのアドレスを配置する段階を含む。
【０１８５】
尚、本発明は、上述の実施形態に限られるものではない。本発明の技術的範囲から逸脱しない範囲内で多様に変更実施することが可能である。
【符号の説明】
【０１８６】
１０５（１０５−１、１０５−２、１０５−３）    サーバ
１１０    クライアントマシン
１１５    ネットワーク
２０５    （ホスト）プロセッサ
２１０    メモリコントローラ
２１５    クロック
２２０    （ホスト）メモリ
２２５    ストレージ装置（ＮＶＭｅＳＳＤ）
２３０    ネットワークコネクタ
２３５    バス
２４０    ユーザーインターフェース
２４５    入力／出力（Ｉ／Ｏ）エンジン
３０５−１、３０５−２    アプリケーション
３１０−１、３１０−２    ＲＰＣクライアント
３１５    ＲＰＣ層
３２０    ＰＣＩｅトンネル
３２５    ネットワークポート
３３０    ネットワークスタック
３３５    オペレーティングシステム
３４０−１、３４０−２    マイクロサービス
３４５−１、３４５−２    ＲＰＣサーバ
３５０    ＲＰＣ層
３５５    ネットワークスタック
４０５    ＲＰＣ
４１０    結果
５０５    ＲＰＣキャプチャモジュール
６０５    ＭｉｔＭシム（ｓｈｉｍ）
６１５    システムコール
６２０    フレーム検査器
６２５    トランスポート層
７０５−１、７０５−２    トンネルエージェント
７１０−１、７１０−２    トンネルエージェントバッファ
７２５    メッセージ
７３０    アドレス
８０５    メッセージラッパー
８１０    メッセージ伝送器 
８１５    容量チェック
８２０    信号器
８２５    メッセージ受信器
８３０    メッセージアンラッパー
８３５    受信器
８４０    ポインタストレージ
９０５−１、９０５−２    ＤＭＡエンジン
１００５    インターフェース
１０１０    ホストインターフェースロジック
１０１５    ＳＳＤコントローラ
１０３０    フラッシュ変換階層
１０３５    イン−ストレージプロセッサ
１０４０    ＳＳＤメモリ
１０２０−１〜１０２０−８    フラッシュチップ
１０２５−１〜１０２５−４    チャネル
【図１】
2020064634.tif 000007
【図２】
2020064634.tif 000008
【図３】
2020064634.tif 000009
【図４】
2020064634.tif 000010
【図５】
2020064634.tif 000011
【図６】
2020064634.tif 000012
【図７】
2020064634.tif 000013
【図８】
2020064634.tif 000014
【図９】
2020064634.tif 000015
【図１０】
2020064634.tif 000016
【図１１】
2020064634.tif 000017
【図１２Ａ】
2020064634.tif 000018
【図１２Ｂ】
2020064634.tif 000019
【図１３】
2020064634.tif 000020
【図１４】
2020064634.tif 000021
【図１５】
2020064634.tif 000022
【図１６Ａ】
2020064634.tif 000023
【図１６Ｂ】
2020064634.tif 000024
【図１７】
2020064634.tif 000025
【図１８】
2020064634.tif 000026