(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023038548
(43)【公開日】2023-03-17
(54)【発明の名称】ストレージシステム
(51)【国際特許分類】
G06F 3/06 20060101AFI20230310BHJP
G06F 13/10 20060101ALI20230310BHJP
G06F 9/48 20060101ALI20230310BHJP
【FI】
G06F3/06 301R
G06F3/06 301F
G06F13/10 330C
G06F9/48 370
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2021145334
(22)【出願日】2021-09-07
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】島田 健太郎
(72)【発明者】
【氏名】長尾 尚
(72)【発明者】
【氏名】岡田 尚也
(57)【要約】
【課題】求められる性能に対してより効率的な構成のストレージシステムを実現する。
【解決手段】第二のプロセッサと第二のメモリとの間の帯域は、第一のプロセッサと第一のメモリとの間の帯域より高い。第一のメモリは、ホスト計算機からのリードコマンドを格納する。第一のプロセッサは、リードコマンドの内容の解析を行い、解析の結果に従って、第二のプロセッサにリードデータを要求する。第二のプロセッサは、第一のプロセッサからの要求に従って、1以上の記憶ドライブからリードデータを読み出して第二のメモリに格納する。第二のプロセッサは、第二のメモリにリードデータを格納したことを第一のプロセッサに通知する。第一のプロセッサは、第二のメモリから読み出されたリードデータを、第一のメモリに格納することなく、ホスト計算に転送する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ホスト計算機と通信するストレージシステムであって、
第一のプロセッサと、
前記第一のプロセッサに接続する第一のメモリと、
第二のプロセッサと、
前記第二のプロセッサに接続する第二のメモリと、
1以上の記憶ドライブと、を含み、
前記第二のプロセッサと前記第二のメモリとの間の帯域は、前記第一のプロセッサと前記第一のメモリとの間の帯域より高く、
前記第一のメモリは、前記ホスト計算機に起因するリードコマンドを格納し、
前記第一のプロセッサは、前記リードコマンドの内容の解析を行い、前記解析の結果に従って、前記第二のプロセッサにリードデータを要求し、
前記第二のプロセッサは、前記第一のプロセッサからの要求に従って、前記1以上の記憶ドライブから前記リードデータを読み出して前記第二のメモリに格納し、
前記第二のプロセッサは、前記第二のメモリに前記リードデータを格納したことを前記第一のプロセッサに通知し、
前記第一のプロセッサは、前記第二のメモリから読み出された前記リードデータを、前記第一のメモリに格納することなく、前記ホスト計算機に送付する、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記第一のメモリは、前記ホスト計算機に起因するライトコマンドを格納し、
前記第一のプロセッサは、前記ライトコマンドの解析を行い、前記解析の結果に従って、前記第二のメモリ上の領域を確保し、
前記第一のプロセッサは、前記ホスト計算機が送付したライトデータを、前記第一のメモリに格納することなく、前記第二のメモリ上の前記領域に格納し、前記第二のプロセッサに前記第二のメモリ上の前記領域に格納したライトデータに対する処理を要求し、
前記第二のプロセッサは、前記第二のメモリに格納された前記ライトデータを、前記第一のプロセッサからの要求に応じて、前記1以上の記憶ドライブに格納する、ストレージシステム。
【請求項3】
請求項2に記載のストレージシステムであって、
前記第一のプロセッサに接続されたバッファ管理部をさらに含み、
前記第一のプロセッサは、前記第二のメモリ上の前記領域を確保することを前記バッファ管理部に要求し、
前記バッファ管理部は、前記第一のプロセッサからの前記要求に応じて、前記第二のメモリ上の前記領域を確保する、ストレージシステム。
【請求項4】
請求項2に記載されたストレージシステムであって、
第三のプロセッサと、
第三のプロセッサに接続された第三のメモリと、をさらに含み、
前記第三のプロセッサと前記第三のメモリとの間の帯域は、前記第一のプロセッサと前記第一のメモリとの間の帯域より高く、
前記第一のプロセッサは、前記第二のプロセッサに前記第二のメモリに格納された前記ライトデータの二重化要求を送信し、
前記第二のプロセッサは、前記二重化要求に応じて、前記第二のメモリに格納された前記ライトデータを前記第三のプロセッサに送信し、
前記第三のプロセッサは、前記ライトデータを前記第三のメモリに格納し、
前記第三のプロセッサは、前記第三のメモリに前記ライトデータを格納したことを前記第一のプロセッサに通知する、ストレージシステム。
【請求項5】
請求項1に記載されたストレージシステムであって、
さらに、データ変換部を備え、
前記第一のプロセッサは、前記データ変換部に、前記第二のメモリに格納された前記リードデータのデータ変換を要求し、
前記データ変換部は、前記第一のプロセッサからの要求に応じて、前記第二のメモリから読み出された前記リードデータを変換して、前記第二のメモリに格納し、
前記第一のプロセッサは、前記第二のメモリに格納された前記変換されたリードデータを、前記第一のメモリに格納することなく、前記ホスト計算機に送付する、ストレージシステム。
【請求項6】
請求項5に記載されたストレージシステムであって、
前記データ変換部のデータ変換は、圧縮されたデータを伸長する処理である、ストレージシステム。
【請求項7】
請求項2に記載されたストレージシステムであって、
更にデータ変換部を含み、
前記第一のプロセッサは、前記第二のメモリに格納されたライトデータのデータ変換を、前記データ変換部に要求し、
前記データ変換部は、前記第一のプロセッサからの要求に応じて、前記第二のメモリから読み出された前記ライトデータを変換して、前記第二のメモリに格納し、
前記第二のプロセッサは、前記第二のメモリに格納された、前記データ変換部により変換されたライトデータを、前記第一のプロセッサからの要求に応じて、前記1以上の記憶ドライブに格納する、ストレージシステム。
【請求項8】
請求項7に記載されたストレージシステムであって、
前記データ変換部のデータ変換は、データを圧縮する処理である、ストレージシステム。
【請求項9】
請求項1に記載されたストレージシステムであって、
第四のプロセッサと、
前記第四のプロセッサに接続された第四のメモリと、
ルータと、を含み、
前記第四のプロセッサと前記第四のメモリとの間の帯域は、前記第一のプロセッサと前記第一のメモリとの間の帯域より高く、
前記第一のメモリは、前記ホスト計算機に起因するライトコマンドを格納し、
前記第一のプロセッサは、前記ライトコマンドの解析を行い、前記解析の結果に従って、前記第二のメモリ上の領域と、前記四のメモリ上の領域を確保し、
前記ルータは、前記ホスト計算機が送付したライトデータを、前記第一のメモリに格納することなく、前記第二のメモリと前記第四のメモリのそれぞれ前記確保された領域に格納し、
前記第二のプロセッサ又は前記第四のプロセッサは、前記第二のメモリまたは前記第四のメモリに格納されたライトデータを、前記第一のプロセッサからの要求に応じて、前記1以上の記憶ドライブに格納する、ストレージシステム。
【請求項10】
請求項9に記載されたストレージシステムであって、
データ変換部をさらに含み、
前記第一のプロセッサは、前記データ変換部にデータ変換を要求し、
前記データ変換部は、前記第一のプロセッサからの要求に応じて、前記第二のメモリ又は前記第四のメモリ上の前記ライトデータを変換して、前記第二のメモリ又は前記第四のメモリに格納し、
前記第二のプロセッサ又は前記第四のプロセッサは、前記第二のメモリ又は前記第四のメモリに格納された、前記データ変換部により変換されたライトデータを、前記第一のプロセッサからの要求に応じて、前記1以上の記憶デバイスに格納する、ストレージシステム。
【請求項11】
ホスト計算機と通信するストレージシステムであって、
第一のプロセッサと、
前記第一のプロセッサに接続する第一のメモリと、
第二のプロセッサと、
前記第二のプロセッサに接続する第二のメモリと、
1以上の記憶ドライブと、を含み、
前記第二のプロセッサと前記第二のメモリとの間の帯域は、前記第一のプロセッサと前記第一のメモリとの間の帯域より高く、
前記第一のメモリは、前記ホスト計算機に起因するリードコマンドを格納し、
前記第一のプロセッサは、前記リードコマンドの内容の解析を行い、前記解析の結果に従って、前記1以上の記憶ドライブから前記リードコマンドに対応するリードデータを読み出して、前記第一のメモリに格納することなく、前記第二のメモリに格納し、前記第二のプロセッサに前記第二のメモリに格納した前記リードデータに対して第一の処理を要求し、
前記第二のプロセッサは、前記第一のプロセッサからの要求に応じて、前記第二のメモリから前記リードデータを読み出し、前記第一の処理を実行し、前記第一の処理を実行した結果を前記第二のメモリに格納し、
前記第一のプロセッサは、前記第二のメモリに格納された前記リードデータまたは前記リードデータの前記第一の処理を行った結果を読み出し、前記ホスト計算機に送付する、ストレージシステム。
【請求項12】
請求項11に記載のストレージシステムであって、
前記第一のメモリは、前記ホスト計算機に起因するライトコマンドを格納し、
前記第一のプロセッサは、前記ライトコマンドの解析を行い、前記解析の結果に従って、前記第二のメモリ上の領域を確保し、
前記第一のプロセッサは、前記ホスト計算機が送付したライトデータを、前記第一のメモリに格納することなく、前記第二のメモリ上の前記領域に格納し、前記第二のプロセッサに、前記第二のメモリに格納されたライトデータに対して第二の処理を要求し、
前記第二のプロセッサは、前記第一のプロセッサからの要求に応じて、前記第二のメモリから前記ライトデータを読み出し、前記第二の処理を実行し、前記第二の処理を実行した結果を前記第二のメモリに格納し、
前記第一のプロセッサは、前記第二のメモリに格納された、前記ライトデータまたは前記ライトデータの前記第二の処理を行った結果を、前記第一のメモリに格納することなく、前記1以上の記憶ドライブに格納する、ストレージシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムに関する。
【背景技術】
【0002】
本開示の背景技術として、例えば、特許文献1がある。特許文献1には、一種類のCPUを用いてストレージシステムを構成する例が開示されている。より具体的には、「ストレージ装置は、非透過性ブリッジを応用したパケット方向転換手段により、プロセッサから主記憶への書き込みに対してもPCI Expressマルチキャストを適用可能とし、共有メモリへの書き込み順序を二重化したメモリ間で一致させる。その結果、各プロセッサの各主記憶アクセスにより共有メモリを高速に読み出すことができる。」(要約)と記載されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
CPUの性能は、コア性能とメモリ帯域に依存する。CPUのコア性能は演算性能を示し、1コアの演算性能が高いほど、またはコア数が増加するほど高くなる。メモリ帯域は、CPUが処理するデータを格納する外部メモリへのアクセス性能を示し、実装するメモリ制御回路の性能が高くなるほど高くなる。
【0005】
ストレージシステムに対して、さらに高性能化が求められている。ストレージシステムにおけるCPUの処理では、高い演算性能を要求する処理と、大量のデータを処理するために高いメモリ帯域を要求する処理がある。そのため、ストレージシステムのコントローラの演算を一種類のCPUで実行する構成では、高い演算性能及び高いメモリ帯域の両方を有するCPUを必要とする。
【0006】
しかし、高い演算性能及び高いメモリ帯域を有するCPUは、これを実現する複雑な電子回路を大量に必要とするため、LSI(Large Scale Integrated circuit)など半導体チップに実装する場合、半導体チップの面積が大きくなり、製造効率が低い。したがって、より効率的な構成でストレージシステムに求められる性能を実現することが望まれる。
【課題を解決するための手段】
【0007】
本発明の一態様は、ホスト計算機と通信するストレージシステムであり、第一のプロセッサと、前記第一のプロセッサに接続する第一のメモリと、第二のプロセッサと、前記第二のプロセッサに接続する第二のメモリと、1以上の記憶ドライブと、を含む。前記第二のプロセッサと前記第二のメモリとの間の帯域は、前記第一のプロセッサと前記第一のメモリとの間の帯域より高い。前記第一のメモリは、前記ホスト計算機からのリードコマンドを格納する。前記第一のプロセッサは、前記リードコマンドの内容の解析を行い、前記解析の結果に従って、前記第二のプロセッサにリードデータを要求する。前記第二のプロセッサは、前記第一のプロセッサからの要求に従って、前記1以上の記憶ドライブから前記リードデータを読み出して前記第二のメモリに格納する。前記第二のプロセッサは、前記第二のメモリに前記リードデータを格納したことを前記第一のプロセッサに通知する。前記第一のプロセッサは、前記第二のメモリから読み出された前記リードデータを、前記第一のメモリに格納することなく、前記ホスト計算に転送する。
【0008】
本発明の他の一態様は、ホスト計算機と通信するストレージシステムであって、第一のプロセッサと、前記第一のプロセッサに接続する第一のメモリと、第二のプロセッサと、前記第二のプロセッサに接続する第二のメモリと、1以上の記憶ドライブと、を含む。前記第二のプロセッサと前記第二のメモリとの間の帯域は、前記第一のプロセッサと前記第一のメモリとの間の帯域より高い。前記第一のメモリは、前記ホスト計算機に起因するリードコマンドを格納する。前記第一のプロセッサは、前記リードコマンドの内容の解析を行い、前記解析の結果に従って、前記1以上の記憶ドライブから前記リードコマンドに対応するリードデータを読み出して、前記第一のメモリに格納することなく、前記第二のメモリに格納し、前記第二のプロセッサに前記第二のメモリに格納した前記リードデータに対して第一の処理を要求する。前記第二のプロセッサは、前記第一のプロセッサからの要求に応じて、前記第二のメモリから前記リードデータを読み出し、前記第一の処理を実行し、前記第一の処理を実行した結果を前記第二のメモリに格納する。前記第一のプロセッサは、前記第二のメモリに格納された前記リードデータまたは前記リードデータの前記第一の処理を行った結果を読み出し、前記ホスト計算機に送付する。
【発明の効果】
【0009】
本発明の一態様によれば、求められる性能に対してより効率的な構成のストレージシステムを実現することができる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、ストレージシステムの第一の構成例である。
【
図2A】
図2Aは、CPU小の半導体チップの構成例を模式的に示す。
【
図2B】
図2Bは、CPU大の半導体チップの構成例を模式的に示す。
【
図3A】
図3Aは、CPU大とCPU小との間の面積比の例を模式的に示す。
【
図3B】
図3Bは、二つのCPU及び一つのCPU大の組み合わせと、二つのCPU大の組み合わせとの間の面積比を示す。
【
図4】
図4は、第一の構成例におけるリードコマンドの処理シーケンスの例である。
【
図5】
図5は、第一の構成例におけるライトコマンドの処理シーケンスの例である。
【
図6】
図6は、バッファ管理部にバッファ領域を設定する処理のフローチャートの例である。
【
図7】
図7は、ストレージシステムの第二の構成例である。
【
図8】
図8は、第二の構成例におけるリードコマンドの処理シーケンスの例である。
【
図9】
図9は、第二の構成例におけるライトコマンドの処理シーケンスの例である。
【
図10】
図10は、ストレージシステムの第三の構成例である。
【
図11】
図11は、第三の構成例におけるライトコマンドの処理シーケンスの例である。
【
図12】
図12は、ストレージシステムの第四の構成例である。
【
図13】
図13は、第四の構成例におけるライトコマンドの処理シーケンスの例である。
【
図14】
図14は、ストレージシステムの第五の構成例である。
【
図15】
図15は、第五の構成例におけるリードコマンドの処理シーケンスの例である。
【
図16】
図16は、第五の構成例におけるライトコマンドの処理シーケンスの例である。
【発明を実施するための形態】
【0011】
以下、図面に基づいて、本発明の実施の形態を説明する。なお、以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされており、本発明は、他の種々の形態でも実施する事が可能であり、特に限定しない限り、各構成要素は単数でも複数でも構わない。
【0012】
また、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、実施例の中で説明されている要素の組み合わせの全てが、発明の解決手段に必須であるとは限らない。
【0013】
以下の説明では、「テーブル」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよく、データ構造に依存しないことを示すため、「xxxのテーブル」、「xxxのリスト」、「xxxのキュー」等を「xxx情報」等と称することがある。以下の説明では、識別情報について説明する際に、「識別情報」、「識別子」、「名」、「ID」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
【0014】
以下の説明では、同一あるいは同様な機能を有する構成要素が複数ある場合には、基本的に同一の符号を付して説明するが、機能が同じであっても機能を実現するための手段が異なる場合がある。さらに、後述する本発明の実施例は、汎用コンピュータ上で稼動するソフトウェアで実装してもよいし、専用ハードウェア又はソフトウェアとハードウェアの組み合わせで実装してもよい。
【0015】
また、以下の説明では「プログラム」を主語として処理を説明することがあるが、プログラムはプロセッサ(例えば、CPU:Central Processing Unit)によって実行されることによって、定められた処理に対して、適宜に記憶資源(例えば、メモリ)、および/または、インタフェースデバイス(通信ポート)等を用いながら行うため、処理の主体がプロセッサとして説明してもよい。
【0016】
プログラムを主語として説明された処理は、プロセッサを有する計算機(例えば、計算ホスト、ストレージ装置)が行う処理としてもよい。また、以下の説明では、「コントローラ」の表現で、プロセッサ又はプロセッサが行う処理の一部又は全部を行うハードウェア回路を指してもよい。
【0017】
プログラムは、プログラムソース(例えば、プログラム配布サーバや、計算機が読み取り可能な記憶メディア)から、各計算機にインストールされてもよく、この場合、プログラム配布サーバはCPUと記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムを記憶し、配布プログラムをCPUが実行することで、プログラム配布サーバのCPUは配布対象のプログラムを他の計算機に配布してもよい。
【0018】
また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。また、以下の説明において、記憶ドライブ又は単にドライブは、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイスである。ドライブは、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)でもよい。ストレージシステムに異なる種類のドライブが混在していてもよい。
【実施例0019】
図1は、実施例にかかるストレージシステムの構成例を示す図である。ストレージシステムは、不図示のホスト計算機にて生成されたデータを受信し、格納、保持する。また、ストレージシステムは、ホスト計算機からの指示に応答して、格納されているデータをホスト計算機に送信する。
【0020】
ストレージシステムは、複数のストレージコントローラ100A、100Bと、1または複数の記憶ドライブ109Aから109Eと、を含む。
図1において、例として二つのストレージコントローラ100A、100Bが示されているが、ストレージコントローラの数は任意であり、一つのみでも3以上であってもよい。また、
図1において、例として五つの記憶ドライブ109Aから109Eが示されているが、記憶ドライブの数は任意である。
【0021】
ストレージコントローラ100A、100Bは、それぞれ、不図示のフロントエンドネットワークを介して、不図示の1又は複数のホスト計算機と通信する。ストレージコントローラ100Aは、ストレージコントローラ100Aに内蔵するバックエンドスイッチ(BE-SW)108Aによって、記憶ドライブ109Aから109Eと通信する。ストレージコントローラ100Bは、ストレージコントローラ100Bに内蔵するバックエンドスイッチ108Bによって、記憶ドライブ109Aから109Eと通信する。
【0022】
また、ストレージコントローラ100A、100Bは、ストレージコントローラ間のパス110を介して通信する。パス110は、ストレージコントローラの冗長化のためにCPU間で利用される通信路で、広帯域のインタコネクトで構成される。当該通信路を使って、ストレージコントローラ100A、100B間で、ライトデータの2重化やメタデータの共有等を行う。一方のストレージコントローラが保守や障害等で閉塞しても、もう一方のストレージコントローラにより、ストレージシステムとしての処理を継続可能である。
【0023】
ストレージシステムは、複数の記憶ドライブを纏めて一つの記憶領域として管理し、ホスト計算機にデータを記憶するための領域を提供する。このとき、記憶ドライブの一部が故障することによってデータを消失しないように、RAID(Redundant Arrays of Inexpensive Disks)技術による記憶ドライブ間の冗長化を行い、データ保障を行ってよい。
【0024】
ホスト計算機にストレージとしての機能を提供するため、ストレージコントローラ100A、100Bは、冗長化されたコントローラを構成する。ストレージコントローラ100A、100Bは、それぞれ、1又は複数のプロセッサ及び1又は複数のメモリを備える。
図1に示す構成例において、ストレージコントローラ100Aとストレージコントローラ100Bは同様の構成を有する。なお、図示された又は不図示の一部の構成要素が、一方のストレージコントローラのみに実装されていてもよい。
【0025】
図1の構成例において、ストレージコントローラ100Aは、CPU小101A、101B、メモリ(MEM)102A、102B、バッファ管理部103A、103B、及びスイッチ(SW)104A、104Bを含む。さらに、ストレージコントローラ100Aは、フロントエンドインタフェース105A、105B、CPU大106A、メモリ107A、及びバックエンドスイッチ108Aを含む。例えば、メモリ102A、102Bは、それぞれ一つのメモリデバイス(例えばDIMM:Dual Inline Memory Module)で構成され、メモリ107Aは、複数のメモリデバイス(例えばDIMM)を含む。
【0026】
ストレージコントローラ100Bは、CPU小101C、101D、メモリ102C、102D、バッファ管理部103C、103D、及びスイッチ(SW)104C、104Dを含む。さらに、ストレージコントローラ100Bは、フロントエンドインタフェース105C、105D、CPU大106B、メモリ107B、及びバックエンドスイッチ108Bを含む。例えば、メモリ102C、102Dは、それぞれ一つのメモリデバイス(例えばDIMM)で構成され、メモリ107Bは、複数のメモリデバイス(例えばDIMM)を含む。
【0027】
以下において、ストレージコントローラ100Aの構成を説明する。同様の説明が、ストレージコントローラ100Bに対して適用可能である。
【0028】
フロントエンドインタフェース105A、バッファ管理部103A、及びCPU大106Aは、スイッチ104Aに接続されている。これらは、スイッチ104Aを介して互いに通信する。
【0029】
CPU小101Aは、バッファ管理部103Aを介して、スイッチ104Aに接続されている。メモリ102Aは、CPU小101Aに接続されている。メモリ102Aの記憶領域は、CPU小101Aにより又はCPU小101Aを介してアクセスされる。
【0030】
フロントエンドインタフェース105B、バッファ管理部103B、及びCPU大106Aは、スイッチ104Bに接続されている。これらは、スイッチ104Bを介して互いに通信する。CPU小101Bは、バッファ管理部103Bを介して、スイッチ104Aに接続されている。メモリ102Bは、CPU小101Bに接続されている。メモリ102Bの記憶領域は、CPU小101Bにより又はCPU小101Bを介してアクセスされる。
【0031】
CPU大106Aは、メモリ107Aに接続されている。メモリ107Aの記憶領域は、CPU大106Aにより又はCPU大106Aを介してアクセスされる。CPU大106Aは、バックエンドスイッチ108Aに接続されている。CPU大106Aは、バックエンドスイッチ108Aを介して記憶ドライブ109Aから109Eにアクセスする。CPU大106Aは、ホスト計算機からのデータを記憶ドライブ109Aから109Eに格納し、また、記憶ドライブ109Aから109Eからホスト計算機のデータを読み出す。
【0032】
フロントエンドインタフェース105A、105Bは、ストレージシステムに各種要求を行う複数のホスト計算機と接続するためのインタフェースである。フロントエンドインタフェース105A、105Bは、ホスト計算機との通信プロトコルとストレージシステム内の通信プロトコルの相互変換を行う。
【0033】
ホスト計算機との通信は、例えば、FC(Fibre Channel)、Ethernet、iSCSI、NVMe-oF(NVMe over Fabrics)等のプロトコルを利用することができる。なお、本実施形態では、フロントエンドインタフェース105A、105Bが利用するプロトコルは、上記例に限定されない。
【0034】
スイッチ104A、104Bを介した相互接続インタフェースの規格は、例えばPCI-Expressである。なお、ストレージコントローラ100A内の接続インタフェースは、PCI-Expressに限定されない。
【0035】
バックエンドスイッチ108Aは、ストレージシステムに搭載される複数の記憶ドライブ109Aから109Eと接続する為のインタフェースである。バックエンドスイッチ108Aは、記憶ドライブ109Aから109Eにデータを書き込み記憶ドライブ109Aから109Eからデータを読み出すためのインタフェースである。バックエンドスイッチ108Aは、例えば、NVMe(NVM Express)のプロトコルを利用する。バックエンドのプロトコルは任意であって、例えば、SAS(Serial Attached SCSI)又はSATAであってもよい。
【0036】
メモリ102A、102B及びメモリ107Aは、それぞれは、プロセッサの主記憶として、ストレージシステム内においてCPUが使用するデータの格納領域として機能する、一時的な記憶領域を提供する。後述するように、メモリ107Aは、ホストのデータ(ホストデータ)を一時的に格納するバッファ領域を提供する。
【0037】
メモリは、例えば揮発性メモリを使用することができる。揮発性メモリと共に又は代えて、SCM(Storage Class Memory)などの不揮発性メモリを使用してもよい。揮発性記憶媒体は、不揮発性記憶媒体共に、計算機読み取り可能な非一過性記憶媒体である。
【0038】
揮発性メモリの例は、DRAMである。一例として、複数のDRAMチップを基板上に実装したDIMMを利用することができる。DRAMにアクセスするための接続インタフェースが従う規格は。例えばDDR4(Double Data Rate 4)である。なお、ストレージシステム内のメモリの接続インタフェースの規格がDDR4に限定されない。
【0039】
CPU小101A、101Bは、1以上のプロセッサコア及び1以上のメモリ制御回路を内蔵する半導体チップである。CPU小101A、101Bは、それぞれ、メモリ102A、102Bにデータを格納し、メモリ102A、102Bからデータを読み出す。CPU小101A、101Bは、メモリ102A、102Bに格納されているプログラムの命令コードに従って動作して、所望の機能を実現する。
【0040】
CPU大106Aは、1以上のプロセッサコア及び1以上のメモリ制御回路を内蔵する半導体チップである。CPU大106Aは、メモリ107Aにデータを格納し、メモリ107Aからデータを読み出す。CPU大106Aは、メモリ107Aに格納されているプログラムの命令コードに従って動作して、所望の機能を実現する。
【0041】
CPU小101A、101Bは同様の構成を有し、それらの演算性能及びメモリ帯域は同様であってよい。これらの演算性能及びメモリ帯域が異なっていてもよい。CPU大106Aは、CPU小101A、101Bより高いメモリ帯域を有している。メモリ帯域が高いことは、接続されている1以上のメモリとより大量のデータの送受信を行うことができることを意味する。なお、CPU大106Aの演算性能は、CPU小101A、101Bと同一又は異なってもよい。
【0042】
図2Aは、CPU小101Aの半導体チップの構成例を模式的に示す。他のCPU小101Bも同様の構成を有することができる。CPU小101Aは、八つのプロセッサコア211と一つの低速メモリ制御回路213を含む。
図2Aにおいては、一つのプロセッサコアが例として符号211で指示されている。メモリ制御回路213は、一つのメモリ102A(例えばDIMM)と通信を行う回路である。
【0043】
図2Bは、CPU大106Aの半導体チップの構成例を模式的に示す。CPU大106Aは、16のプロセッサコア221と四つのメモリ制御回路223を含む。
図2Bにおいては、一つのプロセッサコアが例として符号221で指示され、一つのメモリ制御回路が例として符号223で指示されている。メモリ制御回路223の数は、メモリ107Aのメモリデバイスの数と同じであり、各メモリ制御回路223は、メモリ107Aの各メモリデバイスと通信を行う。
図2Bの構成例は四つのメモリ制御回路223を含み、CPU大106Aは、四つのメモリデバイスに同時にアクセスすることができる。
【0044】
図2A及び2Bに示す構成例において、CPUの演算性能は、一般的に1プロセッサコアの演算性能と、プロセッサコアの数に依存し、CPUのメモリ帯域は、同時アクセスできるメモリデバイスの数、つまり、メモリ制御回路の数に依存する。
図2A、2Bに示す構成例において、CPU大106AをCPU小101Aより多くのメモリ制御回路を有する。そのため、CPU大のメモリ帯域は、CPU小101Aより大きい。一方、106Aの回路構成は、CPU小101Aより大規模かつ複雑であり、半導体チップの面積がより大きいものとなる。
【0045】
なお、これら構成例において、一つのメモリ制御回路及びの構成は共通でも異なっていてもよく、コア回路構成が共通でも異なっていてもよい。CPUとしてより高い演算性能又はより広いメモリ帯域は、半導体チップとして、より複雑で大きな面積の回路を必要とする。また、CPUのより大きい面積は、CPUのより低い製造効率及びより高いコストの結果となる。
【0046】
図3Aは、CPU大106AとCPU小101Aとの間の面積比の例を模式的に示す。
図2A、2Bに示す構成例において、例えば、一つのCPU小101Aと一つのCPU大106Aとの間の面積比は1:4である。
【0047】
3Bは、二つのCPU小101A及び一つのCPU大106Aの組み合わせと、二つのCPU大106Aの組み合わせとの間の面積比を示す。これらの面積比は6:8である。これら組み合わせの間において、コア数の比は32:32であり、メモリ制御回路数の比は6:8である。
【0048】
ストレージシステムにおいては、ホスト計算機と入出力するデータ(ホストデータ又はユーザデータとも呼ぶ)など大量のデータへのアクセスを伴う処理と、大量のデータへのアクセスは伴わない処理が存在する。大量のデータへのアクセスを伴う処理を高速に行うためには、より高いメモリ帯域が求められる。大量のデータへのアクセスを伴わない処理の速度は、メモリ帯域への依存度が小さい。
【0049】
大量のデータへのアクセスを伴う処理をCPU大が主に担い、大量のデータへのアクセスを伴わない処理をCPU小が主に担うことで、複数のCPによる処理時間と同等の処理時間を、より少ないCPU大及び1以上のCPU小の組み合わせで実現できる。
【0050】
例えば、上記例において、二つのCPU大による処理時間と同様の処理時間を、二つのCPU小及び一つのCPU大で実現することができる。上述のように、二つのCPU小及び一つのCPU大の組み合わせの総面積は、二つのCPU大の総面積より小さい。つまり、より効率的に製造できるCPU回路構成によって、ストレージシステムに対して要求される性能を実現することが可能となる。
【0051】
さらに、
図1に示す構成例において、二つのCPU小101A、101Bが処理したホスト計算機からのコマンドに対応するホストデータの処理を、一つのCPU大106Aが実行する。上述のように、CPU大106Aは、CPU小101A、101Bより高いメモリ帯域を有している。このため、CPU大106Aは、CPU小101Aまたは101Bがホストデータの処理を行った場合に比べて、より少ない処理時間により、ホストデータを処理することができる。なお、一つのストレージコントローラに実装されるCPU小の数がCPU大の数以下であってもよく、CPU小とCPU大の演算性能が同様であってもよい。
【0052】
以下において、ストレージコントローラの処理例を説明する。
図4は、ストレージコントローラ100Aのリード処理例を示すシーケンス図である。リード処理は、ホスト計算機からリードコマンドに応答して、指定されたホストデータ(リードデータ)を記憶ドライブから読み出し、ホスト計算機に転送する。
【0053】
以下においては、記憶デバイスからリードデータを読み出してホスト計算機に転送する例を説明する。ストレージコントローラ100Bに対しても同様の説明を適用することができる。
図4において、上から下に向かって時間が経過する。この点は、他のシーケンス図において同様である。また、任意のSSDが符号109で示されている。
【0054】
フロントエンドインタフェース105Aが、不図示のホスト計算機からリードコマンドを受信し、スイッチ104A、バッファ管理部103A、及びCPU小101Aのメモリ制御回路を介して、メモリ102Aに格納する。例えば、メモリ102A上に予めキュー領域を設定しておき、該キュー領域にホスト計算機から受信したリードコマンドを格納する。さらに、CPU小101Aは、メモリ102A上の該キュー領域からリードコマンドを取得して解析する(201)。
【0055】
CPU小101Aは、リードコマンドを解析した結果に従って、リードコマンドが指定する論理ボリューム番号と、当該論理ボリューム内のブロックアドレスと共に、リード要求を、バッファ管理部103A及びスイッチ104を介してCPU大106Aに送信する(202)。なお、CPU小101Aは、リードコマンドが指定する論理ボリューム番号とブロックアドレスに対応するSSD109A~Eの内の一つの指定と、該SSD109内のブロックアドレスを指定してもよい。
【0056】
CPU大106Aは、CPU小101Aからのリード要求に応じて、SSD109からホスト計算機により指定されたリードデータを読み出す。CPU大106Aは、ホスト計算機からのリードコマンドが指定する論理ボリューム番号と該論理ボリューム内のブロックアドレスを、SSD109A~Eの内の一つの指定と、該SSD109内のブロックアドレスに変換し、そのブロックアドレスを指定するSSDリードコマンドを、バックエンドスイッチ108Aを介して該SSD109に送信する(203)。CPU小101AがSSD109A~Eの内の一つと、該SSD109内のブロックアドレスを指定する場合、CPU大106Aによる上記変換は省略される。なお、SSDリードコマンドは
図4に示す通り、CPU大106Aから直接該SSD109に送信してもよいし、SSDリードコマンドをメモリ107A上に置いたキュー領域に一旦格納し、SSD109がメモリ107A上の該キュー領域よりSSDリードコマンドを取り出すようにしてもよい。
【0057】
CPU大106Aは、SSD109から受信したSSDデータ(リードデータ)をメモリ107Aに格納する(204)。CPU大106Aは、データ準備完了通知を、スイッチ104Aを介して、CPU小101Aに送信する(205)。データ準備完了通知に応答して、CPU小101Aは、フロントエンドインタフェース105に対してリードデータが準備できたことを知らせるFEデータレディ通知を、メモリ102Aに格納する。このようなフロントエンドインタフェース105への通知も、ホスト計算機から受信したリードコマンドと同じように、メモリ102A上に予めキュー領域を設定しておき、該キュー領域に格納してもよい。フロントエンドインタフェース105Aは、スイッチ104A及びバッファ管理部103Aを介して、メモリ102A上の該キュー領域からFEデータレディ通知を取得する(206)。
【0058】
FEデータレディ通知に応答して、フロントエンドインタフェース105Aは、データリード命令を、スイッチ104Aを介して、CPU大106Aに送信する(207)。データリード命令に応答して、CPU大106Aは、メモリ107Aから指定されたデータを読み出し(208)、読み出したリードデータを、スイッチ104Aを介してフロントエンドインタフェース105Aに返す(209)。このデータリード命令の処理は、CPU大106Aのプロセッサコアのいずれか一つがメモリ制御回路を制御して実行してもよいし、CPU大106A上のメモリ制御回路がプロセッサコアの介在なしに直接実行してもよい。フロントエンドインタフェース105Aは、受信したリードデータをホスト計算機に返す。
【0059】
次に、ホスト計算機からのライトコマンドに対するライト処理の例を説明する。
図5は、ストレージコントローラ100Aのライト処理例を示すシーケンス図である。ライト処理は、ホスト計算機からライトコマンド及びホストデータ(ライトデータ)を受信し、ライトコマンドによって指定された論理ボリューム番号と該論理ボリューム内のブロックアドレスに対応する記憶ドライブのブロックアドレスに、ライトデータを格納する。
【0060】
フロントエンドインタフェース105Aは、ホスト計算機からライトコマンドを受信する。フロントエンドインタフェース105Aは、ライトコマンドを、スイッチ104A、バッファ管理部103A、及びCPU小101Aのメモリ制御回路を介して、メモリ102Aに格納する。例えば、ホスト計算機からリードコマンドが送信された場合と同じく、メモリ102A上に予めキュー領域を設定しておき、該キュー領域にホスト計算機から受信したライトコマンドを格納する。さらに、CPU小101Aは、メモリ102A上の該キュー領域からライトコマンドを取得して、解析する(301)。
【0061】
CPU小101Aは、ライトコマンドを解析した結果に従って、ホスト計算機からライトデータを受信するために必要なバッファサイズを決定し、そのバッファサイズを指定したバッファ要求を、バッファ管理部103Aに送信する(302)。
【0062】
バッファ管理部103Aは、メモリ107Bにおいて、バッファとして使用することができるバッファ領域を、CPU大106Aから割り当てられ、管理している。バッファ管理部103Aは、そのバッファ領域の空き領域をバッファ要求に対して格納領域として割り当て、該格納領域のアドレスを指定するバッファ許可を、CPU小101Aに返す(303)。なお、異なるバッファ領域が、バッファ管理部103A及び103Bに割り当てられてもよく、共通のバッファ領域がこれらによって共同管理されてもよい。
【0063】
図6は、CPU大106Aが、バッファ管理部103A、103Bに、メモリ107Aからバッファ領域を割り当てる処理例を示すフローチャートである。CPU大106Aは、一つのバッファ管理部を選択して、メモリ107A上の領域(先頭アドレス、領域サイズ)を決定し(S11)、そのバッファ領域の先頭アドレス及び領域のサイズを、選択したバッファ管理部に設定する(S12)。
【0064】
次に、CPU大106Aが、ストレージコントローラ100A内の全てのバッファ管理部にバッファ領域を設定したか判定する(S13)。全てのバッファ管理部にバッファ領域を設定している場合(S13:YES)、本フローは終了する。未設定のバッファ管理部が残っている場合(S13:NO)、フローはステップS11に戻る。
【0065】
このように、バッファ管理部103A、103Bは、CPU大106Aによりメモリ107A上のバッファ領域の設定を受けることによって、CPU小101Aに対して、CPU小101Aに直接接続しないメモリ107A上のバッファ領域を割り当てることができる。
【0066】
図5に戻って、バッファ許可に応答して、CPU小101Aは、取得した格納領域のアドレスを指定する転送許可を、フロントエンドインタフェース105Bに送信する(304)。フロントエンドインタフェース105Aは、ホスト計算機にデータを受信する準備ができたことを通知して、ホスト計算機よりライトデータを受信する。フロントエンドインタフェース105Aは、受信したライトデータを、転送許可(304)で指定された格納領域のアドレスと共に、CPU大106Aに送信する。CPU大106Aは、メモリ107Aにおける指定されたアドレスにライトデータを格納する(305)。このライトデータのメモリ107Aへの格納は、CPU大106A上のプロセッサコアのいずれか一つがメモリ制御回路を制御して行ってもよいし、CPU大106A上のメモリ制御回路がプロセッサコアの介在無しに直接行ってもよい。
【0067】
次に、CPU小101Aは、ライトデータの二重化要求を、バッファ管理部103A及びスイッチ104Aを介して、CPU大106Aに送信する(306)。CPU大106Aは、メモリ107A上の当該バッファ領域から二重化する対象のライトデータを読み出し(307)、二重化転送として、パス110を介して別のストレージコントローラ100BのCPU大106Bに転送する。このライトデータのメモリ107Aからの読み出しも、CPU大106A上のプロセッサコアのいずれか一つがメモリ制御回路を制御して行ってもよいし、CPU大106A上のメモリ制御回路がプロセッサコアの介在無しに直接行ってもよい。CPU大106Bは、受信したデータをメモリ107Bに格納する(308)。このライトデータのメモリ107Bへの格納も、CPU大106B上のプロセッサコアのいずれか一つがメモリ制御回路を制御して行ってもよいし、CPU大106B上のメモリ制御回路がプロセッサコアの介在無しに直接行ってもよい。これにより、障害によりメモリ107Aまたは107Bのいずれか一方がアクセス不能になっても、他方からライトデータを取り出すことができるので、ライトデータが消失する可能性を低減できる。
【0068】
CPU大106Bは、二重化完了通をCPU大106Aに、パス110を介して返す。CPU大106Bからの二重化完了通知に応答して、CPU大106Aは、二重化完了通知をスイッチ104A及びバッファ管理部103Aを介して、CPU小101Aに返す(309)。
【0069】
CPU大106Aからの二重化完了通知に応答して、CPU小101Aは、フロントエンドインタフェース105Aに対してライトデータの格納処理が完了したことを知らせるFEライト完了通知を、メモリ102Aに格納する。このようなフロントエンドインタフェース105への通知も、ホスト計算機から受信したライトコマンドと同じように、メモリ102A上に予めキュー領域を設定しておき、該キュー領域に格納してもよい。フロントエンドインタフェース105Aは、スイッチ104A及びバッファ管理部103Aを介して、メモリ102A上の該キュー領域からFEライト完了通知を取得する(310)。フロントエンドインタフェース105は、FEライト完了通知を取得すると、ホスト計算機に、ライト完了通知を返す。
【0070】
次に、CPU小101Aは、バッファ管理部103A及びスイッチ104Aを介して、SSD109へのライト要求をCPU大106Aに送信する(311)。ライト要求に応答して、CPU大106Aは指定されたデータをメモリ107Aのバッファ領域から読み出し(312)、バックエンドスイッチ108Aを介して、SSDライトコマンドと共にSSD109に送信する(313)。このSSDライトコマンドは、
図5の通り、CPU大106Aから直接SSD109に送信してもよいし、SSDライトコマンドをメモリ107A上に置いたキュー領域に一旦格納し、SSD109がメモリ107A上の該キュー領域よりSSDライトコマンドを取り出すようにしてもよい。また複数あるSSD109A~Eのうちライトデータを書き込むSSD109と、該SSD109内のライトデータを書き込むブロックアドレスは、CPU大106Aが決定する。
【0071】
次に、CPU大106Aは、SSD109へのライト完了通知を、スイッチ104A及びバッファ管理部103Aを介して、CPU小101Aに送信する(314)。ライト完了通知に応答して、CPU小101Aは、バッファ管理部103Aに、今回のライトコマンドのために確保した格納領域の開放要求を送信する(315)。要求に応答して、バッファ管理部103Aは、指定された格納領域を開放し、再び新たなライト処理で使用可能とする。
【0072】
図4及び5を参照して説明した処理は、フロントエンドインタフェース105B、CPU小101B、メモリ102B、バッファ管理部103B、スイッチ104B、CPU大106B、バックエンドスイッチ108A及びSSD109においても実行される。また、ストレージコントローラ100Bにおいても同様である。
以下において、本明細書の他の実施例に係るストレージシステムを説明する。以下に説明する実施例は、ライトデータを変換、例えば、圧縮、重複排除又は暗号化を行い、その変換データを記憶ドライブに格納する。これにより、データ格納量や安全性を改善することができる。
アクセラレータ411A、411Bは、それぞれ、ストレージコントローラ100A、100Bにて、例えば、データの圧縮及び伸張を高速に行う、ハードウェアである。アクセラレータ411A、411Bは、ライトデータを圧縮し、その圧縮データがSSD109に格納される。また、SSD109から読み出された圧縮データは、アクセラレータ411A、411Bに伸長されて、元のデータに復元される。アクセラレータ411A、411Bは、これらの処理に加えて又は代えて、暗号化や重複排除処理を実行してもよい。
アクセラレータ411A、411Bは、圧縮及び伸張処理などのデータ変換処理を、ストレージコントローラ100A、100BのCPUに代わって高速に実行することができる。本実施例では、アクセラレータを、1台のストレージコントローラにつき1台搭載する例を記すが、この台数に限定されるものではない。例えば、1台のストレージコントローラにつきアクセラレータを2台搭載してもよい。
CPU小101Aは、リードコマンドを解析した結果に従って、リードコマンドが指定する論理ボリューム番号と、当該論理ボリューム内のブロックアドレスと共に、リード要求を、バッファ管理部103A及びスイッチ104を介してCPU大106Aに送信する(502)。なお、CPU小101Aは、リードコマンドが指定する論理ボリューム番号とブロックアドレスに対応するSSD109A~Eの内の一つの指定と、該SSD109内のブロックアドレスを指定してもよい。
CPU大106Aは、SSD109から受信したSSDデータをメモリ107Aに格納する(504)。このメモリ107AへのSSDデータの格納は、CPU大106Aのプロセッサコアのいずれか一つがメモリ制御回路を制御して実行してもよいし、CPU大106A上のメモリ制御回路が、プロセッサコアの介在なしに、直接実行してもよい。CPU大106Aは、データ準備完了通知を、スイッチ104A及びバッファ管理部103Aを介して、CPU小101Aに送信する(505)。データ準備完了通知に応答して、CPU小101Aは、リードデータのデータ変換要求を、バッファ管理部103A及びスイッチ104Aを介してCPU大106Aに送信する。CPU大106Aは、データ変換要求をアクセラレータ411Aに転送する(506)。
データ変換要求に応答して、アクセラレータ411Aは、CPU大106Aを介して、対象の変換前データをメモリ107Aから読み出し(507)、所定のデータ変換を行う。次にアクセラレータ411Aは、変換したデータを、CPU大106Aを介して、メモリ107Aに格納する(508)。このメモリ107Aからの変換前データの読み出し、及び変換後データの格納は、CPU大106A上のプロセッサコアのいずれか一つがメモリ制御回路を制御して実行してもよいし、CPU大106A上のメモリ制御回路が、プロセッサコアの介在なしに、直接実行してもよい。アクセラレータ411Aは、変換完了通知を、CPU大106Aに返す。CPU大106Aは、変換完了通知509をCPU小101Aに、スイッチ104A及びバッファ管理部103Aを介して、送信する(509)。
FEデータレディ通知に応答して、フロントエンドインタフェース105Aは、データリード命令を、スイッチ104Aを介して、CPU大106Aに送信する(511)。データリード命令に応答して、CPU大106Aは、メモリ107Aから指定されたデータを読み出し(512)、読み出したリードデータを、スイッチ104Aを介してフロントエンドインタフェース105Aに返す(513)。このデータリード命令の処理も、CPU大106Aのプロセッサコアのいずれか一つがメモリ制御回路を制御して実行してもよいし、CPU大106A上のメモリ制御回路がプロセッサコアの介在なしに直接実行してもよい。フロントエンドインタフェース105Aは、受信したリードデータをホスト計算機に返す。
フロントエンドインタフェース105Aは、ホスト計算機からライトコマンドを受信する。フロントエンドインタフェース105Aは、ライトコマンドを、スイッチ104A、バッファ管理部103A、及びCPU小101Aのメモリ制御回路を介して、メモリ102Aに格納する。例えば、ホスト計算機からリードコマンドが送信された場合と同じく、メモリ102A上に予めキュー領域を設定しておき、該キュー領域にホスト計算機から受信したライトコマンドを格納する。さらに、CPU小101Aは、メモリ102A上の該キュー領域からライトコマンドを取得して、解析する(601)。
CPU小101Aは、ライトコマンドを解析した結果に従って、ホスト計算機からライトデータを受信するために必要なバッファサイズを決定し、そのバッファサイズを指定したバッファ要求を、バッファ管理部103Aに送信する(602)。バッファ管理部103Aは、メモリ107Bにおいて、バッファとして使用することができるバッファ領域を、CPU大106Aから割り当てられ、管理している。バッファ管理部103Aは、そのバッファ領域の空き領域をバッファ要求に対して格納領域として割り当て、該格納領域のアドレスを指定するバッファ許可を、CPU小101Aに返す(603)。
CPU大106Bは、受信したデータをメモリ107Bに格納する(608)。このライトデータのメモリ107Bへの格納も、CPU大106B上のプロセッサコアのいずれか一つがメモリ制御回路を制御して行ってもよいし、CPU大106B上のメモリ制御回路がプロセッサコアの介在無しに直接行ってもよい。これにより、メモリ107Aまたは107Bのいずれか一方がアクセス不能のなっても、他方からライトデータを取り出すことができるので、障害によりライトデータが消失する可能性を低減できる。
CPU大106Bは、二重化完了通知をCPU大106Aに、パス110を介して返す。CPU大106Bからの二重化完了通に応答して、CPU大106Aは、二重化完了通をスイッチ104A及びバッファ管理部103Aを介して、CPU小101Aに返す(609)。
CPU大106Aからの二重化完了通知に応答して、CPU小101Aは、フロントエンドインタフェース105Aに対してライトデータの格納処理が完了したことを知らせるFEライト完了通知を、メモリ102Aに格納する。このようなフロントエンドインタフェース105への通知も、ホスト計算機から受信したライトコマンドと同じように、メモリ102A上に予めキュー領域を設定しておき、該キュー領域に格納してもよい。フロントエンドインタフェース105Aは、スイッチ104A及びバッファ管理部103Aを介して、メモリ102A上の該キュー領域からFEライト完了通知を取得する(610)。フロントエンドインタフェース105は、FEライト完了通知を取得すると、ホスト計算機に、ライト完了通知を返す。
次に、CPU小101Aは、バッファ管理部103A及びスイッチ104Aを介して、データ変換要求をCPU大106Aに送信する。CPU大106Aは、データ変換要求をアクセラレータ411Aに送信する(611)。
アクセラレータ411Aは、データ変換要求に応答して、CPU大106Aを介して変換前データをメモリ107Aから読み出し(612)、所定のデータ変換を行う。次にアクセラレータ411Aは、変換したデータを、CPU大106Aを介してメモリ107Aに書き込む(613)。このメモリ107Aからの変換前データの読み出し、及び変換後データの格納は、CPU大106A上のプロセッサコアのいずれか一つがメモリ制御回路を制御して実行してもよいし、CPU大106A上のメモリ制御回路が直接実行してもよい。変換データは、変換前ライトデータのためのバッファ領域と異なる領域に格納してもよいし、変換前ライトデータのバッファ領域と同じ領域に格納してもよい。
アクセラレータ411Aは、変換完了通知を、CPU大106Aに返す。CPU大106Aは、その変換完了通知をCPU小101Aに、スイッチ104A及びバッファ管理部103を介して、返す(614)。変換完了通知は、変換後のデータサイズを示してもよい。
CPU小101Aは、変換完了通知に応答して、変換されたデータの二重化要求を、バッファ管理部103A及びスイッチ104Aを介して、CPU大106Aに送信する(615)。二重化要求に応答して、CPU大106Aは、メモリ107Aから二重化する対象の変換後データを読み出し(616)、二重化転送として、パス110を介して別のストレージコントローラ100BのCPU大106Bに転送する。この変換後データのメモリ107Aからの読み出しも、CPU大106A上のプロセッサコアのいずれか一つがメモリ制御回路を制御して行ってもよいし、CPU大106A上のメモリ制御回路がプロセッサコアの介在無しに直接行ってもよい。
CPU大106Bは、受信したデータをメモリ107Bに格納する(617)。この変換後データのメモリ107Bへの格納も、CPU大106B上のプロセッサコアのいずれか一つがメモリ制御回路を制御して行ってもよいし、CPU大106B上のメモリ制御回路がプロセッサコアの介在無しに直接行ってもよい。これにより、障害によりメモリ107Aまたは107Bのいずれか一方がアクセス不能のなっても、他方から変換後データを取り出すことができるので、変換後データが消失する可能性を低減できる。
CPU大106Bは、二重化完了通知をCPU大106Aに、パス110を介して返す。CPU大106Bからの二重化完了通知に応答して、CPU大106Aは、二重化完了通知をスイッチ104A及びバッファ管理部103Aを介して、CPU小101Aに返す(618)。
CPU大106Aからの二重化完了通知に応答して、CPU小101Aは、バッファ管理部103A及びスイッチ104Aを介して、SSD109へのライト要求をCPU大106Aに送信する(619)。ライト要求に応答して、CPU大106Aは指定されたデータをメモリ107Aから読み出し(620)、バックエンドスイッチ108Aを介して、SSDライトコマンドと共にSSD109に送信する(621)。
次に、CPU大106Aは、SSD109へのライト完了通知を、スイッチ104A及びバッファ管理部103Aを介して、CPU小101Aに送信する(622)。ライト完了通知に応答して、CPU小101Aは、バッファ管理部103Aに、当該のライトコマンドのために確保した格納領域の開放要求を送信する(623)。格納領域の解放要求に応答して、バッファ管理部103Aは、指定された格納領域を開放し、再び新たなライト処理で使用可能とする。