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