(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022048716
(43)【公開日】2022-03-28
(54)【発明の名称】ストレージシステム
(51)【国際特許分類】
G06F 3/06 20060101AFI20220318BHJP
G06F 13/10 20060101ALI20220318BHJP
G06F 13/28 20060101ALI20220318BHJP
G06F 13/12 20060101ALI20220318BHJP
【FI】
G06F3/06 301M
G06F13/10 340A
G06F13/28 310A
G06F13/12 340B
【審査請求】未請求
【請求項の数】18
【出願形態】OL
(21)【出願番号】P 2020154697
(22)【出願日】2020-09-15
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】佐野 伸太郎
(72)【発明者】
【氏名】檜田 和浩
【テーマコード(参考)】
5B061
【Fターム(参考)】
5B061DD01
(57)【要約】
【課題】クライアントとストレージシステムとの間の通信を効率化すること。
【解決手段】ストレージシステムは、リモートダイレクトメモリアクセスによりクライアントと通信可能なネットワークインタフェースコントローラと、揮発性メモリと、ストレージデバイスと、を備える。ネットワークインタフェースコントローラは、リモートダイレクトメモリアクセスにより転送される、ライトデータと、ライトデータの書き込み要求を含むサブミッションキューエントリとを揮発性メモリに格納する。ストレージデバイスは、サブミッションキューエントリが揮発性メモリのサブミッションキューに格納されると、サブミッションキューエントリに基づいて、ライトデータをストレージデバイスに書き込む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
リモートダイレクトメモリアクセスによりクライアントと通信可能なネットワークインタフェースコントローラと、
揮発性メモリと、
ストレージデバイスと、
を具備するストレージシステムであって、
前記ネットワークインタフェースコントローラは、リモートダイレクトメモリアクセスにより転送される、ライトデータと、前記ライトデータの書き込み要求を含むサブミッションキューエントリとを前記揮発性メモリに格納し、
前記ストレージデバイスは、前記サブミッションキューエントリが前記揮発性メモリのサブミッションキューに格納されると、前記サブミッションキューエントリに基づいて、前記ライトデータを前記ストレージデバイスに書き込む、ストレージシステム。
【請求項2】
前記サブミッションキューエントリは、前記ライトデータの書き込み先を示すストレージアドレスを含み、
前記ストレージデバイスは、前記サブミッションキューエントリに含まれる前記ストレージアドレスにより指定される位置に、前記ライトデータを書き込む、請求項1に記載のストレージシステム。
【請求項3】
前記ストレージデバイスは、前記サブミッションキューエントリが前記サブミッションキューに格納されたか否かを検知する、請求項1に記載のストレージシステム。
【請求項4】
前記ストレージデバイスは、前記サブミッションキューを監視し、前記サブミッションキューエントリが前記サブミッションキューに格納されたことを検知する、請求項3に記載のストレージシステム。
【請求項5】
前記サブミッションキューは、サブミッションキューエントリが格納される度に更新されるビット情報を含み、
前記ストレージデバイスは、前記ビット情報が更新されると、前記サブミッションキューエントリが前記サブミッションキューに格納されたことを検知する、請求項3または請求項4に記載のストレージシステム。
【請求項6】
前記ストレージデバイスは、リモートダイレクトメモリアクセスによる前記クライアントとの通信が完了したことを検知すると、前記サブミッションキューエントリが前記サブミッションキューに格納されたことを検知する、請求項3に記載のストレージシステム。
【請求項7】
前記サブミッションキューエントリは、前記ライトデータのサイズを含み、
前記ストレージデバイスは、前記揮発性メモリのアドレスであって、前記クライアントから最初に転送されるライトデータの書き込み先を示すメモリアドレスを保持し、以降に前記クライアントから転送されるライトデータの前記揮発性メモリにおける書き込み先を、前記メモリアドレスと、前記ライトデータのサイズとに基づいて特定する、請求項1に記載のストレージシステム。
【請求項8】
前記サブミッションキューエントリが前記サブミッションキューに格納されたか否かを検知する検知部をさらに具備する、請求項1に記載のストレージシステム。
【請求項9】
リモートダイレクトメモリアクセスによりクライアントと通信可能なネットワークインタフェースコントローラと、
揮発性メモリと、
ストレージデバイスと、
プロセッサと、
を具備するストレージシステムであって、
前記ネットワークインタフェースコントローラは、リモートダイレクトメモリアクセスにより転送される、前記ストレージデバイスに格納されたデータの読み出し要求を含むサブミッションキューエントリを前記揮発性メモリに格納し、
前記ストレージデバイスは、前記サブミッションキューエントリが前記揮発性メモリのサブミッションキューに格納されると、前記サブミッションキューエントリに基づいて読み出し対象のリードデータを読み出し、
前記プロセッサは、前記リードデータを、前記クライアントに転送するための指示を前記ネットワークインタフェースコントローラに出力する、ストレージシステム。
【請求項10】
前記サブミッションキューエントリは、前記リードデータの格納先を示すストレージアドレスを含み、
前記ストレージデバイスは、前記サブミッションキューエントリに含まれる前記ストレージアドレスにより指定される位置から前記リードデータを読み出す、請求項9に記載のストレージシステム。
【請求項11】
前記ストレージデバイスは、前記サブミッションキューエントリが前記サブミッションキューに格納されたか否かを検知する、請求項9に記載のストレージシステム。
【請求項12】
前記ストレージデバイスは、前記サブミッションキューを監視し、前記サブミッションキューエントリが前記サブミッションキューに格納されたことを検知する、請求項11に記載のストレージシステム。
【請求項13】
前記サブミッションキューは、サブミッションキューエントリが格納される度に更新されるビット情報を含み、
前記ストレージデバイスは、前記ビット情報が更新されると、前記サブミッションキューエントリが前記サブミッションキューに格納されたことを検知する、請求項11または請求項12に記載のストレージシステム。
【請求項14】
前記ストレージデバイスは、リモートダイレクトメモリアクセスによる前記クライアントとの通信が完了したことを検知すると、前記サブミッションキューエントリが前記サブミッションキューに格納されたことを検知する、請求項11に記載のストレージシステム。
【請求項15】
前記サブミッションキューエントリは、前記揮発性メモリのアドレスであって、前記リードデータの書き込み先を示すメモリアドレスを含み、
前記ストレージデバイスは、前記サブミッションキューエントリに含まれる前記メモリアドレスにより指定される位置に、前記リードデータを書き込む、請求項9に記載のストレージシステム。
【請求項16】
前記サブミッションキューエントリは、前記リードデータの書き込み先を示すクライアントアドレスを含み、
前記プロセッサは、前記リードデータおよび前記クライアントアドレスを、前記クライアントに転送するための指示を前記ネットワークインタフェースコントローラに出力する、請求項9に記載のストレージシステム。
【請求項17】
前記クライアントは、前記リードデータの書き込み先を示すクライアントアドレスを格納するレシービングキューを含み、
前記リードデータは、前記レシービングキューに格納される前記クライアントアドレスにより指定される位置に書き込まれる、請求項9に記載のストレージシステム。
【請求項18】
前記サブミッションキューエントリは、前記リードデータのサイズを含み、
前記ストレージデバイスおよび前記揮発性メモリは、前記揮発性メモリのアドレスであって、前記クライアントに最初に転送されるリードデータの書き込み先を示すメモリアドレスを保持し、
前記ストレージデバイスは、2番目以降に転送されるリードデータの前記揮発性メモリにおける書き込み先を、前記メモリアドレスと、前記リードデータのサイズとに基づいて特定する、請求項9に記載のストレージシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、ストレージシステムに関する。
【背景技術】
【0002】
不揮発性メモリを備えるストレージシステムが普及している。ストレージシステムの一例として、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
【0003】
SSDは、例えば、データセンタのサーバ等のようなホスト計算機システムのストレージデバイスとして使用される。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願第9658782号明細書
【特許文献2】米国特許出願公開第2018/006992号明細書
【特許文献3】米国特許出願公開第2018/0342429号明細書
【特許文献4】米国特許出願公開第2019/0222649号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本実施形態は、クライアントとストレージシステムとの間の通信を効率化することを目的とする。
【課題を解決するための手段】
【0006】
実施形態によれば、ストレージシステムは、リモートダイレクトメモリアクセスによりクライアントと通信可能なネットワークインタフェースコントローラと、揮発性メモリと、ストレージデバイスと、を具備する。前記ネットワークインタフェースコントローラは、リモートダイレクトメモリアクセスにより転送される、ライトデータと、前記ライトデータの書き込み要求を含むサブミッションキューエントリとを前記揮発性メモリに格納する。前記ストレージデバイスは、前記サブミッションキューエントリが前記揮発性メモリのサブミッションキューに格納されると、前記サブミッションキューエントリに基づいて、前記ライトデータを前記ストレージデバイスに書き込む。
【図面の簡単な説明】
【0007】
【
図1】実施形態1-Aに係るネットワークストレージシステムの概略構成例を示す図。
【
図2】同実施形態に係るネットワークストレージシステムの動作の一例を示すシーケンスチャート。
【
図3】実施形態1-Bに係るネットワークストレージシステムの概略構成例を示す図。
【
図4】実施形態1-Cに係るネットワークストレージシステムの概略構成例を示す図。
【
図5】実施形態1-Dに係るネットワークストレージシステムの概略構成例を示す図。
【
図6】実施形態1-Eに係るネットワークストレージシステムの概略構成例を示す図。
【
図7】実施形態2-Aに係るネットワークストレージシステムの概略構成例を示す図。
【
図8】同実施形態に係るネットワークストレージシステムの動作の一例を示すシーケンスチャート。
【
図9】実施形態2-Bに係るネットワークストレージシステムの概略構成例を示す図。
【
図10】実施形態2-Cに係るネットワークストレージシステムの概略構成例を示す図。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。
(実施形態1-A)
実施形態1-Aでは、クライアントに格納されているデータを効率よくサーバに書き込むことが可能なネットワークストレージシステムについて説明する。
【0009】
図1は、実施形態1-Aに係るネットワークストレージシステム1Aの概略構成例を示す図である。
図1に示すように、ネットワークストレージシステム1Aは、クライアント2と、サーバ3とを備える。クライアント2とサーバ3とは、リモートダイレクトメモリアクセス(RDMA: Remote Direct Memory Access)により通信する。クライアント2とサーバ3との間で行われるリモートダイレクトメモリアクセスによる通信は、Infiniband(登録商標)、RDMA over Converged Ethernet(RoCE)、internet Wide Area RDMA Protocol(iWARP)等により実現され得る。
【0010】
クライアント2は、CPU(Central Processing Unit)21と、DRAM(Dynamic Random Access Memory)22と、ネットワーク装置23と、を備える。クライアント2に含まれる各部21~23は、例えばバスによって相互接続されている。なお、クライアント2はクライアントノードと称されてもよい。
【0011】
サーバ3は、ネットワーク装置31と、DRAM32と、ストレージデバイス33と、CPU34と、を備える。ネットワーク装置31、DRAM32およびCPU34は、ストレージデバイス33のホストとして機能する。サーバ3に含まれる各部31~34は、例えばバスによって相互接続されている。上記したホストとストレージデバイス33とを相互接続するためのインタフェースとしては、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)等が使用されてもよい。なお、サーバ3はストレージシステムあるいは情報処理装置と称されてもよい。
【0012】
まず、クライアント2の構成について説明する。
CPU21は、サーバ3への要求を含むサブミッションキューエントリSQEを生成する。サブミッションキューエントリSQEには、各種コマンドが含まれる。本実施形態では、各種コマンドの一つとしてライトコマンドが含まれる場合を説明するが、これに限定されず、各種コマンドとして、他の様々なコマンドが含まれてもよい。
【0013】
ライトコマンドは、書き込むべきデータ(ライトデータ)をサーバ3に書き込むためのコマンドであり、サーバDRAMアドレス、ライトデータのサイズ、ストレージアドレス、等を含む。サーバDRAMアドレスは、サーバ3に含まれるDRAM32のアドレスを示し、サーバ3にRDMA転送されるライトデータが一時的に格納されるDRAM32内の位置を示している。ストレージアドレスは、サーバ3に含まれるストレージデバイス33のアドレスを示し、サーバ3にRDMA転送されるライトデータが書き込まれるストレージデバイス33内の位置を示している。
【0014】
なお、サブミッションキューエントリSQEは、ストレージシステムとして機能するサーバ3への要求を含むため、ストレージリクエストと称されてもよい。あるいは、サブミッションキューエントリSQEは、各種コマンドを含むため、コマンド情報と称されてもよい。
【0015】
DRAM22は揮発性メモリであり、CPU21により生成されたサブミッションキューエントリSQEと、当該サブミッションキューエントリSQEに含まれるライトコマンドによりサーバ3に書き込むべきライトデータWDとを格納する。
【0016】
ネットワーク装置23は、リモートダイレクトメモリアクセスによりサーバ3と通信し、サーバ3に対してサブミッションキューエントリSQEとライトデータWDとをRDMA転送する。なお、ネットワーク装置23はリモートネットワークインタフェースコントローラ(rNIC)と称されてもよい。
【0017】
次に、サーバ3の構成について説明する。
ネットワーク装置31は、リモートダイレクトメモリアクセスによりクライアント2と通信し、クライアント2からRDMA転送されたサブミッションキューエントリSQEとライトデータWDとを受信する。受信されたサブミッションキューエントリSQEは、DRAM32内のストレージサブミッションキューSSQに格納される。受信されたライトデータWDは、DRAM32内の記憶領域のうち、サブミッションキューエントリSQEに含まれるサーバDRAMアドレスにより指定される位置に格納される。なお、ネットワーク装置31はリモートネットワークインタフェースコントローラ(rNIC)と称されてもよい。
【0018】
DRAM32は揮発性メモリであり、ストレージサブミッションキューSSQを含む。ストレージサブミッションキューSSQは、複数の管理単位の記憶領域を有している。ストレージサブミッションキューSSQには、クライアント2からRDMA転送されたサブミッションキューエントリSQEが格納される。また、DRAM32には、クライアント2からRDMA転送されたライトデータWDが格納される。
【0019】
ストレージデバイス33は不揮発性メモリであり、例えばNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)としてもよい。あるいは、ストレージデバイス33は、例えばNOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory:磁気抵抗メモリ)、PRAM(Phasechange Random Access Memory:抵抗変化型メモリ)、FeRAM(Ferroelectric Random Access Memory)等、他の不揮発性半導体メモリであってもよい。例えば、ストレージデバイス33は、磁気メモリ、3次元構造の半導体メモリ等でもよい。
【0020】
ストレージデバイス33はSQ監視機構33Aを含む。SQ監視機構33Aは、DRAM32内のストレージサブミッションキューSSQを周期的にポーリングし、ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたか否かを監視する。ポーリングの結果、新たなサブミッションキューエントリSQEが格納されたことを検知すると、SQ監視機構33Aは、当該新たなサブミッションキューエントリSQEに含まれるライトコマンドをフェッチし、当該ライトコマンドに基づいたライト処理を実行する。
【0021】
SQ監視機構33Aは、ストレージサブミッションキューSSQにサブミッションキューエントリSQEが一つも格納されていない場合、最初のサブミッションキューエントリSQEが格納される記憶領域を周期的にポーリングし、新たなサブミッションキューエントリSQEが格納されたか否かを監視する。ポーリングの結果、最初のサブミッションキューエントリSQEが格納される記憶領域に新たなサブミッションキューエントリSQEが格納されたことを検知すると、以降においては、SQ監視機構33Aは、次のサブミッションキューエントリSQE(2番目のサブミッションキューエントリSQE)が格納される記憶領域を周期的にポーリングして、新たなサブミッションキューエントリSQEが格納されたか否かを監視する。以上のように、SQ監視機構33Aは、ストレージサブミッションキューSSQのn番目の記憶領域を周期的にポーリングして、新たなサブミッションキューエントリSQEが格納されたか否かを監視し、n番目の記憶領域に新たなサブミッションキューエントリSQEが格納されたことを検知すると、以降においては、ストレージサブミッションキューSSQのn+1番目の記憶領域を周期的にポーリングして、新たなサブミッションキューエントリSQEが格納されたか否かを監視するように動作する。
【0022】
なお、SQ監視機構33Aは、新たなサブミッションキューエントリSQEがストレージサブミッションキューSSQに格納されたか否かを検知するためのものであるため、検知部と称されてもよい。
【0023】
CPU34は、各部31~33の動作等を制御するが、本実施形態においては必須の構成でないため、ここではその詳しい説明を省略する。
【0024】
以下では、上記のような構成を備える実施形態1-Aに係るネットワークストレージシステム1Aによって実行されるライト処理について説明する。
【0025】
図2は、実施形態1-Aに係るネットワークストレージシステム1Aによって実行されるライト処理の一例を示すシーケンスチャートである。なお、ここでは、クライアント2のDRAM22には、サーバ3に書き込むべきライトデータWDが格納されているものとする。また、ここでは、サーバ3のストレージデバイス33に含まれるSQ監視機構33Aが、DRAM32内のストレージサブミッションキューSSQを周期的にポーリングして、新たなサブミッションキューエントリSQEが格納されたか否かの監視を行っているものとする。
【0026】
まず、クライアント2のCPU21は、DRAM22に格納されているライトデータWDをサーバ3に書き込むためのライトコマンドを含むサブミッションキューエントリSQEを生成し(ステップS1)、生成されたサブミッションキューエントリSQEをDRAM22に格納する(ステップS2)。
【0027】
続いて、CPU21は、生成されたサブミッションキューエントリSQEに含まれるライトコマンドにより示されるサーバDRAMアドレスを取得する。CPU21は、DRAM22に格納されているライトデータWDをサーバ3にRDMA転送するための第1転送指示をネットワーク装置23に出力する(ステップS3)。ここで、ネットワーク装置23に出力される第1転送指示は、例えば、ライトデータWDが格納されているDRAM22上の位置を示すDRAMアドレスと、サーバDRAMアドレスとを含む。
ネットワーク装置23は、CPU21からの第1転送指示を受けると、ライトデータWDをサーバ3に対してRDMA転送する(ステップS4)。
【0028】
サーバ3のネットワーク装置31は、クライアント2のネットワーク装置23からRDMA転送されたライトデータWDとサーバDRAMアドレスとを受信すると、DRAM32内の記憶領域のうち、ネットワーク装置23によって指定された転送先メモリアドレス(ここではサーバDRAMアドレス)により示された位置に、受信されたライトデータWDを格納する(ステップS5)。
【0029】
クライアント2のCPU21は、上記した第1転送指示を出力すると、DRAM22に格納されているサブミッションキューエントリSQEをサーバ3にRDMA転送するための第2転送指示をネットワーク装置23に出力する(ステップS6)。ここで、ネットワーク装置23に出力される第2転送指示は、例えば、サブミッションキューエントリSQEが格納されているDRAM22上の位置を示すDRAMアドレスを含む。
ネットワーク装置23は、CPU21からの第2転送指示を受けると、サブミッションキューエントリSQEをサーバ3に対してRDMA転送する(ステップS7)。
【0030】
なお、
図2では、RDMA転送されたライトデータWDがサーバ3のDRAM32に格納された後に、ステップS6の処理が実行される場合を例示しているが、ステップS6の処理は、上記した第1転送指示が出力された後であれば、RDMA転送されたライトデータWDがサーバ3のDRAM32に格納されるより前に実行されても構わない。
【0031】
サーバ3のネットワーク装置31は、クライアント2からRDMA転送されたサブミッションキューエントリSQEを受信すると、受信されたサブミッションキューエントリSQEを、DRAM32内のストレージサブミッションキューSSQに格納する(ステップS8)。
【0032】
以降のタイミングにおいて、ストレージデバイス33のSQ監視機構33Aによりポーリングが実行されると、SQ監視機構33Aは、DRAM32内のストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたことを検知する(ステップS9)。
【0033】
SQ監視機構33Aは、新たなサブミッションキューエントリSQEが格納されたことを検知すると、当該新たなサブミッションキューエントリSQEに含まれるライトコマンドに基づいた動作(つまり、ライト処理)を実行する。具体的には、まず、SQ監視機構33Aは、上記したライトコマンドに含まれるサーバDRAMアドレスに基づいて、DRAM32に格納されているライトデータWDを読み出す(ステップS10)。その後、SQ監視機構33Aは、ストレージデバイス33内の記憶領域のうち、上記したライトコマンドに含まれるストレージアドレスにより指定される位置に、読み出されたライトデータWDを書き込み(ステップS11)、ここでの一連のライト処理を終了させる。
【0034】
以上説明した実施形態1-Aにおいて、ネットワークストレージシステム1Aは、リモートダイレクトメモリアクセスによりサーバ3と通信し、サーバ3に対してライトコマンドを含むサブミッションキューエントリSQEとライトデータWDとをRDMA転送する、クライアント2を備えている。また、ネットワークストレージシステム1Aは、クライアント2からRDMA転送されて来るサブミッションキューエントリSQEを格納するストレージサブミッションキューSSQを含むDRAM32と、当該ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたか否かを周期的なポーリングにより監視するSQ監視機構33Aとを含む、サーバ3を備えている。
【0035】
これによれば、サーバ3は、リモートダイレクトメモリアクセスによりRDMA転送されて来るサブミッションキューエントリSQEがストレージサブミッションキューSSQに格納されたことをポーリングにより検知し、当該検知を契機にして、当該サブミッションキューエントリSQEに含まれるライトコマンドに基づいたライト処理を実行することが可能である。このため、通常であれば必要である、ストレージサブミッションキューSSQにサブミッションキューエントリSQEが格納された際に行われるドアベルテールレジスタを更新する処理(換言すると、サブミッションキューエントリSQEが書き込まれたストレージサブミッションキューSSQの位置を示すポインタを更新する処理)を省略することが可能となり、レイテンシを削減することが可能である。
【0036】
また、サーバ3において実行されるライトコマンドを含むサブミッションキューエントリSQEは、クライアント2によりリモートで生成され、サーバ3は、RDMA転送されて来るサブミッションキューエントリSQEに含まれるライトコマンドに基づいたライト処理を実行すればよいので、例えば、クライアント2から送信されて来るリクエストコマンドをサーバ3用に変更し、サーバ3用のリクエストコマンドを生成するといったCPU処理を省略することが可能である。つまり、サーバ3のCPU34によるCPU処理を削減することが可能である。
【0037】
なお、ネットワークストレージシステム1Aに含まれるクライアント2のネットワーク装置23と、サーバ3のネットワーク装置31は共に、NVMeoFを解釈可能な機能を有さない標準的なrNICで構築されてもよいし、NVMeoFを解釈可能な機能を有するrNICで構築されるとしても構わない。
【0038】
(実施形態1-B)
次に、実施形態1-Bについて説明する。
図3は、実施形態1-Bに係るネットワークストレージシステム1Bの概略構成例を示す図である。実施形態1-Bは、ストレージサブミッションキューSSQが、新たなサブミッションキューエントリSQEが格納される度に変化するフェーズビットFBを含む点で、上記した実施形態1-Aと相違している。また、実施形態1-Bは、ストレージサブミッションキューSSQのフェーズビットFBに基づいて、新たなサブミッションキューエントリSQEが格納されたことを検知する点で、上記した実施形態1-Aと相違している。なお、以下では、上記した実施形態1-Aと相違する点のみを説明し、上記した実施形態1-Aと同様な点についての説明は省略する。
【0039】
ストレージサブミッションキューSSQのフェーズビットFBは、
図3に示すように、複数の管理単位の記憶領域毎に設定され、最初は全て「0」に設定される。新たなサブミッションキューエントリSQEが、ストレージサブミッションキューSSQの所定の記憶領域に格納されると、当該記憶領域に対応するフェーズビットFBは「0」から「1」、または、「1」から「0」に変化する。ストレージデバイス33のSQ監視機構33Aは、このフェーズビットFBの変化をポーリングにより検知し、新たなサブミッションキューエントリSQEが格納されたか否かを監視する。
【0040】
以上説明した実施形態1-Bによれば、ストレージサブミッションキューSSQが、新たなサブミッションキューエントリSQEが格納される度に変化するフェーズビットFBを含むことにより、SQ監視機構33Aは、フェーズビットFBをポーリングにより監視することで、新たなサブミッションキューエントリSQEが格納されたことを検知する。
【0041】
この場合においても、ストレージサブミッションキューSSQにサブミッションキューエントリSQEが格納された際に行われるドアベルテールレジスタを更新する処理を省略することが可能な点に変わりはないため、上記した実施形態1-Aと同様に、レイテンシを削減することが可能である。また、サーバ3において実行されるライトコマンドを含むサブミッションキューエントリSQEが、クライアント2によりリモートで生成され、サーバ3は、RDMA転送されて来るサブミッションキューエントリSQEに含まれるライトコマンドに基づいたライト処理を実行すればよい点も変わりはないため、上記した実施形態1-Aと同様に、サーバ3のCPU34によるCPU処理を削減することが可能である。
【0042】
(実施形態1-C)
続いて、実施形態1-Cについて説明する。実施形態1-Cは、
図4に示すように、FPGA(Field Programmable Gate Array)35がさらに設けられ、ストレージデバイス33の代わりに、FPGA35がSQ監視機構35Aを含む点で、上記した実施形態1-Aと相違している。なお、実施形態1-Cは、FPGA35に含まれるSQ監視機構35Aが、
図1に示したSQ監視機構33Aの代わりに動作すること以外に相違点はないため、ここでは詳しい説明を省略する。
【0043】
以上説明した実施形態1-Cによれば、上記した実施形態1-Aと同様な効果を得ることが可能である。
【0044】
なお、本実施形態では、
図1に示したSQ監視機構33Aに相当する構成が、FPGA35に設けられている場合について説明したが、SQ監視機構33Aに相当する構成はCPU34に設けられていてもよい。この場合であっても、上記した実施形態1-Aと同様な効果を得ることが可能である。
【0045】
(実施形態1-D)
さらに、実施形態1-Dについて説明する。
図5は、実施形態1-Dに係るネットワークストレージシステム1Dの概略構成例を示す図である。実施形態1-Dは、
図5に示すように、サーバ3のDRAM32が、コンプリーションキューCQと、ドアベルテールレジスタDTRとを含む点で、上記した実施形態1-Aと相違している。また、実施形態1-Dは、ポーリングの対象がストレージサブミッションキューSSQではなく、コンプリーションキューCQと、ドアベルテールレジスタDTRとである点でも、上記した実施形態1-Aと相違している。なお、以下では、上記した実施形態1-Aと相違する点のみを説明し、上記した実施形態1-Aと同様な点についての説明は省略する。
【0046】
コンプリーションキューCQは、複数の管理単位の記憶領域を有している。コンプリーションキューCQには、クライアント2からサーバ3へのサブミッションキューエントリSQEのRDMA転送が完了したことを示すコンプリーション情報CQEが格納される。なお、本実施形態においては、コンプリーションキューCQには、クライアント2からサーバ3へのサブミッションキューエントリSQEのRDMA転送が完了したことを示すコンプリーション情報CQEのみが格納され、クライアント2からサーバ3へのライトデータWDのRDMA転送が完了したことを示すコンプリーション情報は格納されないものとする。
【0047】
ドアベルテールレジスタDTRには、コンプリーションキューCQに対するライトポインタ(以下、CQテールと称する)CQT(の値)が格納される。CQテールCQTは、クライアント2からのコンプリーション情報CQEを次に書き込むべきコンプリーションキューCQの位置を示すポインタである。
【0048】
ストレージデバイス33に含まれる監視機構33Bは、DRAM32内のコンプリーションキューCQおよびドアベルテールレジスタDTRを周期的にポーリングし、コンプリーションキューCQに新たなコンプリーション情報CQEが格納されたか否かと、ドアベルテールレジスタDTRに格納されるCQテールCQTの値が更新されたか否か(インクリメントされたか否か)と、を監視する。ポーリングの結果、新たなコンプリーション情報CQEが格納されたことを検知し、かつ、ドアベルテールレジスタDTRに格納されるCQテールCQTの値が更新されたことを検知すると、監視機構33Bは、ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたものと認識する。監視機構33Bは、このようにして、新たなサブミッションキューエントリSQEが格納されたことを検知すると、当該新たなサブミッションキューエントリSQEに含まれるライトコマンドをフェッチし、当該ライトコマンドに基づいたライト処理を実行する。
【0049】
なお、この場合、監視機構33Bは、ドアベルテールレジスタDTRをポーリングしつつ、当該ドアベルテールレジスタDTRに格納されるCQテールCQTにより示されるコンプリーションキューCQの位置をポーリングして、コンプリーションキューCQに新たなコンプリーション情報CQEが格納されたか否かと、ドアベルテールレジスタDTRに格納されるCQテールCQTの値が更新されたか否か(インクリメントされたか否か)と、を監視する。
【0050】
また、本実施形態では、監視機構33Bは、ポーリングの結果、新たなコンプリーション情報CQEが格納されたことを検知し、かつ、ドアベルテールレジスタDTRに格納されるCQテールCQTの値が更新されたことを検知した場合に、ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたものと認識するとしたが、これに限定されず、新たなコンプリーション情報CQEが格納されたこと、または、CQテールCQTの値が更新されたことのうちの少なくとも一方を検知した場合に、ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたものと認識してもよい。
【0051】
以上説明した実施形態1-Dにおいて、サーバ3は、DRAM32内にコンプリーションキューCQとドアベルテールレジスタDTRとを含む。また、サーバ3は、DRAM32内のコンプリーションキューCQおよびドアベルテールレジスタDTRを周期的にポーリングすることで、ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたか否かを監視する監視機構33Bを含む。
【0052】
この場合においても、ストレージサブミッションキューSSQにサブミッションキューエントリSQEが格納された際に行われるドアベルテールレジスタを更新する処理(補足すると、コンプリーションキューCQに対応するドアベルテールレジスタDTRを更新する処理ではなく、ストレージサブミッションキューSSQに対応するドアベルテールレジスタを更新する処理)を省略することが可能な点に変わりはないため、上記した実施形態1-Aと同様に、レイテンシを削減することが可能である。また、サーバ3において実行されるライトコマンドを含むサブミッションキューエントリSQEが、クライアント2によりリモートで生成され、サーバ3は、RDMA転送されて来るサブミッションキューエントリSQEに含まれるライトコマンドに基づいたライト処理を実行すればよい点も変わりはないため、上記した実施形態1-Aと同様に、サーバ3のCPU34によるCPU処理を削減することが可能である。
【0053】
(実施形態1-E)
次に、実施形態1-Eについて説明する。
図6は、実施形態1-Eに係るネットワークストレージシステム1Eの概略構成例を示す図である。実施形態1-Eは、クライアント2のCPU21により、最初のライトデータWD1が格納されるDRAM32内の位置を示すサーバDRAMアドレスが設定される一方で、
図6に示すように、サブミッションキューエントリSQEからサーバDRAMアドレスが省略されている点で、上記した実施形態1-Aと相違している。CPU21により設定されたサーバDRAMアドレスは、クライアント2からサーバ3に転送され、ストレージデバイス33のDRAMアドレス保持部33Cにより保持される。なお、以下では、上記した実施形態1-Aと相違する点のみを説明し、上記した実施形態1-Aと同様な点についての説明は省略する。
【0054】
クライアント2のCPU21は、クライアント2からサーバ3に最初にRDMA転送されるライトデータWD1が格納されるべきDRAM32内の位置を示すサーバDRAMアドレスを生成する。生成されたサーバDRAMアドレスは、クライアント2からサーバ3に転送され、ストレージデバイス33のDRAMアドレス保持部33Cにより保持される。
【0055】
サーバ3のネットワーク装置31は、リモートダイレクトメモリアクセスによりクライアント2と通信し、クライアント2からRDMA転送された最初のライトデータWD1を受信すると、DRAM32内の記憶領域のうち、ストレージデバイス33のDRAMアドレス保持部33Cにおいて保持されるサーバDRAMアドレスにより指定される位置に、当該ライトデータWD1を格納する。
【0056】
ネットワーク装置31は、リモートダイレクトメモリアクセスによりクライアント2と通信し、クライアント2からRDMA転送された最初のライトデータWD1に対応するサブミッションキューエントリSQE1を受信すると、DRAM32内のストレージサブミッションキューSSQに、当該サブミッションキューエントリSQE1を格納する。また、ネットワーク装置31は、受信されたサブミッションキューエントリSQE1に含まれるライトデータWD1のサイズを、ストレージデバイス33のDRAMアドレス保持部33Cにおいて保持されるサーバDRAMアドレスに足すことにより、次にRDMA転送されるライトデータWD2が格納されるべきDRAM32内の位置を示すサーバDRAMアドレスを生成する。生成されたサーバDRAMアドレスは、例えば、DRAMアドレス保持部33Cに保持されているサーバDRAMアドレスを更新することにより保持される。
【0057】
ネットワーク装置31は、クライアント2からRDMA転送された2番目のライトデータWD2を受信すると、DRAM32内の記憶領域のうち、ストレージデバイス33のDRAMアドレス保持部33Cにおいて保持されるサーバDRAMアドレスにより指定される位置に、当該ライトデータWD2を格納する。
【0058】
ネットワーク装置31は、クライアント2からRDMA転送された2番目のライトデータWD2に対応するサブミッションキューエントリSQE2を受信すると、DRAM32内のストレージサブミッションキューSSQに、当該サブミッションキューエントリSQE2を格納する。また、ネットワーク装置31は、受信されたサブミッションキューエントリSQE2に含まれるライトデータWD2のサイズを、ストレージデバイス33のDRAMアドレス保持部33Cにおいて保持されるサーバDRAMアドレスに足すことにより、次にRDMA転送されるライトデータWD3が格納されるべきDRAM32内の位置を示すサーバDRAMアドレスを生成する。生成されたサーバDRAMアドレスは、DRAMアドレス保持部33Cに保持されているサーバDRAMアドレスを更新することにより保持される。
【0059】
なお、ネットワーク装置31は、3番目のライトデータWD3がRDMA転送された場合も最初のライトデータWD1および2番目のライトデータWD2がRDMA転送された場合と同様に動作するため、ここではその詳しい説明は省略する。
【0060】
以上説明した実施形態1-Eによれば、クライアント2により、最初のライトデータWD1のサーバDRAMアドレスが設定されることにより、サーバ3は、最初のライトデータWD1のサーバDRAMアドレスと当該ライトデータWD1のサイズとに基づいて、2番目以降のライトデータWDのサーバDRAMアドレスを特定することが可能である。このため、サブミッションキューエントリSQEからサーバDRAMアドレスを省略することが可能となり、クライアント2からサーバ3へのサーバDRAMアドレスの転送を省略することが可能となる。これによれば、サブミッションキューエントリSQEのデータ量を削減することができるため、レイテンシをさらに削減することが可能である。
【0061】
なお、サーバ3において実行されるライトコマンドを含むサブミッションキューエントリSQEが、クライアント2によりリモートで生成され、サーバ3は、RDMA転送されて来るサブミッションキューエントリSQEに含まれるライトコマンドに基づいたライト処理を実行すればよい点に変わりはないため、上記した実施形態1-Aと同様に、サーバ3のCPU34によるCPU処理を削減することが可能である。
【0062】
以上説明した実施形態1-A~実施形態1-Eによれば、クライアント2に格納されているライトデータWDを効率よくサーバ3に書き込むことが可能なネットワークストレージシステム1を実現させることが可能である。
【0063】
(実施形態2-A)
実施形態2-Aでは、サーバ3に格納されているデータを効率よくクライアント2に転送することが可能なネットワークストレージシステム1について説明する。なお、以下では、主に、上記した実施形態1-A~実施形態1-Eと相違する点を説明し、上記した実施形態1-A~実施形態1-Eと同様な点についての説明は適宜省略する。
【0064】
図7は、実施形態2-Aに係るネットワークストレージシステム1Fの概略構成例を示す図である。
図7に示すように、ネットワークストレージシステム1Fは、クライアント2と、サーバ3とを備える。クライアント2とサーバ3とは、リモートダイレクトメモリアクセスにより通信する。クライアント2とサーバ3との間で行われるリモートダイレクトメモリアクセスによる通信は、Infiniband、RoCE、iWARP等により実現され得る。
【0065】
クライアント2は、CPU21と、DRAM22と、ネットワーク装置23と、を備える。クライアント2に含まれる各部21~23は、例えばバスによって相互接続されている。
【0066】
サーバ3は、ネットワーク装置31と、DRAM32と、ストレージデバイス33と、CPU34と、を備える。ネットワーク装置31、DRAM32およびCPU34は、ストレージデバイス33のホストとして機能する。サーバ3に含まれる各部31~34は、例えばバスによって相互接続されている。上記したホストとストレージデバイス33とを相互接続するためのインタフェースとしては、PCIeやNVMeが使用されてもよい。
【0067】
まず、クライアント2の構成について説明する。
CPU21は、サーバ3への要求を含むサブミッションキューエントリSQEを生成する。サブミッションキューエントリSQEには、各種コマンドが含まれる。本実施形態では、各種コマンドの一つとしてリードコマンドが含まれる場合を説明する。
【0068】
リードコマンドは、データ(リードデータ)をサーバ3から読み出すためのコマンドであり、クライアントDRAMアドレス、サーバDRAMアドレス、リードデータのサイズ、ストレージアドレス、等を含む。クライアントDRAMアドレスは、クライアント2に含まれるDRAM22のアドレスを示し、サーバ3から転送されるリードデータが格納されるDRAM22内の位置を示している。サーバDRAMアドレスは、サーバ3に含まれるDRAM32のアドレスを示し、クライアント2に転送されるリードデータが一時的に格納されるDRAM32内の位置を示している。ストレージアドレスは、サーバ3に含まれるストレージデバイス33のアドレスを示し、クライアント2に転送されるリードデータが格納されているストレージデバイス33内の位置を示している。
【0069】
DRAM22は、CPU21により生成されたサブミッションキューエントリSQEと、当該サブミッションキューエントリSQEに含まれるリードコマンドによりサーバ3から読み出された(転送された)リードデータRDとを格納する。
【0070】
ネットワーク装置23は、リモートダイレクトメモリアクセスによりサーバ3と通信し、サーバ3に対してサブミッションキューエントリSQEをRDMA転送する。また、ネットワーク装置23は、サーバ3と通信し、サーバ3から転送されて来るリードデータRDを受信する。
【0071】
次に、サーバ3の構成について説明する。
ネットワーク装置31は、リモートダイレクトメモリアクセスによりクライアント2と通信し、クライアント2からRDMA転送されて来るサブミッションキューエントリSQEを受信する。受信されたサブミッションキューエントリSQEは、DRAM32内のストレージサブミッションキューSSQに格納される。
また、ネットワーク装置31は、クライアント2と通信し、クライアント2に対してリードデータRDを転送する。
【0072】
DRAM32は、ストレージサブミッションキューSSQを含む。ストレージサブミッションキューSSQは、複数の管理単位の記憶領域を有している。ストレージサブミッションキューSSQには、クライアント2からRDMA転送されたサブミッションキューエントリSQEが格納される。また、DRAM32には、クライアント2からRDMA転送されたサブミッションキューエントリSQEに含まれるリードコマンドによりストレージデバイス33から読み出されたリードデータRDが格納される。
【0073】
ストレージデバイス33はSQ監視機構33Aを含む。SQ監視機構33Aは、DRAM32内のストレージサブミッションキューSSQを周期的にポーリングし、ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたか否かを監視する。ポーリングの結果、新たなサブミッションキューSQEが格納されたことを検知すると、SQ監視機構33Aは、当該新たなサブミッションキューエントリSQEに含まれるリードコマンドをフェッチし、当該リードコマンドに基づいたリード処理を実行する。なお、ポーリングの方法については、上記した実施形態1-A~実施形態1-Eにおいて既に説明したため、ここではその詳しい説明は省略する。
【0074】
CPU34は、ストレージデバイス33によってフェッチされたリードコマンドにより示されるクライアントDRAMアドレスを取得する。CPU34は、ストレージデバイス33から読み出されたリードデータRDを、クライアント2に転送するための指示をネットワーク装置31に出力する。ここで、ネットワーク装置31に出力される指示は、例えば、リードデータRDが格納されているDRAM32上の位置を示すサーバDRAMアドレスと、クライアントDRAMアドレスとを含む。
ネットワーク装置31は、CPU34からの指示にしたがって、リードデータRDをクライアント2に対して転送する。
【0075】
なお、リードデータRDは、リモートダイレクトメモリアクセスによりRDMA転送されてもよいし、RDMA転送とは異なる任意の転送方法で転送されても構わない。
【0076】
以下では、上記のような構成を備える実施形態2-Aに係るネットワークストレージシステム1Fによって実行されるリード処理について説明する。
【0077】
図8は、実施形態2-Aに係るネットワークストレージシステム1Fによって実行されるリード処理の一例を示すシーケンスチャートである。なお、ここでは、サーバ3のストレージデバイス33には、クライアント2に転送されるべきリードデータRDが格納されているものとする。また、ここでは、サーバ3のストレージデバイス33に含まれるSQ監視機構33Aが、DRAM32内のストレージサブミッションキューSSQを周期的にポーリングして、新たなサブミッションキューエントリSQEが格納されたか否かの監視を行っているものとする。
【0078】
まず、クライアント2のCPU21は、サーバ3からデータを読み出すためのリードコマンドを含むサブミッションキューエントリSQEを生成し(ステップS21)、生成されたサブミッションキューエントリSQEをDRAM22に格納する(ステップS22)。
【0079】
続いて、CPU21は、生成されたサブミッションキューエントリSQEを、サーバ3にRDMA転送するための第3転送指示をネットワーク装置23に出力する(ステップS23)。ここで、ネットワーク装置23に出力される第3転送指示は、例えば、サブミッションキューエントリSQEが格納されているDRAM22上の位置を示すDRAMアドレスを含む。
ネットワーク装置23は、CPU21からの第3転送指示を受けると、サブミッションキューエントリSQEをサーバ3に対してRDMA転送する(ステップS24)。
【0080】
サーバ3のネットワーク装置31は、クライアント2からRDMA転送されたサブミッションキューエントリSQEを受信すると、受信されたサブミッションキューエントリSQEを、DRAM32内のストレージサブミッションキューSSQに格納する(ステップS25)。
【0081】
以降のタイミングにおいて、ストレージデバイス33のSQ監視機構33Aによりポーリングが実行されると、SQ監視機構33Aは、DRAM32内のストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたことを検知する(ステップS26)。
【0082】
SQ監視機構33Aは、新たなサブミッションキューエントリSQEが格納されたことを検知すると、当該新たなサブミッションキューエントリSQEに含まれるリードコマンドに基づいた動作(つまり、リード処理)を実行する。具体的には、まず、SQ監視機構33Aは、上記したリードコマンドに含まれるストレージアドレスに基づいて、ストレージデバイス33に格納されているリードデータRDを読み出す(ステップS27)。その後、SQ監視機構33Aは、DRAM32内の記憶領域のうち、上記したリードコマンドに含まれるサーバDRAMアドレスにより指定される位置に、読み出されたリードデータRDを格納する(ステップS28)。
【0083】
CPU34は、DRAM32にリードデータRDが格納されたことを検知すると、上記したリードコマンドにより示されるクライアントDRAMアドレスを取得する。CPU34は、DRAM32に格納されているリードデータRDをクライアント2に転送するための第4転送指示をネットワーク装置31に出力する(ステップS29)。ここで、ネットワーク装置31に出力される第4転送指示は、例えば、リードデータRDが格納されているDRAM32上の位置を示すサーバDRAMアドレスと、クライアントDRAMアドレスとを含む。
ネットワーク装置31は、CPU34からの第4転送指示を受けると、リードデータRDをクライアント2に対して転送する(ステップS30)。
【0084】
クライアント2のネットワーク装置23は、サーバ3のネットワーク装置31から転送されたリードデータRDを受信すると、DRAM22内の記憶領域のうち、ネットワーク装置31によって指定された転送先メモリアドレス(ここではクライアントDRAMアドレス)により示された位置に、受信されたリードデータRDを格納し(ステップS31)、ここでの一連のリード処理を終了させる。
【0085】
なお、DRAM32にリードデータRDが格納されたことを検知する方法(換言すると、ストレージデバイス33によるリードコマンドに基づいた動作の完了を検知する方法)は、リードコマンドに基づいた動作の完了を示すコンプリーション情報が格納されるコンプリーションキューをポーリングして検知すること、ドアベルテールレジスタに格納されるCQテールの値の更新を検知すること、割り込みを検知すること等、既存のいずれかの方法を使用して実現される。
【0086】
以上説明した実施形態2-Aにおいて、ネットワークストレージシステム1Fは、リモートダイレクトメモリアクセスによりサーバ3と通信し、サーバ3に対してリードコマンドを含むサブミッションキューエントリSQEをRDMA転送する、クライアント2を備えている。また、ネットワークストレージシステム1Fは、クライアント2からRDMA転送されて来るサブミッションキューエントリSQEを格納するストレージサブミッションキューSSQを含むDRAM32と、当該ストレージサブミッションキューSSQに新たなサブミッションキューエントリSQEが格納されたか否かを周期的なポーリングにより監視するSQ監視機構33Aとを含む、サーバ3を備えている。
【0087】
これによれば、サーバ3は、リモートダイレクトメモリアクセスによりRDMA転送されて来るサブミッションキューエントリSQEがストレージサブミッションキューSSQに格納されたことをポーリングにより検知し、当該検知を契機にして、当該サブミッションキューエントリSQEに含まれるリードコマンドに基づいたリード処理を実行することが可能である。このため、通常であれば必要である、ストレージサブミッションキューSSQにサブミッションキューエントリSQEが格納された際に行われるドアベルテールレジスタを更新する処理を省略することが可能となり、レイテンシを削減することが可能である。
【0088】
また、サーバ3において実行されるリードコマンドを含むサブミッションキューエントリSQEは、クライアント2によりリモートで生成され、サーバ3は、RDMA転送されて来るサブミッションキューエントリSQEに含まれるリードコマンドに基づいたリード処理を実行すればよいので、クライアント2から送信されて来るリクエストコマンドをサーバ3用に変更し、サーバ3用のリクエストコマンドを生成するといったCPU処理を省略することが可能である。つまり、サーバ3のCPU34によるCPU処理を削減することが可能である。
【0089】
なお、上記した実施形態1-A~実施形態1-Eと同様に、ネットワークストレージシステム1Fに含まれるクライアント2のネットワーク装置23と、サーバ3のネットワーク装置31は共に、NVMeoFを解釈可能な機能を有さない標準的なrNICで構築されてもよいし、NVMeoFを解釈可能な機能を有するrNICで構築されるとしても構わない。
【0090】
(実施形態2-B)
次に、実施形態2-Bについて説明する。
図9は、実施形態2-Bに係るネットワークストレージシステム1Gの概略構成例を示す図である。実施形態2-Bは、
図9に示すように、クライアント2のDRAM22が、クライアントDRAMアドレスを格納するレシービングキューRQを含む一方で、サブミッションキューエントリSQEからクライアントDRAMアドレスが省略されている点で、上記した実施形態2-Aと相違している。なお、以下では、上記した実施形態2-Aと相違する点のみを説明し、上記した実施形態2-Aと同様な点についての説明は省略する。
【0091】
クライアント2のネットワーク装置23は、サーバ3から転送されたリードデータRDを受信すると、DRAM22内のレシービングキューRQに格納されたクライアントDRAMアドレスにより指定された位置に、受信されたリードデータRDを格納する。
【0092】
以上説明した実施形態2-Bによれば、クライアント2のDRAM22が、クライアントDRAMアドレスを格納可能なレシービングキューRQを含むことにより、サブミッションキューエントリSQEからクライアントDRAMアドレスを省略することが可能となり、クライアント2からサーバ3へのクライアントDRAMアドレスの転送を省略することが可能となる。これによれば、サブミッションキューエントリSQEのデータ量を削減することができるため、レイテンシをさらに削減することが可能である。
【0093】
なお、サーバ3において実行されるリードコマンドを含むサブミッションキューエントリSQEが、クライアント2によりリモートで生成され、サーバ3は、RDMA転送されて来るサブミッションキューエントリSQEに含まれるリードコマンドに基づいたリード処理を実行すればよい点に変わりはないため、上記した実施形態2-Aと同様に、サーバ3のCPU34によるCPU処理を削減することが可能である。
【0094】
(実施形態2-C)
続いて、実施形態2-Cについて説明する。
図10は、実施形態2-Cに係るネットワークストレージシステム1Hの概略構成例を示す図である。実施形態2-Cは、
図10に示すように、サーバ3のストレージデバイス33が第1DRAMアドレス保持部33Dを含み、かつ、サーバ3のDRAM32が第2DRAMアドレス保持部32Aを含む一方で、サブミッションキューエントリSQEからサーバDRAMアドレスが省略されている点で、上記した実施形態2-Aと相違している。第1DRAMアドレス保持部33Dと第2DRAMアドレス保持部32Aとには、ストレージデバイス33から読み出されたリードデータRDが格納されるべきDRAM32内の位置を示すサーバDRAMアドレスが保持される。なお、第1DRAMアドレス保持部33Dと第2DRAMアドレス保持部32Aとは、同じ値のサーバDRAMアドレスを保持するように初期化される。
【0095】
サーバ3のストレージデバイス33は、クライアント2からサーバ3に最初にRDMA転送されたサブミッションキューエントリSQEがストレージサブミッションキューSSQに格納されたことを検知すると、当該サブミッションキューエントリSQEに含まれるストレージアドレスに格納されているリードデータRDを読み出す。ストレージデバイス33は、読み出されたリードデータRDを、DRAM32内の記憶領域のうち、第1DRAMアドレス保持部33Dにより保持されるサーバDRAMアドレス(初期値)により指定された位置に格納する。なお、ストレージデバイス33は、最初のサブミッションキューエントリSQEに含まれるリードデータRDのサイズを、第1DRAMアドレス保持部33Dにおいて保持されるサーバDRAMアドレスに足すことにより、次にRDMA転送されて来るサブミッションキューエントリSQEに対応するリードデータRDが格納されるべきDRAM32内の位置を示すサーバDRAMアドレスを生成する。生成されたサーバDRAMアドレスは、第1DRAMアドレス保持部33Dに保持されているサーバDRAMアドレスを更新することにより保持される。
【0096】
CPU34は、最初のサブミッションキューエントリSQEに対応するリードデータRDがDRAM32に格納されたことを検知すると、第2DRAMアドレス保持部32Aにより保持されるサーバDRAMアドレス(初期値)により指定された位置に格納されているリードデータRDをクライアント2に転送するための指示をネットワーク装置31に出力する。なお、CPU34は、最初のサブミッションキューエントリSQEに含まれるリードデータRDのサイズを、第2DRAMアドレス保持部32Aにおいて保持されるサーバDRAMアドレスに足すことにより、次にRDMA転送されて来るサブミッションキューエントリSQEに対応するリードデータRDが格納されるべきDRAM32内の位置を示すサーバDRAMアドレスを生成する。生成されたサーバDRAMアドレスは、第2DRAMアドレス保持部32Aに保持されているサーバDRAMアドレスを更新することにより保持される。
【0097】
サーバ3のストレージデバイス33は、2番目以降にRDMA転送されて来るサブミッションキューエントリSQEに対応するリードデータRDが読み出された場合も同様に動作して、第1DRAMアドレス保持部33Dにおいて保持されるサーバDRAMアドレスを更新する。また、CPU34も同様に、2番目以降にRDMA転送されて来るサブミッションキューエントリSQEに対応するリードデータRDが読み出された場合も同様に動作して、第2DRAMアドレス保持部32Aにおいて保持されるサーバDRAMアドレスを更新する。これによれば、第1DRAMアドレス保持部33Dにおいて保持されるサーバDRAMアドレスと、第2DRAMアドレス保持部32Aにおいて保持されるサーバDRAMアドレスとを、常に同じ値にすることが可能である。
【0098】
以上説明した実施形態2-Cによれば、サーバ3は、第1DRAMアドレス保持部33Dと第2DRAMアドレス保持部32Aとに保持されるサーバDRAMアドレスと、受信されたサブミッションキューエントリSQEに含まれるリードデータRDのサイズとに基づいて、次にRDMA転送されて来るサブミッションキューエントリSQEに対応するリードデータRDのサーバDRAMアドレスを特定することが可能である。このため、サブミッションキューエントリSQEからサーバDRAMアドレスの転送を省略することが可能となり、クライアント2からサーバ3へのサーバDRAMアドレスの転送を省略することが可能となる。これによれば、サブミッションキューエントリSQEのデータ量を削減することができるため、レイテンシをさらに削減することが可能である。
【0099】
なお、サーバ3において実行されるリードコマンドを含むサブミッションキューエントリSQEが、クライアント2によりリモートで生成され、サーバ3は、RDMA転送されて来るサブミッションキューエントリSQEに含まれるリードコマンドに基づいたリード処理を実行すればよい点に変わりはないため、上記した実施形態2-Aと同様に、サーバ3のCPU34によるCPU処理を削減することが可能である。
【0100】
以上説明した実施形態2-A~実施形態2-Cによれば、サーバ3に格納されているデータを効率よくクライアント2に転送することが可能なネットワークストレージシステム1を実現させることが可能である。
【0101】
以上説明した少なくとも一つの実施形態において、ネットワークストレージシステム1は、リモートダイレクトメモリアクセスによりRDMA転送されて来るサブミッションキューエントリSQEがストレージサブミッションキューSSQに格納されたことをポーリングにより検知し、当該検知を契機にして、当該サブミッションキューエントリSQEに含まれるコマンドに基づいた処理を実行することが可能なサーバ3を備えている。これによれば、クライアント2とサーバ(ストレージシステム)3との間の通信を効率化することが可能なネットワークストレージシステム1を実現させることが可能である。
【0102】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0103】
1…ネットワークストレージシステム
2…クライアント
3…サーバ(ストレージシステム)
21…CPU、22…DRAM、23…ネットワーク装置(rNIC)
31…ネットワーク装置、32…DRAM、33…ストレージデバイス、33A…SQ監視機構、34…CPU
SQE…サブミッションキューエントリ、SSQ…ストレージサブミッションキュー、WD…ライトデータ。