【文献】
ZAZO, Jose Fernando et al.,A PCIe DMA engine to support the virtualization of 40 Gbps FPGA-accelerated network appliances,Proceedings of the 2015 International Conference on ReConFigurable Computing and FPGAs (ReConFig),米国,IEEE,2015年12月 7日,1-6ページ
【文献】
CHEN, Fei et al.,Enabling FPGAs in the Cloud,Proceedings of the 11th ACM Conference on Computing Frontiers,米国,ACM,2014年 5月20日,1-10ページ
(58)【調査した分野】(Int.Cl.,DB名)
前記ホストICが、前記第1および第2の仮想マシンインスタンスと通信するためのインターフェースエンドポイントと、前記第1および第2のプログラマブルICと通信するためのインターフェースと、を含む、請求項1に記載の装置。
前記ホストICが、前記第1の仮想マシンインスタンスを、前記第1または第2のプログラマブルICのどちらかと関連付けるためのマッピング論理回路を含む、請求項1または2のいずれかに記載の装置。
前記ホストICが、ルーティング論理回路を含み、前記第1および第2のプログラマブルICが、前記ホストICと通信するためのインターフェースエンドポイントを含む、請求項1〜3のいずれかに記載の装置。
前記ホストICが、前記仮想マシンインスタンスと通信するためのインターフェースエンドポイントと、前記第1のプログラマブルIC内のエンドポイントと通信するためのルーティング論理回路と、を有する、請求項5に記載の方法。
前記第1のプログラマブルICが、前記仮想マシンインスタンスと関連付けられた部分と、ホスト部分と、を含み、前記ホスト部分が、前記ホストICと通信するためのインターフェースを含む、請求項5または6に記載の方法。
【発明を実施するための形態】
【0007】
カスタムハードウェアをクラウド環境内に提供することは、いくつかの点において、複数の顧客全体にわたってサーバコンピュータ等の一般的ハードウェアを共有するという中核的な利点のうちの1つに反する。しかしながら、フィールドプログラマブルゲートアレイ(FPGA)等のプログラマブル論理回路は、十分に一般的であり、また、顧客によってプログラムし、次いで、他の顧客によって再使用することができる。したがって、専門コンピューティングリソースを一組の再使用可能な一般的コンピューティングリソース内に提供するための1つの解決策は、(1つ以上のFPGAを含むアドインカードをサーバコンピュータに提供すること等によって)一般的コンピューティングリソースの中の選択として構成可能な論理回路プラットフォームを備えるサーバコンピュータを提供することである。構成可能な論理回路は、構成可能な論理回路に適用またはロードされる構成データによって指定される論理回路機能を行うようにプログラムまたは構成することができるハードウェアである。例えば、コンピューティングリソースのユーザは、構成可能な論理回路を構成するための仕様(ハードウェア記述言語で書かれたソースコード等)を提供することができ、構成可能な論理回路は、仕様に従って構成することができ、構成された論理回路は、ユーザのタスクを行うために使用することができる。しかしながら、コンピューティング設備の低レベルハードウェアへのユーザアクセスを可能にすることは、潜在的に、コンピューティング設備内のセキュリティおよびプライバシーの問題につながり得る。特定の一例として、あるユーザによる不良の、または悪意のある設計は、構成された論理回路がコンピューティング設備内の1つ以上のサーバコンピュータを故障(例えば、クラッシュ、ハング、もしくは再起動)させた場合、またはネットワークサービスが拒否された場合に、潜在的に、他のユーザに対するサービスの拒否を生じさせることがあり得る。別の具体的な例として、あるユーザによる不良の、または悪意のある設計は、構成された論理回路が、他のユーザのメモリ空間のメモリを読み出すおよび/またはそれに書き込むことができる場合に、潜在的に、別のユーザによるデータの破損または読み出しを生じさせ得る。
【0008】
本明細書で説明されるように、計算サービスの設備は、様々なコンピューティングリソースを含むことができ、あるタイプのコンピューティングリソースは、構成可能な論理回路プラットフォームを備えるサーバコンピュータを含むことができる。構成可能な論理回路プラットフォームは、コンピューティングリソースのハードウェア(例えば、構成可能な論理回路)がユーザによってカスタマイズされるように、コンピュータシステムのユーザによってプログラムまたは構成することができる。例えば、ユーザは、サーバコンピュータに密結合されたハードウェアアクセラレータとして機能するように、構成可能な論理回路をプログラムすることができる。特定の一例として、ハードウェアアクセラレータは、サーバコンピュータの、周辺機器相互接続エクスプレス(PCI−Express、またはPCIe)等のローカル相互接続を介してアクセス可能であり得る。ユーザは、サーバコンピュータ上のアプリケーションを実行することができ、アプリケーションのタスクは、PCIeトランザクションを使用してハードウェアアクセラレータによって行うことができる。ハードウェアアクセラレータをサーバコンピュータに密結合することによって、アクセラレータとサーバコンピュータとの間の待ち時間を低減させることができ、これは、潜在的に、アプリケーションの処理速度を高めることができる。構成可能な論理回路プラットフォームは、多様な再構成可能な論理回路ICであり得るが、典型的な一例は、FPGAであり、これは、下の具体的な実施例において使用されるが、代わりに、他の再構成可能なハードウェアを使用することができることを理解されたい。
【0009】
計算サービスプロバイダは、構成可能な論理回路プラットフォームのホスト論理回路内のユーザのハードウェア(本明細書において、アプリケーション論理回路とも称される)をラップまたはカプセル化することによって、潜在的に、コンピューティングリソースの安全性および/または可用性を高めることができる。アプリケーション論理回路をカプセル化することは、アプリケーション論理回路のアクセスを、構成リソース、物理インターフェース、構成可能な論理回路プラットフォームのハードマクロ、および構成可能な論理回路プラットフォームの種々の周辺機器に限定または制限することを含むことができる。例えば、計算サービスプロバイダは、それがホスト論理回路およびアプリケーション論理回路を含むように、構成可能な論理回路プラットフォームのプログラミングを管理することができる。ホスト論理回路は、アプリケーション論理回路がその中で機能する、フレームワークまたはサンドボックスを提供することができる。特に、ホスト論理回路は、アプリケーション論理回路と通信することができ、また、アプリケーション論理回路の機能を抑制することができる。例えば、ホスト論理回路は、アプリケーション論理回路がローカル相互接続上のシグナリングを直接制御することができないように、ローカル相互接続(例えば、PCIe相互接続)とアプリケーション論理回路との間でブリッジ機能を行うことができる。ホスト論理回路は、ローカル相互接続上のパケットまたはバストランザクションを形成し、プロトコル要件を満たすことを確実にする役割を果たすことができる。ローカル相互接続上の処理を制御することによって、ホスト論理回路は、潜在的に、不正な形式のトランザクションまたは境界外の場所に対するトランザクションを防止することができる。別の例として、ホスト論理回路は、計算サービスプロバイダによって提供されるサービスを使用することなく、アプリケーション論理回路が構成可能な論理回路プラットフォームを再プログラムさせることができないように、構成アクセスポートを隔離することができる。
【0010】
いくつかの実施形態において、ホスト論理回路は、仮想マシンと構成可能なハードウェアプラットフォームとの中間に位置付けられ、また、ハイパーバイザによってプログラムされた、FPGA、特定用途向けIC(ASIC)、またはシステムオンチップ(SoC)等の、別個のIC上に置くことができる。中間ホスト論理回路ICは、顧客に、構成可能なハードウェアプラットフォームが完全に顧客の制御下にあるというエクスペリエンス、PCIeインターフェースを使用して仮想マシンに通信する能力、動的部分再構成(PDR)、ハイブリッドメモリキューブ(HMC)、または他のスタンダードメモリインターフェースを行う能力などを提供する。いくつかの実施形態において、中間ホスト論理回路ICは、仮想マシンに対する上流のPCIeインターフェース、および顧客FPGAに対する下流のPCIeインターフェースを提供することができる。このようにして、顧客FPGAは、あたかも仮想マシンに直接通信しているかのように動作し、仮想マシンは、あたかも顧客FPGAと直接通信しているかのように動作する。代わりに、ホストICは、仮想マシンと顧客FPGAとの間で通信(トランザクションまたは命令とも呼ばれる)を渡しながら、任意の所望の中間管理およびセキュリティ機能を提供することができる。いくつかの実施形態では、暗号化されたRTLブロックを顧客論理回路に含むように顧客に提供すること等によって、いくつかの追加的なホスト論理回路を顧客FPGA内に位置付けることができる。ホスト論理回路ICは、顧客論理回路があたかも仮想マシンと直接通信しているかのように動作するように、顧客FPGAを仮想化する。
【0011】
ホスト論理回路ICはまた、マッピング機能も行うことができ、これは、複数の仮想マシンから適切な顧客FPGAへ通信をマッピングする。したがって、単一のホストICを通して、複数の仮想マシンは、顧客論理回路を含む、異なるプログラマブルICと通信することができる。
【0012】
図1は、破線108によって図表的に分離されたソフトウェア部分104およびハードウェア部分106を有するホストサーバコンピュータ102を含む、例示的なコンピューティングシステム100を示すシステム図である。ハードウェア部分106は、一般的に110に他のハードウェアとして示される、1つ以上のCPU、メモリ、記憶デバイスなどを含む。ハードウェア部分106は、一般に120に示される、プログラマブル集積回路(IC)をさらに含むことができる。プログラマブルICは、FPGA、またはコンプレックスプログラマブル論理回路デバイス(CPLD)等の他のタイプのプログラマブル論理回路とすることができる。プログラマブルICは、製造後に顧客によってプログラムされるように、ならびにプログラマブル論理回路ブロックおよび論理回路ブロックを一緒にリンクする構成可能な相互接続を含むように設計される。論理回路ブロックは、単純なゲートから複雑な組み合わせ機能にわたるハードウェア機能を行うようにプログラムすることができる。いずれにしても、プログラマブルICは、プログラムされているハードウェアの少なくともゲートを指し、また、単純な値をレジスタに記憶して、既存のハードウェア機能を構成することを含むものではない。むしろ、プログラミングから形成されるハードウェア自体である。下でさらに説明されるように、任意の数のプログラマブルIC120を、ホストサーバコンピュータ102内で使用することができる。さらに、プログラマブルIC120は、複数の顧客が互いの存在を知ることなく同じサーバコンピュータ102上で動作しているように、異なる顧客からの論理回路を含むことができる。
【0013】
ハードウェア部分106は、プログラマブルIC120とソフトウェア部分104との間で管理機能、セキュリティ機能、およびマッピング機能を行う、少なくとも1つの中間ホスト論理回路IC122をさらに含む。ホスト論理回路ICはまた、FPGA等のリプログラマブル論理回路、または別様には、ASICもしくはSoC等の非リプログラマブルハードウェアとすることもできる。
【0014】
ハードウェア106の上側のソフトウェア部分104で稼働する層は、ハイパーバイザまたはカーネル層であり、この実施例では、管理ハイパーバイザ130を含むように示される。ハイパーバイザまたはカーネル層は、タイプ1またはタイプ2ハイパーバイザとして分類することができる。タイプ1ハイパーバイザは、ホストハードウェア上で直接稼働して、ハードウェアを制御し、また、ゲストオペレーティングシステムを管理する。タイプ2ハイパーバイザは、従来のオペレーティングシステム環境内で稼働する。したがって、タイプ2環境において、ハイパーバイザは、オペレーティングシステム上で稼働する別個の層とすることができ、オペレーティングシステムは、システムハードウェアと相互作用する。異なるタイプのハイパーバイザとしては、Xenベースのもの、Hyper−V、ESXi/ESX、Linux(登録商標)などが挙げられるが、他のハイパーバイザを使用することができる。管理ハイパーバイザ130は、一般に、ハードウェア106にアクセスするために必要とされるデバイスドライバを含むことができる。
【0015】
ソフトウェア部分104は、一般に140で示される、仮想マシンを稼働させるための複数のパーティションを含むことができる。パーティションは、ハイパーバイザによる隔離の論理回路ユニットであり、また、仮想マシンを実行している。各パーティションには、ハードウェア層のメモリ、CPU割り当て、記憶装置などのそれ自体の部分を割り当てることができる。加えて、各パーティションは、仮想マシンおよびそれ自体のゲストオペレーティングシステムを含むことができる。このように、各パーティションは、他のパーティションから独立してそれ自体の仮想マシンをサポートするように設計された抽象的な容量部分である。各仮想マシン140は、ハードウェアインターフェース(図示されないが、下でさらに説明される)を通してホスト論理回路IC122に通信することができる。ホスト論理回路IC122は、プログラマブルIC120が、それらが仮想マシン140と直接通信していると考えるように、通信を適切なプログラマブルIC120にマッピングすることができる。いくつかの実施形態では、ホスト論理回路150の薄い層を、顧客と関連付けられたプログラマブルIC120に含むことができる。下でさらに説明されるように、この追加的なホスト論理回路150は、ホスト論理回路IC122とプログラマブルIC120との間で通信するためのインターフェース論理回路を含むことができる。
【0016】
1つの例において、ハイパーバイザは、Xenベースのハイパーバイザとすることができるが、上で説明したように、他のハイパーバイザを使用することができる。Xenの例において、管理ハイパーバイザ130は、ドメイン0(Dom0とも呼ばれる)であり、一方で、VM140は、ドメインUゲストである。ドメイン0のハイパーバイザは、物理I/Oリソースにアクセスするための、ならびにドメインUゲストと相互作用するための特別な権利を有する。ドメインUゲストは、ドメイン0からの許可を伴わずに、ハードウェア層106へのアクセスを有しない。このように、ドメイン0は、プログラマブルIC120の論理回路的隔離(サンドボックス化)を確実にする管理層である。
【0017】
管理ハイパーバイザ130は、プログラマブルIC120が、プログラマブルICの構成および制御を含む役割を果たす。加えて、管理ハイパーバイザ130は、PCIeインターフェース等のインターフェースバスの制御を有することができる。インターフェースを通して、管理ハイパーバイザ130は、プログラマブルIC120のハードウェア内のプログラミングの管理および制御を有する。しかしながら、プログラマブルIC120のプログラミングは、ホスト論理回路IC122を通して仮想マシン140から直接生じることもあり得る。このようにして、管理ハイパーバイザ130は、プログラマブルIC構成ポートをセキュアに管理すること、およびプログラマブルIC内でプログラムされた顧客IPを保護することができる。加えて、管理ハイパーバイザ130は、プログラマブルICの構成および動作のための外部管理されたサービスへの主インターフェースとしての役割を果たすことができる。しかしながら、管理ハイパーバイザ130は、プログラマブルICのプログラミングおよび管理を行うときに、同じく管理ハイパーバイザ130とプログラマブルICとの間に位置付けられた中間ホスト論理回路IC122を通して行うことができる。したがって、ホスト論理回路IC122は、複数の仮想マシン140から複数のプログラマブルIC120へ通信をルーティングするためのホスト論理回路を含む中間ICとすることができ、また、複数のプログラマブルIC120の追加的な管理、セキュリティ、および構成を提供することができる。
【0018】
図2は、顧客プログラマブルICを仮想化するためのシステム210の別の実施形態を提供する。システム210は、ソフトウェア部分220およびハードウェア部分222を含む、ホストサーバコンピュータ212を含む。ソフトウェア部分220は、複数の仮想マシン230および管理ハイパーバイザ232を含む。管理ハイパーバイザ232は、各仮想マシンがホストサーバコンピュータ212の処理能力、メモリなどを共有することができるように、サーバコンピュータのリソースを仮想マシン230に分割する。各仮想マシン230は、それ自体のそれぞれのプログラマブルIC250〜252と関連付けることができ、任意の整数個のプログラマブルICがホストサーバコンピュータ212内に存在する。図示されていないが、仮想マシン230のうちのいずれか1つは、複数のプログラマブルIC250〜252(例えば、FPGA)と通信することができる。仮想マシン230とプログラマブルIC250〜252との間の通信は、中間ホスト論理回路IC260を介して生じ、該中間ホスト論理回路自体は、管理ハイパーバイザ232によってプログラムされる、FPGA等のプログラマブルハードウェア論理回路とすることができる。ホスト論理回路IC260はまた、ASIC等の固定された非プログラマブルハードウェア論理回路とすることもできる。
【0019】
ホスト論理回路IC260は、仮想マシン230が、それらが直接プログラマブルIC250〜252と通信中であると考えるように設計された、インターフェースエンドポイント262を含む。しかしながら、代わりに、それらの通信は、どのプログラマブルIC250〜252が通信を送るべきなのかを決定するマッピング機能264を通して渡される。加えて、266において、ホスト論理回路IC260は、セキュリティ機能、監視機能などを行う管理ハードウェア266を含むことができる。管理ハードウェア266はまた、ある顧客が別の顧客のプログラマブルICの動作と関連付けられたセキュア情報を取得することができないように、プログラマブルIC250〜252のカプセル化またはサンドボックス化も確実にする。同様に、管理論理回路266は、プログラマブルICが他のプログラマブルICよりも多くのリソースを利用していないことを確実にするための機能を含むことができる。管理論理回路266は、通信をインターフェース268に渡すことができ、次いで、通信を伝送した仮想マシンと関連付けられたそれぞれのプログラマブルIC上の適切なエンドポイントインターフェース280に通信を伝送する。プログラマブルIC250〜252から仮想マシン230に戻す通信は、類似する様式で生じる。プログラマブルIC250〜252は、あたかもそれらが仮想マシン230と直接通信しているかのように、インターフェース280を通して通信する。ホスト論理回路IC260は、プログラマブルIC250〜252をプログラムするために管理ハイパーバイザ232によって使用することができる、構成および管理機能270をさらに含む。
【0020】
プログラマブルICは、再構成可能な論理回路ブロック(再構成可能なハードウェア)と、他のハードウェアと、を含むことができる。再構成可能な論理回路ブロックは、計算サービスプロバイダの顧客による所望に応じて、種々の機能を行うように構成またはプログラムすることができる。再構成可能な論理回路ブロックは、ブロックがデバイスの寿命を通じて異なるハードウェア機能を行うことができるように、異なる構成で複数回プログラムすることができる。プログラマブルIC250の機能は、各機能の目的もしくは能力に基づいて、または機能がプログラマブルIC250にロードされる時期に基づいて分類することができる。例えば、プログラマブルIC250は、静的論理回路、再構成可能な論理回路、およびハードマクロを含むことができる。静的論理回路、再構成可能な論理回路、ハードマクロのための機能は、異なる時間に構成することができる。したがって、プログラマブルIC250の機能は、漸増的にロードすることができる。
【0021】
ハードマクロは、予め定義された機能を行うことができ、また、プログラマブルICの電源がオンになったときに利用可能であり得る。例えば、ハードマクロは、特定の機能を行うハードワイヤード回路を含むことができる。具体的な例として、ハードマクロは、プログラマブルIC250を構成するための構成アクセスポート(CAP)と、シリアルデータを通信するためのシリアライザ−デシリアライザトランシーバ(SERDES)と、(ダブルデータレート(DDR)DRAM等の)オフチップメモリのシグナリングおよび制御を行うためのメモリまたはダイナミックランダムアクセスメモリ(DRAM)コントローラと、記憶デバイスのシグナリングおよび制御を行うための記憶装置コントローラと、を含むことができる。他のタイプの通信ポートを、共有された周辺機器インターフェースとして使用することができる。他のタイプとしては、Ethernet、リングトポロジ、または他のタイプのネットワーキングインターフェースが挙げられるが、これらに限定されない。
【0022】
静的論理回路は、ブート時間に、再構成可能な論理回路ブロックにロードすることができる。例えば、静的論理回路の機能を指定する構成データは、ブートアップシーケンス中に、オンチップまたはオフチップフラッシュメモリデバイスからロードすることができる。ブートアップシーケンスは、(例えば、供給電圧が閾値未満から閾値を超えるまで移行したことを検出すること等によって)パワーイベントを検出すること、およびパワーイベントに応じてリセット信号をデアサートすることを含むことができる。初期化シーケンスは、パワーイベントまたはリセットがデアサートされることに応じて起動することができる。初期化シーケンスは、再構成可能な論理回路ブロックの少なくとも一部分が静的論理回路の機能によってプログラムされるように、フラッシュデバイスに記憶された構成データを読み出すこと、および構成データをプログラマブルICにロードすることを含むことができる。静的論理回路がロードされた後に、プログラマブルIC250は、ローディング状態から、静的論理回路の機能を含む動作状態に移行することができる。
【0023】
再構成可能な論理回路は、(例えば、静的論理回路がロードされた後に)プログラマブルIC250が動作している間に、再構成可能な論理回路ブロックにロードすることができる。再構成可能な論理回路に対応する構成データは、オンチップもしくはオフチップメモリに記憶することができ、および/または構成データは、インターフェース(例えば、インターフェース280)から受信もしくはストリーミングすることができる。再構成可能な論理回路は、非オーバーラップ領域に分割することができ、静的論理回路とインターフェースすることができる。例えば、再構成可能な領域は、アレイ構造で、または他の規則的もしくは半規則的な構造で配設することができる。例えば、アレイ構造は、ホールまたは妨害物を含むことができ、ハードマクロは、アレイ構造内に配置される。異なる再構成可能な領域は、静的論理回路として指定することができる信号ラインを使用することによって、互いに、静的論理回路と、およびハードマクロと通信することができる。異なる再構成可能な領域は、第1の再構成可能な領域を第1の時点で構成することができ、第2の再構成可能な領域を第2の時点で構成することができるように、異なる時点で構成することができる。
【0024】
プログラマブルIC250の機能は、目的または機能の能力に基づいて、分割または分類することができる。例えば、機能は、制御プレーン機能、データプレーン機能、および共有された機能に分類することができる。制御プレーンは、プログラマブルICの管理および構成に使用することができる。データプレーンは、プログラマブルICにロードされた顧客論理回路とサーバコンピュータとの間のデータ転送を管理するために使用することができる。共有された機能は、制御プレーンおよびデータプレーンによって使用することができる。制御プレーン機能は、データプレーン機能をロードする前に、プログラマブルIC250にロードすることができる。データプレーンは、顧客アプリケーション論理回路を伴って構成された、カプセル化された再構成可能な論理回路を含むことができる。制御プレーンは、コンテンツサービスプロバイダと関連付けられたホスト論理回路を含むことができる。
【0025】
一般に、データプレーンおよび制御プレーンは、異なる機能を使用してアクセスすることができ、異なる機能が異なるアドレス範囲に割り当てられる。具体的には、制御プレーン機能は、管理機能を使用してアクセスすることができ、データプレーン機能は、データパス機能またはアプリケーション機能を使用してアクセスすることができる。アドレスマッピング層264は、制御プレーンまたはデータプレーンに結び付けられたトランザクションを区別することができる。トランザクションは、物理的相互接続を通じて送信することができ、また、相互接続インターフェース280で受信することができる。相互接続インターフェースは、物理的相互接続のエンドポイントとすることができる。物理的相互接続は、デバイスまたは構成要素をサーバコンピュータ212に接続するためのファブリックに配設された追加的なデバイス(例えば、スイッチおよびブリッジ)を含むことができることを理解されたい。
【0026】
要約すれば、機能は、制御プレーン機能およびアプリケーション機能に分類することができる。制御プレーン機能は、データプレーン能力を監視し、制限するために使用することができる。データプレーン機能は、サーバコンピュータ上で稼働しているユーザのアプリケーションを加速するために使用することができる。制御プレーンおよびデータプレーンの機能を分離することによって、潜在的に、サーバコンピュータ212および他のコンピューティングインフラストラクチャのセキュリティおよび可用性を高めることができる。例えば、制御プレーンの中間層が物理的相互接続のトランザクションのフォーマットおよびシグナリングを制御するので、アプリケーション論理回路は、物理的相互接続へ直接シグナリングすることができない。別の例として、アプリケーション論理回路は、プログラマブルICを変更するために、および/または特権的であり得る管理情報にアクセスするために使用することができるプライベート周辺機器を使用することを阻止することができる。別の例として、アプリケーション論理回路は、アプリケーション論理回路とハードマクロとの間の任意の相互作用が中間層を使用して制御されるように、中間層を通してプログラマブルICのハードマクロにアクセスすることができる。
【0027】
制御プレーン機能は、大部分がホスト論理回路IC260で維持され、一方で、データプレーン機能は、プログラマブルIC250、252で維持される。制御プレーンおよびデータプレーンを異なるICに分離することによって、プログラマブルIC250を使用する顧客エクスペリエンスが、より非マルチテナント環境に従う。上で説明した機能は、プログラマブルIC250に関するが、ホストサーバコンピュータ212上の他のプログラマブルIC(例えば、252)の機能にも等しく適用することができる。
【0028】
図3は、中間ホストFPGA310がサーバホスト312と複数の顧客FPGA314、316との間に位置付けられた、システム300の1つの実施形態の詳細な実施例である。2つの顧客FPGA314、316が示されるが、追加的な顧客FPGAを加えることができる。加えて、中間ホスト310がFPGAとして示されるが、ASICまたはSoC等の他のタイプのICを使用することができる。顧客FPGA314、316およびホストFPGA310は、ホストサーバコンピュータ312上の1つ以上のプラグインカード上に位置付けることができ、または別様にはホストサーバコンピュータのマザーボード上に位置付けることができる。
【0029】
サーバホスト312は、仮想マシン320等の1つ以上の仮想マシンを実行することができる。この特定の実施例において、仮想マシン320は、顧客FPGA314にプログラムされたアクセラレータハードウェアをサポートするためのアプリケーションを含むが、アクセラレータの代わりに他のハードウェアを使用することができる。仮想マシン320は、ユーザアプリケーション322と、アクセラレータAPI324と、アプリケーションドライバ326とを含むことができる。ユーザアプリケーション322は、アクセラレータAPI324を介して、顧客FPGA314に対してコマンドを送信すること、および要求を受信することができる。API324は、アプリケーションドライバ326を通してコマンドおよび要求を通信する。アプリケーションドライバ326は、サーバホスト312に位置付けられたルートコンプレックス330を、PCIeを通して通信する。ルートコンプレックスは、サーバホスト312上のプロセッサおよびメモリサブシステムを、スイッチングデバイスを含むPCIスイッチファブリックに接続する。このように、ルートコンプレックスは、ルーティング論理回路とみなされる。仮想マシン320は、FPGA管理API332およびFPGA管理ドライバ334をさらに含み、これらは、顧客FPGA314の構成および管理において使用することができる。他の仮想マシンが示されていないが、各仮想マシンは、そのそれぞれのFPGAを制御するための、それ自体のFPGA管理APIおよび管理ドライバを有する。管理ハイパーバイザ340は、FPGA管理アプリケーション342、FPGA構成344、ならびにFPGA管理および監視346を実行することができる。これらのアプリケーションは、FPGAドライバ348を通して通信し、FPGAを制御することができる。管理ハイパーバイザ340は、仮想マシン320を含む、複数の仮想マシンを監督し、管理することができる。
【0030】
中間ホストFPGA310は、FPGA314、316を構成し、管理し、顧客と通信するための複数のモジュールを含む。FPGA310は、ルートコンプレックス330が通信を切り替えることができるエンドポイントとして作用する、PCIeエンドポイント350を含む。PCIeマッピング層352は、トランザクションと、異なる顧客FPGA314、316に結び付けられたサーバコンピュータ312とを区別することができる。具体的には、トランザクションのアドレスが顧客FPGA314のアドレス範囲に入る場合、それに応じてトランザクションをFPGA314にルーティングすることができる。代替的に、アドレスが顧客FPGA316の範囲に入る場合、トランザクションは、そのようにルーティングされる。他の顧客FPGAが存在する場合は、同様にトランザクションをそのようなFPGAにルーティングすることができる。トランザクションは、FPGA管理層354を通して渡され、これは、セキュリティおよびトランザクションの監視を提供して、カプセル化が顧客間で維持されることを確実にする。例えば、FPGA管理層は、潜在的に、予め定義されたルールに違反するトランザクションまたはデータを識別することができ、また、それに応じて警告を生成することができる。追加的または代替的に、FPGA管理354は、任意の所定の基準に違反するように生成された任意のトランザクションを終了することができる。有効なトランザクションの場合、FPGA管理層354は、トランザクションを共有されたファブリック層360に転送することができ、次いで、トランザクションを共有された周辺機器362に転送することができ、該周辺機器は、GTY SerDes、DRAMコントローラ、および記憶装置コントローラ等のシリアルポートを含むことができる。共有された周辺機器は、制御プレーンまたはデータプレーンからアクセス可能である、共有された機能である。共有された周辺機器は、複数のアドレスマッピングを有することができ、かつ制御プレーンおよびデータプレーンによって使用することができる構成要素である。共有された周辺機器の例としては、SerDesインターフェース、DRAM制御(例えば、DDR DRAM)、記憶デバイス制御(例えば、ハードディスクドライブおよびソリッドステートドライブ)、および情報を生成、記憶、または処理するために使用することができる他の種々の構成要素が挙げられる。共有された周辺機器362は、追加的な周辺機器制御を含むことができる。共有された周辺機器を中間ホストFPGA310内に有することによって、全ての顧客が適正な割合でリソースを受信するように、任意のある顧客によって使用されるリソースの量を制御することができる。FPGA314、316を宛先とする通信は、シリアルバス、Ethernetバス、リングトポロジ、または任意の所望の通信機構であることができるFPGA間トランスポート層364に渡すことができる。他の通信は、プライベート周辺機器372にアクセスするためのホスト論理回路プライベートファブリック370に渡すことができる。プライベート周辺機器372は、計算サービスプロバイダだけによってアクセス可能であり、また、顧客によってアクセス不可能な構成要素である。プライベートな周辺機器としては、JTAG(例えば、IEEE1149.1)、汎用I/O(GPIO)、シリアル周辺機器インターフェース(SPI)フラッシュメモリ、および発光ディスプレイ(LED)を挙げることができる。例示される周辺機器は、単なる例に過ぎず、他の周辺機器を使用することができる。
【0031】
メールボックスおよびウォッチドッグタイマー374は、制御プレーンまたはデータプレーンからアクセス可能である、共有された機能である。具体的には、メールボックスは、メッセージおよび他の情報を制御プレーンとデータプレーンとの間で渡すために使用することができる。例えば、メールボックスは、バッファ、(セマフォ等の)制御レジスタ、およびステータスレジスタを含むことができる。メールボックスを制御プレーンとデータプレーンとの間の中間物として使用することによって、データプレーンと制御プレーンとの間の隔離を潜在的に高め、これは、構成可能なハードウェアプラットフォームのセキュリティを高めることができる。ウォッチドッグタイマーは、ハードウェアおよび/またはソフトウェアの故障を検出し、回復するために使用することができる。例えば、ウォッチドッグタイマーは、特定のタスクを行うために要する時間を監視することができ、時間が閾値を超えた場合、ウォッチドッグタイマーは、値を制御レジスタに書き込むこと、割り込みまたはリセットをアサートさせること等のイベントを開始することができる。
【0032】
FPGA構成および管理ブロック376は、FPGA314、316を管理し、構成することに関する機能を含むことができる。例えば、構成および管理ブロック376は、FPGAを構成するためのアクセスを提供することができる。具体的には、サーバコンピュータ312は、トランザクションをブロック376に送信して、顧客FPGA314、316内のサンドボックス化されたアクセラレータのロードを開始することができる。
【0033】
各顧客FPGA314、316は、FPGA間トランスポートブロック380を含むことができ、これは、顧客FPGAと中間ホストFPGA310との間でデータまたは制御機能を通信するための通信インターフェースである。FPGA間トランスポートブロックは、暗号化されたRTLコードまたは他の手段を使用して、顧客論理回路内に含むように顧客に提供することができる。ホスト論理回路ラッパー382は、FPGA間トランスポートインターフェースとそれらの間の通信を促進するためのサンドボックス化されたアクセラレータ384(顧客ハードウェア論理回路である)との間に位置付けることができる。アクセラレータ機能が示されるが、他の顧客論理回路機能を使用することができる。
【0034】
中間FPGA310は、顧客FPGAをほぼ排他的に顧客専用とすることを可能にし、FPGAのごく一部分だけが、ホスト論理回路(すなわち、トランスポートブロック380およびホスト論理回路ラッパー382)を含む。ホストFPGA310は、顧客FPGA314、316よりも物理的に小さいFPGA(構成可能な論理回路ブロックがより少ない)とすることができ、管理ハイパーバイザ340が仮想マシン320を仮想化するのとほぼ同じ方法で、ホストサーバコンピュータ312から顧客FPGAを仮想化する。このようにして、仮想マシン320は、それがPCIeエンドポイント350を使用して顧客FPGAと直接通信していると考える。しかしながら、中間FPGAは、データおよび/またはコマンドを顧客FPGAに渡す前に、マッピングおよびセキュリティ機能を行う。同様に、顧客FPGAは、それが、直接仮想マシン320と通信中である考えるが、そのメッセージは、セキュリティのため、監視するため、および対応する仮想マシンに再度マッピングするために、中間FPGAに渡す。
【0035】
図4は、中間ホストFPGA410がサーバホスト412と複数の顧客FPGA414、416との間に位置付けられたシステム400の一実施形態である。サーバホスト412および中間ホストFPGAと関連付けられたブロックの多くは、
図3のブロックに類似しており、簡潔にする目的で再度説明しない。しかしながら、
図4の実施形態において、共有された周辺機器420は、顧客FPGA414、416内に位置付けられる。このように、中間FPGA410は、PCIeルートコンプレックス430を含むことができる。したがって、サーバホスト412内の第1のルートコンプレックス432は、ホストFPGA410のPCIeエンドポイント434にトランザクションを通信する。トランザクションは、管理ブロックをPCIeマッピングおよびFPGAに渡した後に、トランザクションをルーティングする方法を決定する、中間FPGA410内の第2のルートコンプレックス430に渡す。例えば、PCIeルートコンプレックス430は、トランザクションと関連付けられた識別されたアドレス範囲に応じて、トランザクションを顧客FPGA414または顧客FPGA416のどちらかにルーティングする。ルートコンプレックス430は、トランザクションを顧客FPGA414のPCIeエンドポイント440に伝送する。次いで、PCIeエンドポイント440が、トランザクションを顧客アクセラレータ論理回路442に通信する。顧客アクセラレータ論理回路442は、共有された周辺機器420へのアクセスを有し、これは、上で説明したように周辺機器論理回路を含み、下でさらに説明される。
【0036】
したがって、この実施形態では、2つの層のルートコンプレックスが存在し、そのうちの1つは、432のホストサーバコンピュータにあり、もう1つは、430の中間ホストFPGAにある。
図3のように、中間FPGAは、ホスト論理回路を要求することなく、または顧客FPGA内のごくわずかなホスト論理回路によって、顧客FPGAの制御および管理を可能にする。これは、顧客が、あたかも自分がFPGA全体の制御を有するかのようなエクスペリエンスを有することを可能にする。いくつかのホスト論理回路は、顧客が自分の設計に組み込むことができる暗号化されたRTLコードを顧客に供給することによって、顧客FPGAに含むことができる。
【0037】
図5は、本明細書で説明される実施形態を使用することができる1つの環境を例示する、ネットワークベースの計算サービスプロバイダ500のコンピューティングシステム図である。背景として、計算サービスプロバイダ500(すなわち、クラウドプロバイダ)は、エンドレシピエントのコミュニティへの貢献として、コンピューティングおよび記憶容量の送達が可能である。例示的な一実施形態において、計算サービスプロバイダは、組織によって、またはその組織に代わって編成するために確立することができる。すなわち、計算サービスプロバイダ500は、「プライベートなクラウド環境」を提供することができる。別の実施形態において、計算サービスプロバイダ500は、マルチテナント環境をサポートし、複数の顧客は、独立して動作する(すなわち、パブリッククラウド環境)。一般に言えば、計算サービスプロバイダ500は、次のモデル、すなわち、サービスとしてのインフラストラクチャ(「IaaS」)、サービスとしてのプラットフォーム(「PaaS」)、および/またはサービスとしてのソフトウェア(「SaaS」)を提供することができる。他のモデルを提供することができる。IaaSモデルの場合、計算サービスプロバイダ500は、物理または仮想マシン、および他のリソースとして、コンピュータを提供することができる。仮想マシンは、下でさらに説明するように、ハイパーバイザによって、ゲストとして稼働させることができる。PaaSモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、およびウェブサーバを含むことができる、コンピューティングプラットフォームを送達する。アプリケーション開発者らは、基礎をなすハードウェアおよびソフトウェアを購入および管理するためのコストを伴うことなく、計算サービスプロバイダプラットフォーム上で該開発者らのソフトウェアソリューションを開発し、稼働させることができる。加えて、アプリケーション開発者らは、計算サービスプロバイダプラットフォームの構成可能なハードウェア上で該開発者らのハードウェアソリューションを開発および稼働させることができる。SaaSモデルは、計算サービスプロバイダにおけるアプリケーションソフトウェアのインストールおよび動作を可能にする。いくつかの実施形態において、エンドユーザは、ウェブブラウザまたは他の軽量のクライアントアプリケーションを稼働させる、デスクトップコンピュータ、ラップトップ、タブレット、スマートフォンなどといったネットワーク化された顧客デバイスを使用して、計算サービスプロバイダ500にアクセスする。当業者は、計算サービスプロバイダ500を「クラウド」環境として説明することができることを認識するであろう。
【0038】
特定の例示される計算サービスプロバイダ500は、複数のサーバコンピュータ502A〜502Bを含む。2台のサーバコンピュータだけが示されるが、任意の数を使用することができ、大規模施設は、何千台ものサーバコンピュータを含むことができる。サーバコンピュータ502A〜502Bは、ソフトウェアインスタンス506A〜506Bを実行するためのコンピューティングリソースを提供することができる。1つの実施形態において、ソフトウェアインスタンス506A〜506Bは、仮想マシンである。当技術分野で知られているように、仮想マシンは、物理マシンのようにアプリケーションを実行するマシン(すなわち、コンピュータ)のソフトウェア実装のインスタンスである。仮想マシンの例において、サーバ502A〜502Bの各々は、ハイパーバイザ508、または単一のサーバ上で複数のソフトウェアインスタンス506の実行を可能にするように構成された別のタイプのプログラムを実行するように構成することができる。加えて、ソフトウェアインスタンス506の各々は、1つ以上のアプリケーションを実行するように構成することができる。
【0039】
本明細書に開示される実施形態は、主に仮想マシンの文脈で説明されるが、他のタイプのインスタンスを、本明細書に開示される概念および技術と共に利用することができることを理解されたい。例えば、本明細書に開示される技術は、記憶リソース、データ通信リソース、および他のタイプのコンピューティングリソースと共に利用することができる。本明細書に開示される実施形態はまた、仮想マシンインスタンスを利用することなく、コンピュータシステム上でアプリケーションの全てまたは一部分を直接実行することができる。
【0040】
サーバコンピュータ502A〜502Bは、異なるハードウェアリソースまたはインスタンスタイプの異種の集合体を含むことができる。ハードウェアインスタンスタイプのいくつかは、計算サービスプロバイダ500のユーザによって少なくとも部分的に構成可能である、構成可能なハードウェアを含むことができる。インスタンスタイプの1つの例は、中間ホストIC516Aを介して構成可能なハードウェア504Aと通信する、サーバコンピュータ502Aを含むことができる。具体的には、サーバコンピュータ502AおよびホストIC516Aは、PCIe等のローカル相互接続を通じて通信することができる。同様に、ホストIC516Aおよび構成可能なハードウェア504Aは、PCIeインターフェースを通じて通信することができる。インスタンスタイプの別の例は、サーバコンピュータ502Bと、ホストIC516Bと、構成可能なハードウェア504Bとを含むことができる。例えば、構成可能な論理回路504Bは、マルチチップモジュール内に、またはサーバコンピュータ502BのCPUと同じダイ上に集積することができる。したがって、構成可能なハードウェア504A、504Bは、サーバコンピュータ502A、502B上に、またはその外に位置付けることができる。さらに別の実施形態において、ホストIC516Aまたは516Bは、ホストサーバコンピュータ502Aまたは502Bの外部に位置付けることができる。
【0041】
1つ以上のサーバコンピュータ520は、サーバコンピュータ502およびソフトウェアインスタンス506の動作を管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ520は、管理構成要素522を実行することができる。顧客は、管理構成要素522にアクセスして、顧客によって購入されたソフトウェアインスタンス506の動作の種々の態様を構成することができる。例えば、顧客は、インスタンスを購入、レンタル、またはリースして、ソフトウェアインスタンスの構成を変更することができる。ソフトウェアインスタンスの各々の構成情報は、ネットワークアタッチトストレージ540上のマシンイメージ(MI)542として記憶することができる。具体的には、MI542は、VMインスタンスを起動するために使用される情報を記述する。MIは、インスタンス(例えば、OSおよびアプリケーション)のルートボリュームのテンプレート、どの顧客アカウントがMIを使用することができるのかを制御するための起動許可、およびインスタンスが起動されたときにインスタンスにアタッチするボリュームを指定するブロックデバイスマッピングを含むことができる。MIはまた、インスタンスが起動されたときに構成可能なハードウェア504にロードされる構成可能なハードウェアイメージ(CHI)542の参照も含むことができる。CHIは、構成可能なハードウェア504の少なくとも一部分をプログラムまたは構成するための構成データを含む。
【0042】
顧客はまた、要望に応じて、購入したインスタンスをスケーリングする方法に関する設定も指定することができる。管理構成要素は、顧客ポリシーを実行するために、ポリシー文書をさらに含むことができる。自動スケーリング構成要素524は、顧客によって定義されたルールに基づいて、インスタンス506をスケーリングすることができる。1つの実施形態において、自動スケーリング構成要素524は、顧客が、いつ新しいインスタンスをインスタンス化するべきなのかを決定する際に使用するためのスケールアップルール、およびいつ既存のインスタンスを終了するべきなのかを決定する際に使用するためのスケールダウンルールを指定することを可能にする。自動スケーリング構成要素524は、異なるサーバコンピュータ502または他のコンピューティングデバイスで実行するいくつかの副構成要素で構成することができる。自動スケーリング構成要素524は、内部管理ネットワークを通じて利用可能なコンピューティングリソースを監視し、必要に基づいて利用可能なリソースを修正することができる。
【0043】
展開構成要素526は、コンピューティングリソースの新しいインスタンス506を展開する際に顧客を支援するために使用することができる。展開構成要素は、誰がアカウントの所有者であるのか、クレジットカード情報、所有者の国などといった、インスタンスと関連付けられたアカウント情報へのアクセスを有することができる。展開構成要素526は、顧客から、新しいインスタンス506を構成するべき方法を記述するデータを含む構成を受信することができる。例えば、構成は、新しいインスタンス506でインストールされる1つ以上のアプリケーションを指定すること、新しいインスタンス506を構成するために実行されるべきスクリプトおよび/または他のタイプのコードを提供すること、アプリケーションキャッシュが準備するべき方法を指定するキャッシュ論理回路を提供すること、ならびに他のタイプの情報を提供することができる。展開構成要素526は、顧客が提供する構成およびキャッシュ論理回路を利用して、新しいインスタンス506を構成、準備、および起動することができる。構成、キャッシュ論理回路、および他の情報は、管理構成要素522を使用する顧客によって、またはこの情報を展開構成要素526に直接提供することによって指定することができる。インスタンスマネージャは、展開構成要素の一部とみなすことができる。
【0044】
顧客アカウント情報528は、マルチテナント環境の顧客と関連付けられた任意の所望の情報を含むことができる。例えば、顧客アカウント情報としては、顧客の一意の識別子、顧客の住所、課金情報、ライセンス情報、インスタンスを起動するためのカスタム化パラメータ、スケジュール情報、自動スケーリングパラメータ、アカウントにアクセスするために使用した以前のIPアドレス、顧客がアクセス可能なMIおよびCHIのリストなどを挙げることができる。
【0045】
1つ以上のサーバコンピュータ530は、サーバコンピュータ502の構成可能なハードウェア504への構成データのダウンロードを管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ530は、摂取構成要素532と、ライブラリ管理構成要素534と、ダウンロード構成要素536とを備える、論理回路リポジトリサービスを実行することができる。摂取構成要素532は、ホスト論理回路およびアプリケーション論理回路設計または仕様を受信すること、ならびに構成可能なハードウェア504を構成するために使用することができる構成データを生成することができる。ライブラリ管理構成要素534は、論理回路リポジトリサービスと関連付けられたソースコード、ユーザ情報、および構成データを管理するために使用することができる。例えば、ライブラリ管理構成要素534は、ユーザの設計によって生成された構成データを、ネットワークアタッチトストレージ540上のユーザによって指定された場所に記憶するために使用することができる。特に、構成データは、ネットワークアタッチトストレージ540上の構成可能なハードウェアイメージ542内に記憶することができる。加えて、ライブラリ管理構成要素534は、(アプリケーション論理回路およびホスト論理回路のための仕様の等の)入力ファイル、ならびに論理回路設計および/または論理回路リポジトリサービスのユーザに関するメタデータのバージョニングおよび記憶を管理することができる。ライブラリ管理構成要素534は、例えば、ユーザ識別子、インスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、および構成可能なハードウェア識別子等の1つ以上の特性によって、生成された構成データにインデックスを付けることができる。ダウンロード構成要素536は、構成データの要求を認証し、要求が認証されたときに構成データを要求者に伝送するために使用することができる。例えば、サーバコンピュータ502A〜B上のエージェントは、構成可能なハードウェア504を使用するインスタンス506を起動したときに、要求をダウンロード構成要素536に送信することができる。別の例として、サーバコンピュータ502A〜B上のエージェントは、構成可能なハードウェア504が動作している間に構成可能なハードウェア504を部分的に再構成するようにインスタンス506が要求したときに、要求をダウンロード構成要素536に送信することができる。
【0046】
ネットワークアタッチトストレージ(NAS)540は、記憶空間およびNAS540に記憶されるファイルへのアクセスを提供するために使用することができる。例えば、NAS540は、ネットワークファイルシステム(NFS)等のネットワークファイル共有プロトコル(例えば)を使用して要求を処理するために使用される、1つ以上のサーバコンピュータを含むことができる。NAS540は、リムーバブル媒体または非リムーバブル媒体を含むことができ、該媒体としては、磁気ディスク、ストレージエリアネットワーク(SAN)、独立したディスクの冗長アレイ(RAID)、磁気テープもしくはカセット、CD−ROM、DVD、または情報を非一時的な方式で記憶するために使用することができ、また、ネットワーク550を通じてアクセスすることができる任意の他の媒体が挙げられる。
【0047】
ネットワーク550は、サーバコンピュータ502A〜502B、サーバコンピュータ520および530、ならびに記憶装置540を相互接続するために利用することができる。ネットワーク550は、ローカルエリアネットワーク(LAN)とすることができ、また、エンドユーザが計算サービスプロバイダ500にアクセスすることができるように、ワイドエリアネットワーク(WAN)560に接続することができる。
図5に例示されるネットワークトポロジが簡略化されたものであること、およびはるかに多くのネットワークおよびネットワーキングデバイスを利用して、本明細書で開示される種々のコンピューティングシステムを相互接続することができることを認識されたい。
【0048】
図6は、マルチテナント環境においてプログラマブルハードウェアを制御するための方法のフローチャートである。プロセスブロック610で、仮想マシンインスタンスがホストサーバコンピュータ上で実行される。仮想マシンは、ホストサーバコンピュータ上のローカル仮想マシンとすることができる。他の実施形態において、仮想マシンは、別々のホストサーバコンピュータに位置付けることができる。特定の例において、別個のホストサーバコンピュータ上の仮想マシンは、ネットワークを通して、プログラマブル回路が位置付けられたホストサーバコンピュータ上の管理ハイパーバイザに通信することができる。
【0049】
プロセスブロック620で、プログラマブルICを仮想マシンインスタンスにマッピングすることができる。例えば、1つ以上のホストICを仮想マシンインスタンスとプログラマブルICとの間に位置付けることができる。例えば、
図1において、ホスト論理回路IC122は、複数のプログラマブルIC120と仮想マシン140との間に位置付けることができ、仮想マシンから適切なプログラマブルICまで、およびその逆も同様にデータ通信(例えば、データ)をルーティングするようにマッピングを行う。
【0050】
いくつかの実施形態において、プログラマブルICは、顧客部分と、ホスト部分とを含むことができる。例えば、
図3において、いくつかのホスト論理回路(すなわち、ホスト論理回路ラッパー382およびFPGA間トランスポート380)は、ホストFPGAとの通信を容易にするために、顧客FPGAに含まれる。顧客FPGA314、316は、共有された周辺機器362にアクセスするために、ホストICと通信することができる。ホストICは、各顧客が、共有された周辺機器と関連付けられたリソース(例えば、帯域幅)へのアクセスを有することを確実にするための論理回路を含むことができる。同様に、ホストICは、各顧客が、PCIeエンドポイントへの十分なアクセスを有することを確実にすることができる。
【0051】
図7は、別の実施形態による、マルチテナント環境においてプログラマブルハードウェアを制御するための方法のフローチャートである。プロセスブロック710で、複数のプログラマブルICがホストサーバコンピュータに提供される。例えば、
図1において、プログラマブルIC150は、任意の所望の数のICを含むように示される。プログラマブルICは、典型的に、FPGAであるが、他のプログラマブルICを使用することができる。プログラマブルICは、論理回路ゲートおよび他のハードウェア論理回路を形成するようにプログラムすることを可能にする。プロセスブロック720で、複数の仮想マシンがホストサーバコンピュータ上で起動される。再度
図1に戻ると、任意の数の仮想マシン140をホストサーバコンピュータ上で起動することができる。プロセスブロック730で、ホストICが複数の仮想マシンとプログラマブルICとの間に位置付けられる。ホストICは、マッピング論理回路(例えば、
図2の264を参照されたい)と、管理論理回路(例えば、
図2の266を参照されたい)と、を含むことができる。ホストICはまた、仮想マシンおよびプログラマブルICとそれぞれ通信するためのアップストリームインターフェースおよびダウンストリームインターフェースも含む。プロセスブロック740で、複数の仮想マシンをプログラマブルICにマッピングすることができる。マッピングは、プログラマブルICおよび仮想マシンと関連付けられた適切なアドレス範囲を含む中間ホストICによって行われる。複数のプログラマブルICは、異なる顧客と関連付けることができ、ホストICは、管理機能を行って、プログラマブルICがサンドボックス化されることを確実にすることができる。その結果、ある顧客と関連付けられたプログラマブルICと関連付けられた任意のデータは、別の顧客によって入手することができない。いくつかの実施形態において、ホストICとプログラマブルICとの間の通信は、SerDesポート等のシリアル通信ポートを通して生じさせることができる。他のFPGA間トランスポートインターフェースを使用することができる。いくつかの実施形態において、ホストICは、顧客FPGA上のエンドポイント(
図4の440を参照されたい)と通信するためのルートコンプレックス(
図4の430を参照されたい)を含むことができる。
【0052】
図8は、説明される技術革新を実行することができる適切なコンピューティング環境800の一般的な例を表す。コンピューティング環境800は、本技術革新を多様な汎用または専用コンピューティングシステムで実行することができるので、使用または機能の範囲に関していかなる限定も示唆することを意図しない。例えば、コンピューティング環境800は、様々なコンピューティングデバイス(例えば、デスクトップコンピュータ、ラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータなど)のうちのいずれかとすることができる。
【0053】
図8を参照すると、コンピューティング環境800は、1つ以上の処理ユニット810、815と、メモリ820、825とを含む。
図8において、この基本構成830は、破線内に含まれる。処理ユニット810、815は、コンピュータ実行可能命令を実行する。処理ユニットは、汎用中央処理ユニット(CPU)、特定用途向け集積回路(ASIC)内のプロセッサ、または任意の他のタイプのプロセッサとすることができる。マルチ処理システムでは、複数の処理ユニットがコンピュータ実行可能命令を実行して、処理能力を高める。例えば、
図8は、中央処理ユニット810、ならびにグラフィックス処理ユニットまたは共処理ユニット815を示す。有形メモリ820、825は、処理ユニット(複数可)によってアクセス可能である揮発性メモリ(例えば、レジスタ、キャッシュ、RAM)、不揮発メモリ(例えば、ROM、EEPROM、フラッシュメモリなど)、またはこれら2つのいくつかの組み合わせとすることができる。メモリ820、825は、処理ユニット(複数可)による実行に適したコンピュータ実行可能命令の形態で、本明細書で説明される1つ以上の技術革新を実装するソフトウェア880を記憶する。
【0054】
コンピューティングシステムは、追加的な特徴を有することができる。例えば、コンピューティング環境800は、記憶装置840と、1つ以上の入力デバイス850と、1つ以上の出力デバイス860と、および1つ以上の通信接続870とを含む。バス、コントローラ、またはネットワーク等の相互接続機構(図示せず)は、コンピューティング環境800の構成要素を相互接続する。典型的に、オペレーティングシステムソフトウェア(図示せず)は、コンピューティング環境800内で実行する他のソフトウェアのための動作環境を提供し、コンピューティング環境800の構成要素の動作を協調させる。コンピューティングシステムはまた、本明細書で説明されるプログラマブルICを含む1つ以上のプラグインボード872も含むことができる。
【0055】
有形記憶装置840は、リムーバブルまたは非リムーバブルとすることができ、該記憶装置としては、磁気ディスク、磁気テープもしくはカセット、CD−ROM、DVD、または情報を非一時的な方式で記憶するために使用することができ、また、コンピューティング環境800内でアクセスすることができる任意の他の媒体が挙げられる。記憶装置840は、本明細書で説明される1つ以上の技術革新を実装するソフトウェア880のための命令を記憶する。
【0056】
入力デバイス(複数可)850は、キーボード、マウス、ペン、またはトラックボール等のタッチ入力デバイス、音声入力デバイス、スキャンデバイス、または入力をコンピューティング環境800に提供する別のデバイスとすることができる。出力デバイス(複数可)860は、ディスプレイ、プリンタ、スピーカ、CDライタ、またはコンピューティング環境800からの出力を提供する別のデバイスとすることができる。
【0057】
通信接続(複数可)870は、通信媒体を通じた別のコンピューティングエンティティへの通信を可能にする。通信媒体は、コンピュータ実行可能命令、音声、または、ビデオ入力もしくは出力、または変調されたデータ信号内の他のデータ等の情報を伝達する。変調されたデータ信号は、信号内の情報をエンコードするような様態で設定または変更されたその特性のうちの1つ以上を有する信号である。一例として、また、限定されないが、通信媒体は、電気、光、RF、または他の搬送波を使用することができる。
【0058】
図9は、破線908によって図表的に分離されたソフトウェア部分904およびハードウェア部分906を有するホストサーバコンピュータ902を含む、例示的なコンピューティングシステム900を示すシステム図である。ハードウェア部分906は、一般的に910に他のハードウェアとして示される、1つ以上のCPU、メモリ、記憶デバイスなどを含む。ハードウェア部分906は、一般に920で示される、プログラマブル集積回路(IC)をさらに含むことができる。プログラマブルICは、FPGA、またはコンプレックスプログラマブル論理回路デバイス(CPLD)等の他のタイプのプログラマブル論理回路とすることができる。下でさらに説明されるように、任意の数のプログラマブルIC920を、ホストサーバコンピュータ902内で使用することができる。さらに、プログラマブルIC920は、複数の顧客が互いの存在を知ることなく同じサーバコンピュータ902上で動作しているように、異なる顧客からの論理回路を含むことができる。
【0059】
ハードウェア部分906は、プログラマブルIC920とソフトウェア部分904との間で管理機能、セキュリティ機能、およびマッピング機能を行う、2つ以上の中間ホスト論理回路IC922、923をさらに含む。ホスト論理回路ICはまた、FPGA等のリプログラマブル論理回路、または別様には、ASICもしくはSoC等の非リプログラマブルハードウェアとすることもできる。
【0060】
ハードウェア906の上側のソフトウェア部分904で稼働する層は、ハイパーバイザまたはカーネル層であり、この実施例では、管理ハイパーバイザ930を含むように示される。管理ハイパーバイザ930は、一般に、ハードウェア906にアクセスするために必要とされるデバイスドライバを含むことができる。ソフトウェア部分904は、一般に940で示される、仮想マシンを稼働させるための複数のパーティションを含むことができる。パーティションは、ハイパーバイザによる隔離の論理回路ユニットであり、また、仮想マシンを実行している。各パーティションには、ハードウェア層のメモリ、CPU割り当て、記憶装置などのそれ自体の部分を割り当てることができる。加えて、各パーティションは、仮想マシンおよびそれ自体のゲストオペレーティングシステムを含むことができる。各仮想マシン940は、ハードウェアインターフェース(図示されないが、下でさらに説明される)を通してホスト論理回路IC922、923のうちの1つに通信することができる。ホスト論理回路IC922、923は、プログラマブルIC920が、それらが仮想マシン940と直接通信していると考えるように、通信を適切なプログラマブルIC920にマッピングすることができる。いくつかの実施形態では、ホスト論理回路950の薄い層を、顧客と関連付けられたプログラマブルIC920に含むことができる。マッピングは、アドレスマッピングを通して達成され、一方を他方にリンクするように論理回路アドレスおよび物理アドレスをホストICに記憶することができる。
【0061】
2つのホスト論理回路IC922、923が示されるが、任意の数のホスト論理回路ICを使用することができる。加えて、ホスト論理回路ICがホストサーバコンピュータ902内に示されるが、本明細書で説明される実施形態のいずれかにおいて、1つまたは複数のホスト論理回路ICをホストサーバコンピュータ902の外部に位置付けることができる。そのような一事例では、プログラマブルIC920もまた、ホストサーバコンピュータ902の外部とすることができる。
【0062】
開示される方法のいくつかの動作は、提示の便宜のために特定の連続的な順序で説明されるが、下に記載される特定の言葉によって特定の順序が要求されない限り、この説明の様態は、再配列を含むことを理解されたい。例えば、連続的に説明される動作は、いくつかの事例において、再配列される場合があり、または同時に行われる場合がある。その上、簡潔にするために、添付図面は、開示される方法を他の方法と併せて使用することができる種々の方式を示さない場合がある。
【0063】
開示される方法のいずれかは、1つ以上のコンピュータ可読記憶媒体(例えば、1つ以上の光媒体ディスク、揮発性メモリ構成要素(DRAMまたはSRAM等)、または不揮発性メモリ(フラッシュメモリまたはハードドライブ等))に記憶され、また、コンピュータ(例えば、スマートフォン、またはコンピューティングハードウェアを含む他のモバイルデバイスを含む、任意の市販コンピュータ)上で実行される、コンピュータ実行可能命令のように実施することができる。コンピュータ可読記憶媒体という用語は、信号および搬送波等の通信接続を含まない。開示される技術を、ならびに開示される実施形態の実施中に作成され、使用される任意のデータを実装するためのコンピュータ実行可能命令のいずれかは、1つ以上のコンピュータ可読記憶媒体に記憶することができる。コンピュータ実行可能命令は、例えば、専用ソフトウェアアプリケーション、またはウェブブラウザもしくは他のソフトウェアアプリケーション(リモートコンピューティングアプリケーション等)を介してアクセスまたはダウンロードされるソフトウェアアプリケーションの一部とすることができる。そのようなソフトウェアは、例えば、単一のローカルコンピュータ(例えば、任意の適切な市販のコンピュータ)上で、または1つ以上のネットワークコンピュータを使用して(例えば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク(クラウドコンピューティングネットワーク等)、または他のそのようなネットワークを介して)ネットワーク環境内で実行することができる。
【0064】
明確にするため、ソフトウェアベースの実装形態の特定の選択された態様だけを説明する。当技術分野でよく知られている他の詳細は省略する。例えば、開示される技術は、任意の特定のコンピュータ言語またはプログラムに限定されないことを理解されたい。例えば、開示される技術は、C++、Java(登録商標)、Perl、JavaScript(登録商標)、Adobe Flash、または任意の他の適切なプログラミング言語で記述されたソフトウェアによって実施することができる。同様に、開示される技術は、任意の特定のコンピュータまたは特定のタイプのハードウェアに限定されない。適切なコンピュータおよびハードウェアの特定の詳細は、よく知られており、本開示で詳細に説明する必要はない。
【0065】
また、本明細書で説明される任意の機能は、ソフトウェアの代わりに1つ以上のハードウェア論理回路構成要素によって少なくとも部分的に行うことができることを理解されたい。例えば、限定されないが、使用することができるハードウェア論理回路コンポーネントの例示的なタイプとしては、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップシステム(SOC)、コンプレックスプログラマブル論理回路デバイス(CPLD)などが挙げられる。これらのデバイスのうちのいずれかを、本明細書で説明される実施形態で使用することができる。
【0066】
さらに、(例えば、コンピュータに、開示される方法のうちのいずれかを実行させるためのコンピュータ実行可能命令を備える)ソフトウェアベースの実施形態のいずれかを、適切な通信手段を通してアップロード、ダウンロード、またはリモートアクセスすることができる。そのような適切な通信手段としては、例えば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル(光ファイバーケーブルを含む)、磁気通信、電磁通信(RF、マイクロ波、および赤外線通信を含む)、電子通信、または他のそのような通信手段が挙げられる。
【0067】
本開示の実施形態は、以下の付記を考慮して説明することができる。
1.マルチテナント環境内の装置であって、
ホストサーバコンピュータであって、管理ハイパーバイザ、ならびに少なくとも第1および第2の仮想マシンインスタンスを実行するように構成されたプロセッサを有する、ホストサーバコンピュータと、
ホストサーバコンピュータ内の第1のプログラマブル集積回路(IC)であって、第1の仮想マシンインスタンスと関連付けられたハードウェア論理回路を含むようにプログラム可能である、第1のプログラマブル集積回路と、
ホストサーバコンピュータ内の第2のプログラマブルICであって、第2の仮想マシンインスタンスと関連付けられたハードウェア論理回路を含むようにプログラム可能である、第2のプログラマブル集積回路と、
第1の仮想マシンインスタンスと第1のプログラマブルICとの間の、および第2の仮想マシンインスタンスと第2のプログラマブルICとの間のホストICであって、第1のプログラマブルICを第1の仮想マシンインスタンスにマッピングし、第2のプログラマブルICを第2の仮想マシンインスタンスにマッピングする、ホストICと、を備える、装置。
2.ホストICが、第1および第2の仮想マシンインスタンスと通信するためのインターフェースエンドポイントと、第1および第2のプログラマブルICと通信するためのインターフェースと、を含む、付記1に記載の装置。
3.ホストICが、第1の仮想マシンインスタンスを第1または第2のプログラマブルICのどちらかと関連付けるためのマッピング論理回路を含む、付記1または2のいずれかに記載の装置。
4.第1および第2のプログラマブルICの各々が、その中にプログラムされたサンドボックス化されたハードウェア論理回路を有する、付記1〜3のいずれかに記載の装置。
5.ホストICが、共有された周辺機器を含み、ホストICが、第1および第2のプログラマブルICの各々が使用することができるリソースの量を制御する、付記1〜4のいずれかに記載の装置。
6.ホストICが、ルーティング論理回路を含み、第1および第2のプログラマブルICが、ホストICと通信するためのインターフェースエンドポイントを含む、付記1〜5のいずれかに記載の装置。
7.マルチテナント環境内のプログラマブルハードウェアを制御する方法であって、
マルチテナント環境内のホストサーバコンピュータ上で仮想マシンインスタンスを実行することであって、ホストサーバコンピュータが、複数のプログラマブル集積回路(IC)を含む、ことと、
仮想マシンインスタンスと複数のプログラマブルICとの間に位置付けられた1つ以上のホストICを使用して、複数のプログラマブルICのうちの第1のものを仮想マシンインスタンスにマッピングすることと、を含む、方法。
8.ホストICが、仮想マシンインスタンスと通信するためのインターフェースエンドポイントと、第1のプログラマブルIC内のエンドポイントと通信するためのルーティング論理回路と、を有する、付記7に記載の方法。
9.第1のプログラマブルICが、仮想マシンインスタンスと関連付けられた部分と、ホスト部分と、を含み、ホスト部分が、ホストICと通信するためのインターフェースを含む、付記7または8に記載の方法。
10.ホストICが、シリアルポートを含む共有された周辺機器を含む、付記7〜9のいずれかに記載の方法。
11.ホストサーバコンピュータが、管理ハイパーバイザを含み、方法が、管理ハイパーバイザを使用して仮想マシンインスタンスを起動することと、1つ以上のホストICを構成することと、をさらに含む、付記7〜10のいずれかに記載の方法。
12.複数のプログラマブルICが、フィールドプログラマブルゲートアレイ(FPGA)である、付記7〜11のいずれかに記載の方法。
13.ホストICが、フィールドプログラマブルゲートアレイ(FPGA)である、付記7〜12のいずれかに記載の方法。
14.複数のプログラマブルICが、周辺機器用バスを通ってホストICに結合される、付記7〜14のいずれかに記載の方法。
15.方法であって、
複数のプログラマブル集積回路(IC)をホストサーバコンピュータに提供することと、
ホストサーバコンピュータ上の複数の仮想マシンを起動することと、
複数の仮想マシンとプログラマブルICとの間に位置付けられたホストICを提供することと、
複数の仮想マシンを複数のプログラマブルICにマッピングすることと、を含む、方法。
16.ホストICが、共有されたリソースを含み、ホストICが、共有されたリソースと関連付けられたリソースを複数のプログラマブルICに分散させる、付記15に記載の方法。
17.通信が、プログラマブルIC間でブロックされる、付記15または16に記載の方法。
18.ホストICが、フィールドプログラマブルゲートアレイまたはシステムオンチップ(SoC)である、付記15〜17のいずれかに記載の方法。
19.ホストICが、シリアルポートを通して複数のプログラマブルICと通信する、付記15〜18のいずれかに記載の方法。
20.ホストICが、複数の仮想マシンと通信するためのエンドポイントと、複数のプログラマブルICと通信するためのルートコンプレックスと、を含む、付記15〜20のいずれかに記載の方法。
【0068】
開示される方法、装置、およびシステムは、いかなる形であれ、限定するものと解釈されるべきではない。代わりに、本開示は、単独で、および互いとの種々の組み合わせおよび副次的な組み合わせで、種々の開示された実施形態の全ての新規かつ非自明な特徴および態様を目的とする。開示される方法、装置、およびシステムは、任意の特定の態様または特徴またはそれらの組み合わせに限定されず、開示される実施形態は、任意の1つ以上の特定の利点が存在すること、または問題を解決することを必要としない。
【0069】
開示される発明の原理を適用することができる数多くの可能な実施形態を考慮して、例示される実施形態は、本発明の好適な例に過ぎないものであり、また、本発明の範囲を限定するものとみなすべきではないことを認識されるべきである。むしろ、本発明の範囲は、特許請求の範囲によって定義される。したがって、発明者らは、発明者らの発明として、これらの特許請求の範囲に該当する全てのものを主張する。