(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-10
(45)【発行日】2024-06-18
(54)【発明の名称】ネットワークアダプタのデータ処理方法およびネットワークアダプタ
(51)【国際特許分類】
G06F 13/12 20060101AFI20240611BHJP
G06F 3/06 20060101ALI20240611BHJP
G06F 13/10 20060101ALI20240611BHJP
【FI】
G06F13/12 330D
G06F3/06 301F
G06F3/06 301N
G06F13/10 330C
(21)【出願番号】P 2022572527
(86)(22)【出願日】2021-04-30
(86)【国際出願番号】 CN2021091779
(87)【国際公開番号】W WO2021249063
(87)【国際公開日】2021-12-16
【審査請求日】2022-12-28
(31)【優先権主張番号】202010526778.1
(32)【優先日】2020-06-09
(33)【優先権主張国・地域又は機関】CN
(31)【優先権主張番号】202010999199.9
(32)【優先日】2020-09-22
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】504161984
【氏名又は名称】ホアウェイ・テクノロジーズ・カンパニー・リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ル、シェンウェン
(72)【発明者】
【氏名】ギッシン、ヴィクター
(72)【発明者】
【氏名】リ、ジュンイン
【審査官】田中 啓介
(56)【参考文献】
【文献】特開2008-102967(JP,A)
【文献】特開2014-153754(JP,A)
【文献】特開2019-164713(JP,A)
【文献】特開2018-185814(JP,A)
【文献】国際公開第2015/121912(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F3/06-3/08
G06F11/16-11/20
G06F12/00-12/06
G06F13/10-13/42
G06F15/16-15/177
(57)【特許請求の範囲】
【請求項1】
ネットワークアダプタのためのデータ処理方法であって、
前記ネットワークアダプタが、第1の
I/Oコマンドを取得する段階であって、前記第1のI/Oコマンドは、ローカルサーバに記憶されたデータを少なくとも1つのリモートサーバに書き込むことを命令し、前記第1のI/Oコマンドは、ローカルサーバに記憶されている前記データのアドレス情報および長さ情報を含む、段階と、
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて前記データを分割し、アドレス情報および長さ情報の複数のグループを取得する段階と、
前記ネットワークアダプタが、アドレス情報と長さ情報の前記複数のグループに基づいて、前記ローカルサーバから、アドレス情報と前記長さ情報の前記複数のグループに対応するデータを取得する段階と、前記データを前記少なくとも1つのリモートサーバへ送信する段階と、を備え
、
前記ネットワークアダプタ上のメモリは、前記データを保存しない、方法。
【請求項2】
前記ネットワークアダプタが、アドレス情報と長さ情報の前記複数のグループに基づいて、前記ローカルサーバから、アドレス情報と長さ情報の前記複数のグループに対応するデータを取得する前記段階が、
前記ネットワークアダプタが、第1の
VMから、アドレス情報と長さ情報の前記複数のグループと、前記第1のI/Oコマンドを配信する前記ローカルサーバ内の前記第1のVMに対応する識別子とに基づいて、アドレス情報と長さ情報の前記複数のグループに対応する前記データを取得する段階を備える、請求項1に記載の方法。
方法。
【請求項3】
前記ネットワークアダプタが、複数のI/Oコマンドを受信する段階と、
前記ネットワークアダプタが、前記複数のI/Oコマンドが記憶されている前記リモートサーバおよび/または前記複数のI/Oコマンドを配信する前記ローカルサーバ内の仮想マシンVMの記憶アドレスに基づいて、前記複数のI/Oコマンドから前記第1のI/Oコマンドを選択する段階と、をさらに備える請求項
1に記載の方法。
【請求項4】
前記ネットワークアダプタがハードウェアエンジンを備え、前記ハードウェアエンジンがデータプレーンを処理するために使用され、
前記ネットワークアダプタが、前記複数のI/Oコマンドが記憶されている前記リモートサーバおよび/または前記複数のI/Oコマンドを配信する前記ローカルサーバ内の仮想マシンVMの記憶アドレスに基づいて、前記複数のI/Oコマンドから前記第1のI/Oコマンドを選択する前記段階は、
前記ネットワークアダプタ上のハードウェアエンジンが、複数のI/Oコマンドが記憶されている前記リモートサーバおよび/または前記複数のI/Oコマンドを配信する前記ローカルサーバ内の仮想マシンVMの記憶アドレスに基づいて、前記複数のI/Oコマンドから第1のI/Oコマンドを選択する段階を備える、請求項
3に記載の方法。
【請求項5】
前記ネットワークアダプタが、前記第1のI/Oコマンドのコンテキスト情報に基づいて、
複数のデータがすべて前記少なくとも1つのリモートサーバに書き込まれているかを決定する段階であって、前記第1のI/Oコマンドの前記コンテキスト情報は、前記少なくとも1つのリモートサーバ内の前記複数のデータの記憶状態を含む、段階と、
前記複数のデータがすべて前記少なくとも1つのリモートサーバに別々に書き込まれたとき、前記ネットワークアダプタが、インタフェースを通じて前記ローカルサーバにI/O書き込み完了メッセージを送信する段階と、をさらに備える請求項1から
4のいずれか1項に記載の方法。
【請求項6】
ネットワークアダプタのためのデータ処理方法であって、
前記ネットワークアダプタが、第2のI/Oコマンドを取得する段階であって、前記第2のI/Oコマンドが、少なくとも1つのリモートサーバのデータをローカルサーバに記憶することを命令し、前記第2のI/Oコマンドが、前記ローカルサーバに書き込まれる前記データのアドレス情報および長さ情報を含む段階と、
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて前記第2のI/Oコマンドを分割し、複数のI/O読み出しメッセージを取得する段階であって、前記複数のI/O読み出しメッセージの各々は、ローカルサーバに書き込まれる
複数のデータの各データの情報を含む段階と、
前記ネットワークアダプタが、前記I/O読み出しメッセージを前記少なくとも1つのリモートサーバに別々に送信する段階と、を備え
、
前記ネットワークアダプタ上のメモリは、前記データを保存しない、方法。
【請求項7】
前記ローカルサーバに書き込まれる
複数のデータの前記各データの前記情報は、
前記ローカルサーバに書き込まれる前記各データのアドレス情報および長さ情報、
前記ローカルサーバに書き込まれる前記各データのアドレス情報および長さ情報
、ならびに前記ローカルサーバに存在し、前記第2のI/Oコマンドを配信するVMに関する情報、または、
前記ローカルサーバに書き込まれる前記データの第1の
IDおよびオフセット情報
のいずれか1つを含み、
前記第1のIDは、前記ローカルサーバに存在し前記第2のI/Oコマンドを配信するVMに関する情報と、前記VMに書き込まれる前記データのアドレス情報および長さ情報の複数のグループとを示すために使用される
、請求項
6に記載の方法。
【請求項8】
前記ネットワークアダプタが、前記リモートサーバから第1のI/O読み出し応答メッセージを受信する段階であって、前記第1のI/O読み出し応答メッセージは、前記ローカルサーバが前記リモートサーバから取得する必要がある第1のデータを含む段階と、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに基づいて、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する段階と、
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて、前記第1のデータを前記ローカルサーバに記憶する段階と、をさらに備える請求項
7に記載の方法。
【請求項9】
前記第1のI/O読み出し応答メッセージは、前記ローカルサーバに書き込まれる前記第1のデータの前記第1のIDおよびオフセット情報を含み、および、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに基づいて、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する前記段階は、
前記ネットワークアダプタが、前記第1のIDに基づいて、VMに書き込まれる前記データのアドレス情報および長さ情報の前記複数のグループを決定する段階と、
前記ネットワークアダプタが、前記オフセット情報に基づいて、アドレス情報および長さ情報の前記複数のグループから、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する段階と、を備える請求項
8に記載の方法。
【請求項10】
前記第1のI/O読み出し応答メッセージは、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報と、前記ローカルサーバに存在し、前記第2のI/Oコマンドを配信するVMに関する情報とを含み、
前記第1のI/O読み出し応答メッセージに基づいて、前記ネットワークアダプタによって、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する前記段階は、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに含まれる情報に基づいて、ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する段階を含む、請求項
8または9に記載の方法。
【請求項11】
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて、前記第1のデータを前記ローカルサーバに記憶する前記段階は、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに含まれるアドレス情報および長さ情報が許可テーブル内に存在し、前記許可テーブルが、前記ローカルサーバ内の書き込みデータのアドレス情報および長さ情報の複数のグループを含むことを決定する段階と、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに含まれる前記アドレス情報および前記長さ情報に基づき、前記第1のデータを前記ローカルサーバに記憶する段階と、を含む請求項
10に記載の方法。
【請求項12】
前記ネットワークアダプタが、前記第2のI/Oコマンドのコンテキスト情報に基づいて、前記複数のデータがすべて前記ローカルサーバに書き込まれているかを決定する段階であって、前記第2のI/Oコマンドのコンテキスト情報は、前記ローカルサーバの前記複数のデータの記憶完了状態を含む段階と、
前記複数のデータがすべて前記ローカルサーバに書き込まれたとき、前記ネットワークアダプタが、前記ローカルサーバにI/O読み出し完了メッセージをインタフェース経由で送信する段階と、をさらに備える請求項
6に記載の方法。
【請求項13】
プロセッサとメモリとを備え、前記プロセッサが前記メモリ内の命令を実行することにより、前記ネットワークアダプタが請求項1から
5のいずれか1項に記載の方法を実行するネットワークアダプタ。
【請求項14】
プロセッサとメモリとを備え、前記プロセッサが前記メモリ内の命令を実行することにより、前記ネットワークアダプタが請求項
6から
12のいずれか1項に記載の方法を実行するネットワークアダプタ。
【請求項15】
コンピュータに、請求項1から
5のいずれか1項に記載の方法を実施させるコンピュータプログラム。
【請求項16】
コンピュータに、請求項
6から
12のいずれか1項に記載の方法を実施させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、サーバ技術の分野に関連し、より具体的には、ネットワークアダプタのデータ処理方法およびネットワークアダプタに関する。
【背景技術】
【0002】
クラウドコンピューティングの出現により、ホストプロセッサ(例えば中央処理装置(central processing unit、CPU))の使用量を減らし、より多くのホストCPUを外販に提供し、またはより望ましいユーザ体験を提供し、ユーザのCPUがホストのバックグラウンドサービスにより影響を受けるのを防止するために、例えば管理サービス、ストレージサービス、ネットワークサービスなどの元々ホスト上で動作するサービスをネットワークアダプタにオフロードし得、ネットワークアダプタのCPUが前述のサービスを処理する。このように、ホストCPUは、ユーザが他の用途に使うために、ほぼ完全に提供することができる。
【0003】
ストレージサービスを一例として使用する。関連する技術的解決手段では、入出力(input/output、I/O)書き込みコマンドのために、ネットワークアダプタはホスト内の書き込み予定データをネットワークアダプタ上のメモリに保存する必要があり、ネットワークアダプタ上のプロセッサがデータを処理した後、データはリモートサーバに送信される。I/O読み出しコマンドでは、まずリモートサーバからネットワークアダプタ上のメモリにデータを読み出し、次にホスト内のメモリにデータを書き込む。
【0004】
前述の関連する技術的解決手段では、データをホスト内のメモリからネットワークアダプタ上のメモリに読み出す必要がある。そのため、ネットワークアダプタのバスに大きな負担がかかり、ネットワークアダプタ上のプロセッサのオーバヘッドが大幅に増加する。また、ネットワークアダプタは、データを保存するために大量のメモリが必要である。データの保存と管理は、プログラムの複雑さとメモリのリソース消費を大幅に増加させる。
【発明の概要】
【0005】
本願は、ネットワークアダプタのデータ処理方法およびネットワークアダプタを提供する。ネットワークアダプタは、書き込み予定データを保存するために、大量のメモリを必要としない場合がある。これにより、プログラムの複雑さを軽減し、メモリのリソース消費を抑えることができる。
【0006】
第1態様によれば、ネットワークアダプタが第1の入出力I/Oコマンドを取得する段階を含む、ネットワークアダプタのためのデータ処理方法が提供される。第1のI/Oコマンドは、ローカルサーバに記憶されているデータを少なくとも1つのリモートサーバに書き込むことを命令し、第1のI/Oコマンドは、ローカルサーバに記憶されるデータのアドレス情報および長さ情報を含む。ネットワークアダプタは、アドレス情報と長さ情報に基づいてデータを分割し、アドレス情報と長さ情報の複数のグループを取得する。ネットワークアダプタは、アドレス情報と長さ情報の複数のグループに基づき、ローカルサーバからアドレス情報と長さ情報の複数のグループに対応するデータを取得し、データを少なくとも1つのリモートサーバに送信する。
【0007】
前述の技術的解決手段では、I/O書き込みコマンドの場合、書き込み予定データをホスト上のメモリからネットワークアダプタ上のメモリに移行する必要がない。ネットワークアダプタは、ホスト内のメモリに記憶されている実際の書き込み予定データに基づく代わりに、ホスト内のメモリに記憶されているデータの記憶アドレスとデータ長に基づいてストレージサービスを処理する。このように、ホスト側のメモリからネットワークアダプタ側のメモリにデータを読み出す必要がない。これにより、ネットワークアダプタのバスの負担を軽減し、ネットワークアダプタ上のプロセッサのオーバヘッドもまた低減することができる。また、ネットワークアダプタは、書き込み予定データを保存するために大量のメモリを必要としない。これにより、プログラムの複雑さを軽減し、メモリのリソース消費を抑えることができる。
【0008】
可能な実施態様では、ネットワークアダプタは、アドレス情報と長さ情報の複数のグループと、ローカルサーバにあり、第1のI/Oコマンドを配信する第1のVMに対応する識別子とに基づいて、第1の仮想マシンVMから、アドレス情報と長さ情報の複数のグループに対応するデータを取得する。
【0009】
別の可能な実施態様では、ネットワークアダプタ上のメモリは、データを記憶しない。
【0010】
別の可能な実施態様では、本方法はさらに以下を含む。ネットワークアダプタは、複数のI/Oコマンドを受信する。ネットワークアダプタは、複数のI/Oコマンドが記憶されているリモートサーバおよび/またはローカルサーバに存在し、複数のI/Oコマンドを配信する仮想マシンVMの記憶アドレスに基づいて、複数のI/Oコマンドから第1のI/Oコマンドを選択する。
【0011】
別の可能な実施態様では、ネットワークアダプタは、ハードウェアエンジンを含む。ハードウェアエンジンは、データプレーンを処理するために使用される。ネットワークアダプタ上のハードウェアエンジンは、複数のI/Oコマンドが記憶されているリモートサーバおよび/またはローカルサーバにあり、複数のI/Oコマンドを配信する仮想マシンVMの記憶アドレスに基づいて、複数のI/Oコマンドから第1のI/Oコマンドを選択する。
【0012】
別の可能な実施態様では、本方法はさらに以下を含む。ネットワークアダプタは、第1のI/Oコマンドのコンテキスト情報に基づいて、複数のデータがすべて少なくとも1つのリモートサーバに書き込まれているかを決定する。第1のI/Oコマンドのコンテキスト情報は、少なくとも1つのリモートサーバにおける複数のデータの記憶状態を含む。複数のデータがすべて別々に少なくとも1つのリモートサーバに書き込まれたとき、ネットワークアダプタは、インタフェースを通じてローカルサーバにI/O書き込み完了メッセージを送信する。
【0013】
第2態様によれば、ネットワークアダプタのデータ処理方法が提供され、以下を含む。ネットワークアダプタは、第2のI/Oコマンドを取得する。第2のI/Oコマンドは、少なくとも1つのリモートサーバのデータをローカルサーバに記憶することを命令し、第2のI/Oコマンドは、ローカルサーバに書き込まれるデータのアドレス情報および長さ情報を含むことを命令する。ネットワークアダプタは、アドレス情報と長さ情報に基づいて、第2のI/Oコマンドを分割し、複数のI/O読み出しメッセージを取得する。複数のI/O読み出しメッセージの各々は、ローカルサーバに書き込まれる各データの情報を含む。ネットワークアダプタは、別々に、少なくとも1つのリモートサーバにI/O読み出しメッセージを送信する。
【0014】
前述の技術的解決手段では、I/O読み出しの場合、リモートサーバから読み出したデータを、まずネットワークアダプタ上のメモリに書き込み、次にVMのメモリに書き込む必要がない。このように、ネットワークアダプタ上のメモリにデータを送信する必要がない。これにより、ネットワークアダプタ上のメモリのリソース消費量や帯域幅の圧迫を軽減し、ネットワークアダプタ上のプロセッサのオーバヘッドもまた削減することができる。
【0015】
可能な実施態様では、ローカルサーバに書き込まれる各データの情報は、以下のいずれかを含む。ローカルサーバに書き込まれる各データのアドレス情報および長さ情報、ローカルサーバに書き込まれる各データのアドレス情報および長さ情報並びにローカルサーバ内にあり第2のI/Oコマンドを配信するVMに関する情報、またはローカルサーバに書き込まれるデータの第1の識別子IDおよびオフセット情報。ローカルサーバに存在し、第2のI/Oコマンドを配信するVMに関する情報を示す第1のIDと、VMに書き込まれるデータのアドレス情報および長さ情報の複数のグループを示す第2のIDを用いる。
【0016】
別の可能な実施態様では、本方法はさらに以下を含む。ネットワークアダプタは、リモートサーバから第1のI/O読み出し応答メッセージを受信する。第1のI/O読み出し応答メッセージは、ローカルサーバがリモートサーバから取得する必要がある第1のデータを含む。ネットワークアダプタは、第1のI/O読み出し応答メッセージに基づいて、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定する。ネットワークアダプタは、アドレス情報および長さ情報に基づいて、第1のデータをローカルサーバに記憶する。
【0017】
別の可能な実施態様では、第1のI/O読み出し応答メッセージは、第1のデータのものであり、ローカルサーバに書き込まれる第1のIDとオフセット情報を含む。ネットワークアダプタは、第1のIDに基づいて、VMに書き込まれるデータのアドレス情報および長さ情報の複数のグループを決定する。ネットワークアダプタは、オフセット情報に基づくアドレス情報と長さ情報の複数のグループから、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定する。
【0018】
別の可能な実施態様では、第1のI/O読み出し応答メッセージは、第1のデータであり、ローカルサーバに書き込まれるアドレス情報および長さ情報と、ローカルサーバにあり、第2のI/Oコマンドを配信するVMに関する情報とを含む。ネットワークアダプタは、第1のI/O読み出し応答メッセージに含まれる情報に基づいて、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定する。
【0019】
別の可能な実施態様では、長さ情報は許可テーブル内に存在する。許可テーブルには、ローカルサーバにおける書き込みデータのアドレス情報および長さ情報の複数のグループが含まれている。ネットワークアダプタは、第1のI/O読み出し応答メッセージに含まれるアドレス情報および長さ情報に基づいて、第1のデータをローカルサーバに記憶する。
【0020】
別の可能な実施態様では、本方法はさらに以下を含む。ネットワークアダプタは、第2のI/Oコマンドのコンテキスト情報に基づいて、複数のデータがすべてローカルサーバに書き込まれているかを決定する。第2のI/Oコマンドのコンテキスト情報は、ローカルサーバにおける複数のデータの記憶完了状態を含む。複数のデータがすべてローカルサーバに書き込まれたとき、ネットワークアダプタは、インタフェースを通じてローカルサーバにI/O読み出し完了メッセージを送信する。
【0021】
第3態様によれば、取得モジュールと、分割モジュールと、送信モジュールとを含むネットワークアダプタが提供される。
【0022】
取得モジュールは、第1の入出力I/Oコマンドを取得するように構成される。第1のI/Oコマンドは、ローカルサーバに記憶されているデータを少なくとも1つのリモートサーバに書き込むことを命令し、第1のI/Oコマンドは、ローカルサーバに記憶されるデータのアドレス情報および長さ情報を含む。
【0023】
分割モジュールは、アドレス情報および長さ情報に基づいてデータを分割し、アドレス情報および長さ情報の複数のグループを取得するように構成される。
【0024】
送信モジュールは、アドレス情報と長さ情報の複数のグループに基づいて、ローカルサーバから、アドレス情報と長さ情報の複数のグループに対応するデータを取得し、データを少なくとも1つのリモートサーバに送信するようにさらに構成される。
【0025】
可能な実施態様では、取得モジュールは、アドレス情報と長さ情報の複数のグループと、ローカルサーバにあり、第1のI/Oコマンドを配信する第1のVMに対応する識別子とに基づいて、第1の仮想マシンVMから、アドレス情報と長さ情報の複数のグループに対応するデータを取得するように特に構成される。
【0026】
別の可能な実施態様では、ネットワークアダプタ上のメモリは、データを記憶しない。
【0027】
別の可能な実施態様では、ネットワークアダプタは、さらに、スケジューリングモジュールを含む。
【0028】
取得モジュールは、複数のI/Oコマンドを受信するようにさらに構成される。
【0029】
スケジューリングモジュールは、複数のI/Oコマンドがリモートサーバに記憶されている記憶アドレス、および/または、ローカルサーバにあり、複数のI/Oコマンドを配信する仮想マシンVMに基づいて、複数のI/Oコマンドから第1のI/Oコマンドを選択するよう構成される。
【0030】
別の可能な実施態様では、ネットワークアダプタは、ハードウェアエンジンを含む。ハードウェアエンジンは、データプレーンを処理するために使用される。ハードウェアエンジンは、複数のI/Oコマンドが記憶されているリモートサーバおよび/またはローカルサーバにあり、複数のI/Oコマンドを配信する仮想マシンVMの記憶アドレスに基づいて、複数のI/Oコマンドから第1のI/Oコマンドを選択する。
【0031】
別の可能な実施態様では、ネットワークアダプタは、さらに、決定モジュールを含む。
【0032】
決定モジュールは、第1のI/Oコマンドのコンテキスト情報に基づいて、複数のデータがすべて少なくとも1つのリモートサーバに書き込まれているかを決定するように構成される。第1のI/Oコマンドのコンテキスト情報は、少なくとも1つのリモートサーバにおける複数のデータの記憶状態を含む。
【0033】
送信モジュールは、複数のデータがすべて別々に少なくとも1つのリモートサーバに書き込まれたとき、インタフェースを介してローカルサーバにI/O書き込み完了メッセージを送信するようにさらに構成される。
【0034】
第3態様または第3態様の可能な実施態様のいずれか1つの有益な効果は、第1態様または第1態様の可能な実施態様のいずれか1つの有益な効果に対応している。詳細を再び説明しない。
【0035】
第4態様によれば、取得モジュールと、分割モジュールと、送信モジュールとを含むネットワークアダプタが提供される。
【0036】
取得モジュールは、第2のI/Oコマンドを取得するように構成される。第2のI/Oコマンドは、少なくとも1つのリモートサーバのデータをローカルサーバに記憶することを命令し、第2のI/Oコマンドは、ローカルサーバに書き込まれるデータのアドレス情報および長さ情報を含むことを命令する。
【0037】
分割モジュールは、アドレス情報および長さ情報に基づいて第2のI/Oコマンドを分割し、複数のI/O読み出しメッセージを取得するよう構成される。複数のI/O読み出しメッセージの各々は、ローカルサーバに書き込まれる各データの情報を含む。
【0038】
送信モジュールは、I/O読み出しメッセージを少なくとも1つのリモートサーバに別々に送信するように構成される。
【0039】
可能な実施態様では、ローカルサーバに書き込まれる各データの情報は、以下のいずれかを含む。ローカルサーバに書き込まれる各データのアドレス情報および長さ情報、ローカルサーバに書き込まれる各データのアドレス情報および長さ情報並びにローカルサーバ内にあり第2のI/Oコマンドを配信するVMに関する情報、またはローカルサーバに書き込まれるデータの第1の識別子IDおよびオフセット情報。ローカルサーバに存在し、第2のI/Oコマンドを配信するVMに関する情報を示す第1のIDと、VMに書き込まれるデータのアドレス情報および長さ情報の複数のグループを示す第2のIDを用いる。
【0040】
別の可能な実施態様では、ネットワークアダプタは、さらに、決定モジュールと記憶モジュールとを含む。
【0041】
取得モジュールは、リモートサーバから第1のI/O読み出し応答メッセージを受信するようにさらに構成される。第1のI/O読み出し応答メッセージは、ローカルサーバがリモートサーバから取得する必要がある第1のデータを含む。
【0042】
決定モジュールは、第1のI/O読み出し応答メッセージに基づいて、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定するように構成される。
【0043】
記憶モジュールは、アドレス情報および長さ情報に基づいて、第1のデータをローカルサーバに記憶するように構成される。
【0044】
別の可能な実施態様では、第1のI/O読み出し応答メッセージは、第1のデータのものであり、ローカルサーバに書き込まれる第1のIDとオフセット情報を含む。
【0045】
決定モジュールは、具体的には、第1のIDに基づいて、VMに書き込まれるデータのアドレス情報および長さ情報の複数のグループを決定するように構成される。
【0046】
記憶モジュールは、具体的には、オフセット情報に基づくアドレス情報と長さ情報の複数のグループから、第ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定するように構成される。
【0047】
別の可能な実施態様では、第1のI/O読み出し応答メッセージは、第1のデータであり、ローカルサーバに書き込まれるアドレス情報および長さ情報と、ローカルサーバにあり、第2のI/Oコマンドを配信するVMに関する情報とを含む。
【0048】
決定モジュールは、具体的には、第1のI/O読み出し応答メッセージに含まれる情報に基づいて、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定するように構成される。
【0049】
別の可能な実施態様では、決定モジュールは、第1のI/O読み出し応答メッセージに含まれるアドレス情報および長さ情報が許可テーブル内に存在すると決定するように特に構成される。許可テーブルには、ローカルサーバにおける書き込みデータのアドレス情報および長さ情報の複数のグループが含まれている。
【0050】
記憶モジュールは、具体的には、第1のI/O読み出し応答メッセージに含まれるアドレス情報および長さ情報に基づいて、第1のデータをローカルサーバに記憶するように構成される。
【0051】
別の可能な実施態様では、決定モジュールは、第2のI/Oコマンドのコンテキスト情報に基づいて、複数のデータがすべてローカルサーバに書き込まれているかを決定するようにさらに構成される。第2のI/Oコマンドのコンテキスト情報は、ローカルサーバにおける複数のデータの記憶完了状態を含む。
【0052】
送信モジュールは、複数のデータがすべてローカルサーバに書き込まれたとき、インタフェースを通じてローカルサーバにI/O読み出し完了メッセージを送信するようにさらに構成される。
【0053】
第4態様または第4態様の可能な実施態様のいずれか1つの有益な効果は、第2態様または第2態様の可能な実施態様のいずれか1つの有益な効果に対応している。詳細を再び説明しない。
【0054】
第5態様によれば、プロセッサとメモリとを含む、ネットワークアダプタが提供される。プロセッサは、メモリ内の命令を実行するので、コンピューティングデバイスは、第1態様または第1態様の可能な実施態様のいずれか1つにおける方法の段階を実行する。
【0055】
第6態様によれば、プロセッサとメモリとを含むネットワークアダプタが提供される。プロセッサは、メモリ内の命令を実行するので、コンピューティングデバイスは、第2態様または第2態様の可能な実施態様のいずれか1つにおける方法の段階を実行する。
【0056】
第7態様によれば、第3態様または第3態様の可能な実施態様のいずれか1つにおけるネットワークアダプタを含む、サーバが提供される。
【0057】
第8態様によれば、第4態様または第4態様の可能な実施態様のいずれか1つにおけるネットワークアダプタを含む、サーバが提供される。
【0058】
第9態様によれば、命令を含む、コンピュータ可読記憶媒体が提供される。命令は、第1態様または第1態様の可能な実施態様のいずれか1つにおける方法の段階を実行するために使用される。
【0059】
オプションとして、実施態様において、記憶媒体は、具体的には、不揮発性記憶媒体であってもよい。
【0060】
第10態様によれば、命令を含む、コンピュータ可読記憶媒体が提供される。命令は、第2態様または第2態様の可能な実施態様のいずれか1つにおける方法の段階を実行するために使用される。
【0061】
オプションとして、実施態様において、記憶媒体は、具体的には、不揮発性記憶媒体であってもよい。
【0062】
第11態様によれば、チップが提供される。チップは、命令を取得し、命令を実行して、第1態様および第1態様の実施態様のいずれか1つにおける方法を実施する。
【0063】
オプションとして、ある実施態様では、チップはプロセッサとデータインタフェースを含む。プロセッサは、データインタフェースを介して、メモリに記憶された命令を読み出し、第1態様および第1態様の実施態様のいずれか1つにおける方法を実行する。
【0064】
オプションとして、実施態様において、チップはメモリをさらに含んでもよい。メモリは、命令を記憶し、プロセッサは、メモリに記憶された命令を実行するように構成される。命令が実行されたとき、プロセッサは、第1態様および第1態様の実施態様のうちのいずれか1つにおける方法を実行するように構成される。
【0065】
第12態様によれば、チップが提供される。チップは、第2態様または第2態様の可能な実施態様のいずれか1つにおける方法を実装するために、命令を取得し、命令を実行する。
【0066】
オプションとして、ある実施態様では、チップはプロセッサとデータインタフェースを含む。プロセッサは、データインタフェースを介して、メモリに記憶された命令を読み出し、第2態様または第2態様の可能な実施態様のいずれか1つにおける方法を実施する。
【0067】
オプションとして、実施態様において、チップはメモリをさらに含んでもよい。メモリは、命令を記憶し、プロセッサは、メモリに記憶された命令を実行するように構成される。命令が実行されたとき、プロセッサは、第2態様または第2態様の可能な実施態様のいずれか1つにおいて、方法を実装するように構成される。
【図面の簡単な説明】
【0068】
【
図1】本願の実施形態によるアーキテクチャを示す概略図である。
【0069】
【
図2】本願の実施形態による適用シナリオの概略図である。
【0070】
【
図3】本願の実施形態によるネットワークアダプタのデータ処理方法を示す概略フローチャートである。
【0071】
【
図4】本願の実施形態によるネットワークアダプタ400の構造を示す概略図である。
【0072】
【
図5】本願の実施形態によるネットワークアダプタによるI/O書き込みコマンドの処理方法を示す概略フローチャートである。
【0073】
【
図6】本願の実施形態によるI/Oコマンドスケジューリングの概略ブロック図である。
【0074】
【
図7】本願の実施形態によるデータ分割処理の概略ブロック図である。
【0075】
【
図8】本願の実施形態によるI/Oコマンド処理プロセスの概略ブロック図である。
【0076】
【
図9】本願の実施形態によるネットワークアダプタによるI/O読み出しコマンドの処理方法を示す概略フローチャートである。
【0077】
【
図10】本願の実施形態によるネットワークアダプタによるI/O書き込み応答メッセージの処理方法を示す概略フローチャートである。
【0078】
【
図11】本願の実施形態によるネットワークアダプタによるI/O書き込み応答メッセージの処理方法の別の方法を示す概略フローチャートである。
【0079】
【
図12】本願の実施形態によるネットワークアダプタによってI/O書き込み応答メッセージを処理するためのさらに別の方法の概略フローチャートである。
【0080】
【
図13】本願の実施形態によるネットワークアダプタ1300の概略ブロック図である。
【発明を実施するための形態】
【0081】
以下、添付図面を参照して、本願の技術的解決手段を説明する。
【0082】
本願では、複数のデバイス、コンポーネント、モジュールなどを含むシステムを説明することにより、すべて態様、実施形態、または特徴を提示する。各システムは、別の装置、構成要素、モジュールなどを含んでもよく、および/または、添付図面を参照して説明したすべての装置、構成要素、モジュールなどを含まなくてもよいことを理解し、理解されたい。また、これらの解決手段を組み合わせて使用してもよい。
【0083】
さらに、本願の実施形態では、「例」または「例えば」という用語は、一例、実例、または説明の提示などを表すのに用いられている。本願において「例」として記載されるいかなる実施形態または設計解決手段も、別の実施形態または設計解決手段よりも好ましい、またはより多くの利点を有すると説明されるべきではない。正確には、「例」または「例えば」という用語の使用は、具体的な方式における相対概念を示すことを意図している。
【0084】
本願の実施形態では、用語「対応する、関連する(corresponding,relevant)」、および「対応する(corresponding)」は、時に互換的に使用される場合がある。用語間の相違点が強調されない場合、用語によって表現される意味は一貫していることに留意されたい。
【0085】
本願の実施形態で記載するネットワークアーキテクチャおよびサービスシナリオは、本願の実施形態における技術的解決手段をより明確に説明することを意図しており、本願の実施形態で提供する技術的解決手段の制限を構成しない。当業者であれば、ネットワークアーキテクチャの発展や新たなサービスシナリオの出現に伴い、本願の実施形態で提供される技術的解決手段も同様の技術的課題に適用可能であることを把握することができる。
【0086】
本明細書に記載された「実施形態」、「いくつかの実施形態」などへの言及は、本願の1つまたは複数の実施形態が、実施形態を参照して説明された特定の特徴、構造、または特性を含むことを示す。したがって、本明細書において、異なる場所に現れる「ある実施形態において」、「いくつかの実施形態において」、「いくつかの他の実施形態において」、「他の実施形態において」などの記述は、必ずしも同じ実施形態を参照することを意味せず、代わりに、他の方式で特に強調されない限り、記述は「実施形態の1または複数、しかしすべてではない」ことを参照することを意味する。用語「含む」、「包含する」、「有する」、およびそれらの変形体は、代わりに、特に強調されない限り、すべて「含むがこれに限定されない」を意味する。
【0087】
本願において、「少なくとも1つ」とは、1または複数を意味し、「複数の」とは、2またはそれ以上を意味する。「および/または」は、関連する対象の間の対応関係を説明し、3つの関係が存在し得ることを表す。例えば、Aおよび/またはBは、以下の、Aのみが存在する場合と、AおよびBの両方が存在する場合と、Bのみが存在する場合とを表してよい。ここで、AおよびBは単数形または複数形であってよい。「/」という文字は一般に、関連する対象物間の「または」の関係を表す。「以下に挙げる項目(要素)の少なくとも1つ」またはそれの類似表現は、これらの項目の任意の組み合わせを意味し、1つの項目(要素)または複数の項目(要素)の任意の組み合わせが含まれる。例えば、a、bまたはcのうちの少なくとも1つは、a、b、c、aとb、aとc、bとc、または、aとbとcを示してよく、a、bおよびcは、単数形でもよくまたは複数形でもよい。
【0088】
クラウドコンピューティングの出現により、ホストプロセッサ(例えば、中央処理装置(central processing unit、CPU))の使用量を減らし、外販用に多くのホストCPUを提供したり、またはより望ましいユーザ体験を提供したり、ユーザのCPUがホストのバックグラウンドサービスの影響を多く受けることを防止するように、
図1に示すように、既存のクラウドコンピューティングベンダーは、本来ホスト上で実行する管理サービス、ストレージサービス、ネットワークサービスなどをネットワークアダプタに徐々にオフロードし、ネットワークアダプタ上のCPUは前述のサービスを処理する。このように、ホストCPUは、ユーザが他の用途に使うために、ほぼ完全に提供することができる。
【0089】
以下、
図2に示す適用シナリオを一例として用いて、ストレージサービスの詳細を説明する。
【0090】
図2に示すように、シナリオは、ホスト210、ネットワークアダプタ220、および宛先記憶装置230を含んでもよい。以下、別々に各デバイスの詳細を説明する。
【0091】
[1.ホスト210]
【0092】
ホスト210は、少なくとも1つのプロセッサ211およびメモリ212を含んでもよい。
【0093】
オプションとして、ホスト210は、システムバス213をさらに含む。少なくとも1つのプロセッサ211とメモリ212は、別々にシステムバス213に接続されている。
【0094】
プロセッサ211は、システムバス213を介してメモリ212にアクセスすることができる。例えば、プロセッサ211は、システムバスを介して、メモリ212におけるデータの読み出し/書き込みまたはコード実行を実行することができる。システムバス213は、例えば、クイックパスインターコネクト(Quick Path Interconnect、QPI)またはウルトラパスインターコネクト(Ultra Path Interconnect、UPI)であってもよい。システムバス213は、アドレスバス、データバス、制御バス等に分類される。説明を簡単にするために、
図2では1本の太線だけを用いてバスを表しているが、これは、バスが1本だけしかない、またはバスの種類が1つだけしかないことを意味するものではない。
【0095】
可能な実施態様では、プロセッサ211の機能は、主にコンピュータプログラムの命令(またはコード)を解釈し、コンピュータソフトウェアでデータを処理することである。なお、コンピュータプログラムの命令やコンピュータソフトウェアのデータは、メモリ212に記憶することができる。
【0096】
プロセッサ211は、ホスト210の演算装置であり、制御ユニット(control unit)である。プロセッサ211は、複数のプロセッサコア(core)を含んでもよい。プロセッサ211における演算処理、コマンド受信、コマンド記憶、データ処理のすべての計算は、プロセッサコア(core)によって実行される。プロセッサコア(core)のそれぞれは別々にプログラム命令を実行し、並列計算能力を用いてプログラムの動作を高速化する。プロセッサコア(コア)は、固定された論理構造を有し、例えば、レベル1キャッシュ、レベル2キャッシュ、実行ユニット、命令レベルユニット、バスインタフェースなどの論理ユニットを含む。
【0097】
オプションとして、プロセッサ211は、集積回路チップであってもよく、信号処理能力を有する。限定ではなく一例として、プロセッサ211は、汎用プロセッサ、デジタル信号プロセッサ((Digital Signal Processor、DSP)、特定用途向け集積回路(application-specific integrated circuit、ASIC)、フィールドプログラマブルゲートアレイ(field programmable gate array,FPGA)または他のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタロジックデバイス、またはディスクリートハードウェアコンポーネントである。汎用プロセッサは、マイクロプロセッサなどである。例えば、プロセッサ110は、中央処理装置(central processing unit、CPU)である。
【0098】
メモリ212は、ホスト210のメインメモリ(ホスト210のメモリとも称し得る。)メモリ212は、通常、オペレーティングシステムで動作している様々なソフトウェアプログラム、上位層アプリケーションから配信される入出力(input/output、I/O)コマンド、外部メモリと交換する情報などを記憶するように構成される。プロセッサ211のアクセス速度を向上させるために、メモリ212は高速なアクセス速度を有する必要がある。一部のコンピュータシステムアーキテクチャでは、メモリ212としてダイナミックランダムアクセスメモリ(dynamic random access memory、DRAM)が使用される。プロセッサ211は、メモリコントローラ(
図1には不図示)を用いて、メモリ212に高速にアクセスし、メモリ212内の任意の記憶ユニットに対して読み出し処理および書き込み処理を実行することができる。
【0099】
本願の本実施形態におけるメモリ212は、揮発性メモリまたは不揮発性メモリであってもよく、または揮発性メモリと不揮発性メモリを含んでいてもよいことをさらに理解されたい。不揮発性メモリは、リードオンリメモリ(read-only memory、ROM)、プログラマブルリードオンリメモリ(programmable ROM、PROM)、消去可能プログラマブルリードオンリメモリ(erasable PROM、EPROM)、電気的消去可能プログラマブルリードオンリメモリ(electrically EPROM、EEPROM)、またはフラッシュメモリであってよい。揮発性メモリはランダムアクセスメモリ(random access memory、RAM)であってよく、外部キャッシュとして使用される。例を用いて説明するが、限定的な説明ではなく、多くの形式のランダムアクセスメモリ(random access memory、RAM)を用いることができ、例えば、スタティックランダムアクセスメモリ(static RAM、SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスダイナミックランダムアクセスメモリ(synchronous DRAM、SDRAM)、ダブルデータレートシンクロナスダイナミックランダムアクセスメモリ(double data rate SDRAM、DDR SDRAM)、エンハンスドシンクロナスダイナミックランダムアクセスメモリ(enhanced SDRAM、ESDRAM)、シンクリンクダイナミックランダムアクセスメモリ(synchlink DRAM、SLDRAM)、ダイレクトラムバスランダムアクセスメモリ(direct rambus RAM、DR RAM)などを用いることができる。
【0100】
[2.ネットワークアダプタ220]
【0101】
ネットワークアダプタ220は、通信ネットワークにおいて、ホスト210と他のサーバ(例えば、
図1に示す宛先記憶装置230)との間の通信を実装するように構成される。ネットワークアダプタ220は、ホスト210に内蔵されていてもよく、またはホスト210の外部デバイスとして使用されてもよく、インタフェースを介してホスト210に接続される。インタフェースは、例えば、ペリフェラルコンポーネントインタフェースエクスプレス(Peripheral Component Interface Express、PCIE)インタフェースでもよい。
【0102】
なお、
図2においては、説明を簡単にするために、ホスト210の外部デバイスとしてネットワークアダプタ220を用いて説明する。
【0103】
ネットワークアダプタ220は、メモリ222およびプロセッサ221もまた含んでもよい。オプションとして、ネットワークアダプタ220は、バス223をさらに含んでもよい。ネットワークアダプタ220の内部構造は、ホスト210の内部構造と類似であってよい。詳細は、前述のホスト210内の部分の説明を参照されたい。ここでは、詳細について改めて説明しない。
【0104】
[3.宛先記憶装置230]
【0105】
宛先記憶装置230は、メモリ、プロセッサ、およびネットワークアダプタもまた含んでもよい。オプションとして、宛先記憶装置230は、バスをさらに含んでもよい。宛先記憶装置230の内部構造は、ホスト210の内部構造と類似であってもよい。詳細は、前述のホスト210内の部分の説明を参照されたい。ここでは、詳細について改めて説明しない。
【0106】
データ処理と通信シナリオでは、ホスト210はローカルエンドとして使用され、宛先記憶装置230は通信リモートエンドとして使用される。ホスト210上の仮想マシン(virtual machine、VM)は、入出力(input/output、I/O)コマンドを配信し、ホスト210上のプロセッサ211は、バス213を介してメモリ212にI/Oコマンドを送信することができる。ネットワークアダプタ220は、メモリ212からI/Oコマンドを取得し、I/Oコマンドを処理する。
【0107】
例えば、I/Oコマンドは、読み出しコマンドと書き込みコマンドである。読み出しコマンドは、ホスト上で動作するアプリケーションプログラム(例えばVM)から配信され、リモートデバイス(例えば宛先記憶装置)からデータを読み出すよう命令するために使用される。書き込みコマンドは、ホスト上で動作するアプリケーションプログラム(例えばVM)から配信され、リモートデバイスへのデータ書き込みを命令するために使用される。ホスト内のプロセッサは、I/Oコマンドを受信し、I/Oコマンドをメモリに記憶し、I/Oコマンドがネットワークアダプタ220によって処理されるのを待ってから、次に通信リモートエンドとして機能する宛先記憶装置230に送信されるようにしてもよい。
【0108】
関連する技術的解決手段としては、例えば、I/OコマンドはI/O書き込みコマンドである。I/O書き込みデータはメモリ212に記憶されており、ネットワークアダプタ220は、まず、書き込み予定データをホスト210内のメモリ212からネットワークアダプタ220上のメモリ222に移行する必要がある。そして、ネットワークアダプタ220上のプロセッサ221は、ネットワークアダプタ220上のメモリ222から書き込み予定データを取得し、そのデータに対する記憶サービス処理を完了してデータメッセージパケットを生成し、生成したメッセージパケットを用いて通信リモートエンドの宛先記憶装置230に書き込み予定データを送信する。
【0109】
関連する技術的解決手段としては、例えば、I/OコマンドはI/O読み出しコマンドである。ネットワークアダプタ220上のプロセッサ221は、通信リモート端の宛先記憶装置230からデータを取得し、ネットワークアダプタ220上のメモリ222にデータを記憶する。そして、プロセッサ221は、ネットワークアダプタ220上のメモリ222からデータを取得し、データを完全なI/Oデータに組み立て、I/Oデータをホスト210内のメモリ212に書き込む。
【0110】
前述に関連する技術的解決手段では、I/O書き込みコマンドを一例として使用する。書き込み予定データは、ホスト210内のメモリ212からネットワークアダプタ220上のメモリ222に移行する必要があり、次に、ネットワークアダプタ220上のプロセッサ221がそのデータに対する記憶サービス処理を完了させる。ホスト210内のメモリ212からネットワークアダプタ220上のメモリ222にデータを読み出す必要がある。これは、ネットワークアダプタ220のバス223に大きな圧力をかけ、ネットワークアダプタ220上のプロセッサ221のオーバヘッドを大きく増加させる。また、ネットワークアダプタ220は、データを記憶するために大量のメモリ222を必要とする。データの保存と管理は、プログラムの複雑さとメモリ222のリソース消費を大幅に増加させる。
【0111】
これを考慮して、本願では、データ記憶方法を提供する。書き込み予定データは、ホスト210内のメモリ212からネットワークアダプタ220上のメモリ222に移行する必要はない。これにより、メモリ222のリソース消費および帯域幅の圧迫を低減することができ、また、ネットワークアダプタ220上のプロセッサ221のオーバヘッドもまた低減することができる。
【0112】
以下、
図3を参照して、本願の実施形態によるデータ記憶方法について詳細に説明する。
【0113】
図3は、本願の実施形態によるネットワークアダプタのデータ処理方法を示す概略フローチャートである。
図3に示すように、方法は、段階310から330を含んでもよい。以下、別途、段階310から330を詳細に説明する。
【0114】
段階310:ネットワークアダプタは、第1のI/Oコマンドを取得する。第1のI/Oコマンドは、データであり、ローカルサーバに記憶されているアドレス情報と長さ情報を含む。
【0115】
本願の本実施形態では、第1のI/Oコマンドは、ローカルサーバに記憶されたデータを少なくとも1つのリモートサーバに書き込むことを命令するために使用されてもよい。一例として、データはローカルサーバ内のメモリに記憶されてもよい。
【0116】
一例として、ローカルサーバは、
図2におけるホスト210であってもよい。リモートサーバは、記憶装置であってもよく、または計算能力を有するコンピューティングデバイスであってもよい。一例として、リモートサーバは、
図2における宛先記憶装置230である。
【0117】
ネットワークアダプタは、ローカルサーバの外部デバイスとして使用することができ、ローカルサーバとはインタフェースで接続されている。インタフェースは、ペリフェラルコンポーネントインタフェースエクスプレス(Peripheral Component Interface Express、PCIE)インタフェースであってもよい。具体的な接続関係については、
図2の説明を参照されたい。ここでは、詳細について改めて説明しない。
【0118】
段階320:ネットワークアダプタは、アドレス情報および長さ情報に基づいてデータを分割し、アドレス情報および長さ情報の複数のグループを取得する。
【0119】
ネットワークアダプタは、第1のI/Oコマンドで伝送されるデータのアドレス情報および長さ情報に基づいてデータを分割し、アドレス情報と長さ情報の複数のグループを取得することができる。データのアドレス情報および長さ情報は、ローカルサーバ内のメモリに記憶されたデータブロックを説明するために使用される場合があることを理解されたい。
【0120】
本願の本実施形態では、ネットワークアダプタ上のメモリは、ローカルサーバにあり、少なくとも1つのリモートサーバに書き込む必要があるデータを記憶する必要はない場合がある。したがって、ネットワークアダプタは、実際のデータの代わりに、データの仮想アドレス情報(例えば、ローカルサーバ内のメモリ内のデータのアドレス情報、長さ情報)に基づいてデータを分割することができる。このように、ローカルサーバ内のメモリからネットワークアダプタ上のメモリにデータを読み出す必要がない。これにより、ネットワークアダプタのバスの負担を軽減し、ネットワークアダプタ上のプロセッサのオーバヘッドもまた低減することができる。また、ネットワークアダプタは、書き込み予定データを保存するために大量のメモリを必要としない。これにより、プログラムの複雑さを軽減し、メモリのリソース消費を抑えることができる。
【0121】
段階330:ネットワークアダプタは、アドレス情報と長さ情報の複数のグループに基づいて、ローカルサーバから、アドレス情報と長さ情報の複数のグループに対応するデータを取得し、少なくとも1つのリモートサーバにデータを送信する。
【0122】
段階330において、ネットワークアダプタが少なくとも1つのリモートサーバにデータを送信する必要がある場合、ネットワークアダプタは、アドレス情報と長さ情報の複数のグループに基づいてローカルサーバから、アドレス情報と長さ情報の複数のグループに対応するデータを直接取得し、少なくとも1つのリモートサーバにデータを送信することを理解されたい。
【0123】
ネットワークアダプタによって取得されたデータは、ネットワークアダプタ上のメモリに保存されず、ローカルサーバ内のメモリからデータを取得した後、少なくとも1つのリモートサーバに直接送信されることに留意されたい。
【0124】
可能な実施態様では、ネットワークアダプタは、分割後に取得されるアドレス情報と長さ情報の複数のグループに基づいて、ローカルサーバから、アドレス情報と長さ情報の複数のグループに対応するデータを取得してもよい。オプションとして、いくつかの実施形態において、ネットワークアダプタは、アドレス情報と長さ情報の複数のグループと、ローカルサーバにあり、第1のI/Oコマンドを配信する第1のVMに対応する識別子とに基づいて、第1の仮想マシンVMから、アドレス情報と長さ情報の複数のグループに対応するデータをさらに取得してもよい。このように、ネットワークアダプタは、特定のVM内のメモリから正確にデータを取得することができる。
【0125】
前述の技術的解決手段では、ネットワークアダプタをローカルサーバの外部デバイスとして使用することができ、インタフェースを介してローカルサーバに接続される。I/O書き込みコマンドでは、ローカルサーバのメモリからネットワークアダプタのメモリへ、書き込み予定データを移行する必要はない。ネットワークアダプタは、ローカルサーバ内のメモリに記憶されている実際の書き込み予定データに基づく代わりに、ローカルサーバ内のメモリに記憶されているデータの記憶アドレスとデータ長に基づいてストレージサービスを処理する。このように、ローカルサーバ内のメモリからネットワークアダプタ上のメモリにデータを読み出す必要がない。これにより、ネットワークアダプタ、メモリ、バスの圧力を低減し、ネットワークアダプタ上のプロセッサのオーバヘッドもまた低減することができる。また、ネットワークアダプタは、書き込み予定データを保存するために大量のメモリを必要としない。これにより、プログラムの複雑さを軽減し、メモリのリソース消費を抑えることができる。
【0126】
以下、
図4を参照して、本願の実施形態によるネットワークアダプタの可能な構造について詳細に説明する。
【0127】
図4は、本願の実施形態によるネットワークアダプタ400の構造を示す概略図である。
図4に示すように、ネットワークアダプタ400は、PCIEインタフェースを介してホスト210に接続されている。
【0128】
ネットワークアダプタ400は、データプレーンオフロードエンジン410、メモリコントローラ420、CPUコア430、メモリ440、およびシステムバス450を含んでもよい。
【0129】
[1.データプレーンオフロードエンジン410]
【0130】
一例として、データプレーンオフロードエンジン410は、ハードウェアロジック、フィールドプログラマブルゲートアレイ(field programmable gate array,FPGA)、またはネットワークプロセッサ(network processor,NP)など、データプレーン処理を特にサポートする専用の処理アーキテクチャのエンジンによって形成されてもよい。データプレーンオフロードエンジン410は、パケットを迅速に転送することができるが、複雑なプロトコル処理には適切ではない。
【0131】
データプレーンオフロードエンジン410は、ネットワーク転送処理に適切であることが理解されたい。したがって、一般に、ネットワーク転送のためのデータプレーンは、データプレーンオフロードエンジン410によって引き受けられることがある。しかしながら、ストレージサービスのデータプレーンは、サービスの複雑性に起因してデータプレーンオフロードエンジン410で直接完了できず、完了には一般にCPUコア430が必要である。
【0132】
データプレーンオフロードエンジン410は、PCIEインタフェースを介してホスト210に接続されてもよく、ホスト210内のメモリ212に記憶されたデータを取得するように構成される。データプレーンオフロードエンジン410は、システムバス450を介してCPUコア430およびメモリコントローラ420とさらに接続され、データプレーンオフロードエンジン410内部のモジュール、CPUコア430およびメモリコントローラ420間の高速通信を実施してもよい。
【0133】
データプレーンオフロードエンジン410は、内部に、デバイスシミュレーションモジュール411、I/Oコマンド処理モジュール412、データスケジューリングモジュール413、ネットワークプロトコル処理エンジン460を含むことができる。
【0134】
以下、別途、データプレーンオフロードエンジン410に含まれるモジュールの機能を詳細に説明する。
【0135】
デバイスシミュレーションモジュール411は、主にデバイスシミュレーション、例えば、記憶装置またはネットワークデバイスのシミュレーションを実施し、ネットワークアダプタ400がホストまたはホスト上で動作する仮想マシンVMに必要なデバイスを提示するように構成される。一例として、デバイスシミュレーションモジュール411は、不揮発性メモリエクスプレス(nonvolatile memory express、NVMe)、記憶装置、スモールコンピュータシステムインタフェース(small computer system interface、SCSI)デバイス、仮想スモールコンピュータシステムインタフェース(virtio-SCSI)デバイス、virtio-BLKデバイス、および別のタイプのvirtioデバイスの提示を実装するように構成される。
【0136】
デバイスシミュレーションは、ハードウェアロジックとCPUコアがまとめて完了する場合もあることを理解されたい。一般に、強力なデータのやりとりはデータプレーンオフロードエンジンが完了し、設定関連のシミュレーションはCPUコアとデータプレーンオフロードエンジンが協働して完了する。
【0137】
I/Oコマンド処理モジュール412は、I/Oコマンドに対して簡単な解析と処理を実行するように構成される。一例として、I/Oコマンド処理モジュール412は、I/Oコマンドが読み出しコマンドまたは書き込みコマンドかを決定するために使用されてもよい。別の例では、デバイスのI/Oサービス品質(quality of service,QoS)を確保するために、I/O読み出し/書き込みコマンドは通常スケジューリングされる必要がある。
【0138】
データスケジューリングモジュール430は、複数のI/Oコマンドをスケジューリングするように構成される。一例として、スケジューリングは、データに対するQoS処理を含んでもよい。例えば、VMまたはボリュームに不適切な負荷がかかることを避けるために、各デバイスの帯域幅やパケットレートを制限する必要がある。I/Oデータストレージの場合、1秒あたりの入力/出力操作(input/output operation per second,IOPS)とボリュームの帯域幅、VM全体のIOPSと帯域幅管理に基づいてI/Oコマンドをスケジューリングする必要がある。
【0139】
ネットワークプロトコル処理エンジン460は、主にネットワークプロトコル処理を完了させ、データを宛先ノードに確実に伝送することを確保するように構成される。ネットワークプロトコルは、複数存在してもよい。これは本願において具体的に限定されない。例えば、ネットワークプロトコルは、リモートダイレクトメモリアクセス(Remote Direct Memory Access、RDMA)プロトコルであってもよい。別の例として、ネットワークプロトコルは、代替的に伝送制御プロトコル(transmission control protocol、TCP)であってもよい。別の例として、ネットワークプロトコルは、代替的に、ユーザが定義した信頼性の高い伝送プロトコルとすることができる。
【0140】
[2.メモリコントローラ420]
【0141】
メモリコントローラ420は、メモリ440とCPUコア430との間のデータ交換を制御するように構成される。具体的には、メモリコントローラ420は、CPUコア430からメモリアクセス要求を受信し、そのメモリアクセス要求に基づいてメモリ440へのアクセスを制御する。
【0142】
実施例では、各メモリコントローラ420は、システムバス450を介してメモリ440のアドレスを実行する。また、システムバスにはアービタ(図には不図示)が構成される。アービタは、複数のCPUコア430のコンテンション・アクセスの処理と調整を担当する。
【0143】
[3.CPUコア430]
【0144】
CPUコア430は、CPUの最も重要な構成要素であり、CPU処理ユニットとも呼ばれてもよい。CPUコア430は、特定の製造プロセスを用いることにより、単結晶シリコンで作られている。CPUの演算処理、コマンド受信、コマンド記憶、データ処理のすべての計算は、CPUコア430で実行される。各CPUコア430は、プログラム命令を別々に実行し、並列計算能力を用いてプログラム動作を高速化する。各CPUコア430は、固定的な論理構造を有している。例えば、CPUコア430は、レベル1キャッシュ、レベル2キャッシュ、実行ユニット、命令レベルユニット、およびバスインタフェースなどの論理ユニットを含む。
【0145】
CPUコア430は、一般に、複雑なサービス処理を実行するように構成されており、通常、オペレーティングシステム(operating system、OS)を実行する。このように、CPUコア430上では、複雑なサービス処理ソフトウェア、各種管理ソフトウェア、制御プレーンソフトウェアなどが動作する場合がある。
【0146】
[4.メモリ440]
【0147】
メモリ440は、CPUコア430の外部メモリとして使用されてもよく、CPUコア430のプログラム実行とデータプレーンオフロードエンジン410の一部のエントリを記憶するように構成される。
【0148】
外部メモリ440は、本願の本実施形態では特に限定されない。例えば、外部メモリ440は、ダブルデータレート(Double Data Rate、DDR)メモリである。
【0149】
データプレーンオフロードエンジン410の内部に統合されたオンチップメモリはキャッシュであるため、オンチップメモリは高速かつ高コストであり、したがって、少数のみしか統合できないことを理解されたい。外部メモリ440に大量のエントリを記憶する必要がある。例えば、外部メモリ440には、ネットワーク転送に必要な大容量転送フローテーブル、ネットワーク接続の受信および送信キュー、ネットワーク接続のコンテキストエントリ、I/Oのコンテキストエントリなどが記憶される。
【0150】
データがCPUに送信されるとは、実際には、データがCPUコア430の外部メモリ440に送信されることを意味することをさらに理解されたい。本明細書で後述するCPUへのデータの送信およびCPUメモリへのデータの送信とは、CPUコア430の外部メモリ440にデータを送信することを意味する。
【0151】
[5.システムバス450]
【0152】
システムバス450は、データプレーンオフロードエンジン410、CPUコア430、およびメモリコントローラ420に接続され、データプレーンオフロードエンジン410、CPUコア430、およびメモリコントローラ420がシステムバス450を介して互いに通信できるようにしてもよい。
【0153】
以下では、
図4に示したハードウェアアーキテクチャを一例として用いて、ネットワークアダプタがI/O書き込みコマンドを処理する具体的な実装について、
図5の一例を参照しながら詳細に説明する。
図5の例は、単に当業者が本願の実施形態を理解することを助けることだけを意図しており、本願の実施形態を
図5の特定の値または特定のシナリオに限定することを意図するものではないことを理解されたい。当業者であれば、提供された例に基づいて様々な同等の修正または変更を加えることができることは明らかであり、そのような修正および変更も本願の実施形態の範囲に含まれる。
【0154】
図5は、本願の実施形態によるネットワークアダプタによるI/O書き込みコマンドの処理方法を示す概略フローチャートである。
図5に示すように、方法は、段階510から560を含んでもよい。以下、別途、段階510から560を詳細に説明する。
【0155】
段階510:ホスト210内のVMがI/O書き込みコマンドを配信する。
【0156】
ホスト内のVMは、ストレージI/Oデバイスインタフェース(例えば、NVMe、SCSI、Virtio-BLK、またはVirtio-SCSI)に基づくストレージサービスのI/O書き込みコマンドを開始することができる。
【0157】
図5に示す実施形態で述べたI/Oコマンドまたは処理対象I/Oコマンドは、処理対象I/O書き込みコマンドと理解してもよいことに留意されたい。
【0158】
本願の本実施形態において、仮想デバイスは、識別子(identifier、ID)を用いて識別されてもよいことを理解されたい。前述のストレージI/Oデバイスは、一般にPCIE上の機能(ファンクション)にマッピングされる。シングルルートI/O仮想化(single root I/O virtualization、SR-IOV)が可能な場合、前述のストレージI/O装置は物理機能(Physical function、PF)または仮想機能(virtual function、VF)であってもよい。スケーラブルI/O仮想化(scalable I/O virtualization、scalable-IOV)が可能な場合、前述のストレージI/Oデバイスは、さらにADIであってもよい。
【0159】
一般的にVFの方が多い。VMの適用シナリオでは、VFは主にVMに割り当てられる。以下の説明では、説明を簡単にするために、VFを使用している。しかしながら、PFのみ使用可の特定がない場合は、すべてのVFの説明はPFにも適用可能である。つまり、一例では、ホスト210上で動作するVMをVFを用いて識別することができる。
【0160】
段階520:ホスト210内のプロセッサ211は、ネットワークアダプタ400にプロンプトメッセージを送信する。
【0161】
処理すべきI/O書き込みコマンドをメモリ212に送信した後、プロセッサ211はプロンプトメッセージをネットワークアダプタ400に送信することができる。プロンプトメッセージは、データプレーンオフロードエンジン410に、処理すべきI/Oコマンドがあることを通知するために使用される。
【0162】
一例として、プロンプトメッセージはドアベル(ドアベル、DB)であってもよい。
【0163】
段階530:ネットワークアダプタ400のI/Oコマンド処理モジュール412は、処理対象のI/O書き込みコマンドを処理する。
【0164】
I/O読み出しコマンドまたはI/O書き込みコマンドなどのI/Oコマンドでは、通常、QoS制御を実行する必要がある。例えば、I/Oコマンドにおける論理ユニット番号(Logical Unit Number、LUN)情報(NVMeにおける名前空間)に対して、VMのLUN IDと入り口のVF情報をグローバルLUN IDに変換してもよい。また、グローバルLUN IDは、である宛先記憶装置のアドレス情報であってもよい。または、VF+VMのLUN IDを直接使用することも可能である。
【0165】
説明を簡単にするために、以下におけるLUN IDはグローバルLUN IDと理解してもよい。
【0166】
ネットワークアダプタに入るパケットのポート属性において、情報がパケットにないことと同じように、VF情報(例えば、VF ID)はI/Oコマンドには含まれていないことを理解されたい。
【0167】
段階540:ネットワークアダプタ400上のデータスケジューリングモジュール430は、処理すべきI/Oコマンドをスケジューリングする。
【0168】
段階540は任意であることを理解されたい。つまり、処理するI/Oコマンドが複数のI/Oコマンドを含む場合、VMまたはボリュームに不適切な負荷がかかることを避けるため、各デバイスの帯域幅やパケットレートを制限する必要がある。したがって、複数のI/Oコマンドをスケジューリングする必要があり、複数のI/Oコマンドから条件を満たすI/Oコマンドを選択する。データスケジューリングモジュール430は、条件を満たしたI/Oコマンドをネットワークアダプタ400上のメモリ440のI/Oメッセージ受信キューに記憶してもよい。
【0169】
図6に示すように、データプレーンオフロードエンジン410内のデータスケジューリングモジュール430は、複数のI/Oコマンドをスケジューリングし、スケジューリングされたI/OコマンドをI/Oメッセージ受信キューに記憶する。
【0170】
可能な実施態様では、データスケジューリングモジュール430は、複数のI/Oコマンドに対してレベル1スケジューリングを実行し、条件を満たすI/Oコマンドを選択することができる。例えば、データスケジューリングモジュール430は、処理対象のI/Oコマンドを宛先記憶装置に記憶するための記憶アドレスに基づいて、処理対象のI/Oコマンドをスケジューリングし、条件を満たしたI/Oコマンドを選択することができる。別の例として、データスケジューリングモジュール430は、さらに、ホスト210内にあり、複数のI/Oコマンドを配信する仮想マシンVMに基づいて、処理すべきI/Oコマンドをスケジューリングし、条件を満たすI/Oコマンドを選択することができる。
【0171】
別の可能な実施態様では、データスケジューリングモジュール430は、さらに、複数のI/Oコマンドに対してマルチレベルスケジューリングを実行し、条件を満たすI/Oコマンドを選択することができる。レベル2のスケジューリングを一例として使用する。第1レベルでは、I/Oコマンドは、LUN IDに基づいてスケジューリングされる。第2レベルでは、I/OコマンドはVMに基づいてスケジューリングされる。具体的には、データスケジューリングモジュール430は、宛先記憶装置の処理対象のI/Oコマンドを記憶する記憶アドレスと、ホスト210に存在し、複数のI/Oコマンドを配信する仮想マシンVMに基づいて、処理対象のI/Oコマンドをスケジューリングし、条件を満たしたI/Oコマンドを選択することができる。
【0172】
本願の本実施形態では、I/Oメッセージ受信キューの仕様が大きくない場合、データプレーンオフロードエンジン410の内部キャッシュをストレージに利用してもよい。しかしながら、I/Oメッセージ受信キューの仕様が比較的大きく、チップ内部のキャッシュではI/Oメッセージ受信キューを記憶できない場合は、これらのキューをネットワークアダプタ400の外部メモリ440に配置してもよい。
【0173】
条件を満たすI/Oコマンドは、I/Oコマンドを使用して読み出し/書き込みされるデータのサイズに対するトラフィック測定を実行してもよい。前述の測定には、IOPS、1秒あたりのI/O回数の許容量、I/O帯域幅などの測定が含まれ得るが、これらに限定されないことを理解されたい。
【0174】
本願の本実施形態では、トラフィック測定を実行するためにトークンバケット(token bucket)アルゴリズムを使用してもよい。トークンバケットアルゴリズムによると、トークンバケットに特定の数のトークンを配置し、1トークンで、指定単位(例えば、1バイト)のデータの送信を許可することができる。1Byteのデータ送信後、バケットからトークンを削除する必要がある。バケットにトークンの残りがない場合、いかなるサイズのデータ送信も定格帯域を超えるとみなされる。バケットにトークンが残っているときだけ、データを送信することができる。
【0175】
例えば、2つのトークンバケットを使用することで、コミットメント性能(保証性能)と許容ピーク性能(処理能力がアイドル状態のときの最大許容性能)をより多く取得し、より正確な制御を実施することができる。
【0176】
トークンバケット(token bucket)アルゴリズムは、池の水のように、外に流れたり、または中に入ったりすることができる。トークンバケット内のトークンを削除したり、トークンバケットにトークンを追加したりすることもができる。いつでもデータを送信できることを確保するため、バケットにトークンを追加することができる。したがって、トークンバケットにトークンが追加される速度によって、データの送信速度が決定される。例えば、あるユーザの帯域幅を1Gbpsに設定し、各トークンが1Mbitを示す場合、1秒あたり1000個のトークンがバケットに追加されることを保証することのみが必要である。
【0177】
したがって、本願の本実施形態では、より柔軟なQoSスケジューリング効果を取得するために、トークンバケットにトークン調整インタフェースを提供し、CPUコア430がパケット特徴に基づきトークンの返金を実行する。例えば、VMが小さなI/Oコマンドを継続的に生成するのを防止するために、CPUコア430は、いくつかのトークンを適切に返金するためにフィールドマージを実行することができる。これにより、帯域幅不足によるユーザエクスペリエンスへの影響を防止することができる。
【0178】
前述の技術的解決手段では、データプレーンがQoSスケジューリングを実行することで、より正確で安定したQoS保証とより優れた性能を取得することができる。CPUコアはトークン返金調整をサポートしており、より高いQoSの柔軟性を提供することができる。
【0179】
段階550:CPUコア430は、I/Oコマンドを処理する。
【0180】
ネットワークアダプタ400の外部メモリ440にI/Oコマンドが記憶された後、CPUコア430上のソフトウェアがI/Oコマンドを分析する。一例として、I/Oコマンドは、一般に、LUN、論理ブロックアドレス(Logical Block Address、LBA)、データサイズ(size)、データブロックを指し示すスキャッタギャザ(Scatter Gather、SG)リストなどの情報を含むことができる。
【0181】
LUNは、アクセス対象記憶ユニットのIDを表し、例えば、
図2に示す宛先記憶装置230のIDを表す。LBAは、アクセス対象記憶ユニット上のデータが配置されるブロック、すなわちLUNに記憶されているアクセス対象データの論理アドレスの開始アドレスを示す。サイズは、アドレス読み出し後のデータサイズを示す。CPUコア430は、LUN、LBA、およびサイズに基づいて、宛先記憶装置をアドレス指定してもよい。
【0182】
SGリストは、複数のアドレスと長さから構成されるリストである。アドレスと長さでメモリブロックを形成し、複数のアドレスブロックがホスト内のI/Oデータを記憶するために必要な総メモリサイズを形成する。つまり、SGリストは、散在するデータブロックを開始アドレス+長さの順序を用いて記述し、複数のデータブロックを論理的に連続したデータブロックにまとめられる。
【0183】
SGリストのアドレス+長さは、前述のデータのアドレス情報および長さ情報に対応してもよいことは理解されたい。
【0184】
I/O書き込みの場合、SGリストは、ホスト内のメモリ(memory)において、データの読み出し先および書き込みがされる宛先記憶装置の位置を示す。
【0185】
SGはアドレスと長さ情報だけしか持っていないことに留意されたい。仮想化アプリケーションでは、SGを対応するVMのメモリアドレスに正確にマッピングできるように、VF ID情報を追加するさらなる必要性がある。
【0186】
本願の本実施形態では、CPUコア430は、ホストメモリに存在する処理予定データのアドレスとデータ長に基づいて、ストレージサービスを処理してもよい。ストレージサービスの処理プロセスは複数あり、例えば、データ分割処理、データ重複排除処理、データ暗号化処理、データ圧縮処理、データスナップショット処理がある。
【0187】
以下では、データ分割処理を一例として用いて、CPUコア430が、ホストメモリに存在する処理予定データのアドレスとデータ長に基づいてストレージサービスを処理する特定の実装プロセスを詳細に説明する。
【0188】
クラウドコンピューティングで一般的に使用される分散型ストレージシステムの場合、データは数百または数千の宛先記憶装置に分散方式で保存されることを理解されたい。このように、データへの高速同時アクセスを実装し、極めて高性能を取得することができるとともに、より高いセキュリティとスケーラビリティを取得することができる。この処理は、データを分割する処理である。つまり、データを固定サイズのデータブロックに分割し、例えば4K、8K、16K、32Kなどのサイズのデータブロックに分割し、異なるデータブロックを異なる宛先記憶装置に送信する。
【0189】
I/O書き込みでは、書き込み予定データを分割し、異なるデータブロックを異なる宛先記憶装置に送信する必要がある。I/O読み出しの場合、異なるデータブロックを複数の宛先記憶装置から別々に取得する必要があり、異なるデータブロックを完全な1つのI/Oデータにまとめる。読み出しは書き込みの逆手順である。
【0190】
オプションとして、いくつかの実施形態において、複数の宛先記憶装置へのデータ送信の効率を改善するために、集約が適切に実行されてもよい。同じ宛先記憶装置に送信する複数のデータブロックを、大きなデータパケットにまとめて、例えば、128KBの大きなパケットにまとめて一度に送信する。このように、データ送信のためにプロトコルスタックを頻繁に呼び出すことで、CPUコア430に過負荷がかかることを回避することができる。
【0191】
一般に、データを分割する処理は、
図7に示すように行われる。I/Oデータは水平方向に分割され、1つのI/Oデータは複数のデータブロックに分割される。データパケットは垂直に生成され、各データパケットは1つの分散型リモート宛先記憶装置に一意に対応する。各データパケットは、1つのデータブロックを含んでいてもよいし、または同じ宛先記憶装置に送信される複数のデータブロックを含んでいてもよい。
【0192】
本願の本実施形態では、ネットワークアダプタ400上のメモリ440ではなく、ホスト210内のメモリ212に実I/O書き込みデータを記憶しているため、CPUコア430がデータを分割する処理は、実I/O書き込みデータに基づいていない。その代わりに、I/OコマンドにおけるSGの仮想データポインタ(ホスト210内のメモリ212のデータのアドレス情報および長さ情報)に基づいて分割を実行し、仮想データポインタはホスト内のVFのアドレスおよび長さに対応するデータブロックを指し示す。
【0193】
つまり、本願の本実施形態では、実I/O書き込みデータは分割されない。その代わりに、メモリ212に存在し、VMのI/Oデータを記憶するメモリアドレスとデータ長に基づいて分割を実行し、分割VF+SG情報を取得する。
【0194】
段階560:CPUコア430は、ネットワークプロトコル処理エンジン460に、少なくとも1つのリモート宛先記憶装置にI/O書き込みデータを送信するように指示する。
【0195】
CPUコア430は、I/Oコマンドの処理を完了した後、メッセージパケットを生成してもよい。メッセージパケットには、メッセージヘッダが含まれる。メッセージヘッダは、対応する宛先記憶装置に関する情報を担持してもよく、その情報は一般にネットワーク接続の送信キューであってもよい。CPUコア430は、M個の分割データブロックをM個のメッセージキューに入れることができる。各データブロックには、実際に書き込み予定データの代わりにVF+SGの情報が記憶されている。
【0196】
CPUコア430は、さらに、ネットワークプロトコル処理エンジン460に対して、ストレージデータ処理命令を開始してもよい。この命令は、ネットワークプロトコル処理エンジン460に対して、実I/O書き込みデータを取得し、実I/O書き込みデータに対してメッセージカプセル化を実行し、カプセル化されたパケットを対応するリモート宛先記憶装置に送信して、I/O書き込み処理を実施するよう命令するために使用される。
【0197】
一例として、ネットワークプロトコル処理エンジン460は、M個のメッセージキューから、各データブロックに記憶されているVF+SG情報を別々に読み出し、VFに対応するVMに対して別々にDMAを開始し、VF+SG情報に基づいて、各データブロックに対応する実I/O書き込みデータを取得する。
【0198】
図8に示すように、例えば、CPUコア430が送信し、ネットワークプロトコル処理エンジン460が受信可能なメッセージ1には、VF1+SG1、VF2+SG1、VF3+SG1、・・・およびVFm+SGnが含まれる。ネットワークプロトコル処理エンジン460は、PCIEインタフェースを介してホスト210内のメモリ212から、VF1+SG1に対応するデータ、VF2+SG1に対応するデータ、VF3+SG1に対応するデータ、・・・およびVFm+SGnに対応するデータを取得または読み出すことができる。
【0199】
他の例として、CPUコア430が送信し、ネットワークプロトコル処理エンジン460が受信可能なメッセージ2は、VF1+SG1、VF2+SG2、VF3+SG3、・・・およびVFm+SGmを含む。ネットワークプロトコル処理エンジン460は、PCIEインタフェースを介してホスト210内のメモリ212から、VF1+SG2に対応するデータ、VF2+SG2に対応するデータ、VF3+SG2に対応するデータ、・・・およびVFm+SGmに対応するデータを取得または読み出すことができる。
【0200】
ネットワークプロトコル処理エンジン460は、メモリ212から取得したデータをカプセル化し、データを、データを実際に含むメッセージと組み合わせ、メッセージをリモート宛先記憶装置に送信し、宛先記憶装置にI/O書き込みデータを書き込むようにしてもよい。
【0201】
オプションとして、ネットワークアダプタ400は、さらに、I/Oコマンドのコンテキスト情報に基づいて、すべてのデータが少なくとも1つの宛先記憶装置に書き込まれたかどうかを決定してもよい。複数のデータのすべてが少なくとも1つの宛先記憶装置に別々に書き込まれるとき、ネットワークアダプタ400は、PCIEインタフェースを通じてホスト210にI/O書き込み完了メッセージを送信する。I/Oコマンドのコンテキスト情報は、少なくとも1つの宛先記憶装置におけるデータの記憶状態を含んでもよいことを理解されたい。
【0202】
以下では、
図4に示したハードウェアアーキテクチャを一例として用いて、ネットワークアダプタがI/O読み出しコマンドを処理する具体的な実装について、
図9の一例を参照しながら詳細に説明する。
図9の例は、単に当業者が本願の実施形態を理解すること助けることだけを意図しており、本願の実施形態を
図9の特定の値または特定のシナリオに限定することを意図するものではないことを理解されたい。当業者であれば、提供された例に基づいて様々な同等の修正または変更を加えることができることは明らかであり、そのような修正および変更も本願の実施形態の範囲に含まれる。
【0203】
図9は、本願の実施形態によるネットワークアダプタによるI/O読み出しコマンドの処理方法を示す概略フローチャートである。
図9に示すように、この方法は、段階910から950を含んでもよい。以下、別途、段階910から段階950について詳細に説明する。
【0204】
段階910:ホスト210のVMは、I/O読み出しコマンドを配信する。
【0205】
I/O読み出しコマンドは、宛先記憶装置から読み出し対象データを取得し、ホスト210にデータを記憶することを命令するために使用される。例えば、データは、ホスト210に存在し、I/O読み出しコマンドを配信するVMに対応するメモリに記憶されてもよい。
【0206】
I/O読み出しコマンドは、I/O読み出しメッセージと呼ばれてもよい。
【0207】
段階915:ホスト210内のプロセッサ211は、ネットワークアダプタ400にプロンプトメッセージを送信する。
【0208】
段階917:ネットワークアダプタ400のデータプレーンオフロードエンジン410は、I/O読み出しコマンドをネットワークアダプタ400の外部メモリ440に転送する。
【0209】
段階920:ネットワークアダプタ400のCPUコア430は、I/O読み出しコマンドを処理する。
【0210】
CPUコア430上のソフトウェアが、I/O読み出しコマンドを分析する。I/O読み出しコマンドは、一般に、宛先記憶装置に関する読み出し情報を含むことができる。記憶装置に関する情報は、ホスト210内のデータをローカルに記憶するメモリのLUN、LBA、データサイズ、VF+SGリストなどの情報を含むが、これらに限定されることはない。
【0211】
I/O読み出しの場合、VF+SG情報は、ホスト210内のメモリ(memory)において、宛先記憶装置から読み出したデータを書き込む位置を示す。
【0212】
本願の本実施形態では、CPUコア430は、I/O読み出しコマンドを、宛先記憶装置から読み出され、ホスト210内のメモリに書き込まれるデータのアドレス情報および長さ情報(SGリスト)に基づいて分割し、複数のI/O読み出しメッセージを取得してもよい。複数のI/O読み出しメッセージの各々は、宛先記憶装置から読み出され、ホスト210内のメモリに書き込まれる各データに関する情報を含む。
【0213】
ホスト210内のメモリに書き込まれる各データに関する情報は、以下のいずれかを含むことを理解されたい。ホスト210内のメモリに書き込まれる各データのアドレス情報および長さ情報(SGリスト)、またはホスト210内のメモリに書き込まれる各データのアドレス情報および長さ情報並びにホスト210内にあり、I/O読み出しコマンドを配信するVMに関する情報(VF+SGリスト)、またはデータの第1の識別子IDおよびオフセット情報で、ホスト210内のメモリに書き込まれている。第1のIDは、ホスト210内にあり、I/O読み出しコマンドを配信するVMと、VMに書き込まれるデータのアドレス情報および長さ情報の複数のグループ(SGリスト)に関する情報を示すために用いられる。
【0214】
段階925:CPUコア430は、ネットワークプロトコル処理エンジン460に、メッセージパケットをリモート宛先記憶装置に送信するよう指示する。
【0215】
CPUコア430は、I/O読み出しコマンドの処理を完了した後、ネットワークプロトコル処理エンジン460に、複数のI/O読み出しメッセージを複数のリモート宛先記憶装置に送信するよう指示してもよい。メッセージは、メッセージヘッダを含んでもよい。メッセージヘッダは、対応する宛先記憶装置の記憶アドレス情報を担持してもよく、その情報は、一般にネットワーク接続の送信キューであってもよい。
【0216】
CPUコア430は、さらに、ネットワークプロトコル処理エンジン4600にネットワークプロトコル送信処理の開始を通知してもよく、ネットワークプロトコル処理エンジン4600は、I/O読み出しメッセージパケットを対応する宛先記憶装置に送信する。
【0217】
段階930:データプレーンオフロードエンジン410は、宛先記憶装置から返信されたI/O読み出し応答メッセージを受信する。
【0218】
宛先記憶装置は、I/O読み出しメッセージパケット内の記憶アドレス情報に基づいて対応するストレージデータを読み出し、I/O読み出し応答メッセージを用いてデータプレーンオフロードエンジン410にストレージデータをフィードバックすることができる。
【0219】
I/O読み出し応答メッセージは、受信したI/O読み出しコマンドに対して宛先記憶装置からフィードバックされる応答パケットとして理解することができる。
【0220】
宛先記憶装置から返信されるI/O読み出し応答メッセージの形式は複数のものが存在する。これは本願において具体的に限定されない。以下、段階940を参照して詳細な説明を提供する。詳細は本明細書において説明しない。
【0221】
段階940:データプレーンオフロードエンジン410は、I/O読み出し応答メッセージのデータをVM内のメモリに直接書き込む。
【0222】
本願の本実施形態では、I/O読み出し応答メッセージ内のデータを受信した後、データプレーンオフロードエンジン410は、まずネットワークアダプタ400上のメモリ440にデータを書き込まずに、次にメモリ440から、I/O読み出しコマンドを配信するVM内のメモリにデータを書き込んでもよいが、直接I/O読み出しコマンドを配信するVM内のメモリにI/O読み出し応答メッセージのデータを書き込んでもよい。つまり、ネットワークアダプタ400上のメモリ440は、I/O読み出し応答メッセージのデータを記憶しない。
【0223】
データプレーンオフロードエンジン410は、I/O読み出しメッセージに基づいて、各データブロックの、ホスト210内のメモリ212に記憶されているアドレス情報および長さ情報を取得する必要があるので、データをホスト210内のVM内のメモリに直接書き込むことができ、ネットワークアダプタ400上のメモリ440にまず書き込んでから次にVM内のメモリに書き込む必要はない。このように、ネットワークアダプタ上のメモリにデータを送信する必要がない。これにより、ネットワークアダプタ上のメモリのリソース消費や帯域幅の圧迫を軽減し、ネットワークアダプタ上のプロセッサのオーバヘッドもまた削減することができる。
【0224】
具体的には、データプレーンオフロードエンジン410は、ホスト210内のメモリ212に記憶されている各データブロックのVF+SG情報を決定してもよい。VF+SG情報を取得する複数の具体的な実装が存在する。以下、別々に異なる実装の詳細を説明する。
【0225】
図10を参照されたい。可能な実施態様では、I/O読み出し応答メッセージは、各データブロックのI/OのID、オフセット情報、およびデータを含むことができる。データプレーンオフロードエンジン410は、I/O読み出し応答メッセージ内の各データブロックのI/OのIDに基づいて、対応するI/Oのコンテキストに照会して、VF+SG情報を取得してもよい。
【0226】
本願の本実施形態において、I/O読み出しコマンドが宛先記憶装置に送信された後、データプレーンオフロードエンジン410のCPUコア430は、I/Oのコンテキスト情報に適用してもよく、1つのI/Oのコンテキストは1つのIDに対応してもよいことを理解されたい。I/Oのコンテキスト情報は、各ブロックに対応するI/OのID、I/Oを処理するホームVF、VMのローカルLUNおよびSGリスト、並びに宛先記憶装置における読み出し対象データのアドレスおよび長さを記録するために使用されてもよい。
【0227】
なお、1つのI/O読み出しコマンドには、このような複数のブロックが含まれていてもよく、ブロックは、異なるI/Oの異なるブロックであってもよいことに留意されたい。
【0228】
例えば、
図10を参照して、I/O読み出しメッセージ内のデータブロックに対応するIDがID1、オフセット情報が2である場合、アドレスクエリを実行する際に、データプレーンオフロードエンジン410は、ID1とオフセット情報2に基づいて、ホスト210内のメモリ212に記憶されているデータブロックの情報はVF1+SG2であると決定してもよい。VF1+SG2の情報を取得した後、データプレーンオフロードエンジン410は、ダイレクトメモリアクセス(Direct Memory Access、DMA)技術を使用して、ホスト210内のメモリ212に直接データを書き込んでもよい。
【0229】
図11を参照する。別の可能な実施態様では、I/O読み出し応答メッセージは、メッセージID(メッセージID、MSG ID)とデータを含むことができる。データプレーンオフロードエンジン410は、I/O読み出し応答メッセージのMSG IDに基づいて、MSD IDテーブルのVF+SG情報を取得してもよい。
【0230】
本願の本実施形態では、各I/O読み出しメッセージに基づいて1つのIDと1つのMSG IDテーブルを生成し、MSG IDテーブルには各データスライスに対応するデータブロックのVF+SG情報を記録してもよいことは理解されたい。送信されるI/O読み出しメッセージは、MSG IDを担持してよく、確かに、各ブロックの長さ情報を担持するさらなる必要性がある。ブロックの順序は、MSG IDテーブルのIDの順序と同じである。
【0231】
I/O読み出し応答メッセージが返信された場合、返信されたメッセージのMSG IDに基づいてMSD IDテーブルのSG情報を取得した後、データプレーンオフロードエンジン410は、データブロックの番号に基づいて、データを配置する必要がある特定アドレスを取得してもよい。さらに、そのアドレスにDMA技術を使用してデータを書き込むことで、VM内のメモリに直接データを書き込むことができる。
【0232】
図12を参照されたい。別の可能な実施態様では、I/O読み出し応答メッセージは、1または複数のVF+SGとデータを担持することができる。I/O読み出し応答メッセージに担持される1または複数のVF+SGは、読み出しデータがホスト内のメモリに記憶されているアドレスに関する情報であると理解されたい。
【0233】
データプレーンオフロードエンジン410は、I/O読み出し応答メッセージを用いて対応するデータブロックのVF+SG情報を直接取得し、ダイレクトメモリアクセス(Direct Memory Access、DMA)技術を用いて、VF+SG情報に基づいてホスト210内のメモリ212に直接データを書き込むことができる。
【0234】
オプションとして、いくつかの実施形態では、I/O読み出し応答メッセージに担持されたVF+SG情報が有効であるかどうかを調べるために、データプレーンオフロードエンジン410は、I/O読み出し応答メッセージ内のSGアドレスをVFに基づいて照会された対応SG許可テーブル内のSG情報と比較して、SGアドレスが許可テーブルのアドレス範囲内にあるかどうかを決定し得る。SGアドレスが許可テーブルのアドレス範囲内にある場合、データプレーンオフロードエンジン410は、DMA技術を使用して、VF+SGに対応するホストアドレスにデータを直接書き込み、データがVM内のメモリに直接書き込まれるようにする。そうでない場合は、データブロックの書き込みは破棄され、エラー処理が通知される。
【0235】
本願の本実施形態では、I/O読み出しメッセージごとにVFごとにSG許可テーブルを確立してもよいことをさらに理解されたい。I/Oが開始されるとき、SG許可テーブルが生成される。I/Oが完了するとき、対応するSG権限が削除される。SG許可テーブルには、VM内のメモリに対応するVF+SGへのデータ書き込みが含まれている。
【0236】
段階950:データプレーンオフロードエンジン410は、ホスト210にI/O読み出し完了メッセージを送信する。
【0237】
返信されたI/O読み出し応答メッセージには、M個のデータパケットの返信メッセージが含まれているため、M個のデータパケットの返信メッセージが到着した後にのみ、1つのI/O読み出しが完了したことを示す。本処理における処理は比較的簡単であるため、本願の本実施形態では、データプレーンオフロードエンジン410が処理を完了させてもよい。このように、返信されたデータは、ネットワークアダプタ400上のCPUコア430で処理されない場合がある。これにより、処理性能の向上が図れる。
【0238】
一例として、すべてのデータを受信したと決定した後、ネットワークアダプタ400上のCPUコア430は、データプレーンオフロードエンジン410のデバイスシミュレーションモジュール411にI/O読み出し完了メッセージを送信する。複数の具体的な実装がある。以下では、いくつかの可能な実施態様を詳細に説明する。
【0239】
可能な実施態様では、1つのI/Oコンテキストの前述の割り当てに基づいて、I/Oを処理するために必要な関連情報に加えて、各IDに対応するI/Oコンテキストは、さらにメッセージIDの完全記載を記録する。データプレーンオフロードエンジン410は、返信されたメッセージに担持されるI/O IDに基づいてI/Oコンテキストを取得し、メッセージIDに基づいて対応するメッセージのステータスを完全な状態に設定する。すべてのメッセージのステータスが完了状態に設定されるとき、ネットワークアダプタ400上のCPUコア430は、I/O読み出し完了メッセージをデバイスシミュレーションモジュール411に直接送信する。
【0240】
I/O読み出しが完了すると、設定された対応するI/Oコンテキストは無効となり、CPUはコンテキストを再度割り当てすることができると理解されたい。
【0241】
別の可能な実施態様では、1つのI/Oコンテキストの前述の割り当てに基づいて、I/O処理に必要な関連情報に加えて、各IDに対応するI/Oコンテキストは、データブロックのオフセット番号をさらに記録する。返信されるメッセージは、I/O IDとデータブロックのオフセット番号を担持してもよい。データプレーンオフロードエンジン410は、I/O IDを取得し、I/Oコンテキストを取得し、データブロックのオフセット番号に基づき、対応するデータブロックの完了フラグを設定する。すべてのデータが完了するとき、ネットワークアダプタ400上のCPUコア430は、直接、デバイスシミュレーションモジュール411にI/O読み出し完了メッセージを送信する。
【0242】
以上、
図1から
図12を参照して、本願の実施形態におけるネットワークアダプタのデータ処理方法について詳細に説明した。以下、
図13を参照して、本願の装置の実施形態を詳細に説明する。
【0243】
図13は、本願の実施形態によるネットワークアダプタ1300の概略ブロック図である。ネットワークアダプタ1300は、
図2、
図5、および
図9に示した方法の段階を実行することができる。繰り返しを避けるために、詳細は再度ここで説明しない。ネットワークアダプタ1300は、取得モジュール1310と、分割モジュール1320と、送信モジュール1330とを含む。
【0244】
取得モジュール1310は、第1の入出力I/Oコマンドを取得するように構成される。第1のI/Oコマンドは、ローカルサーバに記憶されているデータを少なくとも1つのリモートサーバに書き込むことを命令し、第1のI/Oコマンドは、ローカルサーバに記憶されているデータのアドレス情報および長さ情報を含む。
【0245】
分割モジュール1320は、アドレス情報および長さ情報に基づいてデータを分割し、アドレス情報および長さ情報の複数のグループを取得するように構成される。
【0246】
送信モジュール1330は、さらに、アドレス情報と長さ情報の複数のグループに基づいて、ローカルサーバから、アドレス情報と長さ情報の複数のグループに対応するデータを取得し、そのデータを少なくとも1つのリモートサーバに送信するように構成される。
【0247】
オプションとして、取得モジュール1310は、アドレス情報と長さ情報の複数のグループと、ローカルサーバにあり、第1のI/Oコマンドを配信する第1のVMに対応する識別子とに基づいて、第1の仮想マシンVMから、アドレス情報と長さ情報の複数のグループに対応するデータを取得するように特に構成される。
【0248】
オプションとして、ネットワークアダプタ上のメモリにはデータを保存しない。
【0249】
オプションとして、ネットワークアダプタ1300は、さらに、スケジューリングモジュール1340を含む。
【0250】
取得モジュール1310は、複数のI/Oコマンドを受信するようにさらに構成される。
【0251】
スケジューリングモジュール1340は、複数のI/Oコマンドがリモートサーバに記憶されている記憶アドレス、および/またはローカルサーバにあり、複数のI/Oコマンドを配信する仮想マシンVMに基づいて、複数のI/Oコマンドから第1のI/Oコマンドを選択するよう構成される。
【0252】
オプションとして、ネットワークアダプタ1300は、ハードウェアエンジンを含む。ハードウェアエンジンは、データプレーンの処理に使用される。ハードウェアエンジンは、複数のI/Oコマンドが記憶されているリモートサーバおよび/またはローカルサーバにあり、複数のI/Oコマンドを配信する仮想マシンVMの記憶アドレスに基づいて、複数のI/Oコマンドから第1のI/Oコマンドを選択する。
【0253】
オプションとして、ネットワークアダプタ1300は、決定モジュール1350をさらに含む。
【0254】
決定モジュール1350は、第1のI/Oコマンドのコンテキスト情報に基づいて、複数のデータがすべて少なくとも1つのリモートサーバに書き込まれているかを決定するように構成される。第1のI/Oコマンドのコンテキスト情報は、少なくとも1つのリモートサーバにおける複数のデータの記憶状態を含む。
【0255】
送信モジュール1330はさらに、以下のように構成される。複数のデータがすべて別々に少なくとも1つのリモートサーバに書き込まれたとき、インタフェースを通じてローカルサーバにI/O書き込み完了メッセージを送信する。
【0256】
オプションとして、取得モジュール1310は、第2のI/Oコマンドを取得するように構成される。第2のI/Oコマンドは、少なくとも1つのリモートサーバのデータをローカルサーバに記憶することを命令し、第2のI/Oコマンドは、ローカルサーバに書き込まれるデータのアドレス情報および長さ情報を含むことを命令する。
【0257】
分割モジュール1320は、さらに、アドレス情報および長さ情報に基づいて第2のI/Oコマンドを分割し、複数のI/O読み出しメッセージを取得するように構成される。複数のI/O読み出しメッセージの各々は、ローカルサーバに書き込まれる各データの情報を含む。
【0258】
送信モジュール1330は、I/O読み出しメッセージを少なくとも1つのリモートサーバに別々に送信するようにさらに構成される。
【0259】
可能な実施態様では、ローカルサーバに書き込まれる各データの情報は、以下のうちのいずれかを含む。ローカルサーバに書き込まれる各データのアドレス情報および長さ情報、ローカルサーバに書き込まれる各データのアドレス情報および長さ情報、ローカルサーバにあり第2のI/Oコマンドを配信するVMに関する情報、またはデータの第1の識別子IDおよびローカルサーバに書き込まれるオフセット情報。ローカルサーバに存在し、第2のI/Oコマンドを配信するVMに関する情報を示す第1のIDと、VMに書き込まれるデータのアドレス情報および長さ情報の複数のグループを示す第2のIDを用いる。
【0260】
別の可能な実施態様では、ネットワークアダプタ1300は、記憶モジュール1360をさらに含む。
【0261】
取得モジュール1310は、リモートサーバから第1のI/O読み出し応答メッセージを受信するようにさらに構成される。第1のI/O読み出し応答メッセージは、ローカルサーバがリモートサーバから取得する必要がある第1のデータを含む。
【0262】
決定モジュール1350は、第1のI/O読み出し応答メッセージに基づいて、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定するようにさらに構成される。
【0263】
記憶モジュール1360は、アドレス情報および長さ情報に基づいて、第1のデータをローカルサーバに記憶するように構成される。
【0264】
別の可能な実施態様では、第1のI/O読み出し応答メッセージは、第1のデータのものであり、ローカルサーバに書き込まれる第1のIDとオフセット情報を含む。
【0265】
決定モジュール1350は、具体的には、第1のIDに基づいて、VMに書き込まれるデータのアドレス情報および長さ情報の複数のグループを決定するように構成される。
【0266】
記憶モジュール1360は、具体的には、オフセット情報に基づくアドレス情報と長さ情報の複数のグループから、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定するように構成される。
【0267】
別の可能な実施態様では、第1のI/O読み出し応答メッセージは、第1のデータであり、ローカルサーバに書き込まれるアドレス情報および長さ情報と、ローカルサーバにあり、第2のI/Oコマンドを配信するVMに関する情報とを含む。
【0268】
決定モジュール1350は、具体的には、第1のI/O読み出し応答メッセージに含まれる情報に基づいて、ローカルサーバに書き込まれる第1のデータのアドレス情報および長さ情報を決定するように構成される。
【0269】
別の可能な実施態様では、決定モジュール1350は、第1のI/O読み出し応答メッセージに含まれるアドレス情報および長さ情報が許可テーブル内に存在すると決定するように特に構成される。許可テーブルには、ローカルサーバにおける書き込みデータのアドレス情報および長さ情報の複数のグループが含まれている。
【0270】
記憶モジュール1360は、具体的には、第1のI/O読み出し応答メッセージに含まれるアドレス情報および長さ情報に基づいて、第1のデータをローカルサーバに記憶するように構成される。
【0271】
別の可能な実施態様では、決定モジュール1350は、第2のI/Oコマンドのコンテキスト情報に基づいて、複数のデータがすべてローカルサーバに書き込まれているかを決定するようにさらに構成される。第2のI/Oコマンドのコンテキスト情報は、ローカルサーバにおける複数のデータの記憶完了状態を含む。
【0272】
送信モジュール1330はさらに、以下のように構成される。複数のデータがすべてローカルサーバに書き込まれたとき、インタフェースを通じてローカルサーバにI/O読み出し完了メッセージを送信する。
【0273】
前述の例におけるモジュールは、電子的ハードウェアによって実装されてもよいし、またはコンピュータソフトウェアと電子的ハードウェアの組み合わせによって実装されてもよい。これらの機能がハードウェアにより実行されるか、またはソフトウェアにより実行されるかは、具体的な用途および技術的解決手段の設計制約条件に依存する。当業者は、別の方法を用いて、説明した機能を具体的な用途ごとに実施してよいが、このような実施態様が本願の範囲を超えるとみなされるべきではない。
【0274】
なお、本明細書におけるネットワークアダプタ1300は、機能モジュールの形態で具現化されてもよい。本明細書でいう「モジュール」という用語は、ソフトウェアおよび/またはハードウェアの形態で実装される場合がある。これは具体的に限定されない。
【0275】
例えば、「モジュール」は、前述の機能を実装するソフトウェアプログラム、ハードウェア回路、またはそれらの組み合わせであってもよい。ハードウェア回路は、特定用途向け集積回路(application-specific integrated circuit、ASIC)、電子回路、1または複数のソフトウェアまたはファームウェアプログラムとメモリを実行するように構成されたプロセッサ(例えば、共有プロセッサ、専用プロセッサ、またはグループプロセッサ)、組み合わせ論理回路、および/または説明した機能をサポートする他の適切なコンポーネントを含んでもよい。
【0276】
本願の実施形態は、チップをさらに提供する。チップは命令を取得し、その命令を実行して前述の方法を実装する。
【0277】
オプションとして、ある実施態様では、チップはプロセッサとデータインタフェースを含む。プロセッサは、データインタフェースを介して、メモリに記憶された命令を読み出し、前述の方法を実行する。
【0278】
オプションとして、実施態様において、チップはメモリをさらに含んでもよい。メモリは、命令を記憶し、プロセッサは、メモリに記憶された命令を実行するように構成される。命令が実行されるとき、プロセッサは、前述の方法を実行するように構成される。
【0279】
本願の実施形態はさらにコンピュータ可読記憶媒体を提供する。コンピュータ可読記憶媒体は命令を記憶する。この命令は、前述の方法の実施形態における方法を実装するために使用される。
【0280】
本願の実施形態がさらに、命令を含むコンピュータプログラム製品を提供する。この命令は、前述の方法の実施形態における方法を実装するために使用される。
【0281】
例えば、実施態様において、プロセッサは、中央処理装置(central processing unit、CPU)であってもよく、または、プロセッサは、別の汎用プロセッサ、デジタル信号プロセッサ(Digital Signal Processor、DSP)、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(field programmable gate array,FPGA)または他のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントなどであってもよい。汎用プロセッサはマイクロプロセッサであってもよいし、またはこのプロセッサは任意の従来プロセッサなどであってもよい。
【0282】
実施態様の一例では、メモリは、揮発性メモリまたは不揮発性メモリであってもよく、または揮発性メモリおよび不揮発性メモリを含んでもよい。不揮発性メモリは、リードオンリメモリ(read-only memory、ROM)、プログラマブルリードオンリメモリ(programmable ROM、PROM)、消去可能プログラマブルリードオンリメモリ(erasable PROM、EPROM)、電気的消去可能プログラマブルリードオンリメモリ(electrically EPROM、EEPROM)、またはフラッシュメモリであってよい。揮発性メモリはランダムアクセスメモリ(random access memory、RAM)であってよく、外部キャッシュとして使用される。例を用いて説明するが、限定的な説明ではなく、多くの形式のランダムアクセスメモリ(random access memory、RAM)を用いることができ、例えば、スタティックランダムアクセスメモリ(static RAM、SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスダイナミックランダムアクセスメモリ(synchronous DRAM、SDRAM)、ダブルデータレートシンクロナスダイナミックランダムアクセスメモリ(double data rate SDRAM、DDR SDRAM)、エンハンスドシンクロナスダイナミックランダムアクセスメモリ(enhanced SDRAM、ESDRAM)、シンクリンクダイナミックランダムアクセスメモリ(synchlink DRAM、SLDRAM)、ダイレクトラムバスランダムアクセスメモリ(direct rambus RAM、DR RAM)などを用いることができる。
【0283】
本明細書における用語「および/または」は、関連する対象間の対応関係のみを説明し、3つの関係が存在し得ることを表している。例えば、Aおよび/またはBは、以下の3つのケースを表し得る。Aのみが存在する、AおよびBの両方が存在する、およびBのみが存在する。ここで、AおよびBは、単数形または複数形であり得る。また、本明細書における文字「/」は、一般に関連する対象間の「または」関係を示すが、「および/または」関係を示す場合もある。詳細は、コンテキストを参照して理解されたい。
【0284】
本願において、「複数の」とは、2または2より多いことを意味する。「以下に挙げる項目(要素)の少なくとも1つ」またはそれの類似表現は、これらの項目の任意の組み合わせを意味し、1つの項目(要素)または複数の項目(要素)の任意の組み合わせが含まれる。例えば、a、b、cの少なくとも1つの項目(要素)は、a、b、c、aとb、aとc、bとc、またはaとbとcを示してよく、a、b、cは単数形または複数形でもよい。
【0285】
前述の処理のシーケンス番号は、本願の実施形態における実行順序を意味するものではない。なお、各処理の実行順序は、各処理の機能や内部論理に基づいて決定されるべきであり、本願の実施形態の実装処理を制限するものとして構成されるべきものではない。
【0286】
簡便かつ簡潔な説明を目的として、前述のシステム、装置およびユニットの詳細な動作プロセスについては、前述の方法の実施形態における対応するプロセスを参照することが、当業者には明確に理解され得る。ここでは、詳細について改めて説明しない。
【0287】
機能がソフトウェア機能ユニットの形態で実装され、別個の製品として販売または使用される場合、機能はコンピュータ可読記憶媒体に記憶されてよい。そのような理解に基づいて、本願の技術的解決手段は本質的に、または従来技術に寄与する部分が、またはこれらの技術的解決手段のうちのいくつかが、ソフトウェア製品の形態で実装され得る。コンピュータソフトウェア製品は、記憶媒体に記憶されており、本願の実施形態で説明した方法の段階のすべてまたは一部を実行するようコンピュータデバイス(パーソナルコンピュータでも、サーバでも、またはネットワークデバイスでもよい)に命令するためのいくつかの命令を含む。前述の記憶媒体は、プログラムコードを記憶できる任意の媒体を含み、そのような媒体は、USBフラッシュドライブ、着脱式ハードディスク、リードオンリメモリ(read-only memory、ROM)、ランダムアクセスメモリ(random access memory、RAM)、磁気ディスク、または光ディスクなどである。
【0288】
前述の説明は、本願の単なる具体的な実装に過ぎず、本願の保護範囲を限定することを意図するものではない。本願において開示した技術的範囲内で当業者が容易に考え出す変形または置換はいずれも、本願の保護範囲に含まれるものとする。したがって、本願の保護範囲は特許請求の範囲の保護範囲に従うものとする。
[他の可能な項目]
[項目1]
ネットワークアダプタのためのデータ処理方法であって、
前記ネットワークアダプタが、第1の入出力I/Oコマンドを取得する段階であって、前記第1のI/Oコマンドは、ローカルサーバに記憶されたデータを少なくとも1つのピアサーバに書き込むことを命令し、前記第1のI/Oコマンドは、ローカルサーバに記憶されている前記データのアドレス情報および長さ情報を含む、段階と、
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて前記データを分割し、アドレス情報および長さ情報の複数のグループを取得する段階と、
前記ネットワークアダプタが、アドレス情報と長さ情報の前記複数のグループに基づいて、前記ローカルサーバから、アドレス情報と前記長さ情報の前記複数のグループに対応するデータを取得する段階と、前記データを前記少なくとも1つのピアサーバへ送信する段階と、を備える方法。
[項目2]
前記ネットワークアダプタが、アドレス情報と長さ情報の前記複数のグループに基づいて、前記ローカルサーバから、アドレス情報と長さ情報の前記複数のグループに対応するデータを取得する前記段階が、
前記ネットワークアダプタが、第1の仮想マシンVMから、アドレス情報と長さ情報の前記複数のグループと、前記第1のI/Oコマンドを配信する前記ローカルサーバ内の前記第1のVMに対応する識別子とに基づいて、アドレス情報と長さ情報の前記複数のグループに対応する前記データを取得する段階を備える、項目1に記載の方法。
[項目3]
前記ネットワークアダプタ上のメモリは、前記データを保存しない、項目1または2に記載の方法。
[項目4]
前記ネットワークアダプタが、複数のI/Oコマンドを受信する段階と、
前記ネットワークアダプタが、前記複数のI/Oコマンドが記憶されている前記ピアサーバおよび/または前記複数のI/Oコマンドを配信する前記ローカルサーバ内の仮想マシンVMの記憶アドレスに基づいて、前記複数のI/Oコマンドから前記第1のI/Oコマンドを選択する段階と、をさらに備える項目1から3のいずれか1項に記載の方法。
[項目5]
前記ネットワークアダプタがハードウェアエンジンを備え、前記ハードウェアエンジンがデータプレーンを処理するために使用され、
前記ネットワークアダプタが、前記複数のI/Oコマンドが記憶されている前記ピアサーバおよび/または前記複数のI/Oコマンドを配信する前記ローカルサーバ内の仮想マシンVMの記憶アドレスに基づいて、前記複数のI/Oコマンドから前記第1のI/Oコマンドを選択する前記段階は、
前記ネットワークアダプタ上のハードウェアエンジンが、複数のI/Oコマンドが記憶されている前記ピアサーバおよび/または前記複数のI/Oコマンドを配信する前記ローカルサーバ内の仮想マシンVMの記憶アドレスに基づいて、前記複数のI/Oコマンドから第1のI/Oコマンドを選択する段階を備える、項目4に記載の方法。
[項目6]
前記ネットワークアダプタが、前記第1のI/Oコマンドのコンテキスト情報に基づいて、前記複数のデータがすべて前記少なくとも1つのピアサーバに書き込まれているかを決定する段階であって、前記第1のI/Oコマンドの前記コンテキスト情報は、前記少なくとも1つのピアサーバ内の前記複数のデータの記憶状態を含む、段階と、
前記複数のデータがすべて前記少なくとも1つのピアサーバに別々に書き込まれたとき、前記ネットワークアダプタが、インタフェースを通じて前記ローカルサーバにI/O書き込み完了メッセージを送信する段階と、をさらに備える項目1から5のいずれか1項に記載の方法。
[項目7]
ネットワークアダプタのためのデータ処理方法であって、
前記ネットワークアダプタが、第2のI/Oコマンドを取得する段階であって、前記第2のI/Oコマンドが、少なくとも1つのピアサーバのデータをローカルサーバに記憶することを命令し、前記第2のI/Oコマンドが、前記ローカルサーバに書き込まれる前記データのアドレス情報および長さ情報を含む段階と、
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて前記第2のI/Oコマンドを分割し、複数のI/O読み出しメッセージを取得する段階であって、前記複数のI/O読み出しメッセージの各々は、ローカルサーバに書き込まれる各データの情報を含む段階と、
前記ネットワークアダプタが、前記I/O読み出しメッセージを前記少なくとも1つのピアサーバに別々に送信する段階と、を備える方法。
[項目8]
前記ローカルサーバに書き込まれる前記各データの情報は、
前記ローカルサーバに書き込まれる前記各データのアドレス情報および長さ情報、
前記ローカルサーバに書き込まれる前記各データのアドレス情報および長さ情報と、前記ローカルサーバに存在し、前記第2のI/Oコマンドを配信するVMに関する情報、または、
前記ローカルサーバに書き込まれる前記データの第1の識別子IDおよびオフセット情報であって、前記第1のIDは、前記ローカルサーバに存在し前記第2のI/Oコマンドを配信するVMに関する情報と、前記VMに書き込まれる前記データのアドレス情報および長さ情報の複数のグループとを示すために使用される情報、のいずれかを含む項目7に記載の方法。
[項目9]
前記ネットワークアダプタが、前記ピアサーバから第1のI/O読み出し応答メッセージを受信する段階であって、前記第1のI/O読み出し応答メッセージは、前記ローカルサーバが前記ピアサーバから取得する必要がある第1のデータを含む段階と、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに基づいて、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する段階と、
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて、前記第1のデータを前記ローカルサーバに記憶する段階と、をさらに備える項目7または8に記載の方法。
[項目10]
前記第1のI/O読み出し応答メッセージは、前記ローカルサーバに書き込まれる前記第1のデータの前記第1のIDおよびオフセット情報を含み、および、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに基づいて、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する前記段階は、
前記ネットワークアダプタが、前記第1のIDに基づいて、VMに書き込まれる前記データのアドレス情報および長さ情報の前記複数のグループを決定する段階と、
前記ネットワークアダプタが、前記オフセット情報に基づいて、アドレス情報および長さ情報の前記複数のグループから、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する段階と、を備える項目7から9のいずれか1項に記載の方法。
[項目11]
前記第1のI/O読み出し応答メッセージは、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報と、前記ローカルサーバに存在し、前記第2のI/Oコマンドを配信するVMに関する情報とを含み、
前記第1のI/O読み出し応答メッセージに基づいて、前記ネットワークアダプタによって、前記ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する前記段階は、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに含まれる情報に基づいて、ローカルサーバに書き込まれる前記第1のデータのアドレス情報および長さ情報を決定する段階を含む、項目7から10のいずれか1項に記載の方法。
[項目12]
前記ネットワークアダプタが、前記アドレス情報および前記長さ情報に基づいて、前記第1のデータを前記ローカルサーバに記憶する前記段階は、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに含まれるアドレス情報および長さ情報が許可テーブル内に存在し、前記許可テーブルが、前記ローカルサーバ内の書き込みデータのアドレス情報および長さ情報の複数のグループを含むことを決定する段階と、
前記ネットワークアダプタが、前記第1のI/O読み出し応答メッセージに含まれる前記アドレス情報および前記長さ情報に基づき、前記第1のデータを前記ローカルサーバに記憶する段階と、を含む項目11に記載の方法。
[項目13]
前記ネットワークアダプタが、前記第2のI/Oコマンドのコンテキスト情報に基づいて、前記複数のデータがすべて前記ローカルサーバに書き込まれているかを決定する段階であって、前記第2のI/Oコマンドのコンテキスト情報は、前記ローカルサーバの前記複数のデータの保存完了状態を含む段階と、
前記複数のデータがすべて前記ローカルサーバに書き込まれたとき、前記ネットワークアダプタが、前記ローカルサーバにI/O読み出し完了メッセージをインタフェース経由で送信する段階と、をさらに備える項目7から12のいずれか1項に記載の方法。
[項目14]
プロセッサとメモリとを備え、前記プロセッサが前記メモリ内の命令を実行することにより、前記ネットワークアダプタが項目1から6のいずれか1項に記載の方法を実行するネットワークアダプタ。
[項目15]
プロセッサとメモリとを備え、前記プロセッサが前記メモリ内の命令を実行することにより、前記ネットワークアダプタが項目7から13のいずれか1項に記載の方法を実行するネットワークアダプタ。
[項目16]
命令を含み、前記命令が項目1から6のいずれか1項に記載の方法を実施するために使用されるコンピュータ可読記憶媒体。
[項目17]
命令を含み、前記命令が項目7から13のいずれか1項に記載の方法を実施するために使用されるコンピュータ可読記憶媒体。