以下、本発明に係るストレージシステムの一実施例を図面に基づいて説明する。
図1は、本発明に係るストレージシステムの第1実施例を示す基本構成図である。図1において、ストレージシステムは、アドオン追加機構を備えるストレージシステムとして、ホスト(ホスト計算機)10と、SSD(Solid State Drive)コントローラ20と、複数(#0~#N)のハードウェアエンジン30と、複数(#0~#M)のSSD40と、DRAM(Dynamic Random Access Memory)50を有し、各部がネットワークまたはバスを介して互いに接続される。なお、SSDコントローラ20と、各ハードウェアエンジン30と、各SSD40及びDRAM50は、ストレージ装置として構成される。
ホスト10は、CPU(Central Processing Unit)、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置であり、例えば、パーソナルコンピュータ、ワークステーション、メインフレーム等として構成される。ホスト10は、SSD40を処理するためのプロトコル(NVMe)に従って定義された要求コマンド、例えば、NVMeコマンドと、アドオン機能(既存のプログラムに、後から機能等が強化されたプログラムを追加する機能)を有するハードウェアエンジン30固有の処理を規定するために定義された1以上のアドオンコマンド、例えば、検索コマンド、グラフ処理コマンドを別々に管理し、SSDコントローラ20からの取得要求に応答して、64B(バイト)の要求コマンドをSSDコントローラ20に発行し、各ハードウェアエンジン30からの取得要求に応答して、2KBのアドオンコマンドを各ハードウェアエンジン30に発行する。
この際、要求コマンドには、例えば、SSD40へのリード要求またはライト要求であることを示す識別情報(第1の識別情報)と、各ハードウェアエンジン30へのコマンド取得要求であることを示す識別情報(第2の識別情報)のうち一方の識別情報(オペコード)と、データのリード先又はデータのライト先を示す情報であって、データをアクセスするための主アクセス情報)等の情報が付加される。
なお、各ハードウェアエンジン30へのコマンド取得要求であることを示す識別情報(第2の識別情報)が、要求コマンドに付加される場合、この要求コマンドには、各ハードウェアエンジン30で共通に利用可能な情報であって、各ハードウェアエンジン30でホスト10と情報の送受信を行う際に利用可能な第1の補助アクセス情報と、SSDコントローラ20で各ハードウェアエンジン30を判別するために利用可能な第2の補助アクセス情報と、SSDコントローラ20でSSD40に対するデータの入出力処理を実行するために利用可能な第3の補助アクセス情報が付加される。
SSDコントローラ20は、CPU、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置であって、ホスト10及び各ハードウェアエンジン30と情報の送受信を行うと共に、各SSD40及びDRAM50に対するデータの入出力を制御する制御部として構成される。
各ハードウェアエンジン30は、例えば、アドオン機能を有するハードウェアエンジンであって、再構成可能なゲートアレイである、FPGA(Field Programmable Gate Array)を用いて構成され、アドオン追加機構として機能する。各ハードウェアエンジン30は、データを処理すると共に、アドオンコマンドを解析する処理回路等を有し、例えば、データベース検索エンジン、グラフ処理エンジンとして構成される。
各SSD40は、データを格納する記憶デバイスであって、フラッシュメモリで構成される。この際、各SSD40の記憶エリア(データブロック)には、圧縮されたデータをページ単位で格納することもできる。DRAM50は、データを格納する記憶デバイスであって、各SSD40から読み出されたデータを一時保持するデータバッファとして構成される。
図2は、ホストとSSDコントローラの内部構成を含むストレージシステムの構成図である。図2において、ホスト10のメモリには、ホスト10の管理対象となるキューとして、要求コマンドキュー101と、処理完了キュー102が配置され、ホスト10の管理対象及び各ハードウェアエンジン30のアクセス対象となる領域として、複数(#0~#N)のコマンド格納領域103と、複数(#0~#N)の結果領域104と、複数(#0~#N)のログ領域105が配置される。
要求コマンドキュー101には、要求コマンドが格納され、処理完了キュー102には、要求コマンドの処理の完了を示す情報が格納される。各コマンド格納領域103には、2KB(バイト)で構成されたコマンドであって、各ハードウェアエンジン30固有の処理を規定したデータ処理要求を含むアドオンコマンドが格納される。各結果領域104には、各ハードウェアエンジン30の処理結果を示す情報が格納される。各ログ領域105には、各ハードウェアエンジン30の生成によるログ情報が格納される。各コマンド格納領域103と各結果領域104及び各ログ領域105のアドレスは、その末尾に、#0~#Nの情報が付加され、各ハードウェアエンジン30の番号(#0~#N)に対応づけて管理される。
SSDコントローラ20は、ドアベルレジスタ201と、コマンドマネージャ202と、SSDインタフェース(I/F)203と、DRAMインタフェース(I/F)204と、複数の要求コマンドFIFO205を有し、コマンドマネージャ202には、コマンドキュー206が配置される。
ドアベルレジスタ201は、ホスト10からの転送要求を格納するレジスタである。コマンドマネージャ202は、SSDコントローラ20全体を統括制御するCPUと、ホスト10及び各ハードウェアエンジン30と情報の送受信を行うインタフェースと、コマンドキュー206を構成するメモリ等を有する。コマンドキュー206は、64B(バイト)で構成された要求コマンドを最大65535個まで格納可能に構成されている。コマンドマネージャ202のCPUは、ホスト10から転送された要求コマンドをコマンドキュー206に格納し、コマンドキュー206に格納された要求コマンドの識別情報を判別する。
この際、ホスト10から転送された要求コマンドに付加された識別情報が、SSD40へのリード要求またはライト要求であることを示す識別情報(第1の識別情報)であると判別した場合、CPUは、判別結果に従ってSSD40に対するデータの入出力処理を実行し、実行結果をホスト10に転送する。一方、ホスト10から転送された要求コマンドに付加された識別情報が、各ハードウェアエンジン30へのコマンド取得要求であることを示す識別情報(第2の識別情報)であると判別した場合、CPUは、要求コマンドに付加された情報(第2の補助アクセス情報)で各ハードウェアエンジン30の機能に対応した要求コマンドFIFO205を特定し、コマンドキュー206に格納された要求コマンドを、特定した要求コマンドFIFO205に順次格納する。この後、CPUは、要求コマンドに付加された情報(第2の識別情報)を参照して、転送先のハードウェアエンジン30を特定し、各要求コマンドFIFO205に格納された要求コマンドを、格納された順に、即ち、先頭から順番に読み出し、特定したハードウェアエンジン30に転送し、その後、各ハードウェアエンジン30から、処理要求としてデータ転送要求を受信した場合、要求コマンドに付加された情報(第3の補助アクセス情報)に従ってSSD40やDRAM50に対するデータの入出力処理を実行し、要求されたデータを、データ転送要求の送信元(転送元)となるハードウェアエンジン30に転送する。
SSDインタフェース203は、コマンドマネージャ202の指示に従って各SSD40とデータの授受を行うインタフェースとして構成される。DRAMインタフェース204は、コマンドマネージャ202の指示に従ってDRAM50とデータの授受を行うインタフェースとして構成される。各要求コマンドFIFO205は、コマンドキュー206から転送された要求コマンドを順番に格納し、格納した要求コマンドを格納した順に出力する要求コマンドバッファとして構成される。この際、各要求コマンドFIFO205は、各ハードウェアエンジン30が有する機能に対応して分類されている。例えば、各ハードウェアエンジン30が2種類の機能を有する場合、各要求コマンドFIFO205は、2種類に分類されて管理される。
各ハードウェアエンジン30は、コマンドマネージャ202から要求コマンドを受信した場合、受信した要求コマンドを解析し、解析結果に従ってDMA(Direct Memory Access)転送を起動して、ホスト10から、指定のコマンド格納領域103に格納されたアドオンコマンドを取得し、取得したアドオンコマンドに従って処理を実行する。この際、DMA転送を実行するDMA転送部は、コマンドマネージャ202から受信した要求コマンドに付加された情報(第1の補助アクセス情報)を参照して、ホスト10のコマンド格納領域103から指定のアドオンコマンドを取得するコマンド取得回路として機能する。
この際、アドオンコマンドが、データベース検索処理である場合、各ハードウェアエンジン30は、処理要求として、データ転送要求をコマンドマネージャ202に転送する。データ転送要求を受信したコマンドマネージャ202は、要求コマンドに付加された情報(第3の補助アクセス情報)を基にSSD40から、例えば、ページ単位のデータを読み出し、読み出したページ単位のデータをDRAM50に一時保持し、保持されたページ単位のデータをDRAM50から、データ要求転送元のハードウェアエンジン30に転送する。データを受信したハードウェアエンジン30は、DRAM50から転送されたデータ(ページ単位のデータ)を解析すると共に、転送されたデータ(ページ単位のデータ)の中から検索条件を満たすデータを抽出するデータ処理を実行し、データ処理の処理結果や解析結果等をホスト10の指定の結果領域104にDMA転送する。
ハードウェアエンジン30が、データベース検索処理を実行する際に、ページ単位のデータを検索対象とすることで、データベース検索処理を高速化することができる。この場合、同一機能を有する複数のハードウェアエンジン30が、同一の処理内容を有するアドオンコマンドに従って並列にデータベース検索処理を実行することで、DRAM50がボトルネックとなるのを防止できるので、データベース検索処理をより高速化することができる。
また、エラーなどのログ情報を生成する場合、ハードウェアエンジン30は、要求コマンドに付加された情報(第1の補助アクセス情報)を参照し、生成したログ情報を、ホスト10の指定のログ領域105にDMA転送し、データ処理の処理結果を、ホスト10の指定の結果領域104にDMA転送する。なお、各ハードウェアエンジン30は、DRAM50から転送されたデータ(ページ単位のデータ)が、圧縮されたデータである場合、圧縮されたデータをページ単位で伸張し、伸張されたデータ(ページ単位のデータ)を検索対象のデータとして処理することもできる。
図3は、要求コマンドの構成図である。図3において、要求コマンド140は、例えば、情報を格納する領域として、上位領域150と下位領域170を有し、全体で64B(バイト)のNVMeコマンドとして構成される。上位領域150は、ベンダが自由に利用可能な情報格納領域であって、各ハードウェアエンジン30共通の情報等が格納される。下位領域170は、コマンド固有のID(Identification)や要求コマンドの識別情報を格納する情報格納領域である。下位領域170には、要求コマンドのID171と、要求コマンドに関連したデータの格納形式172と、FUSE173と、オペコード(Opcode)174が格納される。
ID171は、要求コマンド140固有の識別子であり、このID171が、各要求コマンド140に付加される。データの格納形式172におけるPRP(Physical region list)は、物理領域のページリストであり、データが格納されている領域(データ格納先)である。物理領域のページリストに記録された情報は、SSDコントローラ20が、SSD40に対するデータの入出力処理でSSD40をアクセスする際に利用するアクセス情報となる。また、データの格納形式172におけるSGL(Scatter Gather List)は、メモリアドレス空間のデータ構造を示している。本実施例では、PRPを用いることとする。FUSE173は利用しないので、説明は割愛する。
オペコード(Opcode)174は、要求コマンド140が、SSD40に対するデータの入出力処理(データのリード処理又はデータのライト処理)を要求するコマンド、あるいは各ハードウェアエンジン30による処理(データベース検索処理)を要求するコマンドであるか否を識別するための識別情報であって、要求コマンドの種類を特定する識別情報である。即ち、要求コマンドが、SSD40に対するデータの入出力処理を要求するコマンドである場合、オペコード174には、SSD40へのリード要求またはライト要求であることを示す識別情報(第1の識別情報)が付加される。一方、要求コマンドが、各ハードウェアエンジン30による処理を要求するコマンドである場合、オペコード174には、各ハードウェアエンジン30へのコマンド取得要求であることを示す識別情報(第2の識別情報)が付加される。
図4は、ハードウェアエンジン用要求コマンドの構成図である。図4において、要求コマンド140は、ハードウェアエンジン用要求コマンドとして構成されており、この要求コマンド140の上位領域150には、各ハードウェアエンジン30共通の情報等が記録される。
即ち、各ハードウェアエンジン30へのコマンド取得要求であることを示す識別情報が付加された要求コマンド140には、各ハードウェアエンジン30で共通に利用可能な情報であって、各ハードウェアエンジン30でホスト10と情報の送受信を行う際に利用可能な第1の補助アクセス情報と、SSDコントローラ20で各ハードウェアエンジン30を判別するために利用可能な第2の補助アクセス情報と、SSDコントローラ20で各ハードウェアエンジン30から要求されたデータを取得するために利用可能な第3の補助アクセス情報が付加される。
具体的には、要求コマンド140の上位領域150には、アドオンコマンドのバージョン151と、アドオン機能識別子152と、アドオン機能搭載個数153と、アドオンコマンドを格納するホスト10のアドレス(アドオンコマンド格納ホストアドレス)154と、アドオンコマンドのサイズ(アドオンコマンドサイズ)155と、ログを格納するホスト10のアドレス(ログ格納ホストアドレス)156と、SSD40に格納されているデータの読み出し開始アドレス157と、SSD40に格納されているデータのサイズ158と、各ハードウェアエンジン30を識別するためのエンジン識別子159が記録される。
アドオンコマンドのバージョン151と、アドオンコマンドを格納するホスト10のアドレス(アドオンコマンド格納ホストアドレス)154と、アドオンコマンドのサイズ(アドオンコマンドサイズ)155及びログを格納するホスト10のアドレス(ログ格納ホストアドレス)156は、第1の補助アクセス情報として構成され、アドオン機能識別子152と、アドオン機能搭載個数153及びエンジン識別子159は、第2の補助アクセス情報として構成され、SSD40に格納されているデータの読み出し開始アドレス157及びSSD40に格納されているデータのサイズ158は、第3の補助アクセス情報として構成される。
アドオンコマンドのバージョン151には、ホスト10の各コマンド格納領域103に格納されるアドオンコマンドのバージョンが記載される。アドオンコマンドのバージョンは、各ハードウェアエンジン30で各ハードウェアエンジンのバージョンと比較される。アドオン機能識別子152には、各要求コマンドFIFO205を種別するための識別子であって、各ハードウェアエンジン30の機能に対応した情報が記載される。コマンドマネージャ201は、要求コマンドをいずれかの要求コマンドFIFO205に分配する際又は要求コマンドをいずれかのハードウェアエンジン30に転送する際に、アドオン機能識別子152に記載された識別子で分配先又は転送先を判断する。なお、アドオン機能識別子152では、要求コマンドの転送先を判断できない場合、コマンドマネージャ201は、エンジン識別子159で要求コマンドの転送先を判断する。
アドオンの搭載個数153には、SSDコントローラ20に接続されるハードウェアエンジン30が何個搭載されているかの情報が記載される。この情報は、コマンドマネージャ202が、確保すべき要求コマンドFIFO205の個数を決定するのに利用される。アドオンコマンドを格納するホスト10のアドレス154には、ホスト10のコマンド格納領域103を特定するアドレスが記載される。アドオンコマンドサイズ155には、ホスト10の各コマンド格納領域103に格納されているアドオンコマンドのサイズが記載される。このアドオンコマンドのサイズの情報は、各コマンドマネージャ202が、DMA転送で取得すべきデータサイズの設定に利用される。
ログを格納するホスト10のアドレス156には、ホスト10の各ログ領域105を特定するアドレスが記載される。このアドレスは、各コマンドマネージャ202が、DMA転送でログ情報をホスト10に転送する際に利用される。SSD40に格納されるデータの読み出し開始アドレス157には、データベース検索処理の処理対象となるデータを格納しているSSD40の開始アドレスが記載される。SSD40に格納されているデータサイズ158には、SSD40に格納されているデータであって、データベース検索処理の処理対象となるデータのサイズが記載される。
この際、ハードウェアエンジン用要求コマンド140の下位領域170のうち、オペコード174には、要求コマンド140が、ハードウェアエンジン用要求コマンドであることを示す識別情報、即ち、要求コマンドが、各ハードウェアエンジン30による処理を要求するコマンドであって、各ハードウェアエンジン30へのコマンド取得要求であることを示す識別情報が記録される。
図5は、ストレージシステムの処理を説明するためのフローチャートである。この処理は、ホスト10が、SSDコントローラ20に転送要求を発行することによって開始される。この際、ハードウェアエンジン用要求コマンド140の下位領域170のうち、オペコード174には、要求コマンド140が、ハードウェアエンジン用要求コマンドであることを示す識別情報、即ち、要求コマンドが、各ハードウェアエンジン30による処理を要求するコマンドであって、各ハードウェアエンジン30へのコマンド取得要求であることを示す識別情報(第2の識別情報)が記録される。
図5において、ホスト10が、SSDコントローラ20に転送要求を発行し(S11)、転送要求の値をSSDコントローラ20のドアベルレジスタ201に書き込み、コマンドDMAを起動する(S12)。コマンドDMAが起動すると、コマンドマネージャ202は、ホスト10から、要求コマンドキュー101に格納されている要求コマンド(NVMeコマンド)140をコマンドDMAで取得し(S13)、取得した要求コマンド140をコマンドキュー206に登録する(S14)。この後、コマンドマネージャ202は、コマンドキュー206に登録した要求コマンド140のオペコード174を判別し、要求コマンド140が、アドオン用コマンド(ハードウェアエンジン用要求コマンド140)であるか否かを判定する(S15)。
コマンドマネージャ202は、ステップS15で否定の判定結果を得た場合、即ち、要求コマンド140が、アドオン用コマンドでない場合、要求コマンド140の下位領域170のうちデータの格納形式172に記録されたデータ格納先を基にSSD40に対するデータの入出力処理(データのリード処理又はデータのライト処理)を実行する(S16)。データの入出力処理が完了すると、データの入出力処理の実行が完了したことが、SSDインタフェース203からコマンドマネージャ202に通知される(S17)。この後、コマンドマネージャ202は、ホスト10に対して、要求コマンド140で要求された処理の実行が完了したことを通知し(S18)、このルーチンでの処理を終了する。
一方、コマンドマネージャ202は、ステップS15で肯定の判定結果を得た場合、即ち、要求コマンド140が、アドオン用コマンド(ハードウェアエンジン用要求コマンド140)である場合、要求コマンド140の上位領域150のうちアドオン機能識別子152を判別し、この判別結果から、要求コマンド140の分配先となる要求コマンドFIFO205を、各ハードウェアエンジン30の機能に対応づけて特定し、特定した要求コマンドFIFO205に要求コマンド140を書き込む(S19)。この後、コマンドマネージャ202は、要求コマンドFIFO205に書き込まれた要求コマンド140のうち先頭に積んである要求コマンド140を、アドオン機能識別子152に対応した機能を有するハードウェアエンジン(FPGA)30に転送する(S20)。
要求コマンド140を受信したハードウェアエンジン30は、DMAを起動し、要求コマンド140の上位領域150のうちアドオンコマンドを格納するホスト10のアドレス154を基にホスト10から、ホスト10のコマンド格納領域103に格納されているアドオンコマンドを取得し(S21)、取得したアドオンコマンドの内容を解析し、設定内容に問題があるか等、アドオンコマンドの内容にエラーを検出したか否かを判定する(S22)。
アドオンコマンドを受信したハードウェアエンジン30は、ステップS22で否定の判定結果を得た場合、即ち、取得したアドオンコマンドの内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、データベース検索処理で必要なデータの転送要求(データ転送要求)をコマンドマネージャ202に転送する。データ転送要求を受信したコマンドマネージャ202は、要求コマンド140の上位領域150のうちSSD40に格納されているデータの読み出し開始アドレス157と、SSD40に格納されているデータサイズ158を参照して、いずれかのSSD40からデータ(ページ単位のデータ)を読み出し、読み出したデータをDRAM50にデータを転送し、転送したデータをDRAM50に一時保持し、その後、DRAM50に保持されたデータ(ページ単位のデータ)を、データ転送要求の転送元(送信元)となる各ハードウェアエンジン30に転送する(S23)。
DRAM50から転送されたデータを受信したハードウェアエンジン30は、データ処理を起動し、アドオンコマンドの内容に従ってデータベース検索処理を実行し(S24)、この実行結果をホスト10の結果領域104へDMAで転送し(S25)、この後、コマンドマネージャ202に対して、要求コマンド140の実行完了を通知する(S26)。
要求コマンド140の実行完了通知を受信したコマンドマネージャ202は、ホスト10に対して、要求コマンド140の実行完了を通知する(S27)。これにより、ホスト10の処理完了キュー102には、要求コマンド140の実行完了の情報が格納される。
一方、ステップS22で肯定の判定結果を得た場合、即ち、取得したアドオンコマンドの内容にエラーを検出した場合、取得したアドオンコマンドの内容にエラーを検出したハードウェアエンジン30は、アドオンコマンドのエラーの内容を示すログ情報を生成し、生成したログ情報をDMAでホスト10のログ領域105に転送し(S28)、コマンドマネージャ202に対して、要求コマンド140の処理の実行をエラーで完了したことを通知し、処理完了通知を処理完了キュー102に格納させる(S29)。この後、コマンドマネージャ202は、ホスト10に対して、要求コマンド140で要求された処理の実行をエラーで完了したことを通知する(S30)。この場合、ホスト10は、ログ領域105に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域103に格納されたアドオンコマンドのエラー箇所を修正後、要求コマンド140を再投入するために、再度、転送要求をSSDコントローラ20に送信し、その後、SSDコントローラ20からの取得要求に応答して、ハードウェアエンジン用要求コマンド140を再度発行する。
ステップS27又はステップS30の後、コマンドマネージャ202は、各要求コマンドFIFO205に要求コマンドが存在するか否かを判定し(S31)、各要求コマンドFIFO205に要求コマンドが存在する場合、ステップS20の処理に戻り、ステップS20~S31の処理を繰り返し、各要求コマンドFIFO205に要求コマンドが存在しない場合、このルーチンでの処理を終了する。
本実施例によれば、要求コマンド140を判別して、SSD40に対するデータの入出力処理とSSD40から得られたデータを処理対象とするデータ処理(データベース検索処理)とを別々に実行することができる。また、本実施例によれば、ホスト10で、NVMe標準プロトコルで定義された要求コマンド140と、各ハードウェアエンジン固有の処理を規定したアドオンコマンドを別々に管理しているので、アドオンコマンドの拡張性を向上させることができる。さらに、NVMe標準プロトコルで定義された要求コマンド140が64Bの容量で構成されるので、コマンドキュー206には、最大65535個の要求コマンド140を格納することができ、結果として、コマンドキュー206に格納された各要求コマンド140の処理を並行して実行することが可能になり、SSD40の性能を向上させることができる。
また、一つのコマンドキュー206に、64Bの要求コマンド140を複数個格納できるので、SSDコントローラ20のハードウェアの設計が容易になると共に、2種類のコマンドキューを配置する構成を採用した場合に比べて、コマンドキューのサイズを削減できる。また、ホスト10と各ハードウェアエンジン30との間では、DMA転送で情報の送受信を行っているので、ホスト10のCPUの負荷を低減することができる。
本実施例は、同一機能を有する3台のハードウェアエンジン30が存在する場合、SSDコントローラ20が、一つの要求コマンドFIFO205で要求コマンド140を管理するものである。
図6は、本発明に係るストレージシステムの第2実施例を示す構成図である。図6において、本実施例におけるストレージシステムは、ハードウェアエンジンとして、同一の機能を有する3台(#0~#2)のハードウェアエンジン30が存在する。
この際、3台のハートウェアエンジン30に対応して、ホスト10には、#0~#2のコマンド格納領域103と、#0~#2の結果領域104と、#0~#2のログ領域105が配置され、SSDコントローラ20には、同一の機能を有する3台のハードウェアエンジン30を管理するために、1個の要求コマンドFIFO205が配置されるが、他の構成は実施例1と同様である。各コマンド格納領域103と各結果領域104及び各ログ領域105のアドレスは、その末尾に、#0~#2の情報が付加され、各ハードウェアエンジン30の番号(#0~#2)に対応づけて管理される。また、SSDコントローラ20と各ハートウェアエンジン30とを専用経路で接続することもできる。また、ホスト10には、コマンド140の再投入を制御するためのコマンド再投入制御部106が配置される。
コマンドマネージャ202は、ホスト10から取得した要求コマンド140が、アドオン用コマンド(ハードウェア用要求コマンド)である場合、要求コマンド140の上位領域150のうちアドオン機能識別子152を判別し、判別結果から、要求コマンド140の転送先として、1個の要求コマンドFIFO205を特定し、特定した1個の要求コマンドFIFO205に要求コマンド140を書き込み、要求コマンドFIFO205に書き込まれた要求コマンド140のうち先頭に積んである要求コマンド140から順番に、専用経路を介して、いずれかのハードウェアエンジン(FPGA)30に順番に転送する。
要求コマンド140を受信したハードウェアエンジン30は、DMAを起動し、要求コマンド140の上位領域150のうちアドオンコマンドを格納するホスト10のアドレス154を基にホスト10から、ホスト10のコマンド格納領域103に格納されているアドオンコマンドを取得し、取得したアドオンコマンドの内容を解析し、設定内容に問題があるか等、アドオンコマンドの内容にエラーを検出したか否かを判定する。
アドオンコマンドを受信したハードウェアエンジン30は、取得したアドオンコマンドの内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、データベース検索処理で必要なデータの転送をコマンドマネージャ202に要求する。この場合、データ転送要求を受信したコマンドマネージャ202は、要求コマンド140の上位領域150のうちSSD40に格納されているデータの読み出し開始アドレス157と、SSD40に格納されているデータサイズ158を参照して、いずれかのSSD40からデータを読み出し、読み出したデータをDRAM50にデータを転送し、転送したデータをDRAM50に一時保持し、その後、DRAM50に保持されたデータを、データ転送要求の転送元(送信元)となるハードウェアエンジン30に転送する。
DRAM50から転送されたデータを受信したハードウェアエンジン30は、データ処理を起動し、アドオンコマンドの内容に従ってデータベース検索処理を実行し、この実行結果をホスト10の各結果領域104へDMAで転送し、この後、コマンドマネージャ202に対して、要求コマンド140の実行完了を通知する。要求コマンド140の実行完了通知を受信したコマンドマネージャ202は、ホスト10に対して、要求コマンド140の実行完了を通知する。
一方、取得したアドオンコマンドの内容にエラーを検出した場合、取得したアドオンコマンドの内容にエラーを検出したハードウェアエンジン30は、アドオンコマンドのエラーの内容を示すログ情報を生成し、生成したログ情報をDMAでホスト10のログ領域105に転送し、コマンドマネージャ202に対して、要求コマンド140の処理の実行をエラーで完了したことを通知する。この後、コマンドマネージャ202は、ホスト10に対して、要求コマンド140で要求された処理の実行をエラーで完了したことを通知する。この場合、ホスト10のコマンド再投入制御部106は、ログ領域105に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域103に格納されたアドオンコマンドのエラー箇所を修正後、ハードウェアエンジン用要求コマンド140を再投入するための処理として、再度、転送要求をSSDコントローラ20に送信し、その後、SSDコントローラ20からの取得要求に応答して、ハードウェアエンジン用要求コマンド140を再度発行する。
図7は、ハードウェアエンジン用要求コマンドと要求コマンドFIFOの構成を説明するための概念図である。
図7において、ホスト10が、例えば、同一機能を有する3台のハードウェアエンジン30に対する要求コマンド(ハードウェアエンジン用要求コマンド)として、#0~#2の要求コマンド140を順次発行する場合、#0~#2の要求コマンド140のアドオン機能識別子152には、各ハードウェアエンジン30が同一の機能を有することを意味する情報として、「0」が付加される。
また、#0~#2の要求コマンド140のうち、コマンドID171には、#0~#2の要求コマンド140固有の情報であって、各要求コマンド140を特定する情報が付加されると共に、コマンドID171の末尾に「0」~「2」が付加される。同様に、アドオンコマンド格納ホストのアドレス154には、#0~#2のコマンド格納領域103のアドレスを特定する情報として、アドレスの末尾に「0」~「2」が付加され、アドオンコマンドサイズ155には、#0~#2のアドオンコマンドのサイズを特定する情報として、サイズの末尾に「0」~「2」が付加され、ログ格納ホストアドレス156には、#0~#2のログ領域105のアドレスを特定する情報として、アドレスの末尾に「0」~「2」が付加される。
要求コマンドFIFO205には、コマンドマネージャ202が受信した要求コマンド140が、受信した順番に書き込まれる。例えば、コマンドマネージャ202が、#0~#2の要求コマンド140を、#0~#2の順に受信した場合、#0の要求コマンド140から順番に要求コマンドFIFO205に書き込まれる。要求コマンドFIFO205に書き込まれた要求コマンド140は、#0~#2の順に各ハードウェアエンジン30に転送される。例えば、まず、#0の要求コマンド140が、#0のハードウェアエンジン30に転送され、次に、#1の要求コマンド140が、#1のハードウェアエンジン30に転送され、その後、#2の要求コマンド140が、#2のハードウェアエンジン30に転送される。
図8は、ハードウェアエンジンの構成図である。図8において、各ハードウェアエンジン30は、各ハードウェアエンジン30全体を統括制御するCPU、SSDコントローラ20やホスト10とデータやコマンドの授受を行うインタフェースの他に、各ハードウェアエンジン30固有のデータ処理、例えば、データベース検索処理やグラフ処理を実行する処理回路301と、ホスト10から取得したアドオンコマンドやSSDコントローラ20から転送された要求コマンド140を格納するレジスタブロック302と、レジスタブロック302に格納されたアドオンコマンドや要求コマンド140の内容にエラーがあるか否かを検出するエラー検出回路303から構成される。処理回路301には、処理回路301の処理結果を格納する結果格納部304と、ログ情報を生成するログ生成部305が配置される。
処理回路301は、レジスタブロック302に格納されたアドオンコマンド又は要求コマンド140の内容を解析し、解析結果に従ってデータ処理を実行する。この際、処理回路301は、DRAM50から転送されたデータを基にデータベース検索処理またはグラフ処理を実行する。ログ生成部305は、レジスタブロック302に格納されたアドオンコマンドの内容にエラーがある場合、エラーの内容をログ情報として生成すると共に、処理回路301で処理できないデータに関するログ情報を生成する。
本実施例によれば、実施例1と同様の効果を奏することができると共に、同一機能を有する3台のハードウェアエンジン30が存在する場合、SSDコントローラ20が、一つの要求コマンドFIFO205で要求コマンド140を管理することができる。
本実施例は、2種類の機能を有するハードウェアエンジン30が存在する場合、SSDコントローラ20が、2種類の要求コマンドFIFO205で要求コマンド140を管理するものである。
図9は、本発明に係るストレージシステムの第3実施例を示す構成図である。図9において、本実施例におけるストレージシステムは、ハードウェアエンジンとして、2種類の機能(#A、#B)を有する5台(#0~#4)のハードウェアエンジン30が存在する。
この際、5台のハートウェアエンジン30に対応して、ホスト10には、#0~#4のコマンド格納領域103と、#0~#4の結果領域104と、#0~#4のログ領域105が配置され、SSDコントローラ20には、2種類の機能(#A、#B)を有する5台のハードウェアエンジン30に対する要求コマンド140を管理するために、2種類(#A、#B)の要求コマンドFIFO205が配置されるが、他の構成は実施例1と同様である。なお、各コマンド格納領域103と各結果領域104及び各ログ領域105のアドレスは、その末尾に、#0~#4の情報が付加され、各ハードウェアエンジン30の番号(#0~#4)に対応づけて管理される。また、ホスト10には、コマンド140の再投入を制御するためのコマンド再投入制御部106が配置される。
コマンドマネージャ202は、ホスト10から取得した要求コマンド140が、アドオン用コマンド(ハードウェア用要求コマンド)である場合、要求コマンド140の上位領域150のうちアドオン機能識別子152を判別し、この判別結果から、要求コマンド140の分配先として、2種類の機能に分かれて配置された複数の要求コマンドFIFO205のうちいずれか一つの機能に属する要求コマンドFIFO205を特定し、特定した機能の要求コマンドFIFO205に要求コマンド140を書き込む。
例えば、コマンドマネージャ202は、要求コマンド140の分配先として、一方の機能(#A)に属する要求コマンドFIFO205を特定した場合、特定した一方の機能(#A)に属する要求コマンドFIFO205に要求コマンド140を書き込む。一方、要求コマンド140の分配先として、他方の機能(#B)に属する要求コマンドFIFO205を特定した場合、特定した他方の機能(#B)に属する要求コマンドFIFO205に要求コマンド140を書き込む。
この後、#Aの要求コマンドFIFO205に書き込まれた要求コマンド140のうち先頭に積んである要求コマンド140をハードウェアエンジン(FPGA)30に転送する場合、コマンドマネージャ202は、#Aの機能に属するハードウェアエンジン30の中から、要求コマンド140の上位領域150に記録されたエンジン識別子159で指定されたハードウェアエンジン30を選択し、選択したハードウェアエンジン30に要求コマンド140を転送する。例えば、コマンドマネージャ202は、エンジン識別子159で指定されたハードウェアエンジン30が、#0のハードウェアエンジン30である場合、#0、#2、#3のハードウェアエンジン30の中から、#0のハードウェアエンジン30を選択して、要求コマンド140を転送する。
一方、#Bの要求コマンドFIFO205に書き込まれた要求コマンド140のうち先頭に積んである要求コマンド140をハードウェアエンジン(FPGA)30に転送する場合、コマンドマネージャ202は、#Bの機能に属するハードウェアエンジン30の中から、要求コマンド140の上位領域150に記録されたエンジン識別子159で指定されたハードウェアエンジン30を選択し、選択したハードウェアエンジン30に要求コマンド140を転送する。例えば、コマンドマネージャ202は、エンジン識別子159で指定されたハードウェアエンジン30が、#1のハードウェアエンジン30である場合、#1、#4のハードウェアエンジン30の中から、#1のハードウェアエンジン30を選択して、要求コマンド140を転送する。
要求コマンド140を受信したハードウェアエンジン30、例えば、#0のハードウェアエンジン30は、DMAを起動し、要求コマンド140の上位領域150のうちアドオンコマンドを格納するホスト10のアドレス154を基にホスト10から、コマンド格納領域(#0のコマンド格納領域)103に格納されているアドオンコマンド(#0のアドオンコマンド)を取得し、取得したアドオンコマンド(#0のアドオンコマンド)の内容を解析し、設定内容に問題があるか等、アドオンコマンド(#0のアドオンコマンド)の内容にエラーを検出したか否かを判定する。
#0のハードウェアエンジン30は、取得したアドオンコマンド(#0のアドオンコマンド)の内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、データベース検索処理で必要なデータの転送をコマンドマネージャ202に要求する。この場合、データ転送要求を受信したコマンドマネージャ202は、要求コマンド140の上位領域150のうちSSD40に格納されているデータの読み出し開始アドレス157と、SSD40に格納されているデータサイズ158を参照して、いずれかのSSD40からデータを読み出し、読み出したデータをDRAM50にデータを転送し、転送したデータをDRAM50に一時保持し、その後、DRAM50に保持されたデータを、データ転送要求送信元となる#0のハードウェアエンジン30に転送する。
DRAM50から転送されたデータを受信したハードウェアエンジン(#0のハードウェアエンジン)30は、データ処理を起動し、アドオンコマンドの内容に従ってデータベース検索処理を実行し、この実行結果をホスト10の結果領域(#0の結果領域)104へDMAで転送し、この後、コマンドマネージャ202に対して、要求コマンド140の実行完了を通知する。要求コマンド140の実行完了通知を受信したコマンドマネージャ202は、ホスト10に対して、要求コマンド140の実行完了を通知する。
一方、取得したアドオンコマンド(#0のアドオンコマンド)の内容にエラーを検出した場合、#0のハードウェアエンジン30は、アドオンコマンド(#0のアドオンコマンド)のエラーの内容を示すログ情報を生成し、生成したログ情報をDMAでホスト10のログ領域(#0のログ領域)105に転送し、コマンドマネージャ202に対して、要求コマンド140の処理の実行をエラーで完了したことを通知する。この後、コマンドマネージャ202は、ホスト10に対して、要求コマンド140で要求された処理の実行をエラーで完了したことを通知する。この場合、ホスト10のコマンド再投入制御部106は、ログ領域(#0のログ領域)105に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域(#0のコマンド格納領域)103に格納されたアドオンコマンド(#0のアドオンコマンド)のエラー箇所を修正後、要求コマンド140を再投入するための処理を実行する。例えば、コマンド再投入制御部106は、再度、転送要求をSSDコントローラ20に送信し、その後、SSDコントローラ20からの取得要求に応答して、第2の識別情報が付加されたハードウェアエンジン用要求コマンド140を再度発行する。
また、要求コマンド140を受信したハードウェアエンジン30、例えば、#1のハードウェアエンジン30は、DMAを起動し、要求コマンド140の上位領域150のうちアドオンコマンドを格納するホスト10のアドレス154を基にホスト10から、コマンド格納領域(#1のコマンド格納領域)103に格納されているアドオンコマンド(#1のアドオンコマンド)を取得し、取得したアドオンコマンド(#1のアドオンコマンド)の内容を解析し、設定内容に問題があるか等、アドオンコマンド(#1のアドオンコマンド)の内容にエラーを検出したか否かを判定する。
#1のハードウェアエンジン30は、取得したアドオンコマンド(#1のアドオンコマンド)の内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、グラフ処理で必要なデータの転送をコマンドマネージャ202に要求する。この場合、データ転送要求を受信したコマンドマネージャ202は、要求コマンド140の上位領域150のうちSSD40に格納されているデータの読み出し開始アドレス157と、SSD40に格納されているデータサイズ158を参照して、いずれかのSSD40からデータを読み出し、読み出したデータをDRAM50にデータを転送し、転送したデータをDRAM50に一時保持し、その後、DRAM50に保持されたデータを、#1のハードウェアエンジン30に転送する。
DRAM50から転送されたデータを受信した、#1のハードウェアエンジン30は、データ処理を起動し、アドオンコマンドの内容に従ってグラフ処理を実行し、この実行結果をホスト10の結果領域(#1の結果領域)104へDMAで転送し、この後、コマンドマネージャ202に対して、要求コマンド140の実行完了を通知する。要求コマンド140の実行完了通知を受信したコマンドマネージャ202は、ホスト10に対して、要求コマンド140の実行完了を通知する。
一方、取得したアドオンコマンド(#1のアドオンコマンド)の内容にエラーを検出した場合、#1のハードウェアエンジン30は、アドオンコマンド(#1のアドオンコマンド)のエラーの内容を示すログ情報を生成し、生成したログ情報をDMAでホスト10のログ領域(#1のログ領域)105に転送し、コマンドマネージャ202に対して、要求コマンド140の処理の実行をエラーで完了したことを通知する。この後、コマンドマネージャ202は、ホスト10に対して、要求コマンド140で要求された処理が、エラーで完了したことを通知する。この場合、ホスト10のコマンド再投入制御部106は、ログ領域(#1のログ領域)105に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域(#1のコマンド格納領域)103に格納されたアドオンコマンド(#1のアドオンコマンド)のエラー箇所を修正後、要求コマンド140を再投入するための処理を実行する。例えば、コマンド再投入制御部106は、再度、転送要求をSSDコントローラ20に送信し、その後、SSDコントローラ20からの取得要求に応答して、第2の識別情報が付加されたハードウェアエンジン用要求コマンド140を再度発行する。
図10は、ハードウェアエンジン用要求コマンドの要部構成図である。図10において、ホスト10が、例えば、2種類の機能(#A、#B)を有する5台のハードウェアエンジン30のうち#Aの機能を有する3台のハードウェアエンジン(#0、#2、#3のハードウェアエンジン)30に対する要求コマンド(ハードウェアエンジン用要求コマンド)として、#0、#2、#3の要求コマンド140を順次発行する場合、#0、#2、#3の要求コマンド140のアドオン機能識別子152には、#0、#2、#3のハードウェアエンジン30が、#Aの機能を有することを意味する情報として、「0」が付加される。また、#0、#2、#3の要求コマンド140には、要求コマンド名160として、それぞれ「CMD0」、「CMD2」、「CMD3」の情報が付加される。
一方、ホスト10が、例えば、5台のハードウェアエンジン30のうち#Bの機能を有する2台のハードウェアエンジン(#1、#4のハードウェアエンジン)30に対する要求コマンド(ハードウェアエンジン用要求コマンド)として、#1、#4の要求コマンド140を順次発行する場合、#1、#4の要求コマンド140のアドオン機能識別子152には、#1、#4のハードウェアエンジン30が、#Bの機能を有することを意味する情報として、「1」が付加される。また、#1、#4の要求コマンド140には、要求コマンド名160として、それぞれ「CMD1」、「CMD4」の情報が付加される。
図11は、ハードウェアエンジン用要求コマンドと要求コマンドFIFOの構成を説明するための概念図である。
図11において、ホスト10が、例えば、2種類の機能(#A、#B)を有する5台のハードウェアエンジン30のうち#Aの機能を有する3台のハードウェアエンジン(#0、#2、#3のハードウェアエンジン)30に対する要求コマンド(ハードウェアエンジン用要求コマンド)として、#0、#2、#3の要求コマンド140を順次発行する場合、#0、#2、#3の要求コマンド140のコマンドID171には、#0、#2、#3の要求コマンド140を識別するための情報として、コマンドIDの末尾に、「0」、「2」、「3」がそれぞれ付加される。また、#0、#2、#3の要求コマンド140のアドオン機能識別子152には、#0、#2、#3のハードウェアエンジン30が、#Aの機能を有することを意味する情報として、「0」が付加される。さらに、#0、#2、#3の要求コマンド140のエンジン識別子159には、#0、#2、#3のハードウェアエンジン30を識別するための情報として、「0」、「2」、「3」がそれぞれ付加される。
また、#0、#2、#3の要求コマンド140のうち、アドオンコマンド格納ホストのアドレス154には、#0、#2、#3のコマンド格納領域103のアドレスを特定する情報として、アドレスの末尾に「0」、「2」、「3」がそれぞれ付加され、アドオンコマンドサイズ155には、#0、#2、#3のアドオンコマンドのサイズを特定する情報として、サイズの末尾に「0」、「2」、「3」がそれぞれ付加され、ログ格納ホストアドレス156には、#0、#2、#3のログ領域105のアドレスを特定する情報として、アドレスの末尾に「0」、「2」、「3」がそれぞれ付加される。
一方、ホスト10が、例えば、5台のハードウェアエンジン30のうち#Bの機能を有する2台のハードウェアエンジン(#1、#4のハードウェアエンジン)30に対する要求コマンド(ハードウェアエンジン用要求コマンド)として、#1、#4の要求コマンド140を順次発行する場合、#1、#4の要求コマンド140のコマンドID171には、#1、#4の要求コマンド140を識別するための情報として、コマンドIDの末尾に、「1」、「4」がそれぞれ付加される。また、#1、#4の要求コマンド140のアドオン機能識別子152には、#1、#4のハードウェアエンジン30が、#Bの機能を有することを意味する情報として、「1」が付加される。さらに、#1、#4の要求コマンド140のエンジン識別子159には、#1、#4のハードウェアエンジン30を識別するための情報として、「1」、「4」がそれぞれ付加される。
また、#1、#4の要求コマンド140のうち、アドオンコマンド格納ホストのアドレス154には、#1、#4のコマンド格納領域103のアドレスを特定する情報として、アドレスの末尾に「1」、「4」がそれぞれ付加され、アドオンコマンドサイズ155には、#1、#4のアドオンコマンドのサイズを特定する情報として、サイズの末尾に「1」、「4」がそれぞれ付加され、ログ格納ホストアドレス156には、#1、#4のログ領域105のアドレスを特定する情報として、アドレスの末尾に「1」、「4」がそれぞれ付加される。
#Aの要求コマンドFIFO205には、コマンドマネージャ202が受信した要求コマンド140が、受信した順番に書き込まれる。例えば、コマンドマネージャ202が、#0、#2、#3の要求コマンド140を、#0、#2、#3の順に受信した場合、#0、#2、#3の要求コマンド140は、#0の要求コマンド140から順番に要求コマンドFIFO205に書き込まれる。要求コマンドFIFO205に書き込まれた要求コマンド140は、#0、#2、#3の順に各ハードウェアエンジン30に転送される。例えば、まず、#0の要求コマンド140が、#0のハードウェアエンジン30に転送され、次に、#2の要求コマンド140が、#2のハードウェアエンジン30に転送され、その後、#3の要求コマンド140が、#3のハードウェアエンジン30に転送される。
また、#Bの要求コマンドFIFO205には、コマンドマネージャ202が受信した要求コマンド140が、受信した順番に書き込まれる。例えば、コマンドマネージャ202が、#1、#4の要求コマンド140を、#1、#4の順に受信した場合、#1、#4の要求コマンド140は、#1の要求コマンド140から順番に要求コマンドFIFO205に書き込まれる。要求コマンドFIFO205に書き込まれた要求コマンド140は、#1、#4の順に各ハードウェアエンジン30に転送される。例えば、まず、#1の要求コマンド140が、#1のハードウェアエンジン30に転送され、次に、#4の要求コマンド140が、#4のハードウェアエンジン30に転送される。
なお、エンジン識別子159は、各ハードウェアエンジン30を識別するために用いられる。即ち、ハードウェアエンジン30が1台しか存在しない場合、コマンドID171の番号を、固定された番号に設定しても、エンジン識別子159を用いることなく、ハードウェアエンジン30を特定することはできる。しかし、ハードウェアエンジン30が複数台存在する場合、コマンドID171の番号を固定された番号で順番に設定しても、多数の要求コマンド140を扱う際に、各要求コマンド140に付加されたコマンドID171だけでは、各ハードウェアエンジン30を特定できない。そのため、複数の機能を有するハードウェアエンジン30が複数台存在する場合、各ハードウェアエンジン30に対応したエンジン識別子159を用いて、各ハードウェアエンジン30を識別することとしている。
本実施例によれば、実施例1と同様の効果を奏することができると共に、2種類の機能を有するハードウェアエンジン30が存在する場合、SSDコントローラ20が、2種類の要求コマンドFIFO205で要求コマンド140を管理することができる。
本実施例は、エラー検出回路303に、コマンドチェック部306と、溢れチェック部307及びバージョンチェック部308を配置したものである。
図12は、本発明に係るストレージシステムの第4実施例を示す構成図である。図12において、本実施例では、説明を容易にする為に、1台のハードウェアエンジン(#0のハードウェアエンジン)30が存在する場合について説明する。なお、ハードウェアエンジン30は、2台以上であっても、また、2種類以上であっても良い。また、1台のハードウェアエンジン30に対応して、ホスト10には、#0のコマンド格納領域103と、#0の結果領域104と、#0のログ領域105が配置され、SSDコントローラ20には、1台のハードウェアエンジン30に対する要求コマンド140を管理するために、1個の要求コマンドFIFO205が配置されるが、他の構成は実施例1と同様である。また、ホスト10には、コマンド140の再投入を制御するためのコマンド再投入制御部106が配置される。
#0のハードウェアエンジン30は、実施例2と同様に、データベース検索処理やグラフ処理を実行する処理回路301と、ホスト10から取得したアドオンコマンドやSSDコントローラ20から転送された要求コマンド140を格納するレジスタブロック302と、レジスタブロック302に格納されたアドオンコマンドや要求コマンド140の内容にエラーがあるか否かを検出するエラー検出回路303から構成される。処理回路301には、処理回路301の処理結果を格納する結果格納部304と、ログ情報を生成するログ生成部305が配置される。
エラー検出回路303には、コマンドチェック部306と、溢れチェック部307と、バージョンチェック部308が配置される。コマンドチェック部306は、#0のコマンド格納領域に格納されたアドオンコマンド(#0のアドオンコマンド)の各設定値を確認し、各設定値が、#0のハードウェアエンジン30で対応可能な値の範囲から外れている場合には、エラーと判定し、この判定結果をログ生成部305に転送する。溢れチェック部307は、処理回路301の処理によって得られたデータのサイズが、#0の結果領域104のサイズを超過する場合、もしくは、ログ生成部305の生成によるログ情報のログサイズが、ホスト10における#0のログ領域105のサイズを超過する恐れのある場合に、溢れエラーと判定し、この判定結果をログ生成部305に転送する。バージョンチェック部308は、要求コマンド140に記録されたアドオンコマンドのバージョン151と、#0のハードウェアエンジン30のバージョンとを比較し、#0のハードウェアエンジン30が、アドオンコマンドに対応可能なバージョンでなければ、バージョンエラーと判定し、この判定結果をログ生成部305に転送する。
この際、ログ生成部305は、コマンドチェック部306、溢れチェック部307又はバージョンチェック部308のうちいずれか一つから、エラーの判定結果を受信した場合には、エラーの判定結果を受信次第、エラーの内容を示すログ情報を生成し、生成したログ情報を、ホスト10のログ領域(#0のログ領域)105にDMAで転送する。なお、処理回路301の処理結果は、結果格納部304から、ホスト10の結果領域(#0の結果領域)104にDMAで転送される。
また、ホスト10のログ領域(#0のログ領域)105に、アドオンコマンドのエラー結果が格納された場合、ホスト10のコマンド再投入制御部106は、ログ領域(#0のログ領域)105に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域(#0のコマンド格納領域)103に格納されたアドオンコマンド(#0のアドオンコマンド)のエラー箇所を修正後、要求コマンド140を再投入するための処理を実行する。例えば、コマンド再投入制御部106は、再度、転送要求をSSDコントローラ20に送信し、その後、SSDコントローラ20からの取得要求に応答して、第2の識別情報が付加されたハードウェアエンジン用要求コマンド140を再度発行する。
図13は、ログのフォーマットを示す構成図である。図13において、ログ320は、処理回路301で処理出来なかったデータで構成される行データ321と、行データ321に付加されるログ完了フラグ322と、行データ321に付加されるエラー番号323と、行データ321に付加される最終ページ番号324とから構成される。ログ完了フラグ322には、ログが完了したか否かを示す情報が記録される。エラー番号323には、エラーを特定するための番号が記録される。最終ページ番号324には、処理回路301が処理した複数のページのうち最終ページの番号が記録される。
図14は、エラー番号とエラー内容との関係を示す構成図である。図14において、ログ320には、エラー番号323に対応して、エラー内容325を示す情報が付加される。例えば、#0のハードウェアエンジン30が、アドオンコマンドに対応可能なバージョンでない場合、#0のエラー番号323には、エラー内容325として、「アドオン機能バージョン未対応」の情報が付加される。また、アドオンコマンドの内容に不備がある場合、#0のエラー番号323には、エラー内容325として、「コマンド不備」の情報が付加される。さらに、処理回路301の処理によって得られたデータのサイズが、#0の結果領域104のサイズを超過する場合、#0のエラー番号323には、エラー内容325として、「ホストバッファ溢れ」の情報が付加される。
本実施例によれば、実施例1と同様の効果を奏することができると共に、コマンドチェック部306と、溢れチェック部307及びバージョンチェック部308のチュエック結果をホスト10に通知することができる。
本実施例は、ハードウェアエンジン30が、データベース検索エンジンとして機能するものである。
図15は、データベースのフォーマットを示す構成図である。図15において、データベース500は、ハードウェアエンジン30が、データベース検索エンジンとして機能する場合の処理対象であって、例えば、リレーショナル・データベース(RDB)として構成され、DRAM50に格納される。データベース500は、ページ単位で構成されており、各ページは、ページヘッダ501と、データ領域502と、行ポインタ503から構成される。データ領域502は、複数の行(1行目からM行目)から構成され、各行にデータが記録される。データベース検索エンジンとしての機能を有するハードウェアエンジン30は、データベース500のうち、データ領域502と、行ポインタ503を検索対象として利用する。
図16は、データベースの行のフォーマットを示す構成図である。図16において、データベース500のデータ領域502を構成する各行は、行ヘッダ510と、#1~#Nの列データ520から構成される。行ヘッダ501は、行サイズ511と、第1の付加情報512と、第2の付加情報513から構成される。
第1の付加情報512又は第2の付加情報513は、例えば、PostgreSQLの行フォーマットで構成され、第1の付加情報512又は第2の付加情報513には、行生成トランザクションIDや行消滅トランザクションID等の情報が格納される。
コマンドマネージャ202は、DRAM50に格納されたデータベース500のデータをページ単位で読み出し、読み出したページ単位のデータをハードウェアエンジン30に転送する。ハードウェアエンジン30は、アドオンコマンドを基にページ単位のデータを検索対象のデータとして処理する。
図17は、アドオンコマンドの構成図である。図17において、アドオンコマンド180には、ハードウェアエンジン30をデータベース検索エンジンとして用いる場合、ハードウェアエンジン30の実行結果を格納するホスト10のアドレス181と、検索する列の開始位置182と、検索する列のデータ形式183と、検索する列の比較式184と、検索する列の比較値185と、検索結果としてホスト10に返す列の開始位置186と、検索結果としてホスト10に返す列のサイズ187を含む情報であって、例えば、2KBの情報が記録される。この場合、比較式184と比較値185は、検索条件として用いられる。
図18は、ハードウェアエンジンによるデータベース検索処理を説明するためのフローチャートである。この処理は、データベース検索エンジンとしてのハードウェアエンジン30が、SSDコントローラ20のコマンドマネージャ202から、ハードウェアエンジン用要求コマンド140を受信したことを条件に開始される。
図18において、ハードウェアエンジン用要求コマンド140を受信したハードウェアエンジン30は、処理回路301がデータベース検索処理を開始する。まず、処理回路301は、要求コマンド140の上位領域150のうちアドオンコマンドを格納するホスト10のアドレス154を基にホスト10から、アドオンコマンド180をDMAで取得し、取得したアドオンコマンド180の内容をレジスタブロック302に保持する(S51)。
次に、処理回路301は、DRAM50から転送されたデータベース500を参照し、データベース500の1ページ目のページヘッダ501から行数を取得し(S52)、続いてデータベース500の1ページ目の行ポインタ503を1行目から順次取得し(S53)、この後、トランザクションIDの比較処理として、第1の付加情報512や第2の付加情報513に記録された情報(行生成トランザクションID、行消滅トランザクションID)と1ページ目の行データの内容とを比較し(S54)、1ページ目の行データの内容が変更された場合に、行スキップを行うか否かを判定する(S55)。
処理回路301は、ステップS55で否定の判定結果を得た場合、即ち、1ページ目の行データの内容に変更がない場合、データベース500の1ページ目の各列のデータを読み込み、読み込んだ各列のデータとアドオンコマンド180に記録された検索条件(比較式184と比較値185)とを比較し(S56)、読み込んだ各列のデータの中から検索条件を満たすデータを抽出して、応答データを生成し(S57)、ステップS59の処理に移行する。
一方、ステップS55で肯定の判定結果を得た場合、即ち、1ページ目の行データの内容が変更されている場合、処理回路301は、スキップすべき行に属するデータを、ログ情報を生成するためのデータとして書き出し(S58)、ステップS59の処理に移行する。
次に、処理回路301は、1ページ目の各行の処理を全て終了したか否かを判定し(S59)、ステップS59で否定の判定結果を得た場合、ステップS52の処理に戻り、ステップS52~ステップS59の処理を繰り返し、ステップS59で肯定の判定結果を得た場合、1ページの処理を全て完了し(S60)、このルーチンでの処理を終了する。
この後、処理回路301は、全てのページについて、ステップS52~S60の処理を実行し、ステップS57で生成された応答データを実行結果(検索結果)としてホスト10の結果領域104にDMAで転送する。また、処理回路301は、ステップS58で書き出されたデータを基にログ情報を生成し、生成したログ情報をホスト10のログ領域105にDMAで転送する。
本実施例によれば、ハードウェアエンジン30は、ホスト10から取得したアドオンコマンド180を基にSSDコントローラ20から転送されたデータに対するデータ検索処理を実行し、実行結果をホスト10に通知することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、要求コマンド140に付加される情報のうち上位領域150に記録される情報(第1の補助アクセス情報~第3の補助アクセス情報)を、アドオンコマンドに記録することもできる。この場合、ホスト10は、要求コマンド140のコマンドIDに関連づけてアドオンコマンドを管理し、ハードウェアエンジン30は、ホスト10とDMA転送でアドオンコマンドを取得する代わりに、要求コマンド140に付加されたコマンドIDに対応したアドコマンドの転送をホスト10に要求し、ホスト10から転送されたアドオンコマンドに付加された情報を基にSSDコントローラ20に対して、データ処理で必要なデータの転送を要求することができる。
上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能等は、それらの一部又は全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SD(Secure Digital)メモリカード、DVD(Digital Versatile Disc)等の記録媒体に記録して置くことができる。