(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023010314
(43)【公開日】2023-01-20
(54)【発明の名称】ストレージシステム、データ書き込み制御方法、及びデータ書き込み制御プログラム
(51)【国際特許分類】
G06F 3/06 20060101AFI20230113BHJP
G06F 13/10 20060101ALI20230113BHJP
【FI】
G06F3/06 304B
G06F3/06 301X
G06F13/10 340A
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021114367
(22)【出願日】2021-07-09
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】特許業務法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】小林 佑太朗
(72)【発明者】
【氏名】田中 勝也
(72)【発明者】
【氏名】福田 秀明
(72)【発明者】
【氏名】村山 佳和
(57)【要約】
【課題】マルチノードの通信にRoCEを採用したストレージシステムにおいて、コントローラのプロセッサ及びメモリと通信インタフェースとの間の消費帯域を削減する。
【解決手段】各ストレージコントローラは、第1の記憶部と、インタフェース部と、n(nは2以上の自然数)個の他ストレージコントローラのそれぞれにデータを書き込むn重ライトを指示するパラメータをインタフェース部へ送信する処理部とを備える。インタフェース部は、パラメータを受信すると、第1の記憶部からデータを取得して第2の記憶部に格納し、n個の他ストレージコントローラのそれぞれにデータを書き込むn個のリクエストを生成してn個の他ストレージコントローラのそれぞれに対応するn個のキューに格納し、各キューに格納された各リクエストを処理して第2の記憶部に格納されているデータをn個の他ストレージコントローラのそれぞれへデータ転送する各処理を実行する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
複数のストレージコントローラを含んで構成されるストレージシステムにおいて、
各ストレージコントローラは、
データを格納する第1の記憶部と、
他ストレージコントローラと通信を行う際のインタフェースとして機能するインタフェース部と、
n(nは2以上の自然数)個の前記他ストレージコントローラのそれぞれに前記データを書き込むn重ライトを指示するパラメータを前記インタフェース部へ送信する処理部と、を備え、
前記インタフェース部は、
第2の記憶部と、n個のキューと、を備え、
前記パラメータを受信すると、
前記第1の記憶部から前記データを取得して前記第2の記憶部に格納し、
n個の前記他ストレージコントローラのそれぞれに前記データを書き込むn個のリクエストを生成し、
生成した各リクエストをn個の前記他ストレージコントローラのそれぞれに対応するn個の前記キューに格納し、
各キューに格納された各リクエストを処理して前記第2の記憶部に格納されている前記データをn個の前記他ストレージコントローラのそれぞれへデータ転送する
各処理を実行することを特徴とするストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記インタフェース部は、
受信した前記パラメータが、
自ストレージコントローラの前記第1の記憶部に格納されている前記データのn重ライトを指示する場合には、前記各処理を実行し、
他ストレージコントローラの前記第1の記憶部に格納されている前記データのn重ライトを指示する場合には、前記パラメータを他ストレージコントローラへ転送する
ことを特徴とするストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
前記インタフェース部は、
各キューに格納された各リクエストを非同期に処理して、前記第2の記憶部に格納されている前記データをn個の前記他ストレージコントローラのそれぞれへデータ転送し、
前記第2の記憶部に格納されている前記データ単位で各リクエストに関するデータ転送の状況を管理する
ことを特徴とするストレージシステム。
【請求項4】
請求項3に記載のストレージシステムであって、
前記インタフェース部は、
前記第2の記憶部に格納されている前記データ単位で全てのリクエストに関するデータ転送が完了した場合に、データ転送完了を前記パラメータの送信元の前記処理部へ通知する
ことを特徴とするストレージシステム。
【請求項5】
請求項4に記載のストレージシステムであって、
前記インタフェース部は、
前記データ転送完了と共に、各リクエストに関するデータ転送の成否及びデータ転送失敗の場合の失敗要因を前記処理部へ通知する
ことを特徴とするストレージシステム。
【請求項6】
請求項3に記載のストレージシステムであって、
前記第2の記憶部に格納されている前記データ単位で全てのリクエストに関するデータ転送が完了した場合に、前記第2の記憶部に格納されている前記データを消去する
ことを特徴とするストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
前記インタフェース部は、
前記第1の記憶部に格納されている前記データを格納する空き容量が前記第2の記憶部にない場合に、n個の前記他ストレージコントローラへのデータ転送毎に前記データを前記第1の記憶部から取得する
ことを特徴とするストレージシステム。
【請求項8】
請求項1に記載のストレージシステムであって、
前記インタフェース部は、
前記第1の記憶部に格納されている前記データを取得して前記第2の記憶部に格納する際、前記データのサイズが前記第2の記憶部の空き容量よりも大きい場合に、前記第2の記憶部に格納可能なサイズへ前記データを分割した分割データを前記第2の記憶部に格納し、
n個の前記他ストレージコントローラのそれぞれに前記分割データを書き込むn個の分割リクエストを生成し、
生成した各分割リクエストをn個の前記他ストレージコントローラにそれぞれ対応するn個の前記キューに格納し、
各キューに格納された各分割リクエストを処理して、前記第2の記憶部に格納されている前記分割データをn個の前記他ストレージコントローラのそれぞれへデータ転送する
各処理を全ての前記分割データについて実行することを特徴とするストレージシステム。
【請求項9】
複数のストレージコントローラを含んで構成されるストレージシステムにおけるデータ書き込み制御方法において、
各ストレージコントローラは、
データを格納する第1の記憶部と、
他ストレージコントローラと通信を行う際のインタフェースとして機能するインタフェース部と、
処理部と、を備え、
前記インタフェース部は、
第2の記憶部と、n個のキューと、を備え、
前記処理部が、
n(nは2以上の自然数)個の前記他ストレージコントローラのそれぞれに前記データを書き込むn重ライトを指示するパラメータを前記インタフェース部へ送信し、
前記インタフェース部が、
前記パラメータを受信すると、
前記第1の記憶部から前記データを取得して前記第2の記憶部に格納し、
n個の前記他ストレージコントローラのそれぞれに前記データを書き込むn個のリクエストを生成し、
生成した各リクエストをn個の前記他ストレージコントローラのそれぞれに対応するn個の前記キューに格納し、
各キューに格納された各リクエストを処理して前記第2の記憶部に格納されている前記データをn個の前記他ストレージコントローラのそれぞれへデータ転送する
各処理を実行することを特徴とするデータ書き込み制御方法。
【請求項10】
プロセッサを、請求項1~8の何れか1項に記載のストレージシステムが備えるインタフェース部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム、データ書き込み制御方法、及びデータ書き込み制御プログラムに関する。
【背景技術】
【0002】
従来から、複数のストレージ及びストレージコントローラを接続して、ホストに対して1つのストレージシステムに見せるマルチノードシステムがある。マルチノードシステムは、顧客のニーズに合わせて性能や容量を決めることができ、多重化により可用性を高められる点で、ストレージアーキテクチャとして優れている。
【0003】
ここでマルチノードシステムにおいて、ストレージコントローラ間でユーザデータを効率よく二重化する方法が求められる。例えば特許文献1に開示のストレージシステムでは、第1のコントローラが、ホストから転送されてきたライトデータを第2のコントローラのスイッチインタフェースのデータバッファに直接書き込む。そして、このデータバッファから第2及び第3のコントローラの各メモリにDMA(Direct Memory Access)によってライトデータが書き込まれることで、ユーザデータの二重化(2つのコントローラへの「二重ライト」)を実現している。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ノード間の接続をイーサネット(Ethernet、登録商標、以下同様)化する際にRoCE(RDMA(Remote Direct Memory Access) over Converged Ethernet)を採用したマルチノードシステムの場合、二重ライトに関して次の問題がある。
【0006】
すなわち二重ライトの際、転送元のコントローラにおいて、転送先の各コントローラに対応するQP(Queue Pair)の送信キューであるSQ(Send Queue)に、RDMAのリクエストであるWR(Work Request)を格納する必要がある。SQに格納されたWRはWQE(Work Queue Element)と呼ばれる。DMAによるデータ転送のために、転送先の各コントローラのQPに対応する2つのSQに格納されているWQEが処理されると、マルチノードのインタフェースと転送元のコントローラのメモリとの間で2回のアクセスが実行される。このために、転送元のコントローラにおいて、プロセッサ及びメモリと、マルチノードのインタフェース(例えばFPGA(Field Programmable Gate Array)等で構成される)との間の帯域が圧迫され、ストレージシステム性能に影響する可能性がある。
【0007】
本発明は、上述の課題に鑑みてなされたものであり、マルチノードの通信にRoCEを採用したストレージシステムにおいて、コントローラのプロセッサ及びメモリと通信インタフェースとの間の消費帯域を削減することを1つの目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決するため、本発明の一態様では、複数のストレージコントローラを含んで構成されるストレージシステムにおいて、各ストレージコントローラは、データを格納する第1の記憶部と、他ストレージコントローラと通信を行う際のインタフェースとして機能するインタフェース部と、n(nは2以上の自然数)個の前記他ストレージコントローラのそれぞれに前記データを書き込むn重ライトを指示するパラメータを前記インタフェース部へ送信する処理部と、を備え、前記インタフェース部は、第2の記憶部と、n個のキューと、を備え、前記パラメータを受信すると、前記第1の記憶部から前記データを取得して前記第2の記憶部に格納し、n個の前記他ストレージコントローラのそれぞれに前記データを書き込むn個のリクエストを生成し、生成した各リクエストをn個の前記他ストレージコントローラのそれぞれに対応するn個の前記キューに格納し、各キューに格納された各リクエストを処理して前記第2の記憶部に格納されている前記データをn個の前記他ストレージコントローラのそれぞれへデータ転送する各処理を実行することを特徴とする。
【発明の効果】
【0009】
本発明によれば、例えば、マルチノードの通信にRoCEを採用したストレージシステムにおいて、コントローラのプロセッサ及びメモリと通信インタフェースとの間の消費帯域を削減できる。
【図面の簡単な説明】
【0010】
【
図1】実施形態1に係るストレージシステムの構成例を示すブロック図。
【
図2】実施形態1に係るストレージコントローラの構成例を示す図。
【
図3】実施形態1に係る各種データのフォーマット例を示す図。
【
図4】実施形態1に係る管理テーブルの構成例を示す図。
【
図5】実施形態1に係る転送動作(二重ライト開始からWQE生成まで)を示すシーケンス図。
【
図6】実施形態1に係る転送動作(DMA転送から二重ライト完了判定まで)を示すシーケンス図。
【
図7】実施形態1に係る転送動作(二重ライト完了判定から二重ライト完了まで)を示すシーケンス図。
【
図8】従来技術による二重ライト処理を説明するための図。
【
図9】実施形態1による二重ライト処理を説明するための図。
【
図10】実施形態2に係る転送動作(二重ライト開始からWQE生成まで)を示すシーケンス図。
【
図11】実施形態2に係る転送動作(DMA転送から二重ライト完了判定まで)を示すシーケンス図。
【
図12】実施形態2に係る転送動作(二重ライト完了判定から二重ライト完了まで)を示すシーケンス図。
【発明を実施するための形態】
【0011】
以下、図面を参照して本発明の実施形態を説明する。実施形態は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略及び簡略化がなされている。本発明は、他の種々の形態や各形態の一部又は全部を組合せた形態でも実施することが可能である。特に限定しない限り、各構成要素は単数でも複数でもよい。
【0012】
同一あるいは同様の機能を有する構成要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。またこれらの複数の構成要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【0013】
[実施形態1]
(実施形態1のストレージシステム1の構成)
図1は、実施形態1に係るストレージシステム1の構成例を示すブロック図である。ストレージシステム1は、例えば、イーサネットスイッチ2を介して双方向通信可能に接続された複数のストレージコントローラ3A(CTL0),3B(CTL1),3C(CTL2),3D(CTL3)を備えて構成される。
図1では、4台のストレージコントローラ3A~3Dによりクラスタ(ストレージシステム1)が構成されている例を示しているが、クラスタ(ストレージシステム1)を構成するストレージコントローラの台数は4に限らない。以下においては、ストレージコントローラ3A~3Dを区別しない場合、ストレージコントローラ3と呼ぶ。
【0014】
各ストレージコントローラ3は、それぞれ通信ネットワーク4A~4Dを介してホスト5A~5Dと双方向通信可能に接続される。なお、通信ネットワーク4A~4Dの少なくとも一部は共通してもよく、通信ネットワーク4A~4Dの全てが同一通信ネットワークであってもよい。同様に、ホスト5A~5Dの少なくとも一部は共通してもよく、ホスト5A~5Dの全てが同一のホストであってもよい。以下においては、通信ネットワーク4A~4Dを特に区別しない場合には、これらをまとめて通信ネットワーク4と呼び、ホスト5A~5Dを特に区別しない場合には、これらをまとめてホスト5と呼ぶ。
【0015】
ホスト5は、ユーザ操作又は実装されたアプリケーションソフトウェアに基づいて、通信ネットワーク4を介してストレージコントローラ3にリードコマンドやライトコマンドを送信するコンピュータ装置であり、メインフレーム又はオープン系サーバなどから構成される。ホスト5がメインフレームの場合、ホスト5及びストレージコントローラ3間の通信は、例えば、FICON(Fibre Connection:登録商標)、ESCON(Enterprise System Connection:登録商標)、ACONARC(Advanced Connection Architecture:登録商標)、FIBARC(Fibre Connection Architecture:登録商標)等の通信プロトコルに従って行われる。またホスト5がオープン系サーバの場合、ホスト5及びストレージコントローラ3間の通信は、例えば、FC(Fibre Channel)、TCP/IP(Transmission Control Protocol/Internet Protocol)、iSCSI(Internet Small Computer System Interface)のような通信プロトコルに従って行われる。
【0016】
各ストレージコントローラ3A~3Dには、それぞれ1又は複数の記憶デバイス6から構成される記憶装置7A~7Dが接続される。以下においては、記憶装置7A~7Dを特に区別しない場合には、これらをまとめて記憶装置7と呼ぶ。なお
図1では、個々のストレージコントローラ3A~3Dに対してそれぞれ個別の記憶装置7A~7Dが接続されている場合について例示しているが、一部又は全部のストレージコントローラ3A~3Dが同一の記憶装置7A~7Dに接続されている構成であってもよい。1つのストレージコントローラ3と、1つの記憶装置7とによって1つのストレージ装置が構築される。
【0017】
記憶デバイス6は、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス又は光磁気ディスクデバイスなどから構成される。記憶デバイス6としてハードディスクデバイスを用いる場合、FC(Fibre Channel)ディスク、SCSI(Small Computer System Interface)ディスク、SATAディスク、ATA(AT Attachment)ディスク、SAS(Serial Attached SCSI)ディスク等を用いることができる。また例えば、フラッシュメモリ(SSD:Solid State Drive)、MRAM(Magnetoresistive Random Access Memory)、相変化メモリ(Phase-Change Memory)、ReRAM(Resistive random-access memory)、FeRAM(Ferroelectric Random Access Memory)等の種々の記憶デバイス6を用いることもできる。さらに、例えば、種類の異なる記憶デバイスを記憶装置7内に混在させる構成でもよい。
【0018】
1又は複数の記憶デバイス6が提供する記憶領域がプールとして管理され、プール上に1又は複数の論理的なボリューム(以下、論理ボリュームと呼ぶ)が定義され、データを読み書きするための記憶領域としてホスト5に提供される。論理ボリューム内の記憶領域は、論理ブロックと呼ばれる所定大きさの小領域に区分されて管理され、これら論理ブロックにLBA(Logical Block Address)と呼ばれる固有のアドレスがそれぞれ付与される。そしてホストは、論理ボリュームにデータをリード/ライトする場合、その論理ボリュームの識別子(LUN:Logical Unit Number)と、その論理ボリューム内のデータを読み書きする領域の最初の論理ブロックのLBAと、リード/ライトすべきデータのデータ長とを指定したリードコマンドやライトコマンドをストレージコントローラ3に送信する。
【0019】
ストレージコントローラ3は、それぞれ1又は複数のCPU20、メモリ21、フロントエンド22、バックエンド23及びスイッチインタフェース24を備えて構成される。
【0020】
CPU20は、ストレージコントローラ3全体の動作制御を司るプロセッサである。またメモリ21は、例えば、DIMM(Dual Inline Memory Module)などの半導体メモリ若しくはハードディスク装置又はこれら双方から構成され、各種プログラムやデータを保持するために利用される。
【0021】
フロントエンド22は、通信ネットワーク4を介したホスト5との通信時におけるプロトコル変換を行うインタフェース装置である。フロントエンド22は、CPU20の制御に基づいて、ホスト5との間でコマンドやデータを送受信する。
【0022】
バックエンド23は、記憶装置7にデータを入出力するためのインタフェース装置である。CPU20は、ホスト5からの要求に応じて、バックエンド23を介して、指定された論理ボリュームの記憶領域を提供する記憶デバイス6にデータをリード/ライトする。
【0023】
スイッチインタフェース24は、イーサネットスイッチ2を介してRoCE(RDMA over Converged Ethernet)を用いて他のストレージコントローラ3と双方向通信する装置である。RoCEは、Converged Ethernetと呼ばれる信頼性を高めた、イーサネット上でRDMA(Remote Direct Memory Access)を実現するためのプロトコルである。スイッチインタフェース24の詳細については、
図2を参照して後述する。スイッチインタフェース24は、イーサネットスイッチ2を介して他のストレージコントローラ3内のスイッチインタフェース24と接続される。
【0024】
(ストレージコントローラ3の構成)
図2は、実施形態1に係るストレージコントローラ3の構成例を示す図である。
図2では、データのライトに関する機能について主に説明し、データのリードに関する機能については説明を省略する。
図2は、ストレージコントローラ3A(CTL0)が保持するデータをストレージコントローラ3B(CTL1),3C(CTL2)に二重ライトを行う例を説明する。ストレージコントローラ3の構成及び処理は、ストレージコントローラ3A~3Dの何れも同様である。
図2では、ホスト5、フロントエンド22、バックエンド23、及び記憶デバイス6の図示を省略している。また
図2では、CPU20の複数図示を省略している。
【0025】
CPU20は、複数のマイクロプロセッサ(MP(Micro Processor)、不図示)を含む。CPU20は、内蔵する各MPのうちいずれかのMPにコマンド処理などを割り当てる。CPU20は、複数のコマンドを並行処理することができる。CPU20が担当する処理は、実際にはいずれかのMPが実行しているが、CPU20とMPとを厳密に区別する必要はない。CPU20は、二重ライトパラメータ27を指定してスイッチインタフェース24に対してメモリ21上のデータ26の二重ライトを指示する。
【0026】
メモリ21の記憶領域は、例えば、CPU20に提供する作業領域と、受信したホスト5や他のストレージコントローラ3からのデータを保持するキャッシュ領域と、各MPが使用するテーブルを格納する管理情報領域と、各MPが実行するコンピュータプログラムを格納するプログラム領域とに区分されて管理される。ただし領域ごとにメモリ21を用意する構成でもよい。
図2では、メモリ21に、二重ライト対象のデータ26が格納されている。
【0027】
プログラム領域には、例えば、オペレーティングシステム(不図示)やドライバソフトウェア、マイクロプログラムなどが格納される。各MPは、このマイクロプログラムに基づいて、各種の処理を実行する。ドライバソフトウェアには、CPU20により読み出されて実行されることでCPU20上でI/Fドライバ20dを実現するドライバソフトウェアがある。
【0028】
スイッチインタフェース24は、RoCEを採用したイーサネットを用いて他のストレージコントローラ3と通信を行うためのインタフェースユニット25を有する。インタフェースユニット25は、FPGA(Field Programmable Gate Array)等のPLD(Programmable Logic Device)で構成されるとするが、これに限定されない。
【0029】
インタフェースユニット25は、データライトに関する機能部として、パラメータ制御部251、パラメータキュー252、IDMA(Internal Direct Memory Access)253、バッファ254、完了制御部255、QP(Queue Pair)256,257、SQ(Send Queue)2561,2571、及びEDMA(External Direct Memory Access)258を有する。パラメータ制御部251、パラメータキュー252、及びIDMA253は、パラメータ制御ユニット251Uに含まれる。完了制御部255は、データ転送ステータス管理テーブル255T(
図4)を保持する。
【0030】
QPは、RoCE転送を行う際にデバイスが通信を行う論理的なポートであり、通信相手のデバイス同士で対をなすように保持される。QPには、相手のアドレスなどの通信に必要な情報が初期設定されている。
図2の例では、ストレージコントローラ3Aは、ストレージコントローラ3B,3Cとの間でそれぞれRoCE転送を行うため、通信相手のストレージコントローラ3B,3C毎にQPを持つ。ストレージコントローラ3Aは、ストレージコントローラ3BのQPと対をなすQP256と、ストレージコントローラ3CのQPと対をなすQP257を有する。一般的にQPは複数あり、その中からQP256,257が指定される。
【0031】
SQは、RDMAの転送リクエストを格納するキューであり、QPごとに1つ存在する。
図2の例では、QP256にSQ2561が存在し、QP257にSQ2571が存在する。SQにWR(Work Request)を格納することでデータのWrite/Readが実行される。
【0032】
WRは、RDMA転送を行う際に転送リクエストの主体によってSQに格納されるリクエストであり、本実施形態ではRDMAのパラメータである。SQに格納されたWRは、WQE(Work Queue Element)を単位として管理される。
図2では、二重ライトパラメータ(2WrParam)27に対応するストレージコントローラ3B向けのWQE2562がSQ2561に格納され、ストレージコントローラ3C向けのWQE2572がSQ2571に格納されている。
【0033】
IDMA253及びEDMA258は、OSを介さず異なるデバイスのメモリ空間に直接アクセスするRDMAによってデータのWrite/Readを実行する。IDMA253はストレージコントローラ3A内で完結するDMAを実現し、EDMA258は異なるストレージコントローラ3に対するDMAを実現する。
図2では、IDMA253及びEDMA258は分離した構成としているが、統合されていてもよい。
【0034】
パラメータ制御部251は、CPU20によってパラメータキュー252に書き込まれたメモリ21内のデータ26の二重ライトを指示する二重ライトパラメータ27を引き抜いて解読する。
図3は、実施形態1に係る各種データのフォーマット例を示す図である。
【0035】
図3の(a)に示すように、二重ライトパラメータ27は、送信元アドレス271、送信先アドレス272(#1)、送信先アドレス273(#2)、データ長274、転送オプション275、及びステータス返送先情報276を含む。
【0036】
送信元アドレス271は、二重ライトのデータ転送対象のデータ26を保持する送信元のストレージコントローラ3及びデータ26の送信元での格納位置を識別するアドレスである。送信先アドレス272,273は、データの二重ライト先の2つのストレージコントローラ3及びデータ26の送信先での格納位置を識別するアドレスである。データ長274は、二重ライト対象のデータのサイズである。転送オプション275は、T10DIF等のデータ保護コードである。ステータス返送先情報276は、二重ライトパラメータ27が対象とする二重ライト処理の進捗を示す転送完了情報STS(Status)の返送先のストレージコントローラ3及び転送完了情報STSの格納位置を識別するアドレスである。
【0037】
パラメータ制御部251は、解読した二重ライトパラメータ27の内容に従って、バッファ254の空き容量を確認する。パラメータ制御部251は、二重ライトパラメータ27のデータ長274のデータ26を格納可能なバッファ254の空き容量が存在する場合に、メモリ21に格納されているデータ26をIDMA253のDMA機能を介して読み出してバッファ254に格納する。
【0038】
IDMA253は、バッファ254にデータ26を格納完了すると、データ26のデータリード及びバッファ254への格納完了を示すデータリード完了通知28をパラメータ制御部251へ送信する。
図3の(b)に示すように、データリード完了通知28は、転送完了フラグ281及び格納先バッファアドレス282の列を有する。転送完了フラグ281はデータのリード及びバッファ格納の完了を示す情報である。格納先バッファアドレス282は、データ26を格納したバッファ254内のアドレスを示す。
【0039】
パラメータ制御部251は、バッファ254へ格納完了したデータ26に対応する二重ライトパラメータ27を用いて、二重ライト先の各ストレージコントローラ3B,3Cに対応したQP256,257のSQ2561,2571にWQE2562,2572をそれぞれ格納する。
図3の(c)に示すように、WQE2562,2572は、送信先アドレス25621、格納先バッファアドレス25622、及びデータ長25623の列を含む。WQE2562,2572の送信先アドレス25621は二重ライトパラメータ27の送信先アドレス272,273から、格納先バッファアドレス25622はデータリード完了通知28の格納先バッファアドレス282から、データ長25623は二重ライトパラメータ27のデータ長274からそれぞれ引き継がれる。
【0040】
またパラメータ制御部251は、WQE2562,2572の格納と同時に完了制御部255へ転送情報29を受け渡す。
図3の(d)に示すように、転送情報29は、格納先バッファアドレス291、QP#292、SSN(Send Sequence Number)293、ステータス返送先情報294の列を有する。格納先バッファアドレス291は、データ転送ステータス管理テーブル255Tにおいて格納先バッファアドレス282に対応する格納先バッファ#である。QP#292は、格納先バッファアドレス291のバッファに格納されているデータ26に用いられるQPの番号を示す。SSN293は、WQEの識別情報であり、1つのQP内で各WQEに一意に与えられる。ステータス返送先情報294は、完了制御部255が管理する二重ライトのステータスの返送先のストレージコントローラ3及び格納位置を識別するアドレスを含む。
【0041】
EDMA258は、QP256,257に格納されたWQE2562,2572を処理し、各ストレージコントローラ3B,3Cの各メモリ21へデータ26をDMA転送する。EDMA258は、各ストレージコントローラ3B,3Cからデータ26のDMA転送の完了応答30がそれぞれ返却されると、完了制御部255へそれぞれの完了応答30を受け渡す。
図3の(e)に示すように、完了応答30は、転送成否301及び失敗要因302の列を有する。転送成否301は、EDMA258によって実行されたQP毎のデータ転送の成否を示すフラグ情報であり、転送成功=1、転送失敗=0である。失敗要因302は、転送成否301が転送失敗=0であった場合の失敗要因を示す。
【0042】
完了制御部255は、完了応答30を受信すると、転送結果をデータ転送ステータス管理テーブル255Tに格納する。
図4は、実施形態1に係るデータ転送ステータス管理テーブル255Tの構成例を示す図である。データ転送ステータス管理テーブル255Tは、完了制御部255の内部の記憶領域に配置され、他のストレージコントローラ3への二重ライトの進捗状況を、二重ライト対象のデータ単位で管理するテーブルである。
【0043】
データ転送ステータス管理テーブル255Tは、格納位置情報255T1、返送先情報255T2、データ転送情報255T3、及びデータ転送情報255T4を含む。
【0044】
格納位置情報255T1は、バッファ#、バッファアドレス、STS返送先CTL(コントローラ)#、STS返送先アドレス、QP1#、QP1SSN、QP1完了フラグ、QP1STS、QP2#、QP2SSN、QP2完了フラグ、QP2STSを含む。バッファ#及びバッファアドレスはバッファ254におけるデータ26の格納位置を一意に示す。
【0045】
返送先情報255T2は、STS返送先CTL#及びSTS返送先アドレスを含み、STSの返送先を一意に示す。データ転送情報255T3は、二重ライトデータのうちの一方のQP1に関し、QP1#、QP1SSN、QP1完了フラグ、及びQP1STSを含む。QP1#は、二重ライトデータのうちの一方のQPの番号である。QP1SSNは、QP1内のSQに格納されているWQEの識別情報である。QP1完了フラグは、QP1に格納されているWQEに基づくデータ転送の完了未完了の別を示す。QP1STSは、QP1完了フラグ=1であればOK、それ以外はNULLである。データ転送情報255T4は、二重ライトデータのうちの他方のQP2に関し、データ転送情報255T3と同様である。
【0046】
データ転送ステータス管理テーブル255Tのバッファアドレスには、転送情報29の格納先バッファアドレス291が格納される。返送先情報255T2(STS返送先CTL#及びSTS返送先アドレス)には、ステータス返送先情報294が格納される。データ転送情報255T3のQP1#には、QP#292が格納される。QP1SSNには、SSN293が格納される。QP1STSには、転送成否301及び失敗要因302が格納される。データ転送ステータス管理テーブル255Tのデータ転送情報255T4も、データ転送情報255T3と同様の情報が格納される。
【0047】
図4に示す例では、バッファ#=0の行に係る二重ライト処理は、QP1完了フラグ及びQP2完了フラグが共に“1”でありQP1STS及びQP2STSが共に“OK”であるので、正常完了していることを表している。またバッファ#1の行に係る二重ライト処理は、QP1完了フラグが“1”でありQP1STSが“OK”であるが、QP2完了フラグが“0”でありQP2STSが“NULL(空白)”であるため、QP1側のみライト処理が正常完了しており、QP2側のライト処理の完了待ちであることを表している。またバッファ#2の行には、全ての列が“NULL(空白)”であり、バッファが空き状態であることを表している。またバッファ#3の行に係る二重ライト処理は、QP1完了フラグが“NULL(空白)”で完了待ち状態であり、QP2完了フラグが“1”であるもののQP2STSが“NG(再送失敗)”であるため、QP1側のライト処理の完了を待って、STS=二重ライト失敗であることを二重ライト依頼元のストレージコントローラ3A(CTL0)へ返却予定であることを表している。
【0048】
完了制御部255は、データ転送ステータス管理テーブル255TにQP1完了フラグ及びQP2完了フラグが格納されると、転送完了情報STSを生成し、依頼元のCPU20へSTSを送信する。転送完了情報STSは、各QPのデータ転送成否、及びデータ転送失敗の場合の失敗要因の情報を含む。
【0049】
依頼元のCPU20は、転送完了情報STSを受信すると、二重ライト完了であるので、二重ライト処理を終了する。また完了制御部255は、転送完了情報STS生成後、バッファ254に残っている転送済みのデータ26を解放する。
【0050】
なおパラメータ制御部251は、二重ライト対象のデータ26を格納可能なバッファ254の空き容量があるか否かを確認し、空きがない場合には、通常のRoCE転送へ切り替えて、メモリ21のデータ26をバッファ254に格納することなく、QP256のSQ2561にWQE2562を格納し、QP257のSQ2571にWQE2572を格納する。そして、EDMA258は、WQE2562,2572を処理してバッファ254を介さず個々にメモリ21からデータ26を直接取得し、各ストレージコントローラ3B,3Cへデータ転送する通常のRoCE転送を行う。
【0051】
以下、
図5~
図7を参照して、実施形態1に係る、ストレージコントローラ3A(CTL0)から、ストレージコントローラ3B(CTL1)及び3C(CTL2)へ同一データを二重ライトする一連の処理を説明する。
【0052】
(ストレージコントローラの動作(二重ライト開始からWQE生成まで))
図5は、実施形態に係る転送動作(二重ライト開始からWQE生成まで)を示すシーケンス図である。先ずCPU20(CTL0)は、二重ライト処理を開始する(S11)。次にCPU20(CTL0)は、ストレージコントローラ3B(CTL1)及び3C(CTL2)へデータ26を二重ライトする二重ライトパラメータ(2WrParam)27を生成し(S12)、I/Fドライバ20dに対して二重ライトパラメータ27の転送を指示する(S13)。
【0053】
次にI/Fドライバ20dは、二重ライトパラメータ27を、スイッチインタフェース24のインタフェースユニット25のパラメータ制御ユニット251Uへ転送する(S14)。二重ライトパラメータ27は、パラメータ制御ユニット251Uのパラメータキュー252へ格納される。
【0054】
次にパラメータ制御ユニット251Uのパラメータ制御部251は、パラメータキュー252に格納されている二重ライトパラメータ27を取り出して解読し、二重ライトパラメータ27に応じたリクエストを開始する(S15)。すなわちパラメータ制御部251は、バッファ254の空き容量を確認し、二重ライト対象のデータ26を格納できる空き容量がバッファ254にある場合に、ストレージコントローラ3A(CTL0)のメモリ21上のデータ26のリードを起動する(S16)。
【0055】
次にパラメータ制御ユニット251UのIDMA253は、ストレージコントローラ3A(CTL0)のメモリ21にアクセスしてデータ26を読み出し(S17)、バッファ254へ格納する(S18)。二重ライトの際のメモリ21上のデータ読み出しがS17の1回だけなので、スイッチインタフェース24とメモリ21間の帯域消費を削減できる。IDMA253は、データ26がバッファ254へ格納されると、データリード完了通知28をパラメータ制御部251へ通知する。
【0056】
次にパラメータ制御ユニット251Uのパラメータ制御部251は、データリードが完了した二重ライトパラメータ27を用いて、二重ライト先のストレージコントローラ3B(CTL1)及び3C(CTL2)のそれぞれに対応したQP256,257に格納するワークリクエスト(WQE2562,2572)を生成し(S19)、SQ2561,2672のそれぞれに格納する(S20、S21)。
【0057】
(ストレージコントローラの動作(DMA転送から二重ライト完了判定まで))
図6は、実施形態1に係る転送動作(DMA転送から二重ライト完了判定まで)を示すシーケンス図である。先ずストレージコントローラ3A(CTL0)のインタフェースユニット25のEDMA258は、SQ2561,2571からWQE2562,2572をそれぞれ非同期に読み出す(S31、S32)。以降、WQE2562に関するS31、S33、S35、S36の処理と、WQE2572に関するS32、S34、S37、S38の処理は、非同期に行われる。
【0058】
EDMA258は、バッファ254内のデータ26を読み出してストレージコントローラ3B(CTL1)へデータ転送する(S33)。同様に、EDMA258は、バッファ254内のデータ26を読み出してストレージコントローラ3C(CTL2)へデータ転送する(S34)。
【0059】
ストレージコントローラ3B(CTL1)は、自装置内のメモリ21へデータ26が格納処理されると、自ストレージコントローラへのデータ転送に関する完了応答30をストレージコントローラ3A(CTL0)のEDMA258へ返却する(S35)。EDMA258は、ストレージコントローラ3B(CTL1)から完了応答30を受信すると、完了応答30を完了制御部255へ通知する(S36)。完了制御部255は、受信した完了応答30に基づいて、該当のデータ転送に対応するQP1完了フラグ及びQP1STS、又は、QP2完了フラグ及びQP2STSに情報を格納する。
【0060】
同様に、ストレージコントローラ3C(CTL2)は、自装置内のメモリ21へデータ26が格納処理されると、自ストレージコントローラへのデータ転送に関する完了応答30をストレージコントローラ3A(CTL0)のEDMA258へ返却する(S37)。EDMA258は、ストレージコントローラ3C(CTL2)から完了応答30を受信すると、完了応答30を完了制御部255へ通知する(S38)。完了制御部255は、受信した完了応答30に基づいて、該当のデータ転送に対応するQP1完了フラグ及びQP1STS、又は、QP2完了フラグ及びQP2STSに情報を格納する。
【0061】
完了制御部255は、S36及びS38によって、ストレージコントローラ3B(CTL1)及び3C(CTL2)の各メモリ21へのデータ転送が完了したことを通知されると、データ転送ステータス管理テーブル255Tの該当のバッファ#の行のQP1完了フラグ及びQP2完了フラグの列に“1”、QP1STS及びQP2STSの列に“OK”を格納する。また完了制御部255は、ストレージコントローラ3B(CTL1)及び3C(CTL2)の各メモリ21へのデータ転送が完了したが、失敗であった場合には、データ転送ステータス管理テーブル255Tの該当のバッファ#の行のQP1完了フラグ及びQP2完了フラグの列に“1”、QP1STS及びQP2STSの列に“NG(及び失敗要因)”を格納する。
【0062】
完了制御部255は、ストレージコントローラ3B(CTL1)及び3C(CTL2)から受信した完了応答30を基に、QP1完了フラグ及びQP1STS、並びに、QP2完了フラグ及びQP2STSに情報が格納されると、二重ライト完了と判定する(S39)。
【0063】
(ストレージコントローラの動作(二重ライト完了判定から二重ライト完了まで))
図7は、実施形態1に係る転送動作(二重ライト完了判定から二重ライト完了まで)を示すシーケンス図である。
図6に続き完了判定(S39)が終了すると、完了制御部255は、ストレージコントローラ3A(CTL0)のメモリ21へ転送完了情報STSを書き込む(S40)。CPU20は、メモリ21に書き込まれた転送完了情報STSによって、二重ライトを指示したデータの二重ライトが完了したことを認識する。次に完了制御部255は、S40の転送完了情報STS送信後に、対象のデータ26をバッファ254から消去する(S41)。
【0064】
一方、ストレージコントローラ3A(CTL0)のCPU20は、STS刈り取り指示をI/Fドライバ20dへ送信する(S42)。
【0065】
I/Fドライバ20dは、メモリ21に格納されている転送完了情報STSをポーリングにより取り出して判定し(S43)、判定結果をSTS報告としてCPU20へ送信する(S44)。CPU20は、I/Fドライバ20dから受信したSTS報告をチェックし(S45)、二重ライト処理の成否、失敗の場合の障害部位の特定、ライトデータの再送の要否などを判定する。これらの判定結果をもとに、二重ライト処理のライトデータの再送や、障害発生部位を切り離したシステムの縮退が行われる。以上でCPU20は、二重ライト処理を終了する(S46)。
【0066】
(実施形態1の効果)
図8及び
図9を参照して本実施形態の効果を説明する。
図8は、従来技術による二重ライト処理を説明するための図である。
図9は、実施形態1による二重ライト処理を説明するための図である。
【0067】
図8に示すように、マルチノードシステムにおける二重ライトを実施する場合に、1対1のRoCEにおいてストレージコントローラCTL0から2つのストレージコントローラCTL1,CTL2へデータ転送するには、従来では、各ストレージコントローラに対応する各SQに対してWQEを格納する必要があった。このため、ストレージコントローラのメモリとスイッチインタフェース間で、各WQEの処理によるDMAのデータ転送毎にメモリ上のデータにアクセスするため、この2回のアクセスによってメモリとスイッチインタフェース間の帯域が圧迫されていた。この帯域は、ストレージシステム性能に影響を与える可能性がある。
【0068】
そこで
図9に示すように、本実施形態では、二重ライトパラメータ(2WrParam)をインタフェースユニット25内のパラメータキュー252に格納し、それをパラメータ制御部251が解読してメモリ21のデータ26を1回のみリードする。データ26をインタフェースユニット25内のバッファ254に格納すると、インタフェースユニット25内で二重ライトパラメータを2個のWQEへ変換し、データ転送先の各ストレージコントローラに対応する各SQに対してWQEを格納するようにした。本実施形態では、2つのQPのSQが連携して動作するように、パラメータ制御部251、パラメータキュー252、バッファ254、及び完了制御部255をRoCEに追加した。このようにすることで、ストレージコントローラCTL0のCPU20及びメモリ21とスイッチインタフェース24間のDMAのデータ転送を1回にできるため、CPU20及びメモリ21とスイッチインタフェース24間の帯域の消費を低減できる。
【0069】
なお1つのストレージコントローラ3のみにデータ転送する際の一重ライトパラメータ(1WrParam)やリードの際のリードパラメータもパラメータキュー252を使用する。
【0070】
[実施形態2]
実施形態1では、ストレージコントローラ3A(CTL0)が自装置が保持するデータ26を他の2つのストレージコントローラ3B(CTL1)及び3C(CTL2)へ二重ライトする例を示した。これに対し実施形態2では、ストレージコントローラ3A(CTL0)が他のストレージコントローラ3B(CTL1)が保持するデータ26を自装置と別の他のストレージコントローラ3C(CTL2)へ二重ライトする例を示す。実施形態2の説明では、実施形態1との差分を中心に説明する。
【0071】
以下、
図10~
図12を参照して、実施形態2に係る、ストレージコントローラ3A(CTL0)から転送された二重ライトパラメータに基づいて、ストレージコントローラ3B(CTL1)が保持するデータがストレージコントローラ3A(CTL0)及び3C(CTL2)へ二重ライトされる一連の処理を説明する。
【0072】
(実施形態2に係る転送動作(二重ライト開始からWQE生成まで))
図10は、実施形態2に係る転送動作(二重ライト開始からWQE生成まで)を示すシーケンス図である。先ずCPU20(CTL0)は、二重ライト処理を開始する(S51)。次にCPU20(CTL0)は、ストレージコントローラ3B(CTL1)が保持するデータ26をストレージコントローラ3A(CTL0)及び3C(CTL2)へ二重ライトする二重ライトパラメータ(2WrParam)27を生成し(S52)、I/Fドライバ20dに対して二重ライトパラメータ27の転送を指示する(S53)。
【0073】
次にI/Fドライバ20dは、二重ライトパラメータ27を、スイッチインタフェース24のインタフェースユニット25のパラメータ制御ユニット251Uへ転送する(S54)。二重ライトパラメータ27は、パラメータ制御ユニット251Uのパラメータキュー252へ格納される。
【0074】
次にパラメータ制御ユニット251Uのパラメータ制御部251は、パラメータキュー252に格納されている二重ライトパラメータ27を取り出して解読し、二重ライトパラメータ27に応じたリクエストを開始する(S55)。すなわちパラメータ制御部251は、パラメータキュー252に格納されている二重ライトパラメータ27がストレージコントローラ3B(CTL1)が保持するデータ26の二重ライトを要求するものであることを認識し、二重ライトパラメータ27をストレージコントローラ3B(CTL1)へ転送するWQEを生成してストレージコントローラ3B(CTL1)に対応するSQ2561(SQ1)へ格納する(S56)。EDMA258は、SQ2561に格納されているWQEを処理することで、パラメータキュー252に格納されている二重ライトパラメータ27を、ストレージコントローラ3B(CTL1)のパラメータ制御ユニット251Uのパラメータキュー252へ転送する(S57)。
【0075】
次にストレージコントローラ3B(CTL1)のパラメータ制御ユニット251Uのパラメータ制御部251は、パラメータキュー252に格納されている二重ライトパラメータ27を取り出して解読し、二重ライトパラメータ27に応じたリクエストを開始する。すなわちパラメータ制御部251は、パラメータキュー252に格納されている二重ライトパラメータ27がストレージコントローラ3B(CTL1)が保持するデータ26の二重ライトを要求するものであることを認識し、バッファ254の空き容量を確認し、二重ライト対象のデータ26を格納できる空き容量がバッファ254にある場合に、ストレージコントローラ3B(CTL1)のメモリ21上のデータ26のリードを起動する(S58)。
【0076】
なお二重ライト対象のデータ26を格納できる空き容量がバッファ254にない場合には、実施形態1と同様に通常のRoCE転送が行われる。
【0077】
次にパラメータ制御ユニット251UのIDMA253は、ストレージコントローラ3B(CTL1)のメモリ21にアクセスしてデータ26を読み出し(S59)、バッファ254へ格納する(S60)。二重ライトの際のメモリ21上のデータ読み出しがS59の1回だけなので、スイッチインタフェース24とメモリ21間の帯域消費を削減できる。IDMA253は、データ26がバッファ254へ格納されると、データリード完了通知28をパラメータ制御部251へ通知する。
【0078】
次にパラメータ制御ユニット251Uのパラメータ制御部251は、データリードが完了した二重ライトパラメータ27を用いて、二重ライト先のストレージコントローラ3A(CTL0)及び3C(CTL2)のそれぞれに対応したQP256,257に格納するWQE2563,2573を生成し(S61)、SQ2561,2672のそれぞれに格納する(S62、S63)。
【0079】
(実施形態2に係る転送動作(DMA転送から二重ライト完了判定まで))
図11は、実施形態2に係る転送動作(DMA転送から二重ライト完了判定まで)を示すシーケンス図である。先ずストレージコントローラ3B(CTL1)のインタフェースユニット25のEDMA258は、SQ2561,2571からWQE2563,2573をそれぞれ非同期に読み出す(S71、S72)。以降、WQE2563に関するS71、S73、S75、S76の処理と、WQE2572に関するS72、S74、S77、S78の処理は、非同期に行われる。
【0080】
EDMA258は、バッファ254内のデータ26を読み出してストレージコントローラ3A(CTL0)へDMA転送しメモリ21に格納させる(S73)。同様に、EDMA258は、バッファ254内のデータ26を読み出してストレージコントローラ3C(CTL2)へDMA転送しメモリ21へ格納させる(S74)。
【0081】
ストレージコントローラ3A(CTL0)は、自装置内のメモリ21へデータ26が格納処理されると、完了応答30をストレージコントローラ3B(CTL1)のEDMA258へ返却する(S75)。EDMA258は、ストレージコントローラ3A(CTL0)から完了応答30を受信すると、完了応答受領を完了制御部255へ通知する(S76)。
【0082】
同様に、ストレージコントローラ3C(CTL2)は、自装置内のメモリ21へデータ26が格納処理されると、完了応答30をストレージコントローラ3B(CTL1)のEDMA258へ返却する(S77)。EDMA258は、ストレージコントローラ3C(CTL2)から完了応答30を受信すると、完了応答受領を完了制御部255へ通知する(S78)。
【0083】
完了制御部255は、ストレージコントローラ3A(CTL0)及び3C(CTL2)から受信した完了応答30を基に、QP1完了フラグ及びQP1STS、並びに、QP2完了フラグ及びQP2STSに情報が格納されると、二重ライト完了と判定する(S79)。
【0084】
(実施形態2に係る転送動作(二重ライト完了判定から二重ライト完了まで))
図12は、実施形態2に係る転送動作(二重ライト完了判定から二重ライト完了まで)を示すシーケンス図である。
図11に続き完了判定(S79)が終了すると、完了制御部255は、ストレージコントローラ3A(CTL0)のメモリ21へ送信する転送完了情報STSを生成し、ストレージコントローラ3A(CTL0)に対応するSQ2561に送信のためのWQEを格納する(S82)。次に完了制御部255は、SQ2561のWQEを処理することで転送完了情報STSをストレージコントローラ3A(CTL0)へ送信する(S83)。次に完了制御部255は、S83の転送完了情報STS送信後に、対象のデータ26をバッファ254から消去する(S84)。
【0085】
一方、ストレージコントローラ3A(CTL0)は、ストレージコントローラ3B(CTL1)の完了制御部255から受信した転送完了情報STSをメモリ21に格納する(S85)。CPU20は、メモリ21に書き込まれた転送完了情報STSによって、二重ライトを指示したデータの二重ライトが完了したことを認識する。ストレージコントローラ3A(CTL0)のCPU20は、STS刈り取り指示をI/Fドライバ20dへ送信する(S86)。
【0086】
I/Fドライバ20dは、メモリ21に格納されている転送完了情報STSをポーリングにより取り出して判定し(S87)、判定結果をSTS報告としてCPU20へ送信する(S88)。CPU20は、I/Fドライバ20dから受信したSTS報告をチェックし(S89)、二重ライト処理の成否、失敗の場合の障害部位の特定、ライトデータの再送制御の要否などを判定する。これらの判定結果をもとに、二重ライト処理のライトデータの再送や、障害発生部位を切り離したシステムの縮退が行われる。以上でCPU20は、二重ライト処理を終了する(S90)。
【0087】
(実施形態2の効果)
実施形態2では、二重ライトパラメータ27の送信元アドレス271に他のストレージコントローラ3のメモリ21上にあるデータを指定することで、二重ライト対象のデータを保持するストレージコントローラ3に到達するまでストレージコントローラ3間で二重ライトパラメータ27が転送される。ストレージコントローラ3は、受信した二重ライトパラメータ27が、自ストレージコントローラ3のメモリ21に格納されているデータ26の二重ライトを指示する場合には、二重ライト処理を実行する。一方、他ストレージコントローラ3のメモリ21に格納されているデータ26の二重ライトを指示する場合には、二重ライトパラメータ27を他ストレージコントローラ3へ転送する。このように、二重ライトパラメータ27を書き換えるだけで、他のストレージコントローラ3が保持するデータ26も二重ライト処理できる。
【0088】
[その他の実施形態]
(1)上記実施形態1及び2では、2つの他のストレージコントローラ3へ自ストレージコントローラ3が保持する同一のデータを非同期転送する二重ライトを行う例を示した。しかし、二重ライトに限らず、1つのn重ライトパラメータ(nWrParam)(nは2以上の自然数)を用いて、n個の他のストレージコントローラ3へ自ストレージコントローラ3又は他のストレージコントローラ3が保持するデータを非同期転送するn重ライトを行うこともできる。この場合、n個のQPが一組のQPとして、送信元と送信先のストレージコントローラ3に対をなすようにQPが設けられる。
【0089】
(2)インタフェースユニット25は、メモリ21に格納されているデータ26を取得してバッファ254に格納する際、データ26のサイズがバッファ254の空き容量よりも大きい場合に、バッファ254に格納可能なサイズへデータ26を分割してもよい。そして、分割した複数の分割データをバッファ254に格納し、二つの他ストレージコントローラ3のそれぞれに分割データを書き込む二つの分割リクエスト(WQE)を生成し、生成した各分割リクエストを二つの他ストレージコントローラ3にそれぞれ対応する二つのSQに格納する。そして、各SQに格納された各分割リクエストを処理して、バッファ254に格納されている分割データを二つの他ストレージコントローラ3のそれぞれへデータ転送する各処理を、全ての分割データについて実行してもよい。
【0090】
(3)コンピュータ500のハードウェア
図13は、ストレージコントローラ3又はインタフェースユニット25を実現するコンピュータ500のハードウェアを示す図である。コンピュータ500では、1以上のCPUやFPGAなどのプロセッサ510、RAM(Random Access Memory)などのメモリ520、SSD(Solid State Drive)やHDD(Hard Disk Drive)などのストレージ530、及びネットワークI/F(Inter/Face)540が、バスを介して接続されている。
【0091】
コンピュータ500において、ストレージコントローラ3を実現するためのプログラムがストレージ530から読み出されプロセッサ510及びメモリ520の協働により実行されることで、ストレージコントローラ3が実現される。あるいは、ストレージコントローラ3を実現するためのプログラムは、ネットワークI/F540を介した通信により非一時的な記憶装置を備えた外部のコンピュータから取得されてもよい。あるいはストレージコントローラ3を実現するプログラムは、非一時的記録媒体に記録され、媒体読み取り装置によって読み出されることで取得されてもよい。
【0092】
またインタフェースユニット25を実現するためのプログラムがストレージ530から読み出されてFPGAなどのプロセッサ510がコンフィギュレーションされることで、インタフェースユニット25が実現される。インタフェースユニット25を実現するためのプログラムは、ストレージコントローラ3を実現するためのプログラムと同様に、ネットワークI/F540を介した通信により非一時的な記憶装置を備えた外部のコンピュータから取得されたり、非一時的記録媒体に記録され媒体読み取り装置によって読み出されることで取得されたりしてもよい。
【0093】
本発明は上述の実施形態に限定されるものではなく、様々な変形例を含む。例えば、上述の実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また矛盾しない限りにおいて、ある実施形態の構成の一部を他の実施形態の構成で置き換え、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また各実施形態の構成の一部について、構成の追加、削除、置換、統合、又は分散をすることが可能である。また実施形態で示した構成及び処理は、処理効率あるいは実装効率に基づいて適宜分散、統合、又は入れ替えることが可能である。
【符号の説明】
【0094】
1:ストレージシステム、3,3A,3B,3C:ストレージコントローラ、21:メモリ、24:スイッチインタフェース、25:インタフェースユニット、26:データ、27:二重ライトパラメータ、251:パラメータ制御部、252:パラメータキュー、253:バッファ、255:完了制御部