JP6329318B2 - 情報処理装置 - Google Patents

情報処理装置 Download PDF

Info

Publication number
JP6329318B2
JP6329318B2 JP2017501621A JP2017501621A JP6329318B2 JP 6329318 B2 JP6329318 B2 JP 6329318B2 JP 2017501621 A JP2017501621 A JP 2017501621A JP 2017501621 A JP2017501621 A JP 2017501621A JP 6329318 B2 JP6329318 B2 JP 6329318B2
Authority
JP
Japan
Prior art keywords
storage device
processor
accelerator
processing apparatus
command
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017501621A
Other languages
English (en)
Other versions
JPWO2016135875A1 (ja
Inventor
賢志 森下
賢志 森下
岡田 光弘
岡田  光弘
彬史 鈴木
彬史 鈴木
鎮平 野村
鎮平 野村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2016135875A1 publication Critical patent/JPWO2016135875A1/ja
Application granted granted Critical
Publication of JP6329318B2 publication Critical patent/JP6329318B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0215Addressing or allocation; Relocation with look ahead addressing means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/126Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine and has means for transferring I/O instructions and statuses between control unit and main processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Description

本発明は、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の処理結果のみがプロセッサに接続されたバスに転送されるため、バスの帯域がシステムメモリへのアクセスで圧迫されるのを解消できる。
米国特許出願公開第2014/129753号明細書
特許文献1には、情報処理装置の初期化の際に、GPUがどのようにしてアクセス先となる不揮発メモリアレイを特定するかについては記載されていない。PCI−Express(以下、PCIe)のエンドポイントとして記憶デバイス及びアクセラレータが接続されると、アクセラレータはアクセス先となる記憶デバイスのコマンドインタフェースのアドレスを特定することができないという課題がある。アクセラレータが記憶デバイスのコマンドインタフェースのアドレスを特定できないと、そもそも記憶デバイスにアクセスしてデータを読み出し、プロセッサの処理の一部を実行することもできない、という課題があった。
そこで本発明は、アクセラレータが記憶デバイスを特定して、アクセラレータが記憶デバイスからデータを読み出し、アクセラレータがプロセッサの処理の一部を実行する情報処理装置を提供することを目的とする。
本発明は、プロセッサとメモリを有し、1以上のアクセラレータと、1以上の記憶デバイスを含む情報処理装置であって、前記情報処理装置は、前記プロセッサと前記アクセラレータ及び前記記憶デバイスを接続するひとつのネットワークを有し、前記記憶デバイスは、I/Oコマンドを受け付けるI/Oコマンド受け付け部と、を有し、前記プロセッサが、前記I/Oコマンド受け付け部のアドレスを、前記アクセラレータに対して通知する。
本発明によれば、アクセラレータが記憶デバイスのコマンドインタフェースのアドレスを特定して、記憶デバイスからデータを読み出し、プロセッサの処理の一部を実行することができるようになり、情報処理装置の処理を高速化できる。
本発明の第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の実施例を示し、情報処理装置の一例を示すブロック図である。
以下、本発明の実施形態について添付図面を用いて説明する。
初めに、本発明の概要として、データベース処理(以下、DB処理)を行う情報処理装置10について説明する。
図1は、本発明のコンセプトを示すブロック図である。図1は、データベース処理のフィルタ処理をオフロードすることを前提にしたアクセラレータボード50を搭載した情報処理装置10と、情報処理装置10を利用するクライアントサーバ11、12を含む計算機システムである。
フィルタ処理とは、対象となるデータベース(以下、DB)と条件式を比較し、条件式に一致するものだけを抽出するという処理であり、特に前記条件式が複雑な場合や、前記対象となるDBのデータ量が多い場合には情報処理装置10のホストプロセッサ200に高い負荷をかけるため、アクセラレータボード50へのオフロードが有効な処理である。
アクセラレータボード50には、例えば、Field Programmable Gate Array(以下FPGA)や、Graphics Processing Unit(以下GPU)や、サブプロセッサなどが搭載される。アクセラレータボード50は、通常、PCIeインタフェースを持つ基板などに搭載されて、アクセラレータとして情報処理装置10に利用される。
図1の情報処理装置10には、データベース処理を行うホストプロセッサ200(以下、プロセッサ)を持つデータベースサーバ20(以下、DBサーバ)と、データベース(以下、DB)450が格納されている記憶デバイス400と、ホストプロセッサ200の処理をオフロード可能なFPGA500を搭載したアクセラレータボード50が含まれる。なお、データベース処理は、例えば、DBMS(DataBase Management System)が行う処理である。
ホストプロセッサ200と、記憶デバイス400と、アクセラレータボード50及びFPGA500は、PCIeバス300、303によってPCIeスイッチ310と相互に接続される。なお、アクセラレータボード50及びFPGA500は、DBサーバ20(ホストプロセッサ200)のメモリ空間上にマッピングされており、このメモリマッピング上のアドレスを用いて相互に通信可能であり、これをひとつのネットワークと呼ぶ。
FPGA500にはホストプロセッサ200からのアクセスを受け付ける機能及びFPGA500からのI/O発行を行う機能(具体的には、PCIeエンドポイント機能とPCIeエンドポイントの制御機能)を持つI/O処理回路501と、フィルタ処理を高速に実行可能なフィルタ処理回路502と、DB450のデータを一時的に格納するバッファメモリ503を有し、内部バスによって相互に接続される。
I/O処理回路501やフィルタ処理回路502は、両方ともFPGA500のハードウェア回路として実装しても良いし、FPGA500内部の組込プロセッサにより、一部またはすべての機能を実装しても良い。また、本実施例では、アクセラレータボード50としてFPGA500を用いて説明するが、GPUやサブプロセッサを採用しても良い。
クライアントサーバ11及び12は、情報処理装置10が管理するDB450を利用するアプリケーションが動作しているサーバであり、DB処理をDBサーバ20に要求する。
クライアントサーバ11、12からフィルタ処理を使用する命令をDBサーバ20が受信し、DBサーバ20がフィルタ処理をFPGA500にオフロードする手順として、A〜Cを説明する。
DBサーバ20のホストプロセッサ200は、FPGA500に対し、フィルタ処理の実行を指示するコマンドを発行する(A)。コマンドを受信したFPGA500のI/O処理回路501は、記憶デバイス400に対してリード命令を発行し、フィルタ処理の対象となるDB450のデータを取得して、FPGA500のバッファメモリ503へ格納する(B)。
次に、フィルタ処理回路502は、I/O処理回路501がリードしたDB450のデータをバッファメモリ503から読み出して、フィルタ処理を行い、そのフィルタ処理結果を、結果データとしてDBサーバ20に送信する(C)。
このような手順でフィルタ処理をすることで、DBサーバ20に接続されるバス300には、DB450のデータそのものが流れることはなく、コマンド及び結果データのみが流れるため、前記従来例の手順に比べ、バス300に流れるデータ量を減らすことができる。
また、情報処理装置10には、複数のクライアントサーバ11、12を接続できるため、例えば、クライアントサーバ11がフィルタ処理を要求している間に、他のクライアントサーバ12がフィルタ処理以外のDB処理(例えば、更新処理)を要求する可能性がある。
この場合、ホストプロセッサ200は記憶デバイス400に対してI/Oアクセスを行う必要があるが、情報処理装置10は、FPGA500がフィルタ処理を実行中にも、ホストプロセッサ200が記憶デバイス400に対してI/Oを発行することが可能であり、複数の処理を並列に実行し、クライアントサーバ11、12に要求された処理の結果を送信することができる。
次に、図2〜6を用いて、本発明の実施例1を詳細に説明する。
図2は、本発明が適用される情報処理装置10の構成の一例を示すブロック図である。
情報処理装置10は、DBサーバ20とエクスパンダ30を含む。DBサーバ20は、プロセッサ200とシステムメモリ210とチップセット220を有し、これらは内部バス230で接続される。チップセット220ではPCIeルートコンプレックス221が機能しており、PCIeバス2300を介してPCIeスイッチ2310に接続される。
チップセット220には、入力装置と出力装置(例えば、ディスプレイ)を有する端末180が接続される。システムメモリ210には、OS110と、PCIeドライバ130と、DBMS120がロードされてホストプロセッサ200で実行される。
PCIeドライバ130は、PCIeネットワーク上に接続された記憶デバイスまたはアクセラレータを制御する。なお、PCIeドライバ130は、OS110に含まれても良い。DBMS120は、PCIeバス2300に接続された装置にアクセスする際には、PCIeドライバ130を介して各装置にアクセスする。
エクスパンダ30は、2つの記憶デバイス400、410と、2つのアクセラレータボード50、51と、PCIeスイッチ2310、2320、2330を含み、それぞれPCIeバス2300〜2304を介してDBサーバ20と接続されている。
記憶デバイス400とアクセラレータボード50はPCIeバス2303を介してPCIeスイッチ2320に接続される。PCIeスイッチ2320はPCIeバス2301を介してPCIeスイッチ2310に接続される。
同様に、記憶デバイス410とアクセラレータボード51はPCIeバス2304を介してPCIeスイッチ2330に接続される。PCIeスイッチ2330はPCIeバス2302を介してPCIeスイッチ2310に接続される。
図2のような構成も、クセラレータボード50、51と記憶デバイス400、410は、DBサーバ20のメモリ空間上にマッピングされているため、ひとつのネットワークである。本実施例ではPCIeバスを用いているため、PCIeネットワークと呼ぶ。このように、ひとつのネットワークは、図1の記憶デバイス400とアクセラレータボード50のようにPCIeスイッチ310を一段しか挟まない構成のみに限定するものではない。図2のPCIeスイッチ2310、2320、2330のようにスイッチを複数挟む構成でも、DBサーバ20(ホストプロセッサ200)のメモリ空間上にマッピングされていれば良い。
アクセラレータボード50、51は、それぞれFPGA500、510を搭載する。FPGA500には、I/O処理回路501、フィルタ処理回路502、バッファメモリ503があり、相互に接続される。図示はしないが、FPGA510もFPGA500と同様に構成される。
記憶デバイス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と同様に構成される。
記憶デバイス400のデータベース格納領域404は、直接DBサーバ20(ホストプロセッサ200)のメモリ空間上にはマッピングされておらず、コマンドインタフェースのみがマッピングされている。ホストプロセッサ200やFPGA500が、PCIeバス2300〜2304を用いて直接データベース格納領域404にアクセスすることはできない。このため、ホストプロセッサ200やアクセラレータボード50はI/Oコマンド(リードコマンド/ライトコマンド)を記憶デバイス400に発行することで、データベース格納領域へのリードライトを実施する。
すなわち、システムメモリ210ではOS110がアドレス空間に、システムメモリ210の記憶素子を割り当てることでアクセスを管理する。これに対して、NVMeやSATAでは、データベース格納領域404をブロック単位で管理するが、全てのブロックをシステムメモリ210のアドレス空間(論理ブロック)に割り当てず、コマンドのやり取りでアクセスを実現している。
I/Oコントローラ401は、記憶デバイス400、410外部からのI/Oコマンドを受けとり、コマンドに応じて以下の処理を行う。リードコマンドの場合は対応したリードアドレスのデータをデータベース格納領域404から読み出して、リードデータの要求先アドレスにライトする。ライトコマンドの場合は、ライトデータをライトデータ送信元のアドレスからリードして、ライトアドレスに対応するデータベース格納領域404に格納する。
I/Oコントローラ401は、演算処理を行うプロセッサ402と、複数のキューを含むコマンドインタフェース405と、処理を行うための情報を格納する管理情報格納領域403とを含む。
コマンドインタフェース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発行キューとする。
これらのI/O発行キューは、記憶デバイス400の管理用レジスタなどとまとめて、コマンドインタフェース405としてPCIeネットワークのアドレス空間(MMIO空間)にマッピングされる。
なお、Adminキュー406と、プロセッサキュー407と、FPGAキュー408は、それぞれ異なるアドレスが割り当てられた独立したキューである。これらのAdminキュー406と、プロセッサキュー407と、FPGAキュー408のアドレスは、PCIeネットワークのアドレス空間において記憶デバイスのコマンドインタフェース405内に割り当てられる。PCIeネットワークのアドレス空間は、DBサーバ20で稼働するOS110あるいはPCIeドライバ130が割り当てることができる。
DBサーバ20のホストプロセッサ200や、FPGA500が、これらのI/O発行キューを用いてI/Oコマンドを発行すると、I/Oコマンドを検知した記憶デバイス400のプロセッサ402が、ライトやリードといったI/Oコマンド処理を行う。
電源起動時の記憶デバイス400においては、I/O発行キューは有効になっておらず、Adminキュー406のみが有効となっている。ホストプロセッサ200がこのAdminキュー406にI/O発行キューの生成(または有効化)命令(または初期化の命令)を発行することで、当該命令を受けたプロセッサ402が、例えば、プロセッサキュー407を有効にする。
そして、プロセッサ402は、DBサーバ20のホストプロセッサ200にホストプロセッサキュー407を生成(または有効化)した通知を送信し、ホストプロセッサ200がプロセッサキュー407を使用することが可能となる。
ここでは、このAdminキュー406を用いたI/O発行キュー407〜408の有効化を、I/O発行キューを生成する、と言う。I/O発行キューは記憶デバイス400に複数用意されており、その有効か無効かの情報は、I/Oコントローラ401の管理情報格納領域(例えば、DRAMなどの揮発記憶媒体や、フラッシュメモリ、ReRAM、PCMなどの不揮発記憶媒体)403に格納されている。
なお、Adminキュー406は、ホストプロセッサ200からの初期化の命令を受け付けて、I/O発行キュー407、408を生成及び管理するための初期設定インタフェースとして機能する。また、I/O発行キュー407、408はホストプロセッサ200とFPGA500からのI/Oコマンドを受け付けるI/O発行インタフェースとして機能する。
図2では、記憶デバイス400が、3つのI/O発行キュー407〜409を持ち、そのうち、ホストプロセッサ200にプロセッサキュー407を、FPGA500にFPGAキュー408を割り当てて有効化し、I/O発行キュー409は無効となっている。
無効となっているI/O発行キュー409は、他のプロセッサやFPGAに割り当てることが可能である。例えば、ホストプロセッサ200をデュアルコアプロセッサにし、その片方のコアをプロセッサキュー407に割り当て、もう一方のコアをI/O発行キュー409に割り当てて、コア間の排他処理を行わずに各コアがI/O発行可能な状態にしても良い。または、FPGA500にFPGAキュー408を割り当て、FPGA510にI/O発行キュー409を割り当てて、複数のFPGAからひとつの記憶デバイス400にI/O命令の発行が可能な状態にしても良い。
図2では、記憶デバイス400は3つのI/O発行キューを持っているが、この個数は3つに限るものではなく、何個でも良い。
図3は、情報処理装置10でI/O発行処理を行った場合の説明図である。ここで、I/O発行キューを、ホストプロセッサ200用とFPGA500用を独立して用意することの必要性について、図3を用いて説明する。
例えば、NVMeの技術では、記憶デバイス400のプロセッサキュー407は、ホストプロセッサ200が書き込むレジスタで構成され、ホストプロセッサ200がI/Oコマンドを発行した累計個数を記入する。
ホストプロセッサ200が発行したI/Oコマンドは、I/Oコントローラ401の管理情報格納領域403に格納することができる。あるいは、ホストプロセッサ200が発行したI/Oコマンドを、システムメモリ210の所定の領域に格納しても良い。ホストプロセッサ200が発行したI/Oコマンドの格納先については、周知または公知の技術を用いればよいので、本実施例では詳述しない。
一方、記憶デバイス400のプロセッサ200は、過去に処理したコマンド数を管理情報格納領域403に記憶している。例えば、プロセッサキュー407の値と、管理情報格納領域403の値が、どちらの値も4となっていれば、過去にホストプロセッサ200が4つのコマンドを発行し、記憶デバイス400はその4つのコマンドを全て処理し終えたことを示す。
新たにホストプロセッサ200から記憶デバイス400に1つのI/Oコマンドを発行する処理を、図3のA〜Cを用いて説明する。まず、ホストプロセッサ200は、I/Oコマンドをシステムメモリ210の所定のアドレスに生成する(A)。
次に、ホストプロセッサ200が、プロセッサキュー407に、現状の値=「4」に1を足した値=「5」をライトする(B)。
これに対し、I/Oコントローラ401のプロセッサ402は、プロセッサキュー407の値「5」と、管理情報格納領域403に記憶した、過去に処理したコマンド数=「4」の値に差があることを検知し、新たなコマンドがあると判定し、システムメモリ210からコマンドを取得する(C)。
ホストプロセッサ200は、自身がプロセッサキュー407にライトした値を記憶しておくことができるので、次のI/O発行時にプロセッサキュー407をリードすることなく、過去の値に1を足した値を容易に書き込むことができ、高速にコマンドを発行できる。
この場合、FPGA500が、ホストプロセッサ200とプロセッサキュー407を共有して新たにI/Oコマンドを発行しようとすると、まず、プロセッサキュー407を一度リードしなくては、現在の値を知ることができない。
また、FPGA500が、ホストプロセッサ200に対してプロセッサキュー407を更新しないように指示するなど、ホストプロセッサ200との排他処理を行う必要がある。これらは通常のホストプロセッサ200からのI/O発行に比べて時間のかかる上に、ホストプロセッサ200がI/Oコマンドを発行できない時間も生まれ、情報処理装置10の全体の性能が下がる、という問題があった。
一方、本実施例1の記憶デバイス400では、ホストプロセッサ200用にプロセッサキュー407を生成し、FPGA500用にFPGAキュー408を生成する。このように、I/Oコントローラ401が、ホストプロセッサ200とFPGA500毎に独立したI/O発行キューを有する場合は、プロセッサ200とFPGA500の間で、排他処理や余分なI/O発行キューのリードを行わなくて良いため、ホストプロセッサ200とFPGA500は共に高速にI/Oコマンドを発行できる。
図4は、情報処理装置10で行われる初期化処理の一例を示すシーケンス図である。
ホストプロセッサ200は情報処理装置10の初期化開始時に、自身が接続されているPCIeネットワークの構成情報をシステムメモリ210から取得する(1000)。また、本実施例の初期化処理は、システムメモリ210にロードされたOS110とPCIeドライバ130によって実行される。以下では、OS110またはPCIeドライバ130の処理を行う主体がホストプロセッサ200として説明する。
PCIeネットワークでは、PCIeルートコンプレックス221を持つチップセット220が、起動時に当該チップセット220に接続されたPCIeエンドポイントデバイスのネットワーク構成を検出し、検出結果(PCIデバイスツリーなど)をシステムメモリ210の所定の領域に格納する。ホストプロセッサ200は、システムメモリ210の所定の領域にアクセスすることで、格納されているPCIeネットワーク(あるいはバス)の構成情報を取得できる。
PCIeネットワークの構成情報としては、ネットワーク(またはバス)上のデバイスの位置や、デバイスの性能や、デバイスの容量等を含むことができる。PCIeネットワークの構成情報は、OS110あるいはPCIeドライバ130の起動時に、ホストプロセッサ200が収集して、システムメモリ210の所定の領域に格納する。
次に、ホストプロセッサ200は、取得したPCIeネットワークの構成情報を用いて、記憶デバイス400、410にアクセスするアクセラレータボード50、51を割り当てる(1001)。割り当てに用いる情報は、例えば、記憶デバイス400、410とアクセラレータボード50、51の間の距離の情報を用いる。なお、アクセラレータボード50に記憶デバイス400、410を割り当てる処理は、PCIeドライバ130あるいはOS110が主体となって行うことができる。以下では、PCIeドライバ130またはOS110を実行するホストプロセッサ200が割り当ての主体として説明する。
距離の情報としては、例えば、PCIeネットワークのホップ数を用いることができる。本実施例では、PCIeスイッチ2310、2320、2330を通過する個数(または回数)をホップ数とする。
FPGA500と記憶デバイス400の通信には、ひとつのPCIeスイッチ2320を通過するので、ホップ数=1である。一方、FPGA510と記憶デバイス400の間はPCIeスイッチ2310、2320、2330を通過し、ホップ数=3である。したがって、図2の構成では、ホップ数の少ないFPGA500を、記憶デバイス400に割り当てる。同様の距離の情報の比較により、記憶デバイス410にはFPGA510を割り当てる。
なお、記憶デバイス400とアクセラレータボード50の割り当ては一対一に限定されるものではない。例えば、ホストプロセッサ200が、記憶デバイス400にFPGA500とFPGA510の両方を割り当てる、または、記憶デバイス400と記憶デバイス410両方にFPGA500を割り当てることもできる。
次に、ホストプロセッサ200は、記憶デバイス400にI/O発行キューを生成する指令を送信する(1002)。ここで、PCIeルートコンプレックス221に接続しているホストプロセッサ200は、記憶デバイス400のI/Oコントローラ401が有する、Adminキュー406のアドレスを取得することができる。一方、前記課題でも述べたように、PCIeエンドポイントであるFPGA500は、同じくPCIeエンドポイントであるAdminキュー406のアドレスを取得することができない。
そのため、ホストプロセッサ200が、記憶デバイス400のAdminキュー406を用いて、自身が記憶デバイス400にI/Oコマンドを発行するためのプロセッサキュー407及び、FPGA500が記憶デバイス400にI/Oコマンドを発行するためのFPGAキュー408の2つを生成する(1002)。
続いて、ホストプロセッサ200は、FPGAキュー408のキュー情報(FPGAキュー408のアドレスと最大同時発行コマンド数(キューの深さ))をFPGA500に通知する(1003)。
このように最低限FPGAキュー408のアドレスとキューの深さがあれば、FPGA500は記憶デバイス400にI/Oコマンドを発行可能となる。さらに、キュー情報として、記憶デバイス400のPCIe(またはPCI)コンフィグレジスタ(図示省略)のアドレスや、アクセス可能なLBA(Logical block Address)の範囲(アクセス可能な先頭LBAと容量など)などの情報を含んでもよい。
例えば、FPGA500が、記憶デバイス400のPCIeコンフィグレジスタのアドレスを取得できると、記憶デバイス400のNVMeレジスタ(図示省略)のアドレスも取得できる。FPGA500は、これらのアドレスからアクセス可能なLBAの範囲を算出できる。FPGA500は、アクセス可能なLBAの範囲を用いて、例えば一台のアクセラレータボード50に記憶デバイス400、410が複数割り当てられた場合に、どちらの記憶デバイスにI/Oコマンドを発行すれば良いかを、FPGA500が判定することが可能となる。
なお、NVMeレジスタは、例えば、「NVM Express」(Revision 1.1b July 2, 2014、NVM Express Workgroup刊)の第37頁〜第45頁等に記載されるレジスタである。
さらに、ホストプロセッサ200は記憶デバイス410にも同様に、Adminキューを用いてプロセッサキューとFPGAキューを生成し(1004)、FPGAキューの情報をFPGA510に通知する(1005)。
以上図4の処理によって、FPGA500は、記憶デバイス400へのI/Oコマンドを発行できるようになり、また、FPGA510は、記憶デバイス410へのI/Oコマンドを発行できるようになる。
なお、ホストプロセッサ200がAdminキュー406を用いてプロセッサキュー407とFPGAキュー408を生成する手順を例として説明したが、ホストプロセッサ200がAdminキュー406のアドレスをFPGA500に通知し、FPGA500がプロセッサキュー407とFPGAキュー408を生成しても良い。
以上図3、図4の処理によって、PCIeネットワークのエンドポイントとして接続されたアクセラレータボード50のFPGA500は、ホストプロセッサ200からFPGAキュー408のキュー情報を取得することができる。これにより、PCIeエンドポイントのFPGA500から同じくPCIeエンドポイントの記憶デバイス400にI/Oコマンドを発行することが可能となって、アクセラレータボード50は記憶デバイス400に格納されたDB450のデータにアクセスすることが可能となるのである。
図5は、情報処理装置10の初期化が完了した後に、ホストプロセッサ200がデータベース450のフィルタ処理をFPGA500に実行させる例を示すシーケンス図である。
DBMS120を実行するホストプロセッサ200はまず、FPGA500に対して、フィルタ処理を指示するフィルタ処理コマンドを発行する(1101)。このフィルタ処理コマンドには、少なくとも、フィルタ処理を実行するデータベース450のテーブルの先頭が、記憶デバイス400のDB格納領域404のアドレスのどこにあるかを示す情報と、フィルタ処理を実行するDB450のサイズの情報、フィルタ処理の条件式=Aを含む。なお、フィルタ処理コマンドには、その他に、フィルタ処理の結果データを格納するシステムメモリ210のアドレスを含んでも良い。
フィルタ処理コマンドは、例えば、テーブルの先頭が、記憶デバイス400のLBA=0x1000とし、1M Byteのデータにフィルタ条件式=Aのフィルタ処理を実行する、といった情報を含むコマンドである。
また、フィルタ処理コマンドの発行先(FPGA500またはFPGA510)は、DBMS120または、PCIeドライバ130のどちらが決定するようにしてもよい。PCIeドライバ130が決定する場合は、DBMS120がフィルタ処理コマンドを発行すると、PCIeドライバ130が発行先(FPGA500またはFPGA510)を決定してフィルタ処理コマンドを送信する。
DBMS120を実行するホストプロセッサ200からフィルタ処理コマンドを受信したFPGA500のI/O処理回路501は、フィルタ処理コマンドの情報に従い、記憶デバイス400に対してリードコマンドを発行する(1102)。このリードコマンドは1回でも良いし、複数回でも良い。図示の例では、FPGA500が、1M Byteのリードを、4回に分割して256KByte毎の4つのリードコマンドを発行する例を示す。
4つのリードコマンドは、例えば、LBA=0x1000、0x1200、0x1400、0x1600に対する4回の256K Byteリードコマンドによって、FPGA500は、LBA=0x1000を先頭とする1M Byteのデータをリードする。
記憶デバイス400のDB格納領域404からリードされたデータは、FPGA500のバッファメモリ503に格納される(1103)。4回のリード完了通知を受け取ったI/O処理回路501は、フィルタ処理回路502に対して、バッファメモリ503のデータについて所定のフィルタ処理を実行するよう指示する(1104)。
指示を受け付けたフィルタ処理回路502は、フィルタ条件式=Aのフィルタ処理を実行する。
次に、フィルタ処理回路502は、フィルタ処理の結果をDBサーバ20のシステムメモリ210に送信する(1105)。送信先のアドレスは、フィルタ処理コマンドによって指定しても良いし、予め設定した固定のアドレスとしても良い。
フィルタ処理の完了後、フィルタ処理回路502は完了通知をI/O処理回路501に送信する(1106)。完了通知を受信したI/O処理回路501は、フィルタ処理の完了をホストプロセッサ200に通知し、ホストプロセッサ200が当該完了通知を受け取ることで、一連のフィルタ処理が完了する(1107)。
なお、図5では、フィルタ処理の結果データを格納するアドレスとして、システムメモリ210のアドレスを使用する例を説明したが、フィルタ処理の結果データの格納先アドレスはこれに限定されるものではない。例えば、記憶デバイス400のアドレスを示す情報であれば、記憶デバイス400にフィルタ処理の結果データをライトすれば良いし、アクセラレータボード51のアドレスを示す情報であれば、アクセラレータボード51にフィルタ処理の結果データをライトすれば良いし、アクセラレータボード50のアドレスを示す情報であれば、アクセラレータボード50のメモリ上に保存しておけば良い。
また、フィルタ処理コマンドの中に、フィルタ条件式=Aを直接入れる例を示したが、これに限定されず、フィルタ条件式を得るための情報であれば良い。例えば、システムメモリ210上にフィルタ条件式を格納し、そのフィルタ条件式の格納アドレスをフィルタ処理コマンドの中に入れるとしても良い。
上記図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)の帯域を使用しない。よって、フィルタ処理性能をスケールアウトすることが可能となる。
図6は、ホストプロセッサ200のI/Oと、アクセラレータボード50のI/Oが混在するときの処理の一例を示すシーケンス図である。図6の例は、FPGA500がフィルタ処理を実行しているときに、ホストプロセッサ200が記憶デバイス400にリードを行うシーケンス図である。
上記図5のフィルタ処理のシーケンス図と同様に、DBMS120を実行するホストプロセッサ200はまず、FPGA500に対して、フィルタ処理を指示するフィルタ処理コマンドを発行する(1111)。
ホストプロセッサ200からフィルタ処理コマンドを受信したFPGA500のI/O処理回路501は、フィルタ処理コマンドの情報に従い、記憶デバイス400に対してリードコマンドを発行する(1112)。この場合、FPGA500は、上述の初期化時にホストプロセッサ200からアドレスを通知されたFPGAキュー408を使用する。また同時に、ホストプロセッサ200も、記憶デバイス400にリードコマンドを発行したとする(1113)。この場合、ホストプロセッサ200は、プロセッサキュー407を使用する。
図示の例では、記憶デバイス400が、FPGAキュー408の1つ目のリードコマンドを実行し、DB格納領域404から読み込んだデータを、FPGA500のバッファメモリ503に格納する(1114)。記憶デバイス400は、1つ目のリードコマンドのリード完了通知をFPGA500に送信する(1115)。
次に、記憶デバイス400は、プロセッサキュー407のリードコマンドを実行し、DB格納領域404から読み込んだデータを、システムメモリ210に格納する(1116)。記憶デバイス400は、リードコマンドのリード完了通知をホストプロセッサ200に送信する(1117)。
ホストプロセッサ200のI/O処理を完了した記憶デバイス400は、FPGAキュー408の2つ目以降のリードコマンドを順次実行し、DB格納領域404から読み込んだデータを、FPGA500のバッファメモリ503に格納する(1118)。記憶デバイス400は、各リードコマンドのリード完了通知をFPGA500にそれぞれ送信する(1119)。
4回のリード完了通知を受け取ったI/O処理回路501は、フィルタ処理回路502に対して、バッファメモリ503のデータについて所定のフィルタ処理を実行するよう指示する(1120)。指示を受け付けたフィルタ処理回路502は、所定のフィルタ処理を実行する。
次に、フィルタ処理回路502は、フィルタ処理の結果をDBサーバ20のシステムメモリ210に送信する(1121)。フィルタ処理の完了後、フィルタ処理回路502は完了通知をI/O処理回路501に送信する。完了通知を受信したI/O処理回路501は、フィルタ処理の完了をホストプロセッサ200に通知し、ホストプロセッサ200が当該完了通知を受け取ることで、一連のフィルタ処理が完了する(1122)。
以上図5の処理のように、記憶デバイス400は初期化処理(図4)によって、プロセッサキュー407とFPGAキュー408を独立して設けており、どちらのキューを使用してもDB格納領域404のデータをリードやライトすることが可能である。そのため、これらのリード要求はホストプロセッサ200とFPGA500が排他処理を行わなくても、正しく処理される。
例えば、図6では、記憶デバイス400に、FPGA500から4つのリードコマンドを発行されている最中に、ホストプロセッサ200からもリードコマンドが発行された例を示しているが、I/Oコントローラ401は、FPGA500とホストプロセッサ200がリードコマンドを書き込むキューがそれぞれ独立しているため、FPGA500とホストプロセッサ200の排他制御を行う必要はない。よって、情報処理装置10は、処理性能を落とすことなくFPGA500とホストプロセッサ200から並列的にI/Oコマンドを発行できる。
次に、本実施例1において、記憶デバイス400及びアクセラレータボード50が、同一のPCIeスイッチに複数接続されている場合の割り当て方法について、図7〜図9を用いて説明する。
図7は、記憶デバイス及びアクセラレータボードの組を1つのPCIeスイッチ3320に複数接続した構成の一例を示すブロック図である。図7の情報処理装置10は、図2に示したPCIeスイッチ2320に代わってPCIeスイッチ3320及びPCIeバス3303に、記憶デバイス410、420と、アクセラレータボード52を加え、さらにPCIeドライバ130にテーブル140〜160を加えたものである。その他の構成については、前記図2と同様である。
図8は、記憶デバイス400、410、420とアクセラレータボード50〜52の間のホップ数を表すホップ数テーブル140である。ホップ数テーブル140は、図7における記憶デバイス400、410、430と、FPGA500、510、520の間のホップ数を表すものである。ホップ数テーブル140は、情報処理装置10の管理者などによって予め設定されてPCIeドライバ130が管理し、システムメモリ210に格納される。
PCIeスイッチ3330に接続された記憶デバイス410に関しては、ホップ数が最少となるアクセラレータボード51は、FPGA510のみであるため、ホップ数のみでFPGA510に記憶デバイス410を割り当てることが可能となる。
一方、記憶デバイス400、420、430に関しては、ホップ数が最少となるアクセラレータボード50、52が複数存在する。このような場合は、PCIeネットワーク構成で距離情報が近いものを選択しても良い。この場合、図7の構成では、FPGA500には、記憶デバイス400と記憶デバイス410を割り当てる。また、FPGA520には記憶デバイス430を割り当てる。なお、PCIeネットワーク構成の距離情報としては、PCIeスイッチ3320のポート番号が近ければ、距離が近いと定義することができる。
また、OS110あるいはPCIeドライバ130は、ホップ数等の距離情報以外の情報を用いて記憶デバイス400とアクセラレータボード50の割り当てを決定しても良い。この情報は、記憶デバイスやアクセラレータボード50から取得できるものであり、例えば、図9A、図9Bに示すような、アクセラレータボード50のフィルタ処理性能、記憶デバイスの容量、記憶デバイスのリード性能などがある。
図9Aは、FPGAのフィルタ処理性能を示すFPGA性能テーブル150である。FPGA性能テーブル150は、FPGAの識別子1511と、フィルタ処理性能1512で構成される。FPGA性能テーブル150は、情報処理装置10の管理者などによって予め設定されてPCIeドライバ130が管理し、システムメモリ210に格納するとしても良いし、PCIeドライバ130がアクセラレータ認識時に問い合わせて、その結果をシステムメモリ210に格納するとしても良い。
図9Bは、記憶デバイスの性能を示す記憶デバイス性能テーブル160である。記憶デバイス性能テーブル160は、記憶デバイスの識別子1601と、容量1602と、リード性能1603で構成される。記憶デバイス性能テーブル160は、情報処理装置10の管理者などによって予め設定されてPCIeドライバ130が管理し、システムメモリ210に格納するとしても良いし、PCIeドライバ130が記憶デバイス認識時に記憶デバイスの性能を問い合わせて、その結果をシステムメモリ210に格納するとしても良い。
図9A、図9Bの例では、OS110あるいはPCIeドライバ130が、記憶デバイスの容量が大きいもの物を、処理性能が高いデバイスに割り当てる、という論理で、FPGA500に記憶デバイス420を割り当て、FPGA510に記憶デバイス400と記憶デバイス430を割り当てても良い。
あるいは、OS110またはPCIeドライバ130が、アクセラレータボードのフィルタ性能と記憶デバイスのリード性能が釣り合うように、FPGA500に記憶デバイス420を割り当てて、FPGA520に記憶デバイス400と410を割り当てても良い。
または、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両方を平行して使うことができる。
情報処理装置10では、このようなFPGAと記憶デバイスの割り当てを行うことで、例えば、記憶デバイスのリード性能の合計と、アクセラレータボードのフィルタ性能が釣り合うように割り当てることができ、高負荷時に記憶デバイスとアクセラレータボードがどちらも最大の性能を発揮できる構成にするなど、情報処理装置10全体の性能の最適化を図ることが可能となる。
次に、本実施例1において、記憶デバイス400に障害が発生した場合の処理の一例を説明する。図10は、記憶デバイス400に障害が発生した際に情報処理装置10で行われる処理の一例を示すシーケンス図である。
記憶デバイス400がFPGA500に割り当てられているとき、DBMS120を実行売るホストプロセッサ200は、FPGA500にフィルタ処理コマンドを発行して、記憶デバイス400のDB450に対するフィルタ処理を実行する(1201)。
FPGA500は、フィルタ処理コマンドを受信して、処理対象となるDB450をリードするために、リードコマンドを記憶デバイス400に発行する(1202)。
しかし、この時点で記憶デバイス400に障害が発生した場合(1203)、例えば、記憶デバイス400が自身の障害を検知して、PCIeルートコンプレックス221を介して、ホストプロセッサ200に障害を通知する(1204)。
障害通知を受け付けたホストプロセッサ200は、記憶デバイス400の障害を検知し、当該障害をFPGA500に通知する(1205)。障害の通知を受信したFPGA500は、フィルタ処理が完了していないため、障害によってフィルタ処理が失敗したことをホストプロセッサ200に通知する。
上記図10の例では、記憶デバイス400自身が障害を検知し、ホストプロセッサ200に通知する例を説明したが、ホストプロセッサ200が記憶デバイス400の状態を監視し、障害を検知し、FPGA500に記憶デバイス400の障害を通知しても良い。
また、記憶デバイス400に障害が発生したことを、FPGA500が、ポーリングなどにより検出してもよい。例えば、FPGA500から記憶デバイス400に発行したリードのタイムアウトなどで、検知しても良い。障害を検知したFPGA500は、その障害及びフィルタ処理が失敗したことを、ホストプロセッサ200に通知する。
このようにして記憶デバイス400の障害を検知したホストプロセッサ200は、記憶デバイス400に障害が発生したことをDBサーバ20に通知し、交換を促すことができる。例えば、DBサーバ20の管理画面に、障害発生を伝えるメッセージを表示するなどの方法がある。また、ミラーリングなどの方法で保護され、記憶デバイス400のバックアップデバイスがあるときには、記憶デバイス400の代わりにそのデバイスを使用することができる。
次に、本実施例1において、アクセラレータボード50に障害が発生した場合の処理の一例を説明する。図11は、アクセラレータボード50に障害が発生した際に情報処理装置10で行われる処理の一例を示すシーケンス図である。
記憶デバイス400がFPGA500に割り当てられている場合、DBMS120を実行するホストプロセッサ200は、記憶デバイス400のDB450に対するフィルタ処理を、FPGA500に指示する(1211)。
しかし、この時点で、FPGA500に障害が発生した場合(1212)、FPGA500はPCIeルートコンプレックス221を介して、ホストプロセッサ200に障害を通知する(1213)。障害の通知を受け付けたホストプロセッサ200は、FPGA500の障害を検知する。なお、ホストプロセッサ200がFPGA500を監視して、障害を検知しても良い。
ホストプロセッサ200は、フィルタ処理に必要なDB450を、記憶デバイス400からリードし(1214)、システムメモリ210に格納する(1215)。リード完了後(1216)、DBMS120を実行するホストプロセッサ200は、FPGA500を使用することなく自身でDB450のフィルタ処理を行う(1217)。
また、ホストプロセッサ200は、FPGA500に割り当てられていた記憶デバイス400を、FPGA510など他のアクセラレータボード51に再度割り当てても良い。この処理について、以下の図12で説明する。
図12は、アクセラレータボード50に障害が発生した際に情報処理装置10で行われる再割り当て処理の一例を示すシーケンス図である。
記憶デバイス400がFPGA500に割り当てられている場合、DBMS120を実行するホストプロセッサ200は、記憶デバイス400のDB450に対するフィルタ処理を、FPGA500に指示する(1221)。
しかし、この時点で、FPGA500に障害が発生した場合(1222)、FPGA500はPCIeルートコンプレックス221を介して、ホストプロセッサ200に障害を通知する(1223)。障害の通知を受け付けたホストプロセッサ200は、FPGA500の障害を検知する。なお、ホストプロセッサ200がFPGA500を監視して、障害を検知しても良い。
ホストプロセッサ200は、新たなアクセラレータボード51に記憶デバイス400を割り当てる決定をする。ホストプロセッサ200は、FPGA510用のFPGAキュー408の生成を、記憶デバイス400に指示する(1224)。ホストプロセッサ200は、記憶デバイス400のFPGA510用のFPGAキュー408のアドレスを含む情報を、FPGA510に通知する(1225)。
次に、DBMS120を実行するホストプロセッサ200は、新たなFPGA510に記憶デバイス400に格納されたDB450を使用するフィルタ処理を指示するフィルタ処理コマンドを再発行する(1226)。
ホストプロセッサ200からフィルタ処理コマンドを受信したFPGA510は、フィルタ処理コマンドの情報に従い、記憶デバイス400に対してリードコマンドを発行する(1227)。記憶デバイス400のDB格納領域404からリードされたデータは、FPGA510のバッファメモリに格納される(1228)。
記憶デバイス400は、要求されたデータの読み出しが完了すると、リード完了通知をFPGA510に送信する(1229)。リード完了通知を受信したFPGA510は、フィルタ処理回コマンドに基づいてフィルタ処理を実行する(1230)。
次に、FPGA510は、フィルタ処理の結果をDBサーバ20のシステムメモリ210に送信する(1231)。フィルタ処理の完了後、FPGA500はフィルタ処理の完了通知をホストプロセッサ200に送信し(1232)、一連のフィルタ処理を終了する。
なお、記憶デバイス400に新たなFPGA510用のFPGAキュー408を生成する例を説明したが、FPGA500が使用していたFPGAキュー408を、FPGA510が流用しても良い。その場合、ホストプロセッサ200は、FPGA500が使用していたFPGAキュー408のアドレスと、FPGAキュー408の値など、FPGAキュー408を流用するための引き継ぎ情報を、FPGA510に通知する。
以上図12のように、FPGA500に障害が発生した場合には、他のFPGA510を記憶デバイス400に割り当てることで、FPGA500の障害発生時にも処理能力を保つことができ、情報処理装置10の運用を継続することが可能となる。
図13は、記憶デバイス及びアクセラレータボードを1つのPCIeスイッチ4320に追加した構成の一例を示すブロック図である。図13の情報処理装置10は、図2に示したPCIeスイッチ2320に代わって、PCIeバス4300を介してDBサーバ20に接続されたPCIeスイッチ4310に、PCIeバス4303を介してアクセラレータボード50と記憶デバイス400が接続されている。そして、このPCIeスイッチ4310に記憶デバイス440と、アクセラレータボード53をホットプラグするものである。その他の構成については、前記図2と同様である。
図14は、情報処理装置10の初期化完了後に、新たな記憶デバイス440が追加されたときの処理の一例を示すシーケンス図である。
FPGA500が記憶デバイス400に割り当てられている情報処理装置10に、新たに記憶デバイス440が挿入されたとき(1301)、記憶デバイス440からホストプロセッサ200に割り込みが発行される(1302)。
ホットプラグによる割り込みを検知し、記憶デバイス440の追加を検知したホストプロセッサ200は、記憶デバイス440とFPGA500の再割り当てを行う。例えば、記憶デバイス440をFPGA500に追加で割り当てる例を示す。
ホストプロセッサ200は、記憶デバイス440に対して、ホストプロセッサ200用のプロセッサキュー407とFPGA500用のFPGAキュー408を生成するよう指示する(1303)。
ホストプロセッサ200は、FPGA510用のFPGAキュー408のアドレスを含むキュー情報をFPGA510に通知する(1304)。
このような再割り当てを行うことで、情報処理装置10の初期化完了後でも、記憶デバイス440の追加後に、FPGA500に新たな記憶デバイスの情報を処理する機能を与えることができる。
図15は、情報処理装置10の初期化完了後に、新たなアクセラレータボード53が追加されたときの処理の一例を示すシーケンス図である。
図13において、FPGA500が記憶デバイス400に割り当てられている情報処理装置10に、新たにアクセラレータボード53(FPGA530)が追加されたとき(1311)、FPGA530からホストプロセッサ200に割り込みが発行される(1312)。
ホットプラグによる割り込みを検知し、FPGA530の追加を検知したホストプロセッサ200は、記憶デバイス400、440、FPGA500、530に関して再び割り当てを行う。例えば、記憶デバイス400はそのままFPGA500に割り当てられ、記憶デバイス440は新たに追加されたFPGA530に割り当てる場合、ホストプロセッサ200はFPGA500に記憶デバイス440の割り当て解除を通知する(1313)。
次に、ホストプロセッサ200は、FPGA530用のFPGAキュー408の生成を、記憶デバイス440に指示する(1314)。その後、ホストプロセッサ200は、記憶デバイス440のFPGA530用のFPGAキュー408のアドレスを含むキュー情報をFPGA530に通知する(1315)。以降、DBMS120を実行するホストプロセッサ200は、記憶デバイス440のDBを使用するフィルタ処理については、FPGA530で実行するよう指示する。
なお、記憶デバイス440に新たなFPGA530用のFPGAキュー408を生成する例を説明したが、FPGA500が使用していたFPGAキュー408を、FPGA530が流用しても良い。この場合、ホストプロセッサ200は、FPGA500が使用していたFPGAキュー408のアドレスと、FPGAキュー408の値など、FPGAキュー408を流用するための引き継ぎ情報を、FPGA530に通知する。
このような再割り当てを行うことで、情報処理装置10の初期化完了後でも、アクセラレータボード53の追加後に、アクセラレータボード53を使用可能にして、情報処理装置10の性能を向上させることができる。
以上、本実施例1によれば、DBサーバ20のホストプロセッサ200が、PCIeバス2300〜2304のエンドポイントに接続された記憶デバイス400のキューの情報を、同じくエンドポイントのアクセラレータとしてのFPGA500に通知する。これにより、PCIeバス2300〜2304のエンドポイントのFPGA500が、同じくエンドポイントの記憶デバイス400にアクセスすることが可能となる。そして、FPGA500が直接記憶デバイス400からデータを読み出して、ホストプロセッサ200の処理の一部を実行することができるようになり、情報処理装置10を高速化できる。
なお、本実施例1は、データベース450のフィルタ処理を用いて説明したが、本発明が適用される処理は、データベース450のフィルタ処理に限定されるものではなく、ホストプロセッサ200の負荷をアクセラレータボード50にオフロードできる処理であれば良い。例えば、データの圧縮処理などでも良い。
また、本実施例1では、NVMeのAdminキュー406のアドレスや、I/O発行キュー407〜409のアドレスを、ホストプロセッサ200がアクセラレータボード50に通知する例を説明したが、本発明は、NVMeやキューインタフェースに限定するものではない。I/Oコマンド発行を可能にするための初期設定インタフェースのアドレスや、他のデバイスから記憶デバイスへのI/O発行インタフェースのアドレスを、プロセッサがアクセラレータボード50に通知するものであれば良い。
また、本実施例1では、図2のように、DBサーバ20の外部に記憶デバイス400やアクセラレータボード50を接続した構成で、DB450のフィルタ処理を実行する例を説明した。しかし、本発明はこの構成に限定されるものではなく、ホストプロセッサ200と記憶デバイス400とアクセラレータボード50がネットワークによって接続された構成であれば良い。
例えば、DBサーバ20の内部のPCIeスロットに記憶デバイス400やアクセラレータボード50を搭載した構成や、図16の情報処理装置10のような構成であってもよい。
図16は、実施例1の変形例を示し、情報処理装置10Aの一例を示すブロック図である。情報処理装置10Aは、DBサーバ20にサーバ−ストレージ間ネットワーク700(例えば、ファイバチャネルやInfiniBandなど)で接続されたストレージ装置60を有する。ストレージ装置60の内部には、ストレージプロセッサ600やキャッシュメモリ610やストレージチップセット620を持つストレージコントローラ61が含まれる。
ストレージコントローラ61のストレージチップセット620は、PCIeルートコンプレックス621を含む。PCIeルートコンプレックス621は、PCIeバス5301を介してPCIeスイッチ5310が接続される。
PCIeスイッチ5310には、FPGA500、510を含むアクセラレータボード50、51と記憶デバイス400、410、420、430がPCIeバス5303を介して接続される。
また、本実施例1では、ホストプロセッサ200と記憶デバイス400とアクセラレータボード50を接続するバスとしてPCIeバスを用いて説明したが、本発明で使用するバスはPCIeに限定されるものではない。例えば、PCIeバスに代わってSAS(Serial Attached SCSI)を用いても良い。
図17は、本発明の第2の実施例を示し、情報処理装置10の一例を示すブロック図である。本実施例2では、アクセラレータボード50に代わって、アクセラレータボード54を採用し、PCIeスイッチ2310のみとしたもので、その他の構成は前記実施例1と同様である。
前記実施例1では、記憶素子を持たないアクセラレータボード50が、記憶デバイス400に対してI/Oコマンドを発行する例を説明したが、本発明では、アクセラレータボード50を搭載したデバイスが記憶素子を持っていても良い。
例えば、図17の情報処理装置10は、アクセラレータであるFPGA540と、不揮発メモリであるDB格納領域545を両方搭載したアクセラレータボード54と、記憶デバイス400を有する構成である。
DBサーバ20は、前記実施例1と同様に、ホストプロセッサ200が、記憶デバイス400のI/Oコントローラ401にFPGA用I/O発行キュー409を生成し、生成したキュー情報をFPGA540に通知する。これにより、FPGA540はキュー情報を用いて記憶デバイス400にI/Oコマンドを発行することが可能となる。
このアクセラレータボード54にフィルタ処理コマンドを発行したときの処理を以下に説明する。
図18は、情報処理装置10で行われるデータベース処理の一例を示すシーケンス図である。
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)。
一方、FPGA540自身のDB格納領域545に格納されているLBA領域のデータについては、不揮発メモリ制御回路544に対してリードコマンドを発行する(1403)。DB格納領域545は、要求されたデータを読み出してバッファメモリ543に書き込み(1405、1409)、I/O処理回路541にリード完了通知を発行する(1407、1411)。
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)、処理を終了する。
このような処理で、DBサーバ20は、アクセラレータボード54に対して、記憶デバイス400のDB格納領域404と、アクセラレータボード54のDB格納領域545に格納されたDBのフィルタ処理を、アクセラレータであるFPGA540にオフロードすることができる。
図19は、本発明の第3の実施例を示し、情報処理装置10の一例を示すブロック図である。本実施例3では、アクセラレータボード50と記憶デバイス400に代わって、複数のアクセラレータ搭載記憶デバイス800、810をPCIeスイッチ310に接続したもので、その他の構成は前記実施例1と同様である。
前記実施例1では、記憶素子を持たないアクセラレータボード50が、記憶デバイスに対してI/Oコマンドを発行する例を説明したが、本発明では、アクセラレータの機能と記憶デバイスの機能を含むアクセラレータ搭載記憶デバイス800、810を採用することができる。
例えば、図19の情報処理装置10のように、アクセラレータとしてFPGA900を搭載したアクセラレータ搭載記憶デバイス800と、FPGA910を搭載したアクセラレータ搭載記憶デバイス810を、PCIeスイッチ310を介してDBサーバ20に接続する構成などがある。DBサーバ20及びPCIeスイッチ310は前記実施例1と同様の構成である。
アクセラレータ搭載記憶デバイス800では、I/Oコントローラ801とFPGA900は、チップ間通信回路901を有し、FPGA900のバッファメモリ903に、DB格納領域804のデータを転送することが可能となっている。これにより、フィルタ処理回路902を利用して、DB格納領域804のDBに対して、フィルタ処理を行うことができる。
なお、I/Oコントローラ801は、前記実施例1の図2に示したI/Oコントローラ401と同様であり、プロセッサ802と、管理情報格納領域803と、コマンドインタフェース805を有する。コマンドインタフェース805は、Adminキュー806と、プロセッサキュー807と、FPGAキュー808、809を有する。
アクセラレータ搭載記憶デバイス810も同様の構成であり、I/Oコントローラ811とFPGA910は、チップ間通信回路を有し、FPGA910のバッファメモリ913に、DB格納領域814のデータを転送することが可能となっている。これにより、フィルタ処理回路912を利用して、DB格納領域814のDBに対して、フィルタ処理を行うことができる。
なお、I/Oコントローラ811は、前記実施例1の図2に示したI/Oコントローラ401と同様であり、プロセッサ812と、管理情報格納領域813と、コマンドインタフェース815を有する。コマンドインタフェース815は、Adminキュー816と、プロセッサキュー817と、FPGAキュー818、819を有する。
図20は、情報処理装置10で行われる初期化処理の一例を示すシーケンス図である。
ホストプロセッサ200は情報処理装置10の初期化開始時に、自身が接続されているPCIeネットワークの構成情報をシステムメモリ210から取得する(1501)。
次に、ホストプロセッサ200は、取得したPCIeネットワークの構成情報を用いて、データベース格納領域804、814にアクセスするFPGA900、910を割り当てる(1502)。この割り当ては、前記実施例1の図4と同様に行うことができる。
ホストプロセッサ200は、アクセラレータ搭載記憶デバイス800のAdminキュー806を用いて、ホストプロセッサ200用のI/O発行キュー807と、アクセラレータ搭載記憶デバイス810のFPGA910用のI/O発行キュー808を生成する(1503)。
また同様に、ホストプロセッサ200は、アクセラレータ搭載記憶デバイス810のAdminキュー816を用いて、ホストプロセッサ200用のI/O発行キュー817と、アクセラレータ搭載記憶デバイス800のFPGA900用のI/O発行キュー818を生成する(1504)。
その後、ホストプロセッサ200は、アクセラレータ搭載記憶デバイス800には、アクセラレータ搭載記憶デバイス810のI/O発行キュー818の情報を通知する(1505)。また、ホストプロセッサ200は、アクセラレータ搭載記憶デバイス810には、アクセラレータ搭載記憶デバイス800のI/O発行キュー808の情報を通知する(1506)。上記図20の処理により、アクセラレータ搭載記憶デバイス800と、アクセラレータ搭載記憶デバイス810は、相互にI/Oコマンドを発行してフィルタ処理を実行することが可能となる。
なお、上記実施例3ではI/Oコントローラ801、811と、FPGA900、910が独立したチップとして実装されている例を紹介したが、フィルタ処理回路902、912をI/Oコントローラ801、811に搭載するなど、アクセラレータの機能を持つI/Oコントローラとして一体化しても良い。
なお、前記実施例1の図5の処理を、本実施例3に適用すると、ホストプロセッサ200が、アクセラレータ搭載記憶デバイス810に対して、フィルタ処理コマンドを発行し、アクセラレータ搭載記憶デバイス810はアクセラレータ記憶デバイス800からデータを読み込む。そして、アクセラレータ搭載記憶デバイス810のFPGA910は、フィルタ処理を実行し、処理結果をホストプロセッサ200のシステムメモリ210へ格納する。
なお、前記実施例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に通知することで割り当て実行する。
なお、前記実施例1の図10の処理を、本実施例3に適用すると、アクセラレータ搭載記憶デバイス800に障害が発生したときには、アクセラレータ搭載記憶デバイス800からの通知に基づいてホストプロセッサ200が障害を検知する。ホストプロセッサ200は、フィルタ処理を実行するアクセラレータ搭載記憶デバイス810に対して、アクセラレータ搭載記憶デバイス800の障害を通知する。
なお、前記実施例1の図11の処理を、本実施例3に適用すると、アクセラレータ搭載記憶デバイス810のFPGA910に障害が発生したときには、アクセラレータ搭載記憶デバイス810が、データを読み込んだアクセラレータ搭載記憶デバイス800に対してFPGA910の障害を通知する。
あるいは、アクセラレータ搭載記憶デバイス810が、ホストプロセッサ200にFPGA910の障害を通知し、ホストプロセッサ200がアクセラレータ搭載記憶デバイス800にFPGA910の障害を通知してもよい。
なお、前記実施例1の図14または図15の処理を、本実施例3に適用すると、ホストプロセッサ200は、新たなアクセラレータ搭載記憶デバイスの追加を検知すると、システムメモリ210のPCIeネットワークの構成情報を参照して、新たなアクセラレータ搭載記憶デバイスとFPGAの割り当てを決定する。そして、ホストプロセッサ200は、新たな割り当てに基づいて、AdminキューやI/O発行キューのアドレスを新たなアクセラレータ搭載記憶や既存のアクセラレータ搭載記憶デバイス800に通知して割り当てを変更する。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
<補足>
データを格納する記憶デバイスであって、
前記記憶デバイスは、
前記初期化の命令を受け付ける初期設定インタフェースと、
I/Oコマンドを発行するI/O発行インタフェースと、を有し、
前記I/O発行インタフェースは、
前記第1の装置からのI/Oコマンドを受け付ける第1のI/O発行インタフェースと、
前記第2の装置からのI/Oコマンドを受け付ける第2のI/O発行インタフェースと、を含み、
前記記憶デバイスは
前記第1の装置と第2の装置から、それぞれ独立して前記I/Oコマンドを受け付け可能であることを特徴とする情報処理装置。

