(57)【要約】      （修正有）【課題】PLD内に構成する複数の論理回路（ユーザ回路）のうち異常動作している回路を検出することができる情報処理装置を提供する。【解決手段】異なる論理回路を再構成可能な再構成領域を有し、再構成領域内に構成された複数の論理回路が動作するプログラマブルロジックデバイス（以下PLD）において、複数の論理回路に対して順番に動作制限を行い、再構成領域内の複数の論理回路の状態値または状態値の変化速度が、動作制限を行った論理回路の回路規模に応じた状態値の第１の閾値以下または状態値の変化速度の第２の閾値以上になる場合に、動作制限を行った論理回路を異常動作と判定する。【選択図】図１１
2018028744.tif 000002
【特許請求の範囲】
【請求項１】
異なる論理回路を再構成可能な再構成領域を有し、前記再構成領域内に構成された複数の論理回路が動作するプログラマブルロジックデバイス（以下ＰＬＤと称する）と、
前記複数の論理回路に対して順番に動作制限を行い、前記再構成領域内の複数の論理回路の状態値または状態値の変化速度が、前記動作制限を行った論理回路の回路規模に応じた前記状態値の第１の閾値以下または前記状態値の変化速度の第２の閾値以上になる場合に、前記動作制限を行った論理回路を異常動作と判定する制御回路とを有する、情報処理装置。
【請求項２】
前記制御回路は、さらに、前記再構成領域内の複数の論理回路の状態値または状態値の変化速度が、第３の閾値以上または第４の閾値以上になるのを検出した場合、前記動作制限と異常動作判定を行う、請求項１に記載の情報処理装置。
【請求項３】
前記制御回路は、さらに、前記異常動作と判定した論理回路の動作を停止する、請求項１に記載の情報処理装置。
【請求項４】
前記制御回路は、さらに、前記異常動作と判定した論理回路の動作を、前記状態値が許容値以内になるよう所定の動作制限を行う、請求項１に記載の情報処理装置。
【請求項５】
前記状態値は、消費電力、温度、帯域のうちいずれか一つまたは複数である、請求項１に記載の情報処理装置。
【請求項６】
前記動作制限は、前記論理回路の動作周波数を下げること、前記論理回路のデータ通信速度を低下させることのうちいずれか一つまたは両方である、請求項１に記載の情報処理装置。
【請求項７】
異なる論理回路を再構成可能な再構成領域を有し、前記再構成領域内に構成された複数の論理回路が動作するプログラマブルロジックデバイス（以下ＰＬＤと称する）と、制御回路とを有する情報処理装置の制御方法であって、
前記制御回路が、前記複数の論理回路に対して順番に動作制限を行い、前記再構成領域内の複数の論理回路の状態値または状態値の変化速度が、前記動作制限を行った論理回路の回路規模に応じた前記状態値の第１の閾値以下または前記状態値の変化速度の第２の閾値以上になる場合に、前記動作制限を行った論理回路を異常動作と判定する工程を有する、情報処理装置の制御方法。
【請求項８】
異なる論理回路を再構成可能な再構成領域を有し、前記再構成領域内に構成された複数の論理回路が動作するプログラマブルロジックデバイス（以下ＰＬＤと称する）を管理するコンピュータ読み取り可能なＰＬＤ管理プログラムであって、
前記複数の論理回路に対して順番に動作制限を行い、
前記再構成領域内の複数の論理回路の状態値または状態値の変化速度が、前記動作制限を行った論理回路の回路規模に応じた前記状態値の第１の閾値以下または前記状態値の変化速度の第２の閾値以上になる場合に、前記動作制限を行った論理回路を異常動作と判定する、
処理をコンピュータに実行させるＰＬＤ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，情報処理装置及びＰＬＤ管理プログラムに関する。
【背景技術】
【０００２】
プログラマブルロジックデバイス（Programmable Logic Device, PLD）は、予め複数の論理回路要素、メモリ回路要素、配線、スイッチ等が形成された集積回路装置に、所定の処理を実行可能な回路を構成するための構成データが設定または書込まれると、所定の処理を実行可能な回路を再構成する。PLDに接続されたプロセッサなどの制御回路は、所定の処理をハードウエアの専用回路で実行するとき、専用回路を構成するための構成データをPLDに設定または書込んでPLD内に専用回路を構成し、その専用回路に所定の処理を実行させる。このようなPLDは、例えばFPGA（Field Programmable Gate Array）など、構成データを書き換えることで内部の回路を様々な論理回路に再構成可能なLSIである。
【０００３】
制御回路は、あるタスクの処理を実行するとき、そのタスクの処理を実行する論理回路をPLD内に構成し、そのタスクの処理を実行する。処理終了後、異なるタスクの処理を実行するとき、PLD内にそのタスクの処理を実行する異なる論理回路を再構成する。このように、PLDは、複数のタスクの処理をそれぞれ実行する複数の論理回路を再構成できるので、実行可能な処理についてソフトウエアのような柔軟性を有し、且つ複数のタスクの処理を専用の論理回路で高速に実行できる。
【０００４】
PLDの大規模化に伴い、PLD内に複数の論理回路を構成し、複数の論理回路を並行して動作させることができるようになってきた。また、PLD内のある論理回路を動作させながら、一部の論理回路を再構成して新たな論理回路の動作を開始するなど、複数の論理回路を非同期で動的に再構成し、同時に動作させることが可能になる。
【０００５】
PLDの故障等については以下の特許文献に開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１２／１２７６１２号
【特許文献２】特開平１０−２５４５１２号公報
【特許文献３】特開２０１０−５５２９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一方で、クラウドコンピューティングサービス（以下クラウドサービスと称する。）において、サーバセンタ内にPLDであるFPGAを搭載したサーバを配備し、複数のユーザにサーバやストレージのハードウエア群をネットワークを介して利用させることが今後増えていくことが予想される。その場合、複数のユーザのタスクを処理する複数の論理回路が、共通のFPGA内に構成され、同時に動作する。
【０００８】
このような場合、クラウドサービスの運用者は、FPGA内にどのようなユーザ回路が構成されているか及びそれらの回路がどのように動作しているかの詳細を把握することはできない。同様に、クラウドサービスの利用者も、他のユーザ回路の存在を認識することはできない。
【０００９】
しかしながら、内部に複数のユーザ回路が構成されているFPGAにおいて、あるユーザ回路が何らかの理由、たとえば悪意またはソフトウエアのバグなどにより、異常動作をすると、他のユーザ回路の動作に悪影響を与えることが予想される。たとえば、あるユーザ回路の異常動作により消費電力が急増し、そのユーザ回路内及びその周辺の温度が急上昇した結果、周囲に構成されている別のユーザ回路でデータ化けや誤動作による暴走が発生する。または、あるユーザ回路の異常動作により外部インターフェースの帯域を大量に使用した結果、周囲に構成されている別のユーザ回路が利用できる帯域が狭くなり、データ落ちによる動作遅延や動画のコマ落ちなどが発生する。
【００１０】
そこで，本発明の目的は，PLD内に構成する複数の論理回路（ユーザ回路）のうち異常動作している回路を検出することができる情報処理装置及びPLD管理プログラムを提供することにある。
【課題を解決するための手段】
【００１１】
本開示の第１の側面は，異なる論理回路を再構成可能な再構成領域を有し、前記再構成領域内に構成された複数の論理回路が動作するプログラマブルロジックデバイス（以下PLDと称する）と、前記複数の論理回路に対して順番に動作制限を行い、前記再構成領域内の複数の論理回路の状態値または状態値の変化速度が、前記動作制限を行った論理回路の回路規模に応じた前記状態値の第１の閾値以下または前記状態値の変化速度の第２の閾値以上になる場合に、前記動作制限を行った論理回路を異常動作と判定する制御回路とを有する、情報処理装置である。
【発明の効果】
【００１２】
第１の側面によれば，PLD内に構成する複数の論理回路（ユーザ回路）のうち異常動作している回路を検出することができる。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態における情報処理装置の構成例を示す図である。
【図２】FPGAの構成例を示す図である。
【図３】FPGAの再構成領域の一例を示す図である。
【図４】FPGAの再構成領域内の運用回路OCと機能ブロック領域FBの構成例を示す図である。
【図５】本実施の形態におけるPLD管理プログラムの第１の処理を示すフローチャート図である。
【図６】ユーザ回路に異常動作が発生したときの他のユーザ回路への影響を示す図である。
【図７】本実施の形態におけるPLDの管理プログラムによるPLDの異常状態検出時の不良回路の特定処理を示すフローチャート図である。
【図８】第１の実施の形態におけるPLDであるFPGAの構成と、CPUが実行するPLD管理プログラムの処理を示す図である。
【図９】第３の実施の形態におけるPLDであるFPGAの構成と、CPUが実行するPLD管理プログラムの処理を示す図である。
【図１０】ユーザ回路への別の動作制限例を示す図である。
【図１１】第４の実施の形態におけるPLDの管理プログラム（２）によるPLDの異常状態検出時の不良回路の特定処理を示すフローチャート図である。
【図１２】時間経過に対応して変化するFPGAの消費電力（Power）と異常状態の原因である特定のユーザ回路の動作周波数ｆの具体例を示す図である。
【図１３】異常状態の原因となったユーザ回路の異常状態での動作周波数と消費電力の関係を示す図である。
【発明を実施するための形態】
【００１４】
図１は、本実施の形態における情報処理装置の構成例を示す図である。情報処理装置であるサーバ１０は、OSやアプリケーションやミドルウエアを実行するCPU(Central Processing Unit)１１、DRAMなどのメインメモリ１２、マウス、キーボード、表示パネルなどのI/O、メディアドライバM_DRVなどのメディアインタフェース１４、ネットワークNETに接続されるNIC（Network Interface Card）１５、そして、OS、アプリケーションプログラムAPLなどを記憶するHDD（Hard Disk Drive）やSSD（Solid State Drive）などの補助記憶装置１６などがバスBUSを介して接続される。
【００１５】
さらに、サーバ１０は、任意の論理回路を再構成可能なPLD(Programmable Logic Drive)１５を有する。PLDは例えばFPGAなどである。このPLD１５に関して、たとえば、CPU１１が実行するOSのタスク管理プログラムが論理回路により処理可能なタスクを検出した場合、CPUがその論理回路を構成するための構成データをPLD内に書き込んで（または設定して）論理回路を構成し、その論理回路を実行する。
【００１６】
補助記憶装置１６には、PLDを管理するPLD管理プログラムや、論理回路を構成する構成データCDATAが記憶される。
【００１７】
PLDは、構成データを変更することで様々な論理回路を構成することができるので、サーバ１０が製造された後でも、構成データを変更することで、様々なタスクの処理をハードウエア回路で高速に処理することができる。
【００１８】
クラウドサービスにおいて、クラウドサービス運用者は、図１に示したようなサーバ１０をサーバセンタに配備し、ネットワークNETを経由して、サーバ１０を含むハードウエア資源をサービスとしてクラウドサービスのユーザに提供する。そして、例えば、クラウドサービスのユーザが、CPUの使用クロック数、メインメモリのメモリ容量、ネットワークの使用帯域、補助記憶装置の容量などを設定して、サーバセンタ内のサーバに、単数または複数の仮想サーバ（図示せず）を構成し、ユーザのサービスシステムを構築する。
【００１９】
このようなクラウドサービスでは、複数のユーザが、サーバ１０にそれぞれの仮想サーバを配備し、複数の仮想サーバがそれぞれのアプリケーションプログラムを実行する。したがって、各ユーザのアプリケーションプログラムの実行中にタスク切り替えが発生し、新たなタスクがPLDに構成可能な論理回路で処理可能な場合、CPUは、新たなタスクに対応する論理回路の構成データCDATAをPLDに書き込み、論理回路を構成する。その結果、PLDには、異なるユーザそれぞれの論理回路（ユーザ回路）が非同期で構成され、それらの論理回路が同時に動作することがある。
【００２０】
図２は、FPGAの構成例を示す図である。図２のFPGA１５は、サーバのバスBUSとのインターフェースを行うバスインターフェース回路BUS_IFと、構成データ書込制御回路１５１と、構成データが書き込まれる構成データメモリ（CRAM）１５２と、書き込まれた構成データにより種々の論理回路が再構成される再構成領域R_REGとを有する。
【００２１】
再構成領域R_REGには、図示しないが、複数の論理回路要素、メモリ回路要素、配線、スイッチ等が予め形成される。また、再構成領域R_REGは、論理的にまたは物理的に区分された複数の機能ブロック領域FBに区分される。そして、再構成される論理回路は、各機能ブロック領域FBに収容できる回路ブロックを配置単位として、各機能ブロック領域内に構成される。したがって、例えば、構成データメモリCRAMは、複数の機能ブロック領域FBに対応して複数の記憶領域に区分され、各記憶領域に構成データCDATAが書き込まれると、その記憶領域に対応する機能ブロック領域FBに論理回路が構成される。
【００２２】
さらに、あるタスクを処理する論理回路（ユーザ回路）が複数の機能ブロック領域に分割して構成される場合、複数の機能ブロック領域に対応する記憶領域に論理回路を構成するための構成データがそれぞれ書き込まれ、それにより各機能ブロック領域に構成される複数の回路により前述のタスクの処理を実行する論理回路（ユーザ回路）が構成される。上記の構成された論理回路には、たとえば、バスインターフェースBUS_IFを介して、CPUから入力データが入力され、入力データの処理結果がCPUに出力される。
【００２３】
図３は、FPGAの再構成領域の一例を示す図である。図２に示したとおり、再構成領域R_REGは、マトリクス状に配置された複数の機能ブロック領域FBに区分される。また、再構成領域R_REGは、複数の機能ブロック領域FB内に構成される回路間のデータ転送や、図２のバスインターフェースBUS_IFと、機能ブロック領域FB内に構成される回路との間のデータ転送のための運用回路OCを有する。
【００２４】
図３の例では、複数の機能ブロック領域FBのうち、左側の３×３の機能ブロック領域FBに構成された回路によりユーザAの回路UC_Aが構成され、右側の２×４の機能ブロックFBに構成された回路によりユーザBの回路UC_Bが構成される。また、回路が構成されていない８個の機能ブロック領域FBが無色で示されている。
【００２５】
図４は、FPGAの再構成領域内の運用回路OCと機能ブロック領域FBの構成例を示す図である。図３に示したとおり、運用回路OCはマトリクス状に配置された機能ブロック領域FBの周囲に格子状に配置されている。機能ブロック領域FBの例えば右下領域に、機能ブロック領域FB内に構成される論理回路のネットワークインターフェース回路N_IFと、ルータRTとが配置され、ルータRT間をつなぐ領域に固定配線領域FWが配置される。
【００２６】
ネットワークインターフェース回路N_IFは、例えば機能ブロック領域内の回路が出力するパケットの信号を所定の論理に基づいて出力し、また、機能ブロック領域内の回路が入力するパケットの信号を所定の論理に基づいて入力する。また、ルータRTは、例えば固定配線領域FW内の固定配線とネットワークインターフェース回路N_IFの入出力端子との間に設けられた複数のスイッチを有する。この複数のスイッチは、構成データにより導通または非導通に構成される。
【００２７】
そして、ある機能ブロック領域FB内に構成されたユーザ回路は、同じユーザ回路を構成する他の機能ブロック領域内に構成された回路と、ネットワークインターフェース回路N_IFとルータRTとを介してデータの送受信を行う。さらに、ある機能ブロック領域FB内に構成されたユーザ回路は、CPUやサーバの外部メモリ等との間で、ネットワークインターフェース回路N_IFとルータRTとを介してデータの送受信を行う。
【００２８】
図５は、本実施の形態におけるPLD管理プログラムの第１の処理を示すフローチャート図である。図１に示した補助記憶装置１６に記憶されているPLD管理プログラムは、一種のミドルウエアであり、メインメモリ１２に展開されCPUにより実行される。図５の例では、一例として、CPUが実行するOSのタスク管理モジュールがタスクの切り替えを検出すると、必要に応じてPLD内に新たなタスクを処理する論理回路を構成するものとする。但し、別のイベントに応じて、CPUがPLD内に論理回路を構成するようにしてもよい。また、タスクの一部をPLD内の論理回路が処理するようにしても良い。
【００２９】
例えば、CPUがメインメモリ１２に展開されたOSのタスク管理モジュールを実行してタスクの切り替えを検出し、新たなタスクがPLDに構成する論理回路で処理可能な場合、PLD管理プログラムは、OSからタスク切り替えを通知される（S1）。
【００３０】
CPUはPLD管理モジュールを実行して、新タスクを実行する論理回路をPLD内に構成することが必要か否か判定する（S2）。つまり、PLD内に既に新タスクの論理回路が構成済みであり動作停止中であれば、新たに論理回路をPLD内に構成する必要はない。しかし、PLD内に新タスクの論理回路が構成されていない場合や、論理回路が構成済みでも動作中の場合、新たに論理回路をPLD内に構成する必要がある。
【００３１】
新たに論理回路をPLD内に構成する必要がある場合（S2のYES）、CPUはPLD管理モジュールを実行して、PLD内に構成済みの論理回路のいずれかを、新タスクの論理回路に置換することが必要か否か判定する（S3）。つまり、PLD内の機能ブロック領域FBには、ユーザ回路がそれぞれ構成される。したがって、複数の機能ブロック領域FB全てに論理回路が既に構成済みの場合、新タスクの論理回路を構成するためには、構成済みの論理回路のいずれかを新論理回路に置き換えることが必要になる。
【００３２】
そこで、置換が必要な場合（S3のYES）、CPUはPLD管理モジュールを実行して、置換対象の論理回路（旧論理回路）を構成する機能ブロック領域を選択し、置換対象の旧論理回路内の状態データをメインメモリ１２に退避する（S4）。PLD内に十分な空き機能ブロック領域が存在し論理回路の置換が必要でない場合（S3のNO）、旧論理回路の状態データを退避する必要はない。
【００３３】
そして、CPUは、構成データメモリCRAM内の新たな論理回路を構成する機能ブロック領域に対応する領域に、新タスクの論理回路の構成データを書込み、新タスクの新論理回路を構成する（S5）。このとき、この新論理回路が以前動作中に置換され今回その動作を再開する場合、以前動作停止した時に退避した状態データを新論理回路内に復元する。動作再開でない場合、新論理回路には構成データにより初期値が設定される。
【００３４】
新論理回路の動作再開準備または新たな動作開始準備が整った後、CPUは新論理回路の動作を開始する（S6）。具体的には、新論理回路内の状態制御回路（図示せず）に動作開始を指示する。タスク切り替えが検出されたときに、新タスクの論理回路が既にPLD内に構成済みで且つ動作停止中だった場合も（S2のNO）、CPUは新論理回路の動作を開始する（S6）。
【００３５】
上記の工程S1〜S6が繰り返されると、PLD内に非同期で構成された複数の論理回路が非同期で並行して動作することが起こりうる。
【００３６】
図６は、ユーザ回路に異常動作が発生したときの他のユーザ回路への影響を示す図である。図６のFPGAの再構成領域R_REG内には、図３と同様に、５行５列の機能ブロック領域FBと、それらの間に設けられた運用回路OCとが配置され、２つのユーザ回路UC_A、UC_Bがそれぞれ複数の機能ブロック領域FB内に構成されている。
【００３７】
そして、ユーザ回路UC_Aに属する３行目３列目の機能ブロック領域内に構成された回路に異常動作１００が発生すると、その異常動作に起因して異常動作発生領域の周りの領域１１０で動作不良が発生する場合がある。異常動作には、（１）ユーザ回路UC_A内の一部の回路、例えばフリップフロップが、毎サイクルスイッチするような非常に高い動作率で動作し、それに伴い消費電力が急増して異常に高い温度になり、他のユーザ回路UC_Bに熱暴走が発生する、（２）メモリ制御回路に要求するデータ転送要求のデータ転送サイズがプログラムのバグなどにより非常に大きな値となった結果、大量のデータ転送が発生し、FPGAチップの外部とのI/O回路で多くの帯域がユーザ回路UC_Aにより長期間占有され、他のユーザ回路UC_Bの正常動作を妨げる、などが考えられる。
【００３８】
上記の異常動作（１）の場合、FPGAチップ内の一部の領域の温度が高くなり、回路内の抵抗値が高くなり、高い周波数で動作できずデータ化けが発生し、算術演算の誤りなどが発生することが予想される。このような異常動作は、例えば、チップ温度やチップ消費電力などの状態値の測定により検出可能である。但し、機能ブロックFBのような狭い領域での状態値の測定は困難である。
【００３９】
また、異常動作（２）の場合、同じFPGAチップ内の他の回路が使用できる帯域が狭くなり、例えばデータ転送待ちによる遅延が多発して、動画のコマ落ちなどを招くことが予想される。このような異常動作は、FPGAチップ内のチップ外部とのI/O回路等で検出することができる。また、異常動作は、例えば、運用回路OCである各機能ブロックに設けられるネットワークIFやルータなどの共通回路に帯域を測定する測定回路を埋め込むことで、各機能ブロックのデータ転送量を測定することは可能である。しかし、全ての機能ブロックに測定回路を設けるのは現実的ではなく、また、正常動作において大量のデータ転送を必要とするアプリケーションプログラムが存在するので、ユーザ回路の詳細な動作がわからないと、どの回路に異常動作が起きているかを特定するのは困難である。
【００４０】
図６に示した例では、ユーザ回路UC_Aの一部の回路の異常動作１００により、その周辺領域１１０でも動作不良が発生し、ユーザ回路UC_Bで動作不良が発生する。そのため、どのユーザ回路で異常動作が発生しているかを検知し、異常動作が発生しているユーザ回路の動作を停止するまたは動作に制限をかけることが必要になる。
【００４１】
［本実施の形態におけるPLDの管理］
図７は、本実施の形態におけるPLDの管理プログラムによるPLDの異常状態検出時の不良回路の特定処理を示すフローチャート図である。フローチャートの管理プログラムの処理の前提として、PLD内には、PLDの状態（消費電力、温度、使用帯域等）を測定する手段（回路やセンサ等）が設けられ、さらに、PLD内の各ユーザ回路に対して動作制限（動作周波数の制限や通信の制限等）をかけることが可能であるものとする。
【００４２】
CPUは、PLDの管理プログラムを実行して、以下の処理を行う。まず、CPUは、PLDの状態の測定結果を取得し（S10）、その状態値が閾値以上に上昇した、または状態値の変化速度が閾値以上になったかをチェックして異常状態になったか否かを判定する（S11）。状態値は、前述のとおりPLD内の再構成領域内やPLDチップの消費電力、PLDチップの温度、全ユーザ回路から外部のメモリへの単位時間当たりのアクセス回数（帯域）などである。消費電力値の場合は消費電力測定回路により検出可能である。PLDチップの温度値の場合は、温度センサ又はチップ内の温度測定回路などにより検出可能である。帯域の場合は、メモリアクセス回路などの外部へのI/O回路でのデータ転送待ちリクエスト数をカウントすることで一部の回路が帯域を占有していることを検出することが可能である。
【００４３】
データ転送待ちリクエスト数で検出するためには、前提として、全てのユーザ回路の想定される使用帯域の合計が、使用可能な最大帯域を超えないように、同時に実行するユーザ回路を決定しておくことが必要である。その場合、データ転送待ちリクエスト数が急増すると、いずれかのユーザ回路で想定以上の帯域を使用していることが検出される。
【００４４】
状態値が異常状態を示すことが検出されると（S11のYES）、CPUは、動作制限をかけるユーザ回路を選択する（S12）。この動作制限をかけるユーザ回路の選択処理S12では、PLD内で動作している複数のユーザ回路を所定の順番で選択する。所定の順番とは、例えばユーザ回路の識別番号順でもよいし、後述するように優先度に基づく順番でもよい。同時に、選択が解除されたユーザ回路の動作制限を解除する（S13）。最初の段階で未だ動作制限をかけるユーザ回路が選択されていない間は、工程S13はスキップされる。
【００４５】
そして、CPUは、選択したユーザ回路に動作制限をかける（S14）。動作制限の例は、選択したユーザ回路の動作周波数を所定の周波数以下に低下すること、ユーザ回路間の調停部に選択したユーザ回路に対して通信制御をかけること、選択したユーザ回路内のルータやネットワークI/Fなどの共通回路に通信制限をかけることなどである。
【００４６】
選択したユーザ回路に動作制限をかけた状態で、CPUは、PLDの状態値の測定結果を再度取得し（S15）、状態値の異常状態が解消されたか否かを判定する（S16）。この判定は、例えば、状態値が動作制限をかけたユーザ回路の規模に対応する状態値の閾値まで低下したか否かの判定、動作制限に伴う状態値の変化速度が回路規模に対応する閾値以上になったか否かの判定などにより行われる。
【００４７】
異常状態が解消しなかった場合（S16のNO）、CPUは、次の動作制限対象のユーザ回路を選択し（S12）、選択解除されたユーザ回路の動作制限を解除し（S13）、選択されたユーザ回路の動作制限をかけて（S14）、状態値の変化をチェックする（S15）。そして、異常状態が解消されるほど状態値の変化（異常状態を解消するような変化）が検出されるまで（S16のYES）、上記の処理S12-S15を繰り返す。
【００４８】
そして、ある回路に動作制限をかけた状態で異常状態が解消されると（S16のYES）、CPUは、その時に動作制限をかけていたユーザ回路が、異常状態の原因である異常動作状態の回路と特定し、特定されたユーザ回路に動作制限をかけて、他のユーザ回路の動作を継続させる（S17）。異常状態の原因と特定されたユーザ回路への動作制限は、（１）動作の停止、（２）動作周波数の低減、（３）共通回路への通信制限などである。
【００４９】
ユーザ間で他のユーザ回路の存在や構成を知らされていない場合や、クラウドサービス運用者が各ユーザのユーザ回路の構成を知らされていない場合でも、上記のPLD管理プログラムの処理により、異常状態の原因となるユーザ回路を特定することができる。そして、その特定したユーザ回路を停止するかもしくは所定の動作制限を課すことにより、異常状態による異常動作の発生を抑制することができる。しかも、同じPLD内に構成されている他のユーザ回路の動作を一時的に動作制限すればよく動作を停止する必要はない。
【００５０】
次に、PLDの状態値、それに対応する動作制限の例にしたがっていくつかの実施の形態について具体的に説明する。
【００５１】
［第１の実施の形態］
図８は、第１の実施の形態におけるPLDであるFPGAの構成と、CPUが実行するPLD管理プログラムの処理を示す図である。まず、FPGA１５には、３つのユーザ回路UC_1,UC_2,UC_3が構成され並行して動作中である。そして、FPGAは、上記３つのユーザ回路が構成されている再構成領域の温度またはFPGAチップの温度を測定する状態測定器１５５を有する。さらに、FPGAには、システムクロックE_CLKから内部クロックCLK0を生成するPLL回路と、内部クロックCLK0を分周して動作クロックCLK1,CLK2,CLK3を生成し３つのユーザ回路にそれぞれ供給する３つの分周器L1,L2,L3を有する。これらの分周器には、CPUから分周比d1,d2,d3がそれぞれ設定される。つまり、分周比を高くすることで、ユーザ回路に供給される動作クロックCLK1,CLK2,CLK3の周波数を低くして各ユーザ回路に動作制限をかけることができる。つまり、分周器L1,L2,L3がユーザ回路に動作制限をかける動作制限回路ともいえる。
【００５２】
CPU１１は、図７で説明したPLD管理プログラム（２）を実行して、FPGAの状態判定処理S20と、動作制限対象回路の決定処理S21を行う。
【００５３】
次に、状態値が温度、動作制限が動作周波数の低減の例における動作を説明する。第1の実施の形態における異常状態は、FPGA内の温度が異常に上昇する例である。例えば、FPGA内のあるユーザ回路の全てまたは大部分のフリップフロップが毎クロックサイクルでスイッチするような異常に高い動作率で動作し、それによりFPGA内の温度が異常な高温になり状態測定器１５５がそのような異常状態を検出する。
【００５４】
そこで、CPUがPLD管理プログラム（２）を実行して、状態判定処理S20で状態測定値によるFPGA全体の温度の異常な上昇または上昇変化を検出する。つまり、CPUは、検出した温度が閾値温度以上になった場合や、検出した温度の上昇速度（変化速度）が閾値以上の速度になった場合に、異常状態と判定する。
【００５５】
そして、CPUは動作制限対象回路の決定処理S21で動作制限をかけるユーザ回路を選択し、選択したユーザ回路に対応する分周器L1-L3の分周比を所定の大きな値に設定して、そのユーザ回路の動作周波数を所定の低い値に下げて動作制限をかける。さらに、動作制限中、一定期間、状態測定器１５５からの温度測定結果を監視する。CPUは、状態判定処理S20にて、監視している温度が動作制限されているユーザ回路の規模（サイズ）に応じた閾値温度以下に低下した場合、または、監視している温度の上昇速度が動作制限されているユーザ回路の規模（サイズ）に応じた閾値以上低下した場合、その動作制限をかけたユーザ回路を、異常状態の原因の回路と特定する。そして、CPUは、動作制限対象回路決定処理S21にて、特定したユーザ回路の動作クロックの周波数をゼロにして停止する、または動作クロックの周波数を所定の制限値に低下させるよう分周比を設定して特定したユーザ回路の動作に起因するFPGAの異常状態を解消する。
【００５６】
CPUは、状態判定処理S20にて、監視している温度または温度上昇速度の低下が前述のように低下しない場合、次のユーザ回路を選択し、その分周比を所定の大きな値に設定し、動作クロックの周波数を所定の値まで低下させる動作制限をかけ、再度状態値の変化を監視する。
【００５７】
異常状態の原因となるユーザ回路を特定するまで、上記の処理を繰り返す。
【００５８】
［第２の実施の形態］
第２の実施の形態では、状態値がFPGAの消費電力、動作制限が動作周波数の低減の例である。FPGAの構成とCPUによるPLD管理プログラムによる処理は、第1の実施の形態の図８に示したものと同じである。そして、監視する状態値が温度に代えて消費電力であること以外は、第1の実施の形態と同じである。
【００５９】
［第３の実施の形態］
図９は、第３の実施の形態におけるPLDであるFPGAの構成と、CPUが実行するPLD管理プログラムの処理を示す図である。図８と同様に、PLDであるFPGA１５には、３つのユーザ回路UC_1,UC_2,UC_3が構成され並行して動作中である。そして、FPGAは、３つのユーザ回路からのメインメモリ宛てのアクセスを調停する調停部１５６と、調停部からのメモリアクセスを受信し、外部のメインメモリ１２へのアクセスを制御するメモリアクセスコントローラMACとを有する。これら調停部１５６とメモリアクセスコントローラMACとにより各ユーザ回路と外部のメインメモリ１２との間の外部I/O回路を構成する。
【００６０】
そして、FPGAは、メモリアクセスを計測するメモリアクセス計測回路１５７と、CPU等とのインターフェース１５８を有する。さらに、各ユーザ回路へのクロックを生成するPLLと、分周器L1,L2,L3を有する。PLLと分周器の構成は図８と同様である。
【００６１】
CPU１１は、図７で説明したPLD管理プログラム（２）を実行して、FPGAの状態判定処理S20と、動作制限対象回路の決定処理S21を行う。
【００６２】
次に、状態値がメモリアクセスの帯域、動作制限が動作周波数の低減または通信の制限の例における動作を説明する。まず前提として、ユーザはユーザ回路を構成する際に、想定するメモリアクセスの帯域を申告する。そして、CPUは、PLD管理プログラム（１）を実行して、申告された帯域の合計が閾値を超えないようにFPGA内に構成するユーザ回路を選択する。その結果、FPGA内に構成されるユーザ回路が同時に動作した場合、正常動作時の合計帯域は、FPGAのメモリアクセスコントローラが提供可能な帯域の閾値を超えることはない。
【００６３】
そこで、メモリアクセス計測回路１５７は、メモリアクセス数の計測と、メモリアクセスコントローラMACでのメモリアクセスの待ちリクエスト数の計測を行う。全てのユーザ回路が正常動作中であれば、メモリアクセスリクエストは待たされることなく処理される。しかし、あるユーザ回路に異常状態が発生し異常に多くの帯域を使用した結果、前ユーザ回路が使用する帯域がFPGAで提供可能な帯域の閾値を超えてしまい、メモリアクセスの待ちリクエスト数が増大する。このメモリアクセスの待ちリクエスト数が閾値以上になると、メモリアクセス計測回路１５７からその状態値（メモリアクセスの待ちリクエスト数）を受信したCPUでは、状態判定処理S20にてFPGAの異常状態を検出する。メモリアクセスの待ちリクエスト数の増加速度が閾値以上になる場合に異常状態を検出するようにしてもよい。
【００６４】
そして、CPUは動作制限対象回路の決定処理S21で動作制限をかけるユーザ回路を選択し、選択したユーザ回路に対応する分周器L1-L3の分周比を所定の大きな値に設定して、そのユーザ回路の動作周波数を所定の低い値に下げて動作制限をかける。さらに、動作制限中の一定期間、状態測定器からの待つリクエスト数の測定結果を監視する。CPUは、状態判定処理S20にて、監視しているメモリアクセスの待ちリクエスト数が動作制限中のユーザ回路の申告使用帯域に応じた閾値以下に低下した場合、または、監視している待ちリクエスト数の上昇速度が動作制限中のユーザ回路の申告使用帯域に応じた閾値以上低下した場合、その動作制限をかけたユーザ回路を、異常状態の原因の回路と特定する。待ちリクエスト数の上昇速度の低下が閾値以上で特定してもよい。
【００６５】
そして、CPUは、動作制限対象回路決定処理S21にて、特定したユーザ回路の動作クロックの周波数をゼロにして停止する、または動作クロックの周波数を所定の制限値に低下させるよう分周比を設定して、特定したユーザ回路の動作に起因するFPGAの異常状態を解消する。
【００６６】
CPUは、状態判定処理S20にて、監視している待ちリクエスト数低下または上昇速度の低下が前述のように低下しない場合、次のユーザ回路を選択し、その分周比を所定の大きな値に設定して動作クロックの周波数を所定の値まで低下させる動作制限をかけ、再度状態値の変化を監視する。異常状態の原因となるユーザ回路を特定するまで、上記の処理を繰り返す。
【００６７】
ユーザ回路への動作制限として、動作周波数の低減以外に、ユーザ回路に対して通信の制限をかけることもできる。すなわち、図９の調停部１５６に選択したユーザ回路に対する通信の制限をかけるようにする。具体的には、調停部１５６によるユーザ回路からのメモリアクセスのリクエストの調停処理にて、選択したユーザ回路からのメモリアクセスが許可される頻度を抑制する。
【００６８】
図１０は、ユーザ回路への別の動作制限例を示す図である。図１０の例では、ユーザ回路UC_#に設けられるネットワークインターフェース回路N_IFが、アクセス要求のパケットを遅延する遅延制御部２１と、遅延制御部２１を通過したアクセス量をカウントするカウンタ部２０とを有する。遅延制御部２１がアクセス要求のパケットを遅延させることでユーザ回路に動作制限をかける。
【００６９】
具体的な動作は、ネットワークインターフェース回路内のカウンタ部２０は、CPUからルータRTを介して動作制限の指示を受けると、時間当たりのアクセス量が動作制限の指示で示された制限値以下になるように、直近のアクセス量に基づいて遅延時間を算出し、その遅延時間を遅延制御部２１に出力する。遅延制御部２１は入力された遅延時間に設定され、ユーザ回路からのメモリアクセスの要求をその遅延時間だけ遅延させて、ルータRT経由で図９の調停部１５６に出力する。
【００７０】
ここで、上記の遅延時間の算出の例を説明する。ルータ部の処理能力が1GB/sで、動作制限の制限値が20KB/sのときに、ユーザ回路から100KB/sのメモリアクセス要求が出力されたとする。この場合、動作制限時ではユーザ回路からの100KB/sのアクセス要求を制限値の20KB/sに減らす必要があるので、１つのアクセス要求がネットワークインターフェース回路N_IFとルータRTを通過する遅延時間を、100KB/20KB=5秒にする必要がある。一方、ルータの処理能力が1GB/sであるので、200KB/sのアクセス要求の処理時間は、100KB/1GB=100μ秒である。よって、ネットワークインターフェース回路での遅延時間を、５秒−100μ秒＝4.9999秒に設定すれば、ユーザ回路のアクセス要求の単位時間当たりの量を制限値まで抑制することができる。
【００７１】
［第４の実施の形態］
第４の実施の形態は、第１〜第３の実施の形態において、複数のユーザ回路の中にリアルタイム処理が必要な回路や契約などの外的要因により動作制限をかけることをできるだけ避けたい回路が存在する場合、CPUが、優先度の高い回路にはできるだけ動作制限をかけないようにして、異常状態の原因であるユーザ回路を特定する。
【００７２】
図１１は、第４の実施の形態におけるPLDの管理プログラム（２）によるPLDの異常状態検出時の不良回路の特定処理を示すフローチャート図である。前提として、PLDであるFPGA内に構成され同時に動作中のユーザ回路の中に、できるだけ動作制限をかけたくない回路（優先度が高い回路）が存在している。
【００７３】
図１１を参照して、第４の実施の形態における不良回路の特定処理について説明する。CPUは、PLD管理プログラム（２）を実行して、FPGA内の状態測定手段から状態測定結果を取得し（S10）、FPGAが異常状態か否か判定する（S11）。
【００７４】
FPGAが異常状態の場合（S11のYES）、CPUは、FPGA内に構成され同時に動作中のユーザ回路のうち、優先度が高い回路を除いた残りの回路（優先度が低い回路）全てを動作制限対象に選択する（S21）。そして、CPUは、選択された全てのユーザ回路に同時に動作制限をかけ（S22）、状態測定結果を監視する（S23）。動作制限については、第１〜第３の実施の形態で説明したとおりである。
【００７５】
監視している状態値について異常状態が解消した場合（S24のYES）、CPUは、異常状態の原因は優先度が高い回路を除いた残りの回路にあると推定し、優先度の低い回路全ての動作制限を一旦解除した後、順に動作制限して、異常状態が解消したか否かの判定を繰り返す。そして、異常状態が解消したときの回路を異常状態の原因と特定する（S25）。さらに、優先度の低い回路群の中から異常状態の原因となっていた回路を特定することができた場合（S27のYES）、特定したユーザ回路に動作制限（動作停止または動作制限）をかける（S17）。
【００７６】
上記の工程S25では、優先度の低い回路全ての動作制限を解除せず、順に動作制限を解除して異常状態が発生したか否かを判定するようにしても良い。
【００７７】
一方、特定することができなかったなら（S27のNO）、工程S26を実行する。優先度の低い回路全てに動作制限をかけた結果、優先度の高い回路による異常動作による異常状態を上回る状態値の低下が生じた場合は、工程S25では異常状態の原因となる回路を特定できない場合があるかもしれないからである。
【００７８】
一方、優先度の低い回路全てに動作制限をかけた状態で異常状態が解消されなかった場合（S24のNO）、CPUは、異常状態の原因は優先度が高い回路にあると推定し、優先度の低い回路の動作制限を解除し、優先度の高い回路を順に動作制限して、異常状態が解消したか否かの判定を繰り返す。そして、異常状態が解消したときの回路を異常状態の原因と特定する（S26）。さらに、特定したユーザ回路に動作制限（動作停止または動作制限）をかける（S17）。
【００７９】
第４の実施の形態によれば、優先度の高いユーザ回路にできるだけ動作制限をかけずに異常状態の原因となっているユーザ回路を特定することができる。
【００８０】
［第５の実施の形態］
第５の実施の形態では、第１〜第３の実施の形態において、CPUが、PLD管理プログラムを実行して、異常状態の原因となっているユーザ回路を特定した後、そのユーザ回路の動作を停止させるのではなく、他のユーザ回路に悪影響がでない範囲で制限動作を継続させる。
【００８１】
例えば、ユーザは、そのユーザ回路について、その回路規模（サイズ）と通常の動作周波数faから、許容できる最低の状態値（消費電力や使用帯域）を予め定めておく。そして、異常状態の原因と特定されたときの状態値または状態値の変化量から、特定されたユーザ回路の異常状態での動作周波数を算出し、許容状態値に対応する許容動作周波数を算出する。その結果、異常状態の原因と特定されたユーザ回路を許容動作周波数に制限して動作を継続させる。
【００８２】
以下、具体例を示して説明する。この例では、状態値は消費電力である。まず、ユーザ回路毎にその回路規模などから異常状態での許容消費電力Ptを決めておく。
【００８３】
図１２は、時間経過に対応して変化するFPGAの消費電力（Power）と異常状態の原因である特定のユーザ回路の動作周波数ｆの具体例を示す図である。この具体例では、複数のユーザ回路が同時に動作している状態で、時刻T0からFPGAの消費電力が異常状態レベルのPx=500mWに上昇し、あるユーザ回路がその原因であると特定される。そして、異常状態のときのユーザ回路の動作周波数faはfa=200MHxである。
【００８４】
その後、時刻T1でこのユーザ回路の動作周波数をfl=50MHzに制限するとFPGAの消費電力PlはPl=200mWまで低下した。この場合、このユーザ回路の許容消費電力PtがPt=40mWであるとする。そこで、時刻T2で、ユーザ回路の動作周波数を許容消費電力Ptで動作可能な動作制限周波数frに低下させて、許容消費電力Pt=40mWで動作を継続させる。
【００８５】
図１３は、異常状態の原因となったユーザ回路の異常状態での動作周波数と消費電力の関係を示す図である。一般に論理回路は動作周波数に比例して消費電力が増大する。したがって、異常状態でも動作周波数に比例して消費電力が増大すると仮定している。図１３では、横軸が異常動作中のユーザ回路の動作周波数、縦軸がFPGAの消費電力に対応する。異常動作中のユーザ回路以外の正常動作中のユーザ回路の消費電力は一定値（一点鎖線）として表示している。
【００８６】
FPGAの消費電力は、正常回路の一定の消費電力に、異常動作中のユーザ回路の消費電力を加算したものである。そして、異常動作中のユーザ回路の消費電力は、その動作周波数に比例して増加する。前述の具体例の数字を当てはめると、異常状態になったときの動作周波数fa=200MHzのとき、FPGAの消費電力はPx=500mWである。そして、動作周波数をfl=50MHzに動作制限したとき、FPGAの消費電力はPl=200mWである。そこで、
(Px-Pl):Pt=(fa-fl):fr
の比例関係式から、以下のように動作制限周波数frが求まる。
fr= (fa-fl) * {Pt/(Px-Pl)}=(200-50)*40/(500-200)=20MHz
または、異常状態のユーザ回路の消費電力Ppを(Px-Pl)/(fa-fl)の傾きからPp=400mWと算出した後、Pp/fa＝Pt/frの関係から、動作制限周波数frを20MHxと算出してもよい。
【００８７】
第５の実施の形態によれば、異常状態の原因となっていたユーザ回路を許容できる状態値に低下させてその動作を継続させることができるので、ユーザは自身の回路が停止するという最悪の事態になることを回避することができる。
【００８８】
以上説明したとおり、同じPLD内に異なるユーザ回路が構成され同時に動作している場合、ユーザ間で他のユーザ回路の構成や機能を知らなくても、またはPLD運用者が複数のユーザ回路の構成や機能を知らなくても、PLDが異常状態になったとき、PLDの動作を停止することなく、どのユーザ回路がその原因かを特定することができる。
【符号の説明】
【００８９】
１０：サーバ、情報処理装置
１１：CPU、制御回路
１２：メインメモリ
１５：PLD、FPGA
１６：補助記憶装置
R_REG：再構成領域
UC_A, UC_B：ユーザ回路
OC:運用回路
RT:ルータ、スイッチ群
N_IF：ネットワークインターフェース
FW：固定配線
FB：機能ブロック
【図１】
2018028744.tif 000003
【図２】
2018028744.tif 000004
【図３】
2018028744.tif 000005
【図４】
2018028744.tif 000006
【図５】
2018028744.tif 000007
【図６】
2018028744.tif 000008
【図７】
2018028744.tif 000009
【図８】
2018028744.tif 000010
【図９】
2018028744.tif 000011
【図１０】
2018028744.tif 000012
【図１１】
2018028744.tif 000013
【図１２】
2018028744.tif 000014
【図１３】
2018028744.tif 000015