図面 (/)

この項目の情報は公開日時点(2017年12月7日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題・解決手段

プロセッサメモリを有し、1以上のアクセラレータと、1以上の記憶デバイスを含む情報処理装置であって、前記情報処理装置は、前記プロセッサと前記アクセラレータ及び前記記憶デバイスを接続するひとつのネットワークを有し、前記記憶デバイスは、前記プロセッサから初期化の命令受け付け初期設定インタフェースと、I/Oコマンドを発行するI/O発行インタフェースと、を有し、前記プロセッサが、前記初期設定インタフェースのアドレス、または前記I/O発行インタフェースのアドレスを、前記アクセラレータに対して通知する。

概要

背景

近年、ビジネスへの活用を目的として、大量のデータを高速解析する技術が注目されている。一般に、サーバホストプロセッサ(以下、プロセッサ)が、HDD(Hard disk drive)等の記憶デバイスからデータを読み出し、データの解析や演算を行っている。

記憶デバイスとしては、HDDと比べて高速にアクセスすることが可能な、フラッシュメモリ記憶媒体とするSSD(Solid State Drive)の普及が進んでいる。さらに、ReRAM(Resistance Random Access Memory)やPCM(Phase Change Memory)等のフラッシュメモリよりも高速にアクセス可能半導体記憶媒体の実用化が進んでいる。

このような記憶デバイスの登場により、高速に大量のデータを読み出すことが可能になった。しかし、プロセッサの処理負荷が高いことや、プロセッサに接続されるバス帯域ボトルネックとなってデータ転送に時間がかかることにより、高速な記憶デバイスの性能を活かすことができず、情報処理装置として高速化できなかった。

従来、情報処理装置に、演算機能を有する装置(以下アクセラレータと呼ぶ)を付加することで、本来プロセッサが実行する処理の一部をそのアクセラレータに分散させる技術が知られている。例えば、プロセッサを持つサーバに、アクセラレータとしてGPU(Graphics Processing Unit)を付加して、プロセッサが実行するプログラム処理の一部をGPUが処理することで処理速度の向上を図るという技術がある。

この技術は、プロセッサが記憶デバイスから、プロセッサに接続されたシステムメモリ処理対象データ転送し、さらにプロセッサがシステムメモリからアクセラレータにデータを転送することで、GPUがデータを処理できるようになる、というデータ転送の多い技術であった。特にプロセッサに接続されるバスをデータが往復するため、そのバスの帯域が性能向上のボトルネックとなることがあった。

特許文献1には、このデータ転送ボトルネックを解消するために、アクセラレータと記憶デバイスが、プロセッサを介さずに直接通信することで、さらなる処理速度の向上を目的とする情報処理装置が記載されている。

特許文献1の技術では、プロセッサとシステムメモリを有する情報処理装置に、GPUと不揮発メモリアレイが一対になって搭載された基板が接続され、GPUと不揮発メモリアレイ間で直接データ転送を行う。不揮発メモリアレイのデータはGPUに転送され、そのGPUの処理結果のみがプロセッサに接続されたバスに転送されるため、バスの帯域がシステムメモリへのアクセスで圧迫されるのを解消できる。

概要

プロセッサとメモリを有し、1以上のアクセラレータと、1以上の記憶デバイスを含む情報処理装置であって、前記情報処理装置は、前記プロセッサと前記アクセラレータ及び前記記憶デバイスを接続するひとつのネットワークを有し、前記記憶デバイスは、前記プロセッサから初期化の命令受け付け初期設定インタフェースと、I/Oコマンドを発行するI/O発行インタフェースと、を有し、前記プロセッサが、前記初期設定インタフェースのアドレス、または前記I/O発行インタフェースのアドレスを、前記アクセラレータに対して通知する。

目的

特許文献1には、このデータ転送ボトルネックを解消するために、アクセラレータと記憶デバイスが、プロセッサを介さずに直接通信することで、さらなる処理速度の向上を目的とする

効果

実績

技術文献被引用数
1件
牽制数
1件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

プロセッサメモリを有し、1以上のアクセラレータと、1以上の記憶デバイスを含む情報処理装置であって、前記情報処理装置は、前記プロセッサと前記アクセラレータ及び前記記憶デバイスを接続するひとつのネットワークを有し、前記記憶デバイスは、前記プロセッサから初期化の命令受け付け初期設定インタフェースと、I/Oコマンドを発行するI/O発行インタフェースと、を有し、前記プロセッサが、前記初期設定インタフェースのアドレス、または前記I/O発行インタフェースのアドレスを、前記アクセラレータに対して通知することを特徴とする情報処理装置。

請求項2

請求項1に記載の情報処理装置であって、前記I/O発行インタフェースは、前記プロセッサからのI/Oコマンドを受け付ける第1のI/O発行インタフェースと、前記1以上のアクセラレータからのI/Oコマンドをそれぞれ受け付ける1以上の第2のI/O発行インタフェースと、を有し、前記記憶デバイスは前記プロセッサとアクセラレータから、それぞれ独立して前記I/Oコマンドを受け付け可能であることを特徴とする情報処理装置。

請求項3

請求項1に記載の情報処理装置であって、前記プロセッサが、前記アクセラレータに対して、前記記憶デバイスに格納されたデータを処理するデータ処理コマンドを発行し、前記データ処理コマンドを受信したアクセラレータは、前記記憶デバイスからデータを読み込んで、前記データ処理コマンドで指定された処理を実行し、前記アクセラレータは、前記処理の結果を、前記プロセッサがアクセス可能な前記メモリに格納することを特徴とする情報処理装置。

請求項4

請求項1に記載の情報処理装置であって、前記プロセッサが、前記ネットワークに接続された1以上の記憶デバイスと、1以上のアクセラレータの情報を収集して、ネットワークの構成情報として前記メモリに格納し、前記プロセッサは、前記ネットワークの構成情報に基づいて、所定の条件を満たす記憶デバイスとアクセラレータの割り当てを導出し、前記プロセッサは、当該導出した割り当てに基づいて、前記記憶デバイスの初期設定インタフェースのアドレス、または前記記憶デバイスのI/O発行インタフェースのアドレスを、前記アクセラレータに通知することを特徴とする情報処理装置。

請求項5

請求項1に記載の情報処理装置であって、前記記憶デバイスに障害が発生したときには、前記プロセッサが前記障害を検知して、前記アクセラレータに前記記憶デバイスの障害を通知することを特徴とする情報処理装置。

請求項6

請求項1に記載の情報処理装置であって、前記記憶デバイスに障害が発生したときには、前記アクセラレータが前記障害を検知して、前記プロセッサに前記記憶デバイスの障害を通知することを特徴とする情報処理装置。

請求項7

請求項1に記載の情報処理装置であって、前記アクセラレータに障害が発生したときには、前記プロセッサが前記障害を検知して、前記アクセラレータの処理を当該プロセッサで引き継ぐことを特徴とする情報処理装置。

請求項8

請求項1に記載の情報処理装置であって、前記アクセラレータは、第1のアクセラレータと第2のアクセラレータを有し、前記第1のアクセラレータに障害が発生したときには、前記プロセッサが前記障害を検知して、前記第1のアクセラレータが割り当てられていた前記記憶デバイスに、前記第2のアクセラレータを割り当てて、前記記憶デバイスの初期設定インタフェースのアドレス、または前記記憶デバイスのI/O発行インタフェースのアドレスを、新たに割り当てた前記第2のアクセラレータに通知することを特徴とする情報処理装置。

請求項9

請求項1に記載の情報処理装置であって、前記プロセッサが、前記ネットワークに接続された1以上の記憶デバイスと、1以上のアクセラレータの情報を収集して、ネットワークの構成情報として前記メモリに格納し、前記プロセッサが、前記ネットワークに新たな記憶デバイスまたは新たなアクセラレータが追加されたときには、前記ネットワークの構成情報に基づいて、所定の条件を満たす記憶デバイスとアクセラレータの割り当てを導出し、前記プロセッサは、当該導出した新たな割り当てに基づいて、前記新たな記憶デバイスまたは前記新たなアクセラレータの割り当てを変更することを特徴とする情報処理装置。

請求項10

プロセッサとメモリを有し、複数の記憶デバイスを含む情報処理装置であって、前記情報処理装置は、前記プロセッサと前記複数の記憶デバイスを接続するひとつのネットワークを有し、前記記憶デバイスは、前記プロセッサから初期化の命令を受け付ける初期設定インタフェースと、I/Oコマンドを発行するI/O発行インタフェースと、を有し、前記プロセッサが、前記初期設定インタフェースのアドレス、または前記I/O発行インタフェースのアドレスを、他の前記記憶デバイスに対して通知することを特徴とする情報処理装置。

請求項11

請求項10に記載の情報処理装置であって、前記I/O発行インタフェースは、前記プロセッサからのI/Oコマンドを受け付ける第1のI/O発行インタフェースと、1以上の前記他の記憶デバイスからのI/Oコマンドをそれぞれ受け付ける1以上の第2のI/O発行インタフェースと、を有し、前記記憶デバイスは前記プロセッサと他の記憶デバイスから、それぞれ独立して前記I/Oコマンドを受け付け可能であることを特徴とする情報処理装置。

請求項12

請求項10に記載の情報処理装置であって、前記記憶デバイスは、データを処理するアクセラレータをそれぞれ含み、前記プロセッサが、前記他の記憶デバイスに対して、当該記憶デバイスに格納されたデータを処理するデータ処理コマンドを発行し、前記データ処理コマンドを受信した他の記憶デバイスは、当該記憶デバイスからデータを読み込んで、前記データ処理コマンドで指定された処理を実行し、前記他の記憶装置は、前記処理の結果を、前記プロセッサがアクセス可能な前記メモリに格納することを特徴とする情報処理装置。

請求項13

請求項10に記載の情報処理装置であって、前記記憶デバイスは、データを処理するアクセラレータをそれぞれ含み、前記プロセッサが、前記ネットワークに接続された1以上の記憶デバイスとアクセラレータの情報を収集して、ネットワークの構成情報として前記メモリに格納し、前記プロセッサは、前記ネットワークの構成情報に基づいて、所定の条件を満たす記憶デバイスと記憶デバイスのアクセラレータの割り当てを導出し、前記プロセッサは、当該導出した割り当てに基づいて、前記記憶デバイスの初期設定インタフェースのアドレス、または前記記憶デバイスのI/O発行インタフェースのアドレスを、前記他の記憶デバイスに通知することを特徴とする情報処理装置。

請求項14

請求項10に記載の情報処理装置であって、前記記憶デバイスに障害が発生したときには、前記プロセッサが前記障害を検知して、前記他の記憶デバイスに前記記憶デバイスの障害を通知することを特徴とする情報処理装置。

請求項15

請求項10に記載の情報処理装置であって、前記記憶デバイスに障害が発生したときには、前記他の記憶デバイスが前記障害を検知して、前記プロセッサに前記記憶デバイスの障害を通知することを特徴とする情報処理装置。

請求項16

請求項10に記載の情報処理装置であって、前記記憶デバイスは、データを処理するアクセラレータをそれぞれ含み、前記プロセッサが、前記ネットワークに接続された複数の記憶デバイスの情報を収集して、ネットワークの構成情報として前記メモリに格納し、前記プロセッサが、前記ネットワークに新たな記憶デバイスが追加されたときには、前記ネットワークの構成情報に基づいて、所定の条件を満たす記憶デバイスとアクセラレータの割り当てを導出し、前記プロセッサは、当該導出した新たな割り当てに基づいて、前記新たな記憶デバイスと前記記憶デバイスのアクセラレータの割り当てを変更することを特徴とする情報処理装置。

技術分野

0001

本発明は、I/Oコマンドを処理する情報処理装置に関する。

背景技術

0002

近年、ビジネスへの活用を目的として、大量のデータを高速解析する技術が注目されている。一般に、サーバホストプロセッサ(以下、プロセッサ)が、HDD(Hard disk drive)等の記憶デバイスからデータを読み出し、データの解析や演算を行っている。

0003

記憶デバイスとしては、HDDと比べて高速にアクセスすることが可能な、フラッシュメモリ記憶媒体とするSSD(Solid State Drive)の普及が進んでいる。さらに、ReRAM(Resistance Random Access Memory)やPCM(Phase Change Memory)等のフラッシュメモリよりも高速にアクセス可能半導体記憶媒体の実用化が進んでいる。

0004

このような記憶デバイスの登場により、高速に大量のデータを読み出すことが可能になった。しかし、プロセッサの処理負荷が高いことや、プロセッサに接続されるバス帯域ボトルネックとなってデータ転送に時間がかかることにより、高速な記憶デバイスの性能を活かすことができず、情報処理装置として高速化できなかった。

0005

従来、情報処理装置に、演算機能を有する装置(以下アクセラレータと呼ぶ)を付加することで、本来プロセッサが実行する処理の一部をそのアクセラレータに分散させる技術が知られている。例えば、プロセッサを持つサーバに、アクセラレータとしてGPU(Graphics Processing Unit)を付加して、プロセッサが実行するプログラム処理の一部をGPUが処理することで処理速度の向上を図るという技術がある。

0006

この技術は、プロセッサが記憶デバイスから、プロセッサに接続されたシステムメモリ処理対象データ転送し、さらにプロセッサがシステムメモリからアクセラレータにデータを転送することで、GPUがデータを処理できるようになる、というデータ転送の多い技術であった。特にプロセッサに接続されるバスをデータが往復するため、そのバスの帯域が性能向上のボトルネックとなることがあった。

0007

特許文献1には、このデータ転送ボトルネックを解消するために、アクセラレータと記憶デバイスが、プロセッサを介さずに直接通信することで、さらなる処理速度の向上を目的とする情報処理装置が記載されている。

0008

特許文献1の技術では、プロセッサとシステムメモリを有する情報処理装置に、GPUと不揮発メモリアレイが一対になって搭載された基板が接続され、GPUと不揮発メモリアレイ間で直接データ転送を行う。不揮発メモリアレイのデータはGPUに転送され、そのGPUの処理結果のみがプロセッサに接続されたバスに転送されるため、バスの帯域がシステムメモリへのアクセスで圧迫されるのを解消できる。

先行技術

0009

米国特許出願公開第2014/129753号明細書

発明が解決しようとする課題

0010

特許文献1には、情報処理装置の初期化の際に、GPUがどのようにしてアクセス先となる不揮発メモリアレイを特定するかについては記載されていない。PCI−Express(以下、PCIe)のエンドポイントとして記憶デバイス及びアクセラレータが接続されると、アクセラレータはアクセス先となる記憶デバイスのコマンドインタフェースアドレスを特定することができないという課題がある。アクセラレータが記憶デバイスのコマンドインタフェースのアドレスを特定できないと、そもそも記憶デバイスにアクセスしてデータを読み出し、プロセッサの処理の一部を実行することもできない、という課題があった。

0011

そこで本発明は、アクセラレータが記憶デバイスを特定して、アクセラレータが記憶デバイスからデータを読み出し、アクセラレータがプロセッサの処理の一部を実行する情報処理装置を提供することを目的とする。

課題を解決するための手段

0012

本発明は、プロセッサとメモリを有し、1以上のアクセラレータと、1以上の記憶デバイスを含む情報処理装置であって、前記情報処理装置は、前記プロセッサと前記アクセラレータ及び前記記憶デバイスを接続するひとつのネットワークを有し、前記記憶デバイスは、前記プロセッサから初期化の命令受け付け初期設定インタフェースと、I/Oコマンドを発行するI/O発行インタフェースと、を有し、前記プロセッサが、前記初期設定インタフェースのアドレス、または前記I/O発行インタフェースのアドレスを、前記アクセラレータに対して通知する。

発明の効果

0013

本発明によれば、アクセラレータが記憶デバイスのコマンドインタフェースのアドレスを特定して、記憶デバイスからデータを読み出し、プロセッサの処理の一部を実行することができるようになり、情報処理装置の処理を高速化できる。

図面の簡単な説明

0014

本発明の第1の実施例を示し、情報処理装置がデータベースフィルタ処理アクセラレータボードオフロードする概念を示す図である。
本発明の第1の実施例を示し、情報処理装置の構成の一例を示すブロック図である。
本発明の第1の実施例を示し、情報処理装置でI/O発行処理を行った場合の説明図である。
本発明の第1の実施例を示し、情報処理装置で行われる初期化処理の一例を示すシーケンス図である。
本発明の第1の実施例を示し、情報処理装置がデータベースのフィルタ処理をFPGAに実行させる例のシーケンス図である。
本発明の第1の実施例を示し、ホストプロセッサのI/Oと、アクセラレータボードのI/Oが混在するときの処理の一例を示すシーケンス図である。
本発明の第1の実施例の変形例を示し、記憶デバイス及びアクセラレータボードを1つのPCIeスイッチに複数接続した構成の一例を示すブロック図である。
本発明の第1の実施例の変形例を示し、記憶デバイスとアクセラレータボードの間のホップ数を表すテーブルである。
本発明の第1の実施例の変形例を示し、アクセラレータボードの処理性能を表すテーブルである。
本発明の第1の実施例の変形例を示し、記憶デバイスの性能を表すテーブルである。
本発明の第1の実施例を示し、記憶デバイスに障害が発生した際に情報処理装置で行われる処理の一例を示すシーケンス図である。
本発明の第1の実施例を示し、アクセラレータボードに障害が発生した際に情報処理装置で行われる処理の一例を示すシーケンス図である。
本発明の第1の実施例を示し、アクセラレータボードに障害が発生した際に情報処理装置で行われる再割り当て処理の一例を示すシーケンス図である。
本発明の第1の実施例を示し、初期化済みの状態で、新たに記憶デバイスまたはアクセラレータボードを追加する情報処理装置の一例を示すブロック図である。
本発明の第1の実施例を示し、情報処理装置が初期化完了後に、新たな記憶デバイスが追加されたときの処理の一例を示すシーケンス図である。
本発明の第1の実施例を示し、情報処理装置が初期化完了後に、新たなアクセラレータボードが追加されたときの処理の一例を示すシーケンス図である。
本発明の第1の実施例の変形例を示し、情報処理装置の一例を示すブロック図である。
本発明の第2の実施例を示し、情報処理装置の一例を示すブロック図である。
本発明の第2の実施例を示し、情報処理装置で行われるデータベース処理の一例を示すシーケンス図である。
本発明の第3の実施例を示し、情報処理装置の一例を示すブロック図である。
本発明の第3の実施例を示し、情報処理装置で行われる初期化処理の一例を示すシーケンス図である。
本発明の第1の実施例を示し、情報処理装置の一例を示すブロック図である。

0015

以下、本発明の実施形態について添付図面を用いて説明する。

0016

初めに、本発明の概要として、データベース処理(以下、DB処理)を行う情報処理装置10について説明する。

0017

図1は、本発明のコンセプトを示すブロック図である。図1は、データベース処理のフィルタ処理をオフロードすることを前提にしたアクセラレータボード50を搭載した情報処理装置10と、情報処理装置10を利用するクライアントサーバ11、12を含む計算機システムである。

0018

フィルタ処理とは、対象となるデータベース(以下、DB)と条件式を比較し、条件式に一致するものだけを抽出するという処理であり、特に前記条件式が複雑な場合や、前記対象となるDBのデータ量が多い場合には情報処理装置10のホストプロセッサ200に高い負荷をかけるため、アクセラレータボード50へのオフロードが有効な処理である。

0019

アクセラレータボード50には、例えば、Field Programmable Gate Array(以下FPGA)や、Graphics Processing Unit(以下GPU)や、サブプロセッサなどが搭載される。アクセラレータボード50は、通常、PCIeインタフェースを持つ基板などに搭載されて、アクセラレータとして情報処理装置10に利用される。

0020

図1の情報処理装置10には、データベース処理を行うホストプロセッサ200(以下、プロセッサ)を持つデータベースサーバ20(以下、DBサーバ)と、データベース(以下、DB)450が格納されている記憶デバイス400と、ホストプロセッサ200の処理をオフロード可能なFPGA500を搭載したアクセラレータボード50が含まれる。なお、データベース処理は、例えば、DBMS(DataBase Management System)が行う処理である。

0021

ホストプロセッサ200と、記憶デバイス400と、アクセラレータボード50及びFPGA500は、PCIeバス300、303によってPCIeスイッチ310と相互に接続される。なお、アクセラレータボード50及びFPGA500は、DBサーバ20(ホストプロセッサ200)のメモリ空間上にマッピングされており、このメモリマッピング上のアドレスを用いて相互に通信可能であり、これをひとつのネットワークと呼ぶ。

0022

FPGA500にはホストプロセッサ200からのアクセスを受け付ける機能及びFPGA500からのI/O発行を行う機能(具体的には、PCIeエンドポイント機能とPCIeエンドポイントの制御機能)を持つI/O処理回路501と、フィルタ処理を高速に実行可能なフィルタ処理回路502と、DB450のデータを一時的に格納するバッファメモリ503を有し、内部バスによって相互に接続される。

0023

I/O処理回路501やフィルタ処理回路502は、両方ともFPGA500のハードウェア回路として実装しても良いし、FPGA500内部の組込プロセッサにより、一部またはすべての機能を実装しても良い。また、本実施例では、アクセラレータボード50としてFPGA500を用いて説明するが、GPUやサブプロセッサを採用しても良い。

0024

クライアントサーバ11及び12は、情報処理装置10が管理するDB450を利用するアプリケーションが動作しているサーバであり、DB処理をDBサーバ20に要求する。

0025

クライアントサーバ11、12からフィルタ処理を使用する命令をDBサーバ20が受信し、DBサーバ20がフィルタ処理をFPGA500にオフロードする手順として、A〜Cを説明する。

0026

DBサーバ20のホストプロセッサ200は、FPGA500に対し、フィルタ処理の実行を指示するコマンドを発行する(A)。コマンドを受信したFPGA500のI/O処理回路501は、記憶デバイス400に対してリード命令を発行し、フィルタ処理の対象となるDB450のデータを取得して、FPGA500のバッファメモリ503へ格納する(B)。

0027

次に、フィルタ処理回路502は、I/O処理回路501がリードしたDB450のデータをバッファメモリ503から読み出して、フィルタ処理を行い、そのフィルタ処理結果を、結果データとしてDBサーバ20に送信する(C)。

0028

このような手順でフィルタ処理をすることで、DBサーバ20に接続されるバス300には、DB450のデータそのものが流れることはなく、コマンド及び結果データのみが流れるため、前記従来例の手順に比べ、バス300に流れるデータ量を減らすことができる。

0029

また、情報処理装置10には、複数のクライアントサーバ11、12を接続できるため、例えば、クライアントサーバ11がフィルタ処理を要求している間に、他のクライアントサーバ12がフィルタ処理以外のDB処理(例えば、更新処理)を要求する可能性がある。

0030

この場合、ホストプロセッサ200は記憶デバイス400に対してI/Oアクセスを行う必要があるが、情報処理装置10は、FPGA500がフィルタ処理を実行中にも、ホストプロセッサ200が記憶デバイス400に対してI/Oを発行することが可能であり、複数の処理を並列に実行し、クライアントサーバ11、12に要求された処理の結果を送信することができる。

0031

次に、図2〜6を用いて、本発明の実施例1を詳細に説明する。

0032

図2は、本発明が適用される情報処理装置10の構成の一例を示すブロック図である。

0033

情報処理装置10は、DBサーバ20とエクスパンダ30を含む。DBサーバ20は、プロセッサ200とシステムメモリ210とチップセット220を有し、これらは内部バス230で接続される。チップセット220ではPCIeルートコンプレックス221が機能しており、PCIeバス2300を介してPCIeスイッチ2310に接続される。

0034

チップセット220には、入力装置出力装置(例えば、ディスプレイ)を有する端末180が接続される。システムメモリ210には、OS110と、PCIeドライバ130と、DBMS120がロードされてホストプロセッサ200で実行される。

0035

PCIeドライバ130は、PCIeネットワーク上に接続された記憶デバイスまたはアクセラレータを制御する。なお、PCIeドライバ130は、OS110に含まれても良い。DBMS120は、PCIeバス2300に接続された装置にアクセスする際には、PCIeドライバ130を介して各装置にアクセスする。

0036

エクスパンダ30は、2つの記憶デバイス400、410と、2つのアクセラレータボード50、51と、PCIeスイッチ2310、2320、2330を含み、それぞれPCIeバス2300〜2304を介してDBサーバ20と接続されている。

0037

記憶デバイス400とアクセラレータボード50はPCIeバス2303を介してPCIeスイッチ2320に接続される。PCIeスイッチ2320はPCIeバス2301を介してPCIeスイッチ2310に接続される。

0038

同様に、記憶デバイス410とアクセラレータボード51はPCIeバス2304を介してPCIeスイッチ2330に接続される。PCIeスイッチ2330はPCIeバス2302を介してPCIeスイッチ2310に接続される。

0039

図2のような構成も、クセレータボード50、51と記憶デバイス400、410は、DBサーバ20のメモリ空間上にマッピングされているため、ひとつのネットワークである。本実施例ではPCIeバスを用いているため、PCIeネットワークと呼ぶ。このように、ひとつのネットワークは、図1の記憶デバイス400とアクセラレータボード50のようにPCIeスイッチ310を一段しか挟まない構成のみに限定するものではない。図2のPCIeスイッチ2310、2320、2330のようにスイッチを複数挟む構成でも、DBサーバ20(ホストプロセッサ200)のメモリ空間上にマッピングされていれば良い。

0040

アクセラレータボード50、51は、それぞれFPGA500、510を搭載する。FPGA500には、I/O処理回路501、フィルタ処理回路502、バッファメモリ503があり、相互に接続される。図示はしないが、FPGA510もFPGA500と同様に構成される。

0041

記憶デバイス400は、NVM(Non Volatile Memory) Expressプロトコル(以下、NVMe)を用いて通信可能な記憶デバイスであり、I/Oコントローラ401とデータベース格納領域404を有する。データベース格納領域404には、DB450が格納される。データベース格納領域404は、例えば、フラッシュメモリ、ReRAM(Resistance Random Access Memory)、PCM(Phase Change random access Memory)などの不揮発記憶媒体で構成することができる。なお、図示はしないが、記憶デバイス410も記憶デバイス400と同様に構成される。

0042

記憶デバイス400のデータベース格納領域404は、直接DBサーバ20(ホストプロセッサ200)のメモリ空間上にはマッピングされておらず、コマンドインタフェースのみがマッピングされている。ホストプロセッサ200やFPGA500が、PCIeバス2300〜2304を用いて直接データベース格納領域404にアクセスすることはできない。このため、ホストプロセッサ200やアクセラレータボード50はI/Oコマンド(リードコマンドライトコマンド)を記憶デバイス400に発行することで、データベース格納領域へのリードライトを実施する。

0043

すなわち、システムメモリ210ではOS110がアドレス空間に、システムメモリ210の記憶素子割り当てることでアクセスを管理する。これに対して、NVMeやSATAでは、データベース格納領域404をブロック単位で管理するが、全てのブロックをシステムメモリ210のアドレス空間(論理ブロック)に割り当てず、コマンドのやり取りでアクセスを実現している。

0044

I/Oコントローラ401は、記憶デバイス400、410外部からのI/Oコマンドを受けとり、コマンドに応じて以下の処理を行う。リードコマンドの場合は対応したリードアドレスのデータをデータベース格納領域404から読み出して、リードデータの要求先アドレスライトする。ライトコマンドの場合は、ライトデータをライトデータ送信元のアドレスからリードして、ライトアドレスに対応するデータベース格納領域404に格納する。

0045

I/Oコントローラ401は、演算処理を行うプロセッサ402と、複数のキューを含むコマンドインタフェース405と、処理を行うための情報を格納する管理情報格納領域403とを含む。

0046

コマンドインタフェース405は、主に初期化(NVMeではI/O発行キューを生成(または有効化)する機能など)やエラー時に使用するAdminコマンドを受け付けるためのAdminキュー406と、ホストプロセッサ200からのI/Oコマンドを受け付けるためのホストプロセッサ用I/O発行キュー407(以下、プロセッサキュー)と、FPGA500からのI/Oコマンドを受け付けるためのFPGA用I/O発行キュー408(以下、FPGAキュー)を持つ。なお、以下では、プロセッサキュー407と、FPGAキュー408の総称をI/O発行キューとする。

0047

これらのI/O発行キューは、記憶デバイス400の管理用レジスタなどとまとめて、コマンドインタフェース405としてPCIeネットワークのアドレス空間(MMIO空間)にマッピングされる。

0048

なお、Adminキュー406と、プロセッサキュー407と、FPGAキュー408は、それぞれ異なるアドレスが割り当てられた独立したキューである。これらのAdminキュー406と、プロセッサキュー407と、FPGAキュー408のアドレスは、PCIeネットワークのアドレス空間において記憶デバイスのコマンドインタフェース405内に割り当てられる。PCIeネットワークのアドレス空間は、DBサーバ20で稼働するOS110あるいはPCIeドライバ130が割り当てることができる。

0049

DBサーバ20のホストプロセッサ200や、FPGA500が、これらのI/O発行キューを用いてI/Oコマンドを発行すると、I/Oコマンドを検知した記憶デバイス400のプロセッサ402が、ライトやリードといったI/Oコマンド処理を行う。

0050

電源起動時の記憶デバイス400においては、I/O発行キューは有効になっておらず、Adminキュー406のみが有効となっている。ホストプロセッサ200がこのAdminキュー406にI/O発行キューの生成(または有効化)命令(または初期化の命令)を発行することで、当該命令を受けたプロセッサ402が、例えば、プロセッサキュー407を有効にする。

0051

そして、プロセッサ402は、DBサーバ20のホストプロセッサ200にホストプロセッサキュー407を生成(または有効化)した通知を送信し、ホストプロセッサ200がプロセッサキュー407を使用することが可能となる。

0052

ここでは、このAdminキュー406を用いたI/O発行キュー407〜408の有効化を、I/O発行キューを生成する、と言う。I/O発行キューは記憶デバイス400に複数用意されており、その有効か無効かの情報は、I/Oコントローラ401の管理情報格納領域(例えば、DRAMなどの揮発記憶媒体や、フラッシュメモリ、ReRAM、PCMなどの不揮発記憶媒体)403に格納されている。

0053

なお、Adminキュー406は、ホストプロセッサ200からの初期化の命令を受け付けて、I/O発行キュー407、408を生成及び管理するための初期設定インタフェースとして機能する。また、I/O発行キュー407、408はホストプロセッサ200とFPGA500からのI/Oコマンドを受け付けるI/O発行インタフェースとして機能する。

0054

図2では、記憶デバイス400が、3つのI/O発行キュー407〜409を持ち、そのうち、ホストプロセッサ200にプロセッサキュー407を、FPGA500にFPGAキュー408を割り当てて有効化し、I/O発行キュー409は無効となっている。

0055

無効となっているI/O発行キュー409は、他のプロセッサやFPGAに割り当てることが可能である。例えば、ホストプロセッサ200をデュアルコアプロセッサにし、その片方コアをプロセッサキュー407に割り当て、もう一方のコアをI/O発行キュー409に割り当てて、コア間排他処理を行わずに各コアがI/O発行可能な状態にしても良い。または、FPGA500にFPGAキュー408を割り当て、FPGA510にI/O発行キュー409を割り当てて、複数のFPGAからひとつの記憶デバイス400にI/O命令の発行が可能な状態にしても良い。

0056

図2では、記憶デバイス400は3つのI/O発行キューを持っているが、この個数は3つに限るものではなく、何個でも良い。

0057

図3は、情報処理装置10でI/O発行処理を行った場合の説明図である。ここで、I/O発行キューを、ホストプロセッサ200用とFPGA500用を独立して用意することの必要性について、図3を用いて説明する。

0058

例えば、NVMeの技術では、記憶デバイス400のプロセッサキュー407は、ホストプロセッサ200が書き込むレジスタで構成され、ホストプロセッサ200がI/Oコマンドを発行した累計個数を記入する。

0059

ホストプロセッサ200が発行したI/Oコマンドは、I/Oコントローラ401の管理情報格納領域403に格納することができる。あるいは、ホストプロセッサ200が発行したI/Oコマンドを、システムメモリ210の所定の領域に格納しても良い。ホストプロセッサ200が発行したI/Oコマンドの格納先については、周知または公知の技術を用いればよいので、本実施例では詳述しない。

0060

一方、記憶デバイス400のプロセッサ200は、過去に処理したコマンド数を管理情報格納領域403に記憶している。例えば、プロセッサキュー407の値と、管理情報格納領域403の値が、どちらの値も4となっていれば、過去にホストプロセッサ200が4つのコマンドを発行し、記憶デバイス400はその4つのコマンドを全て処理し終えたことを示す。

0061

新たにホストプロセッサ200から記憶デバイス400に1つのI/Oコマンドを発行する処理を、図3のA〜Cを用いて説明する。まず、ホストプロセッサ200は、I/Oコマンドをシステムメモリ210の所定のアドレスに生成する(A)。

0062

次に、ホストプロセッサ200が、プロセッサキュー407に、現状の値=「4」に1を足した値=「5」をライトする(B)。

0063

これに対し、I/Oコントローラ401のプロセッサ402は、プロセッサキュー407の値「5」と、管理情報格納領域403に記憶した、過去に処理したコマンド数=「4」の値に差があることを検知し、新たなコマンドがあると判定し、システムメモリ210からコマンドを取得する(C)。

0064

ホストプロセッサ200は、自身がプロセッサキュー407にライトした値を記憶しておくことができるので、次のI/O発行時にプロセッサキュー407をリードすることなく、過去の値に1を足した値を容易に書き込むことができ、高速にコマンドを発行できる。

0065

この場合、FPGA500が、ホストプロセッサ200とプロセッサキュー407を共有して新たにI/Oコマンドを発行しようとすると、まず、プロセッサキュー407を一度リードしなくては、現在の値を知ることができない。

0066

また、FPGA500が、ホストプロセッサ200に対してプロセッサキュー407を更新しないように指示するなど、ホストプロセッサ200との排他処理を行う必要がある。これらは通常のホストプロセッサ200からのI/O発行に比べて時間のかかる上に、ホストプロセッサ200がI/Oコマンドを発行できない時間も生まれ、情報処理装置10の全体の性能が下がる、という問題があった。

0067

一方、本実施例1の記憶デバイス400では、ホストプロセッサ200用にプロセッサキュー407を生成し、FPGA500用にFPGAキュー408を生成する。このように、I/Oコントローラ401が、ホストプロセッサ200とFPGA500毎に独立したI/O発行キューを有する場合は、プロセッサ200とFPGA500の間で、排他処理や余分なI/O発行キューのリードを行わなくて良いため、ホストプロセッサ200とFPGA500は共に高速にI/Oコマンドを発行できる。

0068

図4は、情報処理装置10で行われる初期化処理の一例を示すシーケンス図である。

0069

ホストプロセッサ200は情報処理装置10の初期化開始時に、自身が接続されているPCIeネットワークの構成情報をシステムメモリ210から取得する(1000)。また、本実施例の初期化処理は、システムメモリ210にロードされたOS110とPCIeドライバ130によって実行される。以下では、OS110またはPCIeドライバ130の処理を行う主体がホストプロセッサ200として説明する。

0070

PCIeネットワークでは、PCIeルートコンプレックス221を持つチップセット220が、起動時に当該チップセット220に接続されたPCIeエンドポイントデバイスネットワーク構成を検出し、検出結果(PCIデバイスツリーなど)をシステムメモリ210の所定の領域に格納する。ホストプロセッサ200は、システムメモリ210の所定の領域にアクセスすることで、格納されているPCIeネットワーク(あるいはバス)の構成情報を取得できる。

0071

PCIeネットワークの構成情報としては、ネットワーク(またはバス)上のデバイスの位置や、デバイスの性能や、デバイスの容量等を含むことができる。PCIeネットワークの構成情報は、OS110あるいはPCIeドライバ130の起動時に、ホストプロセッサ200が収集して、システムメモリ210の所定の領域に格納する。

0072

次に、ホストプロセッサ200は、取得したPCIeネットワークの構成情報を用いて、記憶デバイス400、410にアクセスするアクセラレータボード50、51を割り当てる(1001)。割り当てに用いる情報は、例えば、記憶デバイス400、410とアクセラレータボード50、51の間の距離の情報を用いる。なお、アクセラレータボード50に記憶デバイス400、410を割り当てる処理は、PCIeドライバ130あるいはOS110が主体となって行うことができる。以下では、PCIeドライバ130またはOS110を実行するホストプロセッサ200が割り当ての主体として説明する。

0073

距離の情報としては、例えば、PCIeネットワークのホップ数を用いることができる。本実施例では、PCIeスイッチ2310、2320、2330を通過する個数(または回数)をホップ数とする。

0074

FPGA500と記憶デバイス400の通信には、ひとつのPCIeスイッチ2320を通過するので、ホップ数=1である。一方、FPGA510と記憶デバイス400の間はPCIeスイッチ2310、2320、2330を通過し、ホップ数=3である。したがって、図2の構成では、ホップ数の少ないFPGA500を、記憶デバイス400に割り当てる。同様の距離の情報の比較により、記憶デバイス410にはFPGA510を割り当てる。

0075

なお、記憶デバイス400とアクセラレータボード50の割り当ては一対一に限定されるものではない。例えば、ホストプロセッサ200が、記憶デバイス400にFPGA500とFPGA510の両方を割り当てる、または、記憶デバイス400と記憶デバイス410両方にFPGA500を割り当てることもできる。

0076

次に、ホストプロセッサ200は、記憶デバイス400にI/O発行キューを生成する指令を送信する(1002)。ここで、PCIeルートコンプレックス221に接続しているホストプロセッサ200は、記憶デバイス400のI/Oコントローラ401が有する、Adminキュー406のアドレスを取得することができる。一方、前記課題でも述べたように、PCIeエンドポイントであるFPGA500は、同じくPCIeエンドポイントであるAdminキュー406のアドレスを取得することができない。

0077

そのため、ホストプロセッサ200が、記憶デバイス400のAdminキュー406を用いて、自身が記憶デバイス400にI/Oコマンドを発行するためのプロセッサキュー407及び、FPGA500が記憶デバイス400にI/Oコマンドを発行するためのFPGAキュー408の2つを生成する(1002)。

0078

続いて、ホストプロセッサ200は、FPGAキュー408のキュー情報(FPGAキュー408のアドレスと最大同時発行コマンド数(キューの深さ))をFPGA500に通知する(1003)。

0079

このように最低限FPGAキュー408のアドレスとキューの深さがあれば、FPGA500は記憶デバイス400にI/Oコマンドを発行可能となる。さらに、キュー情報として、記憶デバイス400のPCIe(またはPCI)コンフィグレジスタ(図示省略)のアドレスや、アクセス可能なLBA(Logical block Address)の範囲(アクセス可能な先頭LBAと容量など)などの情報を含んでもよい。

0080

例えば、FPGA500が、記憶デバイス400のPCIeコンフィグレジスタのアドレスを取得できると、記憶デバイス400のNVMeレジスタ(図示省略)のアドレスも取得できる。FPGA500は、これらのアドレスからアクセス可能なLBAの範囲を算出できる。FPGA500は、アクセス可能なLBAの範囲を用いて、例えば一台のアクセラレータボード50に記憶デバイス400、410が複数割り当てられた場合に、どちらの記憶デバイスにI/Oコマンドを発行すれば良いかを、FPGA500が判定することが可能となる。

0081

なお、NVMeレジスタは、例えば、「NVM Express」(Revision 1.1b July 2, 2014、NVM Express Workgroup刊)の第37頁〜第45頁等に記載されるレジスタである。

0082

さらに、ホストプロセッサ200は記憶デバイス410にも同様に、Adminキューを用いてプロセッサキューとFPGAキューを生成し(1004)、FPGAキューの情報をFPGA510に通知する(1005)。

0083

以上図4の処理によって、FPGA500は、記憶デバイス400へのI/Oコマンドを発行できるようになり、また、FPGA510は、記憶デバイス410へのI/Oコマンドを発行できるようになる。

0084

なお、ホストプロセッサ200がAdminキュー406を用いてプロセッサキュー407とFPGAキュー408を生成する手順を例として説明したが、ホストプロセッサ200がAdminキュー406のアドレスをFPGA500に通知し、FPGA500がプロセッサキュー407とFPGAキュー408を生成しても良い。

0085

以上図3図4の処理によって、PCIeネットワークのエンドポイントとして接続されたアクセラレータボード50のFPGA500は、ホストプロセッサ200からFPGAキュー408のキュー情報を取得することができる。これにより、PCIeエンドポイントのFPGA500から同じくPCIeエンドポイントの記憶デバイス400にI/Oコマンドを発行することが可能となって、アクセラレータボード50は記憶デバイス400に格納されたDB450のデータにアクセスすることが可能となるのである。

0086

図5は、情報処理装置10の初期化が完了した後に、ホストプロセッサ200がデータベース450のフィルタ処理をFPGA500に実行させる例を示すシーケンス図である。

0087

DBMS120を実行するホストプロセッサ200はまず、FPGA500に対して、フィルタ処理を指示するフィルタ処理コマンドを発行する(1101)。このフィルタ処理コマンドには、少なくとも、フィルタ処理を実行するデータベース450のテーブルの先頭が、記憶デバイス400のDB格納領域404のアドレスのどこにあるかを示す情報と、フィルタ処理を実行するDB450のサイズの情報、フィルタ処理の条件式=Aを含む。なお、フィルタ処理コマンドには、その他に、フィルタ処理の結果データを格納するシステムメモリ210のアドレスを含んでも良い。

0088

フィルタ処理コマンドは、例えば、テーブルの先頭が、記憶デバイス400のLBA=0x1000とし、1M Byteのデータにフィルタ条件式=Aのフィルタ処理を実行する、といった情報を含むコマンドである。

0089

また、フィルタ処理コマンドの発行先(FPGA500またはFPGA510)は、DBMS120または、PCIeドライバ130のどちらが決定するようにしてもよい。PCIeドライバ130が決定する場合は、DBMS120がフィルタ処理コマンドを発行すると、PCIeドライバ130が発行先(FPGA500またはFPGA510)を決定してフィルタ処理コマンドを送信する。

0090

DBMS120を実行するホストプロセッサ200からフィルタ処理コマンドを受信したFPGA500のI/O処理回路501は、フィルタ処理コマンドの情報に従い、記憶デバイス400に対してリードコマンドを発行する(1102)。このリードコマンドは1回でも良いし、複数回でも良い。図示の例では、FPGA500が、1M Byteのリードを、4回に分割して256KByte毎の4つのリードコマンドを発行する例を示す。

0091

4つのリードコマンドは、例えば、LBA=0x1000、0x1200、0x1400、0x1600に対する4回の256K Byteリードコマンドによって、FPGA500は、LBA=0x1000を先頭とする1M Byteのデータをリードする。

0092

記憶デバイス400のDB格納領域404からリードされたデータは、FPGA500のバッファメモリ503に格納される(1103)。4回のリード完了通知を受け取ったI/O処理回路501は、フィルタ処理回路502に対して、バッファメモリ503のデータについて所定のフィルタ処理を実行するよう指示する(1104)。

0093

指示を受け付けたフィルタ処理回路502は、フィルタ条件式=Aのフィルタ処理を実行する。

0094

次に、フィルタ処理回路502は、フィルタ処理の結果をDBサーバ20のシステムメモリ210に送信する(1105)。送信先のアドレスは、フィルタ処理コマンドによって指定しても良いし、予め設定した固定のアドレスとしても良い。

0095

フィルタ処理の完了後、フィルタ処理回路502は完了通知をI/O処理回路501に送信する(1106)。完了通知を受信したI/O処理回路501は、フィルタ処理の完了をホストプロセッサ200に通知し、ホストプロセッサ200が当該完了通知を受け取ることで、一連のフィルタ処理が完了する(1107)。

0096

なお、図5では、フィルタ処理の結果データを格納するアドレスとして、システムメモリ210のアドレスを使用する例を説明したが、フィルタ処理の結果データの格納先アドレスはこれに限定されるものではない。例えば、記憶デバイス400のアドレスを示す情報であれば、記憶デバイス400にフィルタ処理の結果データをライトすれば良いし、アクセラレータボード51のアドレスを示す情報であれば、アクセラレータボード51にフィルタ処理の結果データをライトすれば良いし、アクセラレータボード50のアドレスを示す情報であれば、アクセラレータボード50のメモリ上に保存しておけば良い。

0097

また、フィルタ処理コマンドの中に、フィルタ条件式=Aを直接入れる例を示したが、これに限定されず、フィルタ条件式を得るための情報であれば良い。例えば、システムメモリ210上にフィルタ条件式を格納し、そのフィルタ条件式の格納アドレスをフィルタ処理コマンドの中に入れるとしても良い。

0098

上記図5の処理によって、PCIeバスのエンドポイントに接続されたアクセラレータボード50から、同じくエンドポイントの記憶デバイス400に直接アクセスすることで、DBサーバ20の負荷を低減できる。また、DB450のデータは、PCIeバス2300を通過することなく、PCIeスイッチ2320を介してFPGA500に読み込まれる。このため、PCIeバス2300の性能(転送速度など)がネックにならず、FPGA500が高速にフィルタ処理を実行することが可能となる。特に、図21のようにPCIeスイッチ9000〜9006がツリー状のように構成され、その先に記憶デバイス9300、9400、9500、9600と、アクセラレータ9301、9401、9501、9601が接続されているようなツリー状の構成で数の多い記憶デバイスとアクセラレータの組みを接続したときに本発明は特に効果を発揮する。このとき、アクセラレータ9031がアクセスする記憶デバイスは、全てホップ数1の記憶デバイスとした場合、各記憶デバイス9300、9400、9500、9600からリードしたデータは、PCIeスイッチ9003〜9006で閉じるため、記憶デバイスとアクセラレータの組を増やしてもツリー状の上位のPCIeスイッチ(9000、9001、9002)の帯域を使用しない。よって、フィルタ処理性能をスケールアウトすることが可能となる。

0099

図6は、ホストプロセッサ200のI/Oと、アクセラレータボード50のI/Oが混在するときの処理の一例を示すシーケンス図である。図6の例は、FPGA500がフィルタ処理を実行しているときに、ホストプロセッサ200が記憶デバイス400にリードを行うシーケンス図である。

0100

上記図5のフィルタ処理のシーケンス図と同様に、DBMS120を実行するホストプロセッサ200はまず、FPGA500に対して、フィルタ処理を指示するフィルタ処理コマンドを発行する(1111)。

0101

ホストプロセッサ200からフィルタ処理コマンドを受信したFPGA500のI/O処理回路501は、フィルタ処理コマンドの情報に従い、記憶デバイス400に対してリードコマンドを発行する(1112)。この場合、FPGA500は、上述の初期化時にホストプロセッサ200からアドレスを通知されたFPGAキュー408を使用する。また同時に、ホストプロセッサ200も、記憶デバイス400にリードコマンドを発行したとする(1113)。この場合、ホストプロセッサ200は、プロセッサキュー407を使用する。

0102

図示の例では、記憶デバイス400が、FPGAキュー408の1つ目のリードコマンドを実行し、DB格納領域404から読み込んだデータを、FPGA500のバッファメモリ503に格納する(1114)。記憶デバイス400は、1つ目のリードコマンドのリード完了通知をFPGA500に送信する(1115)。

0103

次に、記憶デバイス400は、プロセッサキュー407のリードコマンドを実行し、DB格納領域404から読み込んだデータを、システムメモリ210に格納する(1116)。記憶デバイス400は、リードコマンドのリード完了通知をホストプロセッサ200に送信する(1117)。

0104

ホストプロセッサ200のI/O処理を完了した記憶デバイス400は、FPGAキュー408の2つ目以降のリードコマンドを順次実行し、DB格納領域404から読み込んだデータを、FPGA500のバッファメモリ503に格納する(1118)。記憶デバイス400は、各リードコマンドのリード完了通知をFPGA500にそれぞれ送信する(1119)。

0105

4回のリード完了通知を受け取ったI/O処理回路501は、フィルタ処理回路502に対して、バッファメモリ503のデータについて所定のフィルタ処理を実行するよう指示する(1120)。指示を受け付けたフィルタ処理回路502は、所定のフィルタ処理を実行する。

0106

次に、フィルタ処理回路502は、フィルタ処理の結果をDBサーバ20のシステムメモリ210に送信する(1121)。フィルタ処理の完了後、フィルタ処理回路502は完了通知をI/O処理回路501に送信する。完了通知を受信したI/O処理回路501は、フィルタ処理の完了をホストプロセッサ200に通知し、ホストプロセッサ200が当該完了通知を受け取ることで、一連のフィルタ処理が完了する(1122)。

0107

以上図5の処理のように、記憶デバイス400は初期化処理(図4)によって、プロセッサキュー407とFPGAキュー408を独立して設けており、どちらのキューを使用してもDB格納領域404のデータをリードやライトすることが可能である。そのため、これらのリード要求はホストプロセッサ200とFPGA500が排他処理を行わなくても、正しく処理される。

0108

例えば、図6では、記憶デバイス400に、FPGA500から4つのリードコマンドを発行されている最中に、ホストプロセッサ200からもリードコマンドが発行された例を示しているが、I/Oコントローラ401は、FPGA500とホストプロセッサ200がリードコマンドを書き込むキューがそれぞれ独立しているため、FPGA500とホストプロセッサ200の排他制御を行う必要はない。よって、情報処理装置10は、処理性能を落とすことなくFPGA500とホストプロセッサ200から並列的にI/Oコマンドを発行できる。

0109

次に、本実施例1において、記憶デバイス400及びアクセラレータボード50が、同一のPCIeスイッチに複数接続されている場合の割り当て方法について、図7〜図9を用いて説明する。

0110

図7は、記憶デバイス及びアクセラレータボードの組を1つのPCIeスイッチ3320に複数接続した構成の一例を示すブロック図である。図7の情報処理装置10は、図2に示したPCIeスイッチ2320に代わってPCIeスイッチ3320及びPCIeバス3303に、記憶デバイス410、420と、アクセラレータボード52を加え、さらにPCIeドライバ130にテーブル140〜160を加えたものである。その他の構成については、前記図2と同様である。

0111

図8は、記憶デバイス400、410、420とアクセラレータボード50〜52の間のホップ数を表すホップ数テーブル140である。ホップ数テーブル140は、図7における記憶デバイス400、410、430と、FPGA500、510、520の間のホップ数を表すものである。ホップ数テーブル140は、情報処理装置10の管理者などによって予め設定されてPCIeドライバ130が管理し、システムメモリ210に格納される。

0112

PCIeスイッチ3330に接続された記憶デバイス410に関しては、ホップ数が最少となるアクセラレータボード51は、FPGA510のみであるため、ホップ数のみでFPGA510に記憶デバイス410を割り当てることが可能となる。

0113

一方、記憶デバイス400、420、430に関しては、ホップ数が最少となるアクセラレータボード50、52が複数存在する。このような場合は、PCIeネットワーク構成で距離情報が近いものを選択しても良い。この場合、図7の構成では、FPGA500には、記憶デバイス400と記憶デバイス410を割り当てる。また、FPGA520には記憶デバイス430を割り当てる。なお、PCIeネットワーク構成の距離情報としては、PCIeスイッチ3320のポート番号が近ければ、距離が近いと定義することができる。

0114

また、OS110あるいはPCIeドライバ130は、ホップ数等の距離情報以外の情報を用いて記憶デバイス400とアクセラレータボード50の割り当てを決定しても良い。この情報は、記憶デバイスやアクセラレータボード50から取得できるものであり、例えば、図9A図9Bに示すような、アクセラレータボード50のフィルタ処理性能、記憶デバイスの容量、記憶デバイスのリード性能などがある。

0115

図9Aは、FPGAのフィルタ処理性能を示すFPGA性能テーブル150である。FPGA性能テーブル150は、FPGAの識別子1511と、フィルタ処理性能1512で構成される。FPGA性能テーブル150は、情報処理装置10の管理者などによって予め設定されてPCIeドライバ130が管理し、システムメモリ210に格納するとしても良いし、PCIeドライバ130がアクセラレータ認識時に問い合わせて、その結果をシステムメモリ210に格納するとしても良い。

0116

図9Bは、記憶デバイスの性能を示す記憶デバイス性能テーブル160である。記憶デバイス性能テーブル160は、記憶デバイスの識別子1601と、容量1602と、リード性能1603で構成される。記憶デバイス性能テーブル160は、情報処理装置10の管理者などによって予め設定されてPCIeドライバ130が管理し、システムメモリ210に格納するとしても良いし、PCIeドライバ130が記憶デバイス認識時に記憶デバイスの性能を問い合わせて、その結果をシステムメモリ210に格納するとしても良い。

0117

図9A図9Bの例では、OS110あるいはPCIeドライバ130が、記憶デバイスの容量が大きいもの物を、処理性能が高いデバイスに割り当てる、という論理で、FPGA500に記憶デバイス420を割り当て、FPGA510に記憶デバイス400と記憶デバイス430を割り当てても良い。

0118

あるいは、OS110またはPCIeドライバ130が、アクセラレータボードのフィルタ性能と記憶デバイスのリード性能が釣り合うように、FPGA500に記憶デバイス420を割り当てて、FPGA520に記憶デバイス400と410を割り当てても良い。

0119

または、FPGA500に記憶デバイス400と記憶デバイス420と記憶デバイス430を割り当て、FPGA510にも記憶デバイス400と記憶デバイス420と記憶デバイス430を割り当てても良い。この場合、記憶デバイス400、420、430のI/Oコントローラ401は、それぞれホストプロセッサ200用のプロセッサキュー407に加え、FPGA500用のFPGAキュー408と、FPGA510用のFPGAキュー409の2つを加えた数のI/O発行キューを生成する。ホストプロセッサ200は記憶デバイス400、410、420、430のデータベース450を用いたフィルタ処理に、FPGA500とFPGA510両方を平行して使うことができる。

0120

情報処理装置10では、このようなFPGAと記憶デバイスの割り当てを行うことで、例えば、記憶デバイスのリード性能の合計と、アクセラレータボードのフィルタ性能が釣り合うように割り当てることができ、高負荷時に記憶デバイスとアクセラレータボードがどちらも最大の性能を発揮できる構成にするなど、情報処理装置10全体の性能の最適化を図ることが可能となる。

0121

次に、本実施例1において、記憶デバイス400に障害が発生した場合の処理の一例を説明する。図10は、記憶デバイス400に障害が発生した際に情報処理装置10で行われる処理の一例を示すシーケンス図である。

0122

記憶デバイス400がFPGA500に割り当てられているとき、DBMS120を実行売るホストプロセッサ200は、FPGA500にフィルタ処理コマンドを発行して、記憶デバイス400のDB450に対するフィルタ処理を実行する(1201)。

0123

FPGA500は、フィルタ処理コマンドを受信して、処理対象となるDB450をリードするために、リードコマンドを記憶デバイス400に発行する(1202)。

0124

しかし、この時点で記憶デバイス400に障害が発生した場合(1203)、例えば、記憶デバイス400が自身の障害を検知して、PCIeルートコンプレックス221を介して、ホストプロセッサ200に障害を通知する(1204)。

0125

障害通知を受け付けたホストプロセッサ200は、記憶デバイス400の障害を検知し、当該障害をFPGA500に通知する(1205)。障害の通知を受信したFPGA500は、フィルタ処理が完了していないため、障害によってフィルタ処理が失敗したことをホストプロセッサ200に通知する。

0126

上記図10の例では、記憶デバイス400自身が障害を検知し、ホストプロセッサ200に通知する例を説明したが、ホストプロセッサ200が記憶デバイス400の状態を監視し、障害を検知し、FPGA500に記憶デバイス400の障害を通知しても良い。

0127

また、記憶デバイス400に障害が発生したことを、FPGA500が、ポーリングなどにより検出してもよい。例えば、FPGA500から記憶デバイス400に発行したリードのタイムアウトなどで、検知しても良い。障害を検知したFPGA500は、その障害及びフィルタ処理が失敗したことを、ホストプロセッサ200に通知する。

0128

このようにして記憶デバイス400の障害を検知したホストプロセッサ200は、記憶デバイス400に障害が発生したことをDBサーバ20に通知し、交換を促すことができる。例えば、DBサーバ20の管理画面に、障害発生を伝えるメッセージを表示するなどの方法がある。また、ミラーリングなどの方法で保護され、記憶デバイス400のバックアップデバイスがあるときには、記憶デバイス400の代わりにそのデバイスを使用することができる。

0129

次に、本実施例1において、アクセラレータボード50に障害が発生した場合の処理の一例を説明する。図11は、アクセラレータボード50に障害が発生した際に情報処理装置10で行われる処理の一例を示すシーケンス図である。

0130

記憶デバイス400がFPGA500に割り当てられている場合、DBMS120を実行するホストプロセッサ200は、記憶デバイス400のDB450に対するフィルタ処理を、FPGA500に指示する(1211)。

0131

しかし、この時点で、FPGA500に障害が発生した場合(1212)、FPGA500はPCIeルートコンプレックス221を介して、ホストプロセッサ200に障害を通知する(1213)。障害の通知を受け付けたホストプロセッサ200は、FPGA500の障害を検知する。なお、ホストプロセッサ200がFPGA500を監視して、障害を検知しても良い。

0132

ホストプロセッサ200は、フィルタ処理に必要なDB450を、記憶デバイス400からリードし(1214)、システムメモリ210に格納する(1215)。リード完了後(1216)、DBMS120を実行するホストプロセッサ200は、FPGA500を使用することなく自身でDB450のフィルタ処理を行う(1217)。

0133

また、ホストプロセッサ200は、FPGA500に割り当てられていた記憶デバイス400を、FPGA510など他のアクセラレータボード51に再度割り当てても良い。この処理について、以下の図12で説明する。

0134

図12は、アクセラレータボード50に障害が発生した際に情報処理装置10で行われる再割り当て処理の一例を示すシーケンス図である。

0135

記憶デバイス400がFPGA500に割り当てられている場合、DBMS120を実行するホストプロセッサ200は、記憶デバイス400のDB450に対するフィルタ処理を、FPGA500に指示する(1221)。

0136

しかし、この時点で、FPGA500に障害が発生した場合(1222)、FPGA500はPCIeルートコンプレックス221を介して、ホストプロセッサ200に障害を通知する(1223)。障害の通知を受け付けたホストプロセッサ200は、FPGA500の障害を検知する。なお、ホストプロセッサ200がFPGA500を監視して、障害を検知しても良い。

0137

ホストプロセッサ200は、新たなアクセラレータボード51に記憶デバイス400を割り当てる決定をする。ホストプロセッサ200は、FPGA510用のFPGAキュー408の生成を、記憶デバイス400に指示する(1224)。ホストプロセッサ200は、記憶デバイス400のFPGA510用のFPGAキュー408のアドレスを含む情報を、FPGA510に通知する(1225)。

0138

次に、DBMS120を実行するホストプロセッサ200は、新たなFPGA510に記憶デバイス400に格納されたDB450を使用するフィルタ処理を指示するフィルタ処理コマンドを再発行する(1226)。

0139

ホストプロセッサ200からフィルタ処理コマンドを受信したFPGA510は、フィルタ処理コマンドの情報に従い、記憶デバイス400に対してリードコマンドを発行する(1227)。記憶デバイス400のDB格納領域404からリードされたデータは、FPGA510のバッファメモリに格納される(1228)。

0140

記憶デバイス400は、要求されたデータの読み出しが完了すると、リード完了通知をFPGA510に送信する(1229)。リード完了通知を受信したFPGA510は、フィルタ処理回コマンドに基づいてフィルタ処理を実行する(1230)。

0141

次に、FPGA510は、フィルタ処理の結果をDBサーバ20のシステムメモリ210に送信する(1231)。フィルタ処理の完了後、FPGA500はフィルタ処理の完了通知をホストプロセッサ200に送信し(1232)、一連のフィルタ処理を終了する。

0142

なお、記憶デバイス400に新たなFPGA510用のFPGAキュー408を生成する例を説明したが、FPGA500が使用していたFPGAキュー408を、FPGA510が流用しても良い。その場合、ホストプロセッサ200は、FPGA500が使用していたFPGAキュー408のアドレスと、FPGAキュー408の値など、FPGAキュー408を流用するための引き継ぎ情報を、FPGA510に通知する。

0143

以上図12のように、FPGA500に障害が発生した場合には、他のFPGA510を記憶デバイス400に割り当てることで、FPGA500の障害発生時にも処理能力を保つことができ、情報処理装置10の運用を継続することが可能となる。

0144

図13は、記憶デバイス及びアクセラレータボードを1つのPCIeスイッチ4320に追加した構成の一例を示すブロック図である。図13の情報処理装置10は、図2に示したPCIeスイッチ2320に代わって、PCIeバス4300を介してDBサーバ20に接続されたPCIeスイッチ4310に、PCIeバス4303を介してアクセラレータボード50と記憶デバイス400が接続されている。そして、このPCIeスイッチ4310に記憶デバイス440と、アクセラレータボード53をホットプラグするものである。その他の構成については、前記図2と同様である。

0145

図14は、情報処理装置10の初期化完了後に、新たな記憶デバイス440が追加されたときの処理の一例を示すシーケンス図である。

0146

FPGA500が記憶デバイス400に割り当てられている情報処理装置10に、新たに記憶デバイス440が挿入されたとき(1301)、記憶デバイス440からホストプロセッサ200に割り込みが発行される(1302)。

0147

ホットプラグによる割り込みを検知し、記憶デバイス440の追加を検知したホストプロセッサ200は、記憶デバイス440とFPGA500の再割り当てを行う。例えば、記憶デバイス440をFPGA500に追加で割り当てる例を示す。

0148

ホストプロセッサ200は、記憶デバイス440に対して、ホストプロセッサ200用のプロセッサキュー407とFPGA500用のFPGAキュー408を生成するよう指示する(1303)。

0149

ホストプロセッサ200は、FPGA510用のFPGAキュー408のアドレスを含むキュー情報をFPGA510に通知する(1304)。

0150

このような再割り当てを行うことで、情報処理装置10の初期化完了後でも、記憶デバイス440の追加後に、FPGA500に新たな記憶デバイスの情報を処理する機能を与えることができる。

0151

図15は、情報処理装置10の初期化完了後に、新たなアクセラレータボード53が追加されたときの処理の一例を示すシーケンス図である。

0152

図13において、FPGA500が記憶デバイス400に割り当てられている情報処理装置10に、新たにアクセラレータボード53(FPGA530)が追加されたとき(1311)、FPGA530からホストプロセッサ200に割り込みが発行される(1312)。

0153

ホットプラグによる割り込みを検知し、FPGA530の追加を検知したホストプロセッサ200は、記憶デバイス400、440、FPGA500、530に関して再び割り当てを行う。例えば、記憶デバイス400はそのままFPGA500に割り当てられ、記憶デバイス440は新たに追加されたFPGA530に割り当てる場合、ホストプロセッサ200はFPGA500に記憶デバイス440の割り当て解除を通知する(1313)。

0154

次に、ホストプロセッサ200は、FPGA530用のFPGAキュー408の生成を、記憶デバイス440に指示する(1314)。その後、ホストプロセッサ200は、記憶デバイス440のFPGA530用のFPGAキュー408のアドレスを含むキュー情報をFPGA530に通知する(1315)。以降、DBMS120を実行するホストプロセッサ200は、記憶デバイス440のDBを使用するフィルタ処理については、FPGA530で実行するよう指示する。

0155

なお、記憶デバイス440に新たなFPGA530用のFPGAキュー408を生成する例を説明したが、FPGA500が使用していたFPGAキュー408を、FPGA530が流用しても良い。この場合、ホストプロセッサ200は、FPGA500が使用していたFPGAキュー408のアドレスと、FPGAキュー408の値など、FPGAキュー408を流用するための引き継ぎ情報を、FPGA530に通知する。

0156

このような再割り当てを行うことで、情報処理装置10の初期化完了後でも、アクセラレータボード53の追加後に、アクセラレータボード53を使用可能にして、情報処理装置10の性能を向上させることができる。

0157

以上、本実施例1によれば、DBサーバ20のホストプロセッサ200が、PCIeバス2300〜2304のエンドポイントに接続された記憶デバイス400のキューの情報を、同じくエンドポイントのアクセラレータとしてのFPGA500に通知する。これにより、PCIeバス2300〜2304のエンドポイントのFPGA500が、同じくエンドポイントの記憶デバイス400にアクセスすることが可能となる。そして、FPGA500が直接記憶デバイス400からデータを読み出して、ホストプロセッサ200の処理の一部を実行することができるようになり、情報処理装置10を高速化できる。

0158

なお、本実施例1は、データベース450のフィルタ処理を用いて説明したが、本発明が適用される処理は、データベース450のフィルタ処理に限定されるものではなく、ホストプロセッサ200の負荷をアクセラレータボード50にオフロードできる処理であれば良い。例えば、データの圧縮処理などでも良い。

0159

また、本実施例1では、NVMeのAdminキュー406のアドレスや、I/O発行キュー407〜409のアドレスを、ホストプロセッサ200がアクセラレータボード50に通知する例を説明したが、本発明は、NVMeやキューインタフェースに限定するものではない。I/Oコマンド発行を可能にするための初期設定インタフェースのアドレスや、他のデバイスから記憶デバイスへのI/O発行インタフェースのアドレスを、プロセッサがアクセラレータボード50に通知するものであれば良い。

0160

また、本実施例1では、図2のように、DBサーバ20の外部に記憶デバイス400やアクセラレータボード50を接続した構成で、DB450のフィルタ処理を実行する例を説明した。しかし、本発明はこの構成に限定されるものではなく、ホストプロセッサ200と記憶デバイス400とアクセラレータボード50がネットワークによって接続された構成であれば良い。

0161

例えば、DBサーバ20の内部のPCIeスロットに記憶デバイス400やアクセラレータボード50を搭載した構成や、図16の情報処理装置10のような構成であってもよい。

0162

図16は、実施例1の変形例を示し、情報処理装置10Aの一例を示すブロック図である。情報処理装置10Aは、DBサーバ20にサーバ−ストレージ間ネットワーク700(例えば、ファイバチャネルやInfiniBandなど)で接続されたストレージ装置60を有する。ストレージ装置60の内部には、ストレージプロセッサ600やキャッシュメモリ610やストレージチップセット620を持つストレージコントローラ61が含まれる。

0163

ストレージコントローラ61のストレージチップセット620は、PCIeルートコンプレックス621を含む。PCIeルートコンプレックス621は、PCIeバス5301を介してPCIeスイッチ5310が接続される。

0164

PCIeスイッチ5310には、FPGA500、510を含むアクセラレータボード50、51と記憶デバイス400、410、420、430がPCIeバス5303を介して接続される。

0165

また、本実施例1では、ホストプロセッサ200と記憶デバイス400とアクセラレータボード50を接続するバスとしてPCIeバスを用いて説明したが、本発明で使用するバスはPCIeに限定されるものではない。例えば、PCIeバスに代わってSAS(Serial AttachedSCSI)を用いても良い。

0166

図17は、本発明の第2の実施例を示し、情報処理装置10の一例を示すブロック図である。本実施例2では、アクセラレータボード50に代わって、アクセラレータボード54を採用し、PCIeスイッチ2310のみとしたもので、その他の構成は前記実施例1と同様である。

0167

前記実施例1では、記憶素子を持たないアクセラレータボード50が、記憶デバイス400に対してI/Oコマンドを発行する例を説明したが、本発明では、アクセラレータボード50を搭載したデバイスが記憶素子を持っていても良い。

0168

例えば、図17の情報処理装置10は、アクセラレータであるFPGA540と、不揮発メモリであるDB格納領域545を両方搭載したアクセラレータボード54と、記憶デバイス400を有する構成である。

0169

DBサーバ20は、前記実施例1と同様に、ホストプロセッサ200が、記憶デバイス400のI/Oコントローラ401にFPGA用I/O発行キュー409を生成し、生成したキュー情報をFPGA540に通知する。これにより、FPGA540はキュー情報を用いて記憶デバイス400にI/Oコマンドを発行することが可能となる。

0170

このアクセラレータボード54にフィルタ処理コマンドを発行したときの処理を以下に説明する。

0171

図18は、情報処理装置10で行われるデータベース処理の一例を示すシーケンス図である。

0172

DBMS120を実行するホストプロセッサ200が、前記実施例1の図5と同様に、フィルタ処理コマンドをFPGA540に発行する(1401)。フィルタ処理コマンドには、少なくとも、フィルタ処理を実行するデータベース450のテーブルの先頭が、記憶デバイス400のDB格納領域404のアドレスのどこにあるかを示す情報と、フィルタ処理を実行するDB450のサイズの情報、フィルタ処理の条件式=Aを含む。フィルタ処理コマンドを受け取ったI/O処理回路541は、自身のDB格納領域545に無いLBA領域のデータについて、記憶デバイス400にリードコマンドを発行する(1402)。記憶デバイス400は、要求されたデータを読み出してバッファメモリ543に書き込み(1404、1408)、I/O処理回路541にリード完了通知を発行する(1406、1410)。

0173

一方、FPGA540自身のDB格納領域545に格納されているLBA領域のデータについては、不揮発メモリ制御回路544に対してリードコマンドを発行する(1403)。DB格納領域545は、要求されたデータを読み出してバッファメモリ543に書き込み(1405、1409)、I/O処理回路541にリード完了通知を発行する(1407、1411)。

0174

I/O処理回路541は、フィルタ処理に必要なすべてのデータがバッファメモリ543に書き込まれると、受信した条件式=Aに基づいてフィルタ処理回路542へフィルタ処理の実行を指令する(1412)。フィルタ処理回路542は、バッファメモリ543のデータを用いてフィルタ処理を実行し、DBサーバ20のシステムメモリ210にフィルタ処理結果を書き込む(1413)。そして、フィルタ処理回路542が、フィルタ処理の完了通知をI/O処理回路541に発行する(1414)。I/O処理回路541は、フィルタ処理の完了通知をDBサーバ20のホストプロセッサ200に通知して(1415)、処理を終了する。

0175

このような処理で、DBサーバ20は、アクセラレータボード54に対して、記憶デバイス400のDB格納領域404と、アクセラレータボード54のDB格納領域545に格納されたDBのフィルタ処理を、アクセラレータであるFPGA540にオフロードすることができる。

0176

図19は、本発明の第3の実施例を示し、情報処理装置10の一例を示すブロック図である。本実施例3では、アクセラレータボード50と記憶デバイス400に代わって、複数のアクセラレータ搭載記憶デバイス800、810をPCIeスイッチ310に接続したもので、その他の構成は前記実施例1と同様である。

0177

前記実施例1では、記憶素子を持たないアクセラレータボード50が、記憶デバイスに対してI/Oコマンドを発行する例を説明したが、本発明では、アクセラレータの機能と記憶デバイスの機能を含むアクセラレータ搭載記憶デバイス800、810を採用することができる。

0178

例えば、図19の情報処理装置10のように、アクセラレータとしてFPGA900を搭載したアクセラレータ搭載記憶デバイス800と、FPGA910を搭載したアクセラレータ搭載記憶デバイス810を、PCIeスイッチ310を介してDBサーバ20に接続する構成などがある。DBサーバ20及びPCIeスイッチ310は前記実施例1と同様の構成である。

0179

アクセラレータ搭載記憶デバイス800では、I/Oコントローラ801とFPGA900は、チップ間通信回路901を有し、FPGA900のバッファメモリ903に、DB格納領域804のデータを転送することが可能となっている。これにより、フィルタ処理回路902を利用して、DB格納領域804のDBに対して、フィルタ処理を行うことができる。

0180

なお、I/Oコントローラ801は、前記実施例1の図2に示したI/Oコントローラ401と同様であり、プロセッサ802と、管理情報格納領域803と、コマンドインタフェース805を有する。コマンドインタフェース805は、Adminキュー806と、プロセッサキュー807と、FPGAキュー808、809を有する。

0181

アクセラレータ搭載記憶デバイス810も同様の構成であり、I/Oコントローラ811とFPGA910は、チップ間通信回路を有し、FPGA910のバッファメモリ913に、DB格納領域814のデータを転送することが可能となっている。これにより、フィルタ処理回路912を利用して、DB格納領域814のDBに対して、フィルタ処理を行うことができる。

0182

なお、I/Oコントローラ811は、前記実施例1の図2に示したI/Oコントローラ401と同様であり、プロセッサ812と、管理情報格納領域813と、コマンドインタフェース815を有する。コマンドインタフェース815は、Adminキュー816と、プロセッサキュー817と、FPGAキュー818、819を有する。

0183

図20は、情報処理装置10で行われる初期化処理の一例を示すシーケンス図である。

0184

ホストプロセッサ200は情報処理装置10の初期化開始時に、自身が接続されているPCIeネットワークの構成情報をシステムメモリ210から取得する(1501)。

0185

次に、ホストプロセッサ200は、取得したPCIeネットワークの構成情報を用いて、データベース格納領域804、814にアクセスするFPGA900、910を割り当てる(1502)。この割り当ては、前記実施例1の図4と同様に行うことができる。

0186

ホストプロセッサ200は、アクセラレータ搭載記憶デバイス800のAdminキュー806を用いて、ホストプロセッサ200用のI/O発行キュー807と、アクセラレータ搭載記憶デバイス810のFPGA910用のI/O発行キュー808を生成する(1503)。

0187

また同様に、ホストプロセッサ200は、アクセラレータ搭載記憶デバイス810のAdminキュー816を用いて、ホストプロセッサ200用のI/O発行キュー817と、アクセラレータ搭載記憶デバイス800のFPGA900用のI/O発行キュー818を生成する(1504)。

0188

その後、ホストプロセッサ200は、アクセラレータ搭載記憶デバイス800には、アクセラレータ搭載記憶デバイス810のI/O発行キュー818の情報を通知する(1505)。また、ホストプロセッサ200は、アクセラレータ搭載記憶デバイス810には、アクセラレータ搭載記憶デバイス800のI/O発行キュー808の情報を通知する(1506)。上記図20の処理により、アクセラレータ搭載記憶デバイス800と、アクセラレータ搭載記憶デバイス810は、相互にI/Oコマンドを発行してフィルタ処理を実行することが可能となる。

0189

なお、上記実施例3ではI/Oコントローラ801、811と、FPGA900、910が独立したチップとして実装されている例を紹介したが、フィルタ処理回路902、912をI/Oコントローラ801、811に搭載するなど、アクセラレータの機能を持つI/Oコントローラとして一体化しても良い。

0190

なお、前記実施例1の図5の処理を、本実施例3に適用すると、ホストプロセッサ200が、アクセラレータ搭載記憶デバイス810に対して、フィルタ処理コマンドを発行し、アクセラレータ搭載記憶デバイス810はアクセラレータ記憶デバイス800からデータを読み込む。そして、アクセラレータ搭載記憶デバイス810のFPGA910は、フィルタ処理を実行し、処理結果をホストプロセッサ200のシステムメモリ210へ格納する。

0191

なお、前記実施例1の図7図8図9A図9Bの内容を、本実施例3に適用すると、まず、ホストプロセッサ200は、起動時などに複数のアクセラレータは記憶デバイス800、810の情報を収集して、PCIeネットワークの構成情報としてシステムメモリ210に格納する。そして、ホストプロセッサ200は、PCIeネットワークの構成情報に基づいて、所定の条件を満たすアクセラレータは記憶デバイス800、810とFPGA900、910の割り当てを決定する。ホストプロセッサ200は、当該決定した割り当てに基づいて、アクセラレータは記憶デバイス800のAdminキュー806のアドレス、またはI/O発行キュー807、808のアドレスを、アクセラレータ搭載記憶デバイス810に通知することで割り当て実行する。

0192

なお、前記実施例1の図10の処理を、本実施例3に適用すると、アクセラレータ搭載記憶デバイス800に障害が発生したときには、アクセラレータ搭載記憶デバイス800からの通知に基づいてホストプロセッサ200が障害を検知する。ホストプロセッサ200は、フィルタ処理を実行するアクセラレータ搭載記憶デバイス810に対して、アクセラレータ搭載記憶デバイス800の障害を通知する。

0193

なお、前記実施例1の図11の処理を、本実施例3に適用すると、アクセラレータ搭載記憶デバイス810のFPGA910に障害が発生したときには、アクセラレータ搭載記憶デバイス810が、データを読み込んだアクセラレータ搭載記憶デバイス800に対してFPGA910の障害を通知する。

0194

あるいは、アクセラレータ搭載記憶デバイス810が、ホストプロセッサ200にFPGA910の障害を通知し、ホストプロセッサ200がアクセラレータ搭載記憶デバイス800にFPGA910の障害を通知してもよい。

0195

なお、前記実施例1の図14または図15の処理を、本実施例3に適用すると、ホストプロセッサ200は、新たなアクセラレータ搭載記憶デバイスの追加を検知すると、システムメモリ210のPCIeネットワークの構成情報を参照して、新たなアクセラレータ搭載記憶デバイスとFPGAの割り当てを決定する。そして、ホストプロセッサ200は、新たな割り当てに基づいて、AdminキューやI/O発行キューのアドレスを新たなアクセラレータ搭載記憶や既存のアクセラレータ搭載記憶デバイス800に通知して割り当てを変更する。

0196

なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。

0197

また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラム解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカードSDカード、DVD等の記録媒体に置くことができる。

0198

また、制御線情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。

実施例

0199

補足
データを格納する記憶デバイスであって、
前記記憶デバイスは、
前記初期化の命令を受け付ける初期設定インタフェースと、
I/Oコマンドを発行するI/O発行インタフェースと、を有し、
前記I/O発行インタフェースは、
前記第1の装置からのI/Oコマンドを受け付ける第1のI/O発行インタフェースと、
前記第2の装置からのI/Oコマンドを受け付ける第2のI/O発行インタフェースと、を含み、
前記記憶デバイスは
前記第1の装置と第2の装置から、それぞれ独立して前記I/Oコマンドを受け付け可能であることを特徴とする情報処理装置。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