(57)【要約】  記憶デバイスに対するデータの入出力を制御するコントローラと、コントローラと情報の送受信を行う複数のハードウェアエンジンを有し、コントローラは、ホストから要求コマンドを取得したことを条件に、要求コマンドの識別情報を判別し、要求コマンドに第１の識別情報が付加されている場合、要求コマンドに従って記憶デバイスに対するデータの入出力処理を実行し、要求コマンドに第２の識別情報が付加されている場合、要求コマンドをハードウェアエンジンに転送し、その後、ハードウェアエンジンから要求されたデータを記憶デバイスから取得して、ハードウェアエンジンに転送し、ハードウェアエンジンは、要求コマンドに従ってホストからアドオンコマンドを取得して解析し、解析結果を基にデータの転送をコントローラに要求し、その後、コントローラから転送されたデータに対して、アドオンコマンドに従った処理を実行する。
2015166540.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する複数のフラッシュメモリを少なくとも含む複数の記憶デバイスと、
要求コマンド及び１以上のアドオンコマンドを管理するホストと情報の送受信を行うと共に、前記各記憶デバイスに対するデータの入出力を制御するコントローラと、
前記ホスト及び前記コントローラと情報の送受信を行う１以上のハードウェアエンジンと、を有するストレージ装置であって、
前記コントローラは、
前記ホストから前記要求コマンドを取得したことを条件に、前記取得した要求コマンドに付加された識別情報を判別し、前記取得した要求コマンドに第１の識別情報が付加されていると判別した場合、前記取得した要求コマンドに従って前記記憶デバイスに対するデータの入出力処理を実行し、前記取得した要求コマンドに第２の識別情報が付加されていると判別した場合、前記取得した要求コマンドを基に前記取得した要求コマンドを前記いずれかのハードウェアエンジンに転送し、その後、前記ハードウェアエンジンから要求されたデータを前記取得した要求コマンドを基に前記記憶デバイスから取得し、当該取得したデータを前記要求されたハードウェアエンジンに転送し、
前記要求コマンドを受信したハードウェアエンジンは、
前記受信した要求コマンドで指定されたアドオンコマンドを前記ホストから取得し、前記取得したアドオンコマンドを解析し、当該解析結果を基に前記アドオンコマンドの処理の対象となるデータの転送を前記コントローラに要求し、その後、前記コントローラから転送されたデータを受信した場合、前記取得したアドオンコマンドを基に前記受信したデータに対するデータ処理を実行することを特徴とするストレージ装置。
【請求項２】
請求項１に記載のストレージ装置であって、
前記第１の識別情報が付加された前記要求コマンドには、前記記憶デバイスをアクセスするための主アクセス情報が付加され、
前記第２の識別情報が付加された前記要求コマンドには、前記ハードウェアエンジンで共通に利用可能な情報であって、前記ハードウェアエンジンで前記ホストと情報の送受信を行う際に利用可能な第１の補助アクセス情報と、前記コントローラで前記ハードウェアエンジンを判別するために利用可能な第２の補助アクセス情報と、前記コントローラで前記ハードウェアエンジンから要求されたデータを取得するために利用可能な第３の補助アクセス情報が付加されることを特徴とするストレージ装置。
【請求項３】
請求項２に記載のストレージ装置であって、
前記第１の補助アクセス情報は、
前記アドオンコマンドのバージョンと、前記アドオンコマンドを格納する前記ホストのアドレスと、前記アドオンコマンドのサイズ及びログ情報を格納する前記ホストのアドレスから構成され、
前記第２の補助アクセス情報は、
前記ハードウェアエンジンの機能を識別するための機能識別子と、前記ハードウェアエンジンの搭載個数及び前記ハードウェアエンジンを特定するためのエンジン識別子から構成され、
前記第３の補助アクセス情報は、
前記記憶デバイスに格納されているデータの読み出し開始アドレス及び前記記憶デバイスに格納されているデータのサイズから構成されていることを特徴とするストレージ装置。
【請求項４】
請求項１に記載のストレージ装置であって、
前記コントローラは、
前記ホストから取得した前記要求コマンドを格納するコマンドキューと、
前記コマンドキューに格納された要求コマンドの識別情報を判別し、当該判別結果に従って前記記憶デバイスに対するデータの入出力処理又は前記コマンドキューに格納された要求コマンドを前記いずれかのハードウェアエンジンに転送する処理を実行するコマンドマネージャを有し、
前記コマンドマネージャは、
前記いずれかのハードウェアエンジンからデータ転送要求を受信した場合、前記取得した要求コマンドに付加された情報を基に前記記憶デバイスに対するデータの入出力処理を実行し、当該データの入出力処理で得られたデータを前記データ転送要求の送信元となるハードウェアエンジンに転送することを特徴とするストレージ装置。
【請求項５】
請求項４に記載のストレージ装置であって、
前記記憶デバイスは、
前記フラッシュメモリの他に、前記フラッシュメモリから転送されたデータを一時保持するデータバッファを有し、
前記コマンドマネージャは、
前記いずれかのハードウェアエンジンからデータ転送要求を受信した場合、前記取得した要求コマンドに付加された情報を基に前記フラッシュメモリに対するデータの入出力処理を実行し、当該データの入出力処理で得られたページ単位のデータを前記データバッファに転送し、その後、前記データバッファに保持されたページ単位のデータを前記データ転送要求の送信元となるハードウェアエンジンに転送し、
前記ハードウェアエンジンは、
前記コマンドマネージャから転送されたページ単位のデータに対するデータ処理を実行することを特徴とすることを特徴とするストレージ装置。
【請求項６】
データを記憶する複数のフラッシュメモリを少なくとも含む複数の記憶デバイスと、
要求コマンド及び１以上のアドオンコマンドを管理するホストと情報の送受信を行うと共に、前記各記憶デバイスに対するデータの入出力を制御するコントローラと、
前記ホスト及び前記コントローラと情報の送受信を行う１以上のハードウェアエンジンと、を有するストレージ装置のデータ処理方法であって、
前記コントローラが、前記ホストから前記要求コマンドを取得したことを条件に、前記取得した要求コマンドの識別情報を判別する第１のステップと、
前記コントローラが、前記第１のステップで前記要求コマンドに第１の識別情報が付加されていると判別した場合、前記取得した要求コマンドに従って前記記憶デバイスに対するデータの入出力処理を実行する第２のステップと、
前記コントローラが、前記第１のステップで前記要求コマンドに第２の識別情報が付加されていると判別した場合、前記取得した要求コマンドを基に前記取得した要求コマンドを前記いずれかのハードウェアエンジンに転送し、その後、前記ハードウェアエンジンから要求されたデータを前記取得した要求コマンドを基に前記記憶デバイスから取得し、当該取得したデータを前記ハードウェアエンジンに転送する第３のステップと、
前記要求コマンドを受信したハードウェアエンジンが、前記受信した要求コマンドで指定されたアドオンコマンドを前記ホストから取得する第４のステップと、
前記要求コマンドを受信したハードウェアエンジンが、前記第４のステップで取得したアドオンコマンドを解析し、当該解析結果を基に前記アドオンコマンドの処理の対象となるデータの転送を前記コントローラに要求する第５のステップと、
前記要求コマンドを受信したハードウェアエンジンが、前記第５のステップの後、前記コントローラから、前記アドオンコマンドの処理の対象となるデータを受信した場合、前記アドオンコマンドを基に前記受信したデータに対するデータ処理を実行する第６のステップと、を含むことを特徴とするストレージ装置のデータ処理方法。
【請求項７】
請求項６に記載のストレージ装置のデータ処理方法であって、
前記第１の識別情報が付加された前記要求コマンドには、前記記憶デバイスをアクセスするための主アクセス情報が付加され、
前記第２の識別情報が付加された前記要求コマンドには、前記ハードウェアエンジンで共通に利用可能な情報であって、前記ハードウェアエンジンで前記ホストと情報の送受信を行う際に利用可能な第１の補助アクセス情報と、前記コントローラで前記ハードウェアエンジンを判別するために利用可能な第２の補助アクセス情報と、前記コントローラで前記ハードウェアエンジンから要求されたデータを取得するために利用可能な第３の補助アクセス情報が付加されることを特徴とするストレージ装置のデータ処理方法。
【請求項８】
請求項７に記載のストレージ装置のデータ処理方法であって、
前記第１の補助アクセス情報は、
前記アドオンコマンドのバージョンと、前記アドオンコマンドを格納する前記ホストのアドレスと、前記アドオンコマンドのサイズ及びログ情報を格納する前記ホストのアドレスから構成され、
前記第２の補助アクセス情報は、
前記ハードウェアエンジンの機能を識別するための機能識別子と、前記ハードウェアエンジンの搭載個数及び前記ハードウェアエンジンを特定するためのエンジン識別子から構成され、
前記第３の補助アクセス情報は、
前記記憶デバイスに格納されているデータの読み出し開始アドレス及び前記記憶デバイスに格納されているデータのサイズから構成されていることを特徴とするストレージ装置のデータ処理方法。
【請求項９】
請求項６に記載のストレージ装置のデータ処理方法であって、
前記コントローラは、
前記ホストから取得した前記要求コマンドを格納するコマンドキューと、
前記コマンドキューに格納された要求コマンドの識別情報を判別し、当該判別結果に従って前記記憶デバイスに対するデータの入出力処理又は前記コマンドキューに格納された要求コマンドを前記いずれかのハードウェアエンジンに転送する処理を実行するコマンドマネージャを有し、
前記コマンドマネージャが、前記いずれかのハードウェアエンジンからデータ転送要求を受信した場合、前記取得した要求コマンドを基に前記記憶デバイスに対するデータの入出力処理を実行し、当該データの入出力処理で得られたデータを前記データ転送要求の送信元となるハードウェアエンジンに転送する第７のステップを含むことを特徴とするストレージ装置のデータ処理方法。
【請求項１０】
請求項９に記載のストレージ装置のデータ処理方法であって、
前記記憶デバイスは、
前記フラッシュメモリの他に、前記フラッシュメモリから転送されたデータを一時保持するデータバッファを有し、
前記コマンドマネージャが、前記いずれかのハードウェアエンジンからデータ転送要求を受信した場合、前記取得した要求コマンドを基に前記フラッシュメモリに対するデータの入出力処理を実行し、当該データの入出力処理で得られたページ単位のデータを前記データバッファに転送する第８のステップと、
前記コマンドマネージャが、前記第８のステップの後、前記データバッファに保持されたページ単位のデータを前記データ転送要求の送信元となるハードウェアエンジンに転送する第９のステップと、を含み、
前記ハードウェアエンジンは、
前記第６のステップでは、前記コマンドマネージャから転送されたページ単位のデータに対するデータ処理を実行することを特徴とするストレージ装置のデータ処理方法。
【請求項１１】
データを記憶する複数のフラッシュメモリを少なくとも含む複数の記憶デバイスと、
前記各記憶デバイスに対するデータの入出力を制御するコントローラと、
前記コントローラと情報の送受信を行う１以上のハードウェアエンジンと、
前記コントローラ及び前記ハードウェアエンジンと情報の送受信を行うと共に、要求コマンド及び１以上のアドオンコマンドを管理するホストと、を有するストレージシステムであって、
前記コントローラは、
前記ホストから前記要求コマンドを取得したことを条件に、前記取得した要求コマンドの識別情報を判別し、前記取得した要求コマンドに第１の識別情報が付加されていると判別した場合、前記取得した要求コマンドに従って前記記憶デバイスに対するデータの入出力処理を実行し、前記取得した要求コマンドに第２の識別情報が付加されていると判別した場合、前記取得した要求コマンドを基に前記取得した要求コマンドを前記いずれかのハードウェアエンジンに転送し、その後、前記ハードウェアエンジンから要求されたデータを前記取得した要求コマンドを基に前記記憶デバイスから取得し、当該取得したデータを前記ハードウェアエンジンに転送し、
前記要求コマンドを受信したハードウェアエンジンは、
前記受信した要求コマンドに従って前記ホストからアドオンコマンドを取得し、前記取得したアドオンコマンドを解析し、当該解析結果を基に前記アドオンコマンドの処理の対象となるデータの転送を前記コントローラに要求し、その後、前記コントローラから転送されたデータを受信した場合、前記取得したアドオンコマンドを基に前記受信したデータに対するデータ処理を実行し、当該実行結果を前記ホストに転送することを特徴とするストレージシステム。
【請求項１２】
請求項１１に記載のストレージシステムであって、
前記第１の識別情報が付加された前記要求コマンドには、前記記憶デバイスをアクセスするための主アクセス情報が付加され、
前記第２の識別情報が付加された前記要求コマンドには、前記ハードウェアエンジンで共通に利用可能な情報であって、前記ハードウェアエンジンで前記ホストと情報の送受信を行う際に利用可能な第１の補助アクセス情報と、前記コントローラで前記ハードウェアエンジンを判別するために利用可能な第２の補助アクセス情報と、前記コントローラで前記ハードウェアエンジンから要求されたデータを取得するために利用可能な第３の補助アクセス情報が付加されることを特徴とするストレージシステム。
【請求項１３】
請求項１２に記載のストレージシステムであって、
前記第１の補助アクセス情報は、
前記アドオンコマンドのバージョンと、前記アドオンコマンドを格納する前記ホストのアドレスと、前記アドオンコマンドのサイズ及びログ情報を格納する前記ホストのアドレスから構成され、
前記第２の補助アクセス情報は、
前記ハードウェアエンジンの機能を識別するための機能識別子と、前記ハードウェアエンジンの搭載個数及び前記ハードウェアエンジンを特定するためのエンジン識別子から構成され、
前記第３の補助アクセス情報は、
前記記憶デバイスに格納されているデータの読み出し開始アドレス及び前記記憶デバイスに格納されているデータのサイズから構成されていることを特徴とするストレージシステム。
【請求項１４】
請求項１１に記載のストレージシステムであって、
前記ホストは、
前記アドオンコマンドを格納するコマンド格納領域と、前記ハードウェアエンジンの処理結果を格納する結果領域と、前記ハードウェアエンジンから転送されるログ情報を格納するログ領域を有し、
前記ハードウェアエンジンは、
前記コントローラから前記要求コマンドを受信した場合、前記受信した要求コマンドを基に前記ホストのコマンド格納領域から指定のアドオンコマンドを取得するコマンド取得回路と、
前記コマンド取得回路の取得によるアドオンコマンドを格納するレジスタブロックと、
前記レジスタブロックに格納されたアドオンコマンドを解析し、この解析結果を基に前記コントローラに対してデータ転送要求を送信し、その後、前記コントローラから転送されたデータを処理対象としてデータ処理を実行する処理回路と、
前記レジスタブロックに格納されたアドオンコマンドの内容にエラーがあるか否かを検出するエラー検出回路と、を有し、
前記処理回路は、
前記データ処理の処理結果を格納し、当該格納した処理結果を前記ホストの結果格納領域に転送する結果格納部と、
前記エラー検出回路で前記アドオンコマンドの内容にエラーがあることを検出した場合、前記アドオンコマンドのエラーの内容又は前記データ処理で処理できないデータのログのうち少なくとも一方をログ情報として生成し、当該生成したログ情報を前記ホストのログ領域に転送するログ生成部と、を含むことを特徴とするストレージシステム。
【請求項１５】
請求項１４に記載のストレージシステムであって、
前記ホストは、
前記ログ領域に格納されたログ情報の中に前記アドオンコマンドのエラーの内容を示すログ情報が存在する場合、前記コマンド格納領域に格納されたアドオンコマンドのエラーを修正すると共に、前記第２の識別情報が付加された前記要求コマンドを前記コントローラに再度発行するための処理を実行するコマンド再投入制御部を有することを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶デバイスに対するデータの入出力処理と記憶デバイスから得られたデータを処理対象とするデータ処理を実行するストレージ装置とそのデータ処理方法及びストレージシステムに関する。
【背景技術】
【０００２】
データベース検索処理を代表とするデータ処理システムでは、データ処理の高速化を目的として、データ処理サーバで行っていた処理の一部分を大容量記憶媒体（ストレージ）の近傍に配置したハードウェアエンジンへのオフロードが検討されている（特許文献１）。【０００３】
ところで、大容量記憶媒体は、ハードディスクドライブ（ＨＤＤ）が主流であったが、リード・ライト（ＲＥＡＤ／ＷＲＩＴＥ）速度の向上を目的として、ソリッドステートドライブ（ＳＳＤ）への置き換えが進んでいる。【０００４】
ＳＳＤの特徴は、内部に多数のＮＡＮＤ（Ｎｏｔ  ＡＮＤ）型フラッシュメモリを搭載しており、特定の組み合わせでコマンドの並列実行が可能であり、リード・ライト性能の向上が見込めることである。【０００５】
しかしながら、従来のＨＤＤ向けプロトコルであるＡＨＣＩ（Ａｄｖａｎｃｅｄ  Ｈｏｓｔ  Ｃｏｎｔｒｏｌｌｅｒ  Ｉｎｔｅｒｆａｃｅ）をＳＳＤに適用すると、ＡＨＣＩで取り扱えるキューの個数は最大３２個である。そうすると、ＡＨＣＩでは、取り扱えるキューの個数の最大数が３２と少ない為に、コマンドを多数キューに積んで並列実行するというＳＳＤの特性を活かせない、という課題があった。【０００６】
そこで、ＳＳＤの特性を考慮したプロトコルとして、ＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）が策定され、製品への適用が始まった。ＮＶＭｅで管理できるキューの個数は、最大６５５３５個であり、ＳＳＤの特性を十分に活かせる仕様となっている。【０００７】
一方、ホスト（ホスト計算機）からＳＳＤへの接続は、ＨＤＤで用いていたＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）からＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）への置き換えが進んでいる。シーケンシャルリードの性能では、ＳＡＴＡ３．０の６Ｇｂｐｓに対して、ＰＣＩｅ  Ｇｅｎ４ｘ１単方向においても１６Ｇｂｐｓと向上する。【０００８】
ＳＳＤをアクセスする場合、プロトコルとして、ＮＶＭｅを利用すると、どのメーカーのＰＣＩｅ  ＳＳＤコントローラにおいても、ＯＳからは同じように見えるので、１つのＮＶＭｅドライバで全てのベンダのＰＣＩｅ  ＳＳＤへのアクセスが可能となる。【０００９】
また、従来例としては、データベース検索システムにおいては、データベース検索専用のキューを持ち、データベースの検索処理性能を向上させる技術が知られている（特許文献２）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１２−１４７０５号公報
【特許文献２】特開２０１０−１２８８３１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ところで、特許文献２に記載されたデータベース検索システムは、データベースの検索に特化しており、ホスト計算機が発行した検索要求コマンドを検索専用の中継キューに格納し、中継キューに格納された検索要求コマンドに従って順次検索を実行する。【００１２】
しかしながら、ＳＳＤへのリード要求又はライト要求を含む要求コマンドに従ってデータの入出力処理を実行すると共に、検索コマンドに従ってデータベース検索処理を実行するシステムを構築する場合、このシステムには、要求コマンドを格納するキューとして、６４Ｂの容量を有するキューを配置すると共に、検索コマンドを格納するキューとして、２ＫＢの容量を有するキューを配置しなければならず、サイズの異なるコマンドを同一のキューで管理することが困難である。また、検索コマンドには、データ処理を実行する複数種類のハードウェアエンジンに対応した処理内容を付加しなければならず、しかも、検索コマンドとして、ハードウェアエンジンの機能によって異なるサイズのものを構成する必要がある。このため、検索コマンドを格納するキューとして、ハードウェアエンジン毎に容量の異なるキューを設計する余儀なくされる。即ち、要求コマンドと検索コマンドを別々に管理して、ＳＳＤに対するデータの入出力処理と、ＳＳＤから得られたデータに対するデータベース検索処理を別々に実行することが困難である。【００１３】
本発明は、要求コマンドを判別して、記憶デバイスに対するデータの入出力処理と記憶デバイスから得られたデータを処理対象とするデータ処理とを別々に実行することができるストレージ装置とそのデータ処理方法及びストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明は、データを記憶する複数のフラッシュメモリを含む複数の記憶デバイスと、前記各記憶デバイスに対するデータの入出力を制御するコントローラと、前記コントローラと情報の送受信を行う１以上のハードウェアエンジンを有し、前記コントローラは、要求コマンド及び１以上のアドオンコマンドを管理するホストから、前記要求コマンドを取得したことを条件に、前記取得した要求コマンドに付加された識別情報を判別し、前記取得した要求コマンドに第１の識別情報が付加されていると判別した場合、前記取得した要求コマンドに従って前記記憶デバイスに対するデータの入出力処理を実行し、前記取得した要求コマンドに第２の識別情報が付加されていると判別した場合、前記取得した要求コマンドを基に前記取得した要求コマンドを前記いずれかのハードウェアエンジンに転送し、その後、前記ハードウェアエンジンから要求されたデータを前記取得した要求コマンドを基に前記記憶デバイスから取得し、当該取得したデータを前記要求されたハードウェアエンジンに転送し、前記要求コマンドを受信したハードウェアエンジンは、前記受信した要求コマンドで指定されたアドオンコマンドを前記ホストから取得し、前記取得したアドオンコマンドを解析し、当該解析結果を基に前記アドオンコマンドの処理の対象となるデータの転送を前記コントローラに要求し、その後、前記コントローラから転送されたデータを受信した場合、前記取得したアドオンコマンドを基に前記受信したデータに対するデータ処理を実行することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、要求コマンドを判別して、記憶デバイスに対するデータの入出力処理と記憶デバイスから得られたデータを処理対象とするデータ処理とを別々に実行することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明に係るストレージシステムの第１実施例を示す基本構成図である。
【図２】ホストとＳＳＤコントローラの内部構成を含むストレージシステムの構成図である。
【図３】要求コマンドの構成図である。
【図４】ハードウェアエンジン用要求コマンドの構成図である。
【図５】ストレージシステムの処理を説明するためのフローチャートである。
【図６】本発明に係るストレージシステムの第２実施例を示す構成図である。
【図７】ハードウェアエンジン用要求コマンドと要求コマンドＦＩＦＯの構成を説明するための概念図である。
【図８】ハードウェアエンジンの構成図である。
【図９】本発明に係るストレージシステムの第３実施例を示す構成図である。
【図１０】ハードウェアエンジン用要求コマンドの要部構成図である。
【図１１】ハードウェアエンジン用要求コマンドと要求コマンドＦＩＦＯの構成を説明するための概念図である。
【図１２】本発明に係るストレージシステムの第４実施例を示す構成図である。
【図１３】ログのフォーマットを示す構成図である。
【図１４】エラー番号とエラー内容との関係を示す構成図である。
【図１５】データベースのフォーマットを示す構成図である。
【図１６】データベースの行のフォーマットを示す構成図である。
【図１７】アドオンコマンドの構成図である。
【図１８】ハードウェアエンジンによるデータベース検索処理を説明するためのフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明に係るストレージシステムの一実施例を図面に基づいて説明する。
【実施例１】
【００１８】
図１は、本発明に係るストレージシステムの第１実施例を示す基本構成図である。図１において、ストレージシステムは、アドオン追加機構を備えるストレージシステムとして、ホスト（ホスト計算機）１０と、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）コントローラ２０と、複数（＃０〜＃Ｎ）のハードウェアエンジン３０と、複数（＃０〜＃Ｍ）のＳＳＤ４０と、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５０を有し、各部がネットワークまたはバスを介して互いに接続される。なお、ＳＳＤコントローラ２０と、各ハードウェアエンジン３０と、各ＳＳＤ４０及びＤＲＡＭ５０は、ストレージ装置として構成される。【００１９】
ホスト１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置であり、例えば、パーソナルコンピュータ、ワークステーション、メインフレーム等として構成される。ホスト１０は、ＳＳＤ４０を処理するためのプロトコル（ＮＶＭｅ）に従って定義された要求コマンド、例えば、ＮＶＭｅコマンドと、アドオン機能（既存のプログラムに、後から機能等が強化されたプログラムを追加する機能）を有するハードウェアエンジン３０固有の処理を規定するために定義された１以上のアドオンコマンド、例えば、検索コマンド、グラフ処理コマンドを別々に管理し、ＳＳＤコントローラ２０からの取得要求に応答して、６４Ｂ（バイト）の要求コマンドをＳＳＤコントローラ２０に発行し、各ハードウェアエンジン３０からの取得要求に応答して、２ＫＢのアドオンコマンドを各ハードウェアエンジン３０に発行する。【００２０】
この際、要求コマンドには、例えば、ＳＳＤ４０へのリード要求またはライト要求であることを示す識別情報（第１の識別情報）と、各ハードウェアエンジン３０へのコマンド取得要求であることを示す識別情報（第２の識別情報）のうち一方の識別情報（オペコード）と、データのリード先又はデータのライト先を示す情報であって、データをアクセスするための主アクセス情報）等の情報が付加される。【００２１】
なお、各ハードウェアエンジン３０へのコマンド取得要求であることを示す識別情報（第２の識別情報）が、要求コマンドに付加される場合、この要求コマンドには、各ハードウェアエンジン３０で共通に利用可能な情報であって、各ハードウェアエンジン３０でホスト１０と情報の送受信を行う際に利用可能な第１の補助アクセス情報と、ＳＳＤコントローラ２０で各ハードウェアエンジン３０を判別するために利用可能な第２の補助アクセス情報と、ＳＳＤコントローラ２０でＳＳＤ４０に対するデータの入出力処理を実行するために利用可能な第３の補助アクセス情報が付加される。【００２２】
ＳＳＤコントローラ２０は、ＣＰＵ、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置であって、ホスト１０及び各ハードウェアエンジン３０と情報の送受信を行うと共に、各ＳＳＤ４０及びＤＲＡＭ５０に対するデータの入出力を制御する制御部として構成される。【００２３】
各ハードウェアエンジン３０は、例えば、アドオン機能を有するハードウェアエンジンであって、再構成可能なゲートアレイである、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）を用いて構成され、アドオン追加機構として機能する。各ハードウェアエンジン３０は、データを処理すると共に、アドオンコマンドを解析する処理回路等を有し、例えば、データベース検索エンジン、グラフ処理エンジンとして構成される。【００２４】
各ＳＳＤ４０は、データを格納する記憶デバイスであって、フラッシュメモリで構成される。この際、各ＳＳＤ４０の記憶エリア（データブロック）には、圧縮されたデータをページ単位で格納することもできる。ＤＲＡＭ５０は、データを格納する記憶デバイスであって、各ＳＳＤ４０から読み出されたデータを一時保持するデータバッファとして構成される。【００２５】
図２は、ホストとＳＳＤコントローラの内部構成を含むストレージシステムの構成図である。図２において、ホスト１０のメモリには、ホスト１０の管理対象となるキューとして、要求コマンドキュー１０１と、処理完了キュー１０２が配置され、ホスト１０の管理対象及び各ハードウェアエンジン３０のアクセス対象となる領域として、複数（＃０〜＃Ｎ）のコマンド格納領域１０３と、複数（＃０〜＃Ｎ）の結果領域１０４と、複数（＃０〜＃Ｎ）のログ領域１０５が配置される。【００２６】
要求コマンドキュー１０１には、要求コマンドが格納され、処理完了キュー１０２には、要求コマンドの処理の完了を示す情報が格納される。各コマンド格納領域１０３には、２ＫＢ（バイト）で構成されたコマンドであって、各ハードウェアエンジン３０固有の処理を規定したデータ処理要求を含むアドオンコマンドが格納される。各結果領域１０４には、各ハードウェアエンジン３０の処理結果を示す情報が格納される。各ログ領域１０５には、各ハードウェアエンジン３０の生成によるログ情報が格納される。各コマンド格納領域１０３と各結果領域１０４及び各ログ領域１０５のアドレスは、その末尾に、＃０〜＃Ｎの情報が付加され、各ハードウェアエンジン３０の番号（＃０〜＃Ｎ）に対応づけて管理される。【００２７】
ＳＳＤコントローラ２０は、ドアベルレジスタ２０１と、コマンドマネージャ２０２と、ＳＳＤインタフェース（Ｉ／Ｆ）２０３と、ＤＲＡＭインタフェース（Ｉ／Ｆ）２０４と、複数の要求コマンドＦＩＦＯ２０５を有し、コマンドマネージャ２０２には、コマンドキュー２０６が配置される。【００２８】
ドアベルレジスタ２０１は、ホスト１０からの転送要求を格納するレジスタである。コマンドマネージャ２０２は、ＳＳＤコントローラ２０全体を統括制御するＣＰＵと、ホスト１０及び各ハードウェアエンジン３０と情報の送受信を行うインタフェースと、コマンドキュー２０６を構成するメモリ等を有する。コマンドキュー２０６は、６４Ｂ（バイト）で構成された要求コマンドを最大６５５３５個まで格納可能に構成されている。コマンドマネージャ２０２のＣＰＵは、ホスト１０から転送された要求コマンドをコマンドキュー２０６に格納し、コマンドキュー２０６に格納された要求コマンドの識別情報を判別する。【００２９】
この際、ホスト１０から転送された要求コマンドに付加された識別情報が、ＳＳＤ４０へのリード要求またはライト要求であることを示す識別情報（第１の識別情報）であると判別した場合、ＣＰＵは、判別結果に従ってＳＳＤ４０に対するデータの入出力処理を実行し、実行結果をホスト１０に転送する。一方、ホスト１０から転送された要求コマンドに付加された識別情報が、各ハードウェアエンジン３０へのコマンド取得要求であることを示す識別情報（第２の識別情報）であると判別した場合、ＣＰＵは、要求コマンドに付加された情報（第２の補助アクセス情報）で各ハードウェアエンジン３０の機能に対応した要求コマンドＦＩＦＯ２０５を特定し、コマンドキュー２０６に格納された要求コマンドを、特定した要求コマンドＦＩＦＯ２０５に順次格納する。この後、ＣＰＵは、要求コマンドに付加された情報（第２の識別情報）を参照して、転送先のハードウェアエンジン３０を特定し、各要求コマンドＦＩＦＯ２０５に格納された要求コマンドを、格納された順に、即ち、先頭から順番に読み出し、特定したハードウェアエンジン３０に転送し、その後、各ハードウェアエンジン３０から、処理要求としてデータ転送要求を受信した場合、要求コマンドに付加された情報（第３の補助アクセス情報）に従ってＳＳＤ４０やＤＲＡＭ５０に対するデータの入出力処理を実行し、要求されたデータを、データ転送要求の送信元（転送元）となるハードウェアエンジン３０に転送する。【００３０】
ＳＳＤインタフェース２０３は、コマンドマネージャ２０２の指示に従って各ＳＳＤ４０とデータの授受を行うインタフェースとして構成される。ＤＲＡＭインタフェース２０４は、コマンドマネージャ２０２の指示に従ってＤＲＡＭ５０とデータの授受を行うインタフェースとして構成される。各要求コマンドＦＩＦＯ２０５は、コマンドキュー２０６から転送された要求コマンドを順番に格納し、格納した要求コマンドを格納した順に出力する要求コマンドバッファとして構成される。この際、各要求コマンドＦＩＦＯ２０５は、各ハードウェアエンジン３０が有する機能に対応して分類されている。例えば、各ハードウェアエンジン３０が２種類の機能を有する場合、各要求コマンドＦＩＦＯ２０５は、２種類に分類されて管理される。【００３１】
各ハードウェアエンジン３０は、コマンドマネージャ２０２から要求コマンドを受信した場合、受信した要求コマンドを解析し、解析結果に従ってＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を起動して、ホスト１０から、指定のコマンド格納領域１０３に格納されたアドオンコマンドを取得し、取得したアドオンコマンドに従って処理を実行する。この際、ＤＭＡ転送を実行するＤＭＡ転送部は、コマンドマネージャ２０２から受信した要求コマンドに付加された情報（第１の補助アクセス情報）を参照して、ホスト１０のコマンド格納領域１０３から指定のアドオンコマンドを取得するコマンド取得回路として機能する。【００３２】
この際、アドオンコマンドが、データベース検索処理である場合、各ハードウェアエンジン３０は、処理要求として、データ転送要求をコマンドマネージャ２０２に転送する。データ転送要求を受信したコマンドマネージャ２０２は、要求コマンドに付加された情報（第３の補助アクセス情報）を基にＳＳＤ４０から、例えば、ページ単位のデータを読み出し、読み出したページ単位のデータをＤＲＡＭ５０に一時保持し、保持されたページ単位のデータをＤＲＡＭ５０から、データ要求転送元のハードウェアエンジン３０に転送する。データを受信したハードウェアエンジン３０は、ＤＲＡＭ５０から転送されたデータ（ページ単位のデータ）を解析すると共に、転送されたデータ（ページ単位のデータ）の中から検索条件を満たすデータを抽出するデータ処理を実行し、データ処理の処理結果や解析結果等をホスト１０の指定の結果領域１０４にＤＭＡ転送する。【００３３】
ハードウェアエンジン３０が、データベース検索処理を実行する際に、ページ単位のデータを検索対象とすることで、データベース検索処理を高速化することができる。この場合、同一機能を有する複数のハードウェアエンジン３０が、同一の処理内容を有するアドオンコマンドに従って並列にデータベース検索処理を実行することで、ＤＲＡＭ５０がボトルネックとなるのを防止できるので、データベース検索処理をより高速化することができる。【００３４】
また、エラーなどのログ情報を生成する場合、ハードウェアエンジン３０は、要求コマンドに付加された情報（第１の補助アクセス情報）を参照し、生成したログ情報を、ホスト１０の指定のログ領域１０５にＤＭＡ転送し、データ処理の処理結果を、ホスト１０の指定の結果領域１０４にＤＭＡ転送する。なお、各ハードウェアエンジン３０は、ＤＲＡＭ５０から転送されたデータ（ページ単位のデータ）が、圧縮されたデータである場合、圧縮されたデータをページ単位で伸張し、伸張されたデータ（ページ単位のデータ）を検索対象のデータとして処理することもできる。【００３５】
図３は、要求コマンドの構成図である。図３において、要求コマンド１４０は、例えば、情報を格納する領域として、上位領域１５０と下位領域１７０を有し、全体で６４Ｂ（バイト）のＮＶＭｅコマンドとして構成される。上位領域１５０は、ベンダが自由に利用可能な情報格納領域であって、各ハードウェアエンジン３０共通の情報等が格納される。下位領域１７０は、コマンド固有のＩＤ（Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）や要求コマンドの識別情報を格納する情報格納領域である。下位領域１７０には、要求コマンドのＩＤ１７１と、要求コマンドに関連したデータの格納形式１７２と、ＦＵＳＥ１７３と、オペコード（Ｏｐｃｏｄｅ）１７４が格納される。【００３６】
ＩＤ１７１は、要求コマンド１４０固有の識別子であり、このＩＤ１７１が、各要求コマンド１４０に付加される。データの格納形式１７２におけるＰＲＰ（Ｐｈｙｓｉｃａｌ  ｒｅｇｉｏｎ  ｌｉｓｔ）は、物理領域のページリストであり、データが格納されている領域（データ格納先）である。物理領域のページリストに記録された情報は、ＳＳＤコントローラ２０が、ＳＳＤ４０に対するデータの入出力処理でＳＳＤ４０をアクセスする際に利用するアクセス情報となる。また、データの格納形式１７２におけるＳＧＬ（Ｓｃａｔｔｅｒ  Ｇａｔｈｅｒ  Ｌｉｓｔ）は、メモリアドレス空間のデータ構造を示している。本実施例では、ＰＲＰを用いることとする。ＦＵＳＥ１７３は利用しないので、説明は割愛する。【００３７】
オペコード（Ｏｐｃｏｄｅ）１７４は、要求コマンド１４０が、ＳＳＤ４０に対するデータの入出力処理（データのリード処理又はデータのライト処理）を要求するコマンド、あるいは各ハードウェアエンジン３０による処理（データベース検索処理）を要求するコマンドであるか否を識別するための識別情報であって、要求コマンドの種類を特定する識別情報である。即ち、要求コマンドが、ＳＳＤ４０に対するデータの入出力処理を要求するコマンドである場合、オペコード１７４には、ＳＳＤ４０へのリード要求またはライト要求であることを示す識別情報（第１の識別情報）が付加される。一方、要求コマンドが、各ハードウェアエンジン３０による処理を要求するコマンドである場合、オペコード１７４には、各ハードウェアエンジン３０へのコマンド取得要求であることを示す識別情報（第２の識別情報）が付加される。【００３８】
図４は、ハードウェアエンジン用要求コマンドの構成図である。図４において、要求コマンド１４０は、ハードウェアエンジン用要求コマンドとして構成されており、この要求コマンド１４０の上位領域１５０には、各ハードウェアエンジン３０共通の情報等が記録される。【００３９】
即ち、各ハードウェアエンジン３０へのコマンド取得要求であることを示す識別情報が付加された要求コマンド１４０には、各ハードウェアエンジン３０で共通に利用可能な情報であって、各ハードウェアエンジン３０でホスト１０と情報の送受信を行う際に利用可能な第１の補助アクセス情報と、ＳＳＤコントローラ２０で各ハードウェアエンジン３０を判別するために利用可能な第２の補助アクセス情報と、ＳＳＤコントローラ２０で各ハードウェアエンジン３０から要求されたデータを取得するために利用可能な第３の補助アクセス情報が付加される。【００４０】
具体的には、要求コマンド１４０の上位領域１５０には、アドオンコマンドのバージョン１５１と、アドオン機能識別子１５２と、アドオン機能搭載個数１５３と、アドオンコマンドを格納するホスト１０のアドレス（アドオンコマンド格納ホストアドレス）１５４と、アドオンコマンドのサイズ（アドオンコマンドサイズ）１５５と、ログを格納するホスト１０のアドレス（ログ格納ホストアドレス）１５６と、ＳＳＤ４０に格納されているデータの読み出し開始アドレス１５７と、ＳＳＤ４０に格納されているデータのサイズ１５８と、各ハードウェアエンジン３０を識別するためのエンジン識別子１５９が記録される。【００４１】
アドオンコマンドのバージョン１５１と、アドオンコマンドを格納するホスト１０のアドレス（アドオンコマンド格納ホストアドレス）１５４と、アドオンコマンドのサイズ（アドオンコマンドサイズ）１５５及びログを格納するホスト１０のアドレス（ログ格納ホストアドレス）１５６は、第１の補助アクセス情報として構成され、アドオン機能識別子１５２と、アドオン機能搭載個数１５３及びエンジン識別子１５９は、第２の補助アクセス情報として構成され、ＳＳＤ４０に格納されているデータの読み出し開始アドレス１５７及びＳＳＤ４０に格納されているデータのサイズ１５８は、第３の補助アクセス情報として構成される。【００４２】
アドオンコマンドのバージョン１５１には、ホスト１０の各コマンド格納領域１０３に格納されるアドオンコマンドのバージョンが記載される。アドオンコマンドのバージョンは、各ハードウェアエンジン３０で各ハードウェアエンジンのバージョンと比較される。アドオン機能識別子１５２には、各要求コマンドＦＩＦＯ２０５を種別するための識別子であって、各ハードウェアエンジン３０の機能に対応した情報が記載される。コマンドマネージャ２０１は、要求コマンドをいずれかの要求コマンドＦＩＦＯ２０５に分配する際又は要求コマンドをいずれかのハードウェアエンジン３０に転送する際に、アドオン機能識別子１５２に記載された識別子で分配先又は転送先を判断する。なお、アドオン機能識別子１５２では、要求コマンドの転送先を判断できない場合、コマンドマネージャ２０１は、エンジン識別子１５９で要求コマンドの転送先を判断する。【００４３】
アドオンの搭載個数１５３には、ＳＳＤコントローラ２０に接続されるハードウェアエンジン３０が何個搭載されているかの情報が記載される。この情報は、コマンドマネージャ２０２が、確保すべき要求コマンドＦＩＦＯ２０５の個数を決定するのに利用される。アドオンコマンドを格納するホスト１０のアドレス１５４には、ホスト１０のコマンド格納領域１０３を特定するアドレスが記載される。アドオンコマンドサイズ１５５には、ホスト１０の各コマンド格納領域１０３に格納されているアドオンコマンドのサイズが記載される。このアドオンコマンドのサイズの情報は、各コマンドマネージャ２０２が、ＤＭＡ転送で取得すべきデータサイズの設定に利用される。【００４４】
ログを格納するホスト１０のアドレス１５６には、ホスト１０の各ログ領域１０５を特定するアドレスが記載される。このアドレスは、各コマンドマネージャ２０２が、ＤＭＡ転送でログ情報をホスト１０に転送する際に利用される。ＳＳＤ４０に格納されるデータの読み出し開始アドレス１５７には、データベース検索処理の処理対象となるデータを格納しているＳＳＤ４０の開始アドレスが記載される。ＳＳＤ４０に格納されているデータサイズ１５８には、ＳＳＤ４０に格納されているデータであって、データベース検索処理の処理対象となるデータのサイズが記載される。【００４５】
この際、ハードウェアエンジン用要求コマンド１４０の下位領域１７０のうち、オペコード１７４には、要求コマンド１４０が、ハードウェアエンジン用要求コマンドであることを示す識別情報、即ち、要求コマンドが、各ハードウェアエンジン３０による処理を要求するコマンドであって、各ハードウェアエンジン３０へのコマンド取得要求であることを示す識別情報が記録される。【００４６】
図５は、ストレージシステムの処理を説明するためのフローチャートである。この処理は、ホスト１０が、ＳＳＤコントローラ２０に転送要求を発行することによって開始される。この際、ハードウェアエンジン用要求コマンド１４０の下位領域１７０のうち、オペコード１７４には、要求コマンド１４０が、ハードウェアエンジン用要求コマンドであることを示す識別情報、即ち、要求コマンドが、各ハードウェアエンジン３０による処理を要求するコマンドであって、各ハードウェアエンジン３０へのコマンド取得要求であることを示す識別情報（第２の識別情報）が記録される。【００４７】
図５において、ホスト１０が、ＳＳＤコントローラ２０に転送要求を発行し（Ｓ１１）、転送要求の値をＳＳＤコントローラ２０のドアベルレジスタ２０１に書き込み、コマンドＤＭＡを起動する（Ｓ１２）。コマンドＤＭＡが起動すると、コマンドマネージャ２０２は、ホスト１０から、要求コマンドキュー１０１に格納されている要求コマンド（ＮＶＭｅコマンド）１４０をコマンドＤＭＡで取得し（Ｓ１３）、取得した要求コマンド１４０をコマンドキュー２０６に登録する（Ｓ１４）。この後、コマンドマネージャ２０２は、コマンドキュー２０６に登録した要求コマンド１４０のオペコード１７４を判別し、要求コマンド１４０が、アドオン用コマンド（ハードウェアエンジン用要求コマンド１４０）であるか否かを判定する（Ｓ１５）。【００４８】
コマンドマネージャ２０２は、ステップＳ１５で否定の判定結果を得た場合、即ち、要求コマンド１４０が、アドオン用コマンドでない場合、要求コマンド１４０の下位領域１７０のうちデータの格納形式１７２に記録されたデータ格納先を基にＳＳＤ４０に対するデータの入出力処理（データのリード処理又はデータのライト処理）を実行する（Ｓ１６）。データの入出力処理が完了すると、データの入出力処理の実行が完了したことが、ＳＳＤインタフェース２０３からコマンドマネージャ２０２に通知される（Ｓ１７）。この後、コマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０で要求された処理の実行が完了したことを通知し（Ｓ１８）、このルーチンでの処理を終了する。【００４９】
一方、コマンドマネージャ２０２は、ステップＳ１５で肯定の判定結果を得た場合、即ち、要求コマンド１４０が、アドオン用コマンド（ハードウェアエンジン用要求コマンド１４０）である場合、要求コマンド１４０の上位領域１５０のうちアドオン機能識別子１５２を判別し、この判別結果から、要求コマンド１４０の分配先となる要求コマンドＦＩＦＯ２０５を、各ハードウェアエンジン３０の機能に対応づけて特定し、特定した要求コマンドＦＩＦＯ２０５に要求コマンド１４０を書き込む（Ｓ１９）。この後、コマンドマネージャ２０２は、要求コマンドＦＩＦＯ２０５に書き込まれた要求コマンド１４０のうち先頭に積んである要求コマンド１４０を、アドオン機能識別子１５２に対応した機能を有するハードウェアエンジン（ＦＰＧＡ）３０に転送する（Ｓ２０）。【００５０】
要求コマンド１４０を受信したハードウェアエンジン３０は、ＤＭＡを起動し、要求コマンド１４０の上位領域１５０のうちアドオンコマンドを格納するホスト１０のアドレス１５４を基にホスト１０から、ホスト１０のコマンド格納領域１０３に格納されているアドオンコマンドを取得し（Ｓ２１）、取得したアドオンコマンドの内容を解析し、設定内容に問題があるか等、アドオンコマンドの内容にエラーを検出したか否かを判定する（Ｓ２２）。【００５１】
アドオンコマンドを受信したハードウェアエンジン３０は、ステップＳ２２で否定の判定結果を得た場合、即ち、取得したアドオンコマンドの内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、データベース検索処理で必要なデータの転送要求（データ転送要求）をコマンドマネージャ２０２に転送する。データ転送要求を受信したコマンドマネージャ２０２は、要求コマンド１４０の上位領域１５０のうちＳＳＤ４０に格納されているデータの読み出し開始アドレス１５７と、ＳＳＤ４０に格納されているデータサイズ１５８を参照して、いずれかのＳＳＤ４０からデータ（ページ単位のデータ）を読み出し、読み出したデータをＤＲＡＭ５０にデータを転送し、転送したデータをＤＲＡＭ５０に一時保持し、その後、ＤＲＡＭ５０に保持されたデータ（ページ単位のデータ）を、データ転送要求の転送元（送信元）となる各ハードウェアエンジン３０に転送する（Ｓ２３）。【００５２】
ＤＲＡＭ５０から転送されたデータを受信したハードウェアエンジン３０は、データ処理を起動し、アドオンコマンドの内容に従ってデータベース検索処理を実行し（Ｓ２４）、この実行結果をホスト１０の結果領域１０４へＤＭＡで転送し（Ｓ２５）、この後、コマンドマネージャ２０２に対して、要求コマンド１４０の実行完了を通知する（Ｓ２６）。【００５３】
要求コマンド１４０の実行完了通知を受信したコマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０の実行完了を通知する（Ｓ２７）。これにより、ホスト１０の処理完了キュー１０２には、要求コマンド１４０の実行完了の情報が格納される。【００５４】
一方、ステップＳ２２で肯定の判定結果を得た場合、即ち、取得したアドオンコマンドの内容にエラーを検出した場合、取得したアドオンコマンドの内容にエラーを検出したハードウェアエンジン３０は、アドオンコマンドのエラーの内容を示すログ情報を生成し、生成したログ情報をＤＭＡでホスト１０のログ領域１０５に転送し（Ｓ２８）、コマンドマネージャ２０２に対して、要求コマンド１４０の処理の実行をエラーで完了したことを通知し、処理完了通知を処理完了キュー１０２に格納させる（Ｓ２９）。この後、コマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０で要求された処理の実行をエラーで完了したことを通知する（Ｓ３０）。この場合、ホスト１０は、ログ領域１０５に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域１０３に格納されたアドオンコマンドのエラー箇所を修正後、要求コマンド１４０を再投入するために、再度、転送要求をＳＳＤコントローラ２０に送信し、その後、ＳＳＤコントローラ２０からの取得要求に応答して、ハードウェアエンジン用要求コマンド１４０を再度発行する。【００５５】
ステップＳ２７又はステップＳ３０の後、コマンドマネージャ２０２は、各要求コマンドＦＩＦＯ２０５に要求コマンドが存在するか否かを判定し（Ｓ３１）、各要求コマンドＦＩＦＯ２０５に要求コマンドが存在する場合、ステップＳ２０の処理に戻り、ステップＳ２０〜Ｓ３１の処理を繰り返し、各要求コマンドＦＩＦＯ２０５に要求コマンドが存在しない場合、このルーチンでの処理を終了する。【００５６】
本実施例によれば、要求コマンド１４０を判別して、ＳＳＤ４０に対するデータの入出力処理とＳＳＤ４０から得られたデータを処理対象とするデータ処理（データベース検索処理）とを別々に実行することができる。また、本実施例によれば、ホスト１０で、ＮＶＭｅ標準プロトコルで定義された要求コマンド１４０と、各ハードウェアエンジン固有の処理を規定したアドオンコマンドを別々に管理しているので、アドオンコマンドの拡張性を向上させることができる。さらに、ＮＶＭｅ標準プロトコルで定義された要求コマンド１４０が６４Ｂの容量で構成されるので、コマンドキュー２０６には、最大６５５３５個の要求コマンド１４０を格納することができ、結果として、コマンドキュー２０６に格納された各要求コマンド１４０の処理を並行して実行することが可能になり、ＳＳＤ４０の性能を向上させることができる。【００５７】
また、一つのコマンドキュー２０６に、６４Ｂの要求コマンド１４０を複数個格納できるので、ＳＳＤコントローラ２０のハードウェアの設計が容易になると共に、２種類のコマンドキューを配置する構成を採用した場合に比べて、コマンドキューのサイズを削減できる。また、ホスト１０と各ハードウェアエンジン３０との間では、ＤＭＡ転送で情報の送受信を行っているので、ホスト１０のＣＰＵの負荷を低減することができる。
【実施例２】
【００５８】
本実施例は、同一機能を有する３台のハードウェアエンジン３０が存在する場合、ＳＳＤコントローラ２０が、一つの要求コマンドＦＩＦＯ２０５で要求コマンド１４０を管理するものである。【００５９】
図６は、本発明に係るストレージシステムの第２実施例を示す構成図である。図６において、本実施例におけるストレージシステムは、ハードウェアエンジンとして、同一の機能を有する３台（＃０〜＃２）のハードウェアエンジン３０が存在する。【００６０】
この際、３台のハートウェアエンジン３０に対応して、ホスト１０には、＃０〜＃２のコマンド格納領域１０３と、＃０〜＃２の結果領域１０４と、＃０〜＃２のログ領域１０５が配置され、ＳＳＤコントローラ２０には、同一の機能を有する３台のハードウェアエンジン３０を管理するために、１個の要求コマンドＦＩＦＯ２０５が配置されるが、他の構成は実施例１と同様である。各コマンド格納領域１０３と各結果領域１０４及び各ログ領域１０５のアドレスは、その末尾に、＃０〜＃２の情報が付加され、各ハードウェアエンジン３０の番号（＃０〜＃２）に対応づけて管理される。また、ＳＳＤコントローラ２０と各ハートウェアエンジン３０とを専用経路で接続することもできる。また、ホスト１０には、コマンド１４０の再投入を制御するためのコマンド再投入制御部１０６が配置される。【００６１】
コマンドマネージャ２０２は、ホスト１０から取得した要求コマンド１４０が、アドオン用コマンド（ハードウェア用要求コマンド）である場合、要求コマンド１４０の上位領域１５０のうちアドオン機能識別子１５２を判別し、判別結果から、要求コマンド１４０の転送先として、１個の要求コマンドＦＩＦＯ２０５を特定し、特定した１個の要求コマンドＦＩＦＯ２０５に要求コマンド１４０を書き込み、要求コマンドＦＩＦＯ２０５に書き込まれた要求コマンド１４０のうち先頭に積んである要求コマンド１４０から順番に、専用経路を介して、いずれかのハードウェアエンジン（ＦＰＧＡ）３０に順番に転送する。【００６２】
要求コマンド１４０を受信したハードウェアエンジン３０は、ＤＭＡを起動し、要求コマンド１４０の上位領域１５０のうちアドオンコマンドを格納するホスト１０のアドレス１５４を基にホスト１０から、ホスト１０のコマンド格納領域１０３に格納されているアドオンコマンドを取得し、取得したアドオンコマンドの内容を解析し、設定内容に問題があるか等、アドオンコマンドの内容にエラーを検出したか否かを判定する。【００６３】
アドオンコマンドを受信したハードウェアエンジン３０は、取得したアドオンコマンドの内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、データベース検索処理で必要なデータの転送をコマンドマネージャ２０２に要求する。この場合、データ転送要求を受信したコマンドマネージャ２０２は、要求コマンド１４０の上位領域１５０のうちＳＳＤ４０に格納されているデータの読み出し開始アドレス１５７と、ＳＳＤ４０に格納されているデータサイズ１５８を参照して、いずれかのＳＳＤ４０からデータを読み出し、読み出したデータをＤＲＡＭ５０にデータを転送し、転送したデータをＤＲＡＭ５０に一時保持し、その後、ＤＲＡＭ５０に保持されたデータを、データ転送要求の転送元（送信元）となるハードウェアエンジン３０に転送する。【００６４】
ＤＲＡＭ５０から転送されたデータを受信したハードウェアエンジン３０は、データ処理を起動し、アドオンコマンドの内容に従ってデータベース検索処理を実行し、この実行結果をホスト１０の各結果領域１０４へＤＭＡで転送し、この後、コマンドマネージャ２０２に対して、要求コマンド１４０の実行完了を通知する。要求コマンド１４０の実行完了通知を受信したコマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０の実行完了を通知する。【００６５】
一方、取得したアドオンコマンドの内容にエラーを検出した場合、取得したアドオンコマンドの内容にエラーを検出したハードウェアエンジン３０は、アドオンコマンドのエラーの内容を示すログ情報を生成し、生成したログ情報をＤＭＡでホスト１０のログ領域１０５に転送し、コマンドマネージャ２０２に対して、要求コマンド１４０の処理の実行をエラーで完了したことを通知する。この後、コマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０で要求された処理の実行をエラーで完了したことを通知する。この場合、ホスト１０のコマンド再投入制御部１０６は、ログ領域１０５に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域１０３に格納されたアドオンコマンドのエラー箇所を修正後、ハードウェアエンジン用要求コマンド１４０を再投入するための処理として、再度、転送要求をＳＳＤコントローラ２０に送信し、その後、ＳＳＤコントローラ２０からの取得要求に応答して、ハードウェアエンジン用要求コマンド１４０を再度発行する。【００６６】
図７は、ハードウェアエンジン用要求コマンドと要求コマンドＦＩＦＯの構成を説明するための概念図である。【００６７】
図７において、ホスト１０が、例えば、同一機能を有する３台のハードウェアエンジン３０に対する要求コマンド（ハードウェアエンジン用要求コマンド）として、＃０〜＃２の要求コマンド１４０を順次発行する場合、＃０〜＃２の要求コマンド１４０のアドオン機能識別子１５２には、各ハードウェアエンジン３０が同一の機能を有することを意味する情報として、「０」が付加される。【００６８】
また、＃０〜＃２の要求コマンド１４０のうち、コマンドＩＤ１７１には、＃０〜＃２の要求コマンド１４０固有の情報であって、各要求コマンド１４０を特定する情報が付加されると共に、コマンドＩＤ１７１の末尾に「０」〜「２」が付加される。同様に、アドオンコマンド格納ホストのアドレス１５４には、＃０〜＃２のコマンド格納領域１０３のアドレスを特定する情報として、アドレスの末尾に「０」〜「２」が付加され、アドオンコマンドサイズ１５５には、＃０〜＃２のアドオンコマンドのサイズを特定する情報として、サイズの末尾に「０」〜「２」が付加され、ログ格納ホストアドレス１５６には、＃０〜＃２のログ領域１０５のアドレスを特定する情報として、アドレスの末尾に「０」〜「２」が付加される。【００６９】
要求コマンドＦＩＦＯ２０５には、コマンドマネージャ２０２が受信した要求コマンド１４０が、受信した順番に書き込まれる。例えば、コマンドマネージャ２０２が、＃０〜＃２の要求コマンド１４０を、＃０〜＃２の順に受信した場合、＃０の要求コマンド１４０から順番に要求コマンドＦＩＦＯ２０５に書き込まれる。要求コマンドＦＩＦＯ２０５に書き込まれた要求コマンド１４０は、＃０〜＃２の順に各ハードウェアエンジン３０に転送される。例えば、まず、＃０の要求コマンド１４０が、＃０のハードウェアエンジン３０に転送され、次に、＃１の要求コマンド１４０が、＃１のハードウェアエンジン３０に転送され、その後、＃２の要求コマンド１４０が、＃２のハードウェアエンジン３０に転送される。【００７０】
図８は、ハードウェアエンジンの構成図である。図８において、各ハードウェアエンジン３０は、各ハードウェアエンジン３０全体を統括制御するＣＰＵ、ＳＳＤコントローラ２０やホスト１０とデータやコマンドの授受を行うインタフェースの他に、各ハードウェアエンジン３０固有のデータ処理、例えば、データベース検索処理やグラフ処理を実行する処理回路３０１と、ホスト１０から取得したアドオンコマンドやＳＳＤコントローラ２０から転送された要求コマンド１４０を格納するレジスタブロック３０２と、レジスタブロック３０２に格納されたアドオンコマンドや要求コマンド１４０の内容にエラーがあるか否かを検出するエラー検出回路３０３から構成される。処理回路３０１には、処理回路３０１の処理結果を格納する結果格納部３０４と、ログ情報を生成するログ生成部３０５が配置される。【００７１】
処理回路３０１は、レジスタブロック３０２に格納されたアドオンコマンド又は要求コマンド１４０の内容を解析し、解析結果に従ってデータ処理を実行する。この際、処理回路３０１は、ＤＲＡＭ５０から転送されたデータを基にデータベース検索処理またはグラフ処理を実行する。ログ生成部３０５は、レジスタブロック３０２に格納されたアドオンコマンドの内容にエラーがある場合、エラーの内容をログ情報として生成すると共に、処理回路３０１で処理できないデータに関するログ情報を生成する。【００７２】
本実施例によれば、実施例１と同様の効果を奏することができると共に、同一機能を有する３台のハードウェアエンジン３０が存在する場合、ＳＳＤコントローラ２０が、一つの要求コマンドＦＩＦＯ２０５で要求コマンド１４０を管理することができる。
【実施例３】
【００７３】
本実施例は、２種類の機能を有するハードウェアエンジン３０が存在する場合、ＳＳＤコントローラ２０が、２種類の要求コマンドＦＩＦＯ２０５で要求コマンド１４０を管理するものである。【００７４】
図９は、本発明に係るストレージシステムの第３実施例を示す構成図である。図９において、本実施例におけるストレージシステムは、ハードウェアエンジンとして、２種類の機能（＃Ａ、＃Ｂ）を有する５台（＃０〜＃４）のハードウェアエンジン３０が存在する。【００７５】
この際、５台のハートウェアエンジン３０に対応して、ホスト１０には、＃０〜＃４のコマンド格納領域１０３と、＃０〜＃４の結果領域１０４と、＃０〜＃４のログ領域１０５が配置され、ＳＳＤコントローラ２０には、２種類の機能（＃Ａ、＃Ｂ）を有する５台のハードウェアエンジン３０に対する要求コマンド１４０を管理するために、２種類（＃Ａ、＃Ｂ）の要求コマンドＦＩＦＯ２０５が配置されるが、他の構成は実施例１と同様である。なお、各コマンド格納領域１０３と各結果領域１０４及び各ログ領域１０５のアドレスは、その末尾に、＃０〜＃４の情報が付加され、各ハードウェアエンジン３０の番号（＃０〜＃４）に対応づけて管理される。また、ホスト１０には、コマンド１４０の再投入を制御するためのコマンド再投入制御部１０６が配置される。【００７６】
コマンドマネージャ２０２は、ホスト１０から取得した要求コマンド１４０が、アドオン用コマンド（ハードウェア用要求コマンド）である場合、要求コマンド１４０の上位領域１５０のうちアドオン機能識別子１５２を判別し、この判別結果から、要求コマンド１４０の分配先として、２種類の機能に分かれて配置された複数の要求コマンドＦＩＦＯ２０５のうちいずれか一つの機能に属する要求コマンドＦＩＦＯ２０５を特定し、特定した機能の要求コマンドＦＩＦＯ２０５に要求コマンド１４０を書き込む。【００７７】
例えば、コマンドマネージャ２０２は、要求コマンド１４０の分配先として、一方の機能（＃Ａ）に属する要求コマンドＦＩＦＯ２０５を特定した場合、特定した一方の機能（＃Ａ）に属する要求コマンドＦＩＦＯ２０５に要求コマンド１４０を書き込む。一方、要求コマンド１４０の分配先として、他方の機能（＃Ｂ）に属する要求コマンドＦＩＦＯ２０５を特定した場合、特定した他方の機能（＃Ｂ）に属する要求コマンドＦＩＦＯ２０５に要求コマンド１４０を書き込む。【００７８】
この後、＃Ａの要求コマンドＦＩＦＯ２０５に書き込まれた要求コマンド１４０のうち先頭に積んである要求コマンド１４０をハードウェアエンジン（ＦＰＧＡ）３０に転送する場合、コマンドマネージャ２０２は、＃Ａの機能に属するハードウェアエンジン３０の中から、要求コマンド１４０の上位領域１５０に記録されたエンジン識別子１５９で指定されたハードウェアエンジン３０を選択し、選択したハードウェアエンジン３０に要求コマンド１４０を転送する。例えば、コマンドマネージャ２０２は、エンジン識別子１５９で指定されたハードウェアエンジン３０が、＃０のハードウェアエンジン３０である場合、＃０、＃２、＃３のハードウェアエンジン３０の中から、＃０のハードウェアエンジン３０を選択して、要求コマンド１４０を転送する。【００７９】
一方、＃Ｂの要求コマンドＦＩＦＯ２０５に書き込まれた要求コマンド１４０のうち先頭に積んである要求コマンド１４０をハードウェアエンジン（ＦＰＧＡ）３０に転送する場合、コマンドマネージャ２０２は、＃Ｂの機能に属するハードウェアエンジン３０の中から、要求コマンド１４０の上位領域１５０に記録されたエンジン識別子１５９で指定されたハードウェアエンジン３０を選択し、選択したハードウェアエンジン３０に要求コマンド１４０を転送する。例えば、コマンドマネージャ２０２は、エンジン識別子１５９で指定されたハードウェアエンジン３０が、＃１のハードウェアエンジン３０である場合、＃１、＃４のハードウェアエンジン３０の中から、＃１のハードウェアエンジン３０を選択して、要求コマンド１４０を転送する。【００８０】
要求コマンド１４０を受信したハードウェアエンジン３０、例えば、＃０のハードウェアエンジン３０は、ＤＭＡを起動し、要求コマンド１４０の上位領域１５０のうちアドオンコマンドを格納するホスト１０のアドレス１５４を基にホスト１０から、コマンド格納領域（＃０のコマンド格納領域）１０３に格納されているアドオンコマンド（＃０のアドオンコマンド）を取得し、取得したアドオンコマンド（＃０のアドオンコマンド）の内容を解析し、設定内容に問題があるか等、アドオンコマンド（＃０のアドオンコマンド）の内容にエラーを検出したか否かを判定する。【００８１】
＃０のハードウェアエンジン３０は、取得したアドオンコマンド（＃０のアドオンコマンド）の内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、データベース検索処理で必要なデータの転送をコマンドマネージャ２０２に要求する。この場合、データ転送要求を受信したコマンドマネージャ２０２は、要求コマンド１４０の上位領域１５０のうちＳＳＤ４０に格納されているデータの読み出し開始アドレス１５７と、ＳＳＤ４０に格納されているデータサイズ１５８を参照して、いずれかのＳＳＤ４０からデータを読み出し、読み出したデータをＤＲＡＭ５０にデータを転送し、転送したデータをＤＲＡＭ５０に一時保持し、その後、ＤＲＡＭ５０に保持されたデータを、データ転送要求送信元となる＃０のハードウェアエンジン３０に転送する。【００８２】
ＤＲＡＭ５０から転送されたデータを受信したハードウェアエンジン（＃０のハードウェアエンジン）３０は、データ処理を起動し、アドオンコマンドの内容に従ってデータベース検索処理を実行し、この実行結果をホスト１０の結果領域（＃０の結果領域）１０４へＤＭＡで転送し、この後、コマンドマネージャ２０２に対して、要求コマンド１４０の実行完了を通知する。要求コマンド１４０の実行完了通知を受信したコマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０の実行完了を通知する。【００８３】
一方、取得したアドオンコマンド（＃０のアドオンコマンド）の内容にエラーを検出した場合、＃０のハードウェアエンジン３０は、アドオンコマンド（＃０のアドオンコマンド）のエラーの内容を示すログ情報を生成し、生成したログ情報をＤＭＡでホスト１０のログ領域（＃０のログ領域）１０５に転送し、コマンドマネージャ２０２に対して、要求コマンド１４０の処理の実行をエラーで完了したことを通知する。この後、コマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０で要求された処理の実行をエラーで完了したことを通知する。この場合、ホスト１０のコマンド再投入制御部１０６は、ログ領域（＃０のログ領域）１０５に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域（＃０のコマンド格納領域）１０３に格納されたアドオンコマンド（＃０のアドオンコマンド）のエラー箇所を修正後、要求コマンド１４０を再投入するための処理を実行する。例えば、コマンド再投入制御部１０６は、再度、転送要求をＳＳＤコントローラ２０に送信し、その後、ＳＳＤコントローラ２０からの取得要求に応答して、第２の識別情報が付加されたハードウェアエンジン用要求コマンド１４０を再度発行する。【００８４】
また、要求コマンド１４０を受信したハードウェアエンジン３０、例えば、＃１のハードウェアエンジン３０は、ＤＭＡを起動し、要求コマンド１４０の上位領域１５０のうちアドオンコマンドを格納するホスト１０のアドレス１５４を基にホスト１０から、コマンド格納領域（＃１のコマンド格納領域）１０３に格納されているアドオンコマンド（＃１のアドオンコマンド）を取得し、取得したアドオンコマンド（＃１のアドオンコマンド）の内容を解析し、設定内容に問題があるか等、アドオンコマンド（＃１のアドオンコマンド）の内容にエラーを検出したか否かを判定する。【００８５】
＃１のハードウェアエンジン３０は、取得したアドオンコマンド（＃１のアドオンコマンド）の内容にエラーを検出しなかった場合、取得したアドオンコマンドの内容に従った処理、例えば、グラフ処理で必要なデータの転送をコマンドマネージャ２０２に要求する。この場合、データ転送要求を受信したコマンドマネージャ２０２は、要求コマンド１４０の上位領域１５０のうちＳＳＤ４０に格納されているデータの読み出し開始アドレス１５７と、ＳＳＤ４０に格納されているデータサイズ１５８を参照して、いずれかのＳＳＤ４０からデータを読み出し、読み出したデータをＤＲＡＭ５０にデータを転送し、転送したデータをＤＲＡＭ５０に一時保持し、その後、ＤＲＡＭ５０に保持されたデータを、＃１のハードウェアエンジン３０に転送する。【００８６】
ＤＲＡＭ５０から転送されたデータを受信した、＃１のハードウェアエンジン３０は、データ処理を起動し、アドオンコマンドの内容に従ってグラフ処理を実行し、この実行結果をホスト１０の結果領域（＃１の結果領域）１０４へＤＭＡで転送し、この後、コマンドマネージャ２０２に対して、要求コマンド１４０の実行完了を通知する。要求コマンド１４０の実行完了通知を受信したコマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０の実行完了を通知する。【００８７】
一方、取得したアドオンコマンド（＃１のアドオンコマンド）の内容にエラーを検出した場合、＃１のハードウェアエンジン３０は、アドオンコマンド（＃１のアドオンコマンド）のエラーの内容を示すログ情報を生成し、生成したログ情報をＤＭＡでホスト１０のログ領域（＃１のログ領域）１０５に転送し、コマンドマネージャ２０２に対して、要求コマンド１４０の処理の実行をエラーで完了したことを通知する。この後、コマンドマネージャ２０２は、ホスト１０に対して、要求コマンド１４０で要求された処理が、エラーで完了したことを通知する。この場合、ホスト１０のコマンド再投入制御部１０６は、ログ領域（＃１のログ領域）１０５に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域（＃１のコマンド格納領域）１０３に格納されたアドオンコマンド（＃１のアドオンコマンド）のエラー箇所を修正後、要求コマンド１４０を再投入するための処理を実行する。例えば、コマンド再投入制御部１０６は、再度、転送要求をＳＳＤコントローラ２０に送信し、その後、ＳＳＤコントローラ２０からの取得要求に応答して、第２の識別情報が付加されたハードウェアエンジン用要求コマンド１４０を再度発行する。【００８８】
図１０は、ハードウェアエンジン用要求コマンドの要部構成図である。図１０において、ホスト１０が、例えば、２種類の機能（＃Ａ、＃Ｂ）を有する５台のハードウェアエンジン３０のうち＃Ａの機能を有する３台のハードウェアエンジン（＃０、＃２、＃３のハードウェアエンジン）３０に対する要求コマンド（ハードウェアエンジン用要求コマンド）として、＃０、＃２、＃３の要求コマンド１４０を順次発行する場合、＃０、＃２、＃３の要求コマンド１４０のアドオン機能識別子１５２には、＃０、＃２、＃３のハードウェアエンジン３０が、＃Ａの機能を有することを意味する情報として、「０」が付加される。また、＃０、＃２、＃３の要求コマンド１４０には、要求コマンド名１６０として、それぞれ「ＣＭＤ０」、「ＣＭＤ２」、「ＣＭＤ３」の情報が付加される。【００８９】
一方、ホスト１０が、例えば、５台のハードウェアエンジン３０のうち＃Ｂの機能を有する２台のハードウェアエンジン（＃１、＃４のハードウェアエンジン）３０に対する要求コマンド（ハードウェアエンジン用要求コマンド）として、＃１、＃４の要求コマンド１４０を順次発行する場合、＃１、＃４の要求コマンド１４０のアドオン機能識別子１５２には、＃１、＃４のハードウェアエンジン３０が、＃Ｂの機能を有することを意味する情報として、「１」が付加される。また、＃１、＃４の要求コマンド１４０には、要求コマンド名１６０として、それぞれ「ＣＭＤ１」、「ＣＭＤ４」の情報が付加される。【００９０】
図１１は、ハードウェアエンジン用要求コマンドと要求コマンドＦＩＦＯの構成を説明するための概念図である。【００９１】
図１１において、ホスト１０が、例えば、２種類の機能（＃Ａ、＃Ｂ）を有する５台のハードウェアエンジン３０のうち＃Ａの機能を有する３台のハードウェアエンジン（＃０、＃２、＃３のハードウェアエンジン）３０に対する要求コマンド（ハードウェアエンジン用要求コマンド）として、＃０、＃２、＃３の要求コマンド１４０を順次発行する場合、＃０、＃２、＃３の要求コマンド１４０のコマンドＩＤ１７１には、＃０、＃２、＃３の要求コマンド１４０を識別するための情報として、コマンドＩＤの末尾に、「０」、「２」、「３」がそれぞれ付加される。また、＃０、＃２、＃３の要求コマンド１４０のアドオン機能識別子１５２には、＃０、＃２、＃３のハードウェアエンジン３０が、＃Ａの機能を有することを意味する情報として、「０」が付加される。さらに、＃０、＃２、＃３の要求コマンド１４０のエンジン識別子１５９には、＃０、＃２、＃３のハードウェアエンジン３０を識別するための情報として、「０」、「２」、「３」がそれぞれ付加される。【００９２】
また、＃０、＃２、＃３の要求コマンド１４０のうち、アドオンコマンド格納ホストのアドレス１５４には、＃０、＃２、＃３のコマンド格納領域１０３のアドレスを特定する情報として、アドレスの末尾に「０」、「２」、「３」がそれぞれ付加され、アドオンコマンドサイズ１５５には、＃０、＃２、＃３のアドオンコマンドのサイズを特定する情報として、サイズの末尾に「０」、「２」、「３」がそれぞれ付加され、ログ格納ホストアドレス１５６には、＃０、＃２、＃３のログ領域１０５のアドレスを特定する情報として、アドレスの末尾に「０」、「２」、「３」がそれぞれ付加される。【００９３】
一方、ホスト１０が、例えば、５台のハードウェアエンジン３０のうち＃Ｂの機能を有する２台のハードウェアエンジン（＃１、＃４のハードウェアエンジン）３０に対する要求コマンド（ハードウェアエンジン用要求コマンド）として、＃１、＃４の要求コマンド１４０を順次発行する場合、＃１、＃４の要求コマンド１４０のコマンドＩＤ１７１には、＃１、＃４の要求コマンド１４０を識別するための情報として、コマンドＩＤの末尾に、「１」、「４」がそれぞれ付加される。また、＃１、＃４の要求コマンド１４０のアドオン機能識別子１５２には、＃１、＃４のハードウェアエンジン３０が、＃Ｂの機能を有することを意味する情報として、「１」が付加される。さらに、＃１、＃４の要求コマンド１４０のエンジン識別子１５９には、＃１、＃４のハードウェアエンジン３０を識別するための情報として、「１」、「４」がそれぞれ付加される。【００９４】
また、＃１、＃４の要求コマンド１４０のうち、アドオンコマンド格納ホストのアドレス１５４には、＃１、＃４のコマンド格納領域１０３のアドレスを特定する情報として、アドレスの末尾に「１」、「４」がそれぞれ付加され、アドオンコマンドサイズ１５５には、＃１、＃４のアドオンコマンドのサイズを特定する情報として、サイズの末尾に「１」、「４」がそれぞれ付加され、ログ格納ホストアドレス１５６には、＃１、＃４のログ領域１０５のアドレスを特定する情報として、アドレスの末尾に「１」、「４」がそれぞれ付加される。【００９５】
＃Ａの要求コマンドＦＩＦＯ２０５には、コマンドマネージャ２０２が受信した要求コマンド１４０が、受信した順番に書き込まれる。例えば、コマンドマネージャ２０２が、＃０、＃２、＃３の要求コマンド１４０を、＃０、＃２、＃３の順に受信した場合、＃０、＃２、＃３の要求コマンド１４０は、＃０の要求コマンド１４０から順番に要求コマンドＦＩＦＯ２０５に書き込まれる。要求コマンドＦＩＦＯ２０５に書き込まれた要求コマンド１４０は、＃０、＃２、＃３の順に各ハードウェアエンジン３０に転送される。例えば、まず、＃０の要求コマンド１４０が、＃０のハードウェアエンジン３０に転送され、次に、＃２の要求コマンド１４０が、＃２のハードウェアエンジン３０に転送され、その後、＃３の要求コマンド１４０が、＃３のハードウェアエンジン３０に転送される。【００９６】
また、＃Ｂの要求コマンドＦＩＦＯ２０５には、コマンドマネージャ２０２が受信した要求コマンド１４０が、受信した順番に書き込まれる。例えば、コマンドマネージャ２０２が、＃１、＃４の要求コマンド１４０を、＃１、＃４の順に受信した場合、＃１、＃４の要求コマンド１４０は、＃１の要求コマンド１４０から順番に要求コマンドＦＩＦＯ２０５に書き込まれる。要求コマンドＦＩＦＯ２０５に書き込まれた要求コマンド１４０は、＃１、＃４の順に各ハードウェアエンジン３０に転送される。例えば、まず、＃１の要求コマンド１４０が、＃１のハードウェアエンジン３０に転送され、次に、＃４の要求コマンド１４０が、＃４のハードウェアエンジン３０に転送される。【００９７】
なお、エンジン識別子１５９は、各ハードウェアエンジン３０を識別するために用いられる。即ち、ハードウェアエンジン３０が１台しか存在しない場合、コマンドＩＤ１７１の番号を、固定された番号に設定しても、エンジン識別子１５９を用いることなく、ハードウェアエンジン３０を特定することはできる。しかし、ハードウェアエンジン３０が複数台存在する場合、コマンドＩＤ１７１の番号を固定された番号で順番に設定しても、多数の要求コマンド１４０を扱う際に、各要求コマンド１４０に付加されたコマンドＩＤ１７１だけでは、各ハードウェアエンジン３０を特定できない。そのため、複数の機能を有するハードウェアエンジン３０が複数台存在する場合、各ハードウェアエンジン３０に対応したエンジン識別子１５９を用いて、各ハードウェアエンジン３０を識別することとしている。【００９８】
本実施例によれば、実施例１と同様の効果を奏することができると共に、２種類の機能を有するハードウェアエンジン３０が存在する場合、ＳＳＤコントローラ２０が、２種類の要求コマンドＦＩＦＯ２０５で要求コマンド１４０を管理することができる。
【実施例４】
【００９９】
本実施例は、エラー検出回路３０３に、コマンドチェック部３０６と、溢れチェック部３０７及びバージョンチェック部３０８を配置したものである。【０１００】
図１２は、本発明に係るストレージシステムの第４実施例を示す構成図である。図１２において、本実施例では、説明を容易にする為に、１台のハードウェアエンジン（＃０のハードウェアエンジン）３０が存在する場合について説明する。なお、ハードウェアエンジン３０は、２台以上であっても、また、２種類以上であっても良い。また、１台のハードウェアエンジン３０に対応して、ホスト１０には、＃０のコマンド格納領域１０３と、＃０の結果領域１０４と、＃０のログ領域１０５が配置され、ＳＳＤコントローラ２０には、１台のハードウェアエンジン３０に対する要求コマンド１４０を管理するために、１個の要求コマンドＦＩＦＯ２０５が配置されるが、他の構成は実施例１と同様である。また、ホスト１０には、コマンド１４０の再投入を制御するためのコマンド再投入制御部１０６が配置される。【０１０１】
＃０のハードウェアエンジン３０は、実施例２と同様に、データベース検索処理やグラフ処理を実行する処理回路３０１と、ホスト１０から取得したアドオンコマンドやＳＳＤコントローラ２０から転送された要求コマンド１４０を格納するレジスタブロック３０２と、レジスタブロック３０２に格納されたアドオンコマンドや要求コマンド１４０の内容にエラーがあるか否かを検出するエラー検出回路３０３から構成される。処理回路３０１には、処理回路３０１の処理結果を格納する結果格納部３０４と、ログ情報を生成するログ生成部３０５が配置される。【０１０２】
エラー検出回路３０３には、コマンドチェック部３０６と、溢れチェック部３０７と、バージョンチェック部３０８が配置される。コマンドチェック部３０６は、＃０のコマンド格納領域に格納されたアドオンコマンド（＃０のアドオンコマンド）の各設定値を確認し、各設定値が、＃０のハードウェアエンジン３０で対応可能な値の範囲から外れている場合には、エラーと判定し、この判定結果をログ生成部３０５に転送する。溢れチェック部３０７は、処理回路３０１の処理によって得られたデータのサイズが、＃０の結果領域１０４のサイズを超過する場合、もしくは、ログ生成部３０５の生成によるログ情報のログサイズが、ホスト１０における＃０のログ領域１０５のサイズを超過する恐れのある場合に、溢れエラーと判定し、この判定結果をログ生成部３０５に転送する。バージョンチェック部３０８は、要求コマンド１４０に記録されたアドオンコマンドのバージョン１５１と、＃０のハードウェアエンジン３０のバージョンとを比較し、＃０のハードウェアエンジン３０が、アドオンコマンドに対応可能なバージョンでなければ、バージョンエラーと判定し、この判定結果をログ生成部３０５に転送する。【０１０３】
この際、ログ生成部３０５は、コマンドチェック部３０６、溢れチェック部３０７又はバージョンチェック部３０８のうちいずれか一つから、エラーの判定結果を受信した場合には、エラーの判定結果を受信次第、エラーの内容を示すログ情報を生成し、生成したログ情報を、ホスト１０のログ領域（＃０のログ領域）１０５にＤＭＡで転送する。なお、処理回路３０１の処理結果は、結果格納部３０４から、ホスト１０の結果領域（＃０の結果領域）１０４にＤＭＡで転送される。【０１０４】
また、ホスト１０のログ領域（＃０のログ領域）１０５に、アドオンコマンドのエラー結果が格納された場合、ホスト１０のコマンド再投入制御部１０６は、ログ領域（＃０のログ領域）１０５に格納されたログ情報を参照して、エラーの内容を確認し、コマンド格納領域（＃０のコマンド格納領域）１０３に格納されたアドオンコマンド（＃０のアドオンコマンド）のエラー箇所を修正後、要求コマンド１４０を再投入するための処理を実行する。例えば、コマンド再投入制御部１０６は、再度、転送要求をＳＳＤコントローラ２０に送信し、その後、ＳＳＤコントローラ２０からの取得要求に応答して、第２の識別情報が付加されたハードウェアエンジン用要求コマンド１４０を再度発行する。【０１０５】
図１３は、ログのフォーマットを示す構成図である。図１３において、ログ３２０は、処理回路３０１で処理出来なかったデータで構成される行データ３２１と、行データ３２１に付加されるログ完了フラグ３２２と、行データ３２１に付加されるエラー番号３２３と、行データ３２１に付加される最終ページ番号３２４とから構成される。ログ完了フラグ３２２には、ログが完了したか否かを示す情報が記録される。エラー番号３２３には、エラーを特定するための番号が記録される。最終ページ番号３２４には、処理回路３０１が処理した複数のページのうち最終ページの番号が記録される。【０１０６】
図１４は、エラー番号とエラー内容との関係を示す構成図である。図１４において、ログ３２０には、エラー番号３２３に対応して、エラー内容３２５を示す情報が付加される。例えば、＃０のハードウェアエンジン３０が、アドオンコマンドに対応可能なバージョンでない場合、＃０のエラー番号３２３には、エラー内容３２５として、「アドオン機能バージョン未対応」の情報が付加される。また、アドオンコマンドの内容に不備がある場合、＃０のエラー番号３２３には、エラー内容３２５として、「コマンド不備」の情報が付加される。さらに、処理回路３０１の処理によって得られたデータのサイズが、＃０の結果領域１０４のサイズを超過する場合、＃０のエラー番号３２３には、エラー内容３２５として、「ホストバッファ溢れ」の情報が付加される。【０１０７】
本実施例によれば、実施例１と同様の効果を奏することができると共に、コマンドチェック部３０６と、溢れチェック部３０７及びバージョンチェック部３０８のチュエック結果をホスト１０に通知することができる。
【実施例５】
【０１０８】
本実施例は、ハードウェアエンジン３０が、データベース検索エンジンとして機能するものである。【０１０９】
図１５は、データベースのフォーマットを示す構成図である。図１５において、データベース５００は、ハードウェアエンジン３０が、データベース検索エンジンとして機能する場合の処理対象であって、例えば、リレーショナル・データベース（ＲＤＢ）として構成され、ＤＲＡＭ５０に格納される。データベース５００は、ページ単位で構成されており、各ページは、ページヘッダ５０１と、データ領域５０２と、行ポインタ５０３から構成される。データ領域５０２は、複数の行（１行目からＭ行目）から構成され、各行にデータが記録される。データベース検索エンジンとしての機能を有するハードウェアエンジン３０は、データベース５００のうち、データ領域５０２と、行ポインタ５０３を検索対象として利用する。【０１１０】
図１６は、データベースの行のフォーマットを示す構成図である。図１６において、データベース５００のデータ領域５０２を構成する各行は、行ヘッダ５１０と、＃１〜＃Ｎの列データ５２０から構成される。行ヘッダ５０１は、行サイズ５１１と、第１の付加情報５１２と、第２の付加情報５１３から構成される。【０１１１】
第１の付加情報５１２又は第２の付加情報５１３は、例えば、ＰｏｓｔｇｒｅＳＱＬの行フォーマットで構成され、第１の付加情報５１２又は第２の付加情報５１３には、行生成トランザクションＩＤや行消滅トランザクションＩＤ等の情報が格納される。【０１１２】
コマンドマネージャ２０２は、ＤＲＡＭ５０に格納されたデータベース５００のデータをページ単位で読み出し、読み出したページ単位のデータをハードウェアエンジン３０に転送する。ハードウェアエンジン３０は、アドオンコマンドを基にページ単位のデータを検索対象のデータとして処理する。【０１１３】
図１７は、アドオンコマンドの構成図である。図１７において、アドオンコマンド１８０には、ハードウェアエンジン３０をデータベース検索エンジンとして用いる場合、ハードウェアエンジン３０の実行結果を格納するホスト１０のアドレス１８１と、検索する列の開始位置１８２と、検索する列のデータ形式１８３と、検索する列の比較式１８４と、検索する列の比較値１８５と、検索結果としてホスト１０に返す列の開始位置１８６と、検索結果としてホスト１０に返す列のサイズ１８７を含む情報であって、例えば、２ＫＢの情報が記録される。この場合、比較式１８４と比較値１８５は、検索条件として用いられる。【０１１４】
図１８は、ハードウェアエンジンによるデータベース検索処理を説明するためのフローチャートである。この処理は、データベース検索エンジンとしてのハードウェアエンジン３０が、ＳＳＤコントローラ２０のコマンドマネージャ２０２から、ハードウェアエンジン用要求コマンド１４０を受信したことを条件に開始される。【０１１５】
図１８において、ハードウェアエンジン用要求コマンド１４０を受信したハードウェアエンジン３０は、処理回路３０１がデータベース検索処理を開始する。まず、処理回路３０１は、要求コマンド１４０の上位領域１５０のうちアドオンコマンドを格納するホスト１０のアドレス１５４を基にホスト１０から、アドオンコマンド１８０をＤＭＡで取得し、取得したアドオンコマンド１８０の内容をレジスタブロック３０２に保持する（Ｓ５１）。【０１１６】
次に、処理回路３０１は、ＤＲＡＭ５０から転送されたデータベース５００を参照し、データベース５００の１ページ目のページヘッダ５０１から行数を取得し（Ｓ５２）、続いてデータベース５００の１ページ目の行ポインタ５０３を１行目から順次取得し（Ｓ５３）、この後、トランザクションＩＤの比較処理として、第１の付加情報５１２や第２の付加情報５１３に記録された情報（行生成トランザクションＩＤ、行消滅トランザクションＩＤ）と１ページ目の行データの内容とを比較し（Ｓ５４）、１ページ目の行データの内容が変更された場合に、行スキップを行うか否かを判定する（Ｓ５５）。【０１１７】
処理回路３０１は、ステップＳ５５で否定の判定結果を得た場合、即ち、１ページ目の行データの内容に変更がない場合、データベース５００の１ページ目の各列のデータを読み込み、読み込んだ各列のデータとアドオンコマンド１８０に記録された検索条件（比較式１８４と比較値１８５）とを比較し（Ｓ５６）、読み込んだ各列のデータの中から検索条件を満たすデータを抽出して、応答データを生成し（Ｓ５７）、ステップＳ５９の処理に移行する。【０１１８】
一方、ステップＳ５５で肯定の判定結果を得た場合、即ち、１ページ目の行データの内容が変更されている場合、処理回路３０１は、スキップすべき行に属するデータを、ログ情報を生成するためのデータとして書き出し（Ｓ５８）、ステップＳ５９の処理に移行する。【０１１９】
次に、処理回路３０１は、１ページ目の各行の処理を全て終了したか否かを判定し（Ｓ５９）、ステップＳ５９で否定の判定結果を得た場合、ステップＳ５２の処理に戻り、ステップＳ５２〜ステップＳ５９の処理を繰り返し、ステップＳ５９で肯定の判定結果を得た場合、１ページの処理を全て完了し（Ｓ６０）、このルーチンでの処理を終了する。【０１２０】
この後、処理回路３０１は、全てのページについて、ステップＳ５２〜Ｓ６０の処理を実行し、ステップＳ５７で生成された応答データを実行結果（検索結果）としてホスト１０の結果領域１０４にＤＭＡで転送する。また、処理回路３０１は、ステップＳ５８で書き出されたデータを基にログ情報を生成し、生成したログ情報をホスト１０のログ領域１０５にＤＭＡで転送する。【０１２１】
本実施例によれば、ハードウェアエンジン３０は、ホスト１０から取得したアドオンコマンド１８０を基にＳＳＤコントローラ２０から転送されたデータに対するデータ検索処理を実行し、実行結果をホスト１０に通知することができる。【０１２２】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、要求コマンド１４０に付加される情報のうち上位領域１５０に記録される情報（第１の補助アクセス情報〜第３の補助アクセス情報）を、アドオンコマンドに記録することもできる。この場合、ホスト１０は、要求コマンド１４０のコマンドＩＤに関連づけてアドオンコマンドを管理し、ハードウェアエンジン３０は、ホスト１０とＤＭＡ転送でアドオンコマンドを取得する代わりに、要求コマンド１４０に付加されたコマンドＩＤに対応したアドコマンドの転送をホスト１０に要求し、ホスト１０から転送されたアドオンコマンドに付加された情報を基にＳＳＤコントローラ２０に対して、データ処理で必要なデータの転送を要求することができる。【０１２３】
上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。【０１２４】
また、上記の各構成、機能等は、それらの一部又は全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid  State  Drive）等の記録装置、または、ＩＣ（Integrated  Circuit）カード、ＳＤ（Secure  Digital）メモリカード、ＤＶＤ（Digital  Versatile  Disc）等の記録媒体に記録して置くことができる。
【符号の説明】
【０１２５】
１０  ホスト、２０  ＳＳＤコントローラ、３０  ハードウェアエンジン、４０  ＳＳＤ、５０  ＤＲＡＭ、１０１  要求コマンドキュー、１０２  処理完了キュー、１０３  コマンド格納領域、１０４  結果領域、１０５  ログ領域、１０６  コマンド再投入制御部、１４０  要求コマンド、１８０  アドオンコマンド、２０１  ドアベルレジスタ、２０２  コマンドマネージャ、２０３  ＳＳＤインタフェース、２０４  ＤＲＡＭインタフェース、２０５  要求コマンドＦＩＦＯ、２０６  コマンドキュー、３０１  処理回路、３０２  レジスタブロック、３０３  エラー検出回路、３０４  結果格納部、３０５  ログ生成部、３０６  コマンドチェック部、３０７  溢れチェック部、３０８  バージョンチェック部。
【図１】
2015166540.tif 000003
【図２】
2015166540.tif 000004
【図３】
2015166540.tif 000005
【図４】
2015166540.tif 000006
【図５】
2015166540.tif 000007
【図６】
2015166540.tif 000008
【図７】
2015166540.tif 000009
【図８】
2015166540.tif 000010
【図９】
2015166540.tif 000011
【図１０】
2015166540.tif 000012
【図１１】
2015166540.tif 000013
【図１２】
2015166540.tif 000014
【図１３】
2015166540.tif 000015
【図１４】
2015166540.tif 000016
【図１５】
2015166540.tif 000017
【図１６】
2015166540.tif 000018
【図１７】
2015166540.tif 000019
【図１８】
2015166540.tif 000020
【国際調査報告】
2015166540.tif 000021
2015166540.tif 000022
2015166540.tif 000023
2015166540.tif 000024