(57)【要約】計算機システムは、計算機とストレージ装置を含む。計算機は、プロセッサと第１のメモリを有し、データ処理プログラムを実行する。ストレージ装置は、データ処理プログラムで処理されるデータを格納する。計算機は、さらに、プロトコル処理部とアクセラレータを有する。プロトコル処理部は、ストレージ装置のデータにアクセスする。アクセラレータは、データ処理プログラムの処理の一部を実行する演算部とデータを格納する第２のメモリを含む。計算機が受け付けた、データに対する処理要求に、演算部で実行する処理が含まれている場合には、アクセラレータに、処理要求に対応するデータ処理コマンドを実行させる。アクセラレータは、受け付けたデータ処理コマンドの対象データをプロトコル処理部に要求する。ストレージ装置から読み込まれたデータが、プロトコル処理部を介して、第２のメモリに格納されてから、演算部がデータ処理コマンドを実行する。
2017187582.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと第１のメモリを有してデータ処理プログラムを実行する計算機と、  ネットワークを介して前記計算機に接続されて前記データ処理プログラムで処理されるデータを格納するストレージ装置と、を含む計算機システムであって、  前記計算機は、  前記ネットワークに接続されて前記ストレージ装置に格納されたデータにアクセスするプロトコル処理部と、  前記プロセッサに接続されて前記データ処理プログラムの処理の一部を実行する演算部とデータを格納する第２のメモリとを含んで、前記データ処理プログラムの処理の一部を実行するアクセラレータと、を有し、  前記第１のメモリは、前記データに対する処理要求を受け付けて、前記処理要求に前記演算部で実行する処理が含まれている場合には、前記アクセラレータに前記処理要求に対応するデータ処理コマンドを実行させ、前記処理要求に前記演算部で実行する処理が含まれていない場合には、前記プロトコル処理部に前記処理要求に対応するデータ処理コマンドを発行するデータ処理プログラムを記憶しており、  前記アクセラレータは、  前記データ処理プログラムから受け付けたデータ処理コマンドの対象データを前記プロトコル処理部に要求し、前記プロトコル処理部を介して前記ストレージ装置から前記データを読み込んで前記第２のメモリに格納してから、前記データ処理プログラムの処理の一部を実行する演算部が前記データ処理コマンドを実行することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、  前記データ処理プログラムは、データベース管理プログラムで、  前記ストレージ装置に格納されたデータは、データベースであり、  前記演算部で実行される処理の一部は、検索処理であることを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、  前記アクセラレータは、  前記データ処理プログラムから第１のプロトコルで受け付けたデータ処理コマンドを、第２のプロトコルに変換し、当該変換したデータ処理コマンドをプロトコル処理部に送信し、  前記プロトコル処理部は、  前記第２のプロトコルに変換されたデータ処理コマンドの対象データを前記ストレージ装置から読み込んで、前記アクセラレータに応答することを特徴とする計算機システム。
【請求項４】
請求項３に記載の計算機システムであって、  前記第１のプロトコルは、  前記第１のメモリにデータ処理コマンドを格納して、データ処理コマンドの発行先に前記第１のメモリに格納した当該データ処理コマンドを読み込ませることを特徴とする計算機システム。
【請求項５】
請求項４に記載の計算機システムであって、  前記第１のプロトコルは、  ＮＶＭｅプロトコルであることを特徴とする計算機システム。
【請求項６】
請求項３に記載の計算機システムであって、  前記第２のプロトコルは、  前記ストレージ装置と通信を行うプロトコルであることを特徴とする計算機システム。
【請求項７】
請求項６に記載の計算機システムであって、  前記第２のプロトコルは、  前記ストレージ装置にブロック単位でアクセスするプロトコルであることを特徴とする計算機システム。
【請求項８】
請求項６に記載の計算機システムであって、  前記第２のプロトコルは、  前記ストレージ装置にファイル単位でアクセスするプロトコルであることを特徴とする計算機システム。
【請求項９】
請求項１に記載の計算機システムであって、  前記アクセラレータは、  前記プロトコル処理部が読み込んだ前記対象データについて、前記データ処理コマンドで指定された処理を実行し、当該処理の結果を前記第１のメモリに転送することを特徴とする計算機システム。
【請求項１０】
請求項１に記載の計算機システムであって、  前記プロトコル処理部は、  前記プロセッサからコマンドを受け付ける第１のキューと、前記アクセラレータからデータ処理コマンドを受け付ける第２のキューとを独立して有することを特徴とする計算機システム。
【請求項１１】
請求項１または３に記載の計算機システムであって、  前記プロトコル処理部は、  前記データ処理プログラムから第１のプロトコルで受け付けたデータ処理コマンドを、第２のプロトコルに変換する変換部を有することを特徴とする計算機システム。
【請求項１２】
請求項１１に記載の計算機システムであって、  前記ストレージ装置は、  前記第１のプロトコルと第２のプロトコルを相互に変換する変換部を含むことを特徴とする計算機システム。
【請求項１３】
プロセッサと第１のメモリを有してデータ処理プログラムを実行するサーバであって、  前記サーバは、  データにアクセスするプロトコル処理部と、  前記プロセッサに接続されて前記データ処理プログラムの処理の一部を実行する演算部とデータを格納する第２のメモリとを含んで、前記データ処理プログラムの処理の一部を実行するアクセラレータと、を有し、  前記第１のメモリは、前記データに対する処理要求を受け付けて、前記処理要求に前記演算部で実行する処理が含まれている場合には、前記アクセラレータに前記処理要求に対応するデータ処理コマンドを実行させ、前記処理要求に前記演算部で実行する処理が含まれていない場合には、前記プロトコル処理部に前記処理要求に対応するデータ処理コマンドを発行するデータ処理プログラムを記憶しており、  前記アクセラレータは、  前記データ処理プログラムから受け付けたデータ処理コマンドの対象データを前記プロトコル処理部に要求し、前記プロトコル処理部を介して前記データを読み込んで前記第２のメモリに格納してから、前記データ処理プログラムの処理の一部を実行する演算部が前記データ処理コマンドを実行することを特徴とするサーバ。
【請求項１４】
請求項１３に記載のサーバであって、  前記データ処理プログラムは、データベース管理プログラムで、  前記データは、データベースであり、  前記演算部で実行される処理の一部は、検索処理であることを特徴とするサーバ。
【請求項１５】
請求項１３に記載のサーバであって、  前記アクセラレータは、  前記データ処理プログラムから第１のプロトコルで受け付けたデータ処理コマンドを、第２のプロトコルに変換し、当該変換したデータ処理コマンドをプロトコル処理部に送信し、  前記プロトコル処理部は、  前記第２のプロトコルに変換されたデータ処理コマンドの対象データを読み込んで、前記アクセラレータに応答することを特徴とするサーバ。
【請求項１６】
請求項１５に記載のサーバであって、  前記第１のプロトコルは、  前記第１のメモリにデータ処理コマンドを格納して、データ処理コマンドの発行先に前記第１のメモリに格納した当該データ処理コマンドを読み込ませることを特徴とするサーバ。
【請求項１７】
請求項１５に記載のサーバであって、  前記第１のプロトコルは、  ＮＶＭｅプロトコルであることを特徴とするサーバ。
【請求項１８】
請求項１５に記載のサーバであって、  前記第２のプロトコルは、  前記プロトコル処理部が外部と通信を行うプロトコルであることを特徴とするサーバ。
【請求項１９】
請求項１３に記載のサーバであって、  前記アクセラレータは、  前記プロトコル処理部が読み込んだ前記対象データについて、前記データ処理コマンドで指定された処理を実行し、当該処理の結果を前記第１のメモリに転送することを特徴とするサーバ。
【請求項２０】
請求項１３に記載のサーバであって、  前記プロトコル処理部は、  前記プロセッサからコマンドを受け付ける第１のキューと、前記アクセラレータからデータ処理コマンドを受け付ける第２のキューとを独立して有することを特徴とするサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、Ｉ／Ｏコマンドを処理する計算機に関する。
【背景技術】
【０００２】  ビジネスの現場においてはビッグデータ分析が普及し、分析対象のデータ量は増加の一途をたどっている。例えば、商品の販売データ（POS: Point Of Saleのデータ）の分析等。ビジネスのグローバル化や実店舗及びオンライン店舗等の販売形態の多様化により、データ量が増加する。今後、分析対象のデータベーステーブルはＴＢ（Terra Byte）以上のオーダーとなることが見込まれる。【０００３】  ビッグデータ分析の結果を迅速にビジネスに活かすためには、分析処理を高速化し、短時間で結果を出すことが求められる。しかし、半導体加工の微細化の限界に伴い、分析処理を実行するＣＰＵの性能の向上は、鈍化すると予測されている。【０００４】  ＣＰＵの性能を補うための手段として、ミドルウェアやアプリケーションの一部の処理をCo-Processor等のアクセラレータにオフロードしてハードウェアで処理することにより、システムの性能を向上させる研究または開発が広く行われている（例えば、特許文献１）。【０００５】  特許文献１には、ローカルメモリとCo-Processorを有するノードにデータの解析をオフロードし、Co-Processorとメモリが、ホストプロセッサを介さずに直接通信することで、処理速度の向上を目的とする情報処理装置が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第８９５９０９４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】  しかしながら、上記従来例ではアクセラレータとしてのCo-Processorは対になった同一ノード内のローカルメモリからデータを読み込む構成となっているため、ビッグデータの解析を行うとノード内のローカルメモリの容量が不足するため、外部のストレージシステムにデータを格納する必要が生じる。【０００８】  このため、Co-Processorを有するノードは、ストレージシステムからデータを読み出して、メモリに格納する必要がある。この場合、ノードに接続されたホストプロセッサが、ストレージシステムから主記憶へデータを読み込んでからノード内のメモリへデータを転送することになり、主記憶への書き込みと、主記憶からローカルメモリへの転送が完了するまでCo-Processorは処理を開始できない。【０００９】  したがって、上記従来例ではビッグデータの解析を行う際には、ホストプロセッサと主記憶の書き込みと読み出しによってレイテンシが増大するので、アクセラレータの性能を活かすことができないという問題があった。【００１０】  そこで本発明は、上記問題点に鑑みて成されたもので、大容量のデータを高速に処理する技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】  本発明は、一例として、プロセッサと第１のメモリを有してデータ処理プログラムを実行する計算機と、ネットワークを介して前記計算機に接続されて前記データ処理プログラムで処理されるデータを格納するストレージ装置と、を含む計算機システムであって、前記計算機は、前記ネットワークに接続されて前記ストレージ装置に格納されたデータにアクセスするプロトコル処理部と、前記プロセッサに接続されて前記データ処理プログラムの処理の一部を実行する演算部とデータを格納する第２のメモリとを含んで、前記処理の一部を実行するアクセラレータと、を有し、前記第１のメモリは、前記データに対する処理要求を受け付けて、前記処理要求に前記演算部で実行する処理が含まれている場合には、前記アクセラレータに前記処理要求に対応するデータ処理コマンドを実行させ、前記処理要求に前記演算部で実行する処理が含まれていない場合には、前記プロトコル処理部に前記処理要求に対応するデータ処理コマンドを発行するデータ処理プログラムを記憶しており、前記アクセラレータは、前記データ処理プログラムから受け付けたデータ処理コマンドの対象データを前記プロトコル処理部に要求し、前記プロトコル処理部を介して前記ストレージ装置から前記データ処理プログラムのデータを読み込んで前記第２のメモリに格納してから、前記処理の一部を実行する演算部が前記データ処理コマンドを実行する。
【発明の効果】
【００１２】  本発明によれば、ストレージ装置に格納したデータに対する所定の処理をアクセラレータにオフロードして、アクセラレータがストレージ装置からデータを読み込んでから処理を実行することで大量のデータを高速で処理することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施例を示し、計算機システムの一例を示すブロック図である。
【図２】本発明の第１の実施例を示し、アクセラレータの一例を示すブロック図である。
【図３】本発明の第１の実施例を示し、ＨＢＡの一例を示すブロック図である。
【図４】本発明の第１の実施例を示し、サーバの主記憶にロードされたソフトウェアの一例を示すブロック図である。
【図５】本発明の第１の実施例を示し、デバイス割当テーブルの一例を示す図である。
【図６】本発明の第１の実施例を示し、ＬＵ管理テーブルの一例を示す図である。
【図７】本発明の第１の実施例を示し、計算機システムで行われる初期化処理の一例を示すシーケンス図である。
【図８】本発明の第１の実施例を示し、サーバが発行する検索コマンドの一例を示す図である。
【図９】本発明の第１の実施例を示し、サーバがＩ／Ｏ発行処理を行った場合の説明図である。
【図１０】本発明の第１の実施例を示し、サーバが検索処理をアクセラレータにオフロードする場合のシーケンス図である。
【図１１】本発明の第１の実施例を示し、サーバが検索以外のＩ／Ｏを発行した場合のシーケンス図である。
【図１２】本発明の第２の実施例を示し、ＨＢＡの一例を示すブロック図である。
【図１３】本発明の第２の実施例を示し、サーバが検索処理をアクセラレータにオフロードする場合のシーケンス図である。
【図１４】本発明の第３の実施例を示し、計算機システムの一例を示すブロック図である。
【図１５】本発明の第３の実施例を示し、サーバのメモリにロードされたソフトウェアの一例を示すブロック図である。
【図１６】本発明の第３の実施例を示し、サーバで行われる処理の一例を示すシーケンス図である。
【図１７】本発明の第４の実施例を示し、サーバが検索処理をアクセラレータにオフロードする場合のシーケンス図である。
【図１８】本発明の第５の実施例を示し、計算機システムの一例を示すブロック図である。
【図１９】本発明の第５の実施例を示し、デバイステーブルの一例を示す図である。
【図２０】本発明の第５の実施例を示し、プロトコルテーブルの一例を示す図である。
【図２１】本発明の第５の実施例を示し、計算機システムで行われる変換のパターンを示す説明図である。
【発明を実施するための形態】
【００１４】  以下、本発明の一実施形態について添付図面を用いて説明する。
【実施例１】
【００１５】  図１は、本発明が適用される計算機システムの一例を示すブロック図である。計算機システムはデータ処理プログラムを実行し、データベースを管理するサーバ１０、１１と、データ処理プログラムで処理されるデータであるデータベース５００を格納するストレージシステム２０がＳＡＮ（Storage Area Network）３００を介して接続される。【００１６】  サーバ１０は、データベース処理の一部（例えば、検索（フィルタ）処理や集約処理）をオフロードすることを前提にしたアクセラレータ１４０、１４１を搭載し、ストレージシステム２０に格納されたデータベース５００の処理を行う。【００１７】  サーバ１０は、ホストＣＰＵ１００と主記憶１１０とチップセット１５０とＰＣＩｅ（ＰＣＩ−Ｅｘｐｒｅｓｓ）スイッチ１２０を有し、ホストＣＰＵ１００と主記憶１１０はメモリバス１５１で接続され、ホストＣＰＵ１００とチップセット１５０は内部バス１５２で接続される。【００１８】  チップセット１５０ではＰＣＩｅルートコンプレックス１６０が機能しており、ＰＣＩｅバス１５３を介してＰＣＩｅスイッチ１２０に接続される。ＰＣＩｅスイッチ１２０には、アクセラレータ１４０、１４１と、ＳＡＮ３００を介してストレージシステム２０にアクセスするＨＢＡ（Host Bus Adaptor）１３０、１３１、１３２、１３３が接続される。【００１９】  なお、ＰＣＩｅルートコンプレックス１６０が組み込まれたホストＣＰＵ１００の場合、ホストＣＰＵ１００からＰＣＩｅスイッチ１２０にＰＣＩｅバス（図示省略）が直接接続される。【００２０】  また、アクセラレータおよびＨＢＡの数が少ない場合、ＰＣＩｅスイッチ１２０を利用せずにアクセラレータ及びＨＢＡをＰＣＩｅバスでホストＣＰＵ１００に直接接続しても良い。【００２１】  なお、アクセラレータ１４１は、アクセラレータ１４０と同様の構成であるので重複する説明は省略する。また、ＨＢＡ１３１、１３２、１３３は、ＨＢＡ１３０と同様の構成であるので重複する説明は省略する。【００２２】  アクセラレータ１４０には、ＦＰＧＡ（Field Programmable Gate Array）２００とメモリ（第２のメモリ）２１０が搭載されて、メモリ２１０に読み込んだデータをＦＰＧＡ２００で処理する。ＦＰＧＡ２００は、データベース演算部として機能する。アクセラレータ１４０、１４１は、ＮＶＭｅ（Non Volatile Memory express）プロトコルを用いて通信可能なデバイスである。なお、アクセラレータ１４０、１４１の演算素子はＦＰＧＡに限定されるものではなく、ＧＰＵ（Graphics Processing Unit）や、サブプロセッサなどを採用することができる。【００２３】  ＨＢＡ１３０は、プロトコル処理部２２０とメモリ２３０を有し、ファイバーチャネルで構成されたＳＡＮ３００を介してストレージシステム２０にアクセスするＩ／Ｏデバイスである。ＨＢＡ１３０は、ＳＣＳＩ（Small Computer System Interface）プロトコルで通信可能なＩ／Ｏデバイスである。【００２４】  ホストＣＰＵ１００と、アクセラレータ１４０と、ＨＢＡ１３０は、ホストＣＰＵ１００のメモリ空間上にマッピングされており、ホストＣＰＵ１００は、このメモリマッピング上のアドレスを用いて各Ｉ／Ｏデバイスと相互に通信可能である。【００２５】  なお、サーバ１１��、図示しないネットワークを介して上記サーバ１０に接続され、例えば、サーバ１０の予備系として機能する。サーバ１１は、上記サーバ１０と同様の構成であるので重複する説明は省略する。【００２６】  ストレージシステム２０は、複数の論理ユニット（以下、ＬＵ）６００、６１０、６２０、６３０を有する記憶装置である。各ＬＵ６００〜６２０には１以上のデータベース５００が格納される。ストレージシステム２０は、ＳＡＮ３００を介して複数のサーバ１０、１１からブロックベース（単位）でアクセスすることができる。【００２７】  ＜アクセラレータの構成＞  図２は、アクセラレータ１４０の詳細を示すブロック図である。アクセラレータ１４０は、ＦＰＧＡ２００とメモリ２１０に加えてＦＰＧＡファームウェア２０６が含まれる。【００２８】  アクセラレータ１４０のＦＰＧＡ２００は、ホストＣＰＵ１００からのアクセスを受け付けてＨＢＡ１３０、１３１にデータを要求するＩ／Ｏ処理回路２０１と、フィルタ処理を高速に実行可能なフィルタ処理回路２０２と、所定の集約処理を実行可能な集約処理回路２０３と、メモリ２１０と各回路を接続するスイッチ２０４とを含む。【００２９】  Ｉ／Ｏ処理回路２０１やフィルタ処理回路２０２及び集約処理回路２０３は、ＦＰＧＡ２００のハードウェアとして実装しても良いし、ＦＰＧＡ２００内部の組込プロセッサにより、一部またはすべての機能を実装しても良い。【００３０】  Ｉ／Ｏ処理回路２０１は、ホストＣＰＵ１００からのアクセスを受け付ける機能と、ＨＢＡ１３０、１３１へＩ／Ｏ発行を行う機能（具体的には、ＰＣＩｅエンドポイント機能とＰＣＩｅエンドポイントの制御機能）と、を有し、さらに、サーバ１０からのコマンド（例えば、ＮＶＭｅ）を、ＨＢＡ１３０、１３１で受け付け可能なコマンド（例えば、ＳＣＳＩ）コマンドに変換するコマンド変換部２０５を含む。【００３１】  サーバ１０のホストＣＰＵ１００は、ＦＰＧＡ２００に対し、フィルタ処理の実行を指示する検索コマンドを発行する。検索コマンドを受信したＦＰＧＡ２００のＩ／Ｏ処理回路２０１は、検索コマンドで指定されたブロック（ＬＢＡ）のデータを読み込むリードコマンドをＨＢＡ１３０、１３１に対して発行し、フィルタ処理の対象となるデータベース５００のデータを要求し、アクセラレータ１４０のメモリ２１０へ格納する。【００３２】  Ｉ／Ｏ処理回路２０１が発行したリードコマンドが完了すると、フィルタ処理回路２０２はメモリ２１０に格納された処理対象のデータについて検索コマンドに記述されたフィルタ処理を実施してメモリ２１０に格納する。【００３３】  フィルタ処理は、対象となるデータベース５００と条件式を比較し、条件式に一致するものだけを抽出するという処理であり、特に前記条件式が複雑な場合や、前記対象となるデータベース５００のデータ量が多い場合にはサーバ１０のホストＣＰＵ１００に高い負荷がかかるため、アクセラレータ１４０へのオフロードが有効な処理である。【００３４】  次に、集約処理回路２０３は、フィルタ処理回路２０２が検索した結果に対して検索コマンドに記述された集約処理を行って、メモリ２１０に格納してからＩ／Ｏ処理回路２０１へ通知する。Ｉ／Ｏ処理回路２０１は、メモリ２１０から検索コマンドの処理結果を読み出してサーバ１０の主記憶１１０に書き込む。【００３５】  ここで、集約処理は、例えば、合計、平均、最大値、最小値、データの数などであり、集約処理回路２０３は、フィルタ処理回路２０２の検索結果に対して検索コマンドに記述された集約処理を行う。【００３６】  メモリ２１０には、ＨＢＡ１３０、１３１が読み出した処理対象のデータベース５００のデータが書き込まれ、また、各アクセラレータ１４０が利用するＨＢＡ１３０、１３１の情報がデバイス割当テーブル２１１として書き込まれる。【００３７】  図５は、デバイス割当テーブル２１１の一例を示す図である。デバイス割当テーブル２１１は、サーバ１０で予め生成されてアクセラレータ１４０に設定される。【００３８】  デバイス割当テーブル２１１は、サーバ１０が有するアクセラレータの数に応じた列２１１０と、ＨＢＡ１３０の数に応じた行２１１１が設定され、アクセラレータの識別子とＨＢＡの識別子毎に「１」または「０」の割当情報が設定される。「１」はアクセラレータに割り当てられたＨＢＡを示し、「０」は未割当の状態を示す。【００３９】  デバイス割当テーブル２１１によって、アクセラレータ１４０のＦＰＧＡ２００は、いずれのＨＢＡ１３０〜１３３にアクセスを要求すればよいかを判定することができる。【００４０】  ＜ＨＢＡの構成＞  図３は、ＨＢＡ１３０の詳細を示すブロック図である。ＨＢＡ１３０は、サーバ１０またアクセラレータ１４０からのアクセス要求を受け付けて、ストレージシステム２０へのアクセス命令を発行するプロトコル処理部２２０と、ＳＡＮ３００を介してストレージシステム２０から読み込んだデータを格納するメモリ２３０と、プロトコル処理部２２０で実行されるソフトウェアを格納するＨＢＡファームウェア２５０と、を有する。【００４１】  プロトコル処理部２２０は、ＨＢＡ１３０の外部からのＳＣＳＩのＩ／Ｏコマンドを受けとり、コマンドに応じて以下の処理を行う。【００４２】  リードコマンドの場合は対応したリードアドレスのデータをストレージシステム２０のＬＵ６００〜６３０から読み出して、リードデータの要求先アドレスに書き込む。ライトコマンドの場合は、ライトデータをライトデータ送信元のアドレスからリードして、ライトアドレスに対応するストレージシステム２０のＬＵ６００〜６３０に書き込む。本実施例１では、ＨＢＡ１３０がストレージシステム２０のＬＢＡ（Logical Block Address）をアドレスとして使用する例を示す。【００４３】  プロトコル処理部２２０は、演算処理を行うプロセッサ２２１と、複数のキューを含むコマンドインタフェース２２２と、処理を行うための情報を格納する管理情報格納領域２２３と、ストレージシステム２０との間で通信を行うファイバーチャネルインタフェース２４０と、を含む。なお、管理情報格納領域２２３は、メモリ２３０に格納してもよい。【００４４】  コマンドインタフェース２２２は、主に初期化（あるいはＩ／Ｏ発行キューを生成（または有効化）する機能など）やエラー時に使用するコマンドを受け付けるためのＡｄｍｉｎキュー２２６と、ホストＣＰＵ１００からのＩ／Ｏコマンドを受け付けるため��ホストプロセッサ用Ｉ／Ｏ発行キュー２２７（以下、プロセッサキュー）と、アクセラレータ１４０のＦＰＧＡ２００からのＩ／Ｏコマンドを受け付けるためのＦＰＧＡ用Ｉ／Ｏ発行キュー２２８（以下、ＦＰＧＡキュー）を有する。なお、以下では、プロセッサキュー２２７と、ＦＰＧＡキュー２２８の総称をＩ／Ｏ発行キューとする。【００４５】  これらのＩ／Ｏ発行キューは、ＨＢＡ１３０の管理用レジスタなどとまとめて、コマンドインタフェース２２２としてＰＣＩｅネットワークのアドレス空間（ＭＭＩＯ空間）にマッピングされる。【００４６】  なお、Ａｄｍｉｎキュー２２６と、プロセッサキュー２２７と、ＦＰＧＡキュー２２８は、それぞれ異なるアドレスが割り当てられた独立したキューである。これらのＡｄｍｉｎキュー２２６と、プロセッサキュー２２７と、ＦＰＧＡキュー２２８のアドレスは、ＰＣＩｅネットワークのアドレス空間において記憶デバイスのコマンドインタフェース２２２内に割り当てられる。ＰＣＩｅネットワークのアドレス空間は、サーバ１０で稼働するＯＳ５０２あるいはＨＢＡドライバ５０３、ＦＰＧＡドライバ５０４が割り当てることができる。【００４７】  サーバ１０のホストＣＰＵ１００や、ＦＰＧＡ２００が、これらのＩ／Ｏ発行キューを用いてＩ／Ｏコマンドを発行すると、Ｉ／Ｏコマンドを受け付けたＨＢＡ１３０のプロセッサ２２１が、ライトやリードといったＩ／Ｏコマンド処理を行う。【００４８】  電源起動時のＨＢＡ１３０においては、Ｉ／Ｏ発行キューは有効になっておらず、Ａｄｍｉｎキュー２２６のみが有効となっている。ホストＣＰＵ１００がこのＡｄｍｉｎキュー２２６にＩ／Ｏ発行キューの生成（または有効化）命令（または初期化の命令）を発行することで、当該命令を受けたプロセッサ２２１が、例えば、プロセッサキュー２２７を有効にする。【００４９】  そして、プロセッサ２２１は、サーバ１０のホストＣＰＵ１００にプロセッサキュー２２７を生成（または有効化）した通知を送信し、ホストＣＰＵ１００がプロセッサキュー２２７を使用することが可能となる。【００５０】  ここでは、このＡｄｍｉｎキュー２２６を用いたＩ／Ｏ発行キュー２２７〜２２８の有効化を、Ｉ／Ｏ発行キューを生成する、と言う。Ｉ／Ｏ発行キューはＨＢＡ１３０に複数用意されており、その有効か無効かの情報は、プロトコル処理部２２０の管理情報格納領域（例えば、ＤＲＡＭなどの揮発記憶媒体や、フラッシュメモリ、ＲｅＲＡＭ、ＰＣＭなどの不揮発記憶媒体）２２３に格納されている。【００５１】  なお、Ａｄｍｉｎキュー２２６は、ホストＣＰＵ１００からの初期化の命令を受け付けて、Ｉ／Ｏ発行キュー２２７、２２８を生成（有効可）及び管理するための初期設定インタフェースとして機能する。また、Ｉ／Ｏ発行キュー２２７、２２８はホストＣＰＵ１００とＦＰＧＡ２００からのＩ／Ｏコマンドを受け付けるＩ／Ｏ発行インタフェースとして機能する。【００５２】  図３では、ＨＢＡ１３０が、３つのＩ／Ｏ発行キュー２２７〜２２９を持ち、そのうち、ホストＣＰＵ１００にプロセッサキュー２２７を、ＦＰＧＡ２００にＦＰＧＡキュー２２８を割り当てて有効化し、Ｉ／Ｏ発行キュー２２９は無効となっている���【００５３】  無効となっているＩ／Ｏ発行キュー２２９は、他のプロセッサやアクセラレータ１４１に割り当てることが可能である。例えば、ホストＣＰＵ１００をデュアルコアプロセッサにし、その片方のコアをプロセッサキュー２２７に割り当て、もう一方のコアをＩ／Ｏ発行キュー２２９に割り当てて、コア間の排他処理を行わずに各コアがＩ／Ｏ発行可能な状態にしても良い。または、ＦＰＧＡ２００にＦＰＧＡキュー２２８を割り当て、ＦＰＧＡ５１０（アクセラレータ１４１内のＦＰＧＡ。図示は省略）にＩ／Ｏ発行キュー２２９を割り当てて、複数のＦＰＧＡからひとつのＨＢＡ１３０にＩ／Ｏ命令の発行が可能な状態にしても良い。【００５４】  なお、図３では、ＨＢＡ１３０が３つのＩ／Ｏ発行キューを持っているが、この個数は３つに限るものではなく、何個でも良い。【００５５】  メモリ２３０は、ストレージシステム２０から読み込んだデータと、図５に示したデバイス割当テーブル２１１と、ＬＵ管理テーブル２３２を格納する。デバイス割当テーブル２１１は上述したアクセラレータ１４０が保持するものと同様である。【００５６】  図６は、ＬＵ管理テーブル２３２の一例を示す図である。ＬＵ管理テーブル２３２は、サーバ１０で予め生成されてＨＢＡ１３０に設定される。【００５７】  ＬＵ管理テーブル２３２は、ストレージシステム２０が有するＨＢＡの数に応じた列２３２０と、ＬＵの数に応じた行２３２１が設定され、ＨＢＡの識別子とＬＵの識別子毎に「１」または「０」の割当情報が設定される。「１」はＨＢＡに割り当てられたＬＵを示し、「０」は未割当の状態を示す。【００５８】  ＬＵ管理テーブル２３２によって、ＨＢＡ１３０のプロトコル処理部２２０は、ＨＢＡ１３０〜１３３毎にアクセスするＬＵを判定することができる。【００５９】  ＜サーバの構成＞  図４は、サーバ１０の主記憶１１０にロードされたソフトウェアの一例を示すブロック図である。サーバ１０の主記憶１１０には、ＯＳ５０２と、アクセラレータ１４０を制御するＦＰＧＡドライバ５０４と、ＨＢＡ１３０を制御するＨＢＡドライバ５０３と、データベース５００を管理するＤＢＭＳ（DataBase Management System）５０１がロードされてホストＣＰＵ１００によって実行される。ＤＢＭＳ５０１は、データベース演算部として機能する。【００６０】  なお、ＨＢＡドライバ５０３やＦＰＧＡドライバ５０４は、ＯＳ５０２に含まれても良い。ＤＢＭＳ５０１は、ＰＣＩｅバス１５３に接続されたデバイスにアクセスする際には、ＨＢＡドライバ５０３またはＦＰＧＡドライバ５０４を介してアクセスする。【００６１】  主記憶１１０ではＯＳ１１０がアドレス空間に、主記憶１１０の記憶素子を割り当てることでアクセスを管理する。これに対して、ＮＶＭｅやＳＣＳＩでは、データベース５００の格納領域をブロック単位で管理するが、全てのブロックを主記憶１１０のアドレス空間（論理ブロック）に割り当てず、コマンドのやり取りでアクセスを実現している。【００６２】  ＤＢＭＳ５０１は、図示しないクライアント計算機から検索（フィルタ処理）要求を受け付けると、検索コマンドをＦＰＧＡドライバ５０４からＮＶＭｅコマンドのデータとしてアクセラレータ１４０に発行���、フィルタ処理をアクセラレータ１４０にオフロードする。【００６３】  一方、ＤＢＭＳ５０１は、図示しないクライアント計算機から検索（フィルタ処理）等のアクセラレータにオフロードしている処理以外の要求を受け付けると、当該処理をホストＣＰＵ１００で実施してＨＢＡドライバ５０３からＨＢＡ１３０にＳＣＳＩコマンドを発行して、オフロード処理以外の要求を実行する。【００６４】  すなわち、ＤＢＭＳ５０１は、ＳＱＬ文などで記述されたフィルタ処理や集約処理などの検索処理を含むアクセス要求をアクセラレータ１４０にオフロードし、データベースへの書き込みや削除などの処理はＤＢＭＳ５０１自身がＨＢＡ１３０にＳＣＳＩコマンドを発行して処理を実行する。【００６５】  図８は、サーバ１０のＤＢＭＳ５０１が発行する検索コマンド２１００の一例を示す図である。検索コマンド２１００は、ＳＱＬ文などで検索対象と検索条件を格納する検索コマンド２１０１と、検索処理で使用するＨＢＡ１３０の識別子を格納するＨＢＡ番号２１０２と、アクセスするＬＵ６００〜６３０の識別子を格納するＬＵ番号２１０３と、アクセス対象のアドレスを格納するＬＢＡ２１０４と、アクセス対象のデータ長を格納するデータ長２１０５とを含む。【００６６】  検索コマンド２１００を受け付けたアクセラレータ１４０は、指定されたＨＢＡ１３０に読み込みを要求してストレージシステム２０から、ＬＵ番号２１０３とＬＢＡ２１０４及びデータ長２１５で指定された検索対象のデータを取得して、フィルタ処理を実行する。【００６７】  図４に示したＯＳ５０２と、ＤＢＭＳ５０１と、ＦＰＧＡドライバ５０４及びＨＢＡドライバ５０３の各機能部はプログラムとして主記憶１１０にロードされる。【００６８】  ホストＣＰＵ１００は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。主記憶１１０にはデータ処理プログラムのひとつとしてデータベース管理プログラムが記憶されており、例えば、ホストＣＰＵ１００は、データベース管理プログラムに従って処理することでＤＢＭＳ５０１として機能する。他のプログラムについても同様である。さらに、ホストＣＰＵ１００は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。【００６９】  ＤＢＭＳ５０１の各機能を実現するプログラム、テーブル等の情報は、ストレージシステム２０や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。【００７０】  ＜初期化処理＞  図７は、サーバ１０で行われる初期化処理の一例を示すシーケンス図である。【００７１】  ホストＣＰＵ１００はサーバ１０の初期化開始時に、自身が接続されているＰＣＩｅネットワークの構成情報を主記憶１１０から取得する（８００）。また、本実施例の初期化処理は、主記憶１１０にロードされたＯＳ５０２とＨＢＡドライバ５０３とＦＰＧＡドライバ５０４によって実行される。以下では���ＯＳ５０２、ＨＢＡドライバ５０３またはＦＰＧＡドライバ５０４の処理を行う主体がホストＣＰＵ１００として説明する。【００７２】  ＰＣＩｅネットワークでは、ＰＣＩｅルートコンプレックス１６０を有するチップセット１５０が、起動時に当該チップセット１５０に接続されたＰＣＩｅエンドポイントデバイスのネットワーク構成を検出し、検出結果（ＰＣＩデバイスツリーなど）を主記憶１１０の所定の領域に格納する。【００７３】  ホストＣＰＵ１００は、主記憶１１０の所定の領域にアクセスすることで、格納されているＰＣＩｅネットワーク（あるいはバス）の構成情報を取得できる。ＰＣＩｅネットワークの構成情報としては、ネットワーク（またはバス）上のデバイスの位置や、デバイスの性能や、デバイスの容量等を含むことができる。【００７４】  次に、ホストＣＰＵ１００は、取得したＰＣＩｅネットワークの構成情報を用いて、ＨＢＡ１３０、１３１にアクセスするアクセラレータ１４０を割り当てる（８０１）。割り当てに用いる情報は、例えば、図５のデバイス割当テーブル２１１を読み込んで適用すればよい。なお、アクセラレータ１４１とＨＢＡ１３２、１３３については図示を省略したが、図７と同様に実施すればよい。【００７５】  また、ＨＢＡ１３０とアクセラレータ１４０の割り当ては一対一に限定されるものではない。例えば、ホストＣＰＵ１００が、ＨＢＡ１３０にアクセラレータ１４０とアクセラレータ１４１の両方を割り当てる、または、ＨＢＡ１３０とＨＢＡ１３１の両方にアクセラレータ１４０を割り当てることもできる。【００７６】  次に、ホストＣＰＵ１００は、ＨＢＡ１３０、１３１にＩ／Ｏ発行キューを生成する指令を送信する（８０２）。ここで、ＰＣＩｅルートコンプレックス１６０に接続しているホストＣＰＵ１００は、ＨＢＡ１３０、１３１のプロトコル処理部２２０が有する、Ａｄｍｉｎキュー２２６のアドレスを取得することができる。一方、ＰＣＩｅエンドポイントであるアクセラレータ１４０は、同じくＰＣＩｅエンドポイントであるＡｄｍｉｎキュー２２６のアドレスを取得することができない。【００７７】  そのため、ホストＣＰＵ１００が、ＨＢＡ１３０のＡｄｍｉｎキュー２２６を用いて、自身がＨＢＡ１３０、１３１にＩ／Ｏコマンドを発行するためのプロセッサキュー２２７及び、アクセラレータ１４０がＨＢＡ１３０にＩ／Ｏコマンドを発行するためのＦＰＧＡキュー２２８の２つを生成する（８０２）。【００７８】  続いて、ホストＣＰＵ１００は、ＦＰＧＡキュー２２８のキュー情報（ＦＰＧＡキュー２２８のアドレスと最大同時発行コマンド数（キューの深さ））をアクセラレータ１４０に通知する（８０３）。【００７９】  このように最低限ＦＰＧＡキュー２２８のアドレスとキューの深さがあれば、アクセラレータ１４０はＨＢＡ１３０、１３１にＩ／Ｏコマンドを発行可能となる。さらに、キュー情報として、ＨＢＡ１３０、１３１のＰＣＩｅ（またはＰＣＩ）コンフィグレジスタ（図示省略）のアドレスや、アクセス可能なＬＢＡ（Logical block Address）の範囲（アクセス可能な先頭ＬＢＡと容量など）などの情報を含んでもよい。【００８０】  例えば、アクセラレータ１４０が、ＨＢＡ１３０のＰＣＩ���コンフィグレジスタのアドレスを取得できると、ＨＢＡ１３０のＳＣＳＩレジスタのアドレスも取得できる。アクセラレータ１４０は、これらのアドレスからアクセス可能なＬＢＡの範囲を算出できる。アクセラレータ１４０は、アクセス可能なＬＢＡの範囲を用いて、例えば一台のアクセラレータ１４０にＨＢＡ１３０、１３１が複数割り当てられた場合に、どちらの記憶デバイスにＩ／Ｏコマンドを発行すれば良いかを、アクセラレータ１４０が判定することが可能となる。【００８１】  以上図７の処理によって、ＰＣＩｅネットワークのエンドポイントとして接続されたアクセラレータ１４０のＦＰＧＡ２００は、ホストＣＰＵ１００からＦＰＧＡキュー２２８のキュー情報を取得することができる。これにより、ＰＣＩｅエンドポイントのアクセラレータ１４０から同じくＰＣＩｅエンドポイントのＨＢＡ１３０にＩ／Ｏコマンドを発行することが可能となって、アクセラレータ１４０はＨＢＡ１３０に接続されたストレージシステム２０のデータベース５００にアクセスすることが可能となるのである。【００８２】  なお、ホストＣＰＵ１００がＡｄｍｉｎキュー２２６を用いてプロセッサキュー２２７とＦＰＧＡキュー２２８を生成する手順を例として説明したが、ホストＣＰＵ１００がＡｄｍｉｎキュー２２６のアドレスをアクセラレータ１４０に通知し、アクセラレータ１４０がプロセッサキュー２２７とＦＰＧＡキュー２２８を生成しても良い。【００８３】  ＜Ｉ／Ｏ発行処理の概要＞  図９は、サーバ１０がＩ／Ｏ発行処理を行った場合の説明図である。サーバ１０は、検索処理（フィルタ処理）要求を受け付けると、図中実線の経路で処理を行い、検索（フィルタ）処理等のオフロード処理以外の要求を受け付けると、図中破線の経路で処理を行う。【００８４】  まず、検索処理要求を受け付けた場合の処理の概要について説明する。検索処理要求を受け付けると、サーバ１０のＤＢＭＳ５０１が図８に示した検索コマンド２１００を生成してアクセラレータ１４０に検索処理をオフロードする。【００８５】  アクセラレータ１４０のＦＰＧＡ２００は、サーバ１０から受信したＮＶＭｅのコマンドの検索コマンド２１００に含まれる処理対象のデータを、ＳＣＳＩコマンドに変換してＨＢＡ１３０に検索対象のデータの取得を要求する。ＨＢＡ１３０はＳＣＳＩコマンドに変換された要求に基づいてストレージシステム２０のデータベース５００から指定されたデータを取得して、アクセラレータ１４０のメモリ２１０に書き込む。【００８６】  なお、ＨＢＡ１３０によるアクセラレータ１４０のメモリ２１０への書き込みは、ＦＰＧＡ２００が変換したＳＣＳＩコマンドに返信先のアドレスとしてメモリ２１０の所定のアドレスを通知すればよい。【００８７】  次に、ＦＰＧＡ２００のフィルタ処理回路２０２では、ＨＢＡ１３０が取得したデータに対してフィルタ処理を実施する。そして、集約処理回路２０３は、フィルタ処理回路２０２の演算結果に対して所定の集約処理を実施してメモリ２１０に格納して、Ｉ／Ｏ処理回路２０１へ検索処理の完了を通知する。【００８８】  最後に、Ｉ／Ｏ処理回路２０１が検索処理の結果をメモリ２１０からサーバ１０の主記憶１１０へ書き込んでフ���ルタ処理要求を完了する。【００８９】  一方、フィルタ処理等のオフロード処理以外の要求を受け付けると、サーバ１０のＤＢＭＳ５０１は、ＳＣＳＩコマンドを生成してＨＢＡ１３０に処理を要求する。そして、ＨＢＡ１３０を要求されたＳＣＳＩコマンドの応答をサーバ１０に送信して処理を終了する。【００９０】  本実施例１では、ＨＢＡ１３０のコマンドインタフェース２２２に、サーバ１０からのコマンドをＩ／Ｏコマンドを受け付けるためのプロセッサキュー２２７と、アクセラレータ１４０からのＩ／Ｏコマンドを受け付けるためのＦＰＧＡキュー２２８を独立して設定したため、ＨＢＡ１３０は、アクセラレータ１４０からのＮＶＭｅのコマンドを変換したフィルタ処理のＳＣＳＩコマンドと、サーバ１０からのその他の処理要求のＳＣＳＩコマンドとを平行して受け付けることが可能となる。【００９１】  ＜検索処理の詳細＞  図１０は、サーバ１０が検索処理をアクセラレータにオフロードする場合の処理のシーケンス図である。図９で示したように、検索処理要求を受け付けたサーバ１０のＤＢＭＳ５０１は、アクセラレータ１４０に処理をオフロードする。この場合、計算機システムで行われる処理の詳細について、以下に説明する。【００９２】  サーバ１０は、検索処理要求を受け付けると、ＤＢＭＳ５０１を実行するホストＣＰＵ１００が、図８に示した検索コマンド２１００を生成して主記憶１１０へ書き込む（１００１）。次に、ホストＣＰＵ１００は、検索コマンド２１００を発行したことをアクセラレータ１４０に通知する（１００２）。【００９３】  通知を受け付けたアクセラレータ１４０では、Ｉ／Ｏ処理回路２０１が主記憶１１０の所定のアドレスから検索コマンド２１００を取得する（１００３）。Ｉ／Ｏ処理回路２０１のコマンド変換部２０５は、ＮＶＭｅプロトコルの検索コマンド２１００から処理対象のデータの所在（ＨＢＡ番号２１０２、ＬＵ番号２１０３、ＬＢＡ番号２１０４、データ長２１０５）を抽出し、ＳＣＳＩのリードコマンドに変換する（１００４）。なお、異なるインタフェース（またはプロトコル）間のコマンドの変換については、公知又は周知の技術を適用すればよいのでここでは詳述しない。【００９４】  Ｉ／Ｏ処理回路２０１のコマンド変換部２０５は変換したリードコマンドをメモリ２１０に格納する（１００５）。Ｉ／Ｏ処理回路２０１は、リードコマンドを発行したことをＨＢＡ番号２１０２で指定されたＨＢＡ１３０に通知する（１００６）。【００９５】  ＳＣＳＩコマンドに変換されたリードコマンドの発行通知を受信したＨＢＡ１３０のプロトコル処理部２２０は、通知を受けたアクセラレータ１４０のメモリ２１０からリードコマンドを取得する（１００７）。【００９６】  プロトコル処理部２２０は、ファイバーチャネルインタフェース２４０を介してストレージシステム２０のＬＵ番号２１０３で指定されたＬＵ６００〜６３０に対してリードコマンドを発行する（１００８）。なお、リードコマンドは所定の読み出しサイズ（例えば、１２８ＫＢ）毎に発行される。【００９７】  リードコマンドを受け付けたストレージシステム２０は、指定されたデータベース５００のデータを読み込んでＨＢＡ１３０のメモリ２��０に書き込む（１００９）。ストレージシステム２０は、ひとつのリードコマンドが完了すると、ひとつのリード完了通知をプロトコル処理部２２０に通知する（１０１０）。【００９８】  ＨＢＡ１３０のプロトコル処理部２２０は、リードコマンドで要求した全てのデータがメモリ２３０に書き込まれると、当該データを転送してアクセラレータ１４０のメモリ２１０に書き込む（１０１１）。なお、転送するデータは所定の読み出しサイズ（例えば、１２８ＫＢ）毎に行われ、ひとつのデータ転送が完了する度に、プロトコル処理部２２０がＩ／Ｏ処理回路２０１へリード完了通知を送信する（１０１２）。【００９９】  Ｉ／Ｏ処理回路２０１は、リードコマンドで指定した全てのデータがメモリ２１０へ書き込まれると、フィルタ処理回路２０２と集約処理回路２０３に検索コマンド２１０１の実行を指令する（１０１３）。フィルタ処理回路２０２は、メモリ２１０のデータについて検索コマンド２１０１を実施してメモリ２１０にフィルタ処理結果を格納する（１０１４、１０１５）。集約処理回路２０３は、メモリ２１０のフィルタ処理結果について検索コマンド２１００で指定された集約処理を実施してメモリ２１０に結果を格納し（１０１６）、Ｉ／Ｏ処理回路２０１に処理の完了を通知する（１０１７）。【０１００】  完了通知を受け取ると、Ｉ／Ｏ処理回路２０１がメモリ２１０から検索処理の結果を読み込んで、サーバ１０の主記憶１１０に転送する（１０１８）。Ｉ／Ｏ処理回路２０１は、当該データ転送が完了すると、サーバ１０に検索コマンド２１００の処理が完了したことを通知して処理を終了する（１０１９）。【０１０１】  上記処理によって、サーバ１０のＤＢＭＳ５０１が発行したＮＶＭｅの検索コマンド２１００は、アクセラレータ１４０のコマンド変換部２０５でＳＣＳＩコマンドに変換されてＨＢＡ１３０に通知される。これにより、ＨＢＡ１３０は、ストレージシステム２０からデータを読み込んで、インタフェースの異なるＰＣＩｅエンドポイントのデバイス間でデータを転送することができる。【０１０２】  ＜検索処理以外の詳細＞  図１１は、サーバ１０が検索（フィルタ）等のオフロード処理以外の処理を実行する処理のシーケンス図である。図９で示したように、検索処理以外のオフロード処理要求を受け付けたサーバ１０のＤＢＭＳ５０１は、直接ＨＢＡ１３０にＳＣＳＩコマンドを発行して処理を実施する。この場合、計算機システムで行われる処理の詳細について、以下に説明する。なお、以下では、サーバ１０のＤＢＭＳ５０１がデータを単純に読み込むリードコマンドを発行する例を示すが、データ（レコード）の挿入、更新、削除やテーブルの操作についても同様の処理となる。【０１０３】  サーバ１０は、読み込み処理要求を受け付けると、ＤＢＭＳ５０１を実行するホストＣＰＵ１００が、リードコマンドをＳＣＳＩのコマンドとして生成して主記憶１１０へ書き込む（１１０１）。次に、ホストＣＰＵ１００は、ＳＣＳＩコマンドを発行したことをＨＢＡ１３０のプロトコル処理部２２０に通知する（１１０２）。【０１０４】  ＳＣＳＩコマンドの発行通知を受信したＨＢＡ１３０のプロトコル処理部２２０は、サーバ１０の主記憶１１０から���ードコマンドを取得する（１１０３）。【０１０５】  プロトコル処理部２２０は、前記図１０のステップ１００８〜１００９と同様にファイバーチャネルインタフェース２４０を介してストレージシステム２０のＬＵ番号２１０３で指定されたＬＵ６００〜６３０に対してリードコマンドを発行し、ストレージシステム２０は、指定されたデータベース５００のデータを読み込んでＨＢＡ１３０のメモリ２３０に書き込む（１１０４、１１０５）。ストレージシステム２０は、ひとつのリードコマンドが完了すると、ひとつのリード完了通知をプロトコル処理部２２０に通知する（１１０６）。【０１０６】  ＨＢＡ１３０のプロトコル処理部２２０は、リードコマンドで要求した全てのデータがメモリ２３０に書き込まれると、当該データを転送して主記憶１１０に書き込む（１１０７）。プロトコル処理部２２０は全てのデータについて転送が完了すると、サーバ１０のホストＣＰＵ１００へリード完了通知を送信する（１１０８）。【０１０７】  以上の処理では、フィルタ処理等のオフロード処理以外の要求を受け付けたサーバ１０は、アクセラレータ１４０を使用することなくＨＢＡ１３０に所定の命令を発行して処理を完了する。【０１０８】  本実施例１では、ＨＢＡ１３０は、ＰＣＩｅエンドポイントのアクセラレータ１４０からＩ／Ｏコマンド（検索コマンド）を受け付けるＩ／Ｏインタフェース（ＦＰＧＡキュー２２８）と、サーバ１０からのＩ／Ｏコマンドを受け付けるＩ／Ｏインタフェース（プロセッサキュー２２７）を独立させたので、アクセラレータ１４０のＩ／Ｏコマンドと、サーバ１０からのＩ／Ｏコマンドを平行して受け付けることができる。【０１０９】  本実施例１では、上述したように、アクセラレータ１４０がＮＶＭｅのプロトコルで受け付けたコマンドを、ストレージシステム２０と通信するプロトコルであるＳＣＳＩのコマンドに変換してＨＢＡ１３０にデータを要求することができるので、ＳＡＮ３００を介してストレージシステム２０に格納されたデータベース５００のデータにアクセスして、高速にフィルタ処理や集約処理を実行することができる。【０１１０】  すなわち、本実施例１では、ＰＣＩｅエンドポイント間でデータの転送が可能となるので、サーバ１０がストレージシステム２０にアクセスして処理対象のデータをアクセラレータ１４０に転送する必要がなくなるので、サーバ１０の処理負荷も低減できる。【０１１１】  また、ストレージシステム２０が、データベース５００の複製やバックアップを生成して格納する機能を有する場合、データベース５００の冗長化を図ることができる。【０１１２】  また、上記実施例１では、ＤＢＭＳ５０１がアクセラレータ１４０に検索コマンド２１００を発行するプロトコル（第１のプロトコル）としてＮＶＭｅを採用した例を示したが、これに限定されるものではなく、公知又は周知のプロトコルを採用することができる。【０１１３】  また、上記実施例１では、ＨＢＡ１３０がストレージシステム２０にコマンドを発行するプロトコル（第２のプロトコル）としてＳＣＳＩを採用した例を示したが、これに限定されるものではなく、公知又は周知のプロトコルを採用することができる。【０１１４】  また、上��実施例１では、サーバ１０，１１で実行するプログラムはデータベース管理プログラムで、アクセラレータ１４０にデータベース処理の一部（例えば、フィルタ処理や集約処理）をオフロードする例を示したが、これに限定されるものではなく、ストレージシステム２０に格納されたデータを読み出して処理するデータ処理プログラム、例えば、機械学習やデイープラーニングを行う汎用のプログラム、さらには、ユーザが記述したプログラム、例えば、ＰｙｔｈｏｎやＲ言語を使って記述した統計処理プログラムにおいても、その一部の処理をアクセラレータにオフロードすることができる。【０１１５】  また、上記実施例１では、アクセラレータ１４０がストレージシステム２０の論理ユニットを特定して、当該論理ユニットから直接データを読み出すことで、前記従来例のようなホストプロセッサと主記憶間のデータ転送によるボトルネックを解消して、アクセラレータでプロセッサの処理の一部を高速に実行することが可能となる。
【実施例２】
【０１１６】  図１２は、本発明の第２の実施例を示し、ＨＢＡ１３０の一例を示すブロック図である。前記実施例１では、ＮＶＭｅのコマンドをアクセラレータ１４０のコマンド変換部２０５でＳＣＳＩコマンドに変換する例を示したが、本実施例２では、ＨＢＡ１３０のプロトコル処理部２２０で変換する例を示す。【０１１７】  ＨＢＡ１３０のプロトコル処理部２２０には、コマンド変換部２２４が加えられた他は、前記実施例１と同様である。コマンド変換部２２４は、前記実施例１のＩ／Ｏ処理回路２０１のコマンド変換部２０５と同等であり、ＮＶＭｅコマンドをＳＣＳＩコマンドに変換する。【０１１８】  図１３は、サーバ１０が検索処理をアクセラレータ１４０にオフロードする場合のシーケンス図である。本実施例２では、前記実施例１の図１０に示したステップ１００４をステップ１２０２に置き換えて、ステップ１００５をステップ１２０１に置き換えたものである。その他の構成は、前記実施例１と同様である。【０１１９】  ステップ１００１〜１００３は前記実施例１の図１０と同様である。次に、ステップ１２０１では、アクセラレータ１４０のＩ／Ｏ処理回路２０１が、検索コマンド２１００で指定されたＨＢＡ番号２１０２のＨＢＡ１３０に対して、ＬＵ番号２１０３とＬＢＡ２１０４及びデータ長２１０５で指定されたデータに対するリードコマンドをＮＶＭｅのコマンドで生成し、メモリ２１０へ書き込む。【０１２０】  Ｉ／Ｏ処理回路２０１は、リードコマンドの発行を指定されたＨＢＡ１３０のプロトコル処理部２２０に通知し（１００６）、プロトコル処理部２２０はアクセラレータ１４０のメモリ２１０からＮＶＭｅのリードコマンドを取得する（１００７）。その後、ＨＢＡ１３０のプロトコル処理部２２０では、コマンド変換部２２４が、ＮＶＭｅのリードコマンドをＳＣＳＩのリードコマンドに変換する（１２０２）。【０１２１】  そして、プロトコル処理部２２０は、ＳＣＳＩのリードコマンドをストレージシステム２０に発行する（１００８）。ステップ１００８以降の処理は前記実施例１と同様であり、ＨＢＡ１３０がストレージシステム２０からデータをアクセラレータ１４０のメモリ２１０へ書き込むと、アクセラレータ１４０のＦＰＧＡ２００でフィルタ処理及び集約処理が実施される。【０１２２】  本実施例２においても、前記実施例１と同様に、ＨＢＡ１３０がＮＶＭｅコマンドをＳＣＳＩコマンドに変換してストレージシステム２０からデータを取得し、アクセラレータ１４０にデータを転送することができる。これにより、アクセラレータ１４０は、ストレージシステム２０に格納されたデータベース５００のデータを取得して、高速にフィルタ処理や集約処理を実行することができる。【０１２３】  本実施例２では、ＨＢＡ１３０のプロトコル処理部２２０が、ＮＶＭｅプロトコルのコマンドをＳＣＳＩプロトコルのコマンドに変換するので、ＦＰＧＡ２００のコマンド変換部２０５を削除してもよい。
【実施例３】
【０１２４】  図１４は、本発明の第３の実施例を示し、計算機システムの一例を示すブロック図である。本実施例３では、ブロックベースのストレージシステム２０に代わって、ファイルベース（単位）でアクセスするＮＡＳ（Network Attached Storage）２０Ａにデータベース５００を格納した例を示す。【０１２５】  このため、前記実施例１のＳＡＮ３００をＩＰネットワーク３１０に置き換え、ＨＢＡ１３０〜１３３をＮＩＣ１７０〜１７３に置き換えた例を示す。また、サーバ１０では、図１５で示すように、前記実施例１のＯＳ５０２にファイルシステム５１５が加えられ、ＤＢＭＳ５０１にはライブラリ５２０が加えられ、ＯＳ５０２上にはＬＢＡ取得部５２５が稼働する。なお、サーバ１１についても同様に構成される。【０１２６】  図１４において、ＮＩＣ１７０は、サーバ１０またアクセラレータ１４０からのアクセス要求を受け付けて、ストレージシステム２０へのアクセス命令を発行するプロトコル処理部２２０Ａと、ＮＡＳ２０Ａから読み込んだデータを格納するメモリ２３０Ａと、を有する。なお、ＮＩＣ１７１〜１７３についても同様の構成である。なお、プロトコル処理部２２０Ａには、ＩＰネットワーク３１０を介してＮＡＳ２０Ａと通信を行うネットワークインタフェース（図示省略）が含まれる。【０１２７】  図１５は、サーバ１０の主記憶１１０にロードされたソフトウェアの一例を示すブロック図である。【０１２８】  前記実施例１との相違点は、ファイルベースのストレージシステムであるＮＡＳ２０Ａにアクセスするために、ＮＡＳ２０ＡのＬＢＡとファイル名との対応関係を取得する構成と、ＩＰネットワーク３１０をアクセスするための構成である。【０１２９】  すなわち、前記実施例１のＨＢＡドライバ５０３に代わってＮＩＣ１７０を制御するＮＩＣドライバ５０５が主記憶１１０にロードされる。また、主記憶１１０には、前記実施例１の構成に加えて、ＯＳ５０２上で稼働するＬＢＡ取得部５２５が追加される。また、ＯＳ５０２には、ブロックベースのアクセスとファイルベースのアクセスを変換するファイルシステム５１５が追加される。また、ＤＢＭＳ５０１には、ファイル名に対応するＬＢＡを格納するライブラリ５２０が追加される。【０１３０】  アクセラレータ１４０のＦＰＧＡ２００は、ブロックベースでメモリ２１０のアクセスを行うため、ＤＢＭＳ５０１は、ファイル名とＬＢＡの対応関係を取得する。【０１３１】  図１６は、サーバ１０で行われるＬＢＡ取得処理の一例を示すシーケンス図である。ＤＢＭＳ５０１が検索処理要求を受け付けると、ライブラリ５２０は検索対象のファイル名を検索処理要求から取得し（１５０１）、ＬＢＡ取得部５２５にファイル名を通知する（１５０２）。【０１３２】  ＬＢＡ取得部５２５は、取得したファイル名をファイルシステム５１５に問い合わせ、ファイル名に対応するＬＢＡを取得する（１５０３）。ＬＢＡ取得部５２５は、ファイル名に対応するＬＢＡをＤＢＭＳ５０１のライブラリ５２０に通知する。【０１３３】  ＤＢＭＳ５０１は、ライブラリ５２０に格納されたファイル名に対応するＬＢＡから、前記実施例１の図８に示した検索コマンド２１００を生成する。なお、本実施例３では、検���コマンド２１００のうちＨＢＡ番号２１０２にはＮＩＣ１７０の識別子を格納することができる。また、ＮＡＳ２０ＡにｉＳＣＳＩのＬＵＮが設定されている場合にはＬＵＮをＬＵ番号２１０３に格納してもよい。また、ＮＡＳ２０ＡにＬＵＮがない場合にはボリューム識別子などを用いることができる。また、本実施例３では、検索コマンド２１００にファイル名を付加して、アクセラレータ１４０がＮＩＣ１７０にファイル名で要求するようにしても良い。【０１３４】  アクセラレータ１４０では、ＮＶＭｅコマンドの検索コマンド２１００を受け付けると、ＮＩＣ１７０へファイルベースのアクセス要求に変換してデータを取得し、前記実施例１と同様にフィルタ処理を実施する。【０１３５】  以上により、サーバ１０に接続されたストレージシステムがファイルベースでアクセスするＮＡＳ２０Ａの場合であっても、前記実施例１と同様に、アクセラレータ１４０がＮＶＭｅコマンドをファイルベースのアクセス要求に変換してＮＩＣ１７０にデータを要求することができるので、ＩＰネットワーク３１０を介してＮＡＳ２０Ａに格納されたデータベース５００にアクセスして、高速にフィルタ処理や集約処理を実行することができる。【０１３６】  このように、アクセラレータ１４０のコマンド変換部２０５は、ストレージシステムにアクセスするＩ／Ｏデバイスが使用するプロトコル（またはインタフェース）に対応してＮＶＭｅコマンドを変換することができる。【０１３７】  これにより、アクセラレータ１４０は、ストレージシステムに格納されたデータベース５００のデータを直接ローカルのメモリ２１０に書き込んで、フィルタ処理や集約処理をＦＰＧＡ２００で高速に処理することができる。【０１３８】  また、アクセラレータ１４０のコマンド変換部２０５を変更することで、ストレージシステムにアクセスするプロトコルに対応することができ、ＮＡＳやＳＡＮストレージと通信する際の多種多様なプロトコルに対応することが可能となる。
【実施例４】
【０１３９】  図１７は、本発明の第４の実施例を示し、サーバ１０が検索処理をアクセラレータ１４０にオフロードする場合のシーケンス図である。【０１４０】  本実施例４は、前記図１に示したＨＢＡ１３０が、リードコマンドで読み込んだデータをサーバ１０の主記憶１１０のみに書き込む仕様の場合、サーバ１０が検索処理をアクセラレータ１４０にオフロードする処理を示す。【０１４１】  前記実施例１では、図１０で示したように、ＨＢＡ１３０はアクセラレータ１４０のリードコマンドに対して、ストレージシステム２０から読み込んだデータをＰＣＩｅエンドポイントのデバイスであるアクセラレータ１４０のメモリ２１０に書き込んで処理を終了する。【０１４２】  これに対して、ＨＢＡ１３０がストレージシステム２０から読み込んだデータを主記憶１１０のみに転送し、ＰＣＩｅエンドポイントのデバイスにデータを転送できない場合には、図１７に示す処理を実施する。【０１４３】  図１７のステップ１００１〜１０１０までは、前記実施例１の図１０と同様であり、アクセラレータ１４０がＮＶＭｅコマンドの検索コマンド２１００をＳＣＳＩコマンドに変換してＨＢＡ１３０にリードコマンドを指令する。そして、ＨＢＡ１３０はストレージシステム２０から読み込んだデータをメモリ２３０に書き込んで、ストレージシステム２０からからリード完了通知をプロトコル処理部２２０で受け付ける（１００９、１０１０）。【０１４４】  リードコマンドに対応するデータがメモリ２３０に到着すると、プロトコル処理部２２０は、メモリ２３０のデータを主記憶１１０の所定の領域（ＭＭＩＯ）に書き込む（１２１１）。プロトコル処理部２２０は、所定の転送サイズ（例えば、１２８ＫＢ）毎にリード完了通知をアクセラレータ１４０のＩ／Ｏ処理回路２０１に発行する（１２１２）。【０１４５】  アクセラレータ１４０のＩ／Ｏ処理回路２０１は、ＨＢＡ１３０に指令したリードコマンドに対するリード完了通知が全て到着すると、サーバ１０の主記憶１１０からＨＢＡ１３０が読み込んだデータをローカルのメモリ２１０に転送する（１２１３）。【０１４６】  アクセラレータ１４０のＩ／Ｏ処理回路２０１は、サーバ１０の主記憶１１０からデータの転送が完了するとフィルタ処理回路２０２と集約処理回路２０３に検索コマンド２１００の実行を指令する（１０１３）。【０１４７】  以降の処理は前記実施例１の図８に示したステップ１０１４以降と同様であるので図示は省略した。【０１４８】  以上のように、ＨＢＡ１３０がＰＣＩｅエンドポイントのデバイスに、データを転送できない仕様であっても、アクセラレータ１４０がＨＢＡ１３０からのリード完了通知を受け付けて、サーバ１０の主記憶１１０からＨＢＡ１３０が読み込んだデータを取得することができる。これにより、ＨＢＡ１３０の仕様にかかわらず、アクセラレータ１４０による検索処理のオフロードを実現することが可能となるのである。
【実施例５】
【０１４９】  図１８は、本発明の第５の実施例を示し、計算機システムの一例を示すブロック図である。前記実施例１〜４では、ＨＢＡ１３０〜１３３が、ＳＣＳＩプロトコルでＳＡＮ３００と通信を行う例を示したが、本実施例５では、ＳＡＮ３００がＳＣＳＩに加えて、ＮＶＭｅプロトコルのＮＶＭｅ Ｏｖｅｒ  Ｆａｂｒｉｃｓでも通信可能な例を示す。ＳＡＮ３００の構成としては、Ｆｉｂｒｅ  Ｃｈａｎｅｌ（ＦＣ）やインフィニバンド（ＩＢ）あるいはＥｔｈｅｒｎｅｔのいずれかを採用することができる。【０１５０】  本実施例５では、サーバ１０のアクセラレータ１４０とＨＢＡ１３０（＃１）がそれぞれコマンド変換部２０５、２２４を有し、ストレージシステム２０のＨＢＡもそれぞれコマンド変換部を有する例を示す。本実施例５では、サーバ１０のホストＣＰＵ１００がアクセスするＬＵに応じて、コマンドを変換するデバイスを選択する例を示す。【０１５１】  アクセラレータ１４０のコマンド変換部２０５は前記実施例１と同様であり、ＨＢＡ１３０のコマンド変換部２２４は前記実施例２と同様である。また、サーバ１０の主記憶１１０には、前記実施例１の図４に示したソフトウェアに加えて、後述するデバイステーブル１８０が格納される。その他の構成は、前記実施例１、２と同様である。【０１５２】  ストレージシステム２０は、ＣＰＵ４００に接続された主記憶４１０と、ＣＰＵ４００に接続されて図示しないＰＣＩｅルートコンプレックスを有するチップセット４０５と、チップセット４０５に接続されたＰＣＩｅスイッチ４５０と、ＰＣＩｅスイッチ４５０に接続されたＨＢＡ４２０、４３０、４４０と、ＨＢＡ４３０に接続されたＬＵ６０１、６０２と、ＨＢＡ４４０に接続されたＬＵ６０３、６０４と、を含む。【０１５３】  ＬＵ６０１と６０３は、ＳＣＳＩコマンドを受け付けるＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｃｓｉ）仕様のＳＳＤであり、ＬＵ６０２と６０４は、ＮＶＭｅコマンドを受け付けるＳＳＤである。なお、本実施例５では、不揮発記憶媒体としてＳＳＤを用いる例を示したが、ＨＤＤなどを採用することができる。主記憶４１０には、後述するプロトコルテーブル４６０が格納される。【０１５４】  ストレージシステム２０のＨＢＡは、ＳＡＮ３００に接続されるＨＢＡ４２０と、ＬＵ６０１、６０２に接続されるＨＢＡ４３０と、ＬＵ６０３、６０４に接続されるＨＢＡ４４０で構成され、これらのＨＢＡ４２０〜４４０がＰＣＩｅスイッチ４５０を介してチップセット４０５及びＣＰＵ４００に接続される。【０１５５】  次に、ＨＢＡ４２０、４３０、４４０は前記実施例２のＨＢＡ１３０と同様に、プロトコル処理部内にコマンド変換部４２１、４３１、４４１をそれぞれ含む。各コマンド変換部４２１、４３１、４４１は、ＮＶＭｅコマンドをＳＣＳＩコマンドへ変換可能であり、また、ＳＣＳＩコマンドをＮＶＭｅコマンドへ変換可能である。【０１５６】  ストレージシステム２０は、起動の際にＣＰＵ４００がプロトコルテーブル４６０を生成して主記憶４１０に格納する。【０１５７】  また、ストレージシステム２０は、サーバ１０が接続すると、プロトコルテーブル４６０をホストＣＰＵ１００に送信する。サーバ１０のホストＣＰＵ１００は、受信したプロトコルテーブル４６０に基づいて、デバイステーブル１８０を生成し、主記憶１１０に格納する。【０１５８】  図２０は、プロトコルテーブル４６０の一例を示す図である。プロトコルテーブル４６０は、ＬＵ６０１〜６０４の識別子を格納するＬＵ＃４１２と、当該ＬＵ６０１〜６０４が受付可能なプロトコルを格納するプロトコル４１３と、を一つのエントリに含む。【０１５９】  ストレージシステム２０のＣＰＵ４００は、サーバ１０からアクセス要求を受け付けるとプロトコルテーブル４６０を参照してアクセス対象のＬＵのプロトコルを取得し、ＨＢＡ４２０〜４４０のコマンド変換部４２１、４３１、４４１へ変換の有無を示す指令を出力することができる。【０１６０】  なお、起動時に変換を行うコマンド変換部を指定しても良い。【０１６１】  ストレージシステム２０では、ＰＣＩｅルートコンプレックス（図示省略）を有するチップセット４０５が、起動時に当該チップセット１５０に接続されたＰＣＩｅエンドポイントデバイスのネットワーク構成を検出し、検出結果（ＰＣＩデバイスツリーなど）を主記憶４１０の所定の領域に格納する。【０１６２】  ＣＰＵ４００は、主記憶４１０の所定の領域にアクセスすることで、格納されているＰＣＩｅネットワーク（あるいはバス）の構成情報を取得できる。ＰＣＩｅネットワークの構成情報としては、ネットワーク（またはバス）上のデバイスの位置や種類、デバイスの性能やプロトコル、デバイスの容量等を含むことができる。【０１６３】  ＣＰＵ４００は、ＰＣＩｅネットワークの構成情報からＬＵ６０１〜６０４の識別子とプロトコルを取得してプロトコルテーブル４６０を生成し、主記憶４１０の所定の領域に格納する。【０１６４】  図１９は、デバイステーブル１８０の一例を示す図である。デバイステーブル１８０は、ＬＵ６０１〜６０４の識別子を格納するＬＵ＃１８１と、当該ＬＵ６０１〜６０４が受付可能なプロトコルを格納するプロトコル１８２と、当該ＬＵに格納されたデータベースのテーブル名（または識別子）を格納するテーブル１８３と、を一つのエントリに含む。【０１６５】  サーバ１０のＤＢＭＳ５０１は、ストレージシステム２０に接続すると、プロトコルテーブル４６０のデータを取得して、各ＬＵ６０１〜６０４に格納されたデータベースのテーブルの識別子を付与してデバイステーブル１８０を生成する。【０１６６】  サーバ１０のＤＢＭＳ５０１は、データベースのテーブル名を受け付けると、デバイステーブル１８０を参照して、アクセス先のＬＵの識別子とプロトコルを取得することができる。【０１６７】  図２１は、計算機システムで行われるプロトコルの変換のパターンを示す説明図である。サーバ１０は、図示しないクライアント計算機からデータベースへのアクセス要求を受け付けると、アクセス要求の内容に応じて処理を振り分ける。【０１６８】  すなわち、ＤＢＭＳ５０１は、ＳＱＬ文などで記述されたフィルタ処理や集約処理などを含む検索要求はアクセラレータ１４０にオフロードし、データベースへの書き込みや削除などの処理はＤＢＭＳ５０１自身がＨＢＡ１３０にＳＣＳＩコマンドまたはＮＶＭｅコマンドを発行して処理を実行する。��０１６９】  ＤＢＭＳ５０１は、アクセス要求に含まれるデータベースの識別子からデバイステーブル１８０を参照し、アクセス対象のＬＵとプロトコルを取得する。アクセス要求がＳＱＬ文であればＤＢＭＳ５０１はアクセラレータ１４０にＮＶＭｅコマンドで指令を発行し、アクセス先のＬＵが受け付けるプロトコルに応じて変換を実施する。【０１７０】  本実施例５の計算機システムで行われるプロトコルの変換は、図２１のＣＡＳＥ＃１〜＃８で示す８つのパターンに大別される。以下、各ＣＡＳＥ＃１〜＃８について説明する。【０１７１】  （１）ＣＡＳＥ＃１  サーバ１０のＨＢＡ１３０の入力がＳＣＳＩプロトコルで、アクセス対象のＬＵのプロトコルもＳＣＳＩプロトコルで、ＳＡＮ３００もＳＣＳＩプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例１と同様に、アクセラレータ１４０のコマンド変換部２０５がＮＶＭｅコマンドをＳＣＳＩコマンドに変換してＨＢＡ１３０に指令する。【０１７２】  ＨＢＡ１３０はＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０にＳＣＳＩプロトコルでコマンドを転送する。ＨＢＡ４２０はＨＢＡ４４０にＳＣＳＩプロトルのコマンドを転送してエンドポイントのＳＡＳのＬＵ６０１にアクセスする。このパターンでは、ＤＢＭＳ５０１がアクセラレータ１４０に処理をオフロードした場合にアクセラレータ１４０でプロトコルの変換が行われる。【０１７３】  また、ＤＢＭＳ５０１がＳＣＳＩコマンドを発行した場合には、前記実施例１と同様に、ＨＢＡ１３０、ＨＢＡ４２０、４４０がＳＣＳＩコマンドを転送してエンドポイントのＬＵ６０１にアクセスする。【０１７４】  （２）ＣＡＳＥ＃２  サーバ１０のＨＢＡ１３０の入力がＳＣＳＩプロトコルで、アクセス対象のＬＵのプロトコルがＮＶＭｅプロトコルのケースで、ＳＡＮ３００がＳＣＳＩプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例１と同様に、アクセラレータ１４０のコマンド変換部２０５がＮＶＭｅコマンドをＳＣＳＩコマンドに変換してＨＢＡ１３０に指令する。【０１７５】  ＨＢＡ１３０はＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０にＳＣＳＩプロトコルでコマンドを転送する。ＨＢＡ４２０はＨＢＡ４４０にＳＣＳＩプロトルのコマンドを転送し、ＨＢＡ４４０のコマンド変換部４４１でＳＣＳＩコマンドをＮＶＭｅコマンドに変換してエンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。このパターンでは、ＤＢＭＳ５０１がアクセラレータ１４０に処理をオフロードした場合に前記実施例１と同様に、アクセラレータ１４０でプロトコルの変換が行われる。【０１７６】  また、ＤＢＭＳ５０１がＳＣＳＩコマンドを発行した場合には、ＨＢＡ１３０、ＨＢＡ４２０がＳＣＳＩコマンドを転送してＨＢＡ４４０のコマンド変換部４４１でＮＶＭｅコマンドへの変換が行われてエンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。【０１７７】  （３）ＣＡＳＥ＃３  サーバ１０のＨＢＡ１３０の入力がＮＶＭｅプロトコルで、アクセス対象のＬＵのプロトコルがＳＣＳＩプロトコルで、ＳＡＮ３００がＳＣ��Ｉプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例２と同様に、アクセラレータ１４０はＮＶＭｅコマンドでＨＢＡ１３０にＬＵ６０１へのアクセスを指令する。ＨＢＡ１３０のコマンド変換部２２４がＮＶＭｅコマンドをＳＣＳＩコマンドに変換してＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０へ送信する。【０１７８】  ＨＢＡ４２０はＨＢＡ４４０にＳＣＳＩプロトルのコマンドを転送してエンドポイントのＳＡＳのＬＵ６０１にアクセスする。【０１７９】  また、ＤＢＭＳ５０１がＮＶＭｅコマンドを発行した場合には、前記実施例２と同様に、ＨＢＡ１３０のコマンド変換部２２４がＳＣＳＩコマンドへ変換し、ＨＢＡ４２０、４４０がＳＣＳＩコマンドを転送してエンドポイントのＬＵ６０１にアクセスする。【０１８０】  （４）ＣＡＳＥ＃４  サーバ１０のＨＢＡ１３０の入力がＮＶＭｅプロトコルで、アクセス対象のＬＵのプロトコルもＮＶＭｅプロトコルで、ＳＡＮ３００がＳＣＳＩプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例２と同様に、アクセラレータ１４０はＮＶＭｅコマンドでＨＢＡ１３０にＬＵ６０２へのアクセスを指令する。ＨＢＡ１３０のコマンド変換部２２４がＮＶＭｅコマンドをＳＣＳＩコマンドに変換してＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０へ送信する。【０１８１】  ＨＢＡ４２０はＨＢＡ４４０にＳＣＳＩプロトルのコマンドを転送し、ＨＢＡ４４０のコマンド変換部４４１がＳＣＳＩコマンドをＮＶＭｅコマンドに変換してエンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。【０１８２】  また、ＤＢＭＳ５０１がＮＶＭｅコマンドを発行した場合には、前記実施例２と同様に、ＨＢＡ１３０のコマンド変換部２２４がＳＣＳＩコマンドへ変換し、ＨＢＡ４２０がＳＣＳＩコマンドを転送して、上記と同様にＨＢＡ４４０のコマンド変換部４４１がＳＣＳＩコマンドをＮＶＭｅコマンドに変換してエンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。【０１８３】  （５）ＣＡＳＥ＃５  サーバ１０のＨＢＡ１３０の入力がＮＶＭｅプロトコルで、アクセス対象のＬＵのプロトコルがＳＣＳＩプロトコルで、ＳＡＮ３００がＮＶＭｅプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例２と同様に、アクセラレータ１４０はＮＶＭｅコマンドでＨＢＡ１３０にＬＵ６０１へのアクセスを指令する。ＨＢＡ１３０はＮＶＭｅコマンドをそのまま送信し、ＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０へ転送する。【０１８４】  ＨＢＡ４２０はコマンド変換部４２１でＮＶＭｅコマンドをＳＣＳＩコマンドに変換してからＨＢＡ４４０に転送して、エンドポイントのＳＡＳのＬＵ６０１にアクセスする。【０１８５】  また、ＤＢＭＳ５０１がＮＶＭｅコマンドを発行した場合には、ＨＢＡ１３０は上記と同様にそのままＮＶＭｅコマンドをストレージシステム２０へ送信し、ＨＢＡ４４０がＳＣＳＩコマンドに変換してエンドポイントのＳＡＳのＬＵ６０１にアクセスする。【０１８６】  （６）ＣＡＳＥ＃６  サーバ１０のＨＢＡ１３０の入力がＮＶＭｅプロトコルで、アクセス対象のＬＵのプロトコルがＮＶＭｅプロトコルで、ＳＡＮ３００がＮＶＭｅプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例２と同様に、アクセラレータ１４０はＮＶＭｅコマンドでＨＢＡ１３０にＬＵ６０１へのアクセスを指令する。ＨＢＡ１３０はＮＶＭｅコマンドをそのまま送信し、ＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０へ転送する。【０１８７】  ＨＢＡ４２０はコマンド変換部４２１でＮＶＭｅコマンドをＳＣＳＩコマンドに変換してからＨＢＡ４４０に転送し、ＨＢＡ４４０のコマンド変換部４４１がＳＣＳＩコマンドをＮＶＭｅコマンドに変換部して、エンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。【０１８８】  また、ＤＢＭＳ５０１がＮＶＭｅコマンドを発行した場合には、ＨＢＡ１３０は上記と同様にそのままＮＶＭｅコマンドをストレージシステム２０へ送信し、ＨＢＡ４４０がＳＣＳＩコマンドに変換して、さらにＨＢＡ４４０のコマンド変換部４４１がＳＣＳＩコマンドをＮＶＭｅコマンドに変換してエンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。【０１８９】  （７）ＣＡＳＥ＃７  サーバ１０のＨＢＡ１３０の入力がＮＶＭｅプロトコルで、アクセス対象のＬＵのプロトコルがＳＣＳＩプロトコルで、ＳＡＮ３００がＮＶＭｅプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例２と同様に、アクセラレータ１４０はＮＶＭｅコマンドでＨＢＡ１３０にＬＵ６０１へのアクセスを指令する。ＨＢＡ１３０はＮＶＭｅコマンドをそのまま送信し、ＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０へ転送する。【０１９０】  ＨＢＡ４２０はＮＶＭｅコマンドをＨＢＡ４４０に転送し、ＨＢＡ４４０のコマンド変換部４４１がＮＶＭｅコマンドをＳＣＳＩコマンドに変換してエンドポイントのＳＡＳのＬＵ６０１にアクセスする。【０１９１】  また、ＤＢＭＳ５０１がＮＶＭｅコマンドを発行した場合には、ＨＢＡ１３０は上記と同様にそのままＮＶＭｅコマンドをストレージシステム２０へ送信し、ＨＢＡ４４０がＳＣＳＩコマンドに変換してエンドポイントのＳＡＳのＬＵ６０１にアクセスする。【０１９２】  （８）ＣＡＳＥ＃８  サーバ１０のＨＢＡ１３０の入力がＮＶＭｅプロトコルで、アクセス対象のＬＵのプロトコルがＮＶＭｅプロトコルで、ＳＡＮ３００がＮＶＭｅプロトコルのケースである。ＤＢＭＳ５０１が、アクセラレータ１４０に処理をオフロードする場合には、前記実施例２と同様に、アクセラレータ１４０はＮＶＭｅコマンドでＨＢＡ１３０にＬＵ６０１へのアクセスを指令する。ＨＢＡ１３０はＮＶＭｅコマンドをそのまま送信し、ＳＡＮ３００を介してストレージシステム２０のＨＢＡ４２０へ転送する。【０１９３】  ＨＢＡ４２０はＮＶＭｅコマンドをＨＢＡ４４０に転送し、ＨＢＡ４４０はそのままＮＶＭｅコマンドでエンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。【０１９４】  また、ＤＢＭＳ５０１がＮＶＭｅコマンドを発行した場合には、ＨＢＡ１３０は上記と同様にそのままＮＶＭｅコマンドをストレージシステム２０へ送信し、ＨＢＡ４４０がＮＶＭｅコマンドのままエンドポイントのＮＶＭｅのＬＵ６０２にアクセスする。【０１９５】  以上のように、本実施例５によれば、ＳＡＮ３００でＳＣＳＩコマンドやＮＶＭｅコマンドを転送してエンドポイントのＬＵ６０１〜６０４のプロトコルに変換することができるため、所望のプロトコルのＬＵ６０１〜６０４を採用してアクセラレータ１４０からデータを読み込むことが可能となって、プロトコルの制約を受けることなく大量のデータを高速に処理することが可能となる。【０１９６】  なお、使用するHBAやデバイスの仕様とシステム性能の要件をもとに、計算機システムの仕様として、サーバ乃至はストレージシステム内のどの場所でプロトコル変換処理を行うかを決め、計算機システムを構築しても良い。【０１９７】  ＜まとめ＞  上記各実施例のように、プロトコルに応じてコマンドを変換する変換部は、アクセラレータ１４０またはＨＢＡ１３０の少なくとも一方にあればよい。また、複数のアクセラレータ１４０、１４１は、異なる処理を実行するように設定してもよい。【０１９８】  なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。【０１９９】  また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。【０２００】  また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【図１】
2017187582.tif 000003
【図２】
2017187582.tif 000004
【図３】
2017187582.tif 000005
【図４】
2017187582.tif 000006
【図５】
2017187582.tif 000007
【図６】
2017187582.tif 000008
【図７】
2017187582.tif 000009
【図８】
2017187582.tif 000010
【図９】
2017187582.tif 000011
【図１０】
2017187582.tif 000012
【図１１】
2017187582.tif 000013
【図１２】
2017187582.tif 000014
【図１３】
2017187582.tif 000015
【図１４】
2017187582.tif 000016
【図１５】
2017187582.tif 000017
【図１６】
2017187582.tif 000018
【図１７】
2017187582.tif 000019
【図１８】
2017187582.tif 000020
【図１９】
2017187582.tif 000021
【図２０】
2017187582.tif 000022
【図２１】
2017187582.tif 000023
【国際調査報告】
2017187582.tif 000024
2017187582.tif 000025
2017187582.tif 000026
2017187582.tif 000027