【文献】
明宮佳宏,外4名,HwObjectを用いた実時間画像処理システム ソフトウェアからハードウェアをオブジェクトとして扱う,HwObjectモデルを用いたロボット向け実時間画像処理システム,情報処理学会研究報告,日本,社団法人情報処理学会,2004年 3月19日,Vol.2004,No.33,(2004-SLDM-114),pp.69〜74
【文献】
Jagath Weerasinghe, Francois Abel, Christoph Hagleitner, Andreas Herkersdorf,Enabling FPGAs in Hyperscale Data Centers,Proceedings of 12th Conference on Ubiquitous Intelligence and Computing (UIC-ATC-ScalCom-CBDCCom-Iop 2015),IEEE,2015年 8月10日,pp.1078-1086
【文献】
Fei Chen, Yi Shan, Yu Zhang, Yu Wang, Hubertus Franke, Xiaotao Chang, Kun Wang,Enabling FPGAs in the Cloud,Proceedings of the 11th ACM Conference on Computing Frontiers,ACM,2014年 5月20日,pp.1-10
【文献】
Suhaib A. Fahmy, Kizheppatt Vipin, Shanker Shreejith,Virtualized FPGA Accelerators for Efficient Cloud Computing,Proceedings of 7th International Conference on Cloud Computing Technology and Science (CloudCom),IEEE,2015年11月30日,pp.430-435
【文献】
Oliver Knodel, Rainer G. Spallek,Computing Framework for Dynamic Integration Reconfigurable Resources in a Cloud,Proceedings of 2015 Euromicro Conference on Digital System Design,IEEE,2015年 8月26日,pp.337-344
【文献】
Stuart Byma, J. Gregory Steffan, Hadi Bannazadeh, Alberto Leon-Garcia, Paul Chow,FPGAs in the Cloud : Booting Virtualized Hardware Accelerators with OpenStack,Proceedings of 22nd Annual International Symposium on Field-Programmable Custom Computing Machines,IEEE,2014年 5月11日,pp.109-116
(58)【調査した分野】(Int.Cl.,DB名)
前記ホストインターフェースが、前記それぞれの再構成可能な論理領域の前記アプリケーション論理の最大転送サイズを実施するようにさらに構成される、請求項1または2に記載の装置。
前記ホストインターフェースが、前記ホスト論理の制御レジスタのプログラムされた値に基づいて、前記それぞれの再構成可能な論理領域の前記アプリケーション論理によって生成された前記データ転送の帯域幅を分配するように構成される、請求項1〜4のいずれかに記載の装置。
前記ホスト論理の少なくとも一部分が、前記ホストインターフェースで受信した認可されたトランザクションに応じて、前記装置にロードされる、再構成可能な論理である、請求項1〜5のいずれかに記載の装置。
前記ホスト論理が、前記それぞれの再構成可能な論理領域の前記アプリケーション論理とパブリック周辺機器との間に変換層をさらに含み、前記変換層が、前記アプリケーション論理と前記パブリック周辺機器との間のデータ転送をフォーマットするように適合される、請求項1〜6のいずれかに記載の装置。
前記ホスト論理を、共有された周辺機器と、前記第1のアプリケーション論理構造および前記第2のアプリケーション論理構造との間のインターフェースとして使用することをさらに含む、請求項10に記載の方法。
前記ホスト論理を使用して、前記共有された周辺機器と、前記第1のアプリケーション論理構造および前記第2のアプリケーション論理構造との間のデータ転送の帯域幅を分配することをさらに含む、請求項11に記載の方法。
前記ホスト論理を使用して、前記共有された周辺機器と、前記第1のアプリケーション論理構造および前記第2のアプリケーション論理構造との間のデータ転送のサイズを実施することをさらに含む、請求項11または12に記載の方法。
前記ホスト論理を使用して、前記第1のアプリケーション論理構造から前記共有された周辺機器の第1のアドレス範囲へのアクセスを制限し、かつ前記第2のアプリケーション論理構造から前記共有された周辺機器の第2のアドレス範囲へのアクセスを制限することをさらに含む、請求項11〜13のいずれかに記載の方法。
前記第1のアプリケーション論理構造または前記第2のアプリケーション論理構造を分解することに応じて、内部メモリ、外部メモリ、または構成メモリのうちの1つ以上をクリアすることをさらに含む、請求項14に記載の方法。
【発明を実施するための形態】
【0007】
一部のユーザは、コンピューティングタスクを実行するための専用の、または高度に専門のハードウェアを使用することを望む場合がある。専門コンピューティングリソースを一組の再使用可能な一般的コンピューティングリソース内に提供するための1つの解決策は、(フィールドプログラマブルゲートアレイ(FPGA)を含むアドインカードをサーバコンピュータに提供すること等によって)一般的コンピューティングリソースの中の選択として構成可能な論理プラットフォームを備えるサーバコンピュータを提供することである。本明細書で使用するとき、構成可能な論理プラットフォームおよび構成可能なハードウェアプラットフォームという用語は、交換可能である。構成可能な論理(論理回路)は、構成可能な論理に適用またはロードされる構成データによって指定される論理機能を行うようにプログラムまたは構成することができるハードウェアである。例えば、コンピューティングリソースのユーザは、構成可能な論理を構成するための仕様(ハードウェア記述言語で書かれたソースコード等)を提供することができ、構成可能な論理は、仕様に従って構成することができ、構成された論理は、ユーザのタスクを行うために使用することができる。しかしながら、コンピューティング設備の低レベルハードウェアへのユーザアクセスを可能にすることは、潜在的に、コンピューティング設備内のセキュリティおよびプライバシーの問題につながり得る。特定の一例として、あるユーザによる不良の、または悪意のある設計は、構成された論理がコンピューティング設備内の1つ以上のサーバコンピュータを故障(例えば、クラッシュ、ハング、または再起動)させた場合、またはネットワークサービスが拒否された場合に、潜在的に、他のユーザに対するサービスの拒否を生じさせることがあり得る。別の具体的な例として、あるユーザによる不良の、または悪意のある設計は、他のユーザのメモリ空間のメモリに対する読み出しおよび/または書き込みが可能である場合に、潜在的に、別のユーザによるデータの破損または読み出しを生じさせ得る。別の具体的な例として、あるユーザによる不良の、または悪意のある設計は、構成された論理が、デバイスに構成可能な論理プラットフォームの電力消費または温度仕様を超えさせる回路(リング発振器等)を含む場合、潜在的に、構成可能な論理プラットフォームを故障させ得る。
【0008】
本明細書で説明されるように、計算サービスの設備は、様々なコンピューティングリソースを含むことができ、コンピューティングリソースの1つのタイプとしては、構成可能な論理プラットフォームを備えるサーバコンピュータを挙げることができる。構成可能な論理プラットフォームは、コンピューティングリソースのハードウェア(例えば、構成可能な論理)がユーザによってカスタマイズされるように、コンピュータシステムのユーザによってプログラムまたは構成することができる。例えば、ユーザは、サーバコンピュータに密結合されたハードウェアアクセラレータとして機能するように、構成可能な論理(論理回路)をプログラムすることができる。特定の一例として、ハードウェアアクセラレータは、サーバコンピュータの、周辺機器相互接続エクスプレス(PCI−Express、またはPCIe)等のローカル相互接続を介してアクセス可能であり得る。ユーザは、サーバコンピュータ上のアプリケーションを実行することができ、アプリケーションのタスクは、PCIeトランザクションを使用してハードウェアアクセラレータによって行うことができる。ハードウェアアクセラレータをサーバコンピュータに密結合することによって、アクセラレータとサーバコンピュータとの間の待ち時間を低減させることができ、これは、潜在的に、アプリケーションの処理速度を高めることができる。
【0009】
1つの実施形態において、構成可能な論理プラットフォームは、構成可能なハードウェアを、コンピューティングリソースを共有している複数のユーザによる適用を加速することができるように、コンピュータシステムの複数のユーザによってプログラムまたは構成することができる。複数のユーザがリソースを共有するときに、追加的なプライバシー、セキュリティ、および可用性の懸念がもたらされ得る。例えば、あるユーザは、潜在的に、サーバコンピュータのCPUと構成可能な論理プラットフォームとの間の帯域幅の不公平な共有を消費することによって、別のユーザを減速させ得る。別の例として、あるユーザは、潜在的に、構成可能な論理プラットフォームの任意の共有されたリソースの不公平な共有を消費することによって、別のユーザを減速させ得る。別の例として、あるユーザは、潜在的に、構成可能な論理プラットフォームの応答時間または他の性能尺度を観察することによって、別のユーザの活動を監視し得る。
【0010】
計算サービスプロバイダは、構成可能な論理プラットフォームのホスト論理内の各ユーザのハードウェアアクセラレータ(本明細書において、アプリケーション論理とも称される)をラップまたはカプセル化することによって、潜在的に、コンピューティングリソースのプライバシー、セキュリティ、および/または可用性を高めることができる。アプリケーション論理をカプセル化することは、アプリケーション論理のアクセスを、構成リソース、物理インターフェース、構成可能な論理プラットフォームのハードマクロ、および構成可能な論理プラットフォームの種々の周辺機器に限定または制限することを含むことができる。例えば、計算サービスプロバイダは、それがホスト論理およびアプリケーション論理を含むように、構成可能な論理プラットフォームのプログラミングを管理することができる。ホスト論理は、アプリケーション論理がその中で機能する、フレームワークまたはサンドボックスを提供することができる。特に、ホスト論理は、アプリケーション論理と通信することができ、また、アプリケーション論理の機能を抑制することができる。例えば、ホスト論理は、アプリケーション論理がローカル相互接続上のシグナリングを直接制御することができないように、ローカル相互接続(例えば、PCIe相互接続)とアプリケーション論理との間でブリッジ機能を行うことができる。ホスト論理は、ローカル相互接続上のパケットまたはバストランザクションを形成し、プロトコル要件を満たすことを確実にする役割を果たすことができる。ローカル相互接続上の処理を制御することによって、ホスト論理は、潜在的に、不正な形式のトランザクションまたは境界外の場所に対するトランザクションを防止することができる。別の例として、ホスト論理は、計算サービスプロバイダによって提供されるサービスを使用することなく、アプリケーション論理が構成可能な論理プラットフォームを再プログラムさせることができないように、構成アクセスポートを隔離することができる。別の例として、ホスト論理は、ローカル相互接続を通じて、および構成可能な論理プラットフォームの内部リソースに対するバーストサイズおよび帯域幅を管理して、潜在的に、決定性およびサービスの質を高めることができる。ローカル相互接続に、および内部リソースに帯域幅を割り当てることによって、各ユーザは、より決定的な性能を受信することができ、ある顧客は、別の顧客が構成可能な論理プラットフォームのリソースを共有しているかどうかを直接的または間接的に判定することができない。
【0011】
図1は、構成可能な論理プラットフォーム110およびサーバコンピュータ120を含む、コンピューティングシステム100の一実施例を示すシステム図である。例えば、サーバコンピュータ120は、複数のエンドユーザのアプリケーションプログラムを実行するために使用することができる。具体的には、サーバコンピュータ120は、1つ以上の中央処理ユニット(CPU)122と、メモリ124と、周辺機器インターフェース126とを含むことができる。CPU122は、メモリ124に記憶された命令を実行するために使用することができる。例えば、各エンドユーザは、メモリ124にロードされ、ハイパーバイザまたはオペレーティングシステムカーネルによって管理される、異なる仮想マシン128A〜Bを実行していることがあり得る。各仮想マシン128A〜Bは、異なるアプリケーションプログラムをロードすることができ、CPU122は、アプリケーションプログラムの命令を実行することができる。各アプリケーションプログラムは、周辺機器インターフェース126を使用してトランザクションを発行することによって、構成可能な論理プラットフォーム110のハードウェアアクセラレータと通信することができる。別の例として、仮想マシン128A〜Bのうちの1つ(例えば、128A)は、サーバコンピュータ120を管理する計算サービスの制御プレーンコンピュータ等の1つ以上のリモートサーバコンピュータ管理(図示せず)と通信して、管理または制御カーネルを実行していることがあり得る。リモートサーバコンピュータは、仮想マシン128Aで実行する制御カーネルを介してリモート仮想マシンが構成可能な論理プラットフォーム110のハードウェアアクセラレータと通信することができるように、仮想マシン128Aで実行する制御カーネルと通信する仮想マシンを実行していることがあり得る。
【0012】
本明細書で使用するとき、トランザクションは、構成要素間の通信である。具体的な例として、トランザクションは、読み出し要求、書き込み、読み出し応答、メッセージ、割り込み、または情報の構成要素間での他の種々の交換であり得る。トランザクションは、複数の構成要素によって共有されるバス上で起こり得る。具体的には、バスの信号ラインの値は、バスの通信プロトコルを使用してバスに関する情報を転送するように調整することができる。トランザクションは、アドレスフェーズおよび1つ以上のデータフェーズ等の1つ以上のフェーズを通じて起こり得る。追加的または代替的に、トランザクションは、2つの構成要素を接続するポイントツーポイント相互接続の1つ以上のシリアルラインを使用して起こり得る。具体的には、トランザクションは、ポイントツーポイント相互接続を通じて伝送されるパケットで送信することができる。
【0013】
周辺機器インターフェース126は、ローカルまたはフロント側相互接続を使用するCPU122と、周辺機器または拡張相互接続を使用する構成要素との間で通信するためのブリッジを含むことができる。具体的には、周辺機器インターフェース126は、サーバコンピュータ120を構成可能な論理プラットフォーム110および/または他の構成要素に接続するために使用される物理的相互接続に接続することができる。例えば、物理的相互接続は、共有されたパラレルバスまたはシリアルポイントツーポイントリンクを使用して複数の構成要素を共に接続するための拡張バスとすることができる。具体的な一例として、物理的相互接続は、PCIエクスプレス、PCI、またはサーバコンピュータ120を構成可能な論理プラットフォーム110に密結合させる別の物理的相互接続とすることができる。したがって、例えば、サーバコンピュータ120および構成可能な論理プラットフォーム110は、PCIバストランザクションまたはPCIeパケットを使用して通信することができる。
【0014】
構成可能な論理プラットフォーム110は、複数の再構成可能な論理領域140A〜Bと、一般に111で示されるホスト論理と、を含むことができる。1つの実施形態において、構成可能な論理プラットフォーム110は、物理的相互接続の拡張スロットに挿入されるように構成される印刷回路基板にマウントされた、1つ以上の集積回路を含むことができる。1つの例として、1つ以上の集積回路は、単一のFPGAとすることができ、異なる再構成可能な論理領域140A〜Bは、FPGAの異なる領域または範囲とすることができる。別の例として、1つ以上の集積回路は、複数のFPGAとすることができ、異なる再構成可能な論理領域140A〜Bは、異なるそれぞれのFPGAまたはFPGAのグループに対応することができる。具体的な一例として、構成可能な論理プラットフォーム110は、8つのFPGAを含むことができ、特定の再構成可能な論理領域140A〜Bは、1つ、2つ、または4つのFPGAのグループに対応することができる。別の例として、1つ以上の集積回路は、ハードワイヤード回路および複数の異なる再構成可能な論理領域140A〜Bを有する特定用途向け集積回路(ASIC)を含むことができる。特に、ホスト論理の全部または一部分は、ハードワイヤード回路を含むことができる。別の実施形態において、構成可能な論理プラットフォーム110は、サーバコンピュータ120のマザーボードにマウントされた1つ以上の集積回路を含むことができる。別の実施形態において、構成可能な論理プラットフォーム110は、システムオンチップ(SOC)、またはCPU122を含むマルチチップモジュール上に統合することができる。
【0015】
ホスト論理111は、ホストインターフェース112と、管理機能114と、複数のデータパス機能116A〜Bと、を含むことができる。各再構成可能な論理領域140A〜Bは、ハードウェアアクセラレータまたはアプリケーション論理を実装するように構成可能であるハードウェアを含むことができる。換言すれば、各再構成可能な論理領域140A〜Bは、所与の機能を行うようにプログラム可能である論理を含むことができる。例えば、再構成可能な論理領域140A〜Bは、組み合わせ論理および/またはルックアップテーブル(LUT)、ならびに連続論理要素(フリップフロップおよび/またはラッチ等)を備えるプログラマブル論理ブロック、プログラマブルルーティングおよびクロッキングリソース、プログラマブル分散型およびブロックランダムアクセスメモリ(RAM)、デジタル信号処理ビットスライス(DSP)、ならびにプログラマブル入力/出力ピンを含むことができる。例示を容易にするために、接尾辞が追加的な明確性を提供することができる(例えば、再構成可能な論理領域140Aを再構成可能な論理領域140等と称することができる)限り、以下の説明において、一般に、アルファベットの接尾辞が省略されることに留意されたい。また、2つの再構成可能な論理領域140が
図1に例示されるが、異なる量(例えば、4個、8個、または10個等)の再構成可能な論理領域140が可能であることにも留意されたい。
【0016】
ホスト論理は、再構成可能な論理領域140をカプセル化するために使用することができる。例えば、再構成可能な論理領域140は、再構成可能な論理領域140が実行することができる機能を制限されるように、予め定義されたインターフェースを使用して構成可能なハードウェアプラットフォームの種々の構成要素とインターフェースすることができる。1つの例として、再構成可能な論理領域は、再構成可能な論理領域140が構成される前にロードされる静的ホスト論理とインターフェースすることができる。例えば、静的ホスト論理は、構成可能な論理プラットフォーム110の異なる構成要素を再構成可能な論理領域140から隔離する論理を含むことができる。1つの例として、構成可能な論理プラットフォーム110のハードマクロ(物理的相互接続上でシグナリングするための構成アクセスポートまたは回路等)は、再構成可能な論理領域140がハードマクロに直接アクセスすることができないようにマスキングすることができる。加えて、再構成可能な論理領域140A〜Bは、互いにマスキングすることができる。したがって、再構成可能な論理領域140Aは、再構成可能な論理領域140Bと、および逆も同様に、インターフェースすることができない。
【0017】
ホスト論理は、サーバコンピュータ120と通信するためのホストインターフェース112を含むことができる。具体的には、ホストインターフェース112は、物理的相互接続に接続するために、および物理的相互接続の通信プロトコルを使用してサーバコンピュータ120と通信するために使用することができる。1つの例として、サーバコンピュータ120は、構成可能な論理プラットフォーム110と関連付けられたアドレスを含むトランザクションを使用して、構成可能な論理プラットフォーム110と通信することができる。同様に、構成可能な論理プラットフォーム110は、サーバコンピュータ120と関連付けられたアドレスを含むトランザクションを使用して、サーバコンピュータ120と通信することができる。物理的相互接続に接続された種々のデバイスと関連付けられたアドレスは、システム設計者によって予め定義することができ、また、デバイスに存在するソフトウェアにプログラムすることができる。追加的または代替的に、通信プロトコルは、列挙シーケンスを含むことができ、物理的相互接続に接続されたデバイスのクエリが行われ、アドレスは、列挙シーケンスの一部としてデバイスのそれぞれに割り当てられる。1つの例として、周辺機器インターフェース126は、物理的相互接続に接続されたデバイスのそれぞれに、クエリを発行することができる。ホストインターフェース112は、いくつの機能が構成可能な論理プラットフォーム110に存在するか、および構成可能な論理プラットフォーム110の機能のそれぞれと関連付けられたアドレス範囲のサイズ等の、構成可能な論理プラットフォーム110に関する情報を提供することによって、クエリに応答することができる。この情報に基づいて、物理的相互接続に接続された各デバイスの各機能に非オーバーラップのアドレス範囲が割り当てられるように、コンピューティングシステム100のアドレスを割り当てることができることができる。列挙の後に、ホストインターフェース112は、トランザクションのアドレスに基づいて、構成可能な論理プラットフォーム110の機能にトランザクションをルーティングすることができる。
【0018】
ホスト論理は、構成可能な論理プラットフォーム110を管理および構成するために使用することができる、管理機能114を含むことができる。コマンドおよびデータは、管理機能114のアドレス範囲を標的にするトランザクションを使用して、サーバコンピュータ120から管理機能114に送信することができる。例えば、サーバコンピュータ120は、管理機能114のアドレス範囲内の1つ以上のアドレスにマッピングされる構成可能な論理プラットフォーム110のデータ(例えば、構成データ)および/または書き込み制御レジスタを転送するためのトランザクションを生成することができる。制御レジスタを書き込むことは、構成可能な論理プラットフォーム110に、構成可能な論理プラットフォーム110を構成および管理すること等の動作を行わせることができる。具体的な一例として、再構成可能な論理領域140に実装されるべきアプリケーション論理に対応する構成データは、物理的相互接続を通じて、サーバコンピュータ120から1つ以上のトランザクションの構成可能な論理プラットフォーム110に伝送することができる。構成データを有する再構成可能な論理領域140を構成するためのトランザクション150は、サーバコンピュータ120から構成可能な論理プラットフォーム110に伝送することができる。具体的には、トランザクション150は、再構成可能な論理領域140の構成を始める管理機能114のアドレス空間にマッピングされた制御レジスタに値を書き込むことができる。再構成可能な論理領域140Aを構成すること、または再構成可能な論理領域140Bを構成することの間で、異なる値および/または異なる制御レジスタを使用することができる。1つの実施形態において、構成データは、再構成可能な論理領域140の構成を開始する前に、サーバコンピュータ120から構成可能な論理プラットフォーム110に転送することができる。例えば、管理機能114は、構成データを、構成可能な論理プラットフォーム110によってアクセス可能なオンチップまたはオフチップメモリに記憶させ、構成データは、再構成可能な論理領域140が構成されているときに、メモリから読み出すことができる。別の実施形態において、構成データは、再構成可能な論理領域140の構成を開始した後に、サーバコンピュータ120から構成可能な論理プラットフォーム110に転送することができる。例えば、制御レジスタは、再構成可能な論理領域140の構成を開始するように書き込むことができ、構成データは、構成データを含むトランザクションが管理機能114によって処理されるときに、再構成可能な論理領域140にストリーミングまたはロードすることができる。
【0019】
ホスト論理は、サーバコンピュータ120と構成可能な論理プラットフォーム110との間で情報(例えば、アプリケーション入力/出力160)を交換するために使用することができる、データパス機能116を含むことができる。具体的には、データパス機能116Aは、サーバコンピュータ120と再構成可能な論理領域140Aとの間で情報を交換するために使用することができ、データパス機能116Bは、サーバコンピュータ120と再構成可能な論理領域140Bとの間で情報を交換するために使用することができる。コマンドおよびデータは、データパス機能116のアドレス範囲を標的にするトランザクションを使用して、サーバコンピュータ120からデータパス機能116に送信することができる。具体的には、データパス機能116Aは、第1のアドレス範囲を割り当てることができ、データパス機能116Bは、アドレスの第2の異なる範囲を割り当てることができる。構成可能な論理プラットフォーム110は、サーバコンピュータ120と関連付けられたアドレスを含むトランザクションを使用して、サーバコンピュータ120と通信することができる。
【0020】
データパス機能116は、ホストインターフェース112と再構成可能な論理領域140との間の変換層として作用することができる。具体的には、データパス機能116は、再構成可能な論理領域140から情報を受信するためのインターフェースを含むことができ、データパス機能116は、ホストインターフェース112から伝送するための情報をフォーマットすることができる。情報をフォーマットすることは、1つ以上のトランザクションのための制御情報を生成することと、プロトコル仕様を満たすようにサイズが決定されるブロックにデータを分割することとを含むことができる。したがって、データパス機能116は、再構成可能な論理領域140と物理的相互接続との間に間置することができる。この様態で、再構成可能な論理領域140は、潜在的に、トランザクションをフォーマットすること、および物理的相互接続を駆動するために使用される信号を直接制御することをブロックすることができ、よって、再構成可能な論理領域140を使用して、物理的相互接続のプロトコルに不注意に、または悪意をもって違反することができない。
【0021】
ホストインターフェース112は、データパス機能116A〜Bと物理的相互接続との間の層として間置することができる。ホストインターフェース112は、物理的相互接続を通じたトランザクションのための帯域幅、サイズ、および他のサービスの質を実施することができる。例えば、ホストインターフェース112は、データパス機能116A〜Bおよび管理機能114に由来するトランザクションのための送出帯域幅を分配することができる。1つの例として、データパス機能116A〜Bのそれぞれに割り当てられた送出帯域幅は、物理的相互接続の使用可能帯域幅の半分として指定することができる。管理機能114に由来するトランザクションは、低頻度であるが、高優先度であり得る。したがって、管理機能114には、物理的相互接続を通じたトランザクションの送信について最高優先度を与えることができる。代替的に、管理機能114は、データパス機能116A〜Bに割り当てられた帯域幅のバジェットから取り出されるべき一定量の帯域幅を割り当てることができる。各機能に割り当てられる帯域幅のパーセンテージは、固定すること、またはプログラムすることができる。例えば、管理機能114のアドレス空間にマッピングされた1つまたは複数の制御レジスタは、各機能に割り当てられる帯域幅の分配をプログラムするために使用することができる。ホストインターフェース112はまた、データパス機能116A〜Bおよび管理機能114に由来するトランザクションの最大サイズトランザクションも制御することができる。より多くのデータを、潜在的に、トランザクション(パケットヘッダ等)の所与の量のオーバーヘッドまたは制御情報のために転送することができるので、物理的相互接続は、トランザクションの最大サイズが増加させたときに、より効率的に利用することができる。しかしながら、以前のトランザクションが完了するまで、その後のトランザクションを開始することができないので、より大きいトランザクションサイズは、後続のトランザクションの待ち時間を増加させる場合がある。したがって、物理的相互接続を通じたトランザクションサイズは制御するが、トランザクションの待ち時間および/または有効帯域幅の利用が影響を受ける場合がある。トランザクションの最大サイズは、ホスト論理の固定パラメータとすることができ、または管理機能114のアドレス空間にマッピングされた1つもしくは複数の制御レジスタを使用してプログラムすることができる。
【0022】
要約すれば、サーバコンピュータ120上で稼働する複数の顧客のアプリケーションは、構成可能な論理プラットフォーム110の再構成可能なハードウェアを使用して加速(促進)することができる。1つの例として、サーバコンピュータ120は、複数の仮想マシン128A〜Bをホストすることができ、各仮想マシンは、異なるユーザによって動作される。仮想マシン128A〜Bは、構成可能な論理プラットフォーム110にロードされるアプリケーション論理によって加速することができるアプリケーションを稼働させることができる。具体的には、仮想マシン128Aは、再構成可能な論理領域140Aにロードされたアプリケーション論理によって加速することができるアプリケーションを実行することができる。アプリケーションは、データパス機能116Aにアドレッシングされたトランザクションを使用して、再構成可能な論理領域140Aと通信することができる。再構成可能な論理領域140Aからの応答は、データパス機能116Aに由来するトランザクションを使用して、仮想マシン128A上で実行するアプリケーションに返すことができる。データパス機能116Aからのトランザクションに対応する帯域幅は、データパス機能116B等の他の機能からのトランザクションに対応する帯域幅の間で分配することができる。帯域幅および/またはトランザクションのサイズを制御することによって、アクセラレータの応答を、潜在的に、より決定的とすることができ、あるユーザが、別のユーザが構成可能な論理プラットフォーム110のアクセラレータを使用していると判定することをより困難にすることができる。
【0023】
加えて、異なる仮想マシン128A〜Bおよびアプリケーション論理設計(アプリケーション論理構造)は、互いに隔離して、コンピューティングインフラストラクチャの一部分を共有している間、異なる顧客にセキュアかつプライベートなコンピューティング環境を提供することができる。例えば、サーバコンピュータ120上で実行するホスト論理111および/またはハイパーバイザは、顧客が互いに隔離されるように、異なる仮想マシン128A〜Bおよびアプリケーション論理設計へのアクセスを制限することができる。具体的には、ホスト論理111および/またはハイパーバイザは、ある顧客によって実行される仮想マシン(例えば、128A)が、異なる顧客のアプリケーション論理(例えば、140B)にアクセスことを防止することができ、ホスト論理111および/またはハイパーバイザは、ある顧客によって実行される仮想マシン(例えば、128A)が、異なる顧客によって実行される仮想マシン(例えば、128B)にアクセスすることを防止することができ、ホスト論理111および/またはハイパーバイザは、ある顧客のアプリケーション論理(例えば、140A)が、異なる顧客によって実行される仮想マシン(例えば、128B)にアクセスすることを防止することができる。加えて、ホスト論理111は、ある顧客のアプリケーション論理(例えば、140A)が、異なる顧客のアプリケーション論理(例えば、140B)にアクセスすることを防止することができる。したがって、システム100は、潜在的に、再構成可能な論理領域140A〜Bにプログラムされた仮想マシン128A〜Bおよびアプリケーション論理設計のためのセキュアな環境を提供することができる。
【0024】
図2は、構成可能なハードウェアプラットフォーム210およびサーバコンピュータ220を含む、システム200の一実施例を示すシステム図である。サーバコンピュータ220および構成可能なハードウェアプラットフォーム210は、物理的相互接続230を介して接続することができる。例えば、物理的相互接続230は、PCIエクスプレス、PCI、またはサーバコンピュータ220を構成可能なハードウェアプラットフォーム210に密結合させる任意の他の相互接続とすることができる。サーバコンピュータ220は、CPU222と、メモリ224と、相互接続インターフェース226とを含むことができる。例えば、相互接続インターフェース226は、サーバコンピュータ220がサーバコンピュータ220の外部のデバイスにアクセスすることができるように、ブリッジング能力を提供することができる。例えば、相互接続インターフェース226は、PCIエクスプレスで使用されるようなルートコンプレックス機能等の、ホスト機能を含むことができる。
【0025】
構成可能なハードウェアプラットフォーム210は、再構成可能な論理ブロックと、他のハードウェアと、を含むことができる。再構成可能な論理ブロックは、構成可能なハードウェアプラットフォーム210の種々の機能を実行するように構成またはプログラムすることができる。再構成可能な論理ブロックは、ブロックがデバイスの寿命を通じて異なる機能を行うことができるように、異なる構成で複数回プログラムすることができる。構成可能なハードウェアプラットフォーム210の機能は、各機能の目的もしくは能力に基づいて、または機能が構成可能なハードウェアプラットフォーム210にロードされる時期に基づいて分類することができる。例えば、構成可能なハードウェアプラットフォーム210は、静的論理、再構成可能な論理、およびハードマクロを含むことができる。静的論理、再構成可能な論理、ハードマクロのための機能は、異なる時間に構成することができる。したがって、構成可能なハードウェアプラットフォーム210の機能は、漸増的にロードすることができる。
【0026】
ハードマクロは、予め定義された機能を行うことができ、また、構成可能なハードウェアプラットフォーム210の電源がオンになったときに利用可能であり得る。例えば、ハードマクロは、特定の機能を行うハードワイヤード回路を含むことができる。具体的な例として、ハードマクロは、構成可能なハードウェアプラットフォーム210を構成するための構成ポート211と、シリアルデータを通信するためのシリアライザ−デシリアライザトランシーバ(SERDES)212と、(ダブルデータレート(DDR)DRAM281等の)オフチップメモリのシグナリングおよび制御を行うためのメモリまたはダイナミックランダムアクセスメモリ(DRAM)コントローラ213と、記憶デバイス282のシグナリングおよび制御を行うための記憶装置コントローラ214と、を含むことができる。
【0027】
静的論理は、ブート時間に、再構成可能な論理ブロックにロードすることができる。例えば、静的論理の機能を指定する構成データは、ブートアップシーケンス中に、オンチップまたはオフチップフラッシュメモリデバイスからロードすることができる。ブートアップシーケンスは、(例えば、供給電圧が閾値未満から閾値を超えるまで移行したことを検出すること等によって)パワーイベントを検出すること、およびパワーイベントに応じてリセット信号をデアサートすることを含むことができる。初期化シーケンスは、パワーイベントまたはリセットがデアサートされることに応じて起動することができる。初期化シーケンスは、再構成可能な論理ブロックの少なくとも一部分が静的論理の機能によってプログラムされるように、フラッシュデバイスに記憶された構成データを読み込むことと、構成ポート211を使用して、構成データを構成可能なハードウェアプラットフォーム210にロードすることと、を含むことができる。静的論理がロードされた後に、構成可能なハードウェアプラットフォーム210は、ローディング状態から、静的論理の機能を含む動作状態に移行することができる。
【0028】
再構成可能な論理(論理回路)は、(例えば、静的論理がロードされた後に)構成可能なハードウェアプラットフォーム210が動作している間に、再構成可能な論理ブロックにロードすることができる。再構成可能な論理に対応する構成データは、オンチップもしくはオフチップメモリに記憶することができ、および/または構成データは、構成可能なハードウェアプラットフォーム210のインターフェース(例えば、相互接続インターフェース256)から受信もしくはストリーミングすることができる。再構成可能な論理は、非オーバーラップ領域(重複しない領域)に分割することができ、静的論理とインターフェースすることができる。例えば、再構成可能な領域は、アレイ構造で、または他の規則的もしくは半規則的な構造で配設することができる。例えば、アレイ構造は、ホールまたは妨害物を含むことができ、ハードマクロは、アレイ構造内に配置される。異なる再構成可能な領域は、静的論理として指定することができるプログラマブル信号ラインを使用することによって、互いに、静的論理と、およびハードマクロと通信することが可能である。異なる再構成可能な領域は、第1の再構成可能な領域を第1の時点で構成することができ、第2の再構成可能な領域を第2の時点で構成することができるように、異なる時点で構成することができる。
【0029】
構成可能なハードウェアプラットフォーム210の機能は、目的または機能の能力に基づいて、分割または分類することができる。例えば、機能は、制御プレーン機能、データプレーン機能、および共有された機能に分類することができる。制御プレーンは、構成可能なハードウェアプラットフォーム210の管理および構成に使用することができる。データプレーンは、構成可能なハードウェアプラットフォーム210にロードされたアクセラレータ論理とサーバコンピュータ220との間のデータ転送を管理するために使用することができる。共有された機能は、制御プレーンおよびデータプレーンによって使用することができる。制御プレーン機能は、データプレーン機能をロードする前に、構成可能なハードウェアプラットフォーム210にロードすることができる。制御プレーンは、構成可能なハードウェアプラットフォーム210のホスト論理を含むことができる。データプレーンは、アプリケーション論理240A〜Bを伴って構成された、カプセル化された再構成可能な論理の複数の領域を含むことができる。
図2の実例では、カプセル化された再構成可能な論理240A〜Bの異なる領域が重なっているように示されるが、異なる領域240A〜Bの物理的な場所は、一般に、1つ以上の集積回路の非オーバーラップ領域に配置されることに留意されたい。また、カプセル化された再構成可能な論理240A〜Bの2つの異なる領域だけが示されるが、より多くの領域が可能である。
【0030】
一般に、制御プレーン、およびデータプレーンの異なる領域は、構成可能なハードウェアプラットフォーム210の異なる機能を使用してアクセスすることができ、異なる機能が異なるアドレス範囲に割り当てられる。具体的には、制御プレーン機能は、管理機能252を使用してアクセスすることができ、データプレーン機能は、データパス機能またはアプリケーション機能254A〜Bを使用してアクセスすることができる。アドレスマッピング層250は、制御プレーン、またはデータプレーンの異なる機能に結び付けられたトランザクションを区別することができる。特に、構成可能なハードウェアプラットフォーム210に結び付けられたサーバコンピュータ220からのトランザクションは、トランザクション内のアドレスを使用して識別することができる。具体的には、トランザクションのアドレスが構成可能なハードウェアプラットフォーム210に割り当てられたアドレス範囲内である場合、トランザクションは、構成可能なハードウェアプラットフォーム210に向けられる。構成可能なハードウェアプラットフォーム210に割り当てられたアドレス範囲は、異なる機能のそれぞれに割り当てられたアドレス範囲に及び得る。トランザクションは、物理的相互接続230を通じて送信することができ、相互接続インターフェース256で受信することができる。相互接続インターフェース256は、物理的相互接続230のエンドポイントとすることができる。物理的相互接続230は、デバイスまたは構成要素をサーバコンピュータ230に接続するためのファブリックに配設された追加的なデバイス(例えば、スイッチおよびブリッジ)を含むことができることを理解されたい。
【0031】
アドレスマッピング層250は、トランザクションのアドレスを分析し、アドレスに基づいて、構成可能なハードウェアプラットフォーム210内のトランザクションをどこにルーティングするのかを決定することができる。例えば、管理機能252は、第1のアドレス範囲を割り当てることができ、管理プレーンの異なる機能は、その範囲内の異なるアドレスを使用することによってアクセスすることができる。管理機能252に割り当てられた範囲内に入るアドレスを有するトランザクションは、ホスト論理プライベートファブリック260を通して、制御プレーンの異なるブロックにルーティングすることができる。例えば、トランザクションは、管理および構成ブロック262にアドレッシングすることができる。同様に、アプリケーション機能254Aは、第2のアドレス範囲を割り当てることができ、アプリケーション機能254Bは、第3のアドレス範囲を割り当てることができ、データプレーンの異なる機能は、それらの範囲内の異なるアドレスを使用することによってアクセスすることができる。
【0032】
管理および構成ブロック262は、構成可能なハードウェアプラットフォーム210の管理および構成に関する機能を含むことができる。例えば、管理および構成ブロック262は、再構成可能な論理ブロックを構成することができるように、構成ポート211へのアクセスを提供することができる。例えば、サーバコンピュータ220は、トランザクションを管理および構成ブロック262に送信して、アプリケーション論理の、カプセル化された再構成可能な論理240Aまたは240Bへのロードを開始することができる。アプリケーション論理に対応する構成データは、サーバコンピュータ220から管理機能252に送信することができる。管理機能252は、アプリケーション論理をロードすることができるように、ホスト論理ファブリック260を通して、アプリケーション論理に対応する構成データを構成ポート211にルーティングすることができる。
【0033】
別の例として、管理および構成ブロック262は、構成可能なハードウェアプラットフォーム210に関するメタデータを記憶することができる。例えば、異なる論理ブロックのバージョン、更新履歴、および他の情報を、管理および構成ブロック262のメモリに記憶することができる。サーバコンピュータ220は、メタデータのいくつかまたは全てを検索するためにメモリを読み出すことができる。具体的には、サーバコンピュータ220は、管理および構成ブロック262のメモリを標的にする読み出し要求を送信することができ、管理および構成ブロック262は、読み出し応答データを生成して、サーバコンピュータ220に返すことができる。
【0034】
管理機能252は、構成可能なハードウェアプラットフォーム210のプライベート周辺機器にアクセスするために使用することもできる。プライベート周辺機器は、制御プレーンだけからアクセス可能な構成要素である。例えば、プライベート周辺機器としては、JTAG(例えば、IEEE 1149.1)コントローラ270、発光ディスプレイ(LED)271、マイクロコントローラ272、汎用非同期レシーバ/トランスミッタ(UART)273、メモリ274(例えば、シリアル周辺機器インターフェース(SPI)フラッシュメモリ)、および制御プレーンからアクセス可能であり、データプレーンがアクセス不可能である任意の他の構成要素を挙げることができる。管理機能252は、ホスト論理プライベートファブリック260およびプライベート周辺機器インターフェース(複数可)275を通してコマンドをルーティングすることによって、プライベート周辺機器にアクセスすることができる。プライベート周辺機器インターフェース(複数可)275は、プライベート周辺機器と直接通信することができる。
【0035】
パブリック周辺機器は、制御プレーンまたはデータプレーンのいずれかからアクセス可能である、共有された機能である。例えば、パブリック周辺機器は、管理機能252に割り当てられたアドレス範囲内でトランザクションをアドレッシングすることによって、制御プレーンからアクセスすることができる。パブリック周辺機器は、アプリケーション機能254に割り当てられたアドレス範囲内でトランザクションをアドレッシングすることによって、データプレーンからアクセスすることができる。したがって、パブリック周辺機器は、複数のアドレスマッピングを有することができ、かつ制御プレーンおよびデータプレーンの両方によって使用することができる構成要素である。パブリック周辺機器の例は、他の構成可能なハードウェアプラットフォーム(複数可)(CHP(複数可))280、DRAM281(例えば、DDR DRAM)、記憶デバイス282(例えば、ハードディスクドライブおよびソリッドステートドライブ)、および情報の生成、記憶、または処理を行うために使用することができる他の種々の構成要素である。パブリック周辺機器は、パブリック周辺機器インターフェース285を介してアクセスすることができる。したがって、パブリック周辺機器インターフェース285は、パブリック周辺機器と構成可能なハードウェアプラットフォーム210の他の機能との間に間置された中間層とすることができる。具体的には、パブリック周辺機器インターフェース285は、制御プレーンまたはデータプレーンからの要求を変換し、パブリック周辺機器への通信をパブリック周辺機器のネイティブプロトコルにフォーマットすることができる。
【0036】
加えて、パブリック周辺機器インターフェース285は、パブリック周辺機器の全部もしくは一部分へのアクセスを制御するために、および/またはそれらを隔離するために使用することができる。1つの例として、アクセス論理286は、パブリック周辺機器に対するトランザクションについて、帯域幅、待ち時間、サイズ、および他のサービスファクタの質を実施することができる。例えば、アクセス論理286は、パブリック周辺機器を標的とする異なる機能からの要求を調停することができる。アクセス論理286は、ある再構成可能な論理領域に由来する要求が、別の再構成可能な論理領域または管理機能252に由来する要求を不足させることができないように、アクセスの公平な分配を実施することができる。具体的な一例として、アクセス論理286は、パブリック周辺機器にアクセスする構成要素の各々について、アクセスのラウンドロビン分配を実施することができる。1つの実施形態において、アクセス論理286は、周辺機器への最高優先度を管理機能252に与えることができる。加えて、アクセス論理286は、パブリック周辺機器と異なる構成要素との間の転送に対して、サイズ制限を実施することができる。サイズ制限を実施することによって、パブリック周辺機器にアクセスするための待ち時間が、潜在的に、より決定的になり得る。加えて、アクセス論理286は、パブリック周辺機器の帯域幅分配を実施することができる。例えば、構成要素のいくつかは、周辺機器に/から小量(例えば、1バイトまたはワード)のデータを転送することができ、他の構成要素は、所与の要求において、周辺機器に/からより多い量の(例えば、16または32ワード)のデータを転送することができる。純粋なラウンドロビン手法は、より小さい転送サイズを使用して構成要素にペナルティを課すことができるので、帯域幅認識のスケジューリングアルゴリズムは、潜在的に、帯域幅をより正確に分配することができる。アクセス論理286は、利用可能帯域幅を周辺機器に均等に分配することができ、または帯域幅の分配は、プログラムすることができる。例えば、管理機能114のアドレス空間にマッピングされた1つまたは複数の制御レジスタを使用して、周辺機器にアクセスする各構成要素に割り当てられる帯域幅の分配をプログラムすることができる。1つの具体的な例として、アクセス論理286は、再構成可能な論理領域240Aが帯域幅の75%を受信し、再構成可能な論理領域240Bが帯域幅の25%を受信するように、帯域幅を分配するようにプログラムすることができる。
【0037】
アクセス論理286はまた、周辺機器アドレス空間のマッピングを、構成可能なハードウェアプラットフォーム210の異なる構成要素に実施することもできる。例えば、周辺機器のアドレス空間は、単一の構成要素専用とすること、または構成要素の間で共有することができる。具体的な一例として、DRAM281のアドレス空間は、2つの別個の非オーバーラップアドレス空間(重複しないアドレス空間)に分けることができ、再構成可能な論理領域240Aを第1のアドレス範囲に割り当てることができ、再構成可能な論理領域240Bを第2のアドレス範囲に割り当てることができる。したがって、異なる再構成可能な論理領域に割り当てられたDRAMの記憶場所を互いに隔離して、ユーザのプライバシーを守ることができる。別の具体的な例として、DRAM281のアドレス空間は、再構成可能な論理領域240A〜Bの各々の専用の2つの別個の非オーバーラップアドレス空間、および再構成可能な論理領域240A〜Bによって共有することができる追加的なアドレス空間に分けることができる。したがって、DRAM281のプライベート領域およびDRAM281の共有された領域が存在し得る。パブリック周辺機器の共有されたメモリ空間を可能にすることによって、あるアクセラレータは、潜在的に、物理的相互接続230を通じてアクセラレータ間で全てのデータを転送することと比較して、より高速に別のアクセラレータとデータを共有することができる。周辺機器アドレス空間のマッピングは、ホスト論理によって固定することができ、または管理機能114のアドレス空間にマッピングされた1つもしくは複数の制御レジスタを使用してプログラムすることができる。
【0038】
メールボックス290およびウォッチドッグタイマー292は、制御プレーンまたはデータプレーンのいずれかからアクセス可能である、共有された機能である。具体的には、メールボックス290は、メッセージおよび他の情報を制御プレーンとデータプレーンとの間で渡すために使用することができる。1つの実施形態において、メールボックス290は、メッセージおよび他の情報をデータプレーンの異なるアプリケーション機能254A〜Bの間で渡すために使用することができる。メールボックス290は、バッファ、(セマフォ等の)制御レジスタ、およびステータスレジスタを含むことができる。メールボックス290をデータプレーンの異なる機能と制御プレーンとの間の中間物として使用することによって、データプレーンの異なる機能と制御プレーンとの間の隔離を潜在的に高め、これは、構成可能なハードウェアプラットフォーム210のセキュリティを高めることができる。
【0039】
ウォッチドッグタイマー292は、ハードウェアおよび/またはソフトウェアの故障を検出し、回復するために使用することができる。例えば、ウォッチドッグタイマー292は、特定のタスクを行うために要する時間を監視することができ、時間が閾値を超えた場合、ウォッチドッグタイマー292は、値を制御レジスタに書き込むこと、割り込みまたはリセットをアサートさせること等のイベントを開始することができる。1つの例として、ウォッチドッグタイマー292は、第1のタスクを開始するときに、第1の値で初期化することができる。ウォッチドッグタイマー292は、初期化された後に自動的にカウントダウンすることができ、ウォッチドッグタイマー292がゼロ値に到達した場合に、イベントを生成することができる。代替的に、ウォッチドッグタイマー292がゼロ値に到達する前に第1のタスクが終了した場合、ウォッチドッグタイマー292は、第2のタスクを開始するときに、第2の値によって再初期化することができる。第1および第2の値は、それぞれ、第1および第2のタスクを完了するための複雑さ、または仕事量に基づいて選択することができる。
【0040】
アプリケーション機能254A〜Bは、アプリケーション論理240A〜B等のデータプレーン機能にアクセスするために使用することができる。1つの例として、アプリケーション機能254Aは、アプリケーション論理240Aにアクセスするために使用することができ、アプリケーション機能254Bは、アプリケーション論理240Bにアクセスするために使用することができる。例えば、アプリケーション論理設計(アプリケーション論理構造)240A〜Bのうちの1つを対象とするトランザクションは、データをサーバコンピュータ220にロードさせる、処理させる、および/または返させることができる。具体的には、データプレーン機能は、アプリケーション機能254A〜Bのうちの1つに割り当てられた範囲内のアドレスを有するトランザクションを使用してアクセスすることができる。例えば、トランザクションは、アプリケーション機能254Aを介して、サーバコンピュータ220からアプリケーション論理240Aに送信することができる。具体的には、アプリケーション機能254Aにアドレッシングされたトランザクションは、周辺機器ファブリック264を通して、アプリケーション論理240Aにルーティングすることができる。アプリケーション論理240Aからの応答は、周辺機器ファブリック264を通してアプリケーション機能254Aにルーティングし、相互接続インターフェース256を通し、次いでサーバコンピュータ220に戻すことができる。加えて、アプリケーション論理240A〜Bによって生成されたデータおよびトランザクションは、使用状況およびトランザクション監視層266を使用して監視することができる。監視層266は、潜在的に、予め定義されたルールに違反するトランザクションまたはデータを識別することができ、また、制御プレーンを通じて送信される警報を生成することができる。追加的または代替的に、監視層266は、監視層266の任意の基準に違反するアプリケーション論理240A〜Bによって生成された任意のトランザクションを終了することができる。加えて、監視層266は、情報に関する統計を収集し、制御プレーンからアクセスすることができるように、アプリケーション論理240A〜Bに、またはそこから移動する情報を分析することができる。
【0041】
相互接続インターフェース256は、物理的相互接続230全体にわたってアプリケーション機能254A〜Bの帯域幅を分配するための、調停論理(調節論理回路)257を含むことができる。具体的には、調停論理257は、キューからのどのトランザクションを、またはアプリケーション機能254A〜Bに由来するどのトランザクションのリストを送信するべきかを選択することができる。1つの例として、調停論理257は、各アプリケーション機能254A〜Bと関連付けられた帯域幅が物理的相互接続230の利用可能帯域幅の予め定義されたまたはプログラムされた分割にマッチするように、トランザクションの順序を選択することができる。具体的には、調停論理257は、物理的相互接続230を通じて各アプリケーション機能254A〜Bによって転送されたデータ量の履歴を調査することができ、次のトランザクションは、異なるアプリケーション機能254A〜Bの間で、帯域幅の指定された分配を維持するように選択することができる。別の例として、調停論理257は、タイムスロットを各アプリケーション機能254A〜Bに割り当てることができ、所与のアプリケーション機能からのトランザクションは、それぞれのアプリケーション機能のタイムスロット中にだけ送信することができる。したがって、アプリケーション機能254Aからのトランザクションは、アプリケーション機能254Aに割り当てられたタイムスロット中にだけ送信することができる、アプリケーション機能254Bからのトランザクションは、アプリケーション機能254Bに割り当てられたタイムスロット中にだけ送信することができる、等である。
【0042】
データはまた、ダイレクトメモリアクセス(DMA)エンジン242をプログラムすることによって、サーバコンピュータ220とアプリケーション論理との間で転送することもできる。DMAエンジン242は、ソースの場所から宛先の場所へのDMAの転送をプログラムする、または指定するための制御およびステータスレジスタを含むことができる。1つの例として、DMAエンジン242は、サーバコンピュータ220のメモリ224内に記憶された情報を、アプリケーション論理240内に、または構成可能なハードウェアプラットフォーム210のパブリック周辺機器内にプルするようにプログラムすることができる。別の例として、DMAエンジン242は、アプリケーション論理240によって生成されたデータをサーバコンピュータ220のメモリ224にプッシュするようにプログラムすることができる。アプリケーション論理240によって生成されたデータは、アプリケーション論理240からストリーミングすることができ、またはメモリ281もしくは記憶装置282等のパブリック周辺機器に書き込むことができる。
【0043】
アプリケーション論理240A〜Bは、他の構成可能なハードウェアプラットフォーム280と通信することができる。例えば、他の構成可能なハードウェアプラットフォーム280は、SERDES212と通信する1つ以上のシリアルラインによって接続することができる。アプリケーション論理240A〜Bは、異なる構成可能なハードウェアプラットフォーム280へのトランザクションを生成することができ、トランザクションは、CHPファブリック244を通して、(SERDES212を介して)構成可能なハードウェアプラットフォーム280の対応するシリアルラインにルーティングすることができる。同様に、アプリケーション論理240A〜Bは、逆のパスを使用して、他の構成可能なハードウェアプラットフォーム280から情報を受信することができる。CHPファブリック244は、異なるアクセス特権を異なる再構成可能な領域240A〜Bのアプリケーション論理に提供するようにプログラムすることができる。この様態で、異なる再構成可能な領域240A〜Bのアプリケーション論理は、異なるCHPと通信することができる。具体的な一例として、再構成可能な領域240Aは、第1の組のCHPと通信することができ、再構成可能な領域240Bは、第1の組のCHPと互いに排他的である第2の組のCHPと通信することができる。別の例として、異なる再構成可能な領域240A〜Bについて、共有されたCHPおよびプライベートCHPを存在させることができる。CHPファブリック244は、異なる再構成可能な領域240A〜Bの間で共有される、CHPの帯域幅および/または転送サイズを分配するために使用することができる。
【0044】
要約すれば、構成可能なハードウェアプラットフォーム210の機能は、制御プレーン機能およびデータプレーンまたはアプリケーション機能に分類することができる。制御プレーン機能は、データプレーン能力を監視し、制限するために使用することができる。データプレーン機能は、サーバコンピュータ220上で稼働しているユーザのアプリケーションを加速するために使用することができる。制御プレーンおよびデータプレーンの機能を分離することによって、潜在的に、サーバコンピュータ220および他のコンピューティングインフラストラクチャのセキュリティおよび可用性を高めることができる。例えば、制御プレーンの中間層が物理的相互接続230のトランザクションのフォーマットおよびシグナリングを制御するので、アプリケーション論理240は、物理的相互接続230へ直接シグナリングすることができない。別の例として、アプリケーション論理240は、構成可能なハードウェアプラットフォーム210を再構成するために、および/または特権的であり得る管理情報にアクセスするために使用することができるプライベート周辺機器を使用することを阻止することができる。別の例として、アプリケーション論理240は、アプリケーション論理240とハードマクロとの間の任意の相互作用が中間層を使用して制御されるように、中間層を通して構成可能なハードウェアプラットフォーム210のハードマクロにだけアクセスすることができる。
【0045】
図3は、構成可能なリソースを計算リソース320のフリート内に構成するために使用することができる構成データを管理するための論理リポジトリサービス310を含む、システム300の一実施例を示すシステム図である。計算サービスプロバイダは、コンピュータタスクを行うべきときにサービスのユーザが展開する、コンピューティングリソース320のフリートを維持することができる。コンピューティングリソース320は、ハードウェアアクセラレータとしてプログラムすることができる構成可能な論理リソース342を有するサーバコンピュータ340を含むことができる。計算サービスプロバイダは、構成可能なハードウェア342の構成および動作を管理するために、ソフトウェアサービスを使用してコンピューティングリソース320を管理することができる。1つの例として、計算サービスプロバイダは、ユーザによって指定されたアプリケーション論理332を摂取し、ユーザの論理設計に基づいて構成可能な論理プラットフォームを構成するための構成データ336を生成し、そして、要求360に応じて有効な構成データ362をダウンロードして構成可能な論理プラットフォームのインスタンスを構成するための、論理リポジトリサービス310を実行することができる。ダウンロード要求360は、アプリケーション論理332を開発したユーザからのもの、またはアプリケーション論理332を使用するライセンスを獲得したユーザからのものであり得る。したがって、アプリケーション論理332は、計算サービスプロバイダ、ユーザ、またはユーザもしくは計算サービスプロバイダとは別の第3者によって生成することができる。例えば、アクセラレータの知的財産(IP)のマーケットプレイスは、計算サービスプロバイダのユーザに提供することができ、ユーザは、マーケットプレイスからアクセラレータを選択することによって、潜在的に、それらのアプリケーションの速度を高めることができる。
【0046】
論理リポジトリサービス310は、ウェブサービス等のネットワークアクセス可能サービスとすることができる。ウェブサービスは、一般的に、クラウドコンピューティングにおいて使用される。ウェブサービスは、ウェブまたはクラウドを通じてネットワークアドレスで提供されるソフトウェア機能である。クライアントは、サーバに対するウェブサービス要求を開始し、サーバは、要求を処理して、適切な応答を返す。クライアントウェブサービス要求は、典型的に、例えばAPI要求を使用して開始される。簡潔さの目的で、ウェブサービス要求は、下では一般にAPI要求として記述されるが、他のウェブサービス要求を作製することができることを理解されたい。API要求は、典型的にJSONまたはXMLで表される、定義された要求応答メッセージシステムに対するプログラマチックインターフェースシステムであり、これは、ウェブを介して、最も一般的にはHTTPベースのウェブサーバを介して公表される。したがって、特定の実装形態において、APIは、拡張マークアップ言語(XML)またはJavaScriptオブジェクト表記法(JSON)とすることができる応答メッセージの構造の定義と共に、一組のハイパーテキストトランスファープロトコル(HTTP)として定義することができる。APIは、固有のタスクを達成すること、またはソフトウェア構成要素との相互作用を可能にすることを含むアクションを行う、一組の機能またはルーチンを特定することができる。ウェブサービスがAPI要求をクライアントデバイスから受信すると、ウェブサービスは、要求に対する応答を生成し、要求内に識別されるエンドポイントに対する応答を送信することができる。追加的または代替的に、ウェブサービスは、要求内に識別されるエンドポイントに対する応答を生成することなく、API要求に応じてアクションを行うことができる。
【0047】
論理リポジトリサービス310は、API要求330を受信して、サーバコンピュータ340の構成可能なハードウェア342等の構成可能なハードウェアプラットフォームのための構成データを生成することができる。例えば、API要求330は、開発者、または計算サービスプロバイダのパートナーユーザによって考案され得る。要求330は、論理設計、構成可能なハードウェアプラットフォーム、ユーザ情報、アクセス特権、生産状況に関するデータおよび/またはメタデータを指定するためフィールド、ならびに入力、出力、および論理リポジトリサービス310のユーザに関する情報を説明するための種々の追加的なフィールドを含むことができる。具体的な例として、要求は、設計の説明、生産状態(トライアルまたは生産等)、サービスの入力または出力の暗号化された状態、入力ファイル(ハードウェア設計ソースコード等)を記憶するための場所の参照、入力ファイルのタイプ、構成可能なハードウェアのインスタンスタイプ、および出力ファイルまたはレポートを記憶するための場所の参照を含むことができる。特に、要求は、構成可能なハードウェアプラットフォーム上に実装するためのアプリケーション論理332を指定するハードウェア設計の参照を含むことができる。具体的には、アプリケーション論理332および/またはホスト論理334の仕様は、ハードウェア記述言語(HDL)で書かれたソースコード等の一群のファイル、論理合成ツールによって生成されたネットリスト、ならびに/または場所およびルートツールによって生成された配置され、ルーティングされた論理ゲートとすることができる。
【0048】
計算リソース320は、インスタンスタイプによって分類された数多くの異なるタイプのハードウェアおよびソフトウェアを含むことができる。特に、インスタンスタイプは、リソースのハードウェアおよびソフトウェアの少なくとも一部分を指定する。例えば、ハードウェアリソースとしては、様々なパフォーマンスレベル(例えば、異なるクロックスピード、アーキテクチャ、キャッシュサイズ、等)の中央処理ユニット(CPU)を有するサーバ、コプロセッサ(グラフィックス処理ユニット(GPU)および構成可能な論理等)を有する、および有しないサーバ、メモリおよび/またはローカル記憶の様々な容量およびパフォーマンスを有するサーバ、ならびに異なるネットワークパフォーマンスレベルを有するサーバを挙げることができる。例示的なソフトウェアリソースとしては、異なるオペレーティングシステム、アプリケーションプログラム、およびドライバを挙げることができる。1つの例示的なインスタンスタイプは、構成可能なハードウェア342と通信する中央処理ユニット(CPU)344を含むサーバコンピュータ340を備えることができる。構成可能なハードウェア342は、例えば、FPGA、プログラマブル論理アレイ(PLA)、プログラマブルアレイ論理(PAL)、ジェネリックアレイ論理(GAL)、またはコンプレックスプログラマブル論理デバイス(CPLD)等の、プログラマブル論理を含むことができる。具体的な例として、「F1.スモール」インスタンスタイプは、FPGAリソースの1つの容量単位を有する第1のタイプのサーバコンピュータを含むことができ、「F1.ミディアム」インスタンスタイプは、FPGAリソースの2つの容量単位を有する第1のタイプのサーバコンピュータを含むことができ、「F1.ラージ」インスタンスタイプは、FPGAリソースの8つの容量単位を有する第1のタイプのサーバコンピュータを含むことができ、「F2.ラージ」インスタンスタイプは、FPGAリソースの8つの容量単位を有する第2のタイプのサーバコンピュータを含むことができる。構成可能なハードウェア342は、領域346および348等の、複数のプログラマブル論理の領域を含むことができる。
【0049】
論理リポジトリサービス310は、API要求330を受信することに応じて、構成データ336を生成することができる。生成された構成データ336は、アプリケーション論理332およびホスト論理334に基づくことができる。具体的には、生成された構成データ336は、構成可能なハードウェア342がアプリケーション論理332およびホスト論理334によって指定された機能を行うように、該構成可能なハードウェアをプログラムまたは構成するために使用することができる情報を含むことができる。1つの例として、計算サービスプロバイダは、CPU344と構成可能なハードウェア342とをインターフェースするための論理を含むホスト論理334を生成することができる。具体的には、ホスト論理334は、全てCPU−アプリケーション論理トランザクションがホスト論理334を通過するように、アプリケーション論理332がCPU344と直接通信することからマスキングまたはシールドするための論理を含むことができる。この様態で、ホスト論理334は、潜在的に、アプリケーション論理332によって導入することができるセキュリティおよび可用性リスクを低減させることができる。
【0050】
構成データ336を生成することは、アプリケーション論理332のチェックおよび/もしくは試験を行うこと、アプリケーション論理332をホスト論理334ラッパーに統合すること、アプリケーション論理332を合成すること、ならびに/またはアプリケーション論理332を配置し、ルーティングすることを含むことができる。アプリケーション論理332をチェックすることは、アプリケーション論理332が計算サービスプロバイダの1つ以上の基準に従うことを検証することができる。例えば、アプリケーション論理332を分析して、ホスト論理334にインターフェースするための信号および/または論理機能が存在するかどうかを判定することができる。特に、分析は、検証試験一式に対してソースコードを分析すること、および/またはアプリケーション論理332を稼働させること含むことができる。検証試験は、アプリケーション論理がホスト論理と互換性があることを確認するために使用することができる。別の例として、アプリケーション論理332を分析して、アプリケーション論理332が、指定されたインスタンスタイプの指定領域(例えば、領域346または348)内に収まるかどうかを判定することができる。別の例として、アプリケーション論理332を分析して、アプリケーション論理332が、リング発振器または他の潜在的に有害な回路等の、任意の禁止された論理機能を含むかどうかを判定することができる。別の例として、アプリケーション論理332を分析して、アプリケーション論理332が、ホスト論理334との任意の命名競合、またはホスト論理334とインターフェースしていない任意の外部からの出力を有するかどうかを判定することができる。別の例として、アプリケーション論理332を分析して、アプリケーション論理332が、構成可能なハードウェア342の禁止された入力、出力、またはハードマクロへのインターフェースを試みているかどうかを判定することができる。アプリケーション論理332が、論理リポジトリサービス310のチェックに合格した場合は、構成データ336を生成することができる。チェックまたは試験のいずれかで不合格であった場合は、構成データ336の生成を中止することができる。
【0051】
構成データ336を生成することは、アプリケーション論理332およびホスト論理334のソースコードを、構成可能なハードウェア342をプログラムまたは構成するために使用することができるデータにコンパイルおよび/または変換することを含むことができる。例えば、論理リポジトリサービス310は、アプリケーション論理332をホスト論理334ラッパーに統合することができる。具体的には、アプリケーション論理332は、アプリケーション論理332およびホスト論理334を含む1つ以上のシステム設計にインスタンス化することができる。例えば、第1のシステム設計は、領域346に対応するホスト論理ラッパーのアプリケーション論理332のインスタンスを生成することができ、第2のシステム設計は、領域348に対応するホスト論理ラッパーのアプリケーション論理332のインスタンスを生成することができる。統合したシステム設計の各々は、論理合成プログラムを使用して合成し、システム設計のための1つ以上のネットリストを作成することができる。各ネットリストは、配置およびルーティングプログラムを使用して、システム設計に指定されたインスタンスタイプのために配置し、ルーティングすることができる。各配置され、ルーティングされた設計は、構成可能なハードウェア342をプログラムするために使用することができる構成データ336に変換することができる。例えば、構成データ336は、配置およびルーティングプログラムから直接出力することができる。したがって、生成された構成データは、領域346および348等の1つ以上領域に配置されるアプリケーション論理332を伴って構成可能なハードウェア342をプログラムするために使用することができるデータを含むことができる。
【0052】
1つの例として、生成された構成データ336は、FPGAの構成可能な論理の全部または一部分を構成するための完全なまたは部分的なビットストリームを含むことができる。FPGAは、構成可能な論理および非構成可能な論理を含むことができる。構成可能な論理は、組み合わせ論理および/またはルックアップテーブル(LUT)、ならびに連続論理要素(フリップフロップおよび/またはラッチ等)を備えるプログラマブル論理ブロック、プログラマブルルーティングおよびクロッキングリソース、プログラマブル分散型およびブロックランダムアクセスメモリ(RAM)、デジタル信号処理ビットスライス(DSP)、ならびにプログラマブル入力/出力ピンを含むことができる。ビットストリームは、構成論理(例えば、構成アクセスポート)を使用して、構成可能な論理のオンチップメモリにロードすることができる。オンチップメモリ内にロードされた値を使用して、構成可能な論理がビットストリームによって指定される論理機能を行うように、構成可能な論理を制御することができる。加えて、構成可能な論理は、互いに独立して構成することができる異なる領域(領域346および348等)に分けることができる。1つの例として、フルビットストリームを使用して、構成可能な論理を領域全体にわたって構成することができ、部分ビットストリームを使用して、構成可能な論理領域の一部分だけを構成することができる。具体的な例として、第1の部分的なビットストリームを使用して、アプリケーション論理332を有する領域346を構成することができ、第2の部分的なビットストリームを使用して、アプリケーション論理332を有する領域348を構成することができ、第3の部分的なビットストリームを使用して、1つ以上の領域を、ホスト論理334を有する領域346および348の外側に構成することができる。非構成可能な論理は、入力/出力ブロック(例えば、シリアライザおよびデシリアライザ(SERDES)ブロックおよびギガビットトランシーバ)等の、FPGA内で特定の機能を行うハードマクロと、アナログ−デジタル変換器と、メモリ制御ブロックと、試験アクセスポートと、構成データを構成可能な論理にロードするための構成論理と、を含むことができる。
【0053】
論理リポジトリサービス310は、生成された構成データ336を論理リポジトリデータベース350に記憶する。論理リポジトリデータベース350は、磁気ディスク、ダイレクトアタッチトストレージ、ネットワークアタッチトストレージ(NAS)、ストレージエリアネットワーク(SAN)、独立した複数のディスクからなる冗長配列(RAID)、磁気テープもしくはカセット、CD−ROM、DVD、または非一時的な方式で情報を記憶するために使用することができ、かつ論理リポジトリサービス310によってアクセスすることができる任意の他の媒体を含む、リムーバブルまたは非リムーバブル媒体に記憶することができる。加えて、論理リポジトリサービス310を使用して、(アプリケーション論理332およびホスト論理334の仕様等の)入力ファイル、および論理設計および/または論理リポジトリサービス310のユーザに関するメタデータを記憶するために使用することができる。例えば、生成された構成データ336は、例えば、ユーザ識別子、1つまたは複数のインスタンスタイプ、インスタンスタイプの領域、マーケットプレイス識別子、マシンイメージ識別子、および構成可能なハードウェア識別子等の、1つ以上の特性によってインデックスを付けることができる。
【0054】
論理リポジトリサービス310は、構成データをダウンロードするためのAPI要求360を受信することができる。例えば、要求360は、計算リソース320のユーザが計算リソース320内の新しいインスタンス(例えば、F1インスタンス)を開始する、または展開するときに生成することができる。別の例として、要求360は、オペレーティングインスタンスで実行するアプリケーションからの要求に応じて生成することができる。要求360は、ソースおよび/または宛先インスタンスの参照、ダウンロードする構成データ(例えば、インスタンスタイプ、インスタンスタイプの領域、マーケットプレイス識別子、マシンイメージ識別子、もしくは構成可能なハードウェア識別子)の参照、ユーザ識別子、認可トークン、ならびに/またはダウンロードする構成データを識別するための、および/もしくは構成データへのアクセスを許可するための他の情報、を含むことができる。構成データを要求するユーザが、構成データにアクセスする許可を与えられた場合は、論理リポジトリデータベース350から構成データを取り出すことができ、1つ以上の構成可能な領域に対応する有効な構成データ362(例えば、フルまたは部分ビットストリーム)を要求元インスタンス(例えば、サーバコンピュータ340)にダウンロードすることができる。有効な構成データ362は、宛先インスタンスの構成可能な論理の1つ以上領域を構成するために使用することができる。例えば、有効な構成データ362は、領域346だけ、または構成可能なハードウェア342の領域348だけを構成するために使用することができる。
【0055】
論理リポジトリサービス310は、有効な構成データ362を要求元インスタンスにダウンロードすることができることを検証することができる。検証は、論理リポジトリサービス310によって複数の異なる位置で起こり得る。例えば、検証は、アプリケーション論理332がホスト論理334と互換であることを検証することを含むことができる。特に、試験の回帰スイートは、シミュレータ上で実行して、アプリケーション論理332が設計に加えられた後に、予想通りにホスト論理334を行うことを検証することができる。追加的または代替的に、アプリケーション論理332が、ホスト論理334の再構成可能な領域とは別の再構成可能な領域にだけ残留するように指定されることを検証することができる。別の例として、検証は、有効な構成データ362が、ダウンロードするインスタンスタイプと互換であることを検証することを含むことができる。別の例として、検証は、要求元が、有効な構成データ362にアクセスする許可を与えられていることを検証することを含むことができる。検証チェックのいずれかが不合格であった場合、論理リポジトリサービス310は、有効な構成データ362をダウンロードする要求を拒絶することができる。したがって、論理リポジトリサービス310は、潜在的に、コンピューティングリソース320のセキュリティおよび可用性を保護することができ、一方で、ユーザがコンピューティングリソース320のハードウェアをカスタマイズすることを可能にする。
【0056】
図4は、本明細書で説明される実施形態を使用することができる1つの環境を例示する、ネットワークベースの計算サービスプロバイダ400のコンピューティングシステム図である。背景として、計算サービスプロバイダ400(すなわち、クラウドプロバイダ)は、エンドレシピエントのコミュニティへの貢献として、コンピューティングおよび記憶容量の送達が可能である。例示的な一実施形態において、計算サービスプロバイダは、組織によって、またはその組織に代わって編成するために確立することができる。すなわち、計算サービスプロバイダ400は、「プライベートなクラウド環境」を提供することができる。別の実施形態において、計算サービスプロバイダ400は、マルチテナント環境をサポートし、複数の顧客は、独立して動作する(すなわち、パブリッククラウド環境)。一般に言えば、計算サービスプロバイダ400は、次のモデル、すなわち、サービスとしてのインフラストラクチャ(「IaaS」)、サービスとしてのプラットフォーム(「PaaS」)、および/またはサービスとしてのソフトウェア(「SaaS」)を提供することができる。他のモデルを提供することができる。IaaSモデルの場合、計算サービスプロバイダ400は、物理または仮想マシン、および他のリソースとして、コンピュータを提供することができる。仮想マシンは、下でさらに説明するように、ハイパーバイザによって、ゲストとして稼働させることができる。PaaSモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、およびウェブサーバを含むことができる、コンピューティングプラットフォームを送達する。アプリケーション開発者らは、基礎をなすハードウェアおよびソフトウェアを購入および管理するためのコストを伴うことなく、計算サービスプロバイダプラットフォーム上で該開発者らのソフトウェアソリューションを開発し、稼働させることができる。加えて、アプリケーション開発者らは、計算サービスプロバイダプラットフォームの構成可能なハードウェア上で該開発者らのハードウェアソリューションを開発し、稼働させることができる。SaaSモデルは、計算サービスプロバイダにおけるアプリケーションソフトウェアのインストールおよび動作を可能にする。いくつかの実施形態において、エンドユーザは、ウェブブラウザまたは他の軽量のクライアントアプリケーションを稼働させる、デスクトップコンピュータ、ラップトップ、タブレット、スマートフォンなどのネットワーク化された顧客デバイスを使用して、計算サービスプロバイダ400にアクセスする。当業者は、計算サービスプロバイダ400を「クラウド」環境として説明することができることを認識するであろう。
【0057】
特定の例示される計算サービスプロバイダ400は、複数のサーバコンピュータ402A〜402Cを含む。3台のサーバコンピュータだけが示されるが、任意の数を使用することができ、大規模施設は、何千台ものサーバコンピュータを含むことができる。サーバコンピュータ402A〜402Cは、ソフトウェアインスタンス406A〜406Cを実行するためのコンピューティングリソースを提供することができる。1つの実施形態において、ソフトウェアインスタンス406A〜406Cは、仮想マシンである。当技術分野で知られているように、仮想マシンは、物理マシンのようにアプリケーションを実行するマシン(すなわち、コンピュータ)のソフトウェア実装のインスタンスである。仮想マシンの例において、サーバ402A〜402Cのそれぞれは、ハイパーバイザ408、または単一のサーバ上で複数のソフトウェアインスタンス406の実行を可能にするように構成された別のタイプのプログラムを実行するように構成することができる。加えて、ソフトウェアインスタンス406のそれぞれは、1つ以上のアプリケーションを実行するように構成することができる。
【0058】
本明細書に開示される実施形態は、主に仮想マシンの文脈で説明されるが、他のタイプのインスタンスを、本明細書に開示される概念および技術と共に利用することができることを理解されたい。例えば、本明細書に開示される技術は、記憶リソース、データ通信リソース、および他のタイプのコンピューティングリソースと共に利用することができる。本明細書に開示される実施形態はまた、仮想マシンインスタンスを利用することなく、コンピュータシステム上でアプリケーションの全てまたは一部分を直接実行することができる。
【0059】
サーバコンピュータ402A〜402Cは、異なるハードウェアリソースまたはインスタンスタイプの異種の集合体を含むことができる。ハードウェアインスタンスタイプのいくつかは、計算サービスプロバイダ400のユーザによって少なくとも部分的に構成可能である、構成可能なハードウェアを含むことができる。インスタンスタイプの1つの例は、構成可能なハードウェア404Aと通信する、サーバコンピュータ402Aを含むことができる。具体的には、サーバコンピュータ402Aおよび構成可能なハードウェア404Aは、PCIe等のローカル相互接続を通じて通信することができる。インスタンスタイプの別の例は、サーバコンピュータ402Bと、構成可能なハードウェア404Bとを含むことができる。例えば、構成可能な論理404Bは、マルチチップモジュール内に、またはサーバコンピュータ402BのCPUと同じダイ上に集積することができる。インスタンスタイプのさらに別の例は、いかなる構成可能なハードウェアも伴わないサーバコンピュータ402Cを含むことができる。したがって、構成可能な論理を有する、および有しないハードウェアインスタンスタイプを、計算サービスプロバイダ400のリソース内に存在させることができる。
【0060】
1つ以上のサーバコンピュータ420は、サーバコンピュータ402およびソフトウェアインスタンス406の動作を管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ420は、管理構成要素422を実行することができる。顧客は、管理構成要素422にアクセスして、顧客によって購入されたソフトウェアインスタンス406の動作の種々の態様を構成することができる。例えば、顧客は、インスタンスを購入、レンタル、またはリースして、ソフトウェアインスタンスの構成を変更することができる。ソフトウェアインスタンスのそれぞれの構成情報は、ネットワークアタッチトストレージ440上のマシンイメージ(MI)442として記憶することができる。具体的には、MI442は、VMインスタンスを起動するために使用される情報を記述する。MIは、インスタンス(例えば、OSおよびアプリケーション)のルートボリュームのテンプレート、どの顧客アカウントがMIを使用することができるのかを制御するための起動許可、およびインスタンスが起動されたときにインスタンスにアタッチするボリュームを指定するブロックデバイスマッピングを含むことができる。MIはまた、インスタンスが起動されたときに構成可能なハードウェア404にロードされる構成可能なハードウェアイメージ(CHI)442の参照も含むことができる。CHIは、構成可能なハードウェア404の少なくとも一部分をプログラムまたは構成するための構成データを含む。
【0061】
顧客はまた、要望に応じて、購入したインスタンスをスケーリングする方法に関する設定も指定することができる。管理構成要素は、顧客ポリシーを実行するために、ポリシー文書をさらに含むことができる。自動スケーリング構成要素424は、顧客によって定義されたルールに基づいて、インスタンス406をスケーリングすることができる。1つの実施形態において、自動スケーリング構成要素424は、顧客が、いつ新しいインスタンスをインスタンス化するべきなのかを決定する際に使用するためのスケールアップルール、およびいつ既存のインスタンスを終了するべきなのかを決定する際に使用するためのスケールダウンルールを指定することを可能にする。自動スケーリング構成要素424は、異なるサーバコンピュータ402または他のコンピューティングデバイスで実行するいくつかの副構成要素で構成することができる。自動スケーリング構成要素424は、内部管理ネットワークを通じて利用可能なコンピューティングリソースを監視し、必要に基づいて利用可能なリソースを修正することができる。
【0062】
展開構成要素426は、コンピューティングリソースの新しいインスタンス406を展開する際に顧客を支援するために使用することができる。展開構成要素は、誰がアカウントの所有者であるのか、クレジットカード情報、所有者の国等の、インスタンスと関連付けられたアカウント情報へのアクセスを有することができる。展開構成要素426は、顧客から、新しいインスタンス406を構成するべき方法を記述するデータを含む構成を受信することができる。例えば、構成は、新しいインスタンス406でインストールされる1つ以上のアプリケーションを指定すること、新しいインスタンス406を構成するために実行されるべきスクリプトおよび/または他のタイプのコードを提供すること、アプリケーションキャッシュが準備するべき方法を指定するキャッシュ論理を提供すること、ならびに他のタイプの情報を提供することができる。展開構成要素426は、顧客が提供する構成およびキャッシュ論理を利用して、新しいインスタンス406を構成、準備、および起動することができる。構成、キャッシュ論理、および他の情報は、管理構成要素422を使用する顧客によって、またはこの情報を展開構成要素426に直接提供することによって指定することができる。インスタンスマネージャは、展開構成要素の一部とみなすことができる。
【0063】
顧客アカウント情報428は、マルチテナント環境の顧客と関連付けられた任意の所望の情報を含むことができる。例えば、顧客アカウント情報としては、顧客の一意の識別子、顧客の住所、課金情報、ライセンス情報、インスタンスを起動するためのカスタム化パラメータ、スケジュール情報、自動スケーリングパラメータ、アカウントにアクセスするために使用した以前のIPアドレス、顧客がアクセス可能なMIおよびCHIのリストなどを挙げることができる。
【0064】
1つ以上のサーバコンピュータ430は、サーバコンピュータ402の構成可能なハードウェア404への構成データのダウンロードを管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ430は、摂取構成要素432と、ライブラリ管理構成要素434と、ダウンロード構成要素436とを備える、論理リポジトリサービスを実行することができる。摂取構成要素432は、ホスト論理およびアプリケーション論理設計または仕様を受信すること、ならびに構成可能なハードウェア404を構成するために使用することができる構成データを生成することができる。ライブラリ管理構成要素434は、論理リポジトリサービスと関連付けられたソースコード、ユーザ情報、および構成データを管理するために使用することができる。例えば、ライブラリ管理構成要素434は、ユーザの設計によって生成された構成データを、ネットワークアタッチトストレージ440上のユーザによって指定された場所に記憶するために使用することができる。特に、構成データは、ネットワークアタッチトストレージ440上の構成可能なハードウェアイメージ442内に記憶することができる。加えて、ライブラリ管理構成要素434は、(アプリケーション論理およびホスト論理のための仕様の等の)入力ファイル、ならびに論理設計および/または論理リポジトリサービスのユーザに関するメタデータのバージョニングおよび記憶を管理することができる。ライブラリ管理構成要素434は、例えば、ユーザ識別子、インスタンスタイプ、市場識別子、マシンイメージ識別子、および構成可能なハードウェア識別子等の1つ以上の特性によって、生成された構成データにインデックスを付けることができる。ダウンロード構成要素436は、構成データの要求を認証し、要求が認証されたときに構成データを要求者に伝送するために使用することができる。例えば、サーバコンピュータ402A〜B上のエージェントは、構成可能なハードウェア404を使用するインスタンス406を起動したときに、要求をダウンロード構成要素436に送信することができる。別の例として、サーバコンピュータ402A〜B上のエージェントは、構成可能なハードウェア404が動作している間に構成可能なハードウェア404を部分的に再構成するようにインスタンス406が要求したときに、要求をダウンロード構成要素436に送信することができる。
【0065】
ネットワークアタッチトストレージ(NAS)440は、記憶空間およびNAS440に記憶されるファイルへのアクセスを提供するために使用することができる。例えば、NAS440は、ネットワークファイルシステム(NFS)等のネットワークファイル共有プロトコル(例えば)を使用して要求を処理するために使用される、1つ以上のサーバコンピュータを含むことができる。NAS440は、リムーバブル媒体または非リムーバブル媒体を含むことができ、該媒体としては、磁気ディスク、ストレージエリアネットワーク(SAN)、独立したディスクの冗長アレイ(RAID)、磁気テープもしくはカセット、CD−ROM、DVD、または情報を非一時的な方式で記憶するために使用することができ、また、ネットワーク450を通じてアクセスすることができる任意の他の媒体が挙げられる。
【0066】
ネットワーク450は、サーバコンピュータ402A〜402C、サーバコンピュータ420および430、ならびに記憶装置440を相互接続するために利用することができる。ネットワーク450は、ローカルエリアネットワーク(LAN)とすることができ、また、エンドユーザが計算サービスプロバイダ400にアクセスすることができるように、ワイドエリアネットワーク(WAN)460に接続することができる。
図4に例示されるネットワークトポロジが簡略化されたものであること、およびはるかに多くのネットワークおよびネットワーキングデバイスを利用して、本明細書で開示される種々のコンピューティングシステムを相互接続することができることを認識されたい。
【0067】
図5は、構成可能なハードウェアプラットフォーム510を構成し、そこにインターフェースするための制御プレーンおよびデータプレーンの構成要素を含む、例示的なシステム500のさらなる詳細を示す。制御プレーンは、構成可能なハードウェアプラットフォーム510を初期化、監視、再構成、および分解するためのソフトウェアおよびハードウェア機能を含む。データプレーンは、ユーザのアプリケーションと構成可能なハードウェアプラットフォーム510との間で通信するためのソフトウェアおよびハードウェア機能を含む。制御プレーンは、より高い特権レベルを有するユーザまたはサービスによってアクセス可能とすることができ、データプレーンは、より低い特権レベルを有するユーザまたはサービスによってアクセス可能とすることができる。1つの実施形態において、構成可能なハードウェアプラットフォーム510は、PCIe等のローカル相互接続を使用して、サーバコンピュータ520に接続される。代替の一実施形態において、構成可能なハードウェアプラットフォーム510は、サーバコンピュータ520のハードウェア内に統合することができる。1つの例として、サーバコンピュータ520は、
図4の計算サービスプロバイダ400の複数のサーバコンピュータ402A〜402Bのうちの1台とすることができる。
【0068】
サーバコンピュータ520は、1つ以上のCPU、メモリ、記憶デバイス、相互接続ハードウェアなどを含む、基礎をなすハードウェア522を有する。ハードウェア522の上側で稼働する層は、ハイパーバイザまたはカーネル層524である。ハイパーバイザまたはカーネル層は、タイプ1またはタイプ2ハイパーバイザとして分類することができる。タイプ1ハイパーバイザは、ホストハードウェア522上で直接稼働して、ハードウェアを制御し、また、ゲストオペレーティングシステムを管理する。タイプ2ハイパーバイザは、従来のオペレーティングシステム環境内で稼働する。したがって、タイプ2環境において、ハイパーバイザは、オペレーティングシステム上で稼働する別個の層とすることができ、オペレーティングシステムは、システムハードウェアと相互作用する。異なるタイプのハイパーバイザとしては、Xenベースのもの、Hyper−V、ESXi/ESX、Linux(登録商標)などが挙げられるが、他のハイパーバイザを使用することができる。管理パーティション530(Xenハイパーバイザのドメイン0等)は、ハイパーバイザの一部とすること、またはそこから分離することができ、また一般に、ハードウェア522にアクセスするために必要なデバイスドライバを含む。ユーザパーティション540は、ハイパーバイザ内の隔離の論理ユニットである。各ユーザパーティション540には、ハードウェア層のメモリ、CPU割り当て、記憶装置、相互接続帯域幅などのそれ自体の部分を割り当てることができる。加えて、各ユーザパーティション540は、仮想マシンおよびそれ自体のゲストオペレーティングシステムを含むことができる。このように、各ユーザパーティション540は、他のパーティションから独立してそれ自体の仮想マシンをサポートするように設計された抽象的な容量部分である。
【0069】
管理パーティション530は、ユーザパーティション540および構成可能なハードウェアプラットフォーム510のための管理サービスを行うために使用することができる。管理パーティション530は、(展開サービス、論理リポジトリサービス550、およびヘルス管理サービス等の)計算サービスプロバイダのウェブサービス、ユーザパーティション540、および構成可能なハードウェアプラットフォーム510と通信することができる。管理サービスは、ユーザパーティション540を起動および終了するための、ならびに構成可能なハードウェアプラットフォーム510の構成可能な論理の構成、再構成、および分解を行うためのサービスを含むことができる。具体的な一例として、管理パーティション530は、(
図4の展開構成要素426等の)展開サービスからの要求に応じて、新しいユーザパーティション540を起動することができる。要求は、MIおよび/またはCHIの参照を含むことができる。MIは、ユーザパーティション540にロードするプログラムおよびドライバを指定することができ、CHIは、構成可能なハードウェアプラットフォーム510にロードする構成データを指定することができる。管理パーティション530は、MIと関連付けられた情報に基づいて、ユーザパーティション540を初期化することができ、また、CHIと関連付けられた構成データを構成可能なハードウェアプラットフォーム510にロードさせることができる。ユーザパーティション540および構成可能なハードウェアプラットフォーム510の初期化は、インスタンスを動作可能にするまでの時間を低減させることができるように、同時に起こり得る。
【0070】
管理パーティション530は、構成可能なハードウェアプラットフォーム510のプログラミングおよび監視を管理するために使用することができる。この目的のために管理パーティション530を使用することによって、構成データおよび構成可能なハードウェアプラットフォーム510の構成ポートへのアクセスを制限することができる。具体的には、より低い特権レベルを有するユーザは、管理パーティション530に直接アクセスすることが制限され得る。したがって、計算サービスプロバイダのインフラストラクチャを使用することなく、構成可能な論理を修正することができず、構成可能な論理をプログラムするために使用されるいかなる第三者IPも、未許可のユーザによって閲覧されることから保護することができる。
【0071】
管理パーティション530は、構成可能なハードウェアプラットフォーム510を構成し、そこにインターフェースする制御プレーンのためのソフトウェアスタックを含むことができる。制御プレーンソフトウェアスタックは、サーバコンピュータ520に接続された1つ以上の構成可能なハードウェアプラットフォームの構成可能な領域を管理するための、構成可能な論理(CL)アプリケーション管理層532を含むことができる。特に、CLアプリケーション管理層532は、(領域516Aおよび516B等の)領域およびそれらの現在の状態を追跡することができる。例えば、状態は、領域が使用中であるか、または未使用であるかを示すことができる。アプリケーション論理設計(アプリケーション論理構造)を構成可能なハードウェアプラットフォーム510にロードする要求が受信されると、CLアプリケーション管理層532は、アプリケーション論理設計を伴って構成するために利用可能である領域を選択することができ、CLアプリケーション管理層532は、選択された領域に対応する構成データを要求することができる。アプリケーション論理設計を使用したインスタンスを終了すると、またはアプリケーション論理設計が分解されると、CLアプリケーション管理層532は、領域を別のインスタンスによって、または異なるアプリケーション論理設計のために再使用することができるように、アプリケーション論理設計に対応する領域の状態を未使用に変更する。加えて、CLアプリケーション管理層532は、構成可能なハードウェアプラットフォーム510の任意の周辺機器のアドレス空間の帯域幅の割り当ておよび分配を管理することができる。具体的な一例として、帯域幅およびアドレス空間は、帯域幅の均一な分割にデフォルト設定することができ、また、構成可能なハードウェアプラットフォーム510の異なる領域の間で空間をアドレッシングすることができる。
【0072】
CLアプリケーション管理層532は、(論理リポジトリサービス550およびヘルス管理サービス等の)ウェブサービス、構成可能なハードウェアプラットフォーム510、およびユーザパーティション540と通信するために使用することができる。例えば、CLアプリケーション管理層532は、ユーザパーティション540の開始に応じて、構成データをフェッチする要求を論理リポジトリサービス550に発行することができる。CLアプリケーション管理層532は、ハードウェア522の共有されたメモリを使用して、またはサーバコンピュータ520を構成可能なハードウェアプラットフォーム510に接続する相互接続を通じてパーティション間メッセージを送信および受信することによって、ユーザパーティション540と通信することができる。具体的には、CLアプリケーション管理層532は、構成可能なハードウェアプラットフォーム510のメールボックス論理511に対するメッセージの読み出しおよび書き込みを行うことができる。メッセージは、構成可能なハードウェアプラットフォーム510の領域を再構成または分解する、エンドユーザアプリケーション541による要求を含むことができる。CLアプリケーション管理層532は、構成可能なハードウェアプラットフォーム510を再構成する要求に応じて、構成データをフェッチする要求を論理リポジトリサービス550に発行することができる。CLアプリケーション管理層532は、構成可能なハードウェアプラットフォーム510を分解する要求に応じて、分解シーケンスを開始することができる。CLアプリケーション管理層532は、ユーザパーティション540への通信パスが機能しているかどうかを判定するために、ウォッチドッグ関連のアクティビティを行うことができる。
【0073】
制御プレーンソフトウェアスタックは、構成データを構成可能なハードウェアプラットフォーム510にロードすることができるように、構成可能なハードウェアプラットフォーム510の構成ポート512(例えば、構成アクセスポート)にアクセスするためのCL構成層534を含むことができる。例えば、CL構成層534は、構成可能なハードウェアプラットフォーム510の完全なまたは部分的な構成を行うために、1つまたは複数のコマンドを構成ポート512に送信することができる。CL構成層534は、構成データに従って構成可能な論理をプログラムすることができるように、構成データ(例えば、ビットストリーム)を構成ポート512に送信することができる。構成データは、ホスト論理および/またはアプリケーション論理を指定することができる。
【0074】
制御プレーンソフトウェアスタックは、サーバコンピュータ520を構成可能なハードウェアプラットフォーム510に接続する物理的相互接続を通じて通信するための管理ドライバ536を含むことができる。管理ドライバ536は、物理的相互接続を通じて伝送するための管理パーティション530に由来するコマンド、要求、応答、メッセージ、およびデータをカプセル化することができる。加えて、管理ドライバ536は、物理的相互接続を通じて管理パーティション530に送信されたコマンド、要求、応答、メッセージおよびデータをカプセル化解除することができる。具体的には、管理ドライバ536は、構成可能なハードウェアプラットフォーム510の管理機能513と通信することができる。例えば、管理機能513は、物理的相互接続に接続されたデバイスの列挙中にアドレス範囲にマッピングされた物理または仮想関数とすることができる。管理ドライバ536は、管理機能513に割り当てられたアドレス範囲にトランザクションをアドレッシングすることによって、管理機能513と通信することができる。
【0075】
制御プレーンソフトウェアスタックは、CL管理および監視層538を含むことができる。CL管理および監視層538は、物理的相互接続で起こるトランザクションを監視および分析して、構成可能なハードウェアプラットフォーム510のヘルス(状態)を決定すること、および/または構成可能なハードウェアプラットフォーム510の使用状況特性を決定することができる。
【0076】
構成可能なハードウェアプラットフォーム510は、非構成可能なハードマクロと、構成可能な論理とを含むことができる。ハードマクロは、入力/出力ブロック(例えば、シリアライザおよびデシリアライザ(SERDES)ブロックおよびギガビットトランシーバ)、アナログ−デジタル変換器、メモリ制御ブロック、試験アクセスポート、および構成ポート512等の、構成可能なハードウェアプラットフォーム510内の特定の機能を行うことができる。構成可能な論理は、構成データを構成可能なハードウェアプラットフォーム510にロードすることによってプログラムすること、または構成することができる。例えば、構成ポート512は、構成データをロードするために使用することができる。1つの例として、構成データは、構成ポート512によってアクセス可能な(フラッシュメモリ等の)メモリに記憶することができ、構成データは、構成可能なハードウェアプラットフォーム510の(電源投入シーケンス中等の)初期化シーケンス中に自動的にロードすることができる。加えて、構成ポート512は、構成可能なハードウェアプラットフォーム510内のオフチッププロセッサまたはインターフェースを使用してアクセスすることができる。
【0077】
構成可能な論理は、ホスト論理および1つ以上のアプリケーション論理設計を含むようにプログラムすることができる。ホスト論理は、エンドユーザがハードマクロへの、および物理的相互接続への制限されたアクセスを有するように、エンドユーザからハードマクロの少なくともいくつかのインターフェースを保護することができる。例えば、ホスト論理は、メールボックス論理511と、構成ポート512と、管理機能513と、ホストインターフェース514と、アプリケーション機能515とを含むことができる。ホスト論理は、複数のアプリケーション設計が構成可能なハードウェアプラットフォーム510上で同時に動作することができるように、もう一方のアプリケーション設計から一方のアプリケーション設計をカプセル化し、シールドすることができる。エンドユーザは、アプリケーション論理を構成可能なハードウェアプラットフォーム510の構成可能な領域516A〜Bのうちの1つにロードさせることができる。エンドユーザは、(アプリケーション機能515A〜Bを介して)ユーザパーティション540から構成可能な領域516A〜Bと通信することができる。具体的には、第1のユーザパーティションは、アプリケーション機能515Aを使用して構成可能な領域516Aと通信することができ、第2のユーザパーティションは、アプリケーション機能515Bを使用して構成可能な領域516Bと通信することができる。
【0078】
ホストインターフェース論理514は、物理的相互接続にシグナリングし、通信プロトコルを実装するための回路(例えば、ハードマクロおよび/または構成可能な論理)を含むことができる。通信プロトコルは、相互接続を通じて通信するためのルールおよびメッセージフォーマットを指定する。加えて、ホストインターフェース論理514は、アプリケーション機能515A〜Bの間で、送出トランザクションの帯域幅を分配することができる。アプリケーション機能515A〜Bは、ユーザパーティション540A〜Cのドライバと通信するために使用することができる。具体的には、各アプリケーション機能515A〜Bは、物理的相互接続に接続されたデバイスの列挙中に、アドレス範囲にマッピングされた物理または仮想関数とすることができる。アプリケーションドライバは、所与のアプリケーション機能515A〜Bに割り当てられたアドレス範囲にトランザクションをアドレッシングすることによって、アプリケーション機能515A〜Bのうちの1つと通信することができる。具体的には、アプリケーション機能515A〜Bは、アプリケーション論理管理ドライバ542と通信して、制御プレーンを通じてコマンド、要求、応答、メッセージ、およびデータを交換することができる。各アプリケーション機能515A〜Bは、アプリケーション論理データプレーンドライバ543と通信して、データプレーンを通じてコマンド、要求、応答、メッセージおよびデータを交換することができる。
【0079】
メールボックス論理511は、1つ以上のバッファと、1つ以上の制御レジスタとを含むことができる。例えば、所与の制御レジスタは、特定のバッファと関連付けることができ、レジスタは、管理パーティション530とユーザパーティション540とを同期させるために、セマフォとして使用することができる。具体的な一例として、パーティションが制御レジスタの値を修正することができる場合は、パーティションをバッファに書き込むことができる。バッファおよび制御レジスタは、管理機能513およびアプリケーション機能515A〜Bからアクセス可能とすることができる。メッセージがバッファに書き込まれるときに、メッセージが終了していることを示すために、別の制御レジスタ(例えば、メッセージ準備完了レジスタ)に書き込むことができる。メッセージ準備完了レジスタは、メッセージが存在するかどうかを判定するために、パーティションによってポーリングすることができ、またはメッセージ準備完了レジスタが書き込まれることに応じて、割り込みを生成し、パーティションに伝送することができる。
【0080】
ユーザパーティション540は、エンドユーザアプリケーション540を構成可能なハードウェアプラットフォーム510にインターフェースするためのソフトウェアスタックを含むことができる。アプリケーションソフトウェアスタックは、制御プレーンおよびデータプレーンと通信するための機能を含むことができる。具体的には、アプリケーションソフトウェアスタックは、構成可能なハードウェアプラットフォーム510へのアクセスをエンドユーザアプリケーション540に提供するためのCL−アプリケーションAPI544を含むことができる。CL−アプリケーションAPI544は、構成可能なハードウェアプラットフォーム510および管理パーティション530と通信するための方法または機能のライブラリを含むことができる。例えば、エンドユーザアプリケーション541は、CL−アプリケーションAPI544のAPIを使用して、コマンドまたはデータを構成可能なアプリケーション論理516に送信することができる。特に、CL−アプリケーションAPI544のAPIは、アプリケーション論理(AL)データプレーンドライバ543とインターフェースすることができ、これは、対応する構成可能なアプリケーション論理516A〜Bと通信することができるアプリケーション機能515A〜Bのうちの1つを標的とするトランザクションを生成することができる。この様態で、エンドユーザアプリケーション541は、アプリケーション論理に、データを受信させ、処理させ、および/または該データで応答させて、潜在的に、エンドユーザアプリケーション541のタスクを加速することができる。別の例として、エンドユーザアプリケーション541は、CL−アプリケーションAPI544のAPIを使用することによって、コマンドまたはデータを管理パーティション530に送信することができる。特に、CL−アプリケーションAPI544のAPIは、AL管理ドライバ542とインターフェースすることができ、これは、メールボックス論理511と通信することができるアプリケーション機能515A〜Bのうちの1つを標的とするトランザクションを生成することができる。この様態で、エンドユーザアプリケーション541は、管理パーティション530に、構成可能なハードウェアプラットフォーム510に関する動作可能またはメタデータを提供させること、および/または構成可能なアプリケーション論理516A〜Bを再構成するように要求させることができる。
【0081】
アプリケーションソフトウェアスタックは、ハイパーバイザまたはカーネル524と併せて、エンドユーザアプリケーション541によって物理的相互接続を通じて行うことが可能な動作を制限するために使用することができる。例えば、計算サービスプロバイダは、(ファイルをマシンイメージと関連付けること等によって)AL管理ドライバ542、ALデータプレーンドライバ543、およびCL−アプリケーションAPI544を提供することができる。これらの構成要素は、エンドユーザよりも高い特権レベルを有するユーザおよびサービスだけがファイルに書き込むことを許可することによって、改変から保護することができる。AL管理ドライバ542およびALデータプレーンドライバ543は、対応するアプリケーション機能515A〜Bのアドレス範囲内のアドレスだけを使用するように制限することができる。加えて、入力/出力メモリ管理ユニット(I/O MMU)は、相互接続トランザクションを、対応するアプリケーション機能515A〜Bまたは管理機能513のアドレス範囲内にあるように制限することができる。具体的な一例として、ユーザパーティション540Aは、アプリケーション機能515A、およびアプリケーション論理516Aのその対応する構成可能な領域を使用するように割り当てることができる。ユーザパーティション540Bは、アプリケーション機能515B、およびアプリケーション論理516Bのその対応する構成可能な領域を使用するように割り当てることができる。I/O MMUは、ユーザパーティション540Aがアプリケーション機能515Aに書き込むことだけしかできないように、アプリケーション機能515Aがユーザパーティション540Aに書き込むことだけしかできないように、ユーザパーティション540Bがアプリケーション機能515Bに書き込むことだけしかできないように、およびアプリケーション機能515Bがユーザパーティション540Bに書き込むことだけしかできないように、アクセス制限を実施することができる。
【0082】
図6は、構成データをフェッチし、構成データを使用して、マルチテナント環境の構成可能なハードウェアのインスタンスを構成し、そして構成可能なハードウェアのインスタンスを使用する例示的な方法600のシーケンス図である。このシーケンス図は、構成可能な論理を構成するために使用される計算サービスインフラストラクチャの異なる要素によって使用される一連のステップを例示する。1つの例として、計算サービスプロバイダのインフラストラクチャ構成要素は、マーケットプレイス610と、顧客インスタンス612と、制御プレーン614と、構成可能なハードウェアプラットフォーム616と、論理リポジトリサービス618とを含むことができる。マーケットプレイスサービス610は、エンドユーザによって、または計算サービスプロバイダのエンドユーザにそれらのアクセラレータを提供もしくは販売する独立したハードウェア開発者によって作成される、ハードウェアアクセラレータのための構成データを受信することができる。マーケットプレイスサービス610は、エンドユーザが自分達のニーズに適したハードウェアアクセラレータを見出すことができるように、購入のためにまたはライセンス付与のために入手可能であるアクセラレータのリストを提供することができる。顧客インスタンス612は、エンドユーザが計算サービスプロバイダのリソースを展開することに応じて起動されるサーバコンピュータおよびその関連ソフトウェアとすることができる。顧客インスタンスは、構成可能なハードウェアプラットフォーム616の構成を管理するために使用することができる制御プレーンソフトウェア614を含むことができる。構成可能なハードウェアプラットフォーム616は、上で説明したように、再構成可能な論理と、ホスト論理とを含むことができる。論理リポジトリサービス618は、例えば、製品コード、マシンインスタンス識別子、および/または構成可能なハードウェア識別子によってインデックスを付すことができる、構成データのリポジトリを含むことができる。論理リポジトリサービス618は、インデックスのうちの1つを使用して構成データの要求を受信することができ、また、構成データを制御プレーンに返すことができる。
【0083】
計算サービスプロバイダインフラストラクチャの構成要素は、顧客インスタンス612の展開および使用中に、種々のフェーズで使用することができる。例えば、このフェーズとしては、構成データフェッチングフェーズ620、アプリケーション論理構造フェーズ630、およびアプリケーションフェーズ640を挙げることができる。
【0084】
構成データフェッチングフェーズ620は、アプリケーション論理設計およびアプリケーション論理を配置するための再構成可能な領域を識別することを含むことができる。アプリケーション論理のための、および再構成可能な領域に対応する構成データは、論理リポジトリサービス618からフェッチすることができる。具体的には、計算サービスのエンドユーザは、622で、マーケットプレイスサービス610を使用して、マシンインスタンスをサブスクライブし、起動することができる。マーケットプレイスサービス610は、624で、顧客インスタンス612を初期化することができるように、マシンイメージをサーバコンピュータにロードさせることができる。マシンイメージは、エンドユーザによって、および計算サービスプロバイダによって提供される制御プレーンソフトウェアによって書き込まれる、および/または使用される、アプリケーションソフトウェアを含むことができる。仮想マシンインスタンスが顧客のためにブートされている間に、アプリケーション論理の要求626を制御プレーン614に送信することができる。制御プレーン614は、アプリケーション論理を特定の未使用領域、または構成可能なハードウェアプラットフォーム616の領域にマッピングすることができる。制御プレーン614に再構成可能な領域を選択させることによって、領域を選択する詳細を顧客インスタンス612から取り出すことができる。制御プレーン614は、次いで628で、論理リポジトリサービス618からアプリケーション論理および再構成可能な領域に対応する構成データをフェッチする要求を送信することができる。629で、論理リポジトリサービス618は、構成データで応答することができる。したがって、614の制御プレーンソフトウェアは、アプリケーション論理を構成可能なハードウェアプラットフォームにロードして、構成可能なハードウェアプラットフォームの選択領域を構成するように、アプリケーション論理に対応する構成データのコピーを受信することができる。
【0085】
構成フェーズ630は、構成データを構成可能なハードウェアプラットフォーム616にロードすることを含むことができる。構成フェーズ630は、632で、構成可能なハードウェアプラットフォームをクリーニングすることを含むことができる。例えば、632で構成可能なハードウェアプラットフォームをクリーニングすることは、以前の顧客のデータが現在の顧客によって観察できないように、構成可能なハードウェアプラットフォームおよび/または内部メモリ(例えば、ブロックRAM)と通信する任意の外部メモリ(例えば、パブリック周辺機器)に書き込むことを含むことができる。632でメモリをクリーニングすることは、メモリの記憶場所に、全てゼロを書き込むこと、全て1を書き込むこと、および/またはランダムなパターンを書き込むことを含むことができる。加えて、構成可能なハードウェアプラットフォーム616の構成可能な論理メモリは、完全にまたは部分的にスクラブすることができる。構成可能なハードウェアプラットフォーム616をクリーニングした後に、634で、構成可能なハードウェアプラットフォーム616にロードされるホスト論理バージョンを制御プレーン614に返すことができる。ホスト論理バージョンは、635で、アプリケーション論理が、構成可能なハードウェアプラットフォーム616にロードされるホスト論理と互換であるかどうかを検証するために使用することができる。ホスト論理およびアプリケーション論理が互換でない場合は、構成フェーズ630を中止することができる(図示せず)。代替的に、ホスト論理およびアプリケーション論理が互換である場合は、636で、構成フェーズ630を続けることができる。アプリケーション論理は、636でアプリケーション論理を構成可能なハードウェアプラットフォーム616の選択された領域にロードすることができるように、制御プレーン614から構成可能なハードウェアプラットフォーム616にコピーすることができる。636でロードした後に、構成可能なハードウェアプラットフォーム616は、637で、構成可能なハードウェアプラットフォーム616にロードした機能(例えば、アプリケーション論理)が準備完了であることを示すことができる。制御プレーン614は、638で、アプリケーション論理が初期化され、使用する準備ができたことを顧客インスタンス612に示すことができる。
【0086】
アプリケーションフェーズ640は、アプリケーション論理が初期化された後に開始することができる。アプリケーションフェーズ640は、アプリケーションソフトウェアを顧客インスタンス612で実行することと、アプリケーション論理を構成可能なハードウェアプラットフォーム616で実行することとを含むことができる。特に、顧客インスタンス612のアプリケーションソフトウェアは、642で、構成可能なハードウェアプラットフォーム616のアプリケーション論理と通信することができる。例えば、アプリケーションソフトウェアは、データをアプリケーション論理に転送させることができ、データは、アプリケーション論理によって処理することができ、処理データおよび/または状態情報は、アプリケーションソフトウェアに返すことができる。アプリケーション論理は、潜在的に、汎用コンピュータのソフトウェアだけを使用することと比較して処理速度を加速することができる、専用の、またはカスタマイズされたハードウェアを含むことができる。アプリケーション論理は、顧客インスタンス612の期間にわたって同じ機能を行うことができ、またはアプリケーション論理は、顧客インスタンス612を実行している間に適合させる、または再構成することができる。例えば、顧客にインスタンス612で実行するアプリケーションソフトウェアは、異なるアプリケーション論理を構成可能なハードウェアプラットフォーム616にロードすることを要求することができる。特に、アプリケーションソフトウェアは、644で、構成可能なハードウェアプラットフォーム616に要求を発行することができ、該要求は、646で、要求を制御プレーン614に転送することができる。制御プレーン614は、628で、新しいアプリケーション論理を論理リポジトリサービス618からフェッチすることを始めることができる。新しいアプリケーション論理が稼働中の顧客インスタンスにロードされると、顧客が顧客インスタンス612のために変更されていないので、632のクリーニングステップを省略することができる。
【0087】
加えて、分解フェーズ(図示せず)は、顧客データがさらに保護されるように、構成可能なハードウェアプラットフォーム616をクリアまたはクリーニングするために使用することができる。例えば、顧客が顧客インスタンス612の使用を停止したときに、構成可能なハードウェアプラットフォーム616の内部および/または外部メモリをスクラブすることができ、および/またはアプリケーション論理と関連付けられた構成論理メモリを分解シーケンスの一部としてスクラブすることができる。具体的には、内部メモリ、外部メモリ、および/または構成論理メモリは、全てゼロで、全て1で、ランダム値で、および/または予め定義された値で上書きすることができる。例えば、構成論理メモリは、再構成可能な論理を低電力状態になるように構成する値で書き込むことができる。
【0088】
図7は、構成可能なハードウェアプラットフォームを使用する例示的な方法700のフロー図である。710で、構成可能なハードウェアプラットフォームがホスト論理の動作を行うように、ホスト論理を再構成可能な論理の第1の領域にロードすることができる。ホスト論理は、ホストインターフェースからトランザクションのための制限されたアクセスを実施するために使用される制御プレーン機能を含むことができる。例えば、制御プレーン機能は、制御プレーン機能に割り当てられたアドレス範囲外にあるトランザクションを拒否することができる。加えて、ホスト論理は、アプリケーション論理が、構成可能なハードウェアプラットフォームのハードマクロを使用すること、およびホストデバイスへの物理インターフェースにアクセスすることを限定または制限するための論理を含むことができる。したがって、ホスト論理は、ハードマクロへの、およびコンピューティングインフラストラクチャの他の構成要素へのインターフェースがホスト論理によって管理されるように、アプリケーション論理をカプセル化することができる。
【0089】
ホスト論理は、一度に、または漸増的にロードすることができる。例えば、ホスト論理は、構成可能なハードウェアプラットフォームのリセット信号のデアサートに応じてロードされる静的論理を含むことができる。具体的な一例として、静的論理に対応する構成データは、構成可能なハードウェアプラットフォームのフラッシュメモリに記憶することができ、フラッシュメモリのコンテンツは、静的ホスト論理を伴って構成可能なハードウェアプラットフォームをプログラムするために使用することができる。1つの実施形態において、静的論理は、介入を伴わずにホストコンピュータ(例えば、顧客インスタンス)によってロードすることができる。追加的または代替的に、ホスト論理は、静的論理をロードした後にロードする再構成可能な論理を含むことができる。例えば、再構成可能なホスト論理は、静的ホスト論理が動作している間に加えることができる。特に、再構成可能なホスト論理は、再構成可能なホスト論理をロードすることを要求するトランザクションを受信した時点でロードすることができる。例えば、トランザクションは、構成可能なハードウェアプラットフォームをホストコンピュータに接続する物理的相互接続を通じてホストコンピュータに伝送することができる。
【0090】
ホスト論理を静的論理構成要素および再構成可能な論理構成要素に分けることによって、ホスト論理を構成可能なハードウェアプラットフォームに漸増的にロードすることができる。例えば、静的論理は、通信インターフェース、列挙論理、および構成管理論理等のホスト論理の基本機能を含むことができる。通信インターフェースを静的論理に提供することによって、コンピューティングシステムの電源をオンにしたとき、および/またはリセットしたときに、構成可能なハードウェアプラットフォームを物理的相互接続上で発見すること、または列挙することができる。再構成可能な論理は、更新をホスト論理に提供するために、および高レベルの機能をホスト論理に提供するために使用することができる。例えば、いくつかの相互接続技術は、相互接続に取り付けられるデバイスを列挙するための制限時間を有する。ホスト論理を構成可能なハードウェアプラットフォームにロードする時間は、列挙に割り当てられたタイムバジェットに含むことができるので、初期のホスト論理は、比較的迅速にロードされるようにサイズ決定することができる。したがって、静的論理は、構成可能なハードウェアプラットフォームが相互接続技術によって指定された制限時間内で動作可能であり得るように、ホスト論理機能のサブセットとすることができる。再構成可能な論理は、列挙またはブートアップシーケンスが完了した後に、加えられるべき追加的なホスト論理機能を提供することができる。1つの例として、(DMAエンジン、CHPファブリック、周辺機器ファブリック、またはパブリック周辺機器インターフェース等の)データプレーンと関連付けられたホスト論理は、静的論理がロードされた後に、再構成可能な論理としてロードすることができる。
【0091】
720で、第1のトランザクションをホストインターフェースで受信することに応じて、第1のアプリケーション論理設計(アプリケーション論理構造)を再構成可能な論理の第2の領域にロードすることができる。再構成可能な論理の第2の領域は、ホスト論理が修正されないように、再構成可能な論理の第1の領域と非オーバーラップとすることができる。加えて、再構成可能な論理の第2の領域は、静的ホスト論理へのインターフェースを有することができる。ホスト論理は、第1のトランザクションを分析して、第1のアプリケーション論理設計がロードされる前に、第1のトランザクションが制御プレーン機能のアクセス基準を満たすことを確実にすることができる。制御プレーンのアクセス基準を満たした場合に、第1のアプリケーション論理設計をロードすることができる。第1のトランザクションは、例えば、所与のアドレス範囲内のアドレスを有することによって、または認可トークンを含むことによって、アクセス基準を満たすことができる。例えば、第1のトランザクションは、アプリケーション論理のロードを開始するために、ホスト論理の制御レジスタに対応するアドレスを含むことができる。別の例として、認可トークンは、要求が認可されたかどうかを判定するために、ホスト論理によって検証することができる。
【0092】
730で、第2のトランザクションをホストインターフェースで受信することに応じて、第2のアプリケーション論理設計(アプリケーション論理構造)を再構成可能な論理の第3の領域にロードすることができる。再構成可能な論理の第3の領域は、ホスト論理および第1のアプリケーション論理設計が修正されないように、再構成可能な論理の第1のおよび第2の領域と非オーバーラップとすることができる。加えて、再構成可能な論理の第3の領域は、静的ホスト論理へのインターフェースを有することができる。第2および第3の領域は、第2の領域と第3の領域との間にいかなる直接通信パスも存在しないように、互いに隔離することができる。第1のトランザクションに類似して、ホスト論理は、第2のトランザクションを分析して、第2のアプリケーション論理設計がロードされる前に、第2のトランザクションが制御プレーン機能のアクセス基準を満たすことを確実にすることができる。
【0093】
740で、第1のアプリケーション論理設計および第2のアプリケーション論理設計のそれぞれのリソースを調停(調節)するために、ホスト論理を使用することができる。1つの例として、ホストインターフェースから情報を伝送するときに、第1のアプリケーション論理設計および第2のアプリケーション論理設計のそれぞれによって使用される帯域幅の量を制御するために、ホスト論理を使用することができる。例えば、ホスト論理は、ホストインターフェースとアプリケーション論理設計のそれぞれとの間のフォーマットおよび制御層を含むことができる。特に、フォーマットおよび制御層は、アプリケーション論理設計のそれぞれからデータを受信するためのストリーミングインターフェースを含むことができる。ストリーミングされたデータは、ホストインターフェースからデータを伝送することができるように、分割(例えば、パケット化)し、フォーマットすることができる。フォーマットおよび制御層は、ホストインターフェースの待ち時間および帯域幅の使用状況を管理することができるように、ストリーミングされたデータを異なるサイズのブロックに分割することができる。例えば、フォーマットおよび制御層は、アプリケーション論理設計のそれぞれに由来するホストインターフェースから伝送されたデータの量を追跡することができ、フォーマットおよび制御層は、異なるアプリケーション論理設計の間で帯域幅を分配することができるように、異なるアプリケーション論理設計を調停することができる。具体的な一例として、帯域幅は、異なるアプリケーション論理設計の間で均等に分けることができる。別の例として、帯域幅の分配は、ホスト論理の制御プレーン機能からアクセス可能である制御レジスタを使用して指定することができる。帯域幅は、伝送されるデータだけを補償する、生の帯域幅(例えば、トランザクションの制御情報を送信するための帯域幅)または有効な帯域幅に基づいて分配することができる。アプリケーション論理設計がトランザクションを直接作成すること、および/または物理的相互接続または異なるアプリケーション論理設計のトランザクションを閲覧することを制限することができるので、ホストインターフェースとアプリケーション論理設計との間にフォーマットおよび変換層を間置することによって、潜在的に、ホストコンピュータのセキュリティおよび可用性を高めることができる。したがって、フォーマットおよび変換層の使用は、物理的相互接続に起こるトランザクションの完全性およびプライバシーを保護することができる。
【0094】
別の例として、ホスト論理は、第1のアプリケーション論理設計および第2のアプリケーション論理設計のそれぞれによって使用される内部または外部リソースの量を制御するために使用することができる。具体的な一例として、ホスト論理は、アプリケーション論理設計のそれぞれによって使用されるエネルギーまたはパワーの量を制御するために使用することができる。特に、構成可能なハードウェアプラットフォームは、異なるアプリケーション論理設計の間で分けることができる、制限されたパワーバジェットを有することができる。ホスト論理は、設計のサイズ(例えば、ゲートカウント)および設計の1つ以上のクロックの周波数に基づいて、各アプリケーション設計のエネルギー消費を推定することができる。代替的に、アプリケーション論理設計のそれぞれを構成可能なハードウェアプラットフォームにロードするときに、推定されるエネルギー消費をホスト論理の制御レジスタにロードすることができる。ホスト論理は、アプリケーション論理設計が構成可能なハードウェアプラットフォームのパワーバジェットに従うように、アプリケーション論理設計のそれぞれによって消費されるエネルギーを制御するために使用することができる。アプリケーション論理設計によって消費エネルギーを制御することは、アプリケーション論理設計の1つ以上のクロックの周波数をゲーティングまたは変更することと、アプリケーション論理設計の全部または一部分のパワーをゲーティングすることと、または電圧を変更することとを含むことができる。
【0095】
750で、ホスト論理を、共有された周辺機器と、第1のアプリケーション論理設計および第2のアプリケーション論理設計との間のインターフェースとして使用することができる。上で説明したように、共有された周辺機器は、メモリ、記憶デバイス、および/または他の構成可能なハードウェアプラットフォームを含むことができる。インターフェースは、アプリケーション論理設計に、転送プロトコルの低レベル詳細に従うという負担をかけないように、および(故障を引き起こすこと、または機密情報にアクセスすること等によって)共有された周辺機器が誤用されないように、共有された周辺機器とアプリケーション論理設計との間の全ての転送をフォーマットすることができる。ホスト論理は、共有された周辺機器と、第1のアプリケーション論理設計および第2のアプリケーション論理設計との間のデータ転送の帯域幅を分配することができる。例えば、帯域幅は、固定分配(例えば、均等加重)またはプログラムされた分配に基づいて分配することができる。ホスト論理は、共有された周辺機器と、第1のアプリケーション論理設計および第2のアプリケーション論理設計との間のデータ転送のサイズを実施することができる。1つの例として、データ転送のサイズを縮小することによって、転送の待ち時間を低減させることができる。別の例として、データ転送のサイズを増大させることによって、有効な帯域幅または利用度を増加させることができる。
【0096】
共有された周辺機器は、共有された周辺機器に割り当てられたアドレス範囲内の異なるそれぞれのアドレスによってインデックスが付される複数の機能、レジスタ、および/または記憶場所を含むことができる。異なる機能、レジスタ、および/または記憶装置場所は、各アプリケーション論理設計が、共有された周辺機器の異なる部分への排他的なアクセスを有することができるように、異なるアプリケーション論理設計の間で分けることができる。例えば、共有された周辺機器のアドレスは、複数のアドレス範囲に分けることができ、各アプリケーション論理設計には、異なるアドレス範囲へのアクセスを与えることができる。特に、ホスト論理は、第1のアプリケーション論理設計から共有された周辺機器の第1のアドレス範囲へのアクセスを制限することができ、また、第2のアプリケーション論理設計から共有された周辺機器の第2のアドレス範囲へのアクセスを制限することができる。代替的または追加的に、共有された周辺機器は、共有された機能、レジスタ、および/または記憶場所を有することができる。したがって、各アプリケーション論理設計には、(あるアドレス範囲を使用してアクセス可能な)プライベート部分、および(異なるアドレス範囲を使用してアクセス可能な)共有された周辺機器の共有された部分へのアクセスを与えることができる。
【0097】
ホスト論理はまた、アプリケーション論理設計のトランザクションを分析するために使用することもできる。例えば、ホスト論理は、アプリケーション論理設計および/またはホスト論理の帯域幅、待ち時間、および他の性能特性等の動作特性を追跡することができる。別の例として、ホスト論理は、トランザクションが予め定義された基準に従っているかどうかを判定するために、トランザクションを分析することができる。トランザクションが基準に従っていない場合、ホスト論理は、潜在的に、アプリケーション論理設計に由来するトランザクションをキャンセルすることができる。
【0098】
図8は、サーバハードウェア810と、集積回路820上に構成された複数の顧客論理設計830A〜Cを有する集積回路820とを含む、サーバコンピュータ800の一実施例を示すシステム図である。サーバハードウェア810は、CPUと、メモリと、コネクタと、インターフェースと、電源と、ファンと、種々の他のハードウェアコンポーネントとを含むことができる。集積回路820は、コンピューティングタスクを行うようにプログラムすること、または構成することができる再構成可能な論理を含むことができる。例えば、集積回路820は、FPGA、CPLD、または他のプログラマブルハードウエアデバイスとすることができる。集積回路820は、サーバハードウェア810と集積回路820との間に低待ち時間通信パスを提供する相互接続840を使用して、サーバハードウェア810に接続することができる。例えば、集積回路820およびサーバハードウェア810は、PCI、PCI−Express、もしくは他のバス等の通信プロトコル、またはシリアル相互接続プロトコルを使用する相互接続を通じて信号を送信することによって通信することができる。1つの例として、サーバハードウェア810および集積回路820は、サーバコンピュータ800のマザーボードに接続することができる。別の例として、集積回路820は、サーバコンピュータ800の拡張スロットに挿入される拡張カードにマウントすることができる。低待ち時間相互接続を使用してサーバハードウェア810および集積回路820を密結合することによって、集積回路820を、サーバハードウェア810で実行する数多くの計算集約的なアプリケーションのためのハードウェアアクセラレータとして使用することができる。対照的に、Ethernetまたはインターネットプロトコル(IP)ネットワーク等のより高い待ち時間相互接続を通じて接続されるハードウェアアクセラレータは、サーバハードウェアとハードウェアアクセラレータとの間の通信オーバーヘッドのため、アプリケーションを加速するために提供する機会がより少なくなり得る。
【0099】
集積回路820は、ホスト論理850と、複数の顧客論理設計830A〜Cとを含むことができる。ホスト論理850は、デバイスの管理可能性およびセキュリティのレベルを実施するために計算サービスプロバイダによって展開される論理とすることができる。ホスト論理850は、静的論理と、再構成可能な論理とを含むことができる。例えば、静的論理は、ブート時間にオンボードフラッシュメモリデバイスからロードすることができる。ホスト再構成可能な論理は、内部または外部のフラッシュメモリデバイスおよび専用のマイクロコントローラを使用するブート時間の後に(例えば、ランタイムで)、または相互接続840を通じてサーバハードウェア810によってロードすることができる。ホスト論理850は、顧客論理設計830A〜Cによって起こる攻撃からサーバコンピュータ800を保護するために使用することができる。具体的には、ホスト論理850は、相互接続840へのインターフェースを所有または制御することによって、顧客論理設計830A〜Cをカプセル化またはサンドボックス化する。具体的な一例として、相互接続840は、PCI−Expressとすることができ、ホスト論理850は、ホスト論理850が集積回路820のPCI−Expressインターフェースを所有し、また、PCI−ExpressアドレスならびにPCI−Expressバス、デバイス、機能、および代替のルーティング識別子を制御するので、サーバコンピュータ800をPCI−Expressのレベル攻撃から保護することができる。
【0100】
ホスト論理850は、異なる顧客論理設計830A〜Cの間で(相互接続840を通じた帯域幅等の)リソースを分配するために使用することができる調停論理860を含むことができる。例えば、顧客論理設計830A〜Cのそれぞれは、異なる顧客によって動作させることができる。計算サービスプロバイダは、顧客論理設計830A〜Cを集積回路820の異なるそれぞれの再構成可能な論理領域にロードするために、ホスト論理850を使用することができる。調停論理860は、異なる時間に相互接続840への異なる顧客のアクセスを提供することによって、サービスの一貫した質を各顧客に提供することができる。具体的には、各顧客には、ラウンドロビンまたは他のスケジュールされた順序で、相互接続840へのアクセスを与えることができる。調停論理860は、各顧客論理設計830A〜Cに提供される帯域幅を、指定された帯域幅の量に制限することができる。例えば、集積回路820が顧客論理設計のための4つの異なる再構成可能な論理領域を含む場合、調停論理860は、各顧客論理設計に提供される帯域幅を相互接続840の利用可能帯域幅の4分の1に制限することができる。この様態で、顧客は、利用可能帯域幅の全てを使い果たすこと等によって、互いに干渉することができず、顧客は、他の顧客が集積回路820上で顧客論理設計を実行しているかどうかを直接的または間接的に観察することができない。例えば、顧客は、他の顧客が集積回路820で顧客論理設計を実行しているかどうかを観察するために、集積回路820とサーバコンピュータ810との間の待ち時間または帯域幅を確実に使用することができない。
【0101】
図9は、説明される技術革新を実行することができる適切なコンピューティング環境900の一般的な例を表す。コンピューティング環境900は、本技術革新を多様な汎用または専用コンピューティングシステムで実行することができるので、使用または機能の範囲に関していかなる限定も示唆することを意図しない。例えば、コンピューティング環境900は、様々なコンピューティングデバイス(例えば、デスクトップコンピュータ、ラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータなど)のうちのいずれかとすることができる。
【0102】
図9を参照すると、コンピューティング環境900は、1つ以上の処理ユニット910、915と、メモリ920、925とを含む。
図9において、この基本構成930は、破線内に含まれる。処理ユニット910、915は、コンピュータ実行可能命令を実行する。処理ユニットは、汎用中央処理ユニット(CPU)、特定用途向け集積回路(ASIC)内のプロセッサ、または任意の他のタイプのプロセッサとすることができる。マルチ処理システムでは、複数の処理ユニットがコンピュータ実行可能命令を実行して、処理能力を高める。例えば、
図9は、中央処理ユニット910、ならびにグラフィックス処理ユニットまたは共処理ユニット915を示す。有形メモリ920、925は、処理ユニット(複数可)によってアクセス可能である揮発性メモリ(例えば、レジスタ、キャッシュ、RAM)、不揮発メモリ(例えば、ROM、EEPROM、フラッシュメモリなど)、またはこれら2つのいくつかの組み合わせとすることができる。メモリ920、925は、処理ユニット(複数可)による実行に適したコンピュータ実行可能命令の形態で、本明細書で説明される1つ以上の技術革新を実装するソフトウェア980を記憶する。
【0103】
コンピューティングシステムは、追加的な特徴を有することができる。例えば、コンピューティング環境900は、記憶装置940と、1つ以上の入力デバイス950と、1つ以上の出力デバイス960と、および1つ以上の通信接続970とを含む。バス、コントローラ、またはネットワーク等の相互接続機構(図示せず)は、コンピューティング環境900の構成要素を相互接続する。典型的に、オペレーティングシステムソフトウェア(図示せず)は、コンピューティング環境900内で実行する他のソフトウェアのための動作環境を提供し、コンピューティング環境900の構成要素の動作を協調させる。
【0104】
有形記憶装置940は、リムーバブルまたは非リムーバブルとすることができ、該記憶装置としては、磁気ディスク、磁気テープもしくはカセット、CD−ROM、DVD、または情報を非一時的な方式で記憶するために使用することができ、また、コンピューティング環境900内でアクセスすることができる任意の他の媒体が挙げられる。記憶装置940は、本明細書で説明される1つ以上の技術革新を実装するソフトウェア980のための命令を記憶する。
【0105】
入力デバイス(複数可)950は、キーボード、マウス、ペン、またはトラックボール等のタッチ入力デバイス、音声入力デバイス、スキャンデバイス、または入力をコンピューティング環境900に提供する別のデバイスとすることができる。出力デバイス(複数可)960は、ディスプレイ、プリンタ、スピーカ、CDライタ、またはコンピューティング環境900からの出力を提供する別のデバイスとすることができる。
【0106】
通信接続(複数可)970は、通信媒体を通じた別のコンピューティングエンティティへの通信を可能にする。通信媒体は、コンピュータ実行可能命令、音声、または、ビデオ入力もしくは出力、または変調されたデータ信号内の他のデータ等の情報を伝達する。変調されたデータ信号は、信号内の情報をエンコードするような様態で設定または変更されたその特性のうちの1つ以上を有する信号である。一例として、また、限定されないが、通信媒体は、電気、光、RF、または他の搬送波を使用することができる。
【0107】
開示される方法のいくつかの動作は、提示の便宜のために特定の連続的な順序で説明されるが、下に記載される特定の言葉によって特定の順序が要求されない限り、この説明の様態は、再配列を含むことを理解されたい。例えば、連続的に説明される動作は、いくつかの事例において、再配列される場合があり、または同時に行われる場合がある。その上、簡潔にするために、添付図面は、開示される方法を他の方法と併せて使用することができる種々の方式を示さない場合がある。
【0108】
開示される方法のいずれかは、1つ以上のコンピュータ可読記憶媒体(例えば、1つ以上の光媒体ディスク、揮発性メモリ構成要素(DRAMまたはSRAM等)、または不揮発性メモリ(フラッシュメモリまたはハードドライブ等))に記憶され、また、コンピュータ(例えば、スマートフォン、またはコンピューティングハードウェアを含む他のモバイルデバイスを含む、任意の市販コンピュータ)上で実行される、コンピュータ実行可能命令のように実施することができる。コンピュータ可読記憶媒体という用語は、信号および搬送波等の通信接続を含まない。開示される技術を、ならびに開示される実施形態の実施中に作成され、使用される任意のデータを実装するためのコンピュータ実行可能命令のいずれかは、1つ以上のコンピュータ可読記憶媒体に記憶することができる。コンピュータ実行可能命令は、例えば、専用ソフトウェアアプリケーション、またはウェブブラウザもしくは他のソフトウェアアプリケーション(リモートコンピューティングアプリケーション等)を介してアクセスまたはダウンロードされるソフトウェアアプリケーションの一部とすることができる。そのようなソフトウェアは、例えば、単一のローカルコンピュータ(例えば、任意の適切な市販のコンピュータ)上で、または1つ以上のネットワークコンピュータを使用して(例えば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク(クラウドコンピューティングネットワーク等)、または他のそのようなネットワークを介して)ネットワーク環境内で実行することができる。
【0109】
明確にするため、ソフトウェアベースの実装形態の特定の選択された態様だけを説明する。当技術分野でよく知られている他の詳細は省略する。例えば、開示される技術は、任意の特定のコンピュータ言語またはプログラムに限定されないことを理解されたい。例えば、開示される技術は、C++、Java(登録商標)、Perl、JavaScript(登録商標)、Adobe Flash、または任意の他の適切なプログラミング言語で記述されたソフトウェアによって実施することができる。同様に、開示される技術は、任意の特定のコンピュータまたは特定のタイプのハードウェアに限定されない。適切なコンピュータおよびハードウェアの特定の詳細は、よく知られており、本開示で詳細に説明する必要はない。
【0110】
また、本明細書で説明される任意の機能は、ソフトウェアの代わりに1つ以上のハードウェア論理構成要素によって少なくとも部分的に行うことができることを理解されたい。例えば、限定されないが、使用することができるハードウェア論理コンポーネントの例示的なタイプとしては、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップシステム(SOC)、コンプレックスプログラマブル論理デバイス(CPLD)などが挙げられる。
【0111】
さらに、(例えば、コンピュータに、開示される方法のうちのいずれかを実行させるためのコンピュータ実行可能命令を備える)ソフトウェアベースの実施形態のいずれかを、適切な通信手段を通してアップロード、ダウンロード、またはリモートアクセスすることができる。そのような適切な通信手段としては、例えば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル(光ファイバーケーブルを含む)、磁気通信、電磁通信(RF、マイクロ波、および赤外線通信を含む)、電子通信、または他のそのような通信手段が挙げられる。
【0112】
本開示の種々の実施形態は、以下の付記を考慮して説明することができる。
1.構成可能な論理プラットフォームであって、
構成可能な論理プラットフォームをプロセッサに接続するための物理的相互接続と、
第1の再構成可能な論理領域に対応する構成データに基づいて構成される論理ブロックを備える、第1の再構成可能な論理領域と、
第2の再構成可能な論理領域に対応する構成データに基づいて構成される論理ブロックを備える、第2の再構成可能な論理領域と、
第1の再構成可能な論理領域が第1の再構成可能な論理領域に対応する構成データに基づいて構成され、第2の再構成可能な論理領域が第2の再構成可能な論理領域に対応する構成データに基づいて構成されるように、構成データを第1および第2の再構成可能な論理領域に適用するための構成ポートと、
物理的相互接続のトランザクションを介してアクセス可能な制御プレーン機能であって、制御プレーン機能が、構成ポートと通信し、制御プレーン機能が、物理的相互接続から構成ポートへの制限されたアクセスを提供する、制御プレーン機能と、
物理的相互接続のトランザクションを介してアクセス可能な第1のデータプレーン機能であって、物理的相互接続を通じて情報を伝送することを可能にし、かつ第1の再構成可能な論理領域が物理的相互接続に直接アクセスすることを防止する、第1の再構成可能な論理領域へのインターフェースを提供する、第1のデータプレーン機能と、
物理的相互接続のトランザクションを介してアクセス可能な第2のデータプレーン機能であって、物理的相互接続を通じて情報を伝送することを可能にし、かつ第2の再構成可能な論理領域が物理的相互接続に直接アクセスすることを防止する、第2の再構成可能な論理領域へのインターフェースを提供する、第2のデータプレーン機能と、
物理的相互接続の帯域幅を少なくとも第1のデータプレーン機能と第2のデータプレーン機能との間で分配するように構成された調停論理と、を備える、構成可能な論理プラットフォーム。
【0113】
2.第1のデータプレーン機能が、第1のアドレス範囲内のアドレスを備えるトランザクションを使用してアクセスされ、第2のデータプレーン機能が、第2のアドレス範囲内のアドレスを備えるトランザクションを使用してアクセスされ、制御プレーン機能が、第3のアドレス範囲内のアドレスを備えるトランザクションを使用してアクセスされ、第1、第2、および第3のアドレス範囲が、全ての非オーバーラップである、付記1に記載の構成可能な論理プラットフォーム。
【0114】
3.第1の再構成可能な論理領域とパブリック周辺機器との間に第1の通信パス、および第2の再構成可能な論理領域とパブリック周辺機器との間の第2の通信パスを提供するように構成された、パブリック周辺機器インターフェースをさらに備える、付記1または2に記載の構成可能な論理プラットフォーム。
【0115】
4.パブリック周辺機器インターフェースが、第1の再構成可能な論理領域によって、第1のアドレス範囲内のパブリック周辺機器のアドレスへのアクセスを制限するように構成され、パブリック周辺機器インターフェースが、第2の再構成可能な論理領域によって、第2のアドレス範囲内のパブリック周辺機器のアドレスへのアクセスを制限するように構成される、付記エラー!参照ソースが見つかりませんに記載の構成可能な論理プラットフォーム。
【0116】
5.パブリック周辺機器インターフェースが、第1の再構成可能な論理領域を、パブリック周辺機器と第1の再構成可能な論理領域との間で転送するための第1の帯域幅の量に制限するように構成され、パブリック周辺機器インターフェースが、第2の再構成可能な論理領域を、パブリック周辺機器と第2の再構成可能な論理領域との間で転送するための第2の帯域幅の量に制限するように構成される、付記エラー!参照ソースが見つかりませんまたは4に記載の構成可能な論理プラットフォーム。
【0117】
6.複数 の再構成可能な論理領域であって、それぞれのアプリケーション論理設計を実装するために構成可能なハードウェアを各々が備える、複数の再構成可能な論理領域と、
再構成可能な論理領域の各々を別個にカプセル化するためのホスト論理であって、
プロセッサと通信するためのホストインターフェースと、
ホストインターフェースを介してアクセス可能な複数のデータパス機能であって、各データパス機能が、ホストインターフェースと対応する再構成可能な論理領域のアプリケーション論理設計との間のデータ転送をフォーマットするための層を備え、ホストインターフェースが、それぞれの再構成可能な論理領域のアプリケーション論理設計のリソースを調停するように構成される、データパス機能と、を備える、ホスト論理と、を備える、装置。
【0118】
7.ホスト論理が、
ホストインターフェースを介してアクセス可能な管理機能であって、ホストインターフェースで受信した認可されたトランザクションに応じて、複数の再構成可能な論理領域の再構成可能な論理領域に、特定のアプリケーション論理設計を伴って構成させるように適合される、管理機能をさらに備える、付記6に記載の装置。
【0119】
8.ホストインターフェースが、それぞれの再構成可能な論理領域のアプリケーション論理の最大転送サイズを実施するようにさらに構成される、付記6または7に記載の装置。
【0120】
9.管理機能、およびデータパス機能のそれぞれが、それぞれの機能の各々について、異なる非オーバーラップアドレス範囲を使用してアクセス可能である、付記6〜8のいずれかに記載の装置。
【0121】
10.ホストインターフェースが、ホスト論理の制御レジスタのプログラムされた値に基づいて、それぞれの再構成可能な論理領域のアプリケーション論理によって生成されたデータ転送の帯域幅を分配する、付記6〜9のいずれかに記載の装置。
【0122】
11.ホスト論理の少なくとも一部分が、ホストインターフェースで受信した認可されたトランザクションに応じて装置にロードされる、再構成可能な論理である、付記6〜10のいずれかに記載の装置。
【0123】
12.ホスト論理が、それぞれの再構成可能な論理領域のアプリケーション論理とパブリック周辺機器との間に変換層をさらに含み、変換層が、アプリケーション論理と論理パブリック周辺機器との間のデータ転送をフォーマットするように適合される、付記6〜11のいずれかに記載の装置。
【0124】
13.ホスト論理が、異なる再構成可能な論理領域のアプリケーション論理とパブリック周辺機器との間のデータ転送の帯域幅を分配するための論理をさらに備える、付記6〜12のいずれかに記載の装置。
【0125】
14.ホスト論理が、異なる再構成可能な論理領域のアプリケーション論理からパブリック周辺機器へのアクセス制限を実施する論理をさらに備える、付記6〜13のいずれかに記載の装置。
【0126】
15.再構成可能な論理を備える構成可能なハードウェアプラットフォームを動作させるための方法であって、該方法が、
構成可能なハードウェアプラットフォームがホスト論理の動作を行うように、ホスト論理を再構成可能な論理の第1の領域にロードすることであって、ホスト論理が、ホストインターフェース、およびホストインターフェースからのトランザクションに対して制限されたアクセスを実施する制御プレーン機能を含む、ことと、
ホストインターフェースで第1のトランザクションを受信することに応じて、第1のアプリケーション論理設計を再構成可能な論理の第2の領域にロードすることであって、第1のトランザクションが、制御プレーン機能のアクセス基準を満たす、ことと、
ホストインターフェースで第2のトランザクションを受信することに応じて、第2のアプリケーション論理設計を再構成可能な論理の第3の領域にロードすることであって、第2のトランザクションが、制御プレーン機能のアクセス基準を満たす、ことと、
ホストインターフェースから情報を伝送するときに、ホスト論理を使用して、第1のアプリケーション論理設計および第2のアプリケーション論理設計の各々によって使用されるリソースを調停することと、を含む、方法。
【0127】
16.ホスト論理を、共有された周辺機器と、第1のアプリケーション論理設計および第2のアプリケーション論理設計との間のインターフェースとして使用することをさらに含む、付記15に記載の方法。
【0128】
17.ホスト論理を使用して、共有された周辺機器と、第1のアプリケーション論理設計および第2のアプリケーション論理設計との間のデータ転送の帯域幅を分配することをさらに含む、付記11に記載の方法。
【0129】
18.ホスト論理を使用して、共有された周辺機器と、第1のアプリケーション論理設計および第2のアプリケーション論理設計との間のデータ転送のサイズを実施することをさらに含む、付記11または17に記載の方法。
【0130】
19.ホスト論理を使用して、第1のアプリケーション論理設計から共有された周辺機器の第1のアドレス範囲へのアクセスを制限し、かつ第2のアプリケーション論理設計から共有された周辺機器の第2のアドレス範囲へのアクセスを制限することをさらに含む、付記16〜18のいずれかに記載の方法。
【0131】
20.第1のアプリケーション論理設計または第2のアプリケーション論理設計を分解することに応じて、内部メモリ、外部メモリ、または構成メモリのうちの1つ以上をクリアすることをさらに含む、付記14に記載の方法。
【0132】
開示される方法、装置、およびシステムは、いかなる形であれ、限定するものと解釈されるべきではない。代わりに、本開示は、単独で、および互いとの種々の組み合わせおよび副次的な組み合わせで、種々の開示された実施形態の全ての新規かつ非自明な特徴および態様を目的とする。開示される方法、装置、およびシステムは、任意の特定の態様または特徴またはそれらの組み合わせに限定されず、開示される実施形態は、任意の1つ以上の特定の利点が存在すること、または問題を解決することを必要としない。
【0133】
開示される本発明の原理を適用することができる数多くの可能な実施形態を考慮して、例示される実施形態は、本発明の好適な例に過ぎないものであり、また、本発明の範囲を限定するものとみなすべきではないことを認識されるべきである。むしろ、本発明の範囲は、以下の特許請求の範囲によって定義される。したがって、本発明者らは、本発明者らの発明として、これらの特許請求の範囲の範疇に該当する全てのものを主張する。