(57)【要約】  マルチテナント環境では、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのプログラマブル集積回路の異なるサブセットを構成し、動作させるために、別個の仮想マシンを使用することができる。プログラマブル集積回路は、サブセット内では互いに直接通信することができるが、サブセット間では通信することができない。一般に、全てのプログラマブルＩＣのサブセットは、マルチテナント環境内の同じホストサーバコンピュータ内にあり、また、複数の顧客が、知識、または他の顧客への妨害を伴うことなく、ホストサーバコンピュータのリソースを共有することができるように、サンドボックス化されるか、または別様に互いに隔離される。
2019535078.tif 000002
【特許請求の範囲】
【請求項１】
マルチテナント環境内のプログラマブルハードウェアを制御する方法であって、
ホストサーバコンピュータ上の第１の仮想マシンを実行することと、
前記ホストサーバコンピュータ上の第２の仮想マシンを実行することと、
プログラマブルハードウェアを、１つ以上のプログラマブル集積回路の第１のサブセットにロードすることと、
プログラマブルハードウェアを、１つ以上のプログラマブル集積回路の第２のサブセットにロードすることと、
前記第１のサブセット内の前記１つ以上のプログラマブル集積回路を前記第１の仮想マシンと関連付け、かつ前記第２のサブセット内の前記１つ以上のプログラマブル集積回路を前記第２の仮想マシンと関連付けることと、を含む、方法。
【請求項２】
前記ホストサーバコンピュータ上の管理ハイパーバイザが、前記第１の仮想マシンおよび前記第２の仮想マシンを起動する、請求項１に記載の方法。
【請求項３】
前記プログラマブルハードウェアを前記ロードすることが、前記プログラマブルハードウェアの第１の部分を、前記第１の仮想マシンの指示の下で構成することと、前記プログラマブルハードウェアの第２の部分を、前記第２の仮想マシンの指示の下で構成することと、を含む、請求項１または２のいずれかに記載の方法。
【請求項４】
前記プログラマブルハードウェアを前記ロードすることが、前記ホストサーバコンピュータ上の管理ハイパーバイザによって、または前記管理ハイパーバイザによる制御を通して、前記ホストサーバコンピュータの外部のプロセスによって行われる、請求項１〜３のいずれかに記載の方法。
【請求項５】
前記第１のサブセットが、少なくとも、第１のプログラマブル集積回路と、第２のプログラマブル集積回路と、を含み、前記第１のプログラマブル集積回路が、通信チャネルを通して前記第２のプログラマブル集積回路と直接通信する、請求項１〜４のいずれかに記載の方法。
【請求項６】
前記通信チャネルが、シリアル通信の１つ以上のレーンを含むシリアルポートである、請求項５に記載の方法。
【請求項７】
前記第２のサブセットが、前記第１のサブセットとは異なる数のプログラマブル集積回路を含む、請求項５または６に記載の方法。
【請求項８】
前記１つ以上のプログラマブル集積回路の第１のサブセットが、前記１つ以上のプログラマブル集積回路の第２のサブセットから物理的または論理的に隔離される、請求項１〜７のいずれかに記載の方法。
【請求項９】
前記１つ以上のプログラマブルＩＣの第１のサブセットが、前記マルチテナント環境内の前記１つ以上のプログラマブルＩＣの第２のセットの存在を検出することができない、請求項８に記載の方法。
【請求項１０】
前記プログラマブル集積回路が、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）である、請求項１〜９のいずれかに記載の方法。
【請求項１１】
マルチテナント環境内の装置であって、
ホストサーバコンピュータと、
前記ホストサーバコンピュータ内の第１のプログラマブル集積回路（ＩＣ）と、
前記ホストサーバコンピュータ内の第２のプログラマブルＩＣと、を備え、
前記ホストサーバコンピュータが、少なくとも、前記第１のプログラマブルＩＣを動作させるための第１の仮想マシンと、前記第２のプログラマブルＩＣを動作させるための第２の仮想マシンと、を含む、複数の仮想マシンをサポートするための管理ハイパーバイザを実行するように構成されたプロセッサを有する、装置。
【請求項１２】
前記第１のプログラマブルＩＣに結合された第３のプログラマブルＩＣをさらに含み、前記第１のプログラマブルＩＣおよび前記第３のプログラマブルＩＣが、それらの間で通信するために共に結合される、請求項１１に記載の装置。
【請求項１３】
前記ホストサーバコンピュータ内に第４のプログラマブルＩＣをさらに含み、前記第４のプログラマブルＩＣが、前記第１および第３のプログラマブルＩＣから隔離され、かつ前記第２のプログラマブルＩＣに結合される、請求項１２に記載の装置。
【請求項１４】
前記第１のプログラマブルＩＣが、プログラマブル論理の第１のサブセット内にあり、前記第２のプログラマブルＩＣが、プログラマブル論理の第２のサブセット内にあり、前記ホストサーバコンピュータが、第１および第２の仮想マシンによって隔離が制御されるプログラマブル論理の複数のサブセットを含む、請求項１１〜１３のいずれかに記載の装置。
【請求項１５】
前記第１のサブセットが、前記第２のサブセットとは異なる数のプログラマブルＩＣを含む、請求項１１〜１４のいずれかに記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
（対応する記載なし）
【背景技術】
【０００２】
クラウドコンピューティングとは、遠隔地で利用可能であり、また、インターネットなどのネットワークを通してアクセス可能であるコンピューティングリソース（ハードウェアおよびソフトウェア）を使用することである。いくつかの配設において、ユーザは、オンデマンドで、ユーティリティとして、こうしたコンピューティングリソース（記憶装置およびコンピューティングパワーを含む）を購入することが可能である。クラウドコンピューティングは、リモートサービスにユーザのデータ、ソフトウェア、および計算を委託する。仮想コンピューティングリソースの使用は、コスト面での利点、および／またはコンピューティングリソースのニーズの変化に迅速に適応する能力を含む、いくつかの利点を提供することができる。
【０００３】
大型コンピュータシステムのユーザは、異なる使用事例から生じる多様なコンピューティング要件を有し得る。クラウドまたは計算サービスプロバイダは、様々なレベルの性能および／または機能を伴う異なるタイプの構成要素を有する、種々の異なるコンピュータシステムを提供することができる。したがって、ユーザは、潜在的に特定のタスクを実行する際により効率的であり得る、コンピュータシステムを選択することができる。例えば、計算サービスプロバイダは、処理性能、メモリ性能、記憶容量または性能、およびネットワーキング容量または性能の様々な組み合わせを伴うシステムを提供することができる。一般に、複数の顧客が、計算サービスプロバイダによって提供される一般的リソースを共有および活用することができ、顧客が、計算サービスプロバイダのサービスを使用することについてコスト効率をより高くする。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
（対応する記載なし）
【課題を解決するための手段】
【０００５】
（対応する記載なし）
【図面の簡単な説明】
【０００６】
【図１】プログラマブル集積回路（ＩＣ）のサブセットを制御する仮想マシンを含むシステム図である。
【図２】それらの間に通信チャネルを有するプログラマブルＩＣによって複数のプログラマブルＩＣを制御する複数の仮想マシンを含む例示的なシステム図である。
【図３】異なる構成可能な論理プラットフォームを制御するための複数の仮想マシンを含む例示的なホストサーバコンピュータの図である。
【図４】例示的な構成可能なハードウェアプラットフォームのさらなる詳細を示す図である。
【図５】複数の構成可能な論理プラットフォームを有するサーバコンピュータを含むマルチテナント環境において動作する複数の仮想マシンインスタンスを示す例示的なシステム図である。
【図６】マルチテナント環境において複数のプログラマブルＩＣを動作させる例示的な方法のフロー図である。
【図７】仮想マシンをプログラマブルＩＣのサブセットにマッピングする例示的な方法のフロー図である。
【図８】説明される技術革新を実装することができる適切なコンピューティング環境の一般化された実施例を表す図である。
【発明を実施するための形態】
【０００７】
カスタムハードウェアをクラウド環境内に提供することは、いくつかの点において、複数の顧客全体にわたってサーバコンピュータなどの一般的ハードウェアを共有するという中核的な利点のうちの１つに反する。しかしながら、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのプログラマブル論理（プログラム可能な論理回路）は、十分に一般的であり、また、顧客によってプログラムし、次いで、他の顧客によって再使用することができる。したがって、専門コンピューティングリソースを一組の再使用可能な一般的コンピューティングリソース内に提供するための１つの解決策は、（１つ以上のＦＰＧＡを含むアドインカードをサーバコンピュータに提供することなどによって）一般的コンピューティングリソースの中の選択として構成可能な論理プラットフォームを備えるサーバコンピュータを提供することである。構成可能な論理は、構成可能な論理に適用またはロードされる構成データによって指定される論理機能を行うようにプログラムまたは構成することができるハードウェアである。例えば、コンピューティングリソースのユーザは、構成可能な論理を構成するための仕様（ハードウェア記述言語で書かれたソースコードなど）を提供することができ、構成可能な論理は、仕様に従って構成することができ、構成された論理は、ユーザのタスクを行うために使用することができる。しかしながら、コンピューティング設備の低レベルハードウェアへのユーザアクセスを可能にすることは、潜在的に、コンピューティング設備内のセキュリティおよびプライバシーの問題につながり得る。特定の一例として、あるユーザによる不良の、または悪意のある設計は、構成された論理がコンピューティング設備内の１つ以上のサーバコンピュータを故障（例えば、クラッシュ、ハング、もしくは再起動）させた場合、またはネットワークサービスが拒否された場合に、潜在的に、他のユーザに対するサービスの拒否を生じさせることがあり得る。別の具体的な例として、あるユーザによる不良の、または悪意のある設計は、構成された論理が、他のユーザのメモリ空間のメモリを読み出すおよび／またはそれに書き込むことができる場合に、潜在的に、別のユーザによるデータの破損または読み出しを生じさせ得る。
【０００８】
本明細書で説明されるように、計算サービスの設備は、様々なコンピューティングリソースを含むことができ、あるタイプのコンピューティングリソースは、構成可能な論理プラットフォームを備えるサーバコンピュータを含むことができる。構成可能な論理プラットフォームは、コンピューティングリソースのハードウェア（例えば、構成可能な論理）がユーザによってカスタマイズされるように、コンピュータシステムのユーザによってプログラムまたは構成することができる。例えば、ユーザは、サーバコンピュータに密結合されたハードウェアアクセラレータとして機能するように、構成可能な論理をプログラムすることができる。特定の一例として、ハードウェアアクセラレータは、サーバコンピュータの、周辺機器相互接続エクスプレス（ＰＣＩ−Ｅｘｐｒｅｓｓ、またはＰＣＩｅ）などのローカル相互接続を介してアクセス可能であり得る。ユーザは、サーバコンピュータ上のアプリケーションを実行することができ、アプリケーションのタスクは、ＰＣＩｅトランザクションを使用してハードウェアアクセラレータによって行うことができる。ハードウェアアクセラレータをサーバコンピュータに密結合することによって、アクセラレータとサーバコンピュータとの間の待ち時間を低減させることができ、これは、潜在的に、アプリケーションの処理速度を高めることができる。
【０００９】
顧客は、ホストサーバコンピュータ上の複数の仮想マシンを起動することができ、別個の仮想マシンを使用して、構成可能な論理の異なるサブセットを構成し、動作させることができる。いくつかの実施形態において、構成可能な論理は、仮想マシンがサブセット内の１つ以上のＦＰＧＡを同時に動作させることができるように、複数のＦＰＧＡを含むことができる。ＦＰＧＡを動作させることは、データをＦＰＧＡに伝送することと、そこから受信することと、を含む。同じホストサーバコンピュータ上で、別個の仮想マシンが、１つ以上のＦＰＧＡの別のサブセットを同時に動作させることができる。サブセットのＦＰＧＡは、互いに通信するようにプログラムすることができる。しかしながら、別個のサブセットは、セキュリティ上の理由で、クロス通信することを制限することができる。したがって、クラウド環境内のホストサーバコンピュータ上のＦＰＧＡサブセットをサンドボックス化することは、複数の顧客が、サブセット内の顧客自身のそれぞれのプログラマブル論理（プログラマブル論理回路）にアクセスすることを可能にする。サブセット内のＦＰＧＡのクロス通信は、複数のＦＰＧＡを仮想マシンによって利用することを可能にし、ＦＰＧＡは、ハイパーバイザを通した通信を必要とすることなく、互いに通信することができる。
【００１０】
計算サービスプロバイダは、構成可能な論理プラットフォームのホスト論理内のユーザのハードウェア（本明細書において、アプリケーション論理とも称される）をラップまたはカプセル化（すなわち、サンドボックス化）することによって、潜在的に、コンピューティングリソースのセキュリティおよび／または可用性を高めることができる。アプリケーション論理をカプセル化することは、アプリケーション論理のアクセスを、構成リソース、物理インターフェース、構成可能な論理プラットフォームのハードマクロ、および構成可能な論理プラットフォームの種々の周辺機器に限定または制限することを含むことができる。例えば、計算サービスプロバイダは、それがホスト論理およびアプリケーション論理を含むように、構成可能な論理プラットフォームのプログラミングを管理することができる。ホスト論理は、アプリケーション論理がその中で機能する、フレームワークまたはサンドボックスを提供することができる。特に、ホスト論理は、アプリケーション論理と通信することができ、また、アプリケーション論理の機能を抑制することができる。例えば、ホスト論理は、アプリケーション論理がローカル相互接続上のシグナリングを直接制御することができないように、ローカル相互接続（例えば、ＰＣＩｅ相互接続）とアプリケーション論理との間でブリッジ機能を行うことができる。ホスト論理は、ローカル相互接続上のパケットまたはバストランザクションを形成し、プロトコル要件を満たすことを確実にする役割を果たすことができる。ローカル相互接続上の処理を制御することによって、ホスト論理は、潜在的に、不正な形式のトランザクションまたは境界外の場所に対するトランザクションを防止することができる。別の例として、ホスト論理は、計算サービスプロバイダによって提供されるサービスを使用することなくアプリケーション論理が構成可能な論理プラットフォームを再プログラムさせることができないように、構成アクセスポートを隔離することができる。
【００１１】
図１は、破線１０８によって図表的に分離されたソフトウェア部分１０４およびハードウェア部分１０６を有するホストサーバコンピュータ１０２を含む、例示的なコンピューティングシステム１００を示すシステム図である。ハードウェア部分１０６は、一般的に１１０に他のハードウェアとして示される、１つ以上のＣＰＵ、メモリ、記憶デバイスなどを含む。ハードウェア部分１０６は、一般に１２０で示される、プログラマブル集積回路（ＩＣ）をさらに含むことができる。プログラマブルＩＣは、ＦＰＧＡ、またはコンプレックスプログラマブル論理デバイス（ＣＰＬＤ）などの他のタイプのプログラマブル論理とすることができる。プログラマブルＩＣは、製造後に顧客によってプログラムされるように設計される。プログラマブルＩＣは、プログラマブルハードウェア論理ブロックのアレイと、ハードウェア論理ブロックをリンクする構成可能な相互接続と、を含む。論理ブロックは、単純なゲートから複雑な組み合わせ機能にわたるハードウェア機能を行うようにプログラムすることができる。下でさらに説明されるように、任意の数のプログラマブルＩＣ１２０を、ホストサーバコンピュータ１０２内で使用することができる。加えて、プログラマブルＩＣは、サーバ内の１つ以上のプラグインカード上にあること、またはサーバのマザーボードに位置付けることができる。
【００１２】
ハードウェア１０６の上側で稼働する層は、ハイパーバイザまたはカーネル層であり、この実施例では、管理ハイパーバイザ１３０を含むように示される。ハイパーバイザまたはカーネル層は、タイプ１またはタイプ２ハイパーバイザとして分類することができる。タイプ１ハイパーバイザは、ホストハードウェア上で直接稼働して、ハードウェアを制御し、また、ゲストオペレーティングシステムを管理する。タイプ２ハイパーバイザは、従来のオペレーティングシステム環境内で稼働する。したがって、タイプ２環境において、ハイパーバイザは、オペレーティングシステム上で稼働する別個の層とすることができ、オペレーティングシステムは、システムハードウェアと相互作用する。異なるタイプのハイパーバイザとしては、Ｘｅｎベースのもの、Ｈｙｐｅｒ−Ｖ、ＥＳＸｉ／ＥＳＸ、Ｌｉｎｕｘ（登録商標）などが挙げられるが、他のハイパーバイザを使用することができる。管理ハイパーバイザ１３０は、一般に、ハードウェア１０６にアクセスするために必要とされるデバイスドライバを含むことができる。
【００１３】
ソフトウェア層１０４は、一般に１４０で示される、仮想マシンを稼働させるための複数のパーティションを含むことができる。パーティションは、ハイパーバイザによる隔離の論理ユニットであり、また、仮想マシンを実行している。各パーティションには、ハードウェア層のメモリ、ＣＰＵ割り当て、記憶装置などのそれ自体の部分を割り当てることができる。加えて、各パーティションは、仮想マシンおよびそれ自体のゲストオペレーティングシステムを含むことができる。このように、各パーティションは、他のパーティションから独立してそれ自体の仮想マシンをサポート（支援）するように設計された抽象的な容量部分である。各仮想マシン１４０は、管理ハイパーバイザ１３０を通してハードウェア層１０６と通信する。したがって、単一の管理ハイパーバイザ１３０は、複数の仮想マシンを、およびどのように仮想マシンがプログラマブルＩＣ１２０と相互作用するのかを管理することができる。代替的に、仮想マシンをプログラマブルＩＣにマッピングした後に、仮想マシンがプログラマブルＩＣを直接動作させることができる。２つの異なる仮想マシン１６０、１６２がホストサーバコンピュータ１０２のリソースを共有するように示されているが、任意の数の仮想マシンを使用することができる。しかしながら、仮想マシンは、一方の仮想マシンが他方の仮想マシンのリソースにアクセスすることができないように、互いに隔離される。例えば、仮想マシン１６０は、プログラマブルＩＣのサブセット１７０の動作の制御を有するように示され、一方で、仮想マシン１６２は、プログラマブルＩＣのサブセット１７２の制御を有するように示される。サブセット内で、プログラマブルＩＣは、互いに通信することができる。しかしながら、通信は、セキュリティ上の理由で、サブセット間に制限される。したがって、仮想マシンは、１つ以上のプログラマブルＩＣのサブセット全体を構成（プログラム）し、動作させる（制御し、データを受信または送信する）ことができる。しかしながら、サブセット１７０、１７２は、１８０で示されるように隔離され、それらの間で通信することができない。プログラマブルＩＣの構成は、仮想マシンからの直接コマンドによって、または間接コマンドを通して達成することができる。加えて、プログラマブルＩＣの異なるサブセットは、異なる数のプログラマブルＩＣを有することができる。例えば、サブセット１７０は、３つのプログラマブルＩＣを有するが、サブセット１７２は、２つのプログラマブルＩＣを有する。サブセットはまた、基本構成において、同じ数のプログラマブルＩＣを有することもできる。
【００１４】
１つの例において、ハイパーバイザは、Ｘｅｎベースのハイパーバイザとすることができるが、上で説明したように、他のハイパーバイザを使用することができる。Ｘｅｎの例において、管理ハイパーバイザ１３０は、ドメイン０（Ｄｏｍ０とも呼ばれる）であり、一方で、仮想マシン１６０、１６２は、ドメインＵゲストである。ドメイン０のハイパーバイザは、物理Ｉ／Ｏリソースにアクセスするための、ならびにドメインＵゲストと相互作用するための特別な権利を有する。ドメインＵゲストは、ドメイン０からの承認を伴わずに、ハードウェア層１０６へのアクセスを有しない。このように、ドメイン０は、プログラマブルＩＣ１７０、１７２のサブセットの分離を確実にする管理層である。
【００１５】
管理ハイパーバイザ１３０は、プログラマブルＩＣ１２０がサンドボックス化されたままであることを確実にする役割を果たす。加えて、管理ハイパーバイザ１３０は、ＰＣＩｅインターフェースなどのインターフェースバスの制御を有することができる。インターフェースを通して、管理ハイパーバイザ１３０は、プログラマブルＩＣ１２０内のハードウェアのセキュリティの管理および制御を有する。このようにして、管理ハイパーバイザ１３０は、プログラマブルＩＣ構成ポートをセキュアに管理すること、およびプログラマブルＩＣ内でプログラムされたＩＰを保護することができる。加えて、管理ハイパーバイザ１３０は、プログラマブルＩＣの構成および動作のための外部管理されたサービスへの主インターフェースとしての役割を果たすことができる。
【００１６】
図２は、複数の仮想マシン２２０〜２３０をホストするために使用することができるホストサーバコンピュータ２１０を示し、仮想マシンの数は、任意の整数Ｎとすることができる。仮想マシン２２０〜２３０は、複数のプログラマブルＩＣ２４０、２５０を一緒にプログラムおよび構成することができ、プログラマブルＩＣの数は、任意の数Ｍとすることができ、ここで、Ｍは、整数である。したがって、仮想マシン１〜仮想マシンＮは、プログラマブルＩＣの別個の一部分を使用して、プログラマブルＩＣ２４０を動作させることができる。具体的には、プログラマブルＩＣ２４０の一部分は、仮想マシン２２０によってプログラムすることができ、一方で、他の一部分は、仮想マシン２３０によってプログラムすることができる。しかしながら、これらの一部分は、独立して動作する。同様に、プログラマブルＩＣ２５０は、複数の仮想マシンによってプログラムし、動作させることができる。さらに、プログラマブルＩＣ２４０〜２５０は、シリアルポートを通すなどして、互いに通信することができる。典型的に、プログラマブルＩＣ間のクロス通信は、ある仮想マシンと関連付けられるプログラマブルＩＣの一部分のためのものであり、一方で、異なる仮想マシンと関連付けられた部分間のクロス通信は、厳しく制御されるか、または許可されない。１つの例において、プログラマブルＩＣ２４０〜２５０は、仮想マシンと関連付けられた別個のアクセラレータを実装するために使用することができる。
【００１７】
図３は、２つ以上の構成可能な論理プラットフォーム３１０、３１１と、サーバコンピュータ３２０と、を含む、コンピューティングシステム３００の一実施例を示すシステム図である。構成可能な論理プラットフォームは、図１および図２のプログラマブルＩＣの例示的な実施形態である。コンピューティングシステム３００は、図１によるホストサーバコンピュータ１０２の追加的な詳細を提供する。サーバコンピュータ３２０は、エンドユーザのためのアプリケーションプログラムを実行するために使用することができる。具体的には、サーバコンピュータ３２０は、中央処理ユニット（ＣＰＵ）３２２と、メモリ３２４と、周辺機器インターフェース３２６と、を含むことができる。ＣＰＵ３２２は、メモリ３２４に記憶された命令を実行するために使用することができる。例えば、メモリ３２４には、アプリケーションプログラムの全部または一部分をロードすることができ、ＣＰＵ３２２は、アプリケーションプログラムの命令を実行することができる。アプリケーションプログラムは、周辺機器インターフェース３２６を使用してトランザクションを発行することによって、構成可能な論理プラットフォーム３１０のハードウェアアクセラレータまたは他のハードウェア論理と通信することができる。サーバコンピュータ３２０は、複数の仮想マシン３１８、３１９を実行するために使用することができる。追加的な仮想マシンを実行することができる。
【００１８】
本明細書で使用するとき、トランザクションは、構成要素間の通信である。具体的な例として、トランザクションは、読み出し要求、書き込み、読み出し応答、メッセージ、割り込み、または構成要素間での他の種々の情報の交換とすることができる。トランザクションは、複数の構成要素によって共有されたバス上で起こり得る。具体的には、バスの信号ラインの値は、バスの通信プロトコルを使用してバス上で情報を転送するように変調することができる。トランザクションは、アドレスフェーズおよび１つ以上のデータフェーズなどの、１つ以上のフェーズを通じて起こり得る。追加的または代替的に、トランザクションは、２つの構成要素を接続するポイントツーポイント相互接続の１つ以上のシリアルラインを使用して起こり得る。具体的には、トランザクションは、ポイントツーポイント相互接続を通じて伝送されるパケットで送信することができる。
【００１９】
周辺機器インターフェース３２６は、ローカルまたはフロント側相互接続を使用するＣＰＵ３２２と、周辺機器または拡張相互接続を使用する構成要素との間で通信するためのブリッジを含むことができる。具体的には、周辺機器インターフェース３２６は、サーバコンピュータ３２０を構成可能な論理プラットフォーム３１０に、および／または他の構成要素に接続するために使用される物理的相互接続に接続することができる。例えば、物理的相互接続は、共有されたパラレルバスまたはシリアルポイントツーポイントリンクを使用して、複数の構成要素を共に接続するための拡張バスとすることができる。具体的な一例として、物理的相互接続は、ＰＣＩ−Ｅｘｐｒｅｓｓ、ＰＣＩ、またはサーバコンピュータ３２０を、構成可能な論理プラットフォーム３１０に密に結合する別の物理的相互接続とすることができる。したがって、サーバコンピュータ３２０および構成可能な論理プラットフォーム３１０、３１１は、例えば、ＰＣＩバストランザクションまたはＰＣＩｅパケットを使用して通信することができる。サーバコンピュータ３２０が構成可能な論理プラットフォーム３１０、３１１とは別個のボックスとして示されているが、それらは、典型的に、同じハードウェアシャーシ内にある。最も典型的には、構成可能な論理プラットフォーム３１０、３１１は、ホストサーバコンピュータの１つ以上のプラグインカード上にある。
【００２０】
構成可能な論理プラットフォーム３１０は、ホスト論理３０８と、再構成可能な論理領域３４０と、を含むことができる。ホスト論理３０８は、ホストインターフェース３１２と、管理機能３１４と、データパス機能３１６と、を含むことができる。ホスト論理３０８は、計算サービスプロバイダによって提供されるプログラマブル論理とすることができ、また、構成可能な論理プラットフォーム３１０を通じて管理機能を提供する。再構成可能な論理領域３４０は、顧客によって提供されるハードウェアアクセラレータまたはアプリケーション論理を実装するように構成可能である、ハードウェアを含むことができる。換言すれば、再構成可能な論理領域３４０は、所与の機能を行うためにプログラム可能である、ハードウェア論理を含むことができる。例えば、再構成可能な論理領域３４０は、組み合わせ論理および／またはルックアップテーブル（ＬＵＴ）、ならびに連続論理要素（フリップフロップおよび／またはラッチなど）を備えるプログラマブルハードウェア論理ブロック、プログラマブルルーティングおよびクロッキングリソース、プログラマブル分散型およびブロックランダムアクセスメモリ（ＲＡＭ）、デジタル信号処理（ＤＳＰ）ビットスライス、ならびにプログラマブル入力／出力ピンを含むことができる。
【００２１】
ホスト論理３０８は、再構成可能な論理領域３４０をカプセル化またはサンドボックス化するために使用することができる。例えば、再構成可能な論理領域３４０は、再構成可能な論理領域３４０が行うことができる機能を制限するように、予め定義されたインターフェースを使用して、構成可能なハードウェアプラットフォームの種々の構成要素とインターフェースすることができる。１つの例として、再構成可能な論理領域は、再構成可能な論理領域３４０が構成される前にロードされる静的ホスト論理とインターフェースすることができる。例えば、静的ホスト論理は、再構成可能な論理領域３４０から構成可能な論理プラットフォーム３１０の異なる構成要素を隔離する論理を含むことができる。１つの例として、構成可能な論理プラットフォーム３１０（物理的相互接続上でシグナリングするための構成アクセスポートまたは回路など）のハードマクロは、再構成可能な論理領域３４０がハードマクロに直接アクセスすることができないようにマスクすることができる。
【００２２】
ホスト論理３０８は、サーバコンピュータ３２０と通信するためのホストインターフェース３１２を含むことができる。具体的には、ホストインターフェース３１２は、物理的相互接続の通信プロトコルを使用して、物理的相互接続に接続するために、およびサーバコンピュータ３２０と通信するために使用することができる。１つの例として、サーバコンピュータ３２０は、構成可能な論理プラットフォーム３１０と関連付けられたアドレスを含むトランザクションを使用して、構成可能な論理プラットフォーム３１０と通信することができる。同様に、構成可能な論理プラットフォーム３１０は、サーバコンピュータ３２０と関連付けられたアドレスを含むトランザクションを使用して、サーバコンピュータ３２０と通信することができる。物理的相互接続に接続された各種デバイスと関連付けられたアドレスは、システム設計者によって予め定義し、デバイス上に存在するソフトウェアにプログラムすることができる。追加的または代替的に、通信プロトコルは、列挙シーケンスを含むことができ、物理的相互接続に接続されたデバイスがクエリされ、アドレスが列挙シーケンスの一部として各デバイスに割り当てられる。１つの例として、周辺機器インターフェース３２６は、物理的相互接続に接続された各デバイスにクエリを発行することができる。ホストインターフェース３１２は、いくつの機能が構成可能な論理プラットフォーム３１０に存在するか、および構成可能な論理プラットフォーム３１０の機能の各々と関連付けられたアドレス範囲のサイズなどの、構成可能な論理プラットフォーム３１０に関する情報を提供することによって、クエリに応答することができる。この情報に基づいて、アドレスの非オーバーラップ範囲（重複しない範囲）が物理的相互接続に接続された各デバイスの各機能に割り当てられるように、コンピューティングシステム３００のアドレスを割り当てることができる。このようにして、構成可能な論理プラットフォームに対する仮想マシンの関連付けまたはマッピングを確立することができる。列挙の後に、ホストインターフェース３１２は、トランザクションのアドレスに基づいて、構成可能な論理プラットフォーム３１０の機能にトランザクションをルーティングすることができる。
【００２３】
ホスト論理は、構成可能な論理プラットフォーム３１０を管理および構成するために使用することができる、管理機能３１４を含むことができる。コマンドおよびデータは、管理機能３１４のアドレス範囲を標的にするトランザクションを使用して、サーバコンピュータ３２０から管理機能３１４に送信することができる。例えば、サーバコンピュータ３２０は、管理機能３１４のアドレス範囲内の１つ以上のアドレスにマッピングされる構成可能な論理プラットフォーム３１０のデータ（例えば、構成データ）および／または書き込み制御レジスタを転送するために、トランザクションを生成することができる。制御レジスタを書き込むことで、構成可能な論理プラットフォーム３１０に、構成可能な論理プラットフォーム３１０を構成および管理することなどの動作を行わせることができる。具体的な一例として、再構成可能な論理領域３４０に実装されたアプリケーション論理に対応する構成データは、物理的相互接続を通じて、１つ以上のトランザクションでサーバコンピュータ３２０から構成可能な論理プラットフォーム３１０に伝送することができる。構成データを有する再構成可能な論理領域３４０を構成するためのトランザクションは、サーバコンピュータ３２０から構成可能な論理プラットフォーム３１０に伝送することができる。具体的には、トランザクションは、再構成可能な論理領域３４０の構成を開始するために、管理機能３１４のアドレス空間にマッピングされた制御レジスタに値を書き込むことができる。別個のトランザクション３５０は、再構成可能な論理領域３４０をプログラムするために、各仮想マシン３１８、３１９に由来し得る。１つの実施形態において、構成データは、再構成可能な論理領域３４０の構成を開始する前に、サーバコンピュータ３２０から構成可能な論理プラットフォーム３１０に転送することができる。例えば、管理機能３１４は、構成データを、構成可能な論理プラットフォーム３１０によってアクセス可能なオンチップまたはオフチップメモリに記憶させることができ、構成データは、再構成可能な論理領域３４０を構成するときに、メモリから読み出すことができる。別の実施形態において、構成データは、再構成可能な論理領域３４０の構成を開始した後に、サーバコンピュータ３２０から構成可能な論理プラットフォーム３１０に転送することができる。例えば、制御レジスタは、再構成可能な論理領域３４０の構成を開始するように書き込むことができ、構成データは、構成データを含むトランザクションが管理機能３１４によって処理されるときに、再構成可能な論理領域３４０にストリーミングまたはロードすることができる。
【００２４】
ホスト論理は、サーバコンピュータ３２０と構成可能な論理プラットフォーム３１０との間で情報（例えば、アプリケーション入力／出力１６０）を交換するために使用することができる、データパス機能３１６を含むことができる。具体的には、コマンドおよびデータは、データパス機能３１６のアドレス範囲を標的にするトランザクションを使用して、サーバコンピュータ３２０からデータパス機能３１６に送信することができる。同様に、構成可能な論理プラットフォーム３１０は、サーバコンピュータ３２０と関連付けられたアドレスを含むトランザクションを使用して、サーバコンピュータ３２０と通信することができる。データパス機能３１６は、ホストインターフェース３１２と再構成可能な論理領域３４０との間の変換層として作用することができる。具体的には、データパス機能３１６は、再構成可能な論理領域３４０から情報を受信するためのインターフェースを含むことができ、データパス機能３１６は、ホストインターフェース３１２から伝送するために、情報をフォーマットすることができる。情報をフォーマットすることは、１つ以上のトランザクションの制御情報を生成することと、プロトコル仕様を満たすようにサイズ決定されるブロックにデータを分割することと、を含むことができる。したがって、データパス機能３１６は、再構成可能な論理領域３４０と物理的相互接続との間に間置することができる。この様態において、再構成可能な論理領域３４０は、潜在的に、トランザクションをフォーマットすることから、および物理的相互接続を駆動するために使用される信号を直接制御することからブロックすることができ、よって、再構成可能な論理領域３４０を、不注意にまたは悪意をもって物理的相互接続のプロトコルに違反するように使用することができない。
【００２５】
構成可能な論理プラットフォーム３１１は、構成可能な論理プラットフォーム３１０に類似する構造を備えることができ、また、簡潔にする目的で、説明されない。しかしながら、再構成可能な論理プラットフォームはまた、顧客ハードウェア論理をプログラムすることができる、ホスト論理領域および再構成可能な論理領域も含むこともがきることに留意されたい。仮想マシン３１８、３１９はどちらも、それらのそれぞれの構成可能な論理プラットフォーム３１０、３１１を動作させること、および制御することができる。例えば、仮想マシン３１８は、構成可能な論理プラットフォーム３１０を構成すること、および動作させることができ、一方で、仮想マシン３１９は、構成可能な論理プラットフォーム３１１を構成すること、および動作させることができる。構成可能な論理プラットフォーム３１０は、１つのＦＰＧＡおよび追加的なＦＰＧＡであってもよく、仮想マシン３１８がサブセット内の複数のＦＰＧＡを構成し、動作させるように、１つのＦＰＧＡおよび追加的なＦＰＧＡをサブセットに加えることができる。仮想マシン３１９は、同様に、構成可能な論理プラットフォーム３１１およびサブセット内の他のＦＰＧＡを構成し、動作させることができる。サブセットは、１つのサブセット内に異なる数のＦＰＧＡを有することができ、ＦＰＧＡは、シリアルインターフェースまたは他の通信手段を通して、互いにクロス通信することができる。しかしながら、サブセット間の通信は、典型的に、禁止される。
【００２６】
代替の一実施形態において、複数のサブセットは、仮想マシン３１８などの同じ仮想マシンによって制御することができる。そのような一事例において、サブセット間の相互通信は、仮想マシン３１８を通して起こり得る。例えば、構成可能な論理プラットフォーム３１０上の再構成可能な論理領域３４０は、仮想マシン３１８と通信することができ、次いで、該通信を、構成可能な論理プラットフォーム３１１上の他の再構成可能な論理領域に伝送することができる。この例において、仮想マシン３１９は、構成可能な論理プラットフォーム３１０、３１１のいずれかを制御しないだけでなく、そこにアクセスすることもできない。
【００２７】
図４は、構成可能なハードウェアプラットフォーム４１０を含むシステム４００の一実施例を示すシステム図である。サーバコンピュータ（図示せず）は、物理的相互接続４３０を介して、構成可能なハードウェアプラットフォーム４１０に結合することができる。例えば、物理的相互接続４３０は、ＰＣＩ−Ｅｘｐｒｅｓｓ、ＰＣＩ、またはサーバコンピュータを構成可能なハードウェアプラットフォーム４１０に密に結合する任意の他の相互接続とすることができる。構成可能なハードウェアプラットフォーム４１０は、再構成可能な論理ブロックと、他のハードウェアと、を含むことができる。再構成可能な論理ブロックは、構成可能なハードウェアプラットフォーム４１０の種々のハードウェア機能を行うように構成またはプログラムすることができる。再構成可能な論理ブロックは、ブロックがデバイスの寿命を通じて異なる機能を行うことができるように、異なる構成を伴って複数回プログラムすることができる。構成可能なハードウェアプラットフォーム４１０の機能は、各機能の目的もしくは能力に基づいて、または機能が構成可能なハードウェアプラットフォーム４１０にロードされる時期に基づいて分類することができる。例えば、構成可能なハードウェアプラットフォーム４１０は、静的ハードウェア論理、再構成可能なハードウェア論理、およびハードマクロを含むことができる。静的論理、再構成可能な論理、ハードマクロのための機能は、異なる時間に構成することができる。したがって、構成可能なハードウェアプラットフォーム４１０の機能は、漸増的にロードすることができる。
【００２８】
ハードマクロは、予め定義された機能を行うことができ、また、構成可能なハードウェアプラットフォーム４１０の電源がオンになったときに利用可能であり得る。例えば、ハードマクロは、特定の機能を行うハードワイヤード回路を含むことができる。具体的な例として、ハードマクロは、構成可能なハードウェアプラットフォーム４１０を構成するための構成アクセスポート（ＣＡＰ）４１１と、シリアルデータを通信するためのシリアライザ−デシリアライザトランシーバ（ＳＥＲＤＥＳ）４１２と、（ダブルデータレート（ＤＤＲ）ＤＲＡＭ４８１などの）オフチップメモリのシグナリングおよび制御を行うためのメモリまたはダイナミックランダムアクセスメモリ（ＤＲＡＭ）コントローラ４１３と、記憶デバイス４８２のシグナリングおよび制御を行うための記憶装置コントローラ４１４と、を含むことができる。ＳＥＲＤＥＳトランシーバが示されるが、他のタイプの通信ポートを、共有された周辺機器インターフェースとして使用することができる。他のタイプとしては、Ｅｔｈｅｒｎｅｔ、リングトポロジ、または他のタイプのネットワーキングインターフェースが挙げられるが、これらに限定されない。加えて、ＳＥＲＤＥＳインターフェースは、高速マルチレーンシリアルインターフェースであり、マルチレーン通信パスを有する他のシリアルポートを使用することができる。共有された周辺機器インターフェースは、サブセット１７０内のプログラマブルＩＣ間の通信によって図１に示されるように、プログラマブルＩＣ間のクロス通信に使用することができる。具体的な実施例において、ＳＥＲＤＥＳインターフェースは、ＩＣ間のクロス通信に使用することができる。
【００２９】
静的論理は、ブート時間に、再構成可能な論理ブロックにロードすることができる。例えば、静的論理の機能を指定する構成データは、ブートアップシーケンス中に、オンチップまたはオフチップフラッシュメモリデバイスからロードすることができる。ブートアップシーケンスは、（例えば、供給電圧が閾値未満から閾値を超えるまで移行したことを検出することなどによって）パワーイベントを検出すること、およびパワーイベントに応じてリセット信号をデアサートすることを含むことができる。初期化シーケンスは、パワーイベントまたはリセットがデアサートされることに応じて起動することができる。初期化シーケンスは、再構成可能な論理ブロックの少なくとも一部分が静的論理の機能によってプログラムされるように、構成アクセスポート４１１を使用して、フラッシュデバイスに記憶された構成データを読み出すこと、および構成データを構成可能なハードウェアプラットフォーム４１０にロードすることを含むことができる。静的論理がロードされた後に、構成可能なハードウェアプラットフォーム４１０は、ローディング状態から、静的論理の機能を含む動作状態に移行することができる。
【００３０】
再構成可能な論理（論理回路、ロジック）は、（例えば、静的論理がロードされた後に）構成可能なハードウェアプラットフォーム４１０が動作している間に、再構成可能な論理ブロックにロードすることができる。再構成可能な論理に対応する構成データは、オンチップもしくはオフチップメモリに記憶することができ、および／または構成データは、構成可能なハードウェアプラットフォーム４１０のインターフェース（例えば、相互接続インターフェース４５６）から受信もしくはストリーミングすることができる。再構成可能な論理は、非オーバーラップ領域に分割することができ、静的論理とインターフェースすることができる。例えば、再構成可能な領域は、アレイ構造で、または他の規則的もしくは半規則的な構造で配設することができる。例えば、アレイ構造は、ホールまたは妨害物を含むことができ、ハードマクロは、アレイ構造内に配置される。異なる再構成可能な領域は、静的論理として指定することができる信号ラインを使用することによって、互いに、静的論理と、およびハードマクロと通信することができる。異なる再構成可能な領域は、第１の再構成可能な領域を第１の時点で構成することができ、第２の再構成可能な領域を第２の時点で構成することができるように、異なる時点で構成することができる。
【００３１】
構成可能なハードウェアプラットフォーム４１０の機能は、目的または機能の能力に基づいて、分割または分類することができる。例えば、機能は、制御プレーン機能、データプレーン機能、および共有された機能に分類することができる。制御プレーンは、構成可能なハードウェアプラットフォーム４１０の管理および構成に使用することができる。データプレーンは、構成可能なハードウェアプラットフォーム４１０にロードされたアクセラレータ論理とサーバコンピュータとの間のデータ転送を管理するために使用することができる。共有された機能は、制御プレーンおよびデータプレーンによって使用することができる。制御プレーン機能は、データプレーン機能をロードする前に、構成可能なハードウェアプラットフォーム４１０にロードすることができる。データプレーンは、アプリケーション論理４４０を伴って構成された、カプセル化された再構成可能な論理を含むことができる。制御プレーンは、構成可能なハードウェアプラットフォーム４１０のホスト論理を含むことができる。
【００３２】
一般に、データプレーンおよび制御プレーンは、構成可能なハードウェアプラットフォーム４１０の異なる機能を使用してアクセスすることができ、異なる機能が異なるアドレス範囲に割り当てられる。具体的には、制御プレーン機能は、管理機能４５２を使用してアクセスすることができ、データプレーン機能は、データパス機能またはデータパス機能４５４を使用してアクセスすることができる。アドレスマッピング層４５０は、制御プレーンまたはデータプレーンに結び付けられたトランザクションを区別することができる。特に、構成可能なハードウェアプラットフォーム４１０に結び付けられた、サーバコンピュータからのトランザクションは、トランザクション内のアドレスを使用して識別することができる。具体的には、トランザクションのアドレスが構成可能なハードウェアプラットフォーム４１０に割り当てられたアドレスの範囲に入る場合、トランザクションは、構成可能なハードウェアプラットフォーム４１０を宛先とする。トランザクションは、物理的相互接続４３０を通じて送信することができ、また、相互接続インターフェース４５６で受信することができる。相互接続インターフェース４５６は、物理的相互接続４３０のエンドポイントとすることができる。物理的相互接続４３０は、デバイスまたは構成要素をサーバコンピュータに接続するためのファブリックに配設された追加的なデバイス（例えば、スイッチおよびブリッジ）を含むことができることを理解されたい。
【００３３】
アドレスマッピング層４５０は、トランザクションのアドレスを分析し、アドレスに基づいて、構成可能なハードウェアプラットフォーム４１０内のどこにトランザクションをルーティングするのかを決定することができる。例えば、管理機能４５２には、アドレスの第１の範囲を割り当てることができ、管理プレーンの異なる機能には、その範囲内の異なるアドレスを使用してアクセスすることができる。管理機能４５２に割り当てられた範囲に入るアドレスを有するトランザクションは、ホスト論理プライベートファブリック４６０を通して、制御プレーンの異なるブロックにルーティングすることができる。例えば、トランザクションは、管理および構成ブロック４６２にアドレッシングすることができる。同様に、データパス機能４５４には、アドレスの第２の範囲を割り当てることができ、データプレーンの異なる機能には、その範囲内の異なるアドレスを使用してアクセスすることができる。異なるアドレスマッピングを使用することで、領域と仮想マシンおよび／またはハイパーバイザとの関連付けを行うことができる。
【００３４】
管理および構成ブロック４６２は、構成可能なハードウェアプラットフォーム４１０を管理および構成することに関連した機能を含むことができる。例えば、管理および構成ブロック４６２は、再構成可能な論理ブロックを構成することができるように、構成アクセスポート４１１へのアクセスを提供することができる。例えば、サーバコンピュータは、トランザクションを管理および構成ブロック４６２に送信して、アプリケーション論理をカプセル化された再構成可能な論理４４０内にロードすることを開始することができる。アプリケーション論理に対応する構成データは、サーバコンピュータから管理機能４５２に送信することができる。管理機能４５２は、アプリケーション論理をロードすることができるように、ホスト論理ファブリック４６０を通して、アプリケーション論理に対応する構成データを構成アクセスポート４１１にルーティングすることができる。共有された周辺機器４８５は、プログラマブルＩＣのサブセット内の相互通信に使用することができる。例えば、ＳＥＲＤＥＳインターフェース４１２は、プログラマブルＩＣが、通信がサーバコンピュータ上のハイパーバイザを通過することなく、互いに通信することを可能にするために使用される。
【００３５】
プログラマブルＩＣのサブセット間の（図１に１８０で示されるような）隔離は、物理的または論理的隔離などのいくつかの技術を使用して起こり得る。最初に、ＳＥＲＤＥＳインターフェース４１２を、プログラマブルＩＣ間の物理的リンク（すなわち、通信パス）を有効または無効にするように、共有された周辺機器インターフェース４８５内のホスト論理によってプログラムすることができる。リンクを使用可能にすることで、プログラマブルＩＣ間の物理的通信パスを確立することができ、一方で、リンクを無効にすることで、そのような物理的通信パスを切断することができる。簡単な例において、通信パス（例えば、リングトポロジまたは他のタイプの通信パス）は、ホストサーバコンピュータ内のＰＣＩｅカード間に提供することができ、その通信パスは、適切な場合に無効にして、プログラマブルＩＣのサブセットを隔離することができる。ＳＥＲＤＥＳインターフェース４１２を無効または有効にすることは、通信パスを結合するように、または通信パスを接続解除するようにビットをプログラムする（設定またはクリアする）ことができる、管理機能４５２またはホスト論理プライベートファブリック４６０を通して起こり得る。第２の技術は、（代替または補助の実施形態を示すために破線で示される）ＳＥＲＤＥＳインターフェース４１５をプライベート周辺機器インターフェース４７５に含むことであり得る。プライベート周辺機器インターフェース４７５は、アプリケーション論理４４０への／からのパケットアドレスに基づいてパケットを受信するか／転送するかを判定する、ホスト論理を含むことができる。このようにして、プライベート周辺機器インターフェース４７５は、プログラマブルＩＣのサブセットを論理的に隔離することができる。例えば、アプリケーション論理４４０がパケットを別の仮想マシンによって制御されるサブセットに伝送しようとする場合、プライベート周辺機器インターフェース４７５は、パケットを破棄すること、または別様に伝送を拒否することができる。したがって、プログラマブルＩＣに位置付けられたホスト制御のインターフェースは、論理的接続または論理的隔離を確立するためのアクセス特権に基づいて、パケットを監視すること、およびパケットの伝送を制御することができる。加えて、受信したパケットは、プライベート周辺機器インターフェース４７５内のホスト論理が有効なソースアドレスを認識した場合に、ＳＥＲＤＥＳインターフェースだけによって受け入れられる。
【００３６】
管理および構成ブロック４６２は、構成可能なハードウェアプラットフォーム４１０に関するメタデータを記憶することができる。例えば、異なる論理ブロック、更新履歴、および他の情報のバージョンを、管理および構成ブロック４６２のメモリに記憶することができる。サーバコンピュータは、メタデータのいくつかまたは全てを検索するためにメモリを読み出すことができる。具体的には、サーバコンピュータは、管理および構成ブロック４６２のメモリを標的にする読み出し要求を送信することができ、管理および構成ブロック４６２は、読み出し応答データを生成して、サーバコンピュータに返すことができる。
【００３７】
管理機能４５２はまた、構成可能なハードウェアプラットフォーム４１０のプライベート周辺機器にアクセスするために使用することもできる。プライベート周辺機器は、制御プレーンだけからアクセス可能な構成要素である。例えば、プライベート周辺機器としては、ＪＴＡＧ（例えば、ＩＥＥＥ１１４９．１）コントローラ４７０、発光ディスプレイ（ＬＥＤ）４７１、マイクロコントローラ４７２、汎用非同期レシーバ／トランスミッタ（ＵＡＲＴ）４７３、メモリ４７４（例えば、シリアル周辺機器インターフェース（ＳＰＩ）フラッシュメモリ）、および制御プレーンからアクセス可能であり、データプレーンがアクセス不可能である任意の他の構成要素を挙げることができる。管理機能４５２は、ホスト論理プライベートファブリック４６０およびプライベート周辺機器インターフェース（複数可）４７５を通してコマンドをルーティングすることによって、プライベート周辺機器にアクセスすることができる。プライベート周辺機器インターフェース（複数可）４７５は、プライベート周辺機器と直接通信することができる。
【００３８】
共有された周辺機器は、制御プレーンまたはデータプレーンのいずれかからアクセス可能である、共有された機能である。例えば、共有された周辺機器は、管理機能４５２に割り当てられたアドレス範囲内でトランザクションをアドレッシングすることによって、制御プレーンからアクセスすることができる。共有された周辺機器は、データパス機能４５４に割り当てられたアドレス範囲内でトランザクションをアドレッシングすることによって、データプレーンからアクセスすることができる。したがって、共有された周辺機器は、複数のアドレスマッピングを有することができ、かつ制御プレーンおよびデータプレーンによって使用することができる構成要素である。共有された周辺機器の例は、他の構成可能なハードウェアプラットフォーム（複数可）（ＣＨＰ（複数可））４８０、ＤＲＡＭ４８１（例えば、ＤＤＲ  ＤＲＡＭ））、記憶デバイス４８２（例えば、ハードディスクドライブおよびソリッドステートドライブ）、および情報を生成、記憶、または処理するために使用することができる他の種々の構成要素である。共有された周辺機器は、共有された周辺機器インターフェース４８５を介してアクセスすることができる。したがって、共有された周辺機器インターフェース４８５は、共有された周辺機器と構成可能なハードウェアプラットフォーム４１０の他の機能との間で移行される中間物層とすることができる。具体的には、共有された周辺機器インターフェース４８５は、制御プレーンまたはデータプレーンからの要求を変換すること、および共有された周辺機器への通信を共有された周辺機器のネイティブプロトコルにフォーマットすることができる。
【００３９】
メールボックス４９０およびウォッチドッグタイマー４９２は、制御プレーンまたはデータプレーンのいずれかからアクセス可能である、共有された機能である。具体的には、メールボックス４９０は、メッセージおよび他の情報を制御プレーンとデータプレーンとの間で渡すために使用することができる。例えば、メールボックス４９０は、バッファ、（セマフォなどの）制御レジスタ、およびステータスレジスタを含むことができる。メールボックス４９０を制御プレーンとデータプレーンとの間の中間物として使用することによって、データプレーンと制御プレーンとの間の隔離を潜在的に高め、これは、構成可能なハードウェアプラットフォーム４１０のセキュリティを高めることができる。
【００４０】
ウォッチドッグタイマー４９２は、ハードウェアおよび／またはソフトウェアの故障を検出し、回復するために使用することができる。例えば、ウォッチドッグタイマー４９２は、特定のタスクを行うために要する時間を監視することができ、時間が閾値を超えた場合、ウォッチドッグタイマー４９２は、値を制御レジスタに書き込むこと、割り込みまたはリセットをアサートさせることなどのイベントを開始することができる。１つの例として、ウォッチドッグタイマー４９２は、第１のタスクを開始するときに、第１の値で初期化することができる。ウォッチドッグタイマー４９２は、初期化された後に自動的にカウントダウンすることができ、ウォッチドッグタイマー４９２がゼロ値に到達した場合に、イベントを生成することができる。代替的に、ウォッチドッグタイマー４９２がゼロ値に到達する前に第１のタスクが終了した場合、ウォッチドッグタイマー４９２は、第２のタスクを開始するときに、第２の値によって再初期化することができる。第１および第２の値は、それぞれ、第１および第２のタスクを完了するための複雑さ、または仕事量に基づいて選択することができる。
【００４１】
データパス機能４５４は、アプリケーション論理４４０などのデータプレーン機能にアクセスするために使用することができる。例えば、アプリケーション論理４４０を対象とするトランザクションは、データをサーバコンピュータにロードさせること、処理させること、および／または返させることができる。具体的には、データプレーン機能は、データパス機能４５４に割り当てられた範囲内のアドレスを有するトランザクションを使用してアクセスすることができる。例えば、トランザクションは、データパス機能４５４を介して、サーバコンピュータからアプリケーション論理４４０に送信することができる。具体的には、データパス機能４５４にアドレッシングされたトランザクションは、周辺機器ファブリック４６４を通してアプリケーション論理４４０にルーティングすることができる。アプリケーション論理４４０からの応答は、周辺機器ファブリック４６４を通してデータパス機能４５４にルーティングし、次いで、サーバコンピュータに戻すことができる。加えて、アプリケーション論理４４０によって生成されたデータおよびトランザクションは、使用状況およびトランザクション監視層４６６を使用して監視することができる。監視層４６６は、潜在的に、予め定義されたルールに違反するトランザクションまたはデータを識別することができて、また、制御プレーンを通じて送信される警報を生成することができる。追加的または代替的に、監視層４６６は、監視層４６６の任意の基準に違反するアプリケーション論理４４０によって生成された任意のトランザクションを終了することができる。加えて、監視層４６６は、情報に関する統計を収集し、制御プレーンからアクセスすることができるように、アプリケーション論理４４０に、またはそこから移動する情報を分析することができる。
【００４２】
データはまた、ダイレクトメモリアクセス（ＤＭＡ）エンジン４４２をプログラムすることによって、サーバコンピュータとアプリケーション論理との間で転送することもできる。ＤＭＡエンジン４４２は、ソースの場所から宛先の場所へのＤＭＡの転送をプログラムする、または指定するための制御およびステータスレジスタを含むことができる。１つの例として、ＤＭＡエンジン４４２は、サーバコンピュータのメモリ４２４内に記憶された情報を、アプリケーション論理４４０内に、または構成可能なハードウェアプラットフォーム４１０の共有された周辺機器内にプルするようにプログラムすることができる。別の例として、ＤＭＡエンジン４４２は、アプリケーション論理４４０によって生成されたデータをサーバコンピュータのメモリ４２４にプッシュするようにプログラムすることができる。アプリケーション論理４４０によって生成されたデータは、アプリケーション論理４４０からストリーミングすることができ、またはメモリ４８１または記憶装置４８２などのパブリック周辺機器に書き込むことができる。
【００４３】
アプリケーション論理４４０は、他の構成可能なハードウェアプラットフォーム４８０と通信することができる。例えば、他の構成可能なハードウェアプラットフォーム４８０は、ＳＥＲＤＥＳ４１２と通信する１つ以上のシリアルラインによって接続することができる。アプリケーション論理４４０は、異なる構成可能なハードウェアプラットフォーム４８０へのトランザクションを生成することができ、トランザクションは、ＣＨＰファブリック４４４を通して、（ＳＥＲＤＥＳ４１２を介して）構成可能なハードウェアプラットフォーム４８０の対応するシリアルラインにルーティングすることができる。同様に、アプリケーション論理４４０は、逆のパスを使用して、他の構成可能なハードウェアプラットフォーム４８０から情報を受信することができる。
【００４４】
要約すれば、構成可能なハードウェアプラットフォーム４１０の機能は、制御プレーン機能およびデータパス機能に分類することができる。制御プレーン機能は、データプレーン能力を監視し、制限するために使用することができる。データプレーン機能は、サーバコンピュータ上で稼働しているユーザのアプリケーションを加速するために使用することができる。制御プレーンおよびデータプレーンの機能を分離することによって、潜在的に、サーバコンピュータおよび他のコンピューティングインフラストラクチャのセキュリティおよび可用性を高めることができる。例えば、制御プレーンの中間層が物理的相互接続４３０のトランザクションのフォーマットおよびシグナリングを制御するので、アプリケーション論理４４０は、物理的相互接続４３０へ直接シグナリングすることができない。別の例として、アプリケーション論理４４０は、構成可能なハードウェアプラットフォーム４１０を再構成するために、および／または特権的であり得る管理情報にアクセスするために使用することができるプライベート周辺機器を使用することを阻止することができる。別の例として、アプリケーション論理４４０は、アプリケーション論理４４０とハードマクロとの間の任意の相互作用が中間層を使用して制御されるように、中間層を通して構成可能なハードウェアプラットフォーム４１０のハードマクロにアクセスすることができる。
【００４５】
図５は、本明細書で説明される実施形態を使用することができる１つの環境を例示する、ネットワークベースの計算サービスプロバイダ５００のコンピューティングシステム図である。背景として、計算サービスプロバイダ５００（すなわち、クラウドプロバイダ）は、エンドレシピエントのコミュニティへの貢献として、コンピューティングおよび記憶容量の送達が可能である。例示的な一実施形態において、計算サービスプロバイダは、組織によって、またはその組織に代わって編成するために確立することができる。すなわち、計算サービスプロバイダ５００は、「プライベートなクラウド環境」を提供することができる。別の実施形態において、計算サービスプロバイダ５００は、マルチテナント環境をサポートし、複数の顧客は、独立して動作する（すなわち、パブリッククラウド環境）。一般に言えば、計算サービスプロバイダ５００は、次のモデル、すなわち、サービスとしてのインフラストラクチャ（「ＩａａＳ」）、サービスとしてのプラットフォーム（「ＰａａＳ」）、および／またはサービスとしてのソフトウェア（「ＳａａＳ」）を提供することができる。他のモデルを提供することができる。ＩａａＳモデルの場合、計算サービスプロバイダ５００は、物理または仮想マシン、および他のリソースとして、コンピュータを提供することができる。仮想マシンは、下でさらに説明するように、ハイパーバイザによって、ゲストとして稼働させることができる。ＰａａＳモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、およびウェブサーバを含むことができる、コンピューティングプラットフォームを送達する。アプリケーション開発者らは、基礎をなすハードウェアおよびソフトウェアを購入および管理するためのコストを伴うことなく、計算サービスプロバイダプラットフォーム上で該開発者らのソフトウェアソリューションを開発し、稼働させることができる。加えて、アプリケーション開発者らは、計算サービスプロバイダプラットフォームの構成可能なハードウェア上で該開発者らのハードウェアソリューションを開発および稼働させることができる。ＳａａＳモデルは、計算サービスプロバイダにおけるアプリケーションソフトウェアのインストールおよび動作を可能にする。いくつかの実施形態において、エンドユーザは、ウェブブラウザまたは他の軽量のクライアントアプリケーションを稼働させる、デスクトップコンピュータ、ラップトップ、タブレット、スマートフォンなどといったネットワーク化された顧客デバイスを使用して、計算サービスプロバイダ５００にアクセスする。当業者は、計算サービスプロバイダ５００を「クラウド」環境として説明することができることを認識するであろう。
【００４６】
特定の例示される計算サービスプロバイダ５００は、複数のサーバコンピュータ５０２Ａ〜５０２Ｃを含む。３台のサーバコンピュータだけが示されるが、任意の数を使用することができ、大規模施設は、何千台ものサーバコンピュータを含むことができる。サーバコンピュータ５０２Ａ〜５０２Ｃは、ソフトウェアインスタンス５０６Ａ〜５０６Ｃを実行するためのコンピューティングリソースを提供することができる。１つの実施形態において、ソフトウェアインスタンス５０６Ａ〜５０６Ｃは、仮想マシンである。当技術分野で知られているように、仮想マシンは、物理マシンのようにアプリケーションを実行するマシン（すなわち、コンピュータ）のソフトウェア実装のインスタンスである。仮想マシンの例において、サーバ５０２Ａ〜５０２Ｃの各々は、ハイパーバイザ５０８、または単一のサーバ上で複数のソフトウェアインスタンス５０６の実行を可能にするように構成された別のタイプのプログラムを実行するように構成することができる。加えて、ソフトウェアインスタンス５０６の各々は、１つ以上のアプリケーションを実行するように構成することができる。
【００４７】
本明細書に開示される実施形態は、主に仮想マシンの文脈で説明されるが、他のタイプのインスタンスを、本明細書に開示される概念および技術と共に利用することができることを理解されたい。例えば、本明細書に開示される技術は、記憶リソース、データ通信リソース、および他のタイプのコンピューティングリソースと共に利用することができる。本明細書に開示される実施形態はまた、仮想マシンインスタンスを利用することなく、コンピュータシステム上でアプリケーションの全てまたは一部分を直接実行することができる。
【００４８】
サーバコンピュータ５０２Ａ〜５０２Ｃは、異なるハードウェアリソースまたはインスタンスタイプの異種の集合体を含むことができる。ハードウェアインスタンスタイプのいくつかは、計算サービスプロバイダ５００のユーザによって少なくとも部分的に構成可能である、構成可能なハードウェアを含むことができる。インスタンスタイプの１つの例は、構成可能なハードウェア５０４Ａと通信する、サーバコンピュータ５０２Ａを含むことができる。具体的には、サーバコンピュータ５０２Ａおよび構成可能なハードウェア５０４Ａは、ＰＣＩｅなどのローカル相互接続を通じて通信することができる。インスタンスタイプの別の例は、サーバコンピュータ５０２Ｂと、構成可能なハードウェア５０４Ｂと、を含むことができる。例えば、構成可能な論理（論理回路、ロジック）５０４Ｂは、マルチチップモジュール内に、またはサーバコンピュータ５０２ＢのＣＰＵと同じダイ上に集積することができる。したがって、構成可能な論理を伴う、および伴わないハードウェアインスタンスタイプは、計算サービスプロバイダ５００のリソース内に存在させることができる。構成可能なハードウェア５０４は、複数のインスタンス５０６から構成し、動作させることができ、次いで、構成可能なハードウェアの動作を同時に制御することができる。示されるように、サーバコンピュータ５０２は、１対１の構成を有することができ、各インスタンス５０６は、１つ以上の構成可能なハードウェア５０４を制御する。
【００４９】
１つ以上のサーバコンピュータ５２０は、サーバコンピュータ５０２およびソフトウェアインスタンス５０６の動作を管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ５２０は、管理構成要素５２２を実行することができる。顧客は、管理構成要素５２２にアクセスして、顧客によって購入されたソフトウェアインスタンス５０６の動作の種々の態様を構成することができる。例えば、顧客は、インスタンスを購入、レンタル、またはリースして、ソフトウェアインスタンスの構成を変更することができる。ソフトウェアインスタンスの各々の構成情報は、ネットワークアタッチトストレージ５４０上のマシンイメージ（ＭＩ）５４２として記憶することができる。具体的には、ＭＩ５４２は、ＶＭインスタンスを起動するために使用される情報を記述する。ＭＩは、インスタンス（例えば、ＯＳおよびアプリケーション）のルートボリュームのテンプレート、どの顧客アカウントがＭＩを使用することができるのかを制御するための起動許可、およびインスタンスが起動されたときにインスタンスにアタッチするボリュームを指定するブロックデバイスマッピングを含むことができる。ＭＩはまた、インスタンスが起動されたときに構成可能なハードウェア５０４にロードされる構成可能なハードウェアイメージ（ＣＨＩ）５４４の参照も含むことができる。ＣＨＩは、構成可能なハードウェア５０４の少なくとも一部分をプログラムまたは構成するための構成データを含む。
【００５０】
顧客はまた、要望に応じて、購入したインスタンスをスケーリングする方法に関する設定も指定することができる。管理構成要素は、顧客ポリシーを実行するために、ポリシー文書をさらに含むことができる。自動スケーリング構成要素５２４は、顧客によって定義されたルールに基づいて、インスタンス５０６をスケーリングすることができる。１つの実施形態において、自動スケーリング構成要素５２４は、顧客が、いつ新しいインスタンスをインスタンス化するべきなのかを決定する際に使用するためのスケールアップルール、およびいつ既存のインスタンスを終了するべきなのかを決定する際に使用するためのスケールダウンルールを指定することを可能にする。自動スケーリング構成要素５２４は、異なるサーバコンピュータ５０２または他のコンピューティングデバイスで実行するいくつかの副構成要素で構成することができる。自動スケーリング構成要素５２４は、内部管理ネットワークを通じて、利用可能なコンピューティングリソースを監視し、必要に基づいて利用可能なリソースを修正することができる。
【００５１】
展開構成要素５２６は、コンピューティングリソースの新しいインスタンス５０６を展開する際に顧客を支援するために使用することができる。展開構成要素は、誰がアカウントの所有者であるのか、クレジットカード情報、所有者の国などといった、インスタンスと関連付けられたアカウント情報へのアクセスを有することができる。展開構成要素５２６は、顧客から、新しいインスタンス５０６を構成するべき方法を記述するデータを含む構成を受信することができる。例えば、構成は、新しいインスタンス５０６でインストールされる１つ以上のアプリケーションを指定すること、新しいインスタンス５０６を構成するために実行されるべきスクリプトおよび／または他のタイプのコードを提供すること、アプリケーションキャッシュが準備するべき方法を指定するキャッシュ論理を提供すること、ならびに他のタイプの情報を提供することができる。展開構成要素５２６は、顧客が提供する構成およびキャッシュ論理を利用して、新しいインスタンス５０６を構成、準備、および起動することができる。構成、キャッシュ論理、および他の情報は、管理構成要素５２２を使用する顧客によって、またはこの情報を展開構成要素５２６に直接提供することによって指定することができる。インスタンスマネージャは、展開構成要素の一部とみなすことができる。
【００５２】
顧客アカウント情報５２８は、マルチテナント環境の顧客と関連付けられた任意の所望の情報を含むことができる。例えば、顧客アカウント情報としては、顧客の一意の識別子、顧客の住所、課金情報、ライセンス情報、インスタンスを起動するためのカスタム化パラメータ、スケジュール情報、自動スケーリングパラメータ、アカウントにアクセスするために使用した以前のＩＰアドレス、顧客がアクセス可能なＭＩおよびＣＨＩのリストなどを挙げることができる。
【００５３】
１つ以上のサーバコンピュータ５３０は、サーバコンピュータ５０２の構成可能なハードウェア５０４への構成データのダウンロードを管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ５３０は、摂取構成要素５３２と、ライブラリ管理構成要素５３４と、ダウンロード構成要素５３６と、を備える、論理リポジトリサービスを実行することができる。摂取構成要素５３２は、ホスト論理およびアプリケーション論理設計（論理構造）または仕様を受信すること、ならびに構成可能なハードウェア５０４を構成するために使用することができる構成データを生成することができる。ライブラリ管理構成要素５３４は、論理リポジトリサービスと関連付けられたソースコード、ユーザ情報、および構成データを管理するために使用することができる。例えば、ライブラリ管理構成要素５３４は、ユーザの設計によって生成された構成データを、ネットワークアタッチトストレージ５４０上のユーザによって指定された場所に記憶するために使用することができる。特に、構成データは、ネットワークアタッチトストレージ５４０上の構成可能なハードウェアイメージ５４２内に記憶することができる。加えて、ライブラリ管理構成要素５３４は、（アプリケーション論理およびホスト論理のための仕様のなどの）入力ファイル、ならびに論理設計および／または論理リポジトリサービスのユーザに関するメタデータのバージョニングおよび記憶を管理することができる。ライブラリ管理構成要素５３４は、例えば、ユーザ識別子、インスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、および構成可能なハードウェア識別子などの１つ以上の特性によって、生成された構成データにインデックスを付けることができる。ダウンロード構成要素５３６は、構成データの要求を認証し、要求が認証されたときに構成データを要求者に伝送するために使用することができる。例えば、サーバコンピュータ５０２Ａ〜Ｂ上のエージェントは、構成可能なハードウェア５０４を使用するインスタンス５０６を起動したときに、要求をダウンロード構成要素５３６に送信することができる。別の例として、サーバコンピュータ５０２Ａ〜Ｂ上のエージェントは、構成可能なハードウェア５０４が動作している間に構成可能なハードウェア５０４を部分的に再構成するようにインスタンス５０６が要求したときに、要求をダウンロード構成要素５３６に送信することができる。
【００５４】
ネットワークアタッチトストレージ（ＮＡＳ）５４０は、記憶空間およびＮＡＳ５４０に記憶されるファイルへのアクセスを提供するために使用することができる。例えば、ＮＡＳ５４０は、ネットワークファイルシステム（ＮＦＳ）などのネットワークファイル共有プロトコルを使用して要求を処理するために使用される、１つ以上のサーバコンピュータを含むことができる。ＮＡＳ５４０は、リムーバブル媒体または非リムーバブル媒体を含むことができ、該媒体としては、磁気ディスク、ストレージエリアネットワーク（ＳＡＮ）、独立したディスクの冗長アレイ（ＲＡＩＤ）、磁気テープもしくはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または情報を非一時的な方式で記憶するために使用することができ、また、ネットワーク５５０を通じてアクセスすることができる任意の他の媒体が挙げられる。
【００５５】
ネットワーク５５０は、サーバコンピュータ５０２Ａ〜５０２Ｃ、サーバコンピュータ５２０および５３０、ならびに記憶装置５４０を相互接続するために利用することができる。ネットワーク５５０は、ローカルエリアネットワーク（ＬＡＮ）とすることができ、また、エンドユーザが計算サービスプロバイダ５００にアクセスすることができるように、ワイドエリアネットワーク（ＷＡＮ）５６０に接続することができる。図５に例示されるネットワークトポロジが簡略化されたものであること、およびはるかに多くのネットワークおよびネットワーキングデバイスを利用して、本明細書で開示される種々のコンピューティングシステムを相互接続することができることを認識されたい。
【００５６】
図６は、マルチテナント環境においてプログラマブルハードウェアを制御するための方法のフローチャートである。プロセスブロック６１０において、第１の仮想マシンがホストサーバコンピュータ上で実行される。仮想マシンは、ホストサーバコンピュータ上のローカル仮想マシンとすることができる。他の実施形態において、仮想マシンは、別々のホストサーバコンピュータに位置付けることができる。特定の例において、別個のホストサーバコンピュータ上の仮想マシンは、ネットワークを通して、プログラマブル回路が位置付けられたホストサーバコンピュータ上の管理ハイパーバイザに通信することができる。プロセスブロック６２０において、第２の仮想マシンが同じホストサーバコンピュータ上で実行される。プロセスブロック６１０と同様に、第２の仮想マシンをリモートで実行することができる。第１および第２の仮想マシンの両方を実行することは、典型的に、仮想マシンと関連付けられた顧客からのＡＰＩに応じて、ホストサーバコンピュータ上の仮想マシンを起動することを通して達成することができる。図２は、同じホストサーバコンピュータ２１０で実行する２つの仮想マシン２２０、２３０の一実施例を提供する。仮想マシンを実行している間に、該仮想マシンが要求に応じてコマンドを発行することができる。
【００５７】
プロセスブロック６３０において、プログラマブルハードウェアを１つ以上のプログラマブルＩＣの第１のサブセットにロードすることができる。仮想マシンを使用することで、プログラマブルハードウェアをプログラムするために必要な情報をプログラマブルＩＣにダウンロードすることができる。一時的に図１を参照すると、異なるプログラマブルＩＣをサブセット１７０内にプログラムすることができる。プログラマブルＩＣのプログラミングは、機能および／または性能に影響を及ぼすように、プログラマブルハードウェアをプログラマブルＩＣにロードすることを含むことができる。プログラマブルＩＣのローディングは、プログラマブルハードウェアの第１の部分が一方の仮想マシンによってロードされること、およびプログラマブルハードウェアの第２の部分が他方の仮想マシンによってロードされることをもたらすことができ、第１および第２の部分は、単一のＦＰＧＡなどの同じＩＣ内にある。そのような状況では、各部分は、それが他の部分を妨害することができないようにサンドボックス化される。プログラマブルハードウェアは、論理（ＡＮＤゲート、ＯＲゲートなど）、ならびにフリップフロップ、メモリ、および任意の他の所望のハードウェア構成要素を含むことができる。プログラマブルハードウェアのローディングは、仮想マシンインスタンスによって行うことができる。代替的に、ローディングはまた、ハイパーバイザによって行うこともできる。さらに別の例において、プログラミングは、ローカルハイパーバイザの制御を通してプログラマブルハードウェアをプログラマブルＩＣにロードするように作用する、外部プロセス（例えば、別個のホストサーバコンピュータ上のプロセス）によって達成することができる。
【００５８】
プロセスブロック６４０において、プログラマブルハードウェアは、１つ以上のプログラマブルＩＣの第２のサブセットにロードすることができる。プログラマブルハードウェアのローディングは、プロセスブロック６３０に類似する。
【００５９】
プロセスブロック６５０において、第１のサブセットの１つ以上のプログラマブルＩＣが、第１の仮想マシンと関連付けられ、第２のサブセットの１つ以上のプログラマブルＩＣが、第２の仮想マシンと関連付けられる。仮想マシンをプログラマブルＩＣと関連付けることは、プログラマブルＩＣからの通信（データ、命令など）を仮想マシンに、およびその逆も同様にルーティングすることができるように、仮想マシンとプログラマブルＩＣとの間にマッピングが存在することを意味する。
【００６０】
図７は、別の実施形態による方法のフローチャートである。プロセスブロック７１０において、プログラマブルＩＣの複数のサブセットが提供される。プログラマブルＩＣのサブセットは、ハイパーバイザを通過することなく直接通信するために共にリンクされる、１つ以上のプログラマブルＩＣを含む。そのような直接通信の例は、シリアルポートであり、少なくとも２つのプログラマブルＩＣが、相互シリアルバスを通して直接接続される。サブセットは、管理ハイパーバイザを通すことを除いて、一方のサブセットが他方のサブセットと直接通信することができないように、カプセル化することができる。典型的に、サブセットは、異なる顧客によって制御され、顧客が、同じホストサーバコンピュータで稼働する他のサブセットまたは顧客に気付かない間に、１つのサブセットが、１人の顧客と関連付けられる。プロセスブロック７２０において、第１および第２のグループの複数の仮想マシンが起動される。第１のグループは、第１の顧客と関連付けることができ、第２のグループは、第２の、異なる顧客と関連付けることができる。各グループは、１つ以上の関連付けられた仮想マシンを有することができる。仮想マシンを起動することは、仮想マシンが動作可能であり、また、要求（例えば、ＡＰＩ要求）を受信し、コマンドを実行することができることを意味する。
【００６１】
プロセスブロック７３０において、第１のグループの仮想マシンは、プログラマブルＩＣのサブセットのうちの１つにマッピングされる。例えば、図１において、グループ１６０内の仮想マシンからの要求は、プログラマブルＩＣ１７０のサブセットに伝送され、また、プログラマブルＩＣの物理アドレスを使用して、所望の特定のプログラマブルＩＣに伝送される。このようにして、仮想マシンインスタンスからの要求は、サブセット１７０の正しいプログラマブルＩＣに適切にルーティングすることができる。
【００６２】
プロセスブロック７４０において、第２のグループの仮想マシンは、プログラマブルＩＣのサブセットのうちの１つにマッピングされる。例えば、図１において、仮想マシンのグループ１６２は、プログラマブルＩＣの第２のサブセット１７２にマッピングすることができる。図４の４５０で説明したようなアドレスマッピングを使用することで、仮想マシン１６２からの要求は、サブセット１７２の適切なプログラマブルＩＣにルーティングすることができる。サブセット１７０、１７２はどちらも、互いに隔離され、サブセットと関連付けられた顧客は、典型的に、同じホストサーバコンピュータで動作する他の顧客の存在に気付かない。仮想マシンをプログラマブルＩＣのサブセットにマッピングすることは、異なるサブセットが、他のサブセットがリソースを共有していることを知ることなく、同じサーバコンピュータで動作することができるように、管理ハイパーバイザが、プログラマブルＩＣのサブセットをカプセル化またはサンドボックス化することを可能にする。
【００６３】
図８は、説明される技術革新を実行することができる適切なコンピューティング環境８００の一般的な例を表す。コンピューティング環境８００は、本技術革新を多様な汎用または専用コンピューティングシステムで実行することができるので、使用または機能の範囲に関していかなる限定も示唆することを意図しない。例えば、コンピューティング環境８００は、様々なコンピューティングデバイス（例えば、デスクトップコンピュータ、ラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータなど）のうちのいずれかとすることができる。
【００６４】
図８を参照すると、コンピューティング環境８００は、１つ以上の処理ユニット８１０、８１５と、メモリ８２０、８２５と、を含む。図８において、この基本構成８３０は、破線内に含まれる。処理ユニット８１０、８１５は、コンピュータ実行可能命令を実行する。処理ユニットは、汎用中央処理ユニット（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）内のプロセッサ、または任意の他のタイプのプロセッサとすることができる。マルチ処理システムでは、複数の処理ユニットがコンピュータ実行可能命令を実行して、処理能力を高める。例えば、図８は、中央処理ユニット８１０、ならびにグラフィックス処理ユニットまたは共処理ユニット８１５を示す。有形メモリ８２０、８２５は、処理ユニット（複数可）によってアクセス可能である揮発性メモリ（例えば、レジスタ、キャッシュ、ＲＡＭ）、不揮発メモリ（例えば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリなど）、またはこれら２つのいくつかの組み合わせとすることができる。メモリ８２０、８２５は、処理ユニット（複数可）による実行に適したコンピュータ実行可能命令の形態で、本明細書で説明される１つ以上の技術革新を実装するソフトウェア８８０を記憶する。
【００６５】
コンピューティングシステムは、追加的な特徴を有することができる。例えば、コンピューティング環境８００は、記憶装置（ストレージ）８４０と、１つ以上の入力デバイス８５０と、１つ以上の出力デバイス８６０と、１つ以上の通信接続８７０と、を含む。バス、コントローラ、またはネットワークなどの相互接続機構（図示せず）は、コンピューティング環境８００の構成要素を相互接続する。典型的に、オペレーティングシステムソフトウェア（図示せず）は、コンピューティング環境８００内で実行する他のソフトウェアのための動作環境を提供し、コンピューティング環境８００の構成要素の動作を協調させる。
【００６６】
有形記憶装置８４０は、リムーバブルまたは非リムーバブルとすることができ、該記憶装置としては、磁気ディスク、磁気テープもしくはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または情報を非一時的な方式で記憶するために使用することができ、また、コンピューティング環境８００内でアクセスすることができる任意の他の媒体が挙げられる。記憶装置８４０は、本明細書で説明される１つ以上の技術革新を実装するソフトウェア８８０のための命令を記憶する。
【００６７】
入力デバイス（複数可）８５０は、キーボード、マウス、ペン、またはトラックボールなどのタッチ入力デバイス、音声入力デバイス、スキャンデバイス、または入力をコンピューティング環境８００に提供する別のデバイスとすることができる。出力デバイス（複数可）８６０は、ディスプレイ、プリンタ、スピーカ、ＣＤライタ、またはコンピューティング環境８００からの出力を提供する別のデバイスとすることができる。
【００６８】
通信接続（複数可）８７０は、通信媒体を通じた別のコンピューティングエンティティへの通信を可能にする。通信媒体は、コンピュータ実行可能命令、音声、または、ビデオ入力もしくは出力、または変調されたデータ信号内の他のデータなどの情報を伝達する。変調されたデータ信号は、信号内の情報をエンコードするような様態で設定または変更されたその特性のうちの１つ以上を有する信号である。一例として、また、限定されないが、通信媒体は、電気、光、ＲＦ、または他の搬送波を使用することができる。プログラマブル論理ボード８７２は、本明細書で説明されるように、プログラマブルＩＣを含むことができる。例えば、プログラマブル論理ボード８７２は、１つ以上のプログラマブルＦＰＧＡを含むことができる。ボード８７２は、メインサーバプロセッサと、およびホストサーバコンピュータ内の他のボードに通信するためのＰＣＩｅバスなどの、バスにプラグインすることができる。
【００６９】
本開示の実施形態は、以下の付記を考慮して説明することができる。
１．方法であって、
ホストサーバコンピュータ上の第１および第２の仮想マシンを起動することであって、ホストサーバコンピュータが、プログラマブル集積回路（ＩＣ）の複数のサブセットを含む、起動することと、
第１の仮想マシンをプログラマブルＩＣの複数のサブセットのうちの一方にマッピングすることと、
第２の仮想マシンをプログラマブルＩＣの複数のサブセットのうちの他方にマッピングすることと、とを含み、
同じサブセット内にあるプログラマブルＩＣが共に結合されて、それらの間で通信する、方法。
【００７０】
２．プログラマブル論理ＩＣの複数のサブセットが、第１のサブセットと、第２のサブセットと、を含み、第１のサブセットが、第２のサブセットとは異なる数のプログラマブルＩＣを有する、付記１に記載の方法。
【００７１】
３．仮想マシンによってホストサーバコンピュータ上のハードウェアにアクセスすることを管理する、ホストサーバコンピュータで実行する管理ハイパーバイザを提供することをさらに含む、付記１または２のいずれかに記載の方法。
【００７２】
４．プログラマブル論理ＩＣのサブセット間の通信がブロックされる、付記１〜３のいずれかに記載の方法。
【００７３】
５．サブセット間の通信をブロックすることが、共有された周辺機器インターフェースを使用してサブセット間の通信パスを無効にすることによって達成される、付記４に記載の方法。
【００７４】
６．通信をブロックすることが、アクセス特権に基づいてパケットをルーティングし、パケットの伝送を制御する、プログラマブルＩＣに位置付けられたホスト制御のインターフェースを通して達成される、付記４または５に記載の方法。
【００７５】
７．プログラマブル論理ＩＣの各サブセットを、それぞれのマッピングされた仮想マシンを使用して構成することをさらに含む、付記１〜６のいずれかに記載の方法。
【００７６】
８．マルチテナント環境内のプログラマブルハードウェアを制御する方法であって、
ホストサーバコンピュータ上の第１の仮想マシンを実行することと、
ホストサーバコンピュータ上の第２の仮想マシンを実行することと、
プログラマブルハードウェアを、１つ以上のプログラマブル集積回路の第１のサブセットにロードすることと、
プログラマブルハードウェアを、１つ以上のプログラマブル集積回路の第２のサブセットにロードすることと、
第１のサブセット内の１つ以上のプログラマブル集積回路を第１の仮想マシンと関連付け、かつ第２のサブセット内の１つ以上のプログラマブル集積回路を第２の仮想マシンと関連付けることと、を含む、方法。
【００７７】
９．ホストサーバコンピュータ上の管理ハイパーバイザが、第１の仮想マシンおよび第２の仮想マシンを起動する、付記８に記載の方法。
【００７８】
１０．プログラマブルハードウェアをロードすることが、プログラマブルハードウェアの第１の部分を、第１の仮想マシンの指示の下で構成することと、プログラマブルハードウェアの第２の部分を、第２の仮想マシンの指示の下で構成することと、を含む、付記８または９に記載の方法。
【００７９】
１１．プログラマブルハードウェアをロードすることが、ホストサーバコンピュータ上の管理ハイパーバイザによって、または管理ハイパーバイザによる制御を通して、ホストサーバコンピュータの外部のプロセスによって行われる、付記８〜１０のいずれかに記載の方法。
【００８０】
１２．第１のサブセットが、少なくとも、第１のプログラマブル集積回路と、第２のプログラマブル集積回路と、を含み、第１のプログラマブル集積回路が、通信チャネルを通して第２のプログラマブル集積回路と直接通信する、付記８〜１１のいずれかに記載の方法。
【００８１】
１３．通信チャネルが、シリアル通信の１つ以上のレーンを含むシリアルポートである、付記１２に記載の方法。
【００８２】
１４．第２のサブセットが、第１のサブセットとは異なる数のプログラマブル集積回路を含む、付記１２または１３に記載の方法。
【００８３】
１５．１つ以上のプログラマブル集積回路の第１のサブセットが、１つ以上のプログラマブル集積回路の第２のサブセットから物理的または論理的に隔離される、付記８〜１４のいずれかに記載の方法。
【００８４】
１６．１つ以上のプログラマブルＩＣの第１のサブセットが、マルチテナント環境内の１つ以上のプログラマブルＩＣの第２のセットの存在を検出することができない、付記１５に記載の方法。
【００８５】
１７．プログラマブル集積回路が、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）である、付記８〜１６のいずれかに記載の方法。
【００８６】
１８．マルチテナント環境内の装置であって、
ホストサーバコンピュータと、
ホストサーバコンピュータ内の第１のプログラマブル集積回路（ＩＣ）と、
ホストサーバコンピュータ内の第２のプログラマブルＩＣと、を備え、
ホストサーバコンピュータが、少なくとも、第１のプログラマブルＩＣを動作させるための第１の仮想マシンと、第２のプログラマブルＩＣを動作させるための第２の仮想マシンと、を含む複数の仮想マシンをサポートするための管理ハイパーバイザを実行するように構成されたプロセッサを有する、装置。
【００８７】
１９．第１のプログラマブルＩＣに結合された第３のプログラマブルＩＣをさらに含み、
第１のプログラマブルＩＣおよび第３のプログラマブルＩＣが、それらの間で通信するために共に結合される、付記１８に記載の装置。
【００８８】
２０．ホストサーバコンピュータ内に第４のプログラマブルＩＣをさらに含み、第４のプログラマブルＩＣが、第１および第３のプログラマブルＩＣから隔離され、かつ第２のプログラマブルＩＣに結合される、付記１９に記載の装置。
【００８９】
２１．第１のプログラマブルＩＣが、プログラマブル論理の第１のサブセット内にあり、第２のプログラマブルＩＣが、プログラマブル論理の第２のサブセット内にあり、ホストサーバコンピュータが、第１および第２の仮想マシンによって隔離が制御されるプログラマブル論理の複数のサブセットを含む、付記１８〜２０のいずれかに記載の装置。
【００９０】
２２．第１のサブセットが、第２のサブセットとは異なる数のプログラマブルＩＣを含む、付記２１に記載の装置。
【００９１】
開示される方法のいくつかの動作は、提示の便宜のために特定の連続的な順序で説明されるが、下に記載される特定の言葉によって特定の順序が要求されない限り、この説明の様態は、再配列を含むことを理解されたい。例えば、連続的に説明される動作は、いくつかの事例において、再配列される場合があり、または同時に行われる場合がある。その上、簡潔にするために、添付図面は、開示される方法を他の方法と併せて使用することができる種々の方式を示さない場合がある。
【００９２】
開示される方法のいずれも、１つ以上のコンピュータ可読記憶媒体（例えば、１つ以上の光媒体ディスク、揮発性メモリ構成要素（ＤＲＡＭまたはＳＲＡＭなど）、または不揮発性メモリ構成要素（フラッシュメモリもしくはハードドライブなど））に記憶され、また、コンピュータ（例えば、スマートフォン、もしくはコンピューティングハードウェアを含む他のモバイルデバイスを含む、任意の市販コンピュータ）上で実行される、コンピュータ実行可能命令のように実施することができる。コンピュータ可読記憶媒体という用語は、信号および搬送波などの通信接続を含まない。開示される技術を、ならびに開示される実施形態の実施中に作成され、使用される任意のデータを実装するためのコンピュータ実行可能命令のいずれかは、１つ以上のコンピュータ可読記憶媒体に記憶することができる。コンピュータ実行可能命令は、例えば、専用ソフトウェアアプリケーション、またはウェブブラウザもしくは他のソフトウェアアプリケーション（リモートコンピューティングアプリケーションなど）を介してアクセスまたはダウンロードされるソフトウェアアプリケーションの一部とすることができる。そのようなソフトウェアは、例えば、単一のローカルコンピュータ（例えば、任意の適切な市販のコンピュータ）上で、または１つ以上のネットワークコンピュータを使用して（例えば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク（クラウドコンピューティングネットワークなど）、または他のそのようなネットワークを介して）ネットワーク環境内で実行することができる。
【００９３】
明確にするため、ソフトウェアベースの実装形態の特定の選択された態様だけを説明する。当技術分野でよく知られている他の詳細は、省略する。例えば、開示される技術は、任意の特定のコンピュータ言語またはプログラムに限定されないことを理解されたい。例えば、開示される技術は、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｐｅｒｌ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ａｄｏｂｅ  Ｆｌａｓｈ、または任意の他の適切なプログラミング言語で記述されたソフトウェアによって実施することができる。同様に、開示される技術は、任意の特定のコンピュータまたは特定のタイプのハードウェアに限定されない。適切なコンピュータおよびハードウェアの特定の詳細は、よく知られており、本開示で詳細に説明する必要はない。
【００９４】
また、本明細書で説明される任意の機能は、ソフトウェアの代わりに１つ以上のハードウェア論理構成要素によって少なくとも部分的に行うことができることを理解されたい。例えば、限定されないが、使用することができるハードウェア論理コンポーネントの例示的なタイプとしては、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、特定用途向け標準製品（ＡＳＳＰ）、システムオンチップシステム（ＳＯＣ）、コンプレックスプログラマブル論理デバイス（ＣＰＬＤ）などが挙げられる。
【００９５】
さらに、（例えば、コンピュータに、開示される方法のうちのいずれかを実行させるためのコンピュータ実行可能命令を備える）ソフトウェアベースの実施形態のいずれかを、適切な通信手段を通してアップロード、ダウンロード、またはリモートアクセスすることができる。そのような適切な通信手段としては、例えば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル（光ファイバーケーブルを含む）、磁気通信、電磁通信（ＲＦ、マイクロ波、および赤外線通信を含む）、電子通信、または他のそのような通信手段が挙げられる。
【００９６】
開示される方法、装置、およびシステムは、いかなる形であれ、限定するものと解釈されるべきではない。代わりに、本開示は、単独で、および互いとの種々の組み合わせおよび副次的な組み合わせで、種々の開示された実施形態の全ての新規かつ非自明な特徴および態様を目的とする。開示される方法、装置、およびシステムは、任意の特定の態様または特徴またはそれらの組み合わせに限定されず、開示される実施形態は、任意の１つ以上の特定の利点が存在すること、または問題を解決することを必要としない。
【００９７】
開示される発明の原理を適用することができる数多くの可能な実施形態を考慮して、例示される実施形態は、本発明の好適な例に過ぎないものであり、また、本発明の範囲を限定するものとみなすべきではないことを認識されるべきである。むしろ、本発明の範囲は、以下の特許請求の範囲によって定義される。したがって、本発明者らは、本発明者らの発明として、これらの特許請求の範囲に該当する全てのものを主張する。
【図１】
2019535078.tif 000003
【図２】
2019535078.tif 000004
【図３】
2019535078.tif 000005
【図４】
2019535078.tif 000006
【図５】
2019535078.tif 000007
【図６】
2019535078.tif 000008
【図７】
2019535078.tif 000009
【図８】
2019535078.tif 000010
【国際調査報告】
2019535078.tif 000011
2019535078.tif 000012