JP2018022328A - 処理制御方法及び計算機 - Google Patents

処理制御方法及び計算機 Download PDF

Info

Publication number
JP2018022328A
JP2018022328A JP2016152829A JP2016152829A JP2018022328A JP 2018022328 A JP2018022328 A JP 2018022328A JP 2016152829 A JP2016152829 A JP 2016152829A JP 2016152829 A JP2016152829 A JP 2016152829A JP 2018022328 A JP2018022328 A JP 2018022328A
Authority
JP
Japan
Prior art keywords
error
processing
processor
fpga
state
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.)
Pending
Application number
JP2016152829A
Other languages
English (en)
Inventor
本村 哲朗
Tetsuro Motomura
哲朗 本村
義文 藤川
Yoshibumi Fujikawa
義文 藤川
純也 飯塚
Junya Iizuka
純也 飯塚
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
Priority to JP2016152829A priority Critical patent/JP2018022328A/ja
Publication of JP2018022328A publication Critical patent/JP2018022328A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Logic Circuits (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】FPGAのソフトエラーに対して、コスト及び性能のオーバーヘッドを抑えた制御方法を提供する。【解決手段】FPGAを搭載する計算機における処理制御方法であって、計算機はプロセッサ及びメモリを有し、FPGAは論理回路及びエラー検出回路を含み、FPGAは第1の処理を複数回実行し、プロセッサは第1の処理の処理結果を使用する第2の処理を実行し、処理制御方法は、FPGAが、第1の処理及び論理回路のエラー検出処理を並行して実行し、処理結果及び完了通知をメモリに書き込むステップと、プロセッサが、第1の処理の完了通知を検出した場合、第2の処理を開始するステップと、FPGAが、論理回路のエラーの発生をプロセッサに通知するステップと、プロセッサが、複数の第2の処理の中から、エラーを含む第1の処理の処理結果を使用する可能性がある第2の処理を特定し、中断するステップと、を含む。【選択図】図1

Description

本発明は、FPGAのエラー対策技術に関する。
ITの進歩及びインターネットの普及等に伴う、計算機システムが扱うデータ量の増加しており、高い処理性能が要求されている。
従来から、性能向上のために、様々な技術が導入されている。一つにはFPGA(Field Programmable Gate Array)が挙げられる。ホスト計算機にFPGAボードを搭載し、ホスト計算機が有するCPUの代わりにFPGAに各種演算処理を実行させる。これによって、CPUのオーバーヘッドを抑制できるため、システムの性能を向上できる。
しかし、FPGAでは、宇宙線などに起因するソフトエラーにより、FPGAが備えるSRAM(以下、CRAM(Configuration RAM)と記載する。)に格納されるユーザ論理(ユーザ回路)の構成情報等の値が反転する現象、すなわち「1」から「0」、又は「0」から「1」に変化する現象が発生する可能性がある。前述した現象によって、エラーを含む処理結果がFPGAから出力される可能性がある。
ソフトエラーに対する対策としては、ユーザ論理を冗長化する方法が考えられる。当該方法では、FPGAの内部に、独立に同一の論理ブロックを二つ設け、各論理ブロックから出力されたデータを比較し、同一であれば誤りが無いと判定してデータをFPGAの外部に出力する。しかし、この方法では、論理規模が増大するため、生産コスト及び開発コスト等のコストが増大する。
ソフトエラーに対する対策として、特許文献1に記載の技術が知られている。特許文献1には、「演算手段は、構成データにより回路構成が規定されるよう構成され、回路構成に基づく演算の結果として演算信号を出力する。処理手段は、演算信号に基づく処理信号を出力する。異常検出手段は、演算手段における回路構成に異常が生じたことを検出する。処理手段は、演算信号を取得してから、回路構成に異常が生じた場合に該異常が生じてから異常検出手段によって検出されるまでの時間に応じた待機時間の経過後に、異常検出手段の検出結果に応じた処理信号を出力する。」ことが記載されている。
エラー検出処理は逐次的に行われるため、現在、処理しているCRAM部分の隣の部分にエラーが発生した場合、この時点では、エラーは検出できず、再度、CRAMのエラー検出処理を実行することによって、はじめて、データ処理中にエラーが発生したことを検出できる。したがって、データ処理の完了後、エラー検出処理が実行される。
特開2016−25464号公報
特許文献1の方法は、コストを削減することはできるが、エラー検出時間だけ、次の処理の実行を待つ必要があるため、性能が低下する。特に、エラー検出時間より短い時間で終了する処理の場合、性能の低下が顕著となる。
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、FPGAを搭載する計算機における処理制御方法であって、前記計算機は、プロセッサ、及び前記プロセッサに接続されるメモリを有し、前記FPGAは、処理を実行する論理回路及び前記論理回路のエラー検出処理を実行するエラー検出回路を含み、前記プロセッサと接続し、前記FPGAは、第1の処理を複数回実行し、前記プロセッサは、前記第1の処理の処理結果を使用する第2の処理を実行し、前記処理制御方法は、前記プロセッサが、前記FPGAに前記第1の処理の開始を指示する第1のステップと、前記FPGAが、前記第1の処理及び前記論理回路のエラー検出処理を並行して実行し、前記第1の処理の処理結果及び前記第1の処理の完了通知を前記メモリに書き込む第2のステップと、前記プロセッサが、前記第1の処理の完了通知を検出した場合、前記第2の処理を開始する第3のステップと、前記FPGAが、前記論理回路のエラーを検出した場合、前記論理回路のエラーの発生を前記プロセッサに通知する第4のステップと、前記プロセッサが、前記論理回路のエラーの発生の通知を受けた場合、複数の前記第2の処理の中から、エラーを含む前記第1の処理の処理結果を使用する可能性がある少なくとも一つの第2の処理を特定する第5のステップと、前記プロセッサが、前記特定された少なくとも一つの第2の処理を中断する第6のステップと、を含むことを特徴とする。
本発明によれば、FPGAを搭載する計算機において、コストを抑えつつ、性能のオーバーヘッドを削減した処理を実現できる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
実施例1のFPGAのエラー処理の概要を説明する図である。 実施例1の計算機システムの構成例を示す図である。 実施例1の処理管理情報の一例を示す図である。 実施例1のDRAMに格納される処理A−nの結果情報の一例を示す図である。 実施例1のコンフィグファイルの一例を示す図である。 実施例1のコンフィグファイルに設定するパラメタを入力するためのGUIの一例を示す図である。 実施例1のサーバ装置内の処理の流れを示すシーケンス図である。 実施例1のFPGAスケジューラが実行する処理を説明するフローチャートである。 実施例1のエラー割込みモジュールが実行する処理を説明するフローチャートである。 実施例2の処理管理情報の一例を示す図である。 実施例2のFPGAスケジューラが実行する処理を説明するフローチャートである。 実施例2の処理A−nのエラーフリー検出タスクが実行する処理を説明するフローチャートである。 実施例2のエラー割込みモジュールが実行する処理を説明するフローチャートである。 実施例2のエラーフリー検出タスクによって更新された処理管理情報の一例を示す図である。
以下の説明では「aaaテーブル」、「aaaリスト」、「aaaDB」、「aaaキュー」等の表現にて本発明の情報を説明するが、これら情報はテーブル、リスト、DB、及びキュー等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「aaaテーブル」、「aaaリスト」、「aaaDB」、及び「aaaキュー」等について「aaa情報」と呼ぶことがある。
さらに、各情報の内容を説明する場合に、「識別情報」、「識別子」、「名」、「名前」、及び「ID」という表現を用いるが、これらについてはお互いに置換が可能である。
以下の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることによって、定められた処理をメモリ及び通信ポート(通信制御デバイス)を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部又は全ては専用ハードウェアによって実現されてもよい。
また、各種プログラムは、プログラム配布サーバを介して各計算機にインストールされてもよいし、計算機が読み取り可能な記憶メディアを用いて各計算機にインストールされてもよい。この場合、プログラム配布サーバはプロセッサと記憶資源を含み、記憶資源はさらに配布プログラム及び配布対象であるプログラムを記憶している。そして、配布プログラムをプロセッサが実行することによって、プログラム配布サーバのプロセッサは配布対象のプログラムを計算機に配布する。
図1は、実施例1のFPGAのエラー処理の概要を説明する図である。図2は、実施例1の計算機システムの構成例を示す図である。
まず、図2を用いて計算機システムの構成について説明する。
計算機システムは、サーバ装置100及びストレージシステム101から構成される。サーバ装置100は、所定の処理を実行する。ストレージシステム101は、各種データを格納する。
サーバ装置100は、CPU201、DRAM202、記憶装置203、HBA204、及びFPGAボード205を有する。CPU201、DRAM202、記憶装置203、及びHBA204は、内部バス等を介して互いに接続される。FPGAボード205は、PCIeコネクタ243を介してサーバ装置100と接続され、当該PCIeコネクタ243を介してCPU201と通信する。
なお、サーバ装置100は、入出力デバイスを有してもよい。入出力デバイスの例としてはディスプレイ、キーボード、及びポインタデバイスが考えられるが、これ以外のデバイスであってもよい。また、入出力デバイスの代替としてシリアルインタフェース又はイーサーネットインタフェース等を入出力デバイスとし、当該インタフェースにディスプレイ、キーボード、及びポインタデバイスのいずれかを有する表示用計算機を接続し、表示用情報を表示用計算機に送信し、また、入力用情報を表示用計算機から受信することによって、表示用計算機が情報を表示し、入力を受け付けることで入出力デバイスでの入力及び表示を代替してもよい。
以下、計算機システムを管理し、本願発明の表示用情報を表示する一つ以上の計算機の集合を管理システムと呼ぶことがある。管理計算機が表示用情報を表示する場合、管理計算機が管理システムである。また、管理計算機及び表示用計算機の組み合わせも管理システムである。また、管理処理の高速化及び高信頼化のために複数の計算機を用いて管理計算機と同等の処理を実現してもよく、この場合、当該複数の計算機(表示を表示用計算機が行う場合には表示用計算機も含む。)が管理システムである。
CPU201は、各種処理を実行する演算装置である。DRAM202は、CPU201が実行するプログラム及び当該プログラムの実行に必要なデータを格納する。また、DRAM202は、プログラムが使用する一時領域を含む。記憶装置203は、データを永続的に格納する装置であり、例えば、HDD(Hard Disk Drive)及びSSD(Solid State Drive)等が考えられる。HBA204は、ストレージシステム101に接続するためのインタフェースである。なお、サーバ装置100は、ネットワークインタフェースを用いてストレージシステム101と接続してもよい。
FPGAボード205は、FPGA240、ROM241、DRAM242、及びPCIeコネクタ243を有する。FPGA240、ROM241、DRAM242、及びPCIeコネクタ243は、内部バス等を介して互いに接続される。
ROM241は、ユーザ論理250の構成情報であるコンフィグレーションデータを格納する。DRAM242は、FPGA240が実行する処理の結果等を格納する。
FPGA240は、ユーザ論理250、CRAM260、及びエラー検出回路270を有する。
ユーザ論理250は、FPGA240を使用するユーザによって定義された論理回路であり、FF(フリップフロップ)251等を含む。CRAM260は、ROM241から読み出されたコンフィグレーションデータを格納する。エラー検出回路270は、CRAM260に対してエラー検出処理を実行し、CRAM260におけるソフトエラーを検出する。
FPGA240は、電源投入後、ROM241からコンフィグレーションデータを読み出し、CRAM260にコンフィグレーションデータを書き込むことによってユーザ論理250を形成する。
ここで、サーバ装置100のDRAM202に格納されるプログラムについて説明する。
DRAM202は、OS210及びミドルウェア/アプリケーション220を実現するプログラムを格納する。また、DRAM202は、処理管理情報230を格納する。
OS210は、サーバ装置100全体を制御する。OS210は、FPGA240を操作するためのFPGAドライバ211を含む。
ミドルウェア/アプリケーション220は、FPGAスケジューラ221及びエラー割込みモジュール222を含む。
FPGAスケジューラ221は、FPGA240に処理を割り当てる。エラー割込みモジュール222は、FPGA240のエラーが検出された場合のエラー対策処理を実行する。具体的には、エラー割込みモジュール222は、アボートする処理を特定し、特定された処理をアボートする。
ストレージシステム101は、図示しない、CPU、メモリ、接続インタフェース、及び記憶装置を有する。また、ストレージシステム101のメモリには、ストレージシステム101を制御するOS等を実現するプログラムが格納される。
また、記憶装置203は、コンフィグファイル280を格納する。コンフィグファイル280は、FPGAスケジューラ221を実行するための各種パラメタを格納する。コンフィグファイル280の詳細は図5を用いて説明する。
図1を用いて処理の概要について説明する。時間軸10は、時間の流れを示す軸であり、矢印の方向に時間が進むことを示す。
本実施例では、ユーザ論理250は処理A−nを実行し、ミドルウェア/アプリケーション220は、処理A−nの処理結果を用いた処理B−nを実行するものとする。また、エラー検出回路270が実行するエラー検出処理の所要時間はTcであるものとする。
ユーザ論理250は、処理A−1、A−2、A−3、A−4、A−5、A−6、A−7と、処理A−nを7回実行する。エラー検出回路270は、ユーザ論理250の処理と並行して、CRAM260のエラー検出処理を実行する。なお、処理A−nとエラー検出処理とは、同時に実行されるように並列化されてもよいし、実行時間の一部が重複するように並列化されていてもよい。
ミドルウェア/アプリケーション220は、処理A−iの完了を検出した場合、処理A−iの実行時におけるCRAM260のエラー検出処理が完了する前に、処理B−iを開始する。
エラー検出処理では、エラー検出回路270が、CRAM260に格納される全てのデータに対して逐次的にエラーの有無を確認する。そのため、エラー検出処理が完了する前の時点においてエラーが検出されていない場合でも、エラーが検出される可能性がある。
エラーが発生していないことを保証するためには、エラー検出処理が開始されてからTcの間、処理B−nの実行を待つ必要がある。この場合、オーバーヘッドが発生する。
そこで、本実施例では、ミドルウェア/アプリケーション220は、処理A−nが終了した後、投機的に処理B−nを実行する。ある時点でCRAM260のエラーが検出された場合、エラー割込みモジュール222が、任意の条件を満たす処理B−nを特定し、特定された処理B−nをアボートする。
実施例1では、ミドルウェア/アプリケーション220は、処理B−nの開始時間を予め取得し、処理管理情報230にて管理する。ミドルウェア/アプリケーション220は、エラーが検出された場合、エラーが検出された現在時刻TpからTcだけ遡った時間範囲に開始された処理B−nを特定し、特定された処理B−nをアボートする。
エラーの有無の判定は、逐次的に実行されるため、現在時刻Tpから時刻(Tp−Tc)までの間にエラーが発生している可能性がある。したがって、この時間間隔の間に出力された処理A−nの結果はエラーを含む可能性がある。
図1に示す例では、処理A−7の実行中に時刻Tpにおいてエラーが検出された場合、エラー割込みモジュール222は、時刻Tpから時刻(Tp−Tc)までの間に出力された処理A−3、A−4、A−5、A−6を利用する処理B−3、B−4、B−5、B−6を特定する。さらに、エラー割込みモジュール222は、処理B−3、B−4、B−5、B−6をアボートする。処理B−1、B−2はそのまま処理が実行される。
この場合、処理B−2はそのまま実行されるため、エラー検出処理のオーバーヘッドを従来の方法より削減することができる。
図3は、実施例1の処理管理情報230の一例を示す図である。
処理管理情報230は、開始時刻情報300を含む。開始時刻情報300は、FPGAスケジューラ221によって起動される処理の開始時刻を管理する情報である。開始時刻情報300は、ID301及び開始時刻302から構成されるエントリを含む。
ID301は、FPGA240が実行した処理の結果を用いて実行される処理の識別情報である。例えば、ID301には、処理の名称及び処理の回数を組み合わせた識別情報が格納される。開始時刻302は、ID301に対応する処理が開始された時刻を格納する。
図3の開始時刻情報300には、処理A−1、A−2、A−3、A−4、A−5、A−6の処理結果を用いて実行される処理B−1、B−2、B−3、B−4、B−5、B−6の開始時刻が登録される。
図4は、実施例1のDRAM202に格納される処理A−nの結果情報の一例を示す図である。
結果情報400は、ID401及び処理結果402から構成されるエントリを含む。
ID401は、FPGA240が実行する処理の識別情報である。例えば、ID401には、処理の名称及び処理の回数を組み合わせた識別情報が格納される。処理結果402は、ID401に対応する処理の結果である。処理結果が出力されていない処理に対応するエントリの処理結果402には、「Null」が格納される。
図5は、実施例1のコンフィグファイル280の一例を示す図である。図6は、実施例1のコンフィグファイル280に設定するパラメタを入力するためのGUIの一例を示す図である。
実施例1のコンフィグファイル280には、エラー検出処理の所要時間を示すエラー検出時間501を含む。その他の情報は、公知のものであるため説明を省略する。
GUI600は、FPGA Error detect time入力欄601を含む。ユーザは、当該入力欄601にエラー検出処理の所要時間を入力する。その他の入力欄及び操作ボタンは公知のものであるため説明を省略する。
図7は、実施例1のサーバ装置100内の処理の流れを示すシーケンス図である。
図7では、一時的に実行される処理を太線で示している。FPGAドライバ211及びFPGAスケジューラ221は、常時処理を実行しているため太線を用いていない。
FPGAスケジューラ221は、ミドルウェア/アプリケーション220から処理Aの開始要求を受けた場合、FPGAドライバ211を介して処理A−1の実行指示をFPGA240に送信する(ステップS701)。処理A−1の実行指示には、処理A−1の実行を指示するコマンド及び処理に必要なデータにアクセスするためのアドレスが含まれる。このとき、FPGAスケジューラ221は、DRAM202に結果情報400を生成する。
FPGA240は、処理A−1の実行指示を受信した場合、処理A−1を実行するユーザ論理250を起動し、また、当該実行指示に含まれるアドレスに基づいてDRAM202からデータを取得する(ステップS702)。ユーザ論理250は、DRAM202から取得したデータを用いて処理A−1を開始する。また、エラー検出回路270は、CRAM260のエラー検出処理を開始する。
ユーザ論理250は、処理A−1の処理結果をDRAM202に登録し(ステップS703)、また、処理A−1の完了通知をDRAM202に登録する(ステップS704)。
具体的には、ユーザ論理250は、結果情報400のID401が処理A−1の識別情報に一致するエントリを検索し、当該エントリの処理結果402に処理結果を登録する。
FPGAスケジューラ221は、処理A−nの完了通知を検出した場合(ステップS705)、処理B−1の起動する(ステップS706)。本実施例では、処理B−1は、タスクとして起動する。また、FPGAスケジューラ221は、処理B−1の開始時刻をDRAM202の処理管理情報230に登録する(ステップS707)。
処理B−1を実行するCPU201は、DRAM202から処理A−1の処理結果を読み出し(ステップS708)、処理B−1を実行する。
FPGAスケジューラ221は、処理B−1の起動とともに、処理A−2の実行指示をFPGA240に送信する。以下、ステップS701からステップS708までの処理が繰り返し実行される。
FPGAスケジューラ221は、処理A−2の完了通知を検出した場合、処理B−2を起動し(ステップS709)、処理A−3の完了通知を検出した場合、処理B−3を起動する(ステップS710)。なお、説明の簡単のため、処理A−3から処理A−6、処理B3から処理B6の処理は省略している。
エラー検出回路270が、処理A−7の実行中に、CRAM260のエラーを検出した場合、ミドルウェア/アプリケーション220に対してエラー検出信号を発行することによって、エラーを通知する(ステップS711)。
ミドルウェア/アプリケーション220は、エラー検出信号を受信した場合、エラー割込みモジュール222を起動する。
エラー割込みモジュール222は、DRAM202に格納される開始時刻情報300を取得し、また、記憶装置203に格納されるコンフィグファイル280からエラー検出時間Tcを取得する(ステップS712)。
エラー割込みモジュール222は、取得した情報に基づいて、時刻Tpから時刻(Tp−Tc)までの間に出力された処理A−3、A−4、A−5、A−6を利用する処理B−3、B−4、B−5、B−6を特定する。エラー割込みモジュール222は、特定された処理B−3、B−4、B−5、B−6をアボートする(ステップS713)。
図8は、実施例1のFPGAスケジューラ221が実行する処理を説明するフローチャートである。
FPGAスケジューラ221は、ミドルウェア/アプリケーション220から処理Aの開始要求を受けた場合、以下で説明する処理を開始する。
FPGAスケジューラ221は、処理Aの実行回数を表す変数nを初期化する(ステップS801)。
具体的には、FPGAスケジューラ221は、変数nに「1」を設定する。このとき、FPGAスケジューラ221は、結果情報400を生成する。FPGAスケジューラ221は、結果情報400に実行回数分のエントリを追加する。FPGAスケジューラ221は、追加された各エントリのID401に処理A―nの識別情報を設定し、処理結果402に「Null」を設定する。なお、処理A−nの実行回数は予め設定されているものとする。
次に、FPGAスケジューラ221は、FPGA240に処理A−nの実行指示を送信する(ステップS802)。その後、FPGAスケジューラ221は、処理A−nの完了通知を監視する。
FPGAスケジューラ221は、DRAM202に処理A−nの完了通知が登録されたか否かを判定する(ステップS803)。
DRAM202に処理A−nの完了通知が登録されていないと判定された場合、FPGAスケジューラ221は、一定時間経過した後にステップS803に戻り、同様の処理を実行する。
DRAM202に処理A−nの完了通知が登録されたと判定された場合、FPGAスケジューラ221は、処理A−nの処理結果を使用する処理B−nを起動する(ステップS804)。また、FPGAスケジューラ221は、開始時刻情報300に処理B−nの開始時刻を登録する(ステップS805)。
具体的には、FPGAスケジューラ221は、開始時刻情報300にエントリを追加し、追加されたエントリのID301に処理B−nの識別情報を設定し、開始時刻302に処理B−nの開始時刻を設定する。なお、開始時刻302に設定する時刻は、起動指示を送信した時刻でもよいし、処理B−nが起動した時刻でもよい。
FPGAスケジューラ221は、変数nの値が規定回数以上であるか否かを判定する(ステップS806)。
変数nの値が規定回数より小さいと判定された場合、FPGAスケジューラ221は、変数nに1を加算した値を新たな変数nの値に設定し(ステップS807)、ステップS802に戻り、同様の処理を実行する。
変数nの値が規定回数以上であると判定された場合、FPGAスケジューラ221は、処理を終了する。
なお、処理B−nの開始時刻は、処理B−nを実行するCPU201によって書き込まれてもよい。
図9は、実施例1のエラー割込みモジュール222が実行する処理を説明するフローチャートである。
エラー割込みモジュール222は、エラー検出信号を受信したミドルウェア/アプリケーション220によって呼び出された場合、以下で説明する処理を開始する。
エラー割込みモジュール222は、FPGAスケジューラ221をアボートする(ステップS901)。
具体的には、エラー割込みモジュール222は、FPGAスケジューラ221が処理A−nの完了通知の監視状態となったとき、FPGAスケジューラ221の動作を停止する。
次に、エラー割込みモジュール222は、コンフィグファイル280からエラー検出時間Tcを取得する(ステップS902)。また、エラー割込みモジュール222は、現在時刻Tpを取得する。
次に、エラー割込みモジュール222は、アボートする処理B−nを特定する(ステップS903)。具体的には、以下のような処理が実行される。
エラー割込みモジュール222は、DRAM202から開始時刻情報300を取得し、開始時刻情報300に登録されたエントリの中から対象のエントリを一つ選択する。例えば、エラー割込みモジュール222は、上のエントリから順に選択する。
エラー割込みモジュール222は、選択されたエントリの開始時刻が式(1)を満たすか否かを判定する。式(1)を満たす場合、エラー割込みモジュール222は、選択されたエントリのID301に対応する処理B−nをアボートする処理B−nに決定する。
Figure 2018022328
エラー割込みモジュール222は、開始時刻情報300に登録された全てのエントリに対して前述した処理を実行する。以上がステップS903の処理の説明である。
次に、エラー割込みモジュール222は、特定された処理B−nをアボートし(ステップS904)、処理を終了する。
実施例2では、FPGAスケジューラ221が、処理Aの状態を管理し、エラーを含む処理結果を出力する可能性がある処理Aを特定し、特定された処理Aに対応する処理Bをアボートする。
以下、実施例1との差異を中心に実施例2について説明する。
実施例2の計算機システムの構成は実施例1の計算機システムの構成と同一であるため説明を省略する。実施例2のサーバ装置100のハードウェア構成及びソフトウェア構成は実施例1のサーバ装置100のハードウェア構成及びソフトウェア構成と同一であるため説明を省略する。実施例2では、処理管理情報230に含まれる情報が実施例1とは異なる。
図10は、実施例2の処理管理情報230の一例を示す図である。
処理管理情報230は、状態管理情報1000を含む。状態管理情報1000は、FPGA240が実行する処理の状態、すなわち、FPGA240が完了通知を監視する対象の処理の状態を管理する情報である。状態管理情報1000は、ID1001、状態1002、終了時刻1003、及び処理結果1004から構成されるエントリを含む。
ID1001は、監視する処理の識別情報である。例えば、ID1001には、処理の名称及び処理の回数を組み合わせた識別情報が格納される。
状態1002は、処理の状態である。状態1002には、「Er」、「Er_fre」、「End」、「Ex」、及び「Null」のいずれかが格納される。「Er」は、エラーの状態を表す。「Er_fre」は、エラーフリーの状態を表す。「End」は、処理が終了した状態を表す。「Ex」は、処理が実行中であることを表す。「Null」は、処理が実行されていないことを表す。
終了時刻1003は、処理が完了した時刻である。処理結果1004は、処理の処理結果である。なお、処理が完了していない場合、終了時刻1003及び処理結果1004には「Null」が格納される。
実施例2では、状態管理情報1000を用いて処理Aの処理結果も管理されるため、DRAM202には、結果情報400を作成する必要はない。したがって、処理Bを実行するCPU201は、処理を実行する場合に、状態管理情報1000に登録された処理Aの処理結果を取得する。
図11は、実施例2のFPGAスケジューラ221が実行する処理を説明するフローチャートである。
FPGAスケジューラ221は、ミドルウェア/アプリケーション220から処理Aの開始要求を受けた場合、以下で説明する処理を開始する。
ステップS801からステップS803の処理、ステップS805からステップS807の処理は実施例1と同一の処理である。
FPGAスケジューラ221は、ステップS801の処理が実行された後、状態管理情報1000を更新する(ステップS1101)。具体的には、以下のような処理が実行される。
FPGAスケジューラ221は、状態管理情報1000が存在するか否かを判定する。状態管理情報1000が存在しないと判定された場合、FPGAスケジューラ221は、状態管理情報1000を生成し、状態管理情報1000に規定回数分のエントリを追加する。FPGAスケジューラ221は、各エントリのID1001に処理A−nの識別情報を設定し、また、各エントリの状態1002、終了時刻1003、及び処理結果1004に「Null」を設定する。
FPGAスケジューラ221は、状態管理情報1000を生成した後、又は、状態管理情報1000が存在する場合、処理A−nに対応するエントリの状態1002に「Ex」を設定する。以上がステップS1101の処理の説明である。
次に、FPGAスケジューラ221は、ステップS802及びステップS803の処理を実行する。
ステップS803において、完了通知が登録されたと判定された場合、FPGAスケジューラ221は、状態管理情報1000を更新する(ステップS1102)。
具体的には、FPGAスケジューラ221は、処理A−nに対応するエントリの状態1002に「End」を設定し、また、終了時刻1003に現在時刻を登録する。
次に、FPGAスケジューラ221は、ステップS805の処理を実行し、その後、処理A−nのエラーフリー検出タスクを起動する(ステップS1103)。エラーフリー検出タスクが実行する処理の詳細は、図12を用いて説明する。
次に、FPGAスケジューラ221は、ステップS806及びステップS807の処理を実行する。
図12は、実施例2の処理A−nのエラーフリー検出タスクが実行する処理を説明するフローチャートである。
処理A−nのエラーフリー検出タスクは、記憶装置203に格納されるコンフィグファイル280からエラー検出時間Tcを取得する(ステップS1201)。
処理A−nのエラーフリー検出タスクは、経過時間を算出し(ステップS1202)、経過時間がエラー検出時間Tcより大きいか否かを判定する(ステップS1203)。
具体的には、処理A−nのエラーフリー検出タスクは、状態管理情報1000から処理A−nに対応するエントリを検索し、当該エントリの終了時刻1003から終了時刻を取得する。処理A−nのエラーフリー検出タスクは、現在時刻から終了時刻を減算することによって経過時間を算出する。
経過時間がエラー検出時間Tc以下であると判定された場合、処理A−nのエラーフリー検出タスクは、一定時間経過した後、ステップS1202に戻り、同様の処理を実行する。
経過時間がエラー検出時間Tcより大きいと判定された場合、処理A−nのエラーフリー検出タスクは、状態管理情報1000を更新し(ステップS1204)、処理を終了する。
具体的には、処理A−nのエラーフリー検出タスクは、処理A−nに対応するエントリの状態1002に「Er_fre」を設定する。
図13は、実施例2のエラー割込みモジュール222が実行する処理を説明するフローチャートである。
エラー割込みモジュール222は、エラー検出信号を受信したミドルウェア/アプリケーション220によって呼び出された場合、以下で説明する処理を開始する。
ステップS901及びステップS904の処理は、実施例1と同一である。ステップS901の処理が実行された後、エラー割込みモジュール222は、状態管理情報1000を更新する(ステップS1301)。
エラー割込みモジュール222は、状態1002が「Ex」又は「End」であるエントリを特定し、特定されたエントリの状態1002に「Er」を設定する。状態1002が「Ex」又は「End」である処理Aの処理結果はエラーを含む可能性があるためである。
次に、エラー割込みモジュール222は、アボートする処理B−nを特定する(ステップS1302)。具体的には、以下のような処理が実行される。
エラー割込みモジュール222は、状態管理情報1000に登録されたエントリの中から対象のエントリを一つ選択する。例えば、エラー割込みモジュール222は、上のエントリから順に選択する。
エラー割込みモジュール222は、選択されたエントリの状態1002が「Er」であるか否かを判定する。状態1002が「Er」である場合、エラー割込みモジュール222は、選択されたエントリのID1001に対応する処理A−nの処理結果を使用する処理B−nをアボートする処理B−nに決定する。
エラー割込みモジュール222は、状態管理情報1000に登録された全てのエントリに対して前述した処理を実行する。以上がステップS1302の処理の説明である。
次に、エラー割込みモジュール222は、ステップS904の処理を実行し、処理を終了する。
図14は、実施例2のエラーフリー検出タスクによって更新された処理管理情報230の一例を示す図である。
ここでは、DRAM202に図10に示す状態管理情報1000が格納されているものとする。ステップS1203において経過時間がエラー検出時間Tcより大きいと判定された場合、エラーフリー検出タスクが、ID1001が「A−3」、「A−4」、「A−5」、「A−6」である各エントリの状態1002に「Er」を設定する。
実施例1及び実施例2に示すように、処理Aのエラー検出処理の実行中に処理Aの処理結果を使用する処理Bを実行させることによって、サーバ装置100が実行する一連の処理のオーバーヘッドを削減することができる。また、処理Aのエラーが検出された場合、エラー割込みモジュール222が、エラーを含む処理結果を使用する処理Bを特定し、特定された処理Bをアボートすることによって、処理の整合性を保つことができる。また、FPGAを物理的に改変する必要がないためコストを抑えることができる。また、処理Bを改変する必要がないため、ミドルウェア/アプリケーション220の開発コスト等を抑制することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるCPUが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD−RW、CD−R等の記憶媒体に格納し、コンピュータが備えるCPUが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
100 サーバ装置
101 ストレージシステム
201 CPU
202 DRAM
203 記憶装置
204 HBA
205 FPGAボード
210 OS
211 FPGAドライバ
220 ミドルウェア/アプリケーション
221 FPGAスケジューラ
222 エラー割込みモジュール
230 処理管理情報
240 FPGA
241 ROM
242 DRAM
243 PCIeコネクタ
250 ユーザ論理
251 FF(フリップフロップ)
260 CRAM
270 エラー検出回路
280 コンフィグファイル
300 開始時刻情報
400 結果情報
600 GUI
1000 状態管理情報

Claims (12)

  1. FPGAを搭載する計算機における処理制御方法であって、
    前記計算機は、プロセッサ、及び前記プロセッサに接続されるメモリを有し、
    前記FPGAは、処理を実行する論理回路及び前記論理回路のエラー検出処理を実行するエラー検出回路を含み、前記プロセッサと接続し、
    前記FPGAは、第1の処理を複数回実行し、
    前記プロセッサは、前記第1の処理の処理結果を使用する第2の処理を実行し、
    前記処理制御方法は、
    前記プロセッサが、前記FPGAに前記第1の処理の開始を指示する第1のステップと、
    前記FPGAが、前記第1の処理及び前記論理回路のエラー検出処理を並行して実行し、前記第1の処理の処理結果及び前記第1の処理の完了通知を前記メモリに書き込む第2のステップと、
    前記プロセッサが、前記第1の処理の完了通知を検出した場合、前記第2の処理を開始する第3のステップと、
    前記FPGAが、前記論理回路のエラーを検出した場合、前記論理回路のエラーの発生を前記プロセッサに通知する第4のステップと、
    前記プロセッサが、前記論理回路のエラーの発生の通知を受けた場合、複数の前記第2の処理の中から、エラーを含む前記第1の処理の処理結果を使用する可能性がある少なくとも一つの第2の処理を特定する第5のステップと、
    前記プロセッサが、前記特定された少なくとも一つの第2の処理を中断する第6のステップと、を含むことを特徴とする処理制御方法。
  2. 請求項1に記載の処理制御方法であって、
    前記メモリは、前記第2の処理の開始時刻を管理する開始時刻情報を格納し、
    前記第5のステップは、
    前記プロセッサが、前記開始時刻情報を参照するステップと、
    前記プロセッサが、前記エラーの発生が検出された時刻から前記エラー検出処理の所要時間だけ遡った時間範囲に開始された第2の処理を、前記エラーを含む第1の処理の処理結果を使用する可能性がある第2の処理として特定するステップと、を含むことを特徴とする処理制御方法。
  3. 請求項2に記載の処理制御方法であって、
    前記FPGAが、前記第1の処理の完了後に、前記第2の処理の開始時刻を前記開始時刻情報に書き込み、又は、前記プロセッサが、前記第2の処理の開始時に、前記第2の処理の開始時刻を前記開始時刻情報に書き込むステップを含むことを特徴とする処理制御方法。
  4. 請求項1に記載の処理制御方法であって、
    前記メモリは、前記第1の処理の状態を管理する状態管理情報を格納し、
    前記状態管理情報は、前記第1の処理の識別情報、及び前記第1の処理の状態を示す状態情報から構成されるエントリを一つ以上含み、
    前記第5のステップは、
    前記プロセッサが、前記状態管理情報を参照して、エラー状態を示す前記状態情報が設定された前記第1の処理を特定するステップと、
    前記プロセッサが、前記特定された第1の処理の処理結果を使用する前記第2の処理を、前記エラーを含む第1の処理の処理結果を使用する可能性がある第2の処理として特定するステップと、を含むことを特徴とする処理制御方法。
  5. 請求項4に記載の処理制御方法であって、
    前記第5のステップは、
    前記プロセッサが、前記エラー状態を示す状態情報が設定された前記第1の処理を特定する前に、前記状態管理情報を参照して、実行済みであることを示す前記状態情報又は実行中であることを示す前記状態情報が設定されたエントリに、前記エラー状態を示す状態情報を設定するステップを含むことを特徴とする処理制御方法。
  6. 請求項5に記載の処理制御方法であって、
    前記第3のステップは、
    前記プロセッサが、前記状態管理情報を参照して、完了した前記第1の処理に対応するエントリに前記実行済みであることを示す状態情報を設定するステップと、
    前記プロセッサが、前記第1の処理の状態を監視するエラーフリー検出タスクを実行するステップを含み、
    前記エラーフリー検出タスクを実行するプロセッサが、前記第1の処理が完了してから現在時刻までの経過時間を算出するステップと、
    前記エラーフリー検出タスクを実行するプロセッサが、前記経過時間が前記エラー検出処理の所要時間より大きいか否かを判定するステップと、
    前記経過時間が前記エラー検出処理の所要時間より大きいと判定された場合、前記エラーフリー検出タスクを実行するプロセッサが、前記エラーフリー検出タスクに対応する前記第1の処理のエントリに、正常な状態あることを示す前記状態情報を設定するステップと、を含むことを特徴とする処理制御方法。
  7. FPGAを搭載する計算機であって、
    前記計算機は、プロセッサ、及び前記プロセッサに接続されるメモリを有し、
    前記FPGAは、処理を実行する論理回路及び前記論理回路のエラー検出処理を実行するエラー検出回路を含み、前記プロセッサと接続し、
    前記FPGAは、第1の処理を複数回実行し、
    前記プロセッサは、前記第1の処理の処理結果を使用する第2の処理を実行し、
    前記計算機は、
    前記第1の処理の実行契機及び前記第2の処理の実行契機を管理するスケジューラと、
    前記論理回路のエラーの発生時に、複数の前記第2の処理の中から、エラーを含む前記第1の処理の処理結果を使用する少なくとも一つの処理を特定し、前記特定された少なくとも一つの第2の処理を中断するエラー割込みモジュールと、を有し、
    前記スケジューラは、前記第1の処理の完了通知を検出した場合、前記第2の処理を開始することを特徴とする計算機。
  8. 請求項7に記載の計算機であって、
    前記メモリは、前記第2の処理の開始時刻を管理する開始時刻情報を格納し、
    前記エラー割込みモジュールは、前記開始時刻情報を参照して、前記エラーの発生が検出された時刻から前記エラー検出処理の所要時間だけ遡った時間範囲に開始された第2の処理を、前記エラーを含む第1の処理の処理結果を使用する可能性がある第2の処理として特定することを特徴とする計算機。
  9. 請求項8に記載の計算機であって、
    前記FPGAが、前記第1の処理の完了後に、前記第2の処理の開始時刻を前記開始時刻情報に書き込み、又は、前記プロセッサが、前記第2の処理の開始時に、前記第2の処理の開始時刻を前記開始時刻情報に書き込むことを特徴とする計算機。
  10. 請求項7に記載の計算機であって、
    前記メモリは、前記第1の処理の状態を管理する状態管理情報を格納し、
    前記状態管理情報は、前記第1の処理の識別情報、及び前記第1の処理の状態を示す状態情報から構成されるエントリを一つ以上含み、
    前記エラー割込みモジュールは、
    前記状態管理情報を参照して、エラー状態を示す前記状態情報が設定された前記第1の処理を特定し、
    前記特定された第1の処理の処理結果を使用する前記第2の処理を、前記エラーを含む第1の処理の処理結果を使用する可能性がある第2の処理として特定することを特徴とする計算機。
  11. 請求項10に記載の計算機であって、
    前記エラー割込みモジュールは、前記エラー状態を示す状態情報が設定された前記第1の処理を特定する前に、前記状態管理情報を参照して、実行済みであることを示す前記状態情報又は実行中であることを示す前記状態情報が設定されたエントリに、前記エラー状態を示す状態情報を設定することを含むことを特徴とする計算機。
  12. 請求項11に記載の計算機であって、
    前記スケジューラは、
    前記状態管理情報を参照して、完了した前記第1の処理に対応するエントリに前記実行済みであることを示す状態情報を設定し、
    前記第2の処理の開始する場合に、前記第1の処理の状態を監視するエラーフリー検出タスクを実行し、
    前記エラーフリー検出タスクは、
    前記第1の処理が完了してから現在時刻までの経過時間を算出し、
    前記経過時間が前記エラー検出処理の所要時間より大きいか否かを判定し、
    前記経過時間が前記エラー検出処理の所要時間より大きいと判定された場合、前記エラーフリー検出タスクに対応する前記第1の処理のエントリに、正常な状態あることを示す前記状態情報を設定することを特徴とする計算機。
JP2016152829A 2016-08-03 2016-08-03 処理制御方法及び計算機 Pending JP2018022328A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016152829A JP2018022328A (ja) 2016-08-03 2016-08-03 処理制御方法及び計算機

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016152829A JP2018022328A (ja) 2016-08-03 2016-08-03 処理制御方法及び計算機

Publications (1)

Publication Number Publication Date
JP2018022328A true JP2018022328A (ja) 2018-02-08

Family

ID=61165716

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016152829A Pending JP2018022328A (ja) 2016-08-03 2016-08-03 処理制御方法及び計算機

Country Status (1)

Country Link
JP (1) JP2018022328A (ja)

Similar Documents

Publication Publication Date Title
US11144323B2 (en) Independent mapping of threads
US9507585B2 (en) Firmware update apparatus and storage control apparatus
US8572614B2 (en) Processing workloads using a processor hierarchy system
CN110083494B (zh) 在多核心环境中管理硬件错误的方法和装置
US20170024293A1 (en) Automatic serial starting of resource groups on failover
US10459773B2 (en) PLD management method and PLD management system
US20130212572A1 (en) Implementing Updates To Source Code Executing On A Plurality Of Compute Nodes
US10956167B2 (en) Mechanism for instruction fusion using tags
CN108292244B (zh) 数据处理装置、数据处理方法及计算机可读取的记录介质
US20200042321A1 (en) Low power back-to-back wake up and issue for paired issue queue in a microprocessor
US20160139955A1 (en) Quiesce handling in multithreaded environments
US9665424B2 (en) Recovery improvement for quiesced systems
US10725839B2 (en) Helping a hardware accelerator using software
CN103180829A (zh) 中断信号接收装置及计算机装置
US20140019737A1 (en) Branch Prediction For Indirect Jumps
US9442790B2 (en) Computer and dumping control method
US10599530B2 (en) Method and apparatus for recovering in-memory data processing system
US10635444B2 (en) Shared compare lanes for dependency wake up in a pair-based issue queue
JP2018022328A (ja) 処理制御方法及び計算機
WO2021037124A1 (zh) 一种任务处理的方法以及任务处理装置
US9836315B1 (en) De-referenced package execution
US10503722B2 (en) Log management apparatus and log management method
JP2010231296A (ja) 並列計算システム
US9513981B2 (en) Communication software stack optimization using distributed error checking
JPWO2018173300A1 (ja) I/o制御方法およびi/o制御システム