Claims (16)

  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コマンドを受け付け可能であることを特徴とする情報処理装置。
  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に記載の情報処理装置であって、
    前記記憶デバイスは、データを処理するアクセラレータをそれぞれ含み、
    前記プロセッサが、前記ネットワークに接続された複数の記憶デバイスの情報を収集して、ネットワークの構成情報として前記メモリに格納し、
    前記プロセッサが、前記ネットワークに新たな記憶デバイスが追加されたときには、前記ネットワークの構成情報に基づいて、所定の条件を満たす記憶デバイスとアクセラレータの割り当てを導出し、
    前記プロセッサは、当該導出した新たな割り当てに基づいて、前記新たな記憶デバイスと前記記憶デバイスのアクセラレータの割り当てを変更することを特徴とする情報処理装置。
JP2017501621A 2015-02-25 2015-02-25 情報処理装置 Active JP6329318B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/055345 WO2016135875A1 (ja) 2015-02-25 2015-02-25 情報処理装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2018080523A Division JP2018113075A (ja) 2018-04-19 2018-04-19 情報処理装置

Publications (2)

Publication Number Publication Date
JPWO2016135875A1 JPWO2016135875A1 (ja) 2017-12-07
JP6329318B2 true JP6329318B2 (ja) 2018-05-23

