(58)【調査した分野】(Int.Cl.,DB名)
前記ヘッダ及び前記データは、リモートダイレクトメモリアクセス書き込みメッセージに含まれ、前記リモートダイレクトメモリアクセス書き込みメッセージは、32ビット情報記憶領域を更に含み、前記方法は、
ヘッダオフセットを32ビット情報記憶領域に組み込むことであって、
前記ヘッダオフセットは、前記リモートダイレクトメモリアクセス書き込みメッセージにおける前記ヘッダのオフセットである、こと、を更に含む、請求項13に記載のシステム。
【発明を実施するための形態】
【0028】
序論
あるコンピューティング環境において、2つ(又はそれ以上)のコンピューティングシステム間のデータ転送は、データ及び付随するヘッダ(並びに他のメタデータ)をあるコンピューティングシステムのメモリから(例えば、複数のソースバッファから)別のコンピューティングシステムのメモリに(例えば、1つ以上の宛先バッファに)直接送信することを含み得る。ヘッダは典型的にサイズが小さいため(例えば1k)、あるコンピューティングシステムのメモリから別のコンピューティングシステムのメモリにヘッダを転送する書き込み操作のみを行うことは、リソースの集中は言うまでもなく、非効率である。
【0029】
したがって、データ及びヘッダを合体(又は結合)させて、実行される書き込み操作の数を減らし、アプリケーションのスループットを改善することが有利であり得る。合体の一部として、複数のソースバッファに含まれるデータ及びヘッダは、単一の宛先バッファ(又は複数の宛先バッファ)にマッピングされ得る。この配置(又はマッピング)情報は次いで、単一の書き込み操作の一部として、データ及びヘッダと共に、ソースバッファから1つ以上の宛先バッファに送信され得る。
【0030】
上記のアプローチが有利に使用され得るシステムの一例は、OpenFabrics Enterprise Distribution(OFED(商標))(又はOpenFabrics Software(OFS))を実装するシステムである。OFEDは、リモートダイレクトメモリアクセス(RDMA)及びカーネルバイパスアプリケーションのためのオープンソースソフトウェアである。OFEDは、高効率なネットワーク、ストレージ接続性、及び並列コンピューティングを必要とするコンピューティング環境に実装され得る。他の特徴の中でも、OFEDは、カーネルレベルドライバ、チャネル指向RDMA及び送受信操作、オペレーティングシステム(OS)のカーネルバイパス、並びにカーネル及びユーザーレベルアプリケーションプログラミングインターフェース(API)(例えば、RDMA転送のためのOFED API)を提供する。OFEDはまた、並列メッセージパッシング(MPI)、ソケットデータ交換(例えば、セッション記述プロトコル(SDP))、ネットワーク接続型ストレージ(NAS)及びストレージエリアネットワーク(SAN)ストレージ、並びにファイルシステムのためのサービスを提供する。
【0031】
RDMAは、ソース又は宛先コンピューティングシステムのOSのいずれかを介することなく、あるコンピューティングシステム(例えば、ソースコンピューティングシステム)のメモリから別のコンピューティングシステム(例えば、宛先コンピューティングシステム)のメモリへのダイレクトメモリアクセス(DMA)を含む。例えば、ソースコンピューティングシステムのネットワークアダプタは、宛先コンピューティングシステムのネットワークアダプタが宛先コンピューティングシステムのメモリへの(又はそこからの)データに直接アクセスすることを可能にするメッセージを宛先コンピューティングシステムのネットワークアダプタに送信し得る。
【0032】
RDMA内のメッセージは、少なくとも2つのタイプのメッセージを含み得る。第1のタイプは、RDMA書き込みである。RDMA書き込みは、そのアドレスに置く(又は書き込む)アドレス及びデータを含む。RDMA書き込みは、RDMA書き込みを受信するネットワークアダプタが、提供されたデータを指定のアドレスに書き込む(又は置く)ことを可能にする。第2のタイプは、RDMA読み取りである。RDMA読み取りは、アドレス及び長さを含む。RDMA読み取りは、RDMA読み取りを受信するネットワークアダプタが、要求されたアドレスにデータを返信する応答を生成することを可能にする。RDMAでは、これらのタイプのメッセージは両方とも「片側」であり、メッセージは、メッセージを受信するコンピューティングシステムの中央演算処理装置(CPU)を介さずに、メッセージを受信するネットワークアダプタによって処理される。
【0033】
特定のコンピューティングシステムでは、ネットワークアダプタは、非同期インターフェース(「verbs」インターフェースとも呼ばれる)を介してアクセスされ得る。ネットワークアダプタを使用するため(例えば、RDMA操作を実行するため)、キューペア(又はQP)と呼ばれるオブジェクトが作製され得る。QPは、作業キューのペア、すなわち送信キュー及び受信キューのほか、完了キュー(CQ)を含む。RDMA操作は、作業キューに(例えば、要求として)post送信され得る。RDMA操作は次いで、同期的に実行され、完了すると、ネットワークアダプタが作業完了情報をCQの最後に追加する。完了情報は次いで、CQから受信され、どの要求が完了したかが決定され得る。このように非同期に操作することで、RDMAコンピューティング環境において計算及び通信をオーバーラップさせることがより容易になる。
【0034】
RDMA対応ネットワークアダプタはまた、片側のRDMA操作に加えて、「両側」の送受信操作をサポートすることに留意されたい。加えて、RDMAコンピューティング環境におけるネットワークアダプタはまた、カーネルを介さずにハードウェアで直接、高速経路操作(例えば、作業要求のpost送信及び作業完了の検索)を実行する(ゆえに、システムコールオーバーヘッドに関連付けられた時間を節約する)ためのユーザー空間プロセスを可能にし得ることが理解されよう。したがって、RDMAは、高スループット及び低レイテンシのネットワーキングを可能にする(例えば、並列計算クラスタで特に有用である)。
【0035】
前述のとおり、OFEDは、RDMAデータ転送用のAPIを提供する。OFED APIがRDMAデータ転送に使用される場合、クライアントのメッセージは、ヘッダ及び1つ以上のデータパケットを含む。ヘッダのサイズは、データのサイズと比べて典型的に小さいため、データとヘッダとを個別に(例えば、2つの別個のRDMA書き込みとして)書き込むことは効率的ではない。データ及びヘッダを合体(又は結合)させて(例えば、RDMA書き込みの一部として)、RDMA書き込みの合計数を減らすことができる。
【0036】
OFED APIはまた、それぞれのRDMA書き込みの一部として私的利用のための32ビットデータ空間(32ビット即値データ又は私的データとも呼ばれる)を提供する。この32ビットデータ空間を使用して、ヘッダ自体に関連付けられた情報(例えば、ヘッダ境界におけるヘッダの位置を示すヘッダオフセット)に加え、バッファ位置情報並びにRDMA書き込みに関連付けられた他のメタデータを記憶することができる。
【0037】
残念ながら、RDMAデータ転送用のデータ及びヘッダを合体(結合)させることは(例えば、ソースバッファを宛先バッファにマッピングすることにより)、いくつかの問題を引き起こす。第1に、アプリケーション(例えば、宛先コンピューティングシステム145上で実行する1つ以上のアプリケーション)は、データがページ境界に位置合わせされることを必要とする。例えば、コンピューティングシステムは、メモリアドレスに対するワードサイズのチャンク(例えば、32ビットシステムで4バイトチャンク)以上のデータの読み取り又は書き込みを行う。
【0038】
ページ境界位置合わせ(又はデータ構造位置合わせ)は、コンピューティングシステムのパフォーマンスを向上させるように(例えば、特定のメモリ管理システムがメモリを管理する方法による)、ワードサイズのいくらかの倍数に等しいデータをメモリアドレスに書き込むことを含む。データをページ境界に位置合わせするため、最後のデータ構造の終わりと次のデータ構造の始まりとの間に無意味なもの(「ドントケア」)(無駄とも呼ばれる)としていくつかのバイトを挿入(又は処理)する必要がある場合がある(例えば、パディング)。したがって、データがページ境界に位置合わせされたままであるという必要条件により、不必要かつ冗長に電信上で送信される(例えば、RDMAデータ転送の一部としてネットワーク上で送信される)無駄が生じ得る。
【0039】
第2に、データ及びヘッダを合体させることにより、追加の冗長なRDMA書き込みが生じ得る(例えば、1つ以上の追加の宛先バッファは、ヘッダ境界の始まりにヘッダを書き込むこと、ページ境界位置合わせを維持すること、などが必要とされ得る)。したがって、データ及びヘッダを書き込むために使用される宛先バッファ(又は実行されるRDMA書き込み)の数を最小限にすることも、重要な考慮事項である。
【0040】
第3に、述べたように、OFEDを実装するようなシステムは、例えば、バッファ位置情報、RDMA書き込みメタデータ、ヘッダ位置情報などを維持するため、RDMA書き込みの一部として32ビット情報記憶領域を提供する、OFED APIを採用する(又は、採用するように変更され得る)。32ビットのデータ空間のうちの数ビットのみをヘッダ位置情報(例えば、ヘッダオフセット)の維持に利用できるため、かかるシステムでデータ及びヘッダを合体させるときは、ヘッダの配置も別の重要な考慮事項(及び制限事項)となる。
【0041】
本明細書では、提供された32ビットデータ空間を効率的に利用し、RDMA書き込みの数を最小限にし(例えば、データ及びヘッダの書き込みに使用する宛先バッファの数を減らす)、データのページ境界位置合わせを維持し、電信上の無駄を最小限にしながら、OFED RDMAコンピューティングシステムなどのシステムにおいて、データ及びヘッダを合体させ、スループットを改善するための方法、システム、及びプロセスを開示する。
コンピューティングシステムにおける例示的な実装
【0042】
図1は、一実施形態による、RDMA技術を実装し、使用するコンピューティングシステムのブロック図である。
図1のコンピューティングシステムは、ネットワーク180を介して通信可能に連結されたソースコンピューティングシステム105及び宛先コンピューティングシステム145を含む。ネットワーク180としては、任意のタイプのネットワーク又は相互接続(例えば、インターネット、広域ネットワーク(WAN)、SANなど)が挙げられ得る。
【0043】
ソースコンピューティングシステム105は、ソースプロセッサ110及びソースネットワークアダプタ115を含む。ソースプロセッサ110及びソースネットワークアダプタ115は、ソースメモリ120に通信可能に連結される。ソースメモリ120は、ソースドライバ125、ソースOS 130、及びソースバッファ140(1)〜(N)を実装するアプリケーション135を含む。同様に、宛先コンピューティングシステム145は、宛先メモリ150に通信可能に連結された宛先プロセッサ175及び宛先ネットワークアダプタ170を含む。宛先メモリ150は、宛先バッファ155(1)〜(N)、宛先ドライバ160、及び宛先OS 165を含む。
【0044】
図1のコンピューティングシステムは、ソースOS 130又は宛先OS 165を介さない、ソースコンピューティングシステム105のソースメモリ120から宛先コンピューティングシステム145のメモリへのリモートダイレクトメモリアクセスを可能にする(逆もまた同様)。例えば、ソースコンピューティングシステム105のソースネットワークアダプタ115は、宛先コンピューティングシステム145の宛先ネットワークアダプタ170が宛先メモリ150への(又はそこからの)データに直接アクセスすること(逆もまた同様)を可能にするメッセージ(例えば、クライアントメッセージ)を宛先コンピューティングシステム145の宛先ネットワークアダプタ170に送信し得る。
【0045】
いくつかの実施形態では、ソースネットワークアダプタ115及び宛先ネットワークアダプタ170は、ユーザー空間プロセス(それぞれ、ソースコンピューティングシステム105上及び宛先コンピューティングシステム145上)が、それぞれのカーネルをバイパスし、システムコールを回避することによって(例えば、
図1に示すように、ソースOS 130及び宛先OS 165をバイパスすることによって)、RDMA操作(又は、本明細書に記載するような方法に修正可能な、他のバッファベースの操作)を実行することを可能にする。RDMA操作は、OFED APIを使用して管理され、促進され得る。
【0046】
図2は、一実施形態による、OFED APIを実装するソースコンピューティングシステムのブロック図である。
図2に示すように、ソースコンピューティングシステム105は、OpenFabrics Enterprise Distribution(OFED(商標))APIなどのアプリケーションプログラミングインターフェース(API)205を含む。ソースコンピューティングシステム105はまた、RDMAモジュール210、バッファセレクタ215、データ及びヘッダコアレッサ220、並びにページ境界位置合わせ計算機225を含む。RDMAモジュール210(又は他の同等のサポートモジュール)、バッファセレクタ215、データ及びヘッダコアレッサ220、並びにページ境界位置合わせ計算機225は、ハードウェア又はソフトウェアとして、及びソースコンピューティングシステム105の一部として、又は別個に(例えば、RDMAサーバ、ソフトウェアアプライアンス、仮想マシン、又は何らかの他のタイプのコンピューティングデバイスの一部として)実装され得ることに留意されたい。
【0047】
ソースコンピューティングシステム105はまた、ソースメモリ120を含む。ソースメモリ120は、ソースバッファ140(1)〜(N)を含む。それぞれのソースバッファは、データ、又はデータ及びヘッダの組み合わせを含む。例えば、
図2に示すように、RDMAモジュール210によって宛先バッファにマッピングされるとき、ソースバッファ140(1)はデータ230(1)(例えば、1つ以上のデータ単位を伴う)を含み、ソースバッファ140(N−2)はデータ230(2)を含み、ソースバッファ140(N−1)(例えば、最後から2番目のバッファ)はデータ230(N−1)及びヘッダ240を含み、ソースバッファ140(N)はデータ230(N)を含む。
【0048】
RDMAモジュール210は、1つ以上のRDMA操作を管理、促進、調整、及び実行する。例えば、RDMAモジュール210は、RDMA書き込み操作又はRDMA読み取り操作を実行し得る。バッファセレクタ215は、データ、又はデータ及びヘッダを充填する(又は書き込む)1つ以上のバッファ(例えば、宛先バッファ155(1)〜(N))を選択する。データ及びヘッダコアレッサ220は、データ及びヘッダを(例えば、単一のRDMA書き込み/パケットの一部として単一のバッファ(例えば、宛先バッファ140(N−1))に)合体(又は結合)させることによって、ソースバッファを宛先バッファにマッピングする。最後に、ページ境界位置合わせ計算機225は、データがページ境界に位置合わせされるように、宛先バッファ155(1)〜(N)内でのデータの配置を決定する。
【0049】
併せて、RDMAモジュール210、バッファセレクタ215、データ及びヘッダをコアレッサ220、並びにページ境界位置合わせ計算機225は、OFEDベースのRDMAコンピューティング環境におけるスループットを改善するため、1つ以上の(利用可能な)バッファ(例えば、宛先バッファ155(1)−(N))の中でデータ及びヘッダの配置を決定する。
データ及びヘッダの書き込みの例
【0050】
一実施形態では、ソースコンピューティングシステム105は、(例えば、1つ以上のソースバッファに含まれる、及び/又は1つ以上のホスト、サーバなどによって実行されるアプリケーションからの)ヘッダ及びデータを受信する。バッファセレクタ215は、データ及びヘッダが書き込まれる宛先バッファ(例えば、宛先バッファ155(1)〜(N))を識別する。データ及びヘッダコアレッサ220は次いで、データ及びヘッダの(適切な)マッピング並びに配置を決定する。
【0051】
いくつかの実施形態では、データ及びヘッダのマッピング並びに配置の決定は、少なくとも3つの要素に基づく。第1に、データ及びヘッダの配置の決定は、(例えば、RDMA書き込みの数を減らすため)最小数の宛先バッファを利用することに基づく。第2に、データ及びヘッダの配置の決定は、(最小数の宛先バッファにおいて)ページ境界に位置合わせされるデータに基づく。第3に、データ及びヘッダの配置の決定は、電信上の無駄を最小限にする(例えば、ネットワーク上で送信される無駄(又はパディング)の量を減らす)配置に基づく。少なくともこれら3つの要素に基づいて、RDMAモジュール210は、データ及びヘッダを宛先バッファに書き込む(例えば、データをページ境界に書き込み、ヘッダをヘッダ境界に書き込む)。
【0052】
他の実施形態では、RDMAモジュール210は、RDMA書き込みを生成する。RDMA書き込みは、単一のRDMAパケットに合体された(例えば、データ及びヘッダコアレッサ220を使用)ヘッダ及びデータを含む。特定の実施形態では、RDMA書き込みは、32ビットデータ空間(例えば、32ビットデータ空間は、クライアントデータ空間の一部ではない)が付随し、RDMAを使用して宛先コンピューティングシステム145に送信される。この例では、32ビットデータ空間は、ヘッダのオフセットを含むために(例えば、宛先バッファへのデータ及びヘッダの書き込みの一部として)使用される。
【0053】
他の実施形態では、バッファセレクタ215は、それぞれのバッファのサイズに基づいて、データ及びヘッダに必要とされるバッファの最小数を決定する。バッファセレクタ215は、最小数のバッファでデータをページ境界に位置合わせできない場合に、1つ以上の追加のバッファを選択する。特定の実施形態では、それぞれのバッファは宛先バッファであり、OFED APIは、単一の宛先バッファに対する複数のソースバッファのマッピングを可能にする。
データ及びヘッダの合体の例
【0054】
図3Aは、一実施形態による、合体されていないデータ単位及びヘッダのブロック図である。説明のため、
図3A〜
図3E及び
図4A〜
図4Cのソースバッファ140(1)〜(N)のサイズ(並びに、受信/宛先バッファ155(1)〜(N)のサイズ)は8kであり、データは4kで位置合わせされる。しかしながら、代替の実装及び実施形態では、ソースバッファ140(1)〜(N)及び宛先バッファ155(1)〜(N)は、任意のサイズ(例えば、16k、32kなど)であってよく、データのページ境界位置合わせも異なってよい(例えば、データは2k、3k、又は6kで位置合わせされ得る)。
【0055】
図3Aに示すように、いくつかの実施形態では、データ(例えば、データ単位305(1)〜(13))及びヘッダ(例えば、ヘッダ235)は、合体されない(例えば、単一の宛先バッファ又は単一のRDMA書き込みに結合されない)。この例では、データは13Kであり(例えば、データ単位305(1)〜(13))、ヘッダは1kである(例えば、ヘッダ235)。データ(例えば、4kでページ境界に位置合わせされる13kのデータ)は、2つのバッファ(例えば、
図3Aに示すように、宛先バッファ155(1)及び155(2))を必要とする(及び使用する)。データとヘッダが合体していない場合、ヘッダ235は、別個の追加バッファ(例えば、宛先バッファ155(3))を必要とする。したがって、電信上の無駄は存在しないが、RDMA書き込み操作は、3つの宛先バッファを消費することになる。この結果、3つのRDMA書き込みが、データ及びヘッダのRDMA転送の一部として必要とされることになる。
【0056】
図3Bは、一実施形態による、バッファの始まりに書き込まれるヘッダのブロック図である。いくつかの実施形態では、ヘッダ(例えば、ヘッダ235)は、バッファ(例えば、宛先バッファ140(1))の始まりに書き込まれる。ただし、前述のように、RDMAコンピューティング環境におけるアプリケーションは、典型的に、データがページ境界に(例えば、データが4kでページ境界に位置合わせされる場合、8kバッファ内の0k又は4kに)書き込まれることを必要とする。
【0057】
この結果、
図3Bに示すように、データはページに位置合わせされた境界で始まる必要があり(例えば、データ単位305(1)は、4kのページ境界で始まる必要がある)、必要なバッファ数も減らされていない(例えば、3つのバッファ)ため、ヘッダをバッファの始まりに書き込むことにより、ヘッダの終りとデータの始まりとの間に電信上の無駄が生じ得る。
【0058】
図3Cは、一実施形態による、データの直後に書き込まれるヘッダのブロック図である。この例では、13kのデータ(例えば、データ単位305(1)〜(13))を書き込むことは、2つのバッファ(例えば、宛先バッファ155(1)及び155(2))を必要とする。いくつかの実施形態では、ヘッダ235は、データの直後(例えば、データ単位305(13)の後)に書き込まれる。前述のように、OFED APIは、プログラマに、私的使用のために全てのRDMA書き込みを伴う32ビット空間を提供する。宛先コンピューティングシステム145は、この32ビット値を使用して、更なる処理のために、適切なバッファ(複数可)及びバッファ(複数可)に関する使用情報(例えば、RDMA書き込み)を特定することができる。
【0059】
しかしながら、一例として、OFEDベースのRDMAコンピューティング環境を使用すると、この32ビットデータ空間の一部はまた、特定のバッファ内の正確なヘッダオフセットを指示するために必要とされる。
図3Cの例では、ヘッダ235がデータ(8kバッファに対する8バイトの位置合わせ)の直後に書き込まれる場合、ヘッダオフセットを表すことは、即値データの32ビットデータ空間から利用可能であるよりも多くの空間(例えば、10ビット)を必要とする。残念ながら、前述のような多くのシナリオでは、既に密集している32ビットデータ空間において10(空き)ビットを発見することは可能であり得ない。したがって、
図3Cの例にあるヘッダ及びデータの配置によって、結果的に、電信上の無駄はゼロとなり、最小数のバッファが使用されるが、ヘッダオフセットを表すことは(例えば、特に、ヘッダがヘッダ境界に書き込まれていない場合)32ビットデータ空間からあまりにも多くのビットを必要とするため、このようなソリューションは実現可能であり得ない。
【0060】
図3Dは、一実施形態による、OFED APIによって提供される32ビットデータ空間のブロック図である。
図3Dに示すように、32ビット即値データ310は、バッファ識別子315、フラグ(複数可)320、メタデータ325、ソース識別子330、クライアント識別子335、及び空きビット340(1)〜(N)(例えば、ヘッダオフセットの表現に利用可能)などの情報を含む。他の情報に加え、バッファ識別子、フラグ(複数可)、メタデータ、ソース識別子、及びクライアント識別子に関する情報は、32ビット即値データ310の空間(例えば、ビット)の大部分を使用する。したがって、空きビット340(1)−(N)は、ヘッダオフセットの表現に利用可能な少数のビットを表す。この結果、利用可能な空間(例えば、空きビット)でヘッダオフセット情報を正確に表すため、いくつかの実施形態では、(例えば、空きビット340(1)〜(N)を使用して、ヘッダオフセット情報を完全かつ正確に表すことができるように)ヘッダはヘッダ境界に書き込まれる。
【0061】
図3Eは、一実施形態による、位置合わせの終わりに書き込まれるヘッダのブロック図である。
図3Eに示すように、特定の実施形態では、ヘッダ235は、特定の位置合わせの終わりに(例えば、2kの位置合わせの終わりに)及びヘッダ境界に(例えば、8kバッファ内の6kに)書き込まれる。この例では、データが(例えば、宛先バッファ155(1)及び155(2)のような1つ以上のバッファに)書き込まれる場合、ヘッダ235の位置合わせは、潜在的に(例えば、ヘッダ配置に)利用可能なビット数に基づいて決定される。利用可能な空きビットが多いほど、無駄が少なくなる。
【0062】
例えば、
図3Eにおいて位置合わせに2ビットのみが利用可能である場合、ヘッダ(例えば、2kで位置合わせされる)は、4つの可能なオフセット(例えば、8kバッファ内の0k、2k、4k、及び6k)に配置され得る(又はそこに書き込まれ得る)。この例において、発生し得る最大の電信上の無駄は2kである。しかしながら、
図3Eにおいて位置合わせに3ビットを利用できる場合、ヘッダ(例えば、1kで位置合わせされる)は、8つの可能なオフセットに配置され得る(又は書き込まれ得る)ため、発生し得る最大の電信上の無駄は1kに軽減される。したがって、
図3Eに示すように、位置合わせの終わりにヘッダを書き込むことはまた、いくらかの無駄を生むが、最小限になる(例えば、
図3Aに示すようにバッファの始まりにヘッダを書き込むことと比較した場合)。
ヘッダ及びデータ配置の例
【0063】
図4Aは、一実施形態による、最後から2番目のバッファで位置合わせの終わりに書き込まれるヘッダのブロック図である。
図4Aに示すように、いくつかの実施形態では、ヘッダ235は、最後から2番目のバッファ(例えば、宛先バッファ140(N−1))で、ヘッダサイズ(例えば、
図4Aに示すように1k)及び位置合わせ(例えば、ヘッダ境界に基づく)に基づいて(例えば、宛先バッファ155(N−1)の)最後の(利用可能な)ヘッダ位置合わせされたオフセット(例えば、6k)に書き込まれる。特定の実施形態では、バッファセレクタ215は、宛先バッファ155(N−1)を最後から2番目のバッファとして識別し、宛先バッファ155(N−1)をヘッダの配置用に選択する。ページ境界位置合わせ計算機225は次いで、宛先バッファ155(N−1)に書き込まれ得るデータのページ境界位置合わせ(例えば、データ単位305(1)〜305(6))を計算し、データ及びヘッダコアレッサ220は、ヘッダの配置(例えば、1k)、ヘッダの表現(例えば、32ビット即値データ310による)、及びヘッダ位置合わせ(例えば、6kで)のために十分な空間が利用可能であることを保証する。
【0064】
したがって、
図4Aに示すように、いくつかの実施形態では、最後から2番目のバッファにおいて位置合わせの終わりにヘッダを書き込むことにより、結果的に電信上の無駄がゼロになり、追加のバッファも不要になる。
図4Bは、他の実施形態による、追加のバッファ(の必要)なしに、位置合わせの終わりに書き込まれるヘッダのブロック図である。例えば、バッファ内の利用可能空間(例えば、ビット)が(例えば、データが書き込まれた後)で2kのヘッダ位置合わせが可能である場合(例えば、可能な最小量のビットでヘッダオフセットをキャプチャできるようにするため)、位置合わせの終わりに(例えば、宛先バッファ155(N)で)ヘッダ235を書き込むことにより、それ以外の場合に可能であるよりも書き込まれるデータが多くなる(例えば、データ単位305(14))。データが最大限まで充填されていない場合(例えば、データ単位305(14)まで)、1kのギャップ(例えば、電信上の無駄)が導入される。しかしながら、この例では、ヘッダ235は、データの後(例えば、14データ単位の後)に書き込まれ得る。この例のヘッダ及びデータの配置では、電信上に無駄が生じず、また追加(宛先)バッファが必要とされないことが理解されよう。
【0065】
図4Aと同様に、
図4Cは、一実施形態による、最後から2番目のバッファに書き込まれるヘッダのブロック図である。
図4Cに示すように、ヘッダ235は、最後から2番目のバッファである宛先バッファ155(N−1)に書き込まれる。32ビット即値データ310にヘッダオフセットを組み込む必要性によって必要とされるように、ヘッダ235は、ヘッダ境界で(例えば、6Kで)ヘッダ位置合わせされる。最後のバッファ内の利用可能空間には、データ(例えば、データ単位305(7)〜(14))が完全に充填される。データ単位305(1)〜(6)は、宛先バッファ155(N−1)に書き込まれる。両方の宛先バッファ155(N−1)及び155(N)内のデータは、ページ境界で位置合わせされ、ヘッダ235もヘッダ境界で位置合わせされる。したがって、この例では、データ及びヘッダを書き込むために必要なバッファの最小数が使用され、かつ、電信上の無駄がない。
【0066】
本明細書に記載されるような(例えば、
図1に示すような)コンピューティングシステムが複数の受信バッファ(例えば、宛先バッファ155(1)〜(N))を有する場合、かつ、受信/宛先バッファの合計サイズが、位置合わせされたヘッダとページ境界で位置合わせされたデータとの合計よりも大きい場合、最後から2番目のバッファで位置合わせの終わりにヘッダを書き込むことにより、結果的にバッファの利用が最小限になり、電信上の無駄が軽減(又は排除)されることが理解されよう。このようにヘッダ及びデータを合体させることにより、結果的に、I/Oパフォーマンス及びアプリケーションスループットが向上することも理解されよう。
ヘッダ及びデータを合体させるための例示的なプロセス
【0067】
図5Aは、一実施形態による、バッファにデータ及びヘッダを充填するためのプロセスを示すフローチャートである。プロセスは、例えば、ホスト、仮想マシン、若しくはソースコンピューティングシステム105に通信可能に連結された他のタイプのコンピューティングシステムからの、又はソースコンピューティングシステム105上で実行される1つ以上のアプリケーションからの入力パラメータとして、ヘッダ(例えば、ヘッダ235)及びデータ(例えば、データ単位305(1)〜(14))を受信することにより、505から始まる。510で、プロセスは、ヘッダ及びデータに必要なバッファ数を(例えば、バッファセレクタ215を使用することにより、かつ、データの一部として受信したデータ単位のサイズに基づいて)決定する。515で、プロセスは、データをページ(境界)に位置合わせして(例えば、ページ境界位置合わせ計算機225を使用する)、このマッピングを記録する。
【0068】
520で、プロセスは、充填にする(例えば、データ(単位)を書き込む)データ専用バッファが存在するか否かを決定する。充填するデータ専用バッファが存在する場合、525で、プロセスは、バッファ(複数可)にデータを充填する(例えば、宛先バッファ155(1)〜(N−2))。充填するデータ専用バッファが存在しない場合、530で、プロセスは、最後から2番目のバッファ(例えば、宛先バッファ155(N−1))におけるヘッダの位置を決定する。535で、プロセスは、データを宛先バッファ155(N−2)まで充填する。540で、プロセスは、宛先バッファ155(N−1)内にデータ及びヘッダを充填する(例えば、
図4A及び
図4Cに示すとおり)。545で、プロセスは、最後のバッファ(例えば、宛先バッファ155(N))に残りのデータを充填する。プロセスは、処理する別のメッセージが存在するかどうかを決定することにより、550で終了する。
【0069】
図5Bは、一実施形態による、ヘッダ及びデータを結合するためのプロセスを示すフローチャートである。プロセスは、ソースバッファに含まれるデータ及びヘッダを受信することによって、555から始まる。560で、プロセスは、ヘッダ及びデータ配置解析を(例えば、RDMAモジュール210を使用して)開始する。565で、プロセスは、利用可能なバッファのサイズ(例えば、8k、16k、32kなど)を計算する。570で、プロセスは、データ及びヘッダに必要なバッファの数(例えば、最小数)を(例えば、受信したデータ単位のサイズに基づいて)決定する。575で、プロセスは、識別されたバッファ内のデータに対して(例えば、ページ境界位置合わせ計算機225を使用して)ページ境界位置合わせを決定する。ページ境界位置合わせ計算機225はまた、ヘッダのヘッダ境界を決定できることに留意されたい。
【0070】
580で、プロセスは、最後から2番目のバッファ内の(例えば、宛先バッファ155(N−1)内の)ヘッダの位置を決定する。例えば、宛先バッファ155(N−1)における、ページ境界に位置合わせされたデータの終わりの(例えば、
図4A及び
図4Cに示すようにデータ単位305(6)の後の)、及びヘッダ境界(例えば、同じく
図4A及び
図4Cに示すように、1kヘッダの2k位置合わせの場合に6kで始まる)のヘッダ235の位置を決定し得る。585で、プロセスは、最小数の宛先バッファが利用され、データがページ境界に位置合わせされるように、宛先バッファにデータ及びヘッダを充填する。590で、プロセスは、結合されたヘッダ及びデータを、単一のRDMA書き込み(例えば、RDMAを介して送信されるメッセージ)内の配置/マッピング情報と共に、宛先(例えば、宛先計算機システム145)に送信する。プロセスは、処理する別のヘッダ及び(更なる)データが存在するかどうかを決定することにより、595で終了する。
【0071】
図6は、一実施形態による、ヘッダ及びデータの配置/マッピング情報を決定するためのプロセスを示すフローチャートである。プロセスは、データ及びヘッダを受信することによって、605から始まる。610で、プロセスは、データ及びヘッダを書き込むのに必要なバッファの最小数を決定する。615で、プロセスは、選択されたバッファ内のデータ及びヘッダの配置を決定する。620で、プロセスは、データがページ境界に位置合わせされているか否か、及びデータが電信上の無駄を生じさせ得る最小数のギャップを有しているか否かを決定する。データがページ境界に位置合わせされていない場合、又はデータが電信上の無駄を生じさせ得る最小数のギャップ(又はゼロギャップ)を有していない場合、625で、プロセスは、データがページ境界に位置合わせされ、かつ最小限の(又はゼロ)ギャップを有する状態に維持されるよう、選択されたバッファ内のデータ及びヘッダの位置を再決定する。しかしながら、データが、ページ境界に位置合わせされ、電信上の無駄を生じさせ得る最小数のギャップ(又は更にはゼロキャップ)を有している場合、630で、プロセスは、選択されたバッファにデータ及びヘッダを充填する(例えば、
図4A及び
図4Cに示すとおり)。プロセスは、処理する別のヘッダ及び(より多くの)データが存在するかどうかを決定することにより、635で終了する。
【0072】
図7は、一実施形態による、RDMAを使用してデータ及びヘッダを生成及び送信するためのプロセスを示すフローチャートである。プロセスは、データ及びヘッダを(例えば、ソースバッファから)受信する又はアクセスすることによって、705から始まる。710で、プロセスは、最小数のバッファが使用され、データがページ境界に位置合わせされ、ヘッダが位置合わせされ、電信上の無駄が最小限になる(又はなくなる)ように、データ及びヘッダをバッファに書き込む。
【0073】
715で、プロセスは、ヘッダオフセット情報(例えば、ヘッダが特定の宛先バッファに書き込まれる場合、そのときのヘッダの位置)を32ビット即値データ310(例えば、API 205の一部として提供される32ビットデータ空間)に組み込む。720で、プロセスは、RDMA書き込みを(例えば、RDMAモジュール210を使用して)生成する。725で、プロセスは、RDMA書き込みを32ビットの即値データ310と共に宛先に(例えば、宛先コンピューティングシステム145に)送信する。プロセスは、処理する別のヘッダ及び(更なる)データが存在するかどうかを決定することにより、730で終了する。
【0074】
決定された配置/マッピング情報に基づいて、ソースバッファを1つ以上の宛先バッファにマッピングし、ヘッダ及びデータを特定の選択された宛先バッファ(複数可)に書き込むことにより、ヘッダ及びデータを合体させることで、結果的に、OFEDベース及びRDMA対応のコンピューティング環境において宛先バッファが効率的に利用され、電信上の無駄が軽減(又は更には排除)されることが理解されよう。本明細書に記載のシステム、方法、及びプロセスはまた、このようなコンピューティング環境において増大したI/Oパフォーマンス及びアプリケーションスループットを提供することができることも理解されよう。
例示的なコンピューティング環境
【0075】
図8は、一実施形態による、配置及びマッピング情報モジュール865がソフトウェアに実装され得る態様を示すコンピューティングシステムのブロック図である。コンピューティングシステム800は、コンピュータ可読命令を実行することができる任意のシングル又はマルチプロセッサコンピューティングデバイスあるいはシステムを広く表す。コンピューティングシステム800の例としては、ワークステーション、パーソナルコンピュータ、ラップトップ、クライアント側端末、サーバ、分散型コンピューティングシステム、携帯用デバイス(例えば、パーソナル携帯情報機器、及び携帯電話)、ネットワークアプライアンス、ストレージコントローラ(例えば、アレイ、テープドライブ、又はハードディスクコントローラ)などを含む任意の1つ以上の様々なデバイスが挙げられるが、これらに限定されない。コンピューティングシステム800は、少なくとも1つのプロセッサ855(例えば、ソースプロセッサ110又は宛先プロセッサ175)と、メモリ860(例えば、ソースメモリ120又は宛先メモリ150)と、を含んでもよい。ソースコンピューティングシステム105又は宛先コンピューティングシステム145を実装するソフトウェアを実行することにより、コンピューティングシステム800は、OpenFabrics環境におけるスループットを改善するように構成された、特殊用途のコンピューティングデバイスとなる。
【0076】
プロセッサ855は、データの処理、又は命令の解釈及び実行ができる任意のタイプ又は形式の処理装置を概して表す。特定の実施形態では、プロセッサ855は、ソフトウェアアプリケーション又はモジュールから命令を受信してもよい。これらの命令は、プロセッサ855に、本明細書に記載及び/又は例示する実施形態のうちの1つ以上の機能を実施させてもよい。例えば、プロセッサ855は、本明細書に記載する動作の全部若しくは一部を実行してもよく、及び/又は実行するための手段であってもよい。プロセッサ855は、また、本明細書に記載又は例示する任意の他の動作、方法、若しくはプロセスを実行してもよく、及び/又は実行するための手段であってもよい。
【0077】
メモリ860は、データ及び/又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ若しくは形式の揮発性若しくは不揮発性ストレージデバイス又は媒体を概して表す。例としては、ランダムアクセスメモリ(random access memory、RAM)、読み取り専用メモリ(read only memory、ROM)、フラッシュメモリ、又は任意の他の好適なメモリデバイスが挙げられるが、これらに限定されない。必須でないが、特定の実施例では、コンピューティングシステム800は、揮発性メモリユニット及び不揮発性ストレージデバイスの両方を含んでもよい。一例において、配置及びマッピング情報モジュール865を実行するプログラム命令は、メモリ860(例えば、ソースメモリ120)にロードされてもよい。
【0078】
特定の実施形態では、コンピューティングシステム800はまた、プロセッサ855及び/又はメモリ860に加えて、1つ以上の構成要素又は要素を含んでもよい。例えば、
図8に示すように、コンピューティングシステム800は、メモリコントローラ820、入力/出力(I/O)コントローラ835、及び通信インターフェース845を含んでもよく、これらの各々は、通信インフラストラクチャ805を介して相互接続されてもよい。通信インフラストラクチャ805は、コンピューティングデバイスの1つ以上の構成要素間の通信を容易にすることが可能な任意のタイプ又は形式のインフラストラクチャを概して表す。通信インフラストラクチャ805の例としては、通信バス(業界標準アーキテクチャ(Industry Standard Architecture、ISA)、周辺構成要素相互接続(Peripheral Component Interconnect、PCI)、PCIエクスプレス(PCI express、PCIe)、又は類似のバスなど)、及びネットワークが挙げられるが、これらに限定されない。
【0079】
メモリコントローラ820は、メモリ若しくはデータを取り扱うことが可能な、又はコンピューティングシステム800の1つ以上の構成要素間の通信を制御することが可能な任意のタイプ又は形式のデバイスを概して表す。特定の実施形態では、メモリコントローラ820は、通信インフラストラクチャ805を介して、プロセッサ855、メモリ860、及びI/Oコントローラ835間の通信を制御してもよい。特定の実施形態では、メモリコントローラ820は、本明細書に記載又は例示する1つ以上の動作又は機能を単独又は他の要素との組み合わせのいずれかで実施してもよく、及び/又は実施するための手段であってもよい。
【0080】
I/Oコントローラ835は、仮想マシン、アプライアンス、ゲートウェイ、及び/若しくはコンピューティングシステムの入出力機能を調整並びに/又は制御することが可能な任意のタイプ又は形式のモジュールを概して表す。例えば、特定の実施形態では、I/Oコントローラ835は、プロセッサ855(例えば、ソースプロセッサ110又は宛先プロセッサ175)、メモリ860(例えば、ソースメモリ120又は宛先メモリ150)、通信インターフェース845、表示アダプタ815、入力インターフェース825、及びストレージインターフェース840などの、ソースコンピューティングシステム105又は宛先コンピューティングシステム145の1つ以上の要素間のデータの転送を制御又は促進し得る。
【0081】
通信インターフェース845は、コンピューティングシステム800と、1つ以上の他のデバイスとの間の通信を容易にすることが可能な任意のタイプ又は形式の通信デバイス又はアダプタを広く表す。通信インターフェース845は、コンピューティングシステム800と追加のコンピューティングシステムを含むプライベート又はパブリックネットワークとの間の通信を容易にし得る。通信インターフェース845の例としては、有線ネットワークインターフェース(ネットワークインターフェースカードなど)、無線ネットワークインターフェース(無線ネットワークインターフェースカードなど)、モデム、及び任意の他の好適なインターフェースを含むが、これらに限定されない。通信インターフェース845は、インターネットなどネットワークへの直接リンクを介してリモートサーバへの直接接続を提供してよく、また、例えば、ローカルエリアネットワーク(例えば、イーサネット(登録商標)ネットワーク)、パーソナルエリアネットワーク、電話若しくはケーブルネットワーク、携帯電話接続、衛星データ接続、又は任意の他の好適な接続を通じて、かかる接続を間接的に提供してよい。
【0082】
通信インターフェース845はまた、外部バス又は通信チャネルを介して、コンピューティングシステム800と、1つ以上の追加のネットワーク又はストレージデバイスとの間の通信を容易にするように構成されたホストアダプタを表してよい。ホストアダプタの例としては、スモールコンピュータシステムインターフェース(Small Computer System Interface、SCSI)ホストアダプタ、ユニバーサルシリアルバス(Universal Serial Bus、USB)ホストアダプタ、米国電気電子技術者協会(Electrical and Electronics Engineers、IEEE)1394ホストアダプタ、シリアルアドバンストテクノロジーアタッチメント(Serial Advanced Technology Attachment、SATA)、シリアルアタッチトSCSI(Serial Attached SCSI、SAS)、及びエクスターナルSATA(external SATA、eSATA)ホストアダプタ、アドバンスドテクノロジーアタッチメント(Advanced Technology Attachment、ATA)、及びパラレルATA(Parallel ATA、PATA)ホストアダプタ、ファイバチャネルインターフェースアダプタ、イーサネット(登録商標)アダプターなどが挙げられるが、これらに限定されない。通信インターフェース845はまた、コンピューティングシステム800が、(例えば、実行するためにリモートデバイスに対して命令を送受信することにより)分散又はリモートコンピューティングに関与できるようにしてよい。
【0083】
図8に示すように、コンピューティングシステム800はまた、表示アダプタ815を介して、通信インフラストラクチャ805に接続されている、少なくとも1つの表示デバイス810を含んでもよい。表示デバイス810は、表示アダプタ815によって転送された情報を視覚的に表示することが可能な任意のタイプ又は形式のデバイスを概して表す。同様に、表示アダプタ815は、表示デバイス810上に表示するために、通信インフラストラクチャ805から(又は当該技術分野において既知のように、フレームバッファから)、グラフィックス、テキスト、及び他のデータを転送するように構成された任意のタイプ又は形式のデバイスを概して表す。コンピューティングシステム800はまた、入力インターフェース825を介して通信インフラストラクチャ805に接続されている、少なくとも1つの入力デバイス830を含んでよい。入力デバイス830は、コンピュータ又はヒトのいずれかによって生成された入力を、コンピューティングシステム800に提供することが可能な任意のタイプ又は形式の入力デバイスを概して表す。入力デバイス830の例としては、キーボード、ポインティングデバイス、音声認識デバイス、又は任意の他の入力デバイスが挙げられる。
【0084】
コンピューティングシステム800はまた、ストレージインターフェース840を介して通信インフラストラクチャ805に接続されているストレージデバイス850を含んでよい。ストレージデバイス850は、データ及び/又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式のストレージデバイス又は媒体を概して表す。例えば、ストレージデバイス850としては、磁気ディスクドライブ(例えば、いわゆるハードドライブ)、フロッピーディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュドライブなどが挙げられ得る。ストレージインターフェース840は、コンピューティングシステム800のストレージデバイス850と他の構成要素との間でデータを転送及び/又は送信するための任意のタイプ又は形式のインターフェース又はデバイスを概して表す。
【0085】
ストレージデバイス850は、コンピュータソフトウェア、データ、又は他のコンピュータ可読情報を記憶するように構成されている、取り外し可能なストレージユニットから読み取るように、及び/又はそれに書き込むように構成されてよい。好適な取り外し可能なストレージユニットの例としては、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリデバイスなどが挙げられるが、これらに限定されない。ストレージデバイス850は、また、コンピュータソフトウェア、データ、又は他のコンピュータ可読命令が、コンピューティングシステム800にロードされることを可能にするための他の類似の構造又はデバイスを含んでもよい。例えば、ストレージデバイス850は、ソフトウェア、データ、又は他のコンピュータ可読情報を読み取り、及び書き込むように構成されてもよい。ストレージデバイス850は、また、コンピューティングシステム800の一部であってもよく、又は他のインターフェースシステムによってアクセスされる別個のデバイスであってもよい。
【0086】
多くの他のデバイス又はサブシステムは、コンピューティングシステム800に接続されてもよい。逆に、
図8に示す構成要素及びデバイスの全てが、本明細書において説明及び/又は例示される実施形態を実践するために存在する必要があるわけではない。上で述べたデバイス及びサブシステムはまた、
図8に示すものとは異なる様式で相互接続されてもよい。
【0087】
コンピューティングシステム800はまた、任意の数のソフトウェア、ファームウェア、及び/又はハードウェア構成を採用してもよい。例えば、本明細書において開示される実施形態のうちの1つ又は2つ以上は、コンピュータ可読ストレージ媒体上にコンピュータプログラム(コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、又はコンピュータ制御論理とも称される)としてコード化され得る。コンピュータ可読ストレージ媒体の例としては、磁気ストレージ媒体(例えば、ハードディスクドライブ、及びフロッピーディスク)、光ストレージメディア(例えば、CD−、又はDVD−ROM)、電子ストレージ媒体(例えば、ソリッドステートドライブ、及びフラッシュメディア)などが挙げられる。そのようなコンピュータプログラムはまた、インターネットなどのネットワークを介してメモリに又はキャリア媒体に記憶するためにコンピューティングシステム800に転送されてもよい。
【0088】
コンピュータプログラムを含むコンピュータ可読媒体は、コンピューティングシステム800にロードされてもよい。コンピュータ可読媒体上に記憶されたコンピュータプログラムの全部又は一部は、次に、メモリ860及び/又はストレージデバイス850の種々の部分に記憶されてもよい。プロセッサ855によって実行されるとき、コンピューティングシステム800にロードされたコンピュータプログラムは、本明細書において説明及び/又は例示する実施形態のうちの1つ以上の機能をプロセッサ855に実施させてもよく、及び/又はそれらを実施するための手段であってもよい。付加的に又は代替的に、本明細書に説明及び/又は例示される例示的な実施形態のうちの1つ又は2つ以上は、ファームウェア及び/又はハードウェアに実装され得る。例えば、コンピューティングシステム800は、本明細書において開示される実施形態のうちの1つ又は2つ以上を実行するように適合された特定用途向け集積回路(application specific integrated circuit、ASIC)として構成されてもよい。
例示的なネットワーキング環境
【0089】
図9は、本開示の一実施形態による、様々なデバイスがネットワークを介して通信し得る態様を例示する、ネットワーク化されたシステムのブロック図である。特定の実施形態では、ネットワーク接続型ストレージ(NAS)デバイスは、ネットワークファイルシステム(NFS)、サーバメッセージブロック(SMB)、又はコモンインターネットファイルシステム(CIFS)などの様々なプロトコルを使用して、ソースコンピューティングシステム105及び/又は宛先コンピューティングシステム145と通信するように構成されてもよい。ネットワーク180は、ソースコンピューティングシステム105及び/又は宛先コンピューティングシステム145間の通信を促進することができる任意のタイプ若しくは形式のコンピュータネットワーク又はアーキテクチャを概して表す。
【0090】
特定の実施形態では、
図8の通信インターフェース845などの通信インターフェースは、ソースコンピューティングシステム105及び/又は宛先コンピューティングシステム145と、ネットワーク180との間の接続性を提供するために使用され得る。本明細書に記載及び/又は例示する実施形態は、インターネット又は任意の特定のネットワークベース環境に限定されないことに留意されたい。例えば、ネットワーク180は、ストレージエリアネットワーク(SAN)であってもよい。
【0091】
一実施形態では、開示する実施形態のうちの1つ以上の全体又は一部は、コンピュータプログラムとしてコード化されてよく、また、ソースコンピューティングシステム105及び/若しくは宛先コンピューティングシステム145、又はそれらの任意の組み合わせにロードされて実行されてもよい。本明細書で開示する実施形態のうちの1つ以上の全体又は一部はまた、コンピュータプログラムとしてコード化され、ソースコンピューティングシステム105及び/又は宛先コンピューティングシステム145に記憶され、ネットワーク180を介して分散されてもよい。いくつかの例では、ソースコンピューティングシステム105及び/又は宛先コンピューティングシステム145の全体又は一部は、クラウドコンピューティング又はネットワークベース環境の部分を表してもよい。クラウドコンピューティング環境は、インターネットを介して、種々のサービス及びアプリケーションを提供し得る。これらのクラウドベースのサービス(例えば、サービスとしてのソフトウェア、サービスとしてプラットフォーム、サービスとしてのインフラストラクチャなど)は、ウェブブラウザ又は他の遠隔インターフェースを通じて、アクセス可能であり得る。本明細書において説明される種々の機能は、遠隔デスクトップ環境又は任意の他のクラウドベースのコンピューティング環境を通じて提供され得る。
【0092】
加えて、本明細書に記載の構成要素のうちの1つ又は2つ以上は、データ、物理的デバイス、及び/又は物理的デバイスの表現を、ある形態から他の形態に変換し得る。例えば、配置及びマッピング情報モジュール865は、ソースコンピューティングシステム105及び/又は宛先コンピューティングシステム145にOpenFabrics及びRDMAコンピューティング環境におけるスループットを改善させるため、ソースコンピューティングシステム105及び/又は宛先コンピューティングシステム145の挙動を変換し得る。
【0093】
本開示がいくつかの実施形態と関連して説明してきたが、本開示は、本明細書で述べた特定の形式に限定されるように意図されていない。逆に、添付の請求項によって規定されるような本開示の範囲内に合理的に含まれ得るような代替形態、修正形態、及び等価物を包含するように意図されている。