本実施の形態では、複数の利用者が異なる回路を同一のFPGA内に構成させる。また、本実施の形態では、複数の利用者の各々に割り当てられたコンピュータは、制御装置であるサーバを介してFPGAにアクセスする。
また、複数の利用者が同一のFPGAを共同で利用すると、FPGAを介して利用者の記憶領域へのアクセスを行う場合に、FPGAはサーバなどのコンピュータバスに接続されるため、いずれの利用者の記憶領域であってもアクセス可能である。そのため、利用者間の干渉が生じる場合がある。本実施の形態では、FPGAを介して利用者の記憶領域へのアクセスを行う場合に、異なる利用者の記憶領域へアクセスさせないようにFPGA内の管理モジュールが制御する。
また、複数の利用者が同一のFPGAを共同で利用すると、複数の利用者がFPGAへのアクセスを行う場合に、利用者がFPGA内の異なる利用者の回路にアクセス可能であるため、利用者間の干渉が生じる場合がある。本実施の形態では、利用者がFPGAへのアクセスを行う場合に、異なる利用者の回路にアクセスさせないようにサーバが制御する。
以下に添付図面を参照して、本発明にかかる集積回路、制御装置、制御方法、および制御プログラムの実施の形態を詳細に説明する。
図1は、本実施の形態にかかるシステムの動作例1を示す説明図である。システム100は、サーバ111と、複数の利用者の各々に割り当てられたコンピュータ121と、サーバ111に接続されたFPGA101と、を有する。システム100の詳細例は図3に示す。
サーバ111は、コンピュータ121からFPGA101へのアクセスを制御可能な制御装置である。FPGA101は、内部の回路を再構成可能な集積回路である。図1の例では、FPGA101には、部分回路としてユーザモジュール102−1とユーザモジュール102−2と、管理モジュール103と、が構成されてある。例えば、FPGA101の内部の回路を最構成させるソフトウェアには、FPGA101内の許可された領域のみにユーザモジュール102を構成可能なパーシャルコンフィギュレーション機能がある。そのため、FPGA101には、ユーザモジュール102−1と、ユーザモジュール102−2と、管理モジュール103と、がそれぞれ異なる領域に構成可能である。例えば、ユーザモジュール102−1は、コンピュータ121−1に割り当てられてあり、コンピュータ121−1がアクセス可能である。例えば、ユーザモジュール102−2は、コンピュータ121−2に割り当てられてあり、コンピュータ121−2がアクセス可能である。例えば、コンピュータ121−1と、コンピュータ121−2と、は利用者がそれぞれ異なる。複数の利用者の各々に割り当てられたコンピュータ121は、図1に示すように物理的な装置であってもよいし、サーバ111上に構築された仮想マシンであってもよい。
管理モジュール103は、アクセス部104と、受け付け部105と、制御部106と、を有する。アクセス部104は、ユーザモジュール102の各々に割り当てられた異なる記憶領域112の各々にアクセス可能である。アクセス部104は、例えば、DMA(Direct Memory Access)機能を有する。受け付け部105は、ユーザモジュール102−1とユーザモジュール102−2とのうちのいずれかからのアクセス要求を受け付ける。図1の例では、受け付け部105は、ユーザモジュール102−1からのアクセス要求を受け付ける。アクセス部104がDMA機能を実現する場合、具体的にアクセス要求は、DMAのパラメータを有する。DMAのパラメータは、例えば、転送方向、転送先アドレス、転送元アドレス、データ長、を有する。転送方向は、FPGA101からサーバ111へ、またはサーバ111からFPGA101へのいずれかである。
例えば、制御部106は記憶部107を有する。記憶部107には、各ユーザモジュール102の各々について、ユーザモジュール102に割り当てられた記憶領域112を示す情報を記憶する。記憶領域112は、FPGA101に接続されたサーバ111内のメモリの領域であってもよい。記憶領域112を示す情報は、例えば、記憶領域112を示すアドレスである。または、コンピュータ121−1およびコンピュータ121−2が物理的なコンピュータ121である場合に、記憶領域112は、各コンピュータ121に設けられたメモリの領域であってもよい。記憶領域112を示す情報は、例えば、記憶装置のアドレスである。例えば、ユーザモジュール102−1については、0〜100番が示す記憶領域112−1であり、ユーザモジュール102−2については、300〜400番が示す記憶領域112−2である。
制御部106は、受け付け部105が受け付けたアクセス要求が示すアクセス先が記憶領域112−1である場合、アクセス要求に基づくアクセスをアクセス部104に実行させる。例えば、制御部106は、ユーザモジュール102−1から0〜100番が示す記憶領域112−1へのアクセス要求に基づくアクセスをアクセス部104に実行させる。
一方、制御部106は、割り当てられた記憶領域112−1でない場合、アクセス要求に基づくアクセスをアクセス部104に実行させない。例えば、制御部106は、ユーザモジュール102−1から300〜400番が示す記憶領域112−2へのアクセス要求に基づくアクセスをアクセス部104に実行させない。
図1に示したように、ある利用者が利用可能なFPGA101内の回路から、他の利用者が利用可能な該FPGA101内の他の回路に割り当てられた記憶領域へアクセスさせない。これにより、他の利用者の記憶領域がある利用者が利用可能な回路に干渉されるのを防ぐことができる。したがって、各利用者の処理環境を安定して機能させることができる。
図2は、本実施の形態にかかるシステムの動作例2を示す説明図である。システム100は、図1と同様の例を用いるため、詳細な説明を省略する。サーバ111は、受け付け部211と、制御部212と、を有する。
受け付け部211は、複数のコンピュータ121のうちのいずれかからFPGA101へのアクセス要求を受け付ける。図2の例では、制御部212は、コンピュータ121−1からのアクセス要求を受け付ける。
制御部212は、記憶部213を有する。記憶部213は、複数のコンピュータ121の各々について、コンピュータ121に割り当てられたユーザモジュール102が構成された記憶領域201を示す情報を記憶する。例えば、ユーザモジュール102が構成された領域を示す情報は、FPGA101が有するメモリのうち、ユーザモジュール102内のメモリが構成された記憶領域201を示すアドレスである。
制御部212は、記憶部213の記憶内容に基づいて、受け付けたアクセス要求が示すアクセス先が、アクセス要求の要求元のコンピュータ121に割り当てられたユーザモジュール102が構成された領域である場合、アクセス要求に基づくアクセスを実行する。制御部212は、例えば、コンピュータ121−1からFPGA101内のメモリの0〜100番が示す記憶領域201−1へのアクセス要求に基づくアクセスを実行する。
一方、制御部212は、記憶部213の記憶内容に基づいて、要求元のコンピュータ121に割り当てられたユーザモジュール102が構成された領域でない場合、アクセス要求に基づくアクセスを実行しない。制御部212は、例えば、コンピュータ121−1からFPGA101内のメモリの300〜400番が示す記憶領域201−2へのアクセス要求に基づくアクセスを実行しない。
図2に示したように、FPGA101は、ある利用者から他の利用者に割り当てられた該FPGA101内のユーザモジュール102へアクセスさせない。これにより、他の利用者に割り当てられたFPGA101内のユーザモジュールがある利用者によって干渉されるのを防ぐことができる。したがって、各利用者の処理環境を安定して機能させることができる。
図3は、システムの詳細例を示す説明図である。システム100では、複数の利用者がデータセンタ301にあるサーバに接続されたFPGA101を利用して所望の回路を実現する。システム100は、端末302と、データセンタ301と、を有する。データセンタ301には、複数のサーバがある。
端末302は利用者が直接操作可能な装置であり、図3の例では、利用者が2人であるため、端末302−1と端末302−2を示す。端末302は、例えば、PC(Personal Computer)やワークステーションである。
また、具体的に、データセンタ301には、例えば、FPGA101にプログラムさせるためのコンフィギュレーションデータを生成するための開発システム303用のサーバ304−1,304−2がある。また、データセンタ301には、コンフィギュレーションデータがプログラムされることにより内部の回路が構成される当該FPGA101に接続されたサーバ111がある。開発システム303と、サーバ111とは、想定される利用者の総数に応じて複数用意される。
また、データセンタ301には、サーバプールデータベース332とFPGAデータベース331などを記憶するデータベースサーバ306がある。サーバプールデータベース332用のデータベースサーバ306と、FPGAデータベース331用のデータベースサーバ306と、に分けて用意されてもよい。
また、データセンタ301には、後述する仮想マシン生成プログラム321を実行するサーバ305と、後述する受け入れ検査プログラム322を実行するサーバ307と、がある。また、データセンタ301には、本実施の形態にかかるシステム100の全体を制御する全体制御プログラム323を実行する制御用のサーバ308がある。また、データセンタ301には、一般的な運用管理用のサーバ309がある。
ここで、図1、図2に示したコンピュータ121は、端末302であっても、仮想マシンVMであってもよいが、本実施の形態では、仮想マシンVMを例に挙げる。仮想マシンVMを利用することにより、通信に要する時間を短縮させることができる。各利用者は、所望のユーザモジュール102をサーバ111に接続されたFPGA101によって構成させ、当該サーバ111上で仮想マシンVMを構築させる。これにより、各利用者は、サーバ111が実現する仮想マシンVM上で実行されるアプリケーションソフトウェアと、FPGA101に構成されたユーザモジュール102と、の間でやり取りを行わせることができる。図3の例では、サーバ111は、端末302−1に割り当てられた仮想マシンVM1と、端末302−2に割り当てられた仮想マシンVM2と、を構築する。仮想マシンVM1はユーザモジュール102−1に割り当てられ、仮想マシンVM2はユーザモジュール102−2に割り当てられる。
図4は、端末とサーバのハードウェア構成例を示すブロック図である。サーバ111は、例えば、CPU411と、メモリ412と、ディスク413と、ディスクドライブ414と、PCIe(Peripheral Component Interconnect express)415と、ネットワークインターフェース416と、を有する。
また、サーバ111は、PCIe415によってFPGA101を搭載した拡張ボード401と、接続される。PCIe415は、インターフェースの一種である。拡張ボード401は、例えば、FPGA101と、FPGA101の外部のメモリ402と、I/O(Input/Output)インターフェース403と、などを有する。また、サーバ111は、ネットワークインターフェース416によってネットワークNETを介して利用者が直接操作可能な端末302と接続される。
まず、CPU411は、サーバ111の全体の制御を司る。メモリ412は、CPU411のワークエリアとして使用される記憶部である。メモリ412としては、例えば、RAM(Random Access Memory)などが挙げられる。ディスクドライブ414は、CPU411の制御にしたがってディスク413に対するデータのリード/ライトを制御する。ディスク413は、ディスクドライブ414の制御で書き込まれたデータを記憶する記憶部である。ディスク413としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
ネットワークインターフェース416は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークNETに接続され、このネットワークNETを介して他の装置に接続される。そして、ネットワークインターフェース416は、ネットワークNETと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ネットワークインターフェース416には、例えば、モデムやLANアダプタなどを採用することができる。
また、データセンタ301内の各種サーバは、サーバ111と同様のハードウェア構成とする。
また、端末302は、例えば、PCやワークステーションなどが挙げられる。端末302は、例えば、CPU421と、メモリ422と、ディスク423と、ディスクドライブ424と、入力装置425と、出力装置426と、ネットワークインターフェース427と、を有する。
CPU421は、端末302の全体の制御を司る。メモリ422は、CPU421のワークエリアとして使用される記憶部である。ディスクドライブ424は、CPU421の制御にしたがってディスク423に対するデータのリード/ライトを制御する。ディスク423は、ディスクドライブ424の制御で書き込まれたデータを記憶する。ディスク423としては、磁気ディスク、光ディスクなどが挙げられる。
ネットワークインターフェース427は、通信回線を通じてLAN、WAN、インターネットなどのネットワークNETに接続され、このネットワークNETを介して他の装置に接続される。そして、ネットワークインターフェース427は、ネットワークNETと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ネットワークインターフェース427には、例えば、モデムやLANアダプタなどを採用することができる。
入力装置425は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置425は、カメラから画像や動画を取り込むこともできる。また、入力装置425は、マイクから音声を取り込むこともできる。出力装置426は、CPU421の指示により、データを出力するインターフェースである。出力装置426には、ディスプレイやプリンタが挙げられる。
図5は、サーバによるソフトウェアの実行例を示す説明図である。サーバ111は、ディスク413などの記憶装置に記憶されたプログラムをCPU411がロードすることにより、ハイパーバイザHVと、管理OS(Operating System)501−cを実行する仮想マシンVMcとなどを実行する。例えば、サーバ111は、仮想マシンVMcと、端末302の各々に割り当てられた仮想マシンVMx(図5中x=1,2)と、の各々を制御するハイパーバイザHVと、を実行する。
説明上仮想マシンVM、OS501、アプリケーションソフトウェア503、デバイスドライバ502は、サーバ111によって実行されるものであるが、ここでは、説明上実行主体して記載する。仮想マシンVMcは、管理OS501−cと、管理OS501−cに呼び出されるデバイスドライバ502−cと、管理OS501−cが実行するソフトウェア503−cと、を実行する。ソフトウェア503−cは、端末302に割り当てられた仮想マシンVM全体を管理するプログラムである。デバイスドライバ502−cは、拡張ボード401を制御して、各アプリケーションソフトウェア503に対するインターフェースを提供するソフトウェアである。
端末302−xに各々割り当てられた仮想マシンVMxは、それぞれOS501−xを実行する。また、仮想マシンVMxは、それぞれOS501−xに呼び出されるデバイスドライバ502−xと、OS501−xが実行するアプリケーションソフトウェア503−xと、を実行する。デバイスドライバ502−xは、仮想マシンVMxの各々に割り当てられたFPGA101内のユーザモジュール102−xへのアクセスを制御する。
(利用開始時)
図6は、システムの利用開始時のフロー例を示す説明図である。全体制御プログラム323を実行するサーバ308は、開発システム303やサーバ305やサーバ307やサーバ111などを制御することにより、全体を制御する。全体制御プログラム323は、制御用のサーバ308内のディスク413などの記憶装置に記憶され、サーバ308内のCPU411は、記憶装置から全体制御プログラム323を読み出して実行する。これにより、全体制御プログラム323にコーディングされた機能が実現される。具体的には、サーバ308は、各利用者からの指示に応じて開発システム303を利用者が操作可能なように割り当てる。また、当該サーバ308は、受け入れ検査プログラム322を実行するサーバ307や仮想マシン生成プログラム321を実行するサーバ305に処理を依頼するなどの全体の制御を行う。
各利用者は、開発システム303によって、FPGA101上で動作するユーザモジュール102を設計する。開発システム303は、利用者によって設計されたユーザモジュール102を示すコンフィギュレーションデータを生成する。
また、サーバ305は、仮想マシン仕様定義ファイル611と、サーバプールデータベース332に登録された仮想マシンVMと、によって、仮想マシンVMを配置可能なサーバ111を決定する。仮想マシン仕様定義ファイル611は、仮想マシンVMの仕様を示す情報、コンフィギュレーションデータを示す識別情報などを有する。仮想マシンVMの仕様を示す情報は、CPU、メモリ、ディスク、ネットワークインターフェースなどの仕様を示す。利用者は、仮想マシンの仕様を決定し、仮想マシン仕様定義ファイル611をデータセンタ301へ端末302を介して入力する。また、サーバ307は、利用者によって設計されたユーザモジュール102が、決定したサーバ111に接続された拡張ボード401のFPGA101に構成可能か否かを判断する。
図7は、開発システム例を示す説明図である。データセンタ301には、拡張ボード704に接続されたサーバ304−1と、FPGA開発ソフトウェア703を実行中のサーバ304−2と、ゲートウェイ701と、がある。拡張ボード704は、拡張ボード401と同様のボードとする。
FPGAプログラミングケーブル705は、サーバ304−2と拡張ボード704とを接続する。拡張ボード704には、管理モジュール103が予め構成されてあってもよい。FPGAプログラミングケーブル705は、JTAGによってサーバ304−2が設計したユーザモジュール102を示すコンフィギュレーションデータを拡張ボード704に書き込むことができる。また、FPGAプログラミングケーブル705は、FPGA101内の内部状態を参照または変更することができる。端末302はネットワークNETを介してデータセンタ301のゲートウェイ701に接続される。利用者は、端末302を介してサーバ304−2が実行中のFPGA開発ソフトウェア703によってユーザモジュール102の設計やデバッグを行う。また、サーバ304−2については、サーバ304−1上に仮想マシンVMとして構築されてもよい。
利用者は、JTAGによって、拡張ボード704のFPGA101内部全体にアクセス可能となるため、開発システム303については、全体制御プログラム323を実行するサーバ308によって、複数の利用者が同時に利用しないように制限されてもよい。そのため、開発システム303については、想定される利用者の数に応じて複数用意される。
また、利用者がサーバ304−1を占有する場合、開発システム303にリモート制御702の機能が用意され、サーバ304−1の電源オンまたは電源オフ、リセット、コンソールアクセスなどが可能な仕組みが用意される。
図8は、仮想マシン生成プログラムを実行するサーバによる生成処理手順例を示すフローチャートである。仮想マシン生成プログラム321は、例えば、サーバ305内のディスク413などの記憶装置に記憶され、サーバ305内のCPU411が、記憶装置から仮想マシン生成プログラム321を読み出して実行する。これにより、仮想マシン生成プログラム321にコーディングされた機能が実現される。
まず、サーバ305は、仮想マシン仕様定義ファイル611と、コンフィギュレーションデータ802と、を受け付ける(ステップS801)。上述したように、仮想マシン仕様定義ファイル611は、仮想マシンVMの仕様を示す情報、コンフィギュレーションデータ802を示す識別情報などを有する。
つぎに、サーバ305は、サーバプールデータベース332を検索して、仮想マシン仕様定義ファイル611が示す仮想マシンVMを配置可能なサーバ111を特定する(ステップS802)。そして、サーバ305は、特定したサーバ111の中に未選択のサーバ305があるか否かを判断する(ステップS803)。サーバプールデータベース332には、運用時に使用される各サーバ111にどのような仮想マシンVMが動作中であるかを示す情報と、各仮想マシンVMに割り当てられたリソース情報などが記憶される。ここでの割り当てられたリソース情報には、各仮想マシンVMに割り当てられたサーバ111内のCPU、メモリ412内の記憶領域、ディスク413内の記憶領域などを示す情報が含まれる。また、リソース情報は、サーバ305に接続されたFPGA101にどのユーザモジュール102が構成されたかを示す情報が含まれる。
未選択のサーバ111がある場合(ステップS803:Yes)、サーバ305は、未選択のサーバ111から1つのサーバ111を選択する(ステップS804)。サーバ305は、FPGAデータベース331を検索して、選択したサーバ111に接続された拡張ボード401のFPGA101を利用可能か確認する(ステップS805)。サーバ305は、FPGA101を利用可能か否か判断する(ステップS806)。利用可能でない場合(ステップS806:No)、サーバ305は、ステップS803へ戻る。
利用可能である場合(ステップS806:Yes)、サーバ305は、ステップS807へ移行する。サーバ305は、開発システム303からのコンフィギュレーションデータ802に基づいて、FPGA101設計ツールを用いてユーザモジュール102をレイアウトする。そして、サーバ305は、選択したサーバ111に接続されたFPGA101に書き込むコンフィギュレーションデータ803を生成する(ステップS807)。つぎに、サーバ305は、仮想マシン定義ファイル804を生成し(ステップS808)、サーバ305は、選択したサーバ111に仮想マシン定義ファイル804を転送し(ステップS809)、一連の処理を終了する。仮想マシン定義ファイル804は、仮想マシンVMの仕様を示す情報、仮想マシンVMに含まれるメモリやディスクなどのディスクイメージ、ステップS807によって生成されたコンフィギュレーションデータ803などが含まれる。
ステップS803において、未選択のサーバ111がない場合(ステップS803:No)、サーバ305は、エラーを出力し(ステップS810)、一連の処理を終了する。
図9は、運用時のサーバによる初期設定処理手順例を示すフローチャートである。サーバ111は、仮想マシン定義ファイル804を受け付けたか否かを判断する(ステップS901)。仮想マシン定義ファイル804を受け付けていない場合(ステップS901:No)、サーバ111は、ステップS901へ戻る。仮想マシン定義ファイル804を受け付けた場合(ステップS901:Yes)、サーバ111は、コンフィギュレーションデータ803が示すユーザモジュール102が許可された領域のみに再構成されるかを受け入れ検査プログラム322を実行するサーバ307に確認を依頼する(ステップS902)。
サーバ111は、再構成可能か否かを判断する(ステップS903)。再構成可能である場合(ステップS903:Yes)、サーバ111は、ハイパーバイザHVによって、仮想マシンVMを構築する(ステップS904)。サーバ111は、管理OS501−cによって、パーシャル・リコンフィギュレーション機能を用いてFPGA101内にユーザモジュール102を構成する(ステップS905)。サーバ111は、管理OS501−cによって、FPGA101内の管理モジュール103にある後述するアクセス許可設定レジスタに、ユーザモジュールがアクセス可能なメモリ412の物理アドレス範囲を設定する(ステップS906)。
つぎに、サーバ111は、デバイスドライバ502によって、FPGA101内のあらたなユーザモジュール102を認識する(ステップS907)。そして、サーバ111は、ハイパーバイザHVによって、仮想マシンVMを起動し(ステップS908)、一連の処理を終了する。これにより、利用者が仮想マシンVM上でアプリケーションソフトウェアを実行し、FPGA101に構成されたユーザモジュール102が利用可能となる。一方、ステップS903において、再構成可能でない場合(ステップS903:No)、サーバ111は、エラーを出力し(ステップS909)、一連の処理を終了する。
図10は、受け入れ検査プログラムを実行するサーバのデータフロー例を示す説明図である。受け入れ検査プログラム322は、例えば、サーバ307内のディスク413などの記憶装置に記憶され、サーバ307内のCPU411が、記憶装置から受け入れ検査プログラム322を読み出して実行する。
サーバ307は、受け入れ検査プログラム322によって、コンフィギュレーションデータ803と、デバイス情報1001と、を入力として受け付ける。デバイス情報1001には、利用者がプログラミング可能なFPGA101の領域の情報、デバイスがアドレス空間にマップする領域の情報などが含まれる。サーバ307は、受け入れ検査プログラム322によって、利用者によって設計されたユーザモジュール102をデータセンタ301にあるいずれのFPGA101で構成可能かをFPGAデータベース331に基づいて判断する。また、サーバ307は、実際にサーバ311に接続されたえFPGA101に書き込み、管理モジュール103、他のユーザモジュール102、などを領域が変更されていないかをCRC(Cyclic Redundancy Check)チェックサムなどによって確認してもよい。サーバ307は、受け入れ検査プログラム322によって、受け入れ可能なであると判断した場合にFPGAデータベース331に、検査結果を登録する。
例えば、検査結果として、1.コンフィギュレーションデータ803を示す識別情報、2.コンフィギュレーションデータ803、3.作成者の識別情報、4.利用許可情報、5.改変許可情報、6.デバイス種類情報がFPGAデータベース331へ登録される。作成者の識別情報としては、例えば、利用者の氏名情報であってもよいし、利用者が操作可能な端末302の識別情報であってもよい。利用許可情報は、いずれの利用者または端末302がコンフィギュレーションデータ803を使用可能であるかを示す情報である。利用許可情報によって、複数の利用者がコンフィギュレーションデータ803を共用することができ、複数の利用者が同一機能のユーザモジュール102を利用することができる。改変許可情報は、いずれの利用者または端末302がコンフィギュレーションデータ803を変更可能であるかを示す情報である。デバイス種類情報は、いずれの種類のFPGA101であれば利用可能であるかを示す情報である。
(サーバ111の機能的構成例)
図11は、サーバの機能的構成例を示すブロック図である。サーバ111は、受け付け部211と、制御部212と、計測部1101と、を有する。受け付け部211と制御部212と計測部1101は、例えば、管理OS501−cのデバイスドライバ502−cにコーディングされてあり、サーバ111が仮想マシンVMcによって管理OS501−cを実行する。これにより、受け付け部211と制御部212と計測部1101とが実現される。
また、計測部1101については、サーバ111の機能でなく、管理モジュール103に設けられていてもよい。管理モジュール103に計測部1101が設けられる場合、制御部212は、管理モジュール103からデータ量を取得する機能を有する。
図12は、メモリアロケーション例を示す説明図である。仮想マシン環境では、2段階のアドレス変換が行われる。仮想マシンVMcには、仮想アドレス空間1211−cと、メモリ412やFPGA101などの各種デバイスにアクセスするための物理アドレス空間1213と、が対応付けられる。仮想マシンVMcの仮想アドレス空間1211−cには、例えば、管理OS501−cが使用するメモリのアドレス空間がある。管理OS501−cが使用するメモリには、例えば、論理アドレスを物理アドレスに変換するためのテーブル1201などが記憶される。仮想マシンVMcの仮想アドレス空間1211−cには、例えば、各種デバイスドライバ502−cが使用するメモリと、ソフトウェア503−cが使用するメモリと、のそれぞれのアドレス空間がある。デバイスドライバ502−cが使用するメモリには、サーバ111が転送したデータ量を計測するための累積データ量カウンタが記憶される。この累積データ量カウンタが計測部1101である。
また、端末302−xに割り当てられた仮想マシンVMxには、仮想アドレス空間1211−xと仮想マシンVM−xに割り当てられたユーザモジュール102−xにアクセスするための物理アドレス空間1213とが対応付けられる。仮想マシンVMxの仮想アドレス空間1211−xには、例えば、OS501−xが使用するメモリのアドレス空間がある。OS501−xが使用するメモリには、例えば、論理アドレスを物理アドレスに変換するためのテーブル1202がある。また、仮想マシンVM−xの仮想アドレス空間1211−xには、ユーザモジュール102−x用のデバイスドライバ502−xが使用するメモリのアドレス空間がある。また、仮想マシンVMxの仮想アドレス空間1211−xには、アプリケーションソフトウェア503−xが使用するメモリの仮想アドレス空間がある。デバイスドライバ502−xが使用するメモリと、アプリケーションソフトウェア503−xが使用するメモリとは、例えば、バッファメモリ1203は、デバイスドライバ502−xがアプリケーションソフトウェア503−xが使用するメモリとのうちの少なくともいずれか一方にある。バッファメモリ1203は、FPGA101と、デバイスドライバ502−xまたはアプリケーションソフトウェア503−xと、の間でデータ転送するためのメモリである。
また、仮想アドレス空間1212は、ハイパーバイザHVのレベルで認識される。物理アドレス空間1213は、メモリ412内の各OS、デバイスドライバ502、アプリケーションの各々が使用する領域と、FPGA101内の各ユーザモジュール102が使用するメモリと、がある。CPU411が有するMMU(Memory Management Unit)は、各仮想マシンVMの仮想アドレス空間1211と、仮想アドレス空間1212と、の間のアドレス変換を行う。さらに、CPU411が有するMMUは、仮想アドレス空間1212と、物理アドレス空間1213と、の間のアドレス変換を行う。
図13は、各ユーザモジュールに割り当てられた記憶領域の詳細例を示す説明図である。例えば、仮想アドレス空間1211における管理OS501−cが使用するためのI/Oメモリは、物理アドレス空間1213における記憶領域acと、記憶領域au1と、記憶領域au2と、である。記憶領域acは、管理モジュール103に割り当てられたメモリ412内の領域である。記憶領域au1は、ユーザモジュール102−1に割り当てられたメモリ412内の領域である。記憶領域au2は、ユーザモジュール102−2に割り当てられたメモリ412内の領域である。
仮想アドレス空間1211における仮想マシンVM1が使用するメモリは、物理アドレス空間1213におけるメモリ412内の記憶領域a1である。仮想アドレス空間1211における仮想マシンVM1が使用するI/Oメモリは、物理アドレス空間1213における記憶領域au1である。仮想アドレス空間1211における仮想マシンVM2が使用するメモリは、物理アドレス空間1213におけるメモリ412内の記憶領域a2である。仮想アドレス空間1211における仮想マシンVM2が使用するI/Oメモリは、物理アドレス空間1213における記憶領域au2である。
記憶領域acを示すアドレス範囲は、e0000000〜e00fffffである。記憶領域au1を示すアドレス範囲は、e0100000〜e01fffffである。記憶領域au2を示すアドレス範囲は、e0200000〜e02fffffである。
(FPGA101に構成された各ユーザモジュール102)
図14は、FPGAに構成された各ユーザモジュール例を示すブロック図である。FPGA101には、管理モジュール103と、ユーザモジュール102と、が構成される。管理モジュール103は、DMA回路1403と、再構成回路1404と、PCIe1405と、制御回路1406と、メモリコントローラ1407と、メモリ1408と、を有する。ユーザモジュール102は、上述したように、利用者によって設計され、利用者の端末302に割り当てられる。ユーザモジュール102は、メモリ601と、回路1401と、を有する。管理モジュール103とユーザモジュール102とは、ポート1402を介して接続される。管理モジュール103は、アクセス要求をいずれのポート1402を介して受け付けたかによって要求元のユーザモジュール102を判別することができる。
DMA回路1403は、DMAのパラメータを設定するレジスタ1411を有する。上述したように、DMAのパラメータは、例えば、転送方向、転送先アドレス、転送元アドレス、データ長、を有する。転送方向は、FPGA101からサーバ111へ、またはサーバ111からFPGA101へのいずれかである。制御回路1406は、累積データ量カウンタ1412と、アクセス許可設定レジスタ1413と、を有する。累積データ量カウンタ1412は、ユーザモジュール102からのアクセス要求に基づくDMA回路1403によるデータ量を計測する計測部である。アクセス許可設定レジスタ1413は、サーバ111内のメモリ412のうちの、ユーザモジュール102ごとにユーザモジュール102に対応付けられた仮想マシンVMに割り当てられた記憶領域を示す情報が記憶される記憶部107である。
また、アクセス許可設定レジスタ1413は、ユーザモジュール102ごとに、メモリ412内のアクセス可能な領域を示すアドレス範囲と、転送量の規制値と、が記憶される記憶部107である。例えば、アクセス許可設定レジスタ1413には、ユーザモジュール102が管理OS501−cによって構成される際に、メモリ412について、管理OS501−cによってアドレス範囲を示す情報と、データ量の制限値と、が設定される。設定例は図15に示す。
また、アクセス許可設定レジスタ1413には、ユーザモジュール102ごとに、メモリ402、メモリ602、I/Oインターフェース403などのアクセス許可を示す情報が記憶される。例えば、アクセス許可設定レジスタ1413には、ユーザモジュール102が管理OS501−cによって構成される際に、メモリ402、メモリ602、I/Oインターフェース403について、管理OS501−cによってアクセス許可を示す情報が設定される。そのため、ユーザモジュール102からメモリ402、メモリ602,I/Oインターフェース403などへのアクセスは、制御回路1406を介して行われる。ユーザモジュール102からメモリ402、メモリ602,I/Oインターフェース403などへのアクセスについての詳細例は省略するが、ユーザモジュール102からメモリ412へのアクセスと同様に制御回路1406がアクセス可能か否かを判断する。
再構成回路1404は、サーバ111からのコンフィギュレーションデータ803に基づいて、FPGA101内にユーザモジュール102が構成される際にポート1402などを構成する機能を有する。メモリコントローラ1407は、メモリ1408を制御する。PCIe1405は、PCIe415を介してサーバ111にアクセスする際の制御を行う。
図15は、アクセス許可設定レジスタの設定例を示す説明図である。ここでは、理解の容易化のために、アクセス許可設定レジスタ1413をテーブルのように表す。アクセス許可設定レジスタ1413には、ユーザモジュール102ごとに、メモリ412内のアクセス可能な領域を示すアドレス範囲と、転送量の規制値と、が設定される。
転送量の規制値は、複数のユーザモジュール102からのアクセス要求が重なった際にいずれかのユーザモジュール102によってアクセスが占有されるのを防ぐための、ユーザモジュール102のアクセス優先度を決定するための閾値である。転送量の規制値については、例えば、ユーザモジュール102の回路規模などに基づいて決定される。例えば、転送量の規制値は、受け入れ検査プログラム322や管理OS501−cなどによって決定される。例えば、管理モジュール103については、他のユーザモジュール102よりも重要度が高いとして、転送量の規制値によってアクセスを制限させないこととする。例えば、管理モジュール103については、アドレス範囲がe0000000〜e00fffffであり、転送量の規制値は、∞である。ユーザモジュール102−1については、アドレス範囲がe0100000〜e01fffffであり、転送量の規制値は500[Mbps]である。例えば、ユーザモジュール102−2については、アドレス範囲がe0200000〜e02fffffであり、転送量の規制値は1000[Mbps]である。
図16は、ユーザモジュールとポートの対応例を示す説明図である。例えば、テーブル1600が示すように、管理モジュール103のポート1402−1にはユーザモジュール102−1が接続され、管理モジュール103のポート1402−2にはユーザモジュール102−2が接続される。例えば、ユーザモジュール102とポート1402の対応関係については、管理モジュール103内にテーブル化されてあってもよい。また、例えば、管理モジュール103には、予め複数のポート1402が用意され、ユーザモジュール102が構成される領域に応じてユーザモジュール102に使用されるポート1402が決定されてもよい。
図17は、デバイスドライバが有するテーブル例を示す説明図である。テーブル1700は、仮想マシンVMに割り当てられたFPGA101内の領域を示す記憶部213である。仮想マシンVMに割り当てられたFPGA101内の領域とは、仮想マシンVMに割り当てられたFPGA101内のユーザモジュール102が構成された領域に含まれる記憶領域である。テーブル1700は、例えば、デバイスドライバ502−cに割り当てられたメモリ412内の記憶領域に記憶される。具体的に、テーブル1700には、仮想マシンVMごとに仮想マシンVMに割り当てられたFPGA101内のユーザモジュール102の記憶領域を示すアドレス範囲が記憶される。
仮想マシンVMcについては、端末302に割り当てられた仮想マシンVMxを管理するため、FPGA101内のすべての領域に対してアクセス可能とする。また、仮想マシンVMcについては、端末302に割り当てられた仮想マシンVMxよりもアクセス要求の重要度が高いとし、転送量の規制値によってアクセスを制限させないこととする。そのため、仮想マシンVMcについては、アドレス範囲がe0100000〜e03fffffであり、転送量の規制値は∞である。仮想マシンVM1については、アドレス範囲がe0100000〜e01fffffであり、転送量の規制値は500[Mbps]である。仮想マシンVM2については、アドレス範囲がe0200000〜e02fffffであり、転送量の規制値は1000[Mbps]である。
(仮想マシンVMからユーザモジュール102へのアクセス要求)
本実施の形態では、仮想マシンVMからユーザモジュール102へのアクセスは、PIO(Programmed I/O)やMemory Mapped I/Oによって実現される。
受け付け部211は、端末302に割り当てられた仮想マシンVMのいずれかからFPGA101へのアクセス要求を受け付ける。制御部212は、受け付けたアクセス要求が示すアクセス先が、アクセス要求の要求元の仮想マシンVMに割り当てられたユーザモジュール102が構成された領域である場合、アクセス要求に基づくアクセスを実行する。具体的には、制御部212は、テーブル1700に基づいて、アクセス要求に含まれるFPGA101内の領域を示すアドレスが、アクセス要求の要求元の仮想マシンVMについてのアドレス範囲に含まれる場合、アクセス要求に基づくアクセスを実行する。制御部212は、構成された領域でない場合、アクセス要求に基づくアクセスを実行しない。具体的に、制御部212は、テーブル1700に基づいて、アクセス要求に含まれるFPGA101内の領域を示すアドレスが、アクセス要求の要求元の仮想マシンVMについてのアドレス範囲に含まれない場合、アクセス要求に基づくアクセスを実行しない。また、制御部212は、構成された領域でない場合、アクセス要求の要求元の仮想マシンVMに対してエラーを出力してもよい。
また、制御部212は、構成された領域でない場合に、アクセス要求を要求元の仮想マシンVMに割り当てられたユーザモジュール102が構成された領域へのアクセス要求に補正し、補正したアクセス要求を実行してもよい。具体的に、制御部212は、テーブル1700に基づいて、仮想マシンVMについてのアドレス範囲に含まれない場合、アクセス要求をアドレス範囲に含まれる領域へのアクセス要求に補正する。より詳細な例は、図20を用いて後述する。
また、制御部212は、構成された領域である場合において、他の仮想マシンVMからのアクセス要求に基づくアクセスを実行している場合、他の仮想マシンVMからのアクセス要求に基づくアクセスの終了を待機する。ここでは、例えば、あらたに受け付けられたアクセス要求の要求元を第1仮想マシンVMとし、該他の仮想マシンVMを第2仮想マシンVMとする。そして、制御部212は、終了後に、第1仮想マシンVMからのアクセス要求に基づくアクセスを実行する。これにより、複数の仮想マシンVMからFPGA101へのアクセスが重なっても、アクセス要求を受け付けた時刻が早い順にアクセス要求が示すアクセスを終了させることができる。
また、いずれかの仮想マシンVMが、FPGA101とサーバ111とを接続するPCIe1405などの共用リソースを連続して使用すると、他の仮想マシンVMがPCIe1405を利用できなくなってしまう。そこで、計測部1101は、第1仮想マシンVMからのアクセス要求に基づいて転送した所定時間当たりの第1データ量と、第2仮想マシンVMからの前アクセス要求に基づいて転送した所定時間当たりの第2データ量と、を計測する。所定時間については、運用前にシステム100の開発者やデータセンタ301の管理者によって決定されることとする。具体的には、計測部1101は、第1仮想マシンVMからのアクセス要求に基づいて転送したデータ量を累積し、所定時間間隔でサンプリングすることにより、所定時間当たりの転送したデータ量を計測する。
制御部212は、第2仮想マシンVMからのアクセス要求に基づくアクセスを実行している場合において、計測部1101が計測した第1データ量と、計測部1101が計測した第2データ量と、に基づいて、第1状態と第2状態とを切り替える。第1状態は、第1仮想マシンVMからのアクセス要求に基づくアクセスを実行する状態であり、第2状態は、第2仮想マシンVMからのアクセス要求に基づくアクセスを実行する状態である。
制御部212は、第1データ量と第1仮想マシンVMについての閾値との比較結果と、第2データ量と第1仮想マシンVMについての閾値との比較結果と、に基づいて、第1状態と第2状態とを切り替える。閾値は、上述した転送量の規制値である。例えば、制御部212は、第1状態の場合において、第1データ量が第1仮想マシンVMについての規制値を超えた場合、第1状態から第2状態に切り替える。また、例えば、制御部212は、第2状態の場合において、第2データ量が第2仮想マシンVMについての規制値を超えた場合、第2状態から第1状態に切り替える。より詳細な例については、図21を用いて後述する。このように、各仮想マシンVMからのアクセス要求に基づくアクセスの実行を切り替えることにより、サーバ111内のPCIe415などの共用リソースを複数の仮想マシンVMが公平に利用可能となる。
ここで、上述したように、受け付け部211と制御部212が管理OS501−cのデバイスドライバ502−cによって実現されることにより、要求元の仮想マシンVMによるFPGA101への不正なアクセスや誤ったアクセスを防ぐことができる。例えば、管理モジュール103によって当該受け付け部211と制御部212の機能を実現させる場合、管理モジュール103は、いずれの仮想マシンVMからのアクセス要求を受け付けたかを区別することができない。アクセス要求に要求元である仮想マシンVMの識別情報を付加させるように予め取り決めてあっても、各仮想マシンVMが故意または誤って他の仮想マシンVMの識別情報を付加させる場合がある。この場合、管理モジュール103は、アクセス要求に含まれる要求元の仮想マシンVMの識別情報が正しいか否かを判断することができないため、不正なアクセスや誤ったアクセスが発生する可能性がある。
一方、管理OS501−cのデバイスドライバ502−cは、要求元の仮想マシンVMを判別可能である。そのため、受け付け部211と制御部212とが管理OS501−cのデバイスドライバ502−cによって実現されることにより、要求元の仮想マシンVMによるFPGA101への不正なアクセスや誤ったアクセスを防ぐことができる。
図18は、仮想マシンからユーザモジュールへのアクセス例を示す説明図である。管理OS501−c、仮想マシンVM、各デバイスドライバ502、ハイパーバイザHVは、サーバ111が実行するソフトウェアであるが、理解の容易化のために、各々を実行主体として説明する。
例えば、仮想マシンVM1上で実行中のアプリケーションソフトウェア503−1からアクセス要求があると、仮想マシンVM1上で実行中のOS501−1は、FPGA101へのアクセス要求を生成する。そして、仮想マシンVM1上で実行中のOS501−1は、デバイスドライバ502−1を呼び出し、デバイスドライバ502−1にアクセス要求を通知する(ステップS1801)。図18中、アプリケーションソフトウェア503−1を省略する。
デバイスドライバ502−1は、アクセス要求を受け付けると、ハイパーバイザHVへアクセス要求を通知する(ステップS1802)。ハイパーバイザHVは、デバイスドライバ502−1からのアクセス要求を管理OS501−cへ通知する(ステップS1803)。管理OS501−cは、ハイパーバイザHVから仮想マシンVM1が要求元であるアクセス要求を受け付けると、デバイスドライバ502−cを呼び出し、受け付けたアクセス要求をデバイスドライバ502−cへ通知する(ステップS1804)。
デバイスドライバ502−cは、アクセス要求に含まれるアクセス先のアドレスが受け付けたアクセス要求の要求元である仮想マシンVM1についてのアドレス範囲に含まれる場合、アクセス要求に基づくアクセスを実行する(ステップS1805)。ステップS1805において、デバイスドライバ502−cは、アクセス要求に含まれるアクセス先のアドレスが受け付けたアクセス要求の要求元である仮想マシンVM1についてのアドレス範囲に含まれない場合、アクセス要求を補正する。具体的に、デバイスドライバ502−cは、アクセス要求を仮想マシンVM1についてのアドレス範囲に含まれるように補正する。そして、デバイスドライバ502−cは、補正したアクセス要求に基づくアクセスを実行する。管理モジュール103は、デバイスドライバ502−cによるアクセス要求に基づくアクセスの実行に基づいてユーザモジュール102−1にアクセスする(ステップS1806)。
(ユーザモジュール102からサーバ111内のメモリ412へのアクセス要求)
つぎに、ユーザモジュール102からサーバ111内のメモリ412へのアクセス要求について説明する。本実施の形態では、ユーザモジュール102からメモリ412へのアクセスは、DMAによって実現される。上述したように、制御回路1406は、受け付け部105と、制御部106と、計測部と、を有する。また、上述したように、DMA回路1403は、アクセス部104を有する。
制御回路1406は、受け付け部211によって、ユーザモジュール102のうちのいずれかからのアクセス要求を受け付ける。アクセス要求には、DMA回路1403に与えるDMAのパラメータが含まれる。
制御回路1406は、受け付けたアクセス要求が示すアクセス先がアクセス要求の要求元のユーザモジュール102に割り当てられた記憶領域である場合は、アクセス要求に基づくアクセスをDMA回路1403に実行させる。具体的に制御回路1406は、アクセス要求が示すアクセス先が要求元のユーザモジュール102についてのアクセス許可設定レジスタ1413に設定されたアドレス範囲に含まれる場合、アクセス要求内のDMAのパラメータをレジスタ1411に設定する。
一方、制御回路1406は、割り当てられた記憶領域でない場合は、アクセス要求に基づくアクセスをDMA回路1403に実行させない。具体的に制御回路1406は、アクセス要求が示すアクセス先がアドレス範囲に含まれない場合、アクセス要求内のDMAのパラメータをDMA回路1403のレジスタ1411に設定しない。また、制御回路1406は、割り当てられた記憶領域でない場合、アクセス要求を要求元のユーザモジュール102に割り当てられた記憶領域へのアクセス要求に補正し、補正したアクセス要求をDMA回路1403に実行させる。具体的に制御回路1406は、アクセス要求が示すアクセス先がアドレス範囲に含まれない場合、アドレス範囲に含まれるようにアクセス要求内のDMAのパラメータを補正する。そして、制御回路1406は、補正したDMAのパラメータをレジスタ1411に設定する。
また、制御回路1406は、割り当てられた記憶領域である場合において、他のユーザモジュール102からのアクセス要求に基づくアクセスをDMA回路1403に実行させている場合、当該アクセスの終了を待機する。ここでは、あらたに受け付けられたアクセス要求の要求元のユーザモジュール102を第1ユーザモジュール102と称し、該他のユーザモジュール102を第2ユーザモジュールと称する。そして、制御回路1406は、終了後に、第1ユーザモジュール102からのアクセス要求に基づくアクセスをDMA回路1403に実行させる。
また、FPGA101内のいずれかのユーザモジュール102が、FPGA101とサーバ111とを接続するPCIe1405などの共用リソースを連続して使用すると、他のユーザモジュール102がPCIe1405を利用できなくなってしまう。そこで、制御回路1406は、累積データ量カウンタ1412によって、第1ユーザモジュール102からのアクセス要求に基づくDMA回路1403による所定時間当たりの第1データ量を計測する。制御回路1406は、累積データ量カウンタ1412によって、第2ユーザモジュール102からのアクセス要求に基づくアクセス部104による所定時間当たりの第2データ量を計測する。所定時間については、運用前にシステム100の開発者やデータセンサーの管理者によって決定されることとする。具体的には、制御回路1406は、第1ユーザモジュール102からのアクセス要求に基づいて転送したデータ量を累積し、所定時間間隔でサンプリングすることにより、所定時間当たりの転送したデータ量を計測する。
制御回路1406は、計測した第1データ量と、計測した第2データ量と、に基づいて、第1状態と第2状態とを切り替える。第1状態は、第1ユーザモジュール102からのアクセス要求に基づくアクセスをDMA回路1403に実行させる状態である。また、第2状態は、第2ユーザモジュール102からのアクセス要求に基づくアクセスをアクセス部104に実行させる状態である。
また、制御回路1406は、第1データ量と前記第1ユーザモジュール102についての閾値との比較結果と、第2データ量と第2ユーザモジュール102についての閾値との比較結果と、に基づいて、第1状態と第2状態と、を切り替える。各ユーザモジュール102についての閾値は、上述したアクセス許可設定レジスタ1413に設定された転送量の規制値である。例えば、制御回路1406は、第1状態の場合において、第1データ量が第1ユーザモジュール102についての規制値を超えた場合、第1状態から第2状態に切り替える。また、例えば、制御回路1406は、第2状態の場合において、第2データ量が第2ユーザモジュール102についての規制値を超えた場合、第2状態から第1状態に切り替える。より詳細な例については、図21を用いて後述する。このように、各ユーザモジュール102からのアクセス要求に基づくアクセスの実行を切り替えることにより、FPGA101のPCIe1405などの共用リソースを複数のユーザモジュール102が公平に利用可能となる。利用者が、FPGA101を共同利用する他の利用者を意識することなく、システム100を利用できる。
図19は、ユーザモジュールからサーバ内のメモリへのアクセス例を示す説明図である。ユーザモジュール102−1は、DMAのパラメータを生成し、生成したDMAのパラメータを含むアクセス要求を、ポート1402−1を介して管理モジュール103へ送信する(ステップS1901)。
制御回路1406は、ポート1402−1を介してアクセス要求を受信すると、ポート1402−1に基づいてアクセス要求の要求元を判別する。制御回路1406は、アクセス許可設定レジスタ1413に基づいて、DMAのパラメータが示すアクセス先のアドレスが要求元に割り当てられたアドレス範囲に含まれる場合、DMAのパラメータをレジスタ1411に設定する(ステップS1902,S1903)。また、ステップS1902,S1903において、制御回路1406は、アクセス先のアドレスが要求元についてのアドレス範囲に含まれない場合、DMAのパラメータを、アクセス先のアドレスがアドレス範囲に含まれるように補正する。そして、制御回路1406は、補正したDMAのパラメータをDMA回路1403内のレジスタ1411に設定する。
DMA回路1403は、レジスタ1411に設定されたDMAのパラメータに基づいてPCIe1405を介してサーバ111内のメモリ412にアクセスする(ステップS1904,S1905)。
図20は、アドレス判断処理の詳細例を示す説明図である。図20の上側では、BASE_ADDR_USER1とMASK_ADDR_USER1とは仮想マシンVM1の構築時に決定されるパラメータ例を示す。BASE_ADDR_USER2とMASK_ADDR_USER2とは仮想マシンVM2の構築時に決定されるパラメータ例を示す。図20の上側は、例えば、アクセス許可設定レジスタ1413やテーブル1700に各アドレス範囲が設定されることと同様のことを示す。
また、図20の下側では、仮想マシンVM1からのアクセス要求を受け付けた場合のデバイスドライバ502−cのアドレス判断処理、またはユーザモジュール102−1からのアクセス要求が発生した場合の管理モジュール103のアドレス判断処理を示す。アドレス判断処理では、アクセス要求が示すアクセス先の先頭アドレスと、アクセス要求が示すアクセス先のデータ長と、の入力を受け付ける。アドレス判断処理では、入力された先頭アドレスが、BASE_ADDR_USER1とMASK_ADDR_USER1とによって示されるアドレス範囲に含まれる場合、入力された先頭アドレスをそのまま出力する。アドレス判断処理では、入力された先頭アドレスがアドレス範囲に含まれない場合、入力された先頭アドレスがアドレス範囲に含まれるように補正した先頭アドレスを出力する。
また、アドレス判断処理では、入力されたデータ長が、MASK_ADDR_USER1が示すデータ長以内の場合、入力されたデータ長をそのまま出力する。アドレス判断処理では、入力されたデータ長が、MASK_ADDR_USER1が示すデータ長より大きい場合、入力されたデータ長をMASK_ADDR_USER1が示すデータ長以内となるように補正したデータ長を出力する。
図21は、データ量制限処理の詳細例を示す説明図である。図21では、複数の仮想マシンVMからアクセス要求を受け付けた場合のデバイスドライバ502−cのデータ量制限処理例を示す。また、複数のアクセス要求を受け付けた場合の管理モジュール103のデータ量制限処理も同様である。
number_of_requester()はアクセス要求の数を示す。number_of_requester()が1の場合、データ量制限処理では、1つのアクセス要求を受け付けた状態であるため、受け付けたアクセス要求に基づくアクセスが実行される。get_requesters_top()は、各仮想マシンVMからのアクセス要求を登録可能なキューの先頭のアクセス要求を取得する処理を示す。do_transfer()は、()内のアクセス要求に基づくアクセスを実行する処理を示す。
number_of_requester()が1より大きい場合、アクセス要求の要求元の仮想マシンVMについての「(規制値)−(直近の計測されたデータ量)」に基づいてアクセス要求を降順でソートする。データ量制限処理では、ソート後に、先頭のアクセス要求に基づくアクセスから順に実行する。
例えば、get_requesters()は、アクセス要求を登録可能なキューに登録されたすべてのアクセス要求を取得する処理を示す。reqsには、取得されたアクセス要求が登録される。reqsに登録されたアクセス要求が、各アクセス要求の要求元の仮想マシンVMについての「「規制値」−「直近の計測されたデータ量」」に基づいて、降順にソートされる。reqs.top()は、先頭に登録されたアクセス要求を取得する処理を示す。do_transfer()は、()内のアクセス要求に基づくアクセスを実行する処理を示し、ここではreqsの先頭に登録されたアクセス要求に基づくアクセスを実行する。
また、データ量制限処理では、データ量が規制値を超えたアクセス要求の要求元の仮想マシンVMを検出した場合、管理OS501−cに通知する。
以上説明したように、本実施の形態にかかる集積回路は、ある利用者に割り当てられたFPGA内の回路から、他の利用者に割り当てられた該FPGA内の他の回路に割り当てられた記憶領域へアクセスさせない。これにより、他の利用者の記憶領域がある利用者が利用可能な回路に干渉されるのを防ぐことができる。したがって、各利用者の処理環境を安定して機能させることができる。
また、本実施の形態にかかる集積回路は、ある利用者に割り当てられた回路からのアクセス要求のアクセス先が要求元の回路に割り当てられた記憶領域でない場合に、要求元の回路に割り当てられた記憶領域へのアクセス要求に補正する。これにより、他の利用者に割り当てられたFPGA内の回路がある利用者によって干渉されるのを防ぐことができる。したがって、各利用者の処理環境を安定して機能させることができる。
また、集積回路は1つのバスを介してサーバと接続されてあるため、集積回路内の複数の回路からサーバへのアクセス要求が重なる可能性がある。そのため、本実施の形態にかかる集積回路は、複数のアクセス要求がある場合、受け付けた時刻が早いアクセス要求に基づくアクセスが終了するのを待機して、受け付けた時刻が遅いアクセス要求に基づくアクセスを実行する。これにより、アクセス要求の発生順にアクセス要求に基づくアクセスを実行することができる。
また、集積回路内のいずれかの回路が集積回路と制御装置とを接続するバスを連続して使用すると、集積回路内の他の回路が制御装置内の記憶領域にアクセスできなくなる。そこで、本実施の形態にかかる集積回路は、集積回路内の回路ごとに回路から制御装置内の記憶領域への転送量を計測し、計測したデータ量に基づいて、いずれの回路からのアクセス要求に基づくアクセスを実行するかを切り替える。これにより、複数の利用者が集積回路を公平に利用可能となる。
また、制御装置は、実行中のアクセスによって転送したデータ量が実行中のアクセスについてのアクセス要求の要求元についての規制値を超えた場合、実行対象となるアクセス要求を切り替える。これにより、複数の利用者が集積回路を公平に利用可能となる。
以上説明したように、本実施の形態にかかる制御装置は、ある利用者から他の利用者に割り当てられた該FPGA内の回路へアクセスさせない。これにより、他の利用者に割り当てられたFPGA内の回路がある利用者によって干渉されるのを防ぐことができる。したがって、各利用者の処理環境を安定して機能させることができる。
また、本実施の形態にかかる制御装置は、ある利用者からのアクセス要求のアクセス先が要求元に割り当てられた集積回路内の回路でない場合に、要求元の利用者に割り当てられた回路へのアクセス要求に補正する。これにより、他の利用者に割り当てられた集積回路内の回路がある利用者によって干渉されるのを防ぐことができる。したがって、各利用者の処理環境を安定して機能させることができる。
また、制御装置は1つのバスを介して集積回路と接続されてあるため、複数の利用者から集積回路へのアクセス要求が重なる可能性がある。そのため、本実施の形態にかかる制御装置は、複数のアクセス要求がある場合、受け付けた時刻が早いアクセス要求に基づくアクセスが終了するのを待機して、受け付けた時刻が遅いアクセス要求に基づくアクセスを実行する。これにより、アクセス要求の発生順にアクセス要求に基づくアクセスを実行することができる。
また、いずれかの利用者が集積回路と制御装置とを接続するバスを連続して使用すると、他の利用者が集積回路を利用できなくなる。そこで、本実施の形態にかかる制御装置は、利用者ごとに利用者から集積回路内の回路への転送量を計測し、計測したデータ量に基づいて、いずれの利用者からのアクセス要求に基づくアクセスを実行するかを切り替える。これにより、複数の利用者が集積回路を公平に利用可能となる。
また、制御装置は、実行中のアクセスによって転送したデータ量が実行中のアクセスについてのアクセス要求の要求元についての規制値を超えた場合、実行対象となるアクセス要求を切り替える。これにより、複数の利用者が集積回路を公平に利用可能となる。
また、本実施の形態によれば、サーバ上で実行される仮想マシンとFPGAとの両方において、利用者間の処理環境が分離され、共用リソースが公平に利用可能となる。そのため、複数の利用者が同一のサーバ、FPGAを、安定した処理環境で共同利用可能となる。
また、クラウドコンピューティングのようにFPGAを複数の利用者によって共同で利用可能とすることにより、利用者の各々にFPGAを割り当てる場合と比較して、投資コストや運用コストを削減することができる。運用コストとは、例えば、時間的なコストなどである。また、本実施の形態で説明したシステムをASP(Application Service Provider)サービスとして提供可能であれば、様々な利用者が利用できるようになる。
また、例えば、専用ハードウェアやGPGPU(General−Purpose computing on Graphics Processing Unit)などの電力効率のよいハードウェアであっても、それらのハードウェアに適合しない処理であれば、消費電力あたりの性能が低下する可能性がある。専用ハードウェアやGPGPUなどに適さない処理であっても、FPGAを利用することにより、消費電力あたりの処理性能を向上させることが可能となる。そのため、本実施の形態におけるシステムでは、専用ハードウェアやGPGPUなどを利用する場合と比較して、電力効率を向上させることができる。また、専用ハードウェアを開発するほどの需要がないような回路であっても、FPGAによって実現することができる。
また、本実施の形態では、利用者がユーザモジュールを設計する例を挙げたが、予め用意されたユーザモジュールを利用者が選択して利用してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)内部の回路を再構成可能な集積回路であって、複数のコンピュータの各々に割り当てられた部分回路が各々異なる領域に構成された集積回路であって、
前記部分回路の各々に割り当てられた異なる記憶領域の各々にアクセス可能なアクセス部と、
前記部分回路のうちのいずれかからのアクセス要求を受け付ける受け付け部と、
前記受け付け部が受け付けた前記アクセス要求が示すアクセス先が前記アクセス要求の要求元の部分回路に割り当てられた記憶領域である場合は、前記アクセス要求に基づくアクセスを前記アクセス部に実行させ、割り当てられた前記記憶領域でない場合は、前記アクセス要求に基づくアクセスを前記アクセス部に実行させない制御部と、
を有することを特徴とする集積回路。
(付記2)前記制御部は、割り当てられた前記記憶領域でない場合、前記アクセス要求を前記要求元の部分回路に割り当てられた前記記憶領域へのアクセス要求に補正し、補正した前記アクセス要求を前記アクセス部に実行させることを特徴とする付記1に記載の集積回路。
(付記3)前記制御部は、割り当てられた前記記憶領域である場合において、前記部分回路のうちの前記要求元の部分回路(以下、「第1部分回路」と称する。)と異なる第2部分回路からのアクセス要求に基づくアクセスを前記アクセス部に実行させている場合、前記第2部分回路からの前記アクセス要求に基づくアクセスが終了した後に、前記第1部分回路からの前記アクセス要求に基づくアクセスを前記アクセス部に実行させることを特徴とする付記1または2に記載の集積回路。
(付記4)前記第1部分回路からの前記アクセス要求に基づく前記アクセス部による所定時間当たりの第1データ量と、前記第2部分回路からの前記アクセス要求に基づく前記アクセス部による前記所定時間当たりの第2データ量と、を計測する計測部を有し、
前記制御部は、前記計測部が計測した前記第1データ量と、前記計測部が計測した前記第2データ量と、に基づいて、前記第1部分回路からの前記アクセス要求に基づくアクセスを前記アクセス部に実行させる第1状態と、前記第2部分回路からの前記アクセス要求に基づくアクセスを前記アクセス部に実行させる第2状態と、を切り替えることを特徴とする付記3に記載の集積回路。
(付記5)前記制御部は、前記第1データ量と前記第1部分回路についての閾値との比較結果と、前記第2データ量と前記第2部分回路についての閾値との比較結果と、に基づいて、前記第1状態と、前記第2状態と、を切り替えることを特徴とする付記4に記載の集積回路。
(付記6)前記複数のコンピュータの各々が、物理的な装置または仮想的な装置のいずれかであることを特徴とする付記1〜5のいずれか一つに記載の集積回路。
(付記7)内部の回路を再構成可能な集積回路であって、複数のコンピュータの各々に割り当てられた部分回路が各々異なる領域に構成された集積回路が接続された制御装置であって、
前記複数のコンピュータのうちのいずれかから前記集積回路へのアクセス要求を受け付ける受け付け部と、
受け付けた前記アクセス要求が示すアクセス先が、前記アクセス要求の要求元のコンピュータに割り当てられた部分回路が構成された領域である場合は、前記アクセス要求に基づくアクセスを実行し、構成された前記領域でない場合は、前記アクセス要求に基づくアクセスを実行しない制御を行う制御部と、
を有することを特徴とする制御装置。
(付記8)前記制御部は、構成された前記領域でない場合に、前記アクセス要求を前記要求元のコンピュータに割り当てられた部分回路が構成された領域へのアクセス要求に補正し、補正した前記アクセス要求を実行することを特徴とする付記7に記載の制御装置。
(付記9)前記制御部は、構成された前記領域である場合において、前記コンピュータのうちの前記要求元のコンピュータ(以下、「第1コンピュータ」と称する。)と異なる第2コンピュータからのアクセス要求に基づくアクセスを実行している場合、前記第2コンピュータからの前記アクセス要求に基づくアクセスが終了した後に、前記第1コンピュータからの前記アクセス要求に基づくアクセスを実行することを特徴とする付記7または8に記載の制御装置。
(付記10)前記第1コンピュータからの前記アクセス要求に基づいて転送した所定時間当たりの第1データ量と、前記第2コンピュータからの前記アクセス要求に基づいて転送した前記所定時間当たりの第2データ量と、を計測する計測部を有し、
前記制御部は、前記第2コンピュータからのアクセス要求に基づくアクセスを実行している場合において、前記計測部が計測した前記第1データ量と、前記計測部が計測した前記第2データ量と、に基づいて、前記第1コンピュータからの前記アクセス要求に基づくアクセスを実行する第1状態と、前記第2コンピュータからの前記アクセス要求に基づくアクセスを実行する第2状態と、を切り替えることを特徴とする付記9に記載の制御装置。
(付記11)前記制御部は、前記第1データ量と前記第1コンピュータについての閾値との比較結果と、前記第2データ量と前記第2コンピュータについての閾値との比較結果と、に基づいて、前記第1状態と前記第2状態とを切り替えることを特徴とする付記10に記載の制御装置。
(付記12)前記集積回路は、前記第1コンピュータからの前記アクセス要求に基づいて転送した所定時間当たりの第1データ量と、前記第2コンピュータからの前記アクセス要求に基づいて転送した前記所定時間当たりの第2データ量と、を計測する計測部を有し、
前記制御部は、前記第2コンピュータからのアクセス要求に基づくアクセスを実行している場合において、前記計測部が計測した前記第1データ量と、前記計測部が計測した前記第2データ量と、に基づいて、前記第1コンピュータからの前記アクセス要求に基づくアクセスを実行する第1状態と、前記第2コンピュータからの前記アクセス要求に基づくアクセスを実行する第2状態と、を切り替えることを特徴とする付記9に記載の制御装置。
(付記13)前記複数のコンピュータの各々が、物理的な装置または仮想的な装置のいずれかであることを特徴とする付記7〜12のいずれか一つに記載の制御装置。
(付記14)内部の回路を再構成可能な集積回路であって、複数のコンピュータの各々に割り当てられた部分回路が各々異なる領域に構成された集積回路であって、前記部分回路の各々に割り当てられた異なる記憶領域の各々にアクセス可能なアクセス部を有する集積回路が、
前記部分回路のうちのいずれかからのアクセス要求を受け付け、
受け付けた前記アクセス要求が示すアクセス先が前記アクセス要求の要求元の部分回路に割り当てられた記憶領域である場合は、前記アクセス要求に基づくアクセスを前記アクセス部に実行させ、割り当てられた前記記憶領域でない場合は、前記アクセス要求に基づくアクセスを前記アクセス部に実行させない、
処理を実行することを特徴とする制御方法。
(付記15)内部の回路を再構成可能な集積回路であって、複数のコンピュータの各々に割り当てられた部分回路が各々異なる領域に構成された集積回路が接続された制御装置が、
前記複数のコンピュータのうちのいずれかから前記集積回路へのアクセス要求を受け付け、
受け付けた前記アクセス要求が示すアクセス先が、前記アクセス要求の要求元のコンピュータに割り当てられた部分回路が構成された領域である場合は、前記アクセス要求に基づくアクセスを実行し、構成された前記領域でない場合は、前記アクセス要求に基づくアクセスを実行しない、
処理を実行することを特徴とする制御方法。
(付記16)内部の回路を再構成可能な集積回路であって、複数のコンピュータの各々に割り当てられた部分回路が各々異なる領域に構成された集積回路が接続された制御装置に、
前記複数のコンピュータのうちのいずれかから前記集積回路へのアクセス要求を受け付け、
受け付けた前記アクセス要求が示すアクセス先が、前記アクセス要求の要求元のコンピュータに割り当てられた部分回路が構成された領域である場合は、前記アクセス要求に基づくアクセスを実行し、構成された前記領域でない場合は、前記アクセス要求に基づくアクセスを実行しない、
処理を実行させることを特徴とする制御プログラム。
(付記17)内部の回路を再構成可能な集積回路であって、複数のコンピュータの各々に割り当てられた部分回路が各々異なる領域に構成された集積回路が接続された制御装置に、
前記複数のコンピュータのうちのいずれかから前記集積回路へのアクセス要求を受け付け、
受け付けた前記アクセス要求が示すアクセス先が、前記アクセス要求の要求元のコンピュータに割り当てられた部分回路が構成された領域である場合は、前記アクセス要求に基づくアクセスを実行し、構成された前記領域でない場合は、前記アクセス要求に基づくアクセスを実行しない、
処理を実行させる制御プログラムを記録したことを特徴とする記録媒体。