Family

ID=56788307

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017501621A Active JP6329318B2 (ja) 2015-02-25 2015-02-25 情報処理装置

Country Status (4)

Country Link
US (1) US10467176B2 (ja)
JP (1) JP6329318B2 (ja)
CN (1) CN107241913B (ja)
WO (1) WO2016135875A1 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016135875A1 (ja) * 2015-02-25 2016-09-01 株式会社日立製作所 情報処理装置
US10817446B1 (en) * 2015-04-30 2020-10-27 Mobiveil, Inc. Optimized multiport NVMe controller for multipath input/output applications
CN106713183B (zh) * 2015-10-30 2020-03-17 新华三技术有限公司 网络设备的接口板以及该网络设备和报文转发方法
JP6703600B2 (ja) * 2016-04-27 2020-06-03 株式会社日立製作所 計算機システム及びサーバ
US11029659B2 (en) * 2016-06-30 2021-06-08 Intel Corporation Method and apparatus for remote field programmable gate array processing
WO2018179243A1 (ja) * 2017-03-30 2018-10-04 株式会社日立製作所 情報処理装置及び方法
WO2018201249A1 (en) 2017-05-03 2018-11-08 Eidetic Communications Inc. Apparatus and method for controlling data acceleration
CN110622145B (zh) * 2017-05-15 2023-06-13 莫列斯有限公司 可重新配置的服务器以及服务器机架
US10719474B2 (en) * 2017-10-11 2020-07-21 Samsung Electronics Co., Ltd. System and method for providing in-storage acceleration (ISA) in data storage devices
CN109726153B (zh) * 2017-10-27 2023-02-24 伊姆西Ip控股有限责任公司 用于存储设备的集成装置、相应存储设备及其制造方法
US20190243796A1 (en) * 2018-02-06 2019-08-08 Samsung Electronics Co., Ltd. Data storage module and modular storage system including one or more data storage modules
US20190266111A1 (en) * 2018-02-27 2019-08-29 Goke Us Research Laboratory Method and apparatus for high speed data processing
US10509600B2 (en) 2018-02-27 2019-12-17 Goke Us Research Laboratory Method and apparatus for data compression and decompression using a standardized data storage and retrieval protocol
US10452871B2 (en) 2018-02-27 2019-10-22 Goke Us Research Laboratory Method and apparatus for data encryption using a standardized data storage and retrieval protocol
US10509698B2 (en) 2018-02-27 2019-12-17 Goke Us Research Laboratory Method and apparatus for data encoding and decoding using a standardized data storage and retrieval protocol
US10585819B2 (en) 2018-03-05 2020-03-10 Samsung Electronics Co., Ltd. SSD architecture for FPGA based acceleration
US10969973B2 (en) * 2018-09-20 2021-04-06 Microsoft Technology Licensing, Llc Software filtered memory devices in computing systems
US20240037056A1 (en) * 2020-09-29 2024-02-01 Nec Corporation Information processing apparatus, information processing system, connection control method, and non-transitory computer readable medium storing connection control program
KR20220056986A (ko) 2020-10-29 2022-05-09 삼성전자주식회사 메모리 확장기, 이종 컴퓨팅 장치, 및 이종 컴퓨팅 장치의 동작 방법

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247665A (en) 1988-09-30 1993-09-21 Kabushiki Kaisha Toshiba Data base processing apparatus using relational operation processing
JPH02178773A (ja) 1988-12-28 1990-07-11 Toshiba Corp データ処理装置
JP4501916B2 (ja) * 2006-09-20 2010-07-14 日本電気株式会社 I/o機器の共有システムと情報処理装置共有システム及びそれらに用いる方法
JP2011113163A (ja) * 2009-11-25 2011-06-09 Nec Corp Ioアクセス通信システムにおけるエンドポイント間通信制御装置および方法
EP2509334B1 (en) * 2009-11-30 2018-09-12 Sun Patent Trust Communication apparatus
JP5204195B2 (ja) * 2010-10-29 2013-06-05 株式会社東芝 データ送信システムおよびデータ送信プログラム
US8806269B2 (en) * 2011-06-28 2014-08-12 International Business Machines Corporation Unified, workload-optimized, adaptive RAS for hybrid systems
US8732462B2 (en) * 2011-07-07 2014-05-20 Ziptr, Inc. Methods and apparatus for secure data sharing
WO2013082809A1 (zh) 2011-12-09 2013-06-13 华为技术有限公司 协处理加速方法、装置及系统
JP2014026531A (ja) * 2012-07-27 2014-02-06 Hitachi Ltd 情報処理装置及び情報処理装置のデータ転送方法
US8996781B2 (en) 2012-11-06 2015-03-31 OCZ Storage Solutions Inc. Integrated storage/processing devices, systems and methods for performing big data analytics
KR20140073955A (ko) * 2012-12-07 2014-06-17 삼성전자주식회사 메모리 시스템 및 그 구동 방법
US9361116B2 (en) * 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US9880935B2 (en) * 2014-03-24 2018-01-30 Intel Corporation Efficient data transfer between a processor core and an accelerator
WO2016135875A1 (ja) * 2015-02-25 2016-09-01 株式会社日立製作所 情報処理装置
US10425830B2 (en) * 2015-09-07 2019-09-24 Electronics And Telecommunications Research Institute Mobile communication network system and method for composing network component configurations

Also Published As

Publication number Publication date
CN107241913A (zh) 2017-10-10
JPWO2016135875A1 (ja) 2017-12-07
US10467176B2 (en) 2019-11-05
CN107241913B (zh) 2020-06-19
WO2016135875A1 (ja) 2016-09-01
US20180011812A1 (en) 2018-01-11

Similar Documents

Publication Publication Date Title
JP6329318B2 (ja) 情報処理装置
US9760497B2 (en) Hierarchy memory management
KR20200017363A (ko) 호스트 스토리지 서비스들을 제공하기 위한 NVMe 프로토콜에 근거하는 하나 이상의 호스트들과 솔리드 스테이트 드라이브(SSD)들 간의 관리되는 스위칭
JP5347061B2 (ja) フラッシュメモリデータストレージデバイスにデータを格納するための方法及び装置
US10209922B2 (en) Communication via a memory interface
US8447916B2 (en) Interfaces that facilitate solid state storage configuration
JP2014021972A (ja) 複数の仮想マシンとして動作する複数のシステムによって共有されるストレージ・キャッシングでの柔軟性を改善するための方法および構造
JP6068676B2 (ja) 計算機システム及び計算機システムの制御方法
JP6703600B2 (ja) 計算機システム及びサーバ
WO2013158817A1 (en) Lun management with distributed raid controllers
US10114772B1 (en) Address layout over physical memory
US10049042B2 (en) Storage device, semiconductor memory device, and method for controlling same
US20230051825A1 (en) System supporting virtualization of sr-iov capable devices
US10310758B2 (en) Storage system and storage control method
JP6232936B2 (ja) 情報処理装置、記憶装置制御回路及び記憶装置の制御方法
US10437495B1 (en) Storage system with binding of host non-volatile memory to one or more storage devices
JP2018113075A (ja) 情報処理装置
US9176669B2 (en) Address resource mapping in a shared memory computer system
US10732901B2 (en) Storage system and storage control method
US20230359389A1 (en) Operation method of host configured to communicate with storage devices and memory devices, and system including storage devices and memory devices
US20230359567A1 (en) Storage device, computing device including storage device and memory device, and operating method of computing device
US10459842B1 (en) Data storage system with configurable prefetch buffers
JP5469085B2 (ja) Mraスイッチを備えるサーバ装置
KR20210043001A (ko) 하이브리드 메모리 시스템 인터페이스

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170728

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180109

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180307

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180320

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180419

R150 Certificate of patent or registration of utility model

Ref document number: 6329318

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150