(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-10
(45)【発行日】2024-06-18
(54)【発明の名称】SOCおよびFPGAを有するサーバオフロードカード
(51)【国際特許分類】
G06F 9/50 20060101AFI20240611BHJP
G06F 9/455 20180101ALI20240611BHJP
【FI】
G06F9/50 150C
G06F9/455 150
(21)【出願番号】P 2021569031
(86)(22)【出願日】2020-04-16
(86)【国際出願番号】 US2020028603
(87)【国際公開番号】W WO2020236363
(87)【国際公開日】2020-11-26
【審査請求日】2023-04-14
(32)【優先日】2019-05-20
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-03-03
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100118902
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【氏名又は名称】松尾 淳一
(72)【発明者】
【氏名】チオウ,デレク
(72)【発明者】
【氏名】パトナム,アンドリュー
(72)【発明者】
【氏名】ファイアストン,ダニエル
(72)【発明者】
【氏名】ラビアー,ジャック
【審査官】坂東 博司
(56)【参考文献】
【文献】国際公開第2019/083977(WO,A1)
【文献】特表2021-501407(JP,A)
【文献】国際公開第2018/064415(WO,A1)
【文献】特表2019-535092(JP,A)
【文献】特開2012-156796(JP,A)
【文献】特表2015-515798(JP,A)
【文献】特開2018-149755(JP,A)
【文献】特開2017-174301(JP,A)
【文献】米国特許出願公開第2018/0004539(US,A1)
【文献】DANIEL FIRESTONE et al,Azure Accelerated Networking:SmartNICs in Publoc Cloud,Proceedings of the 15th USENIX Symposium on Networked Systems Design and Implementation,USENIX Association,2018年04月09日,51-64,[online],発行日2018年4月9日,[令和5年10月17日検索],インターネット <URL:https://www.usenix.org/sites/default/filies/nsdi18_full_proceedings_interior.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
G06F 9/455
(57)【特許請求の範囲】
【請求項1】
サーバであって、
CPU(中央処理装置)コンプレックスと、
オフロードカードであって、
SoC(システムオンチップ)と、
前記SoCの外部にあり、且つ、前記SoCに連結されたFPGA(フィールドプログラマブルゲートアレイ)と
を含むオフロードカードと、
を備え、
前記CPUコンプレックスが、1つまたは複数の仮想マシン(VM)を実行するように構成され、
前記SoCが、前記1つまたは複数のVMに関連付けられたハイパーバイザの1つまたは複数の第1の機能をソフトウェアで実行するように構成され、
前記FPGAが、前記1つまたは複数のVMに関連付けられた前記ハイパーバイザの1つまたは複数の第2の機能をハードウェアで実行するように構成される、
サーバ。
【請求項2】
請求項1に記載のサーバであって、前記SoCおよび前記FPGAが、前記オフロードカードの内部にあるPCIe(ペリフェラルコンポーネントインターコネクトエクスプレス)インターフェースを介して、および、前記オフロードカードの内部にあるイーサネットインターフェースを介して、互いに通信可能に連結される、サーバ。
【請求項3】
請求項2に記載のサーバであって、前記SoCおよび前記FPGAが、前記オフロードカードの内部にあるJTAG(ジョイントテストアクショングループ)インターフェースを介して、互いに通信可能に連結される、サーバ。
【請求項4】
請求項1に記載のサーバであって、前記オフロードカードが、前記サーバのメインボードにPCIeエッジコネクタインターフェースを介して挿入される、サーバ。
【請求項5】
請求項4に記載のサーバであって、前記SoCが、前記サーバのベースボードマネージメントコントローラ(BMC)に、前記PCIeエッジコネクタインターフェースを通じて通信可能に連結される、サーバ。
【請求項6】
請求項4に記載のサーバであって、前記FPGAが、前記CPUコンプレックスと前記PCIeエッジコネクタインターフェースを通じて通信可能に連結される、サーバ。
【請求項7】
請求項1に記載のサーバであって、前記SoCが、前記オフロードカード上にある1つまたは複数の揮発性メモリモジュールと通信可能に連結され、前記1つまたは複数の揮発性メモリモジュールが、前記SoCが前記1つまたは複数の第1の機能をそこから実行できる作業メモリとして機能する、サーバ。
【請求項8】
請求項1に記載のサーバであって、前記SoCが、前記オフロードカード上にあるフラッシュメモリモジュールと通信可能に連結され、前記フラッシュメモリモジュールが、前記1つまたは複数の第1の機能のためのプログラムコードを格納する、サーバ。
【請求項9】
請求項1に記載のサーバであって、前記FPGAが、前記オフロードカード上にある1つまたは複数の揮発性メモリモジュールと通信可能に連結され、前記1つまたは複数の揮発性メモリモジュールが、前記1つまたは複数の第2の機能を実行する時に前記FPGAのための作業メモリとして機能する、サーバ。
【請求項10】
請求項1に記載のサーバであって、前記FPGAが、前記オフロードカード上にあるフラッシュメモリモジュールと通信可能に連結され、前記フラッシュメモリモジュールが、1つまたは複数の第2の機能を実行するように前記FPGAを構成するための少なくとも1つの構成イメージを格納する、サーバ。
【請求項11】
請求項10に記載のサーバであって、前記フラッシュメモリモジュールが、前記FPGAのための正常動作構成に対応する第1の構成イメージ、および、前記FPGAのためのフェールセーフ動作構成に対応する第2の構成イメージを格納する、サーバ。
【請求項12】
請求項11に記載のサーバであって、前記第1の構成イメージが、前記オフロードカードの電源投入時にデフォルトで前記FPGAに適用される、サーバ。
【請求項13】
請求項12に記載のサーバであって、前記第1の構成イメージを適用している間にエラーが発生した場合、前記第2の構成イメージが、前記FPGAに適用される、サーバ。
【請求項14】
請求項1に記載のサーバであって、前記FPGAが、TOR(トップオブラック)ネットワークスイッチと通信可能に連結された第1の外部ネットワークインターフェース、および、前記サーバのNIC(ネットワークインターフェースカード)と通信可能に連結された第2の外部ネットワークインターフェースを含む、サーバ。
【請求項15】
請求項1に記載のサーバであって、前記SoCが、前記オフロードカード上にあるBIOS(ベーシックインプット/アウトプット)フラッシュ構成要素に、セキュリティチップを介して通信可能に連結され、前記セキュリティチップが、前記BIOSフラッシュ構成要素に格納されたファームウェアの完全性を検証するように構成される、サーバ。
【請求項16】
請求項1に記載のサーバであって、前記1つまたは複数の第1の機能が、ネットワーク制御プレーン機能またはストレージ制御プレーン機能を含む、サーバ。
【請求項17】
請求項1に記載のサーバであって、前記1つまたは複数の第2の機能が、ネットワークデータプレーン機能またはストレージデータプレーン機能を含む、サーバ。
【請求項18】
サーバであって、
1つまたは複数の仮想マシン(VM)を実行するように構成されたCPU(中央処理装置)コンプレックスと、
オフロードカードであって、
前記1つまたは複数のVMに関連付けられたハイパーバイザの1つまたは複数の第1の機能をソフトウェアで実行するための手段と、
前記1つまたは複数のVMに関連付けられた前記ハイパーバイザの1つまたは複数の第2の機能をハードウェアで実行するための手段と、
を含むオフロードカードと
を備えるサーバ。
【請求項19】
方法であって、
サーバのオフロードカード上にあるFPGA(フィールドプログラマブルゲートアレイ)が、前記サーバのNIC(ネットワークインターフェースカード)からネットワークパケットを受け取るステップであって、前記ネットワークパケットが、前記FPGAと前記NICを相互接続するイーサネットインターフェースを介して受け取られる、ステップと、
前記FPGAが、前記ネットワークパケットのヘッダに基づいてフローテーブルへのルックアップをハードウェアで実施するステップと、
マッチするエントリが前記ヘッダのための前記フローテーブル内で見つからなかったと判定すると、前記FPGAが、前記オフロードカード上にあるSoC(システムオンチップ)に前記ネットワークパケットを転送するステップであって、前記ネットワークパケットが、前記FPGAと前記SoCを相互接続するイーサネットインターフェースを介して転送される、ステップと、
前記SoCが、前記ネットワークパケットのためのネクストホップの宛先をソフトウェアで計算するステップと、
前記SoCが、前記ネクストホップの宛先を含む新しいフローエントリで前記フローテーブルをソフトウェアで更新するステップと
を含む方法。
【請求項20】
請求項19に記載の方法であって、マッチするエントリが前記フローテーブル内で見つかったと判定すると、
前記FPGAが、前記マッチするエントリに基づいて前記ネットワークパケットを更新するステップと、
前記FPGAが、前記FPGAの外部ネットワークインターフェースを介して外部ネットワークに前記ネットワークパケットを伝送するステップと、
をさらに含む方法。
【発明の詳細な説明】
【背景技術】
【0001】
[0001]Microsoft AzureおよびAmazon AWSなどのクラウドプラットフォームは、地理的に拡散されたデータセンタの全体にわたって分散された物理サーバの大きい集団(本明細書ではクラウドサーバと呼ばれる)の上で動く。これらのクラウドサーバのかなりの部分が、仮想マシン(VM)のホスティングを可能にするハイパーバイザとして知られる仮想化ソフトウェアレイヤを実装する。数ある中でも、仮想化ソフトウェアレイヤは、クラウドプラットフォームの顧客が購入し、VMを使用して顧客のアプリケーションワークロードを実行するIaaS(サービスとしてのインフラストラクチャ)シナリオを可能にする。
【発明の概要】
【発明が解決しようとする課題】
【0002】
[0002]伝統的に、ハイパーバイザを実装する各クラウドサーバでは、クラウドサーバのCPU(中央処理装置)コアの一定の割合が、ハイパーバイザ用に確保される。この確保は、ハイパーバイザがその機能を実行するのに十分な計算リソースを有することを保証するが、例えば顧客VMによる使用のために利用可能なCPUコアの数も低減させる。規模の点で、これは、顧客とじかに接するクラウドプラットフォームの全般的な計算容量の大幅な低下になる恐れがある。
【課題を解決するための手段】
【0003】
[0003]SoC(システムオンチップ(system-on-chip))およびFPGA(フィールドプログラマブルゲートアレイ(field programmable gate array))を含むオフロードシステムを有する物理サーバが開示される。オフロードシステムの1つの可能な実施形態はカード上にある。実施形態の1つのセットによれば、SoCは、ソフトウェアでの実行に適したサーバのCPUコンプレックスから1つまたは複数のハイパーバイザ機能をオフロードするように構成することができ、FPGAは、ハードウェアでの実行に適したCPUコンプレックスから1つまたは複数のハイパーバイザ機能をオフロードするように構成することができる。
【図面の簡単な説明】
【0004】
【
図1】[0004]いくつかの実施形態による、SoCおよびFPGAを有するオフロードカードを含む物理サーバトポロジを描写する図である。
【
図2】[0005]いくつかの実施形態による、
図1のオフロードカードのためのアーキテクチャを描写する図である。
【
図3】[0006]いくつかの実施形態による、JTAG(ジョイントテストアクショングループ(Joint Test Action Group))多重化装置の実装形態を描写する図である。
【
図4】[0007]いくつかの実施形態による、実例のネットワーク処理フロー図である。
【発明を実施するための形態】
【0005】
[0008]以下の説明では、説明のために、非常に多くの例および詳細が、様々な実施形態を理解するために示されている。それでも、いくつかの実施形態を、これらの詳細の一部がなくても実践できること、または、変更形態もしくはその同等物で実践できることが当業者には明らかであろう。
【0006】
1.全体像
[0009]本開示の実施形態は、SoC(システムオンチップ)およびFPGA(フィールドプログラマブルゲートアレイ)を備えるオフロードカードを用いる物理サーバ設計を対象とする。様々な実施形態では、SoCおよびFPGAは、サーバのCPUコンプレックスによって伝統的に実行されるハイパーバイザ機能を動かすことができ、これにより、これらの機能の処理負担をCPUコンプレックスからオフロードする。例えば、オフロードカードのSoCは、汎用プロセッサの柔軟性(例えばネットワーキングおよびストレージ制御プレーン機能)を必要とするか、汎用プロセッサの柔軟性から利益を得るハイパーバイザ機能を動かすことができるが、オフロードカードのFPGAは、ハードウェア(例えばネットワーキングおよびストレージデータプレーン機能)での実装/アクセラレーションに適したハイパーバイザ機能を動かすことができる。
【0007】
[0010]この全体的なアーキテクチャにより、全てではないがほとんどのハイパーバイザ処理をサーバのCPUコンプレックスからオフロードカードに移すことができ、オフロードカードは、都合のよいことに、CPUコンプレックスがテナント(例えば顧客)VMワークロードを実行することに集中することを可能にする。ハイパーバイザがCPUコンプレックスから完全に立ち退かされるケースでは、テナントコードは、CPUコンプレックス上で「ベアメタル」のように(すなわち介在するいかなるハイパーバイザ仮想化レイヤもない状態で)動かせる可能性がある。
【0008】
[0011]なおさらに、オフロードカード上でのハイパーバイザコード/ロジックの実行は、CPUコンプレックス上のテナントコードの実行から物理的に切り離されるので、このソリューションは、テナントコードを攻撃ベクトルとして使用しようとし得るサイドチャネル攻撃からハイパーバイザを保護する。
【0009】
[0012]さらに、ハードウェア実装に対応可能な一定のハイパーバイザ機能を加速させるためにFPGAを用いることによって、オフロードカードは、構造的柔軟性を同時に維持しつつ、サーバの効率性を改善することができる。例えば、必要ならFPGAは、1つのタイプ/クラスの機能(例えばネットワーキング)の加速から、別のタイプ/クラスの機能(例えばストレージ)の加速にプログラムし直すことができる。これは、ASIC(特定用途向け集積回路)などのハードロジックベースのアクセラレータでは可能ではない。
【0010】
[0013]本開示の前述および他の態様が、以下のセクションでさらに詳細に説明される。
2.サーバトポロジ
[0014]
図1は、本開示の一定の実施形態による、物理サーバ100の高レベルトポロジを示す簡易ブロック図である。実施形態の1つのセットでは、物理サーバ100は、クラウドプラットフォームのインフラストラクチャの一部として導入されたクラウドサーバでよい。これらの実施形態では、物理サーバ100は、クラウドプラットフォームプロバイダによって運用されるデータセンタ内のサーバラックにマウントされてよい。他の実施形態では、物理サーバ100は、例えばスタンドアロンサーバの形で、敷地内の企業IT環境など、他の状況でおよび/または他のフォームファクタを介して、導入されてよい。
【0011】
[0015]背景技術セクションで述べたように、クラウドサーバは仮想化のためにハイパーバイザを実装することが多く、これによりクラウドプラットフォームが、IaaS(サービスとしてのインフラストラクチャ)などのサービスを提供することができる。それでも、ハイパーバイザ(「ホスト」としても知られる)用に、CPUコアを含むこれらのプラットフォームリソースの一部を使用することにより、従来のクラウドサーバは、これらのCPU容量の全てをVMに露出することができず、これによりプラットフォームの効率性を低下させる。
【0012】
[0016]この問題および他の問題に対処するために、物理サーバ100は、SoC104およびFPGA106を備える斬新なオフロードカード102を含む。図示の実施形態では、オフロードカード102は、PCIe(ペリフェラルコンポーネントインターフェースエクスプレス(Peripheral Component Interface Express))ベースの拡張カードとして実装され、したがって、標準PCIe xl6 3.0エッジコネクタインターフェース108を介して物理サーバ100のメインボードとインターフェースする。他の実施形態では、オフロードカード102は、周辺インターフェースの他のいずれかのタイプを使用して実装されてもよい。
【0013】
[0017]図示のように、SoC104は、独自のRAM(ランダムアクセスメモリ(random access memroy))110およびフラッシュメモリ112を有し、オフロードカード102の内部にある少なくともインターフェース(すなわちPCIeインターフェース114およびイーサネットインターフェース116)を介してFPGA106と通信可能に連結される。さらにSoC104は、I2Cインターフェース108およびいくつかの他のチャネル(例えばUSBおよびCOM)を通じて、物理サーバ100のベースボードマネージメントコントローラ(BMC:baseboard management controller)118と通信可能に連結される。
【0014】
[0018]FPGA106も、独自のRAM120およびフラッシュメモリ122を有し、PCIeエッジコネクタインターフェース108を通じて物理サーバ100のCPUコンプレックス124と通信可能に連結される。このCPUコンプレックスは、物理サーバ100のメインCPUコアおよび関連付けられたRAMモジュールを備える。さらにFPGA106は、2つの外部イーサネットインターフェースを含み、これらの一方は、(例えばTOR(トップオブラック)スイッチまたは他のいくつかのネットワークデバイスを介して)外部ネットワーク126に接続し、他方は、物理サーバ100内のNIC(ネットワークインターフェースカード/コントローラ(network interface card/controller))128に接続する。
【0015】
[0019]一般的に言えば、
図1に示されたトポロジは、物理サーバ100のCPUコンプレックス124上で伝統的に動かされるハイパーバイザ機能の一部または全てをオフロードカード102のSoC104およびFPGA106上で代わりに動かし、したがってオフロードカード102のSoC104およびFPGA106にオフロードすることを可能にする。例えば、汎用プロセッサの柔軟性から利益を得る(またはハードウェアで実装するには単に複雑/強力すぎる)ハイパーバイザ機能をSoC104上で動かすことができ、SoC104には1つまたは複数の汎用処理コアが組み込まれている。このような機能の例は、SDN(ソフトウェアデファインドネットワーキング(software-defined networking))制御プレーン機能を含み、SDNは複雑なルーティング計算を必要とし、新しいプロトコルおよび特徴をサポートするために比較的頻繁に更新される必要がある。
【0016】
[0020]その一方で、ハードウェアアクセラレーションに適したハイパーバイザ機能は、FPGA106上の論理ブロックを介して実装することができる。このような機能の例は、SDNデータプレーン機能および(データ複製、重複排除などの)ストレージデータプレーン機能を含み、SDNデータプレーン機能は、制御プレーンの決定に従ってネットワークデータトラフィックを転送することを伴う。
【0017】
[0021]このソリューションにより、従来のサーバ設計を超えるいくつかの長所が達成される。第1に、一定のホスト処理の役目をCPUコンプレックス124から取り除くことによって、ハイパーバイザによって使用される(CPUコンプレックス124内のCPUコアを含む)プラットフォームリソースの量を減少させることができ、(「ゲスト」としても知られる)VMが利用可能なプラットフォーム容量を増加させる。これは、サーバ能力のあらゆる漸進的向上が、規模の点で重大なインパクトを与える恐れがあるパブリッククラウドプラットフォームにおいて特に有益である。いくつかの実施形態では、ハイパーバイザは、CPUコンプレックス124から全面的に立ち退かされ、オフロードカード102に移されてもよく、このケースでは、CPUコンプレックス124は最低限のハイパーバイザを動かすことができるか(CPUコンプレックス124は一定のレジスタにアクセスすることなど、CPUコンプレックス自体でしか動かせない問題を処理する)、またはハイパーバイザが全くなく、CPUコンプレックス124の計算能力の残りをゲストワークロードに充てることができる。
【0018】
[0022]第2に、SoC104(非ハードウェアアクセラレーション機能を扱う)と、FPGA106(ハードウェアアクセラレーション機能を扱う)との両方をオフロードカード102上に実装し、これら2つをしっかりと連結することによって、SoC104上で動くハイパーバイザコードがFPGA106に実装されたロジックと相互作用しやすくなり、逆もまた同様である。オフロードカード102上にハードウェアアクセラレータを単に含む代替実装形態を有することができるが、これらの実装形態は、ハードウェアアクセラレータの活動をサーバのメインCPUと正しく協調させるためのデータフローを必要とする。さらにこれらの代替実装形態は、「ベアメタル」プラットフォームをサポートしなくてよく、機能の大部分としてオフロードしなくてよい。
【0019】
[0023]第3に、オフロードカード102上で動くホストコードは、CPUコンプレックス124上で動くゲストコードから物理的に切り離されるので、悪意のエンティティがVMを介してハイパーバイザを攻撃するのが困難になる。これは、現代のCPUアーキテクチャにおける一定のサイドチャネル脆弱性の最近の発見の観点から特に適切である。これらの既知の脆弱性にはパッチを当てることができるが、他の同様の脆弱性が将来見つかる可能性がある。
【0020】
[0024]第4に、ハードウェアアクセラレーションのためにASICではなくFPGAを使用することによって、FPGAをプログラムし直すことによって改善される種々のユースケースまたは同じユースケースのためにオフロードカード102を簡単に再利用することができ、必要ならFPGAのロジックを更新することができる。これは、既に現場にある多くのカードを引き抜き、置き替えることが望ましくないことがある大規模な導入に有利である。
【0021】
[0025]
図1の物理サーバ100について示された特定のトポロジは例証であり、様々な変更形態が可能であることを理解されたい。例えば、SoC104およびFPGA106は、周辺機器(例えばPCIe)インターフェースを介して物理サーバのメインボードとインターフェースする拡張カード(すなわちオフロードカード102)上に実装されるものとして示されているが、いくつかの実施形態では、代替のオフロードアーキテクチャが使用されてもよい。特定の実施形態では、SoC104および/またはFPGA106の1つまたは複数は、サーバのメインボードに直接実装されてもよい。
【0022】
[0026]別の例として、NIC128がスタンドアロンの構成要素として描写されているが、いくつかの実施形態では、NIC128の機能は、FPGA106内など、
図1に示された1つまたは複数の他の構成要素に組み込まれてもよい。当業者は、他の変形形態、変更形態、および代替形態を認識するはずである。
3.オフロードカードアーキテクチャ
[0027]
図2は、いくつかの実施形態による
図1のオフロードカード102のアーキテクチャに関するさらなる詳細を提示する概略
図200である。次に本アーキテクチャの様々な態様が下記で論じられる。
3.1 SoC
[0028]SoC104は、1つまたは複数の汎用処理コア、(メモリ、ストレージ、および周辺機器のための)インターフェース、ならびにNICを含む、いくつかの既存のシステムオンチップ設計のいずれか1つを使用して実装することができる。特定の実施形態では、SoC104は、ARMマイクロプロセッサアーキテクチャに基づく汎用処理コアを組み込むことができる。}
[0029]図示のように、SoC104は、3つの別個のインターフェースを介してFPGA106と通信可能に連結され、このインターフェースは、下記のセクション3.2で論じられる。さらにSoCは、(1)メモリインターフェース204を介して
図1のRAM110に対応する1つまたは複数のDRAM(ダイナミックRAM)モジュール202に、(2)ストレージインターフェース208を介して
図1のフラッシュメモリ112に対応するeMMC(組込型マルチメディアカード:embedded multimedia card)デバイス206に、(3)SPI(シリアルペリフェラルインターフェース:Serial Peripheral Interface)インターフェース212および介在するセキュリティチップ214を介してBIOSフラッシュメモリ構成要素210に、ならびに、(4)(FPGA106およびPCIeエッジコネクタインターフェース108にも接続する)I2Cバス222を介して(EEPROM216、ホットスワップコントローラ218、および温度センサ220などの)いくつかのI2C(集積デバイス間)デバイスに、接続される。
【0023】
[0030](1)に関して、SoC104は、物理サーバ100のCPUコンプレックス124からオフロードされたハイパーバイザコードを含むプログラムコードを動かすためのSoC104の作業メモリとして、DRAMモジュール202を使用することができる。DRAMモジュール202の固有の数および容量、ならびにメモリインターフェース204の仕様は、実装形態に応じて変化させることができる。特定の実施形態では、DRAMモジュール202は、シングル1024M(メガビット)x64ビット+ECC(エラー訂正コード)メモリバンクとして編成された8GB(ギガバイト)のDDR4 DRAMを備えることができ、メモリインターフェース204は、シングルDDR4-2400メモリチャネルとして構成することができる。
【0024】
[0031](2)に関して、SoC104は、CPUコンプレックス124からオフロードされたハイパーバイザコードを含む、SoC上で実行されることになるプログラムコードを格納およびブートするため、ならびに、FPGA106に適用されることになるFPGA構成イメージを格納するための非一時的ストレージ媒体として、eMMCデバイス204を使用することができる。
【0025】
[0032](3)に関して、BIOSフラッシュメモリ構成要素210は、SoC104のためのシステムファームウェアを保持することができ、セキュリティチップ214は、数ある中でも、このシステムファームウェアが、攻撃者によって意図的または偶然に修正されることも破損させられることもないことを保証することができる。
【0026】
[0033](4)に関して、I2Cデバイス216、218、および220は、オフロードカード102に関する様々な管理情報をBMC118に提供することができる。これらの情報は、動作温度データ、製造情報、および電力消費量データなどの情報を含むことができる。
【0027】
[0034]上記に加えて、SoC104は、外部ヘッダ228、230、および232へのUSB(ユニバーサルシリアルバス)、COM、およびJTAG(ジョイントテストアクショングループ)インターフェース224、225、および226をそれぞれ含み、これらは、デバッグまたは管理のためにSoC104をBMC118または外部デバイスと接続するために使用することができる。BMC118によってPCIeエッジコネクタインターフェース108を通じてSoC104に送ることができるパワースロットル信号234もある。
3.2 SoCとFPGAとの間のインターフェース
[0035]既に前で述べたように、SoC104は、
図2の3つの内部のチップ間(chip-to-chip)インターフェース(PCIeインターフェース236、イーサネットインターフェース238、およびJTAGインターフェース240)を介してFPGA106と通信可能に連結される。様々な実施形態では、PCIeインターフェース236は、制御能力とデータ転送/交換能力の両方を提供する。制御能力については、SoC104は、PCIeインターフェース236(または代替としてJTAGインターフェース)を使用して、FPGA106を管理および更新することができる。例えば、SoC104は、RAM110からFPGA106に転送されたFPGA構成イメージが正しいことを確認することができ、このインターフェースを使用してFPGA上またはFPGAのフラッシュメモリ122内のイメージを更新することができる。データ能力については、PCIeインターフェース236は、SoC104上で動くプログラムコードがFPGA104にデータを送ること、およびFPGA104からデータを受け取ることを可能にすることができる。これは、例えばPCIeを介してデータを交換するように既に書かれているハイパーバイザコードに有用であり、なぜなら、SoC104上での実行(またはFPGA106での実装)のために、このようなコードを比較的少ない変更で移植することができるからである。特定の実施形態では、PCIeインターフェース236は、8つのPCI3.0レーンを有することができる(すなわちPCI3.0 8xインターフェースに対応させることができる)。他の実施形態では、4、12、16など、他の任意の数のPCIレーンがサポートされ得る。
【0028】
[0036]イーサネットインターフェース238は、ネットワークパケットの形のデータをSoC104およびFPGA106が交換することを可能にする。これは、例えばネットワークパケットを介してデータを交換するように既に書かれているハイパーバイザコードに有用であり、なぜなら、SoC104上での実行(またはFPGA106上での実装)のために、このようなコードを比較的少ない変更で移植することができるからである。例えば、ネットワークフローベースの転送がFPGA106上のハードウェアで実装され、ネットワークフローのためのルートを決定するためのネットワーク制御プレーンがSoC104上のソフトウェアで実装されるシナリオを考察する。このケースでは、フローテーブルの例外およびルールをネットワークパケットの形で、FPGA106とSoC104との間で通信することができる。特定の実施形態では、イーサネットインターフェース238は、25G(ギガビット)イーサネットをサポートすることができる。
【0029】
[0037]JTAGインターフェース240は、SoC104が、低レベルテスト(例えばデバッグ)およびプログラミングのためにFPGA106と通信するための通路を提供する。いくつかの実施形態では、外部ヘッダ232を介して接続された外部プログラマデバイスがインターフェース240を駆動させることを可能にするJTAG多重化装置を、SoC104とFPGA106との間のJTAG経路に挿入することができる。これらの実施形態では、外部プログラマデバイスからの「現在」の信号が、JTAGインターフェース240の信号経路をSoC104からデバイスにスイッチする。これは、最初のビットストリームをロードするときの最初のオフロードカードの立ち上げ(bring-up)に有用であり、SoCからFPGAへのJTAG経路が用意されていないときのFPGAアプリケーション開発に有用である。
図3は、いくつかの実施形態によるJTAG多重化装置302を含む本アーキテクチャの実例の
図300を描写する。
3.3 FPGA
[0038]FPGA106は、いくつかの既存のFPGAチップのいずれか1つを使用して実装することができる。特定の実施形態では、FPGA106は、一定の最低限の数のプログラム可能論理素子(例えば1000K個の素子)および一定の最低限のトランシーバ/FPGAファブリックスピードグレード(例えばグレード2)をサポートする既存のFPGAチップを使用して実装することができる。
図2に示されているように、FPGA106は、I2Cバス222と通信可能に連結され、上で論じたインターフェース236~240を介してSoC104と通信可能に連結される。さらにFPGA106は、(1)内部PCIeインターフェース242を介してPCIeエッジコネクタインターフェース108に、(2)メモリインターフェース246を介して
図1のRAM120に対応する1つまたは複数のDRAMモジュール244に、(3)ストレージインターフェース249を介して
図1のフラッシュメモリ122に対応するQSPI(クアッドシリアルペリフェラルインターフェース(Quad Serial Peripheral Interface))フラッシュメモリモジュール248に、ならびに(4)イーサネットインターフェース254および256を介して2つのネットワークトランシーバモジュール250および252に、それぞれ接続される。
【0030】
[0039](1)に関して、内部PCIeインターフェース242は、CPUコンプレックス124、および(例えばNIC128を含む)物理サーバ100にインストールされた他のPCIeデバイスと、FPGA106が通信することを可能にする。特定の実施形態では、PCIeインターフェース242は、PCIe3.0 xl6インターフェースでよい。
【0031】
[0040](2)に関して、FPGA106は、CPUコンプレックス124からオフロードされたハイパーバイザロジックを含む、デバイスにプログラムされたロジックを実行するときの、FPGA106の作業メモリとしてDRAMモジュール244を使用することができる。DRAMモジュール244の固有の数および容量、ならびにメモリインターフェース246の仕様は、実装形態に応じて変化させることができる。特定の実施形態では、DRAMモジュール202は、2つの4GBバンクの512Mx64ビット+ECCとして編成された8GB(ギガバイト)のDDR4 DRAMを備えることができ、メモリインターフェース246は、デュアルDDR4-2400メモリチャネルとして構成することができる。
【0032】
[0041](3)に関して、QSPIフラッシュメモリモジュール248は、FPGA106の指定の機能を実施するようにFPGA106自体を構成するために、電源投入時にFPGA106がロードできる1つまたは複数のFPGA構成イメージを保持することができる。いくつかの実施形態では、QSPIフラッシュメモリモジュール248は、下記のセクション3.4に記述された少なくとも3つの別個のイメージを保持することができる。フラッシュメモリからの構成の他に、FPGA106は、外部JTAGプログラマデバイスを介した構成、JTAGインターフェース240を介してSoC104によって送られたJTAGコマンド、PCIeを介したCvP(プロトコルを介した構成(Configuration via Protocol))、およびPCIeを介した部分再構成もサポートすることができる。
【0033】
[0042](4)に関して、ネットワークトランシーバモジュール250は、FPGA106が、外部ネットワーク126から入って来るネットワークトラフィックを受け取ること、および、外部ネットワーク126に出て行くネットワークトラフィックを伝送することを可能にする。さらに、ネットワークトランシーバモジュール252は、FPGA106がネットワークトラフィックをNIC128と交換することを可能にする。これは、FPGA106がモジュール252を介してNIC128から出て行くネットワークパケットを受け取り、ネットワークパケットを適切に処理/変換し、モジュール250を介して外部ネットワーク126にネットワークパケットを送出することができるので、FPGA106がネットワークプレーン機能を実装するシナリオに有用である。逆に、FPGA106は、モジュール250を介して外部ネットワーク126から入って来るネットワークパケットを受け取り、ネットワークパケットを適切に処理/変換し、モジュール252を介してNIC128にネットワークパケットを送ることができる(この時点でネットワークパケットを正しい宛先VMに通信することができる)。このようにネットワークデータプレーンアクセラレーションのためにFPGA106を活用する実例のネットワークデータフローが、下記のセクション4で論じられる。特定の実施形態では、ネットワークトランシーバモジュール250および252はQSFP28光モジュールであることが可能であり、イーサネットインターフェース254および256は100Gイーサネットをサポートすることができる。
3.4 FPGAフラッシュ構成の詳細
[0043]実施形態の1つのセットでは、QSPIフラッシュメモリモジュール248は、FPGA106のための最低限の3つの別個の構成イメージ(ゴールデンイメージ、フェールセーフイメージ、およびユーザアプリケーションイメージ)を格納することができる。ゴールデンイメージは、最初の製造時に工場試験され、FPGA106のための正常な意図する機能を備える。フェールセーフイメージは工場でプログラムされ、製造後は決して上書きされない。様々な実施形態では、このフェールセーフイメージは、電源投入時にオフロードカード102によって要求される機能の最小限のセットを収め、FPGA106のネットワークインターフェースは、FPGAによるいかなる中間処理もないインターフェース間を全てのトラフィックが直接通過する迂回モードを強制される。最後に、ユーザアプリケーションイメージは、ユーザ/顧客によって定義されたイメージである。
【0034】
[0044]オフロードカード102が電源投入された時、デフォルトでゴールデンイメージは、QSPIフラッシュメモリモジュール248からロードされ、FPGA106の構造を構成するためにFPGA106に適用されることになる。この電源投入処理に伴う何らかのエラーがある場合(またはサーバ実行時間中に問題が見つかった場合)、ゴールデンイメージの代わりにフェールセーフイメージをロードするためにカードをリブートすることができる。
4 実例のネットワーク処理ワークフロー
[0045]前述のオフロードカードアーキテクチャを考慮に入れて、
図4は、いくつかの実施形態による物理サーバ100によって実装され得る実例のネットワーク処理ワークフローのフローチャート400を描写する。フローチャート400は、オフロードカード106のFPGA106が、SoC104上で動くネットワーク制御プレーンによって決定されたネットワークフローを備えるフローテーブルを維持すること、およびフローテーブルに従ってデータパケットを転送することを行うように構成されると仮定する。
【0035】
[0046]ブロック402でスタートし、物理サーバ100のNIC128は、SR-IOV(シングルルートIO仮想化)インターフェースを、サーバ100上で動くVMに提示することができる。このSR-IOVインターフェース(仮想機能と呼ばれる)は、ハイパーバイザを伴わずにVMがNIC128と直接通信することを可能にする。
【0036】
[0047]ブロック404において、VMは、リモートの宛先に伝送されることになるネットワークパケットのためのデータペイロードを作り出すことができ、これをNIC128に通知することができる。これに応答して、NIC128は、VMのゲストメモリ空間からデータペイロードを読み込むこと(ブロック406)、数ある中でも、VMのIPアドレス、および意図される宛先のIPアドレスを識別するヘッダを伴う1つまたは複数のネットワークパケットにデータペイロードを組み立てること(ブロック408)、ならびに、FPGA106のネットワークトランシーバモジュール252に接続されたNIC128の出口ポートからネットワークパケットを出力すること(ブロック410)を行うことができる。
【0037】
[0048]ブロック412および414において、FPGA106はネットワークパケットを受け取り、フローテーブルへのネットワークパケットの5-タプル(ソースIPアドレス、ソースポート、宛先IPアドレス、宛先ポート、プロトコル)のルックアップを実施するために、FPGA106のネットワークデータプレーンロジックを適用することができる。マッチするエントリがテーブル内で見つかった場合(ブロック416)、FPGA106は、エントリ内でネットワークパケットのためのネクストホップの宛先を識別すること(ブロック418)、パケットのヘッダを更新すること(ブロック420)、ネットワークトランシーバモジュール250から外部ネットワーク126にパケットを送ること(ブロック422)を行うことができ、これによりワークフローを終える。
【0038】
[0049]その一方で、ブロック416において、マッチするエントリがテーブル内で見つからなかった場合(これがフローにおける第1のパケットであることを示す)、FPGA106は、内部イーサネットインターフェース238を介してネットワークパケットをSoC104に送ることができる(ブロック424)。SoC104上で動くネットワーク制御プレーン構成要素は、次に、パケットのためのネクストホップの宛先を計算し、インターフェース238を介してパケットのネットワークフローのための新しいエントリをFPGAのフローテーブルに追加することができる(ブロック426)。この新しいエントリを使用して、FPGA106はブロック420および422を実行することができ、ワークフローを終えることができる。
【0039】
[0050]上記の説明は、本開示の様々な実施形態を、これらの実施形態の態様がどのように実装され得るかについての例と共に示す。上記の例および実施形態は唯一の実施形態であると見なされるべきではなく、以下の特許請求の範囲によって定義されるような本開示の柔軟性および長所を示すために提示される。例えば、いくつかの実施形態が特定の処理フローおよびステップについて説明されてきたが、本開示の範囲が、説明されたフローおよびステップに厳密に限定されるわけではないことが当業者には明らかなはずである。連続的なものと説明されたステップは同時に実行されてもよく、ステップの順序は変化してもよく、ステップは修正、結合、追加、または省略されてもよい。別の例として、いくつかの実施形態がハードウェアとソフトウェアの特定の組合せを使用して説明されてきたが、ハードウェアとソフトウェアの他の組合せが可能であること、および、ソフトウェアで実装されるものとして説明された特定の動作をハードウェアでも実装することができ、逆もまた同様であることを認識するはずである。
【0040】
[0051]したがって、本明細書および図面は制限的な意味ではなく、例証的なものとみなされるべきである。他の配置、実施形態、実装形態、および同等物が当業者には明らかなはずであり、以下の特許請求の範囲において示されるような本開示の趣旨および範囲から逸脱することなく採用されてもよい。