IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エーティーアイ・テクノロジーズ・ユーエルシーの特許一覧

特表2022-538976プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有
<>
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図1
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図2
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図3
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図4
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図5
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図6
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図7
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図8
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図9
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図10
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図11
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図12
  • 特表-プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-09-07
(54)【発明の名称】プロセシングユニット上の仮想化環境内でのマルチメディア物理機能の共有
(51)【国際特許分類】
   G06F 9/455 20060101AFI20220831BHJP
【FI】
G06F9/455 150
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021573415
(86)(22)【出願日】2020-06-25
(85)【翻訳文提出日】2022-02-07
(86)【国際出願番号】 IB2020056031
(87)【国際公開番号】W WO2020261180
(87)【国際公開日】2020-12-30
(31)【優先権主張番号】16/453,664
(32)【優先日】2019-06-26
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ブランコ コバチェビッチ
(57)【要約】
プロセシングユニットは、ハイパーバイザ及びゲスト仮想マシン(VM)を実行するように構成されたカーネルモードユニットと、レジスタのセットと、を含む。また、プロセシングユニットは、物理機能を実装するように構成された固定機能ハードウェアブロックを含む。物理機能に対応する仮想機能は、ゲストVMに公開される。レジスタのセットのサブセットは、仮想機能に関連付けられた情報を記憶するよう割り当てられ、固定機能ハードウェアブロックは、対応するサブセットに記憶された情報に基づいて、何れかのゲストVMに対して何れかの仮想機能を実行する。各々のサブセットは、サブセットに関連付けられた仮想機能によって影響されるフレームを記憶するためのフレームバッファと、仮想機能の動作状態を定義するためのコンテキストレジスタと、仮想機能が実行のためにスケジューリングされる準備ができたことをシグナリングするためのドアベルレジスタと、を含む。
【選択図】図9
【特許請求の範囲】
【請求項1】
プロセシングユニットであって、
ハイパーバイザ及びゲスト仮想マシン(VM)を実行するように構成されたカーネルモードユニットと、
物理機能を実装するように構成された固定機能ハードウェアブロックであって、前記物理機能に対応する仮想機能は、前記ゲストVMに公開される、固定機能ハードウェアブロックと、
レジスタのセットであって、前記レジスタのセットのサブセットは、前記仮想機能に関連付けられた情報を記憶するように割り当てられており、前記固定機能ハードウェアブロックは、対応するサブセットに記憶された前記情報に基づいて、何れかのゲストVMに対して何れかの仮想機能を実行する、レジスタのセットと、を備える、
プロセシングユニット。
【請求項2】
前記レジスタのセットは、前記仮想機能に割り当てられた最大量の空間に対応するいくつかのサブセットに区画化される、
請求項1のプロセシングユニット。
【請求項3】
前記レジスタのセットは、前記仮想機能に割り当てられた最小量の空間に対応するいくつかのサブセットに最初に区画化され、
前記サブセットの数は、前記仮想機能の特性に基づいて後に修正される、
請求項1のプロセシングユニット。
【請求項4】
前記レジスタのセットの各々のサブセットは、前記サブセットに関連付けられた仮想機能によって影響されるフレームを記憶するためのフレームバッファと、前記仮想機能の動作状態を定義するためのコンテキストレジスタと、前記仮想機能が実行のためにスケジューリングされる準備ができたことをシグナリングするためのドアベルと、を含む、
請求項1~3の何れかのプロセシングユニット。
【請求項5】
前記ゲストVMのうち第1のゲストVMからのシグナリングに応じて、第1の時間周期内に前記仮想機能のうち第1の仮想機能を実行するように前記第1のゲストVMをスケジューリングするように構成されたスケジューラを更に備える、
請求項4のプロセシングユニット。
【請求項6】
前記ハイパーバイザは、前記第1の時間周期の間に前記レジスタのセットの第1のサブセットへの前記第1のゲストVMのアクセスを許可し、
前記ハイパーバイザは、前記第1の時間周期の間に、スケジューリングされていないゲストVMによる前記レジスタのセットへのアクセスを拒否する、
請求項5のプロセシングユニット。
【請求項7】
前記固定機能ハードウェアブロックは、前記レジスタのセットの前記第1のサブセット内の第1のコンテキストレジスタに記憶された情報に基づいて、前記第1の仮想機能を実行するように構成されている、
請求項6のプロセシングユニット。
【請求項8】
前記第1の仮想機能を実装するために使用されるマルチメディア機能のユーザモードドライバ及びファームウェアイメージのうち少なくとも1つは、前記固定機能ハードウェアブロックにインストールされる、
請求項7のプロセシングユニット。
【請求項9】
前記第1のゲストVMは、前記第1のゲストVMが実行のためにスケジューリングされる準備ができたことをシグナリングするように、前記第1のサブセット内のドアベルレジスタに情報を書き込む、
請求項7のプロセシングユニット。
【請求項10】
前記第1のゲストVMは、前記ゲストVMに関連付けられた優先度と、スケジューリングされる準備ができた他のゲストVMに関連付けられた他の優先度と、に基づいてスケジューリングされる、
請求項9のプロセシングユニット。
【請求項11】
前記第1のゲストVMは、前記第1の時間周期の間、前記第1の仮想機能を使用して、前記第1のサブセット内のフレームバッファに記憶されたフレームに対してグラフィックレンダリングを実行する、
請求項9のプロセシングユニット。
【請求項12】
前記第1のゲストVMは、前記第1の時間周期の間に実行を完了したことに応じて、前記ハイパーバイザに通知し、
前記第1のサブセット内の前記ドアベルレジスタは、前記第1の時間周期の間に実行を完了したことに応じてクリアされる、
請求項11のプロセシングユニット。
【請求項13】
方法であって、
ハイパーバイザにおいて、プロセシングユニットにおいて実行される第1のゲスト仮想マシン(VM)から、前記プロセシングユニット内の固定機能ハードウェアブロックに実装された物理機能に対応する第1の仮想機能にアクセスする要求を受信することと、
前記ハイパーバイザから前記第1のゲストVMに、前記プロセシングユニット内のレジスタのセットの第1のサブセットへのアクセスを許可することであって、前記第1のサブセットは、前記第1の仮想機能に関連付けられた情報を記憶する、ことと、
前記第1のサブセットに記憶された前記情報に基づいて、前記第1のゲストVMに対して前記第1の仮想機能を実行するように前記固定機能ハードウェアブロックを構成することと、
前記第1のゲストVMを使用して、前記第1の仮想機能を実装するように構成された前記固定機能ハードウェアブロックを使用して、前記第1のサブセットに記憶されたフレームに対してグラフィックレンダリングを実行することと、を含む、
方法。
【請求項14】
前記レジスタのセットを、前記仮想機能に割り当てられた最大量の空間に対応するいくつかのサブセットに区画化することを更に含む、
請求項13の方法。
【請求項15】
前記レジスタのセットを、前記仮想機能に割り当てられた最小量の空間に対応するいくつかのサブセットに区画化することと、
前記仮想機能の特性に基づいて、前記サブセットの数を修正することと、を更に含む、
請求項13の方法。
【請求項16】
前記レジスタのセットの前記第1のサブセットは、前記第1の仮想機能によって影響される前記フレームを記憶するためのフレームバッファと、前記仮想機能の動作状態を定義するためのコンテキストレジスタと、前記仮想機能が実行のためにスケジューリングされる準備ができたことをシグナリングするためのドアベルレジスタと、を含む、
請求項13~15の何れかの方法。
【請求項17】
前記第1のゲストVMからのシグナリングに応じて、第1の時間周期内に前記第1の仮想機能を実行するように第1のゲストVMをスケジューリングすることを更に含む、
請求項16の方法。
【請求項18】
前記ハイパーバイザから、前記第1の時間周期の間に前記レジスタのセットの前記第1のサブセットへの前記第1のゲストVMのアクセスを許可することを更に含み、
前記ハイパーバイザは、前記第1の時間周期の間に、スケジューリングされていないゲストVMによる前記レジスタのセットへのアクセスを拒否する、
請求項17の方法。
【請求項19】
前記第1の仮想機能を構成することは、前記固定機能ハードウェアブロックに前記第1の仮想機能を実装するために使用されるマルチメディア機能のユーザモードドライバ及びファームウェアイメージのうち少なくとも1つをインストールすることを含む、
請求項18の方法。
【請求項20】
前記第1のゲストVMから、前記第1のゲストVMが実行のためにスケジューリングされる準備ができたことをシグナリングするように、前記第1のサブセット内の前記ドアベルレジスタに情報を書き込むことを更に含む、
請求項18の方法。
【請求項21】
前記第1のゲストVMをスケジューリングすることは、前記ドアベルレジスタから前記情報を読み込んだことに応じて、前記第1のゲストVMをスケジューリングすることを含む、
請求項20の方法。
【請求項22】
前記第1のゲストVMをスケジューリングすることは、前記ゲストVMに関連付けられた優先度と、スケジューリングされる準備ができた他のゲストVMに関連付けられた他の優先度と、に基づいて、前記第1のゲストVMをスケジューリングすることを含む、
請求項21の方法。
【請求項23】
前記フレームに対して前記グラフィックレンダリングを実行することは、前記第1の時間周期の間、前記第1の仮想機能を使用して前記第1のサブセット内のフレームバッファに記憶されたフレームに対してグラフィックレンダリングを実行することを含む、
請求項21の方法。
【請求項24】
前記第1のゲストVMは、前記第1の時間周期の間に実行を完了したことに応じて、別のゲストVMに対して別の仮想機能をロードすることができることを前記ハイパーバイザに通知し、
前記第1のサブセット内の前記ドアベルレジスタは、前記第1の時間周期の間に実行を完了したことに応じてクリアされる、
請求項21の方法。
【請求項25】
方法であって、
プロセシングユニット上で実行される第1のゲスト仮想マシン(VM)を使用して、前記プロセシングユニットに実装されたレジスタのセットの第1のサブセットに記憶されたフレームに対してグラフィックレンダリングを実行することであって、前記グラフィックレンダリングは、前記第1のサブセットに記憶された第1のコンテキスト情報に基づいて、前記第1の仮想機能を実装するように構成された固定機能ハードウェアブロックに実装された物理機能に対応する第1の仮想機能を使用して実行される、ことと、
ハイパーバイザにおいて、前記物理機能に対応する第2の仮想機能にアクセスするための第2のゲストVMからの要求を検出することと、
前記ハイパーバイザにおいて、前記要求に応じて、前記第2の仮想機能を実行するように前記固定機能ハードウェアブロックを構成するワールドスイッチを実行することと、を含む、
方法。
【請求項26】
前記第2のゲストVMは、前記第2のゲストVMがスケジューリングされる準備ができたことを示すように、前記レジスタのセットの第2のサブセット内のドアベルレジスタに情報を書き込み、
前記要求を検出することは、前記ドアベルレジスタから前記情報を読み込むことを含む、
請求項25の方法。
【請求項27】
前記要求を検出したことに応じて、スケジューリングされた時間に開始する時間周期の間、前記第2のゲストVMを実行のためにスケジューリングすることを更に含む、
請求項26の方法。
【請求項28】
前記時間周期の間、前記第2のゲストVMを実行のためにスケジューリングすることは、前記時間周期の間に前記レジスタのセットへの前記第2のゲストVMの排他的アクセスを許可することを含む、
請求項27の方法。
【請求項29】
前記ワールドスイッチを実行することは、前記スケジューリングされた時間に前記ワールドスイッチを実行することを含む、
請求項27の方法。
【請求項30】
前記ワールドスイッチを実行することは、前記レジスタのセットの前記第2のサブセットに記憶された第2のコンテキスト情報に基づいて、前記固定機能ハードウェアブロックを構成することを含む、
請求項29の方法。
【請求項31】
前記固定機能ハードウェアブロックを構成することは、前記第2の仮想機能を実装するために使用されるマルチメディア機能のユーザモードドライバ及びファームウェアイメージのうち少なくとも1つをインストールすることを含む、
請求項30の方法。
【請求項32】
前記第2のゲストVMを使用して、前記第2の仮想機能を使用して前記レジスタのセットの前記第2のサブセットに記憶されたフレームに対してグラフィックレンダリングを実行することを更に含む、
請求項30の方法。
【発明の詳細な説明】
【背景技術】
【0001】
従来のプロセシングシステムは、セントラルプロセシングユニット(CPU)と、音声アプリケーション、ビデオアプリケーション及びグラフィックアプリケーションを実行するグラフィックプロセシングユニット(GPU)と、を含む。いくつかのケースでは、CPU及びGPUは、アクセラレーテッドプロセシングユニット(APU)に統合される。マルチメディアアプリケーションは、プログラムにグループ化されたマイクロプロセッサ命令の静的なプログラミングシーケンスとして、又は、アプリケーションのライフタイムの間にマルチメディアアプリケーションに割り当てられたリソースのセットを有するプロセス(コンテナ)として表現される。例えば、Windows(登録商標)プロセスは、プライベートの仮想アドレス空間、実行可能プログラム、様々なシステムリソースをマッピング及び利用するハンドルのセット(セマフォ、同期オブジェクト、プロセス内のスレッドにアクセス可能なファイル等)、セキュリティコンテキスト(ユーザ識別、特権、アクセス属性、ユーザアカウント制御フラグ、セッション等から構成される)、クライアントアプリケーションを一意に識別するプロセス識別子、及び、実行の1つ以上のスレッドから構成される。オペレーティングシステム(OS)も、マルチメディアをサポートし、例えば、OSは、特定のコンテナにカプセル化されたマルチメディアファイルを開くことができる。マルチメディアコンテナの例は、.mov、.mp4及び.tsを含む。OSは、音声コンテナ又はビデオコンテナを特定し、コンテンツを取り出し、CPU又は利用可能なマルチメディアアクセラレータ上でソフトウェア内のコンテンツを復号し、コンテンツをレンダリングし、例えば、アルファブレンドされたグラフィック又は色分けされたグラフィックとして、ディスプレイ上でレンダリングされたコンテンツを提示する。いくつかのケースでは、CPUは、GPUへのドローコールを発行することによってグラフィック処理を開始する。ドローコールは、フレーム内のオブジェクト(又は、オブジェクトの一部)をレンダリングすることをGPUに指示するようCPUによって生成され、GPUに送信されるコマンドである。ドローコールは、オブジェクト又はその一部をレンダリングするためにGPUによって使用される、テクスチャ、状態、シェーダ、レンダリングオブジェクト及びバッファ等を定義した情報を含む。GPUは、ディスプレイに提供される画素の値を生成するようオブジェクトをレンダリングし、ディスプレイは、レンダリングされたオブジェクトを表す画像を表示するために画素値を使用する。
【0002】
添付図面を参照することによって、本開示をより良好に理解することができ、その多数の特徴及び利点が当業者に明らかになる。異なる図面における同一の符号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0003】
図1】いくつかの実施形態による、仮想化環境内での物理機能の共有を実装するグラフィックプロセシングユニット(GPU)を含むプロセシングシステムのブロック図である。
図2】いくつかの実施形態による、単一の半導体ダイ上でセントラルプロセシングユニット(CPU)及びGPUを統合するシステムオンチップ(SOC)のブロック図である。
図3】いくつかの実施形態による、GPU上でのマルチメディア仮想化をサポートするハードウェアアーキテクチャの第1の実施形態のブロック図である。
図4】いくつかの実施形態による、GPU上でのマルチメディア仮想化をサポートするハードウェアアーキテクチャの第2の実施形態のブロック図である。
図5】いくつかの実施形態による、仮想化OSエコシステム内でのマルチメディア処理をサポートするために使用されるオペレーティングシステム(OS)のブロック図である。
図6】いくつかの実施形態による、仮想化サポートによるOSアーキテクチャのブロック図である。
図7】いくつかの実施形態による、圧縮ビデオの復号、レンダリング及び提示のためのマルチメディアソフトウェアシステムのブロック図である。
図8】いくつかの実施形態による、物理機能のためのベースアドレスレジスタ(BAR)を識別する物理機能構成空間のブロック図である。
図9】いくつかの実施形態による、仮想機能のためのBARを識別するシングルルートI/O仮想化(SR-IOV)ヘッダの部分のブロック図である。
図10】いくつかの実施形態による、物理機能を実行するホストOS及び物理機能に関連付けられた仮想機能を実行するゲスト仮想マシン(VM)のライフサイクルのブロック図である。
図11】いくつかの実施形態による、マルチメディアユーザモードドライバ及びカーネルモードドライバのブロック図である。
図12】いくつかの実施形態による、仮想化OSエコシステム内でのマルチメディア能力共有をサポートするメッセージシーケンスの第1の部分を示す図である。
図13】いくつかの実施形態による、仮想化OSエコシステム内でのマルチメディア能力共有をサポートするメッセージシーケンスの第2の部分を示す図である。
【発明を実施するための形態】
【0004】
グラフィックプロセシングユニット(GPU)等のプロセシングユニットは、複数の仮想マシンがGPUのハードウェアリソースを使用することを可能にする仮想化をサポートする。各々の仮想マシンは、GPUのハードウェアリソースを使用する別個のプロセスとして実行する。いくつかの仮想マシンは、仮想マシンが実際のマシンをエミュレートすることを可能にするオペレーティングシステムを実行する。他の仮想マシンは、プラットフォーム独立環境内でコードを実行するよう設計される。ハイパーバイザは、仮想マシンを生成及び稼働させ、仮想マシンは、ゲストマシン又はゲストとも呼ばれる。GPU上で実装された仮想環境は、物理マシン上で実装された他の仮想コンポーネントに仮想機能(virtual functions)を提供する。GPU内で実行された単一の物理機能(physical function)は、1つ以上の仮想機能をサポートするために使用される。物理機能は、タイムスライス毎に物理マシン上で異なる仮想マシンに仮想機能を割り当てる。例えば、物理機能は、第1の時間周期内に第1の仮想マシンに第1の仮想機能を割り当て、第2の後続の時間周期内に第2の仮想マシンに第2の仮想機能を割り当てる。いくつかのケースでは、GPU内の物理機能は、31個程度の仮想機能をサポートするが、他のケースでは、より多くの又はより少ない仮想機能がサポートされる。シングルルート入力/出力仮想化(SR IOV)仕様は、複数の仮想マシンがペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)バス等の単一のバスへのGPUインタフェースを共有することを可能にする。コンポーネントは、バスを通じて要求を送信することによって、仮想機能にアクセスする。
【0005】
例えば、GPU上で実行する仮想マシンによるマルチメディアコンテンツの処理は、ハードウェアアクセラレーション機能(hardware accelerated functions)を使用して加速化される。例えば、特定のOSディストリビューションの一部であり又は独立したソフトウェアベンダによって提供されるアプリケーションを使用することによって、ハードウェアアクセラレーションマルチメディアコンテンツのハンドリングを達成することができる。ハードウェアアクセラレーションを使用するために、マルチメディアアプリケーションは、音声再生、ビデオ再生又はマルチメディア再生を開始する前に、GPUのハードウェアアクセラレーションマルチメディア機能をクエリする。クエリは、サポートされたコーデック(コーダ-デコーダ)、最大ビデオ解像度、及び、最大のサポートされるソースレート等の情報についての要求を含む。別個のプロセス(例えば、別個のホスト又はゲスト仮想マシン)は、同一のマルチメディアアプリケーションの異なるインスタンスを実行するために使用され、異なる仮想マシンによって実行されるマルチメディアアプリケーションの複数のインスタンスは相互に認識されない。いくつかのケースでは、ユーザモードドライバは、いくつの異なるインスタンスがGPU上で同時に稼働しているかを認識しない。ユーザモードドライバは、典型的には、ハードウェア機能(コーデック等)の単一のインスタンスが単に開かれ、仮想マシン等のプロセスに割り当てられることを可能にする。同時に、例えば、第1の仮想マシンにおいてGPU上でグラフィック処理を起動する第1のアプリケーションは、圧縮ビデオビットストリームを復号するよう固定機能ハードウェアが割り当てられる。固定機能ハードウェアは、第1のアプリケーションの実行と同時に後続のアプリケーションへの割り当てには利用可能でなく、よって、第2の仮想マシン上で実行する第2のアプリケーションは、セントラルプロセシングユニット(CPU)等の汎用アプリケーションプロセッサ上で実行されるソフトウェアを使用して復号される(又は、符号化される)。他の仮想マシン上で実行されるアプリケーションも、CPUのリソース(コア及びスレッド)が完全に占有されるまで、CPU上で実行されるソフトウェアを使用して復号される(又は、符号化される)。このシナリオは、より高いソース解像度及びより高いリフレッシュレートが必要とされる場合、電力効率が悪く、プロセシングシステムをスローダウンさせることが多い。
【0006】
図1図13は、CPU上で実行されるソフトウェアによってもたらされるハードウェアアクセラレーションを1つのプロセス以外の全てのプロセスに使用させる代わりに、GPUにおいて固定機能ハードウェアブロックによってもたらされるハードウェア機能を複数の仮想マシンが共有することを可能にすることによって、マルチメディアアプリケーションの実行速度を改善すると共に、プロセシングシステムの電力消費を低減させる技術の実施形態を開示する。ハードウェアアクセラレーション機能は、固定機能ハードウェアブロックによって提供される物理機能として実行される。いくつかの実施形態では、物理機能は、マルチメディアデータストリームの符号化、マルチメディアデータストリームの復号、音声データ若しくはビデオデータの符号化/復号、又は、他の動作を実行する。物理機能に対応する複数の仮想機能は、GPU上で実行されるゲスト仮想マシン(VM)に公開される。GPUは、レジスタのセットを含み、レジスタのサブセットは、異なる仮想機能に関連付けられた情報を記憶するよう割り当てられる。サブセットの数と共にサブセット内のレジスタの数は、各々の仮想機能によって使用される最大量の空間に対応する静的値、又は、各々の仮想機能によって使用される最小量の空間に対応する初期値に設定され、それらの値はその後、仮想機能の特性に基づいて動的に修正される。いくつかの実施形態では、レジスタの各々のサブセットは、仮想機能によって影響されるフレームを記憶するためのフレームバッファ、仮想機能の動作状態を定義するためのコンテキストレジスタ、及び、例えば、GPUの1つ以上の計算ユニットを使用してGPUによる実行のために仮想機能がスケジューリングされる準備ができたことをシグナリングするためのドアベル(doorbell)を含む。
【0007】
ハイパーバイザは、1つのゲストVMにレジスタへの同時のアクセスを許可又は拒否する。レジスタへのアクセスを有するゲストVMは、ゲストVMに対してレジスタのサブセット内のフレームバッファに記憶されたフレームに対するグラフィックレンダリングを実行する。GPU上の固定機能ハードウェアブロックは、ゲストVMに対するレジスタのサブセット内のコンテキストレジスタに記憶された情報に基づいて、ゲストVMに対して仮想機能を実行するように構成される。いくつかの実施形態では、固定機能ハードウェアブロックの構成は、仮想機能を実行するために使用されるマルチメディア機能のユーザモードドライバ及びのファームウェアイメージをインストールすることを含む。ゲストVMは、サブセット内のドアベルレジスタに情報を書き込むことによって、実行のためにそれがスケジューリングされる準備ができたことをシグナリングする。GPUにおけるスケジューラは、スケジューリングされた時間に仮想機能を実行するよう、ゲストVMをスケジューリングする。いくつかの実施形態では、ゲストVMは、ゲストVMに関連付けられた優先度、及び、スケジューリングされる準備ができた他のゲストVMに関連付けられた他の優先度に基づいてスケジューリングされる。ワールドスイッチは、例えば、現在のゲストVMに対してレジスタのサブセット内のコンテキストレジスタにおいて定義されたように、前に実行しているゲストVMに対して定義されたコンテキストから現在のゲストVMに対するコンテキストにコンテキストを切り替えるよう、スケジューリングされた時間に実行される。いくつかの実施形態では、ワールドスイッチは、GPU上で仮想機能を実行するために使用されるマルチメディア機能のユーザモードドライバ及びファームウェアイメージをインストールすることを含む。ワールドスイッチが完了した後、現在のゲストVMは、フレームバッファレジスタ内のフレームに対するハードウェアアクセラレーション動作を実行するよう、仮想機能を実行することを開始する。本明細書で説明するように、ハードウェアアクセラレーション演算の例は、マルチメディア復号、マルチメディア符号化、ビデオ復号、ビデオ符号化、音声復号、及び、音声符号化等を含む。スケジューラは、或る時間周期の間にゲストVMをスケジューリングし、ゲストVMは、或る時間周期の間に仮想機能及びレジスタのサブセットへの排他的アクセスを有する。時間周期の間に実行を完了したことに応じて、ゲストVMは、別のゲストVMに対して別の仮想機能をロードすることができたこと、及び、ゲストVMに対するドアベルがクリアされたことをハイパーバイザに通知する。
【0008】
図1は、いくつかの実施形態による、仮想化環境内での物理機能の共有を実装するグラフィックプロセシングユニット(GPU)105を含むプロセシングシステム100のブロック図である。GPU105は、同時に又は並列して命令を独立して実行する1つ以上のGPUコア106と、3Dグラフィックレンダリング又はビデオレンダリングをサポートする1つ以上のシェーダシステム107と、を含む。例えば、シェーダシステム107は、グラフィックレンダリングフレーム/秒スコアを増大させ、又は、グラフィックエンジンがシーンを正確にレンダリングできなかったレンダリングされた画像のエリアをパッチすることによって、視覚的提示を改善するために使用されてもよい。メモリコントローラ108は、レンダリングプロセスの間にフレームを記憶するフレームバッファ109へのインタフェースを設ける。フレームバッファ109のいくつかの実施形態は、ダイナミックランダムアクセスメモリ(DRAM)として実装される。しかしながら、スタティックランダムアクセスメモリ(SRAM)及び不揮発性RAMを含む他のタイプのメモリを使用して、フレームバッファ109が実装されてもよい。GPU105のいくつかの実施形態は、エンコーダフォーマットコンバータ、マルチフォーマットビデオコーデック、ディスプレイ又はスクリーンへのインタフェースを設けるディスプレイ出力回路、並びに、音声信号を符号化/復号するための音声コプロセッサ及び音声コーデック等を含む。
【0009】
また、プロセシングシステム100は、命令を実行するためのセントラルプロセシングユニット(CPU)115を含む。CPU115のいくつかの実施形態は、同時に又は並列して命令を独立して実行することができる複数のプロセッサコア120,121,122(本明細書で「CPUコア120~122」と総称される)を含む。いくつかの実施形態では、GPU105は、バス125(PCI-eバス等)及びノースブリッジ130を介してCPU115に接続された離散GPU(dGPU)として動作する。CPU115はまた、CPU115とメモリ140との間のインタフェースを設けるメモリコントローラ108を含む。メモリ140のいくつかの実施形態は、DRAM、SRAM及び不揮発性RAM等として実装される。CPU115は、メモリ140に記憶されたプログラムコード145等の命令を実行し、CPU115は、実行された命令の結果等の情報150をメモリ140に記憶する。また、CPU115は、GPU105にドローコールを発行することによって、グラフィック処理を起動することが可能である。ドローコールは、フレーム内のオブジェクト(又は、オブジェクトの一部)をレンダリングすることをGPU105に指示するようCPU115によって生成され、GPU105に送信されるコマンドである。
【0010】
サウスブリッジ155は、ノースブリッジ130に接続されている。サウスブリッジ155は、プロセシングシステム100に関連付けられた周辺ユニットへの1つ以上のインタフェース160を設ける。インタフェース160のいくつかの実施形態は、ユニバーサルシリアルバス(USB)デバイス、汎用I/O(GPIO)、ハードディスクドライブに対するSATA、及び、SPI,I2C等のシリアルペリフェラルバスインタフェース等の周辺ユニットへのインタフェースを含む。
【0011】
GPU105は、アドレス変換コントローラを有するGPU仮想メモリ管理ユニット(GPU MMU ATC)165を含み、CPU115は、CPU MMU ATC170を含む。GPU MMU ATC165及びCPU MMU ATC170は、マルチレベル変換ロジック及びオペレーティングシステムカーネルモードドライバ(KMD)によって維持される変換テーブルのセットを使用することによって、物理メモリアドレス(PA)への仮想メモリアドレス(VA)の変換をもたらす。よって、メインOS上で又はゲストOSにおいて実行されるアプリケーショプロセスの各々は、CPU演算及びGPUレンダリングのためのそれら自身の仮想アドレス空間を有する。したがって、GPU MMU ATC165及びCPU MMU ATC170は、GPUコア及びCPUコアの仮想化をサポートする。GPU105は、プロセス毎にGPU仮想アドレスを物理アドレスに変換する、その自身のメモリ管理ユニット(MMU)を有する。各々のプロセスは、異なるページテーブルを使用する別個のCPU仮想アドレス空間及びGPU仮想アドレス空間を有する。ビデオメモリマネージャは、全てのプロセスのGPU仮想アドレス空間を管理し、メモリページを割り当てること、メモリページを拡大すること、メモリページを更新すること、メモリページの常駐性を保証すること、及び、ページテーブルを解放することを管理する。
【0012】
GPU105のいくつかの実施形態は、アドレス空間及びページテーブル/ページディレクトリをCPU115と共有し、したがって、システム仮想メモリモード(IOMMu)において動作することができる。GPU MMUモデルでは、OSカーネルにおけるビデオメモリマネージャ(VidMM)は、GPU MMU ATC165及びページテーブルを管理すると共に、GPU仮想アドレスマッピングのためにユーザモードドライバ(UMD)にデバイスドライバインタフェース(DDI)サービスを公開する。IOMMUモデルでは、GPU105及びCPU115は、共通アドレス空間、共通ページディレクトリ、及び、ページテーブルを共有する。このモデルは、(全)システム仮想メモリ(SVM)として知られている。APUハードウェアのいくつかの実施形態は、以下をサポートする。
・GPU105がGPUメモリ及びCPUシステムメモリにアクセスするための第1のMMUユニット。
・CPU115がCPUメモリ及びGPUシステムメモリにアクセスするための第2のMMUユニット。
【0013】
同様に、いくつかの実施形態では、離散GPU HWは、その自身のGPU MMU ATC165を有し、離散CPUマルチコアシステムは、その自身のCPU MMU ATC170を有する。ATCを有するMMUユニットは、システム及びグラフィックメモリのその自身のセットによる各々のゲストOSにより生じる各々の仮想マシン/ゲストOS及び任意の仮想マシン/ゲストOSに対するCPUのアクセス及びGPUのアクセスのための別個のページテーブルを維持する。
【0014】
プロセシングシステム100のいくつかの実施形態は、ユーザモードから直接GPU105にサブミットされる、復号ジョブ、符号化ジョブ、計算ジョブ、及び/又は、レンダリングジョブを実行するようデスクトップウインドウマネージャ(DWM)を実装する。GPU105は、ワークの様々なユーザモードキューを公開及び管理し、GPUエンジンへのサブミットの前にビデオメモリマネージャ(VidMM)が任意のコマンドバッファを検査及びパッチする必要性を除去する。良い結果として、パケット方式スケジューリングをバッチ方式にすることができ(より多くの連続したジョブが時間の単位でキューシステムを介してサブミットされることを可能にする)、セントラルプロセッサユニット(CPU)が低電力レベルにおいて動作することを可能にし、最小の電力しか消費しない。GPU及びATC165並びにCPU MMU ATC170のいくつかの実施形態を実装する他の利点は、非連続のGPUメモリ空間又はCPUメモリ空間内で断片化されることがある、仮想メモリ割り当てを散財する能力を含む。その上、CPUメモリアドレスパッチの必要性がなく、割り当てを通じてGPUコマンドバッファの内部のメモリ参照を追跡し、位置リストをパッチする必要がなく、又は、GPUエンジンへのサブミットの前に正確な物理メモリ参照によるそれらのバッファをパッチする必要がない。
【0015】
また、GPU105は、物理機能を実行する1つ以上の固定機能ハードウェアブロックを含む。いくつかの実施形態では、固定機能ハードウェアブロック175において実行される物理機能は、マルチメディア復号、マルチメディア符号化、ビデオ復号、ビデオ符号化、音声復号、及び、音声符号化等のハードウェアアクセラレーション機能である。メモリ140に実装される仮想環境は、物理機能及びゲストVMに公開された仮想機能のセットをサポートする。更に、GPU105は、カーネルモードユニットによって実行される処理に関連付けられた情報を記憶するレジスタのセットを含む(明確にするために、図1には示されていない)。レジスタのセットのサブセットは、仮想機能に関連付けられた情報を記憶するよう割り当てられる。固定機能ハードウェアブロック175は、本明細書で詳細に説明するように、対応する1つのサブセットに記憶された情報に基づいて、ゲストVMの1つに対して1つの仮想機能を実行する。
【0016】
図2は、いくつかの実施形態による、単一の半導体ダイ上でCPU及びGPUを統合するシステムオンチップ(SOC)200のブロック図である。SOC200は、本明細書で説明するように、仮想化環境内での物理機能の共有を実装するマルチコアプロセシングユニット205を含む。マルチコアプロセシングユニット205は、同時に又は並列して命令を独立して実行する1つ以上のCPUコアから形成されたCPUコアコンプレックス208を含む。明確にするために、個々のCPUコアは図2に示されていない。
【0017】
また、マルチコアプロセシングユニット205は、マルチメディアデータ、ビデオデータ、音声データ、及び、これらの組み合わせ等のデータを符号化及び復号するための回路を含む。いくつかの実施形態では、符号化/復号(コーデック)回路は、専用ビデオ縮小命令セットコンピューティングプロセッサ(RISC)によって制御されるビデオコーデックネクスト(VCN)210を含む。他の実施形態では、コーデック回路は、VCN210を実装するために使用されるRISCプロセッサと同一又は異なってもよい、専用RISCプロセッサによって制御される固定ハードウェアIPとして実装されたユニバーサルビデオデコーダ(UVD)/ビデオ圧縮エンジン(VCE)215を含む。VCN210及びUVD/VCE215は、符号化/復号回路の代替的な実施形態であり、マルチコアプロセシングユニット205が示される実施形態は、VCN210を使用して実装され、UVD/VCE215を表す破線ボックスによって示されるように、UVD/VCE215を含まない。VCN210及びUVD/VCE215を構成するためにファームウェアが使用される。異なるゲストVMと関連付けられた異なるファームウェア構成は、以下に詳細に説明するように、ゲストVMの間のワールドスイッチを容易にするよう、ゲストVMに関連付けられたレジスタのサブセットに記憶される。
【0018】
また、マルチコアプロセシングユニット205は、マルチコアプロセシングユニット205の間のインタフェース及び周辺デバイスへのインタフェースを設けるために使用される、サウスブリッジ等のブリッジ220を含む。いくつかの実施形態では、ブリッジ220は、1つ以上のPCIeインタフェース225と、1つ以上のユニバーサルシリアルバス(USB)インタフェース230と、1つ以上のシリアルATアタッチメント(SATA)インタフェース235と、にマルチコアプロセシングユニット205を接続する。マルチコアプロセシングユニット205についての情報を記憶したダブルデータレート(DDR)メモリ集積回路等のメモリ要素を取り付けるためにスロット240,241,242,243が設けられる。
【0019】
図3は、いくつかの実施形態による、GPU上でのマルチメディア仮想化をサポートするハードウェアアーキテクチャ300の第1の実施形態のブロック図である。ハードウェアアーキテクチャ300は、同時に又は並列して命令を実行する計算ユニット(又は、他のプロセッサ)を含む、グラフィックコア302を含む。いくつかの実施形態では、グラフィックコア302は、仮想メモリ管理のための統合されたアドレス変換ロジックを含む。グラフィックコア302は、ローカルメモリを使用して、又は、協調されたCPU/GPUグラフィック処理のためにシステムメモリ内のコンテンツにアクセスすることによって、性能レンダリング等のレンダリング演算を行うために、柔軟なデータルーティングを使用する。
【0020】
また、ハードウェアアーキテクチャ300は、1つ以上のインタフェース304を含む。インタフェース304のいくつかの実施形態は、電圧レギュレータ、ピンストライプ、フラッシュメモリ、組み込みコントローラ、サウスブリッジ及びファンコントロール等のプラットフォームコンポーネントへのプラットフォームコンポーネントインタフェースを含む。インタフェース304のいくつかの実施形態は、ジョイントテストアクショングループ(JTAG)インタフェース、バウンダリスキャン診断(BSD)スキャンインタフェース、及び、デバッグインタフェースへのインタフェースを含む。インタフェース304のいくつかの実施形態は、1つ以上の外部ディスプレイパネルへのディスプレイインタフェースを含む。更に、ハードウェアアーキテクチャ300は、ハードウェアアーキテクチャ300についての温熱状態及び電力状態を管理するシステム管理ユニット306を含む。
【0021】
グラフィックコア302、インタフェース304、システム管理ユニット306及び相互接続ネットワーク308に取り付けられた他のエンティティとの通信を容易にするために相互接続ネットワーク308が使用される。相互接続ネットワーク308のいくつかの実施形態は、初期化、ファームウェアローディング及びランタイム制御等のために、レジスタアクセス並びに固定ハードウェアのローカルデータ及び命令メモリへのアクセスをもたらす、スケーラブル制御ファブリック又はシステム管理ネットワークとして実装される。また、相互接続ネットワーク308は、ビデオ圧縮エンジン(VCE)312、ユニバーサルビデオデコーダ(UVD)314、音声コプロセッサ316及びディスプレイ出力318と共に、明確にするために図3に示されていないダイレクトメモリアクセス、ハードウェアセマフォロジック及びディスプレイコントローラ等の他のエンティティに接続される。
【0022】
VCE312のいくつかの実施形態は、ローカルビデオ-RISC上で実行するファームウェアを使用して制御される、圧縮ビットストリームビデオエンコーダとして実装される。VCE312は、マルチフォーマット能力を有し、例えば、VCE312は、様々なプロファイル及びレベルを使用して、H.264、H.265、AV1及び他の符号化又は圧縮フォーマットを符号化する。VCE312は、色空間変換により設けられたYUV面又はRGB面から符号化する。いくつかの実施形態では、色空間変換及びビデオスケーリングは、画素シェーダ又は計算シェーダを実行するGPUコア上で実行される。いくつかの実施形態では、色空間変換及びビデオスケーリングは、固定機能ハードウェアビデオ前処理ブロック(明確にするために図3に示されていない)に対して実行される。
【0023】
UVD314のいくつかの実施形態は、ローカルビデオ-RISC上で稼働するファームウェアから制御される、圧縮ビットストリームビデオデコーダとして実装される。UVD314は、マルチフォーマット能力を有し、例えば、UVD314は、様々なプロファイル、レベル及びビット深度において、レガシMPEG-2、MPEG-3及びVC1ビットストリームと共に、より新しいH.264、H.265、VP9及びAV1フォーマットを復号する。
【0024】
音声コプロセッサ316のいくつかの実施形態は、ローカル及びグローバル音声キャプチャ及びレンダリングによるホスト音声オフロードを実行する。例えば、音声コプロセッサ316は、音声フォーマット変換、サンプルレート変換、音声イコライゼーション、ボリューム制御及びミキシングを実行することができる。また、音声コプロセッサ316は、キーワード検出、音響エコーキャンセレーション、ノイズ抑制及びマイクロフォンビームフォーミング等のように、発話により制御される音声ビデオコンファレンシング及びコンピュータのためのアルゴリズムを実行することができる。
【0025】
ハードウェアアーキテクチャ300は、個々の固定機能ハードウェアブロックを制御するためのハブ320を含む。ハブ320のいくつかの実施形態は、仮想アドレスから物理アドレスへのアドレス変換を実行するために使用される、ローカルGPU仮想メモリアドレス変換キャッシュ(ATC)322を含む。ローカルGPU仮想メモリATC322は、CPUレジスタアクセス、並びに、ローカルフレームバッファ324又はシステムメモリに記憶されたバッファのアレイへのデータ受け渡し及びローカルフレームバッファ324又はシステムメモリに記憶されたバッファのアレイからのデータ受け渡しをサポートする。
【0026】
マルチレベルATC326は、アドレス変換を実行することをサポートするよう、物理アドレスへの仮想アドレスの変換を記憶する。いくつかの実施形態では、ローカルフレームバッファ324及びシステムメモリ328へのアクセスを容易にするためにアドレス変換が使用される。
【0027】
図4は、いくつかの実施形態による、GPU上でのマルチメディア仮想化をサポートするハードウェアアーキテクチャ400の第2の実施形態のブロック図である。ハードウェアアーキテクチャ400は、図3に示すハードウェアアーキテクチャ300の第1の実施形態と同一のいくつかの要素を含む。例えば、ハードウェアアーキテクチャ400は、グラフィックコア302、インタフェース304、システム管理ユニット306、相互接続ネットワーク308、音声コプロセッサ316、ディスプレイ出力318、及び、システムメモリ328を含む。これらのエンティティは、図3に示すハードウェアアーキテクチャ300内の対応するエンティティと同一又は同様の方法で動作する。
【0028】
ハードウェアアーキテクチャ400の第2の実施形態は、CPUコアコンプレックス405、VCNエンジン410、画像シグナルプロセッサ(ISP)415、及び、マルチメディアハブ420を含むことによって、図3に示すハードウェアアーキテクチャ300の第1の実施形態とは異なる。
【0029】
CPUコアコンプレックス405のいくつかの実施形態は、システムメモリ328へのアクセスを有する、マルチレベルキャッシュを有するマルチコアCPUシステムとして実装される。また、CPUコアコンプレックス405は、初期化、セットアップ、状態サービシング及び中断処理を実行するための機能ブロックを含む(明確にするために図4に示されていない)。
【0030】
VCNエンジン410のいくつかの実施形態は、統合された圧縮ビデオデコーダ及びビデオエンコーダを含む、マルチメディアビデオサブシステムを含む。VCNエンジン410は、優先度ベース復号(priority-based decoding)及び符号化スケジューリングを実行するようにファームウェアを使用して構成されたビデオRISCプロセッサとして実装される。ファームウェアスケジューラは、カーネルモードドライバに復号ジョブ及び符号化ジョブをサブミットするために、ハードウェア支援キューのセットを使用する。例えば、VCNエンジン410上で実行するファームウェアは、標準優先度キュー(normal priority queue)において稼働する復号キューと、標準、リアルタイム及びタイムクリティカル優先度レベルにおいて稼働する符号化キューと、を使用する。VCNエンジン410の他の部分は、以下を含む。
a.ハードウェアアクセラレーションリバースエントロピ復号処理ステップ、逆変換処理ステップ、動き予測器処理ステップ、デブロッカ復号処理ステップのための固定ハードウェアIPブロックを有するレガシMPEG-2、MPEG-4及びVC-1デコーダ、並びに、セットアップ及び制御のためのレジスタインタフェース。
b.専用メモリコントローラインタフェースによるローカルに接続されたメモリ及びグラフィックメモリへの圧縮ビットストリームの転送、並びに、ローカルに接続されたメモリ及びグラフィックメモリからの圧縮ビットストリームの転送をサポートする、メモリインタフェースによる固定ハードウェアIPブロック及びメモリデータマネージャのハードウェア状態のセットアップ及び制御、並びに、コンテキスト管理のための、レジスタインタフェースによるハードウェア加速化リバースエントロピ処理ステップ、整数動き推定処理ステップ、エントロピコーディング処理ステップ、逆変換及び補間処理ステップ、動き予測及び補間処理ステップ、並びに、デブロッキング符号化及び復号処理ステップのための固定ハードウェアIPブロックを有するH.264、H.265及びVP9エンコーダ及びデコーダサブシステム。
c.ビデオRISCプロセッサ制御の下で固定ハードウェア機能として実装されたJPEGデコーダ及びJPEGエンコーダ。
d.JPEG復号/符号化、ビデオコーデック、及びビデオRISCプロセッサに対するレジスタのセット。
e.ハードウェアによってサポートされる書き込み転送及びビデオRISCプロセッサによってサポートされる読み込み転送による環状バッファ(circular buffers)のセットを有するリングバッファコントローラ。環状バッファは、JPEG復号、ビデオ復号、汎用符号化(トランスコーディングのユースケースに対する)、リアルタイム符号化(ビデオコンフェレンシングのユースケースに対する)、及び、無線ディスプレイに対するタイムクリティカル符号化をサポートする。
【0031】
ISP415のいくつかの実施形態は、モバイルインダストリプロセッサインタフェース(MIPI)アライアンスカメラインタフェース(CSI-2)等のインタフェースを介して、センサから個々のフレーム又はビデオシーケンスをキャプチャする。よって、ISP415は、入力ビデオ又は入力静止ピクチャを提供する。ISP415は、取得されたYCbCr面に対し、画像取得、画像処理及び画像スケーリングを実行する。ISP415のいくつかの実施形態は、単一の内部パイプラインへのMIPIインタフェースを介して接続されたカメラを切り替えることによって、画像処理を実行するよう複数のカメラを同時にサポートする。いくつかのケースでは、ISP415の機能は、グラフィック計算エンジンによって処理されたRGB画像面又はYCbCr画像面に対してバイパスされる。ISP415のいくつかの実施形態は、デモザイク、ノイズリダクション、スケーリング、並びに、内部ダイレクトメモリアクセス(DMA)エンジンを使用したメモリへの取得された画像/ビデオの転送及びメモリから取得された画像/ビデオの転送等の画像処理機能を実行する。
【0032】
マルチメディアハブ420は、システムメモリ328へのアクセス、並びに、USB、SATA、汎用I/O(GPIO)、リアルタイムクロック等の周辺入力/出力(I/O)デバイスにアクセスするためのI/Oハブ430、SMBUSインタフェース、及び、外部の構成可能フラッシュメモリにアクセスするためのシリアルI2Cインタフェース等のインタフェースへのアクセスをサポートする。マルチメディアハブ420のいくつかの実施形態は、仮想アドレスから物理アドレスへのアドレス変換を実行するために使用される、ローカルGPU仮想メモリATC425を含む。ローカルGPU仮想メモリATC425は、CPUレジスタアクセス、並びに、ローカルフレームバッファ又はシステムメモリ322に記憶されたバッファのアレイへのデータ受け渡し及びローカルフレームバッファ又はシステムメモリ322に記憶されたバッファのアレイからのデータ受け渡しをサポートする。
【0033】
図5は、いくつかの実施形態による、仮想化OSエコシステムにおけるマルチメディア処理をサポートするために使用されるオペレーティングシステム(OS)500のブロック図である。OS500は、図3に示すハードウェアアーキテクチャ300の第1の実施形態及び図4に示されたハードウェアアーキテクチャ400の第2の実施形態において実装される。
【0034】
OS500は、ハイパーバイザ(HV)コンテキストにおいて、ユーザモード505、カーネルモード510及びカーネルモードについての部分515に分割される。ユーザモードスレッドは、プライベートプロセスアドレス空間を実行している。ユーザモードスレッドの例は、システムプロセス520、サービスプロセス521、ユーザプロセス522及び環境サブシステム523を含む。システムプロセス520、サービスプロセス521及びユーザプロセス522は、サブシステム動的リンクライブラリ(DLL)525と通信する。プロセスが実行する場合、それは、異なる状態(開始、準備、稼働、待機及び退出又は終結)を通る。OSプロセスは、OS500を初期化及び稼働させるためのシステムにおいて実装されたワークの基本単位を表すエンティティとして定義される。オペレーティングシステムサービスプロセスは、プロセッサ、メモリ、ファイル、並びに、入力及び出力を含む、プラットフォームリソースの管理を担当する。OSプロセスは、概して、コンピュータシステムの実装の詳細からアプリケーションを遮断する。オペレーティングシステムサービスプロセスは、以下として稼働する。
・実行のプロセス及びスレッドを生成及び管理し、プログラムを実行し、非同期イベントを定義及び通信し、システムクロック演算を定義及び処理し、セキュリティ機能を実行し、ファイル及びディレクトリを管理し、周辺デバイスへの入力/出力処理及び周辺デバイスからの入力/出力処理を制御するカーネルサービス。
・ファイルコンテンツを比較、印刷及び表示し、ファイルを編集し、パターンを検索し、表現、ログイベント及びメッセージを評価し、ディレクトリの間でファイルを移動し、データをソートし、コマンドスクリプトを実行し、プリンタを制御し、環境情報にアクセスするためのユーティリティサービス。
・ジョブ制御コマンド及びデータ命令リストに基づいて、ワーク(ジョブ)を待ち行列に入れ、処理の順序付けを管理するためのバッチ処理サービス。
・ファイル及びディレクトリのローカル複製及びリモート複製の管理のためのファイル及びディレクトリ同期サービス。
【0035】
ユーザプロセスは、ユーザにより定義されたプログラムを稼働させ、ユーザコードを実行する。OS環境又は統合されたアプリケーション環境は、ユーザがアプリケーションソフトウェアを稼働させる環境である。OS環境は、OSとアプリケーションとの間に存在し、アプリケーションマネージャによって設けられるユーザインタフェース及びOSとアプリケーションとの間のアプリケーションマネージャへのアプリケーションプログラミングインタフェース(API)から構成される。OS環境変数は、オペレーティングシステム及び他のソフトウェアがコンピュータ上の位置、ファイルのバージョン番号、ファイル又はデバイスオブジェクトのリスト等のような特定の情報を判別するために使用される動的な値である。2つのタイプの環境変数は、ユーザ環境変数(ユーザプログラム又はユーザにより供給されたデバイスドライバに特有の)及びシステム環境変数である。NTDLL.DLLレイヤ530は、Win32又は他のAPIサブシステムからのサポートなしに稼働する、オペレーティングシステムのユーザモードコンポーネントによって使用されるWindows(登録商標)ネイティブAPIインタフェースをエクスポートする。
【0036】
ユーザモード505とカーネルモード510との間の分離は、誤りのあるユーザモードコード又は悪意のあるユーザモードコードからのOS保護をもたらす。カーネルモード510は、ウインドウイング及びグラフィックブロック535、実行機能(executive function)540、1つ以上のデバイスドライバ545、1つ以上のカーネルモードドライバ550及びハードウェア抽出レイヤ555を含む。第2の分割ラインは、カーネルからそれ自体を隔離する特殊化命令を使用する以外はカーネルと同一の特権レベル(レベル0)により稼働すると共に、カーネル及びアプリケーションを監視するOSハイパーバイザ560から、カーネルモード510にあるカーネルモードドライバ550を分離する。これは、リング-1において稼働するハイパーバイザと呼ばれる。
【0037】
図6は、いくつかの実施形態による、仮想化サポートによるオペレーティングシステム(OS)アーキテクチャ600のブロック図である。OSアーキテクチャ600は、図5に示すOS500のいくつかの実施形態において実装される。OSアーキテクチャ600は、NTDLLレイヤ610(図5に関して説明したように)を含むユーザモード605及びカーネルモード615に分割される。OSアーキテクチャ600のいくつかの実施形態は、同一のコンピュータ上でのプロセスの間の軽量プロセス間通信(IPC)のためのカーネルにおいて実装された内部のIPCファシリティである、カーネルローカルプロセス間通信、ローカルプロシージャ呼び出し又は軽量プロシージャ呼び出し(LPC)を実行する。いくつかのケースでは、LPCは、そのユーザモード部分がカーネルにおけるユーザモードドライバフレームワーク(UMDF)のコンポーネントとの効率的な通信チャネルを必要とする、UMDFの実装のための高速スケーラブル通信機構との非同期ローカルプロセス間通信(Asynchronous Local Inter-Process Communication)によって置き換えられる。
【0038】
カーネルモード615のフレームワークは、CPU、BIOS/ACPI、バス、I/Oデバイス、中断、タイマ、及び、メモリキャッシュコントロール等のデバイスハードウェア625と相互作用する、1つ以上のシステムスレッド620を含む。システムサービスディスパッチャ630は、ユーザモード605においてNTDLLレイヤ610と相互作用する。また、フレームワークは、1つ以上の呼び出し可能インタフェース635を含む。
【0039】
更に、カーネルモード615は、キャッシュ、モニタ及びマネージャ640を実装する機能を含む。キャッシュ、モニタ及びマネージャ640の例は、以下を含む。
・「INI」(初期化)ファイルに構成値を記憶し、永続的レジスタ(persistent registry)を管理するカーネル構成マネージャ。
・OSリソース(ファイル、デバイス、スレッド、プロセス、イベント、ミューテックス、セマフォ、レジストリキー、ジョブ、セクション、アクセストークン及びシンボリックリンク)のライフタイムを管理するカーネルオブジェクトマネージャ。
・プロセス内の全てのスレッドの実行をハンドリングするカーネルプロセスマネージャ。
・仮想メモリを割り当て及び解放し、プロセスの間でメモリを共有し、メモリにファイルをマッピングし、ディスクに仮想ページをフラッシュし、仮想ページの範囲に関する情報を取り出し、仮想ページの保護レベルを変更し、メモリに仮想ページをロック/アンロックする、システムサービスのセットを提供するカーネルメモリマネージャ。ユーザモード605において、それらのサービスの殆どは、仮想メモリ割り当て及び割り当て解除のためのAPI、ヒープAPI、ローカルAPI及びグローバルAPI、並びに、メモリとしてファイルをマッピングするためのメモリマッピングされたファイルの操作、及び、プロセスの間でのメモリハンドルを共有するためのAPIとして公開される。
・デバイスが稼働しているコンピュータシステムに追加され、及び、稼働しているコンピュータシステムから除去されるときを認識し、デバイス検出及びエニュメレーションをもたらすカーネルプラグアンドプレイ(PnP)マネージャ。そのライフサイクルを通じて、PnPマネージャは、システム内のデバイスを記録するデバイスツリーを維持する。
・電力状態変化をサポートする全てのデバイスについての電力状態における変化を管理するカーネル電力マネージャ。電力マネージャは、電力管理をハンドルし電力イベントを調整するよう電力ポリシ管理に依存し、次いで、電力管理イベントベースプロシージャ呼び出し(power management event-based procedure calls)を生成する。電力マネージャは、電力状態を変化させる要求を収集し、デバイスがそれらの電力状態を変化させる必要がある順序を決定し、次いで、変更を行うことを適切なドライバに通知するよう適切な要求を送信する。ポリシマネージャは、システムにおける活動を監視し、ユーザ状態、アプリケーション状態及びデバイスドライバ状態を電力ポリシに統合する。
・アクセスコントロールリスト(ACL)により定義されたカーネルアクセスコントロールによりデバイスドライバが作用するためのルーチンを設けるカーネルセキュリティ参照モニタ。それは、デバイスドライバの要求がシステムセキュリティポリシに違反していないことを保証する。
【0040】
また、カーネルモード615は、アプリケーションとデバイスドライバによって設けられたインタフェースとの間の通信を管理する、カーネルI/Oマネージャ645を含む。オペレーティングシステムとデバイスドライバとの間の通信は、オペレーティングシステムから特定のドライバに、及び、1つのドライバから別のドライバに渡されたI/O要求パケット(IRP)を通じて行われる。カーネルI/Oマネージャ645のいくつかの実施形態は、ファイルシステムドライバ及びデバイスドライバ650を実装する。カーネルファイルシステムドライバは、1つ以上のファイルシステム又はファイルシステムボリュームについてのI/O動作(生成、読み込み、書き込み、リネーム等)をフィルタリングすることによって、ファイルシステムのデフォルトの動作を修正する。カーネルデバイスドライバは、アプリケーションからデータを受信し、データをフィルタリングし、デバイス機能性をサポートする下位レベルドライバにそれを渡す。カーネル-モードドライバのいくつかの実施形態は、Windows(登録商標)ドライバモデル(WDM)に準拠する。カーネルデバイスドライバは、ハードウェアデバイスへのソフトウェアインタフェースを設け、使用されるハードウェアに関する正確な詳細を知る必要なしに、オペレーティングシステム及び他のユーザモードプログラムがハードウェア機能にアクセスすることを可能にする。仮想デバイスドライバは、仮想化環境内でハードウェアデバイスをエミュレートするために使用されるデバイスドライバの特殊な変形例である。エミュレーションの全体を通じて、仮想デバイスドライバは、仮想マシンの内部で稼働するゲストオペレーティングシステム及びそのドライバが時間多重化されたセッション内に実の(real)ハードウェアにアクセスすることを可能にする。ハードウェアにアクセスするゲストオペレーティングシステムによる試みは、例えば、機能呼び出し(function calls)として、ホストオペレーティングシステム内の仮想デバイスドライバにルーティングされる。
【0041】
また、カーネルモード615は、ウインドウ管理(生成、リサイズ、再位置付け、破壊)、タイトルバー及びメニューバー、メッセージ受け渡し、入力処理、ボタン、プルダウンメニュー、編集ボックス、ショートカットキー等のような標準制御のための単純なユーザインタフェースを構築するためのコアの機能を提供する、OSコンポーネント655を含む。OSコンポーネント655は、ウインドウ、メッセージ及びメッセージループへのハンドルのセットに基づいている、グラフィックドライバインタフェース(GDI)を含む。また、OSコンポーネント655は、グラフィックデバイスドライバインタフェース(DDI)を実装することによって出力されたグラフィックを制御する、グラフィックドライバカーネルコンポーネントを含む。グラフィックドライバカーネルコンポーネントは、初期化及び終結、浮動小数点演算、グラフィックドライバ機能、デバイス依存ビットマップの生成、直線及び曲線を描画するためのグラフィック出力機能、描画及び埋め込み、ビットマップの複製、階調表現、画像色管理、グラフィックDDI色及びパレット機能、並びに、グラフィックDDIフォント及びテキスト機能をサポートする。グラフィックドライバは、ドライバを有効化及び無効化するエントリポイント(例えば、GDIによって呼び出される)をサポートする。
【0042】
カーネルモード615は、カーネル及びカーネルモードドライバ660を含む。グラフィックカーネルドライバは、ハードウェアを直接操作しない。代わりに、グラフィックカーネルドライバは、ハードウェアとインタフェースするよう、ハードウェア抽出レイヤ(HAL)665内の機能を呼び出す。HAL665は、様々なハードウェアプラットフォームへのOSポータビリティをサポートする。HAL665のいくつかの実施形態は、同一のオペレーティングシステムが異なるプロセッサを有する異なるプラットフォーム上で稼働することを可能にする、ロード可能カーネル-モードモジュール(Hal.dll)として実装される。示されるフレームワークでは、ハイパーバイザ670は、HAL665とデバイスハードウェア625との間に実装される。
【0043】
図7は、いくつかの実施形態による、圧縮ビデオ復号、レンダリング及び提示のためのマルチメディアソフトウェアシステム700のブロック図である。マルチメディアソフトウェアシステム700は、図3に示すハードウェアアーキテクチャ300の第1の実施形態及び図4に示すハードウェアアーキテクチャ400の第2の実施形態において実装される。マルチメディアソフトウェアシステム700は、ユーザモード705及びカーネルモード710に分割される。
【0044】
マルチメディアソフトウェアシステム700のユーザモード705は、アプリケーションレイヤ715を含む。アプリケーションレイヤ715のいくつかの実施形態は、メトロアプリケーション、モダンアプリケーション、没入アプリケーション、及び、ストアアプリケーション等のアプリケーションを実行する。アプリケーションレイヤ715は、以下に説明するように、マルチメディアプロセスをサポートするために使用される他のレイヤ及びドライバへの接続をもたらす、ランタイムレイヤ720と相互作用する。
【0045】
ハードウェアメディアファンデーション変換(MFT)725は、ユーザモード705において実装される。MFT725は、アプリケーションプログラマに対して利用可能なオプションのインタフェースである。いくつかの実施形態では、デコーダ及びエンコーダ毎に、MFT725の別個のインスタンスが設けられる。MFT725は、メディアデータを処理するための共通モデルを設け、MFT表現において、1つの入力ストリーム及び1つの出力ストリームを有するデコーダ及びエンコーダに対して使用される。MFT725のいくつかの実施形態は、完全な下位層ハードウェア抽出との前に定義されたアプリケーションプログラミングインタフェース(API)に基づいている、処理モデルを実装する。
【0046】
ユーザモード705において実装されたメディアファンデーション(MF)レイヤ730は、マルチメディアソフトウェアシステム700に対してメディアソフトウェア開発キット(SDK)を提供するために使用される。MFレイヤ730によって定義されたメディアSDKは、アプリケーションプログラマがCPUにアクセスし、GPUにおいて実装されたシェーダを計算することを可能にするメディアアプリケーションフレームワークであり、アクセラレータ機能等のメディア処理のためのハードウェアアクセラレータは、固定機能ハードウェアブロックによって設けられる物理機能として実装される。物理機能によって実装されたアクセラレータ機能の例は、マルチメディアデータストリームの符号化、マルチメディアデータストリームの復号、音声データ若しくはビデオデータの符号化/復号、又は、他の演算を含む。いくつかの実施形態では、メディアSDKは、ビデオ再生、ビデオ符号化、ビデオトランスコーディング、リモートディスプレイ及び無線ディスプレイ等をどのように実装するかを示す、サンプルをプログラミングすることを含む。
【0047】
マルチメディアユーザモードドライバ(MMD)735は、MFレイヤ730に対する内部のOSアグノスティックAPIセットを設ける。MMD735のいくつかの実施形態は、マルチメディアソフトウェアシステム700を実行するプロセシングシステムを実装するために使用されるハードウェアを抽出する、C++方式ドライバとして実装される。MMD735は、異なる特性を有するメモリ、ビデオサービス又はグラフィックサーフェスを割り当てるためのコンポーネントを含む、DirectX9パイプライン及びDirectX11パイプライン等の1つ以上のグラフィックパイプライン(DX)740とインタフェースする。いくつかのケースでは、MMD735は、それがOS特有の実装を組み込むことを理由に、特定のOSエコシステムの下で動作する。
【0048】
カーネルモード710は、ハードウェアアクセラレーション及び3Dグラフィックパイプラインのレンダリングをサポートする、カーネルモードドライバ745を含む。3Dグラフィックパイプラインのいくつかの実施形態は、他の要素の中で、入力アセンブラ、頂点シェーダ、テッセレータ、ジオメトリシェーダ、ラスタライザ、画素シェーダ、並びに、サーフェス、バッファ及びテクスチャ等のレンダリングされたメモリリソースの出力統合を含む。3Dパイプラインの要素は、ソフトウェアベースシェーダ及び固定機能ハードウェアとして実装される。
【0049】
アクセラレータ機能を実装するために使用されるハードウェア755を構成するためのファームウェアを設けるために、ファームウェアインタフェース750が使用される。ハードウェア755のいくつかの実施形態は、ファームウェアインタフェース750を介してユーザモード705から命令及びコマンドを受信する、専用ビデオRISCプロセッサとして実装される。図1に示す固定機能ハードウェアブロック165、図2に示すVCN210、図2に示すUVD/VCE215、図3に示すVCE312、図3に示すUVD314、及び、図4に示すVCNエンジン410等のように、UVD、VCE及びVCNのうち1つ以上を構成するためにファームウェアが使用される。ファームウェアインタフェース750を通じて受信されたコマンドは、ビデオ復号及びビデオ符号化のためにハードウェア755を初期化及び準備するために使用される。コンテンツ情報は、環状バッファ又はリングバッファのシステムを通じてMMD735からカーネルモードドライバ745に復号ジョブ及び/又は符号化ジョブとして渡される。バッファ及びサーフェスは、カーネルモードドライバ745において物理アドレスに変換される、それらの仮想アドレスにより渡される。コンテンツ情報の例は、割り当てられた圧縮ビットストリームバッファ、復号サーフェス(復号コンテキストとして知られる)、復号ピクチャバッファ、復号ターゲットバッファ、符号化入力サーフェス、符号化コンテキスト、及び、符号化出力バッファを示す情報を含む。
【0050】
また、カーネルモード710は、3Dドライバ760及びプラットフォームセキュリティプロセッサ(PSP)765を含む。PSP765は、圧縮ビットストリームデコーダの入力及び出力におけるサーフェスの解読及び/又は暗号化のための暗号化API及び方法を提供するカーネルモードコンポーネントである。また、PSP765は、ビデオエンコーダ出力における暗号化API及び方法を提供する。例えば、PSP765は、AMD WiFi(登録商標) Display又はMicrosoft Miracast Sessionに対して使用されるディスプレイ物理出力又は仮想ディスプレイにおけるコンテンツ保護のためのHDCP1.4及び2.x標準を施行することができる。
【0051】
仮想化は、その物理配送からのサービス要求の分離である。以下を使用してそれを達成することができる。
・ホストコンピュータハードウェアレイヤの最高位で稼働するゲストOSとハイパーバイザ(又は、VMM)との間のOS要求の二値変換。
・ゲストOSが下位層ハードウェアへの全ての要求をハイパーバイザに通信するOS支援準仮想化。ハイパーバイザは、メモリ管理、中断ハンドリング及び時間管理のためのソフトウェアインタフェースを設ける。
・VMMがカーネルモードドライバの下にある高められた特権レベルにおいて稼働することを可能にする、AMD-v技術によるハードウェア支援仮想化。最高位ハードウェアレイヤ上で稼働するハイパーバイザ又はVMMは、ベアメタルタイプ1ハイパーバイザとして知られている。それがネイティブ(ホスト)OSの最高位で稼働する場合、それは、タイプ2ハイパーバイザとして知られている。
【0052】
コンピュータクライアント及びサーバシステムにおいて仮想化が使用される。仮想化は、異なるOS(又は、ゲストVM)がシームレス方式及び制御された方式においてマルチメディアハードウェアリソース(ハードウェアIP)を共有することを可能にする。各々のOS(又は、ゲストVM)は、同一のコンピュータシステム内の他のOS(又は、ゲストVM)の存在を認識しない。メインCPUへの中断の回数を低減させるために、異なるゲストVMからのワークロードの共有及び調整がマルチメディアハードウェアスケジューラによって管理される。クライアントベース仮想化では、ホストOSは、ゲストVMとユーザアプリケーションとの間でGPU及びマルチメディアハードウェアを共有する。サーバのユースケースは、仮想化を通じたデスクトップ共有(低減したネットワークトラフィックのためのスクリーンデータH.264圧縮)、クラウドゲーミング、仮想デスクトップインタフェース(VDI)及び計算エンジンンの共有を含む。デスクトップ共有は、VCNビデオエンコーダの使用に密接に結びつく。
【0053】
シングルルートI/O仮想化(SR-IOV)は、PCIe物理機能(PF)及び1つ以上の仮想機能(VF)を使用することによるハードウェアリソースへのアクセスの細分化を可能にする、PCIエクスプレス標準規格の拡張版である。ネイティブ(ホストOS)及びそのドライバの下で物理機能が使用される。物理機能のいくつかの実施形態は、対応する物理機能と関連付けられ、仮想化環境の下で有効化される、物理機能及び関連する仮想機能の構成及び管理のためのSR-IOV能力を含むPCIエクスプレス機能として実装される。仮想機能は、システムメモリ、グラフィックメモリ(フレームバッファ)及び様々なデバイス(ハードウェアIPブロック)を共有することを可能にする。各々の仮想機能は、単一の物理機能と関連付けられる。GPUは、OS環境のタイプに応じて、PCIe標準及びPCIe公開毎に1つの物理機能を公開する。
・ネイティブ(ホストOS)環境では、物理機能がネイティブユーザモードドライバ及びカーネルモードドライバによって使用され、全ての仮想機能が無効化される。全てのGPUレジスタは、信頼されたアクセスを介して物理機能にマッピングされる。
・仮想環境では、物理機能がハイパーバイザ(ホストVM)によって使用され、GPUは、ゲストVM毎に1つの仮想機能等のように、PCIe SR-IOV標準毎に特定の数の仮想機能を公開する。各々の仮想機能は、ハイパーバイザによってゲストVMにマッピングされる。レジスタのサブセットのみが各々の仮想機能にマッピングされる。レジスタアクセスは、同時に1つのゲストVMに制限され、すなわち、アクティブゲストVMに制限され、アクセスは、ハイパーバイザによって許可される。ハイパーバイザによってアクセスが許可されたアクティブゲストVMは、「インフォーカス」であると呼ばれる。各々のゲストVMは、VF-PF同期のために使用されるフレームバッファ、コンテキストレジスタ及びドアベルアパーチャを含むよう区画化された、レジスタのセットのサブセットへのアクセスを有する。任意の所定のときに、インフォーカスである1つのゲストVMのみが、フレームバッファのその自身の区画を通じてグラフィックレンダリングを行うことが許可される。他のゲストVMは、アクセスが拒否される。各々の仮想機能は、その自身のシステムメモリ(SM)及びGPUフレームバッファ(FB)を有する。各々のゲストVMは、その自身のユーザモードドライバ及びファームウェアイメージを有する(すなわち、各々のゲストVMは、何れかのマルチメディア機能(カメラ、音声、ビデオ復号及び/又はビデオ符号化)のためのその自身のファームウェアコピーを稼働させる)。ハードウェアリソースの所有権及び制御を実施するために、ハイパーバイザは、CPU MMU及びデバイスIOMMUを使用する。
【0054】
図8は、いくつかの実施形態による、物理機能のためのベースアドレスレジスタ(BAR)を識別する物理機能構成空間800のブロック図である。物理機能構成空間800は、フレームバッファBAR810、ドアベルBAR815、I/O BAR820、及び、レジスタBAR825を含む、物理機能BARのセット805を含む。構成空間800は、特定のレジスタに物理機能BARをマッピングする。例えば、フレームバッファBAR810は、フレームバッファレジスタ830にマッピングし、ドアベルBAR815は、ドアベルレジスタ835にマッピングし、I/O BAR820は、I/O空間840にマッピングし、レジスタBAR825は、レジスタ空間845にマッピングする。
【0055】
図9は、いくつかの実施形態による、仮想機能のためのBARを識別するシングルルートI/O仮想化(SR-IOV)ヘッダの部分900のブロック図である。SR-IOVヘッダの部分900は、プロセシングシステム上で実行される対応するゲストVMへの割り当てに対して利用可能な仮想機能BARを識別する情報を保持するフィールドを含む。図示した実施形態では、部分900は、本明細書で仮想機能BAR901~906と総称される、仮想機能BAR901,902,903,904,905,906を示す。部分900における仮想機能BAR901~906によって示されるマッピングは、異なるゲストVMと関連付けられサブセットにレジスタのセットを区画化するために使用される。
【0056】
図示した実施形態では、部分900における情報は、SR-IOV BARのセット910内のBARにマッピングする。セットは、フレームバッファBAR911、ドアベルBAR912、I/O BAR913、及び、レジスタのセット920内のレジスタの対応するサブセットを指し示す情報を含むレジスタBAR914を含む。セット920は、対応するゲストVMに対してフレームバッファ、ドアベル及びコンテキストレジスタとして使用されるサブセットに区画化される。図示した実施形態では、フレームバッファBAR911は、ゲストVMに対してフレームバッファ921,922を保持するためのレジスタを含む、レジスタのサブセット(アパーチャとも呼ばれる)を識別する情報を含む。ドアベルBAR911は、ゲストVMに対してドアベル923,924を保持するためのレジスタを含む、レジスタのサブセットを識別する情報を含む。I/O BAR913は、ゲストVMに対してI/O空間925,926を保持するためのレジスタを含む、レジスタのサブセットを識別する情報を含む。レジスタBAR914は、ゲストVMに対してコンテキストレジスタ927,928を保持するためのレジスタを含む、レジスタのサブセットを識別する情報を含む。
【0057】
フレームバッファ921,922を含むフレームバッファアパーチャに関して、フレームバッファの実際のサイズがVFBAR901~906(又は、図8に示すPF BAR805)を通じて公開されたサイズよりも大きいいくつかの実施形態では、フレームバッファを区画化するためのGPUと相互作用するために、ハイパーバイザに対する通信チャネルとしてPCI構成空間においてプライベートGPU-IOV能力構造が導入される。GPU-IOV構造により、ハイパーバイザは、仮想機能の各々に異なるサイズのフレームバッファを割り当てることができ、それは、本明細書でフレームバッファ区画化と呼ばれる。
【0058】
GPUドアベルは、アプリケーション又はドライバがアクティブキューにワークを待ち行列に入れたGPUエンジンを示すための機構である。ドアベルは、CPU又はGPU上で稼働するソフトウェアから発行される。GPUで、例えば、CP(コマンドプロセッサ)、SDMA(システムDMAエンジン)又はCU(計算ユニット)によるメモリ書き込みを生成することができる、何れかのクライアントによってドアベルを発行することができる。いくつかの実施形態では、64ビットドアベルBAR912は、物理機能と関連付けられた仮想機能のためのドアベルアパーチャの開始アドレスに指し示す。ドアベルアパーチャ内で、コマンドサブミットのために使用される各々のリングは、リングバッファのコンテンツが変化したことを中断によってシグナリングするためのその自身のドアベルレジスタ923,924を有する。中断は、ビデオCPU(VCPU)によってサービスされ、復号ジョブ又は符号化ジョブは、リングバッファから除去され、CPUによって処理され、CPUは、中断に応じて、専用復号ハードウェア又は符号化ハードウェアでビデオ復号プロセス又はビデオ符号化プロセスを開始する。
【0059】
レジスタは、以下の4個のクラスに分割される。
・ハイパーバイザによってのみハイパーバイザ専用レジスタにアクセスすることができる。それらは、PCIe構成空間内のGPU-IOVレジスタのミラーである。
・物理機能によってのみPF専用レジスタにアクセスすることができる。何れかの仮想機能からの読み込みはゼロを返し、何れかの仮想機能からの書き込みはドロップされる。ディスプレイコントローラレジスタ及びメモリコントローラレジスタは、PF専用である。
・仮想機能及び物理機能の両方によってPFレジスタ又はVFレジスタにアクセスすることができるが、仮想機能専用物理機能(virtual-function-only physical function)は、仮想機能又は物理機能がアクティブ機能になり、したがって、GPUを所有するときのみ、そのようなレジスタにアクセスすることができる。物理機能又は仮想機能についてのレジスタ設定は、機能がアクティブ機能であるときのみ有効である。仮想機能の物理機能がアクティブである場合、そのようなレジスタは、対応するドライバによってアクセス可能でない。
・物理機能及び仮想機能の両方によってPFコピーレジスタ及びVFコピーレジスタにアクセスすることができ、各々の仮想機能又は物理機能は、その自身のレジスタコピーを有する。異なる機能におけるレジスタ設定は、同時に有効であることができる。中断レジスタ、VMレジスタ及びインデックス/データレジスタは、PFコピーカテゴリ及びVFコピーカテゴリに属する。
【0060】
図10は、いくつかの実施形態による、物理機能を実行するホストOS及び物理機能に関連付けられた仮想機能を実行するゲストVMのライフサイクル1000のブロック図である。いくつかの実施形態では、グラフィックドライバは、以下のエンティティに対する組み込みファームウェアイメージを搬送する。
・SMU(システム管理ユニット)
・MC(メモリコントローラ)
・ME(マイクロエンジン-コピーグラフィック)
・PFP(プリフェッチパーサ-CPF)
・CE(コンスタントエンジン-CP)
・計算(計算エンジン)
・システムDMA(sDMA)
・RLC_G
・DMIF(ディスプレイ管理インタフェース)
・UVD、VCE、VCN及びPSP/SAMUセキュリティ。
【0061】
SMU、MC及びRLC_Vに対するファームウェアイメージは、セルフテスト(POST)時間にvBIOS電力においてロードされると共に、他のファームウェアイメージは、ASIC初期化の間、及び、関連するファームウェアエンジンの何れかがSR-IOV仮想化の下に使用される前に、グラフィックドライバによってロードされる。
【0062】
システムBIOS段階1005は、パワーアップブロック1010及びPOSTブロック1015を含む。パワーアップブロック1010の間、GPUは、仮想機能のためのBARサイズを判別するよう、対応するヒューズ又はストラップを読み込む。例えば、GPUは、サイズREG_BAR(32b)、FB_BAR(64b)、DOORBELL_BAR(64b)を読み込むことができる。このケースでは、IO_BARは、仮想機能においてサポートされない。POSTブロック1015の間、システムBIOSは、GPUのSR-IOV能力を認識し、仮想機能の各々についてのBARサイズを判別するよう、GPUとハンドシェイクする。サイズ要件を判別したことに応じて、システムBIOSは、物理機能のための標準PCI構成空間範囲要件に加えて、仮想機能のための総BARサイズに適合するよう、十分な連続したMMIO(メモリマッピングされたI/O)空間を割り当てる。次に、システムBIOSは、ルートポートにおけるARI能力及び物理機能についてのSR-IOV上限におけるARI Capable Hierarchyビットを有効化する。
【0063】
ハイパーバイザ、OSブートアップ及びドライバ初期化段階1020は、ハイパーバイザ初期化/始動ブロック1025、及び、ホストOSブートアップブロック1030を含む。ブロック1025では、ハイパーバイザは、そのユーザインタフェースとしてホストOSをロードする前に、仮想化環境を初期化するよう始動する。ホストOS(又は、ハイパーバイザの一部)が始動する場合、それは、ハードウェア仮想化GPUを制御するGPUVドライバをロードする。GPUVドライバをロードしたことに応じて、GPUVドライバは、ブロック1030においてGPUを初期化するよう、POST VBIOSを実行する。VBIOS POSTの間、ドライバは、PSP FW、SMU FW、RLC_V FW、RLC_G FW、RLC保存/復元リスト、SDMA FW、スケジューラFW、及び、MC FWを含むファームウェア(FW)をロードする。ビデオBIOSは、ファームウェアをコピー及び認証するよう、PSPに対するフレームバッファの終わりに、フレームバッファにその自身の空間を確保する。VBIOS POSTの後、GPUVドライバは、SR-IOVを有効化することができ、1つ以上の仮想機能及び対応する仮想機能段階1035,1040のリソースを構成することができる。
【0064】
第1の仮想機能段階1035では、ハイパーバイザは、ブロック1045において第1のゲストVMに第1の仮想機能を割り振る。SR-IOVが有効化されると、第1のフレームバッファの位置が第1の仮想機能のためにプログラムされる。例えば、レジスタのセットの第1のサブセットは、第1の仮想機能の第1のフレームバッファに割り当てられる。ブロック1050において、第1のゲストVMが初期化され、ゲストグラフィックドライバは、第1の仮想機能を初期化する。第1の仮想機能は、フレームバッファにアクセスするPCIe要求及び他の活動に応答する。最後の段階では、第1のゲストVMがパススルーデバイスとして第1の仮想機能が割り振られる場合、ゲストVMは、GPUデバイスとして仮想機能を認識する。グラフィックドライバは、GPUVドライバとハンドシェイクし、仮想機能のGPU初期化を終了する。初期化が終了すると、第1のゲストVMは、ブロック1055において予め定義されたデスクトップにブートする。ここで、エンドユーザは、リモートデスクトッププロトコルを通じて第1のゲストVMにログインすることができ、第1のゲストVM上で所望のワークを実行することを開始することができる。
【0065】
第2の仮想機能段階1040では、ハイパーバイザは、ブロック1060において第2のゲストVMに第2の仮想機能を割り振り、ブロック1065において第2のゲストVMを初期化し、第2のゲストVMは、ブロック1070においてブートする。この点において、GPU上で同時に稼働する複数の仮想機能及び対応するゲストVMが存在する。ハイパーバイザは、GPU上で稼働するVM-VFにタイムスライスをスケジューリングする。現在実行しているゲストVMに続いて稼働するゲストVMの選択、すなわち、GPUスイッチは、ハイパーバイザ又はGPUスケジューリングスイッチの何れかによって達成される。仮想機能がGPU上のそのタイムスライスを取得する場合、対応するゲストVMは、GPUリソースを保有し、このゲストVM内で稼働しているグラフィックドライバは、GPUを単独で保有するかのように動作する。ゲストVMは、割り当てられたタイムスライスの間に全てのコマンドサブミット及びレジスタアクセスに応答する。
【0066】
マルチメディアスケジューラ(MMSCH)を含まないプロセシングユニットでは、マルチメディアエンジンのプログラミング及びそれらのライフサイクル制御は、メインx64 CPU又はx86 CPUによって達成される。そのようなモードでは、ビデオ符号化及び/又はビデオ復号ファームウェアローディング及び初期化は、それが最初にロードされるときに仮想機能ドライバによって達成される。稼働時間において、各々のロードされた仮想機能インスタンスは、その自身のファームウェアイメージを有し、ファームウェア及びレジスタコンテキスト復元、その自身のキューからの1つのジョブのみの取り出しを実行し、全フレームを符号化し、コンテキスト保存を実行する。仮想機能インスタンスがアイドル時間に到達するとき、それは、ハイパーバイザが次の仮想機能をロードすることができることをハイパーバイザに通知する。
【0067】
存在する場合、MMSCHは、マルチメディアエンジンを管理する際のCPUロールを想定し、引き継ぐ。それは、仮想機能の初期化及びセットアップ、コンテキスト保存/復元、ドアベルプログラミングによる仮想機能へのゲストVMにおけるジョブサブミットを実行し、物理機能及び仮想機能のリセットを実行すると共に、誤り復元をハンドリングする。MMSCHのいくつかの実施形態は、低電力VCPU上でファームウェアとして実装される。MMSCH及びMMSCH初期化のためのファームウェアは、そのファームウェアがビデオBIOS(vBIOS)に含まれるプラットフォームセキュリティプロセッサ(PSP)によって実行される。PSPは、自動インクリメントによるADDRESS/DATAレジスタペアを使用することによって、MMSCHファームウェアイメージをダウンロードし、その構成レジスタをプログラミングし、MMSCHファームウェアイメージをリセット外の状態にする。MMSCHが稼働していると、ハイパーバイザは、SR-IOV能力及びGPU-IOV能力をプログラミングすることを通じて、マルチメディア仮想機能のセットアップを実行する。ハイパーバイザは、物理機能及び仮想機能のためのBARを構成し、ゲストVMにおいてマルチメディア初期化を実行し、ゲストVMが順次に稼働することを可能にする。マルチメディア初期化は、VCE及びUVD(又は、VCN)仮想レジスタ並びに対応するファームウェアを保持するために、各々のゲストVMにおけるメモリ割り当てを必要とする。次に、ハイパーバイザは、ファームウェアがロードされたアパーチャのアドレス及びサイズをセットアップすることによって、VCE/UVDハードウェア又はVCNハードウェアに対するレジスタをプログラミングする。ハイパーバイザは、ファームウェアエンジンに対するアドレス開始及びスタックのサイズ、並びに、それらの命令及びデータキャッシュを定義したレジスタをセットアップする。次に、ハイパーバイザは、ローカルメモリインタフェース(LMI)構成レジスタをプログラミングし、対応するVCPUからリセットを除去する。
【0068】
MMSCHのいくつかの実施形態は、以下の活動を実行する。
・PF機能及びVF機能のためのマルチメディアエンジン初期化。ベアメタルプラットフォームにより、ドライバは、ダイレクトMMIOレジスタ読み込み/書き込みを通じてVCEエンジン又はUVDエンジンを初期化する。仮想化の下、MMエンジン仮想化は、1つの機能のジョブに対して作用する能力を有すると共に、他の機能は、初期化を受ける。この能力は、MMSCHに初期化メモリディスクリプタをサブミットすることによってサポートされ、MMSCHは、第1のコマンドサブミットが発生するときの後の時間に、VFのためのマルチメディアエンジン初期化をスケジューリング及びトリガする。
・PF機能及びVF機能のためのマルチメディアコマンドサブミット。ベアメタルプラットフォームにより、VCE及びUVD(又は、VCN)のためのコマンドサブミットは、VCE_RB_WPTR等のMMIO WPTRレジスタを通じて行われる。仮想化の下、コマンドサブミットは、GFX、SDMA及び計算コマンドサブミット等のドアベル書き込みに切り替える。リング/キューにコマンドパッケージをサブミットするために、GFXドライバは、対応するドアベル位置に書き込む。ドアベル位置への書き込みがあると、MMSCHは、このVF及びリング/キューについての通知を受信する。MMSCHは、機能及びリング/キュー毎に内部的にそのような情報を保存する。この機能がアクティブ機能になると、MMSCHは、リング/キューに対する累積されたコマンドパッケージを処理することを開始するよう対応するエンジンに通知する。
・マルチメディアワールドスイッチは、現在稼働しているマルチメディアVFインスタンスの間での次のマルチメディアVFインスタンスへの切り替えを意味する。マルチメディアワールドスイッチは、MMSCHファームウェアと、現在稼働中及び次に稼働するマルチメディアファームウェアインスタンスのUVD/VCE/VCNファームウェアとの間でのいくつかのコマンド交換により達成される。コマンドは、MMSCH及びVCE/UVD/VCNにおいて発見された単純なINDEX/DATA共通レジスタセットを介して交換される。いくつかの実施形態では、以下のコマンドが存在する。
・gpu_idle(fcn_id)-MMエンジンが現在の機能に対する何れかのコマンドを処理することを停止するよう依頼される。MMエンジンが機能に対して現在作用している場合、MMSCHは、MMSCHがMMエンジンから現在ジョブ完了を受信するまで待機し、この機能に対する任意の更なるコマンドを処理することを停止し、そうでなければ、MMSCHは、コマンド完了を即時に返す。
・gpu_save_state(fcn_id)-MMSCHがコンテキスト保存領域に現在の機能fcn_idのエンジン状態を保存する。
・gpu_load_state(fcn_id)-MMSCHがコンテキストSRAM領域からエンジンレジスタに機能(fcn-id)のエンジン状態をロードする。
・gpu_run(fcn_id)-MMSCHが機能(VFID=fcn_id)に対するジョブ(コマンド)を処理することを開始するようMMエンジンに通知する。
・gpu_context_switch(fcn_id、nxt_fcn_id)-MMSCHが機能VFID=fcn_idに対するジョブを処理することを終了するようMMエンジンを待機し、nxt_fcn_id引数によって規定された次の機能に対してジョブを処理するよう切り替える。
・gpu_enable_hw_autoscheduling(active_functions)-このコマンドがレジスタアレイにリスト化されたVM機能の間でのワールドスイッチを実行するようMMSCHに通知する。MMエンジンワールドスイッチの間、リスト内の各々の機能は、レジスタによって規定されたタイムスライスの間にアクティブなままである。
・gpu_init(fcn_id)-このコマンドが特定の機能(fcn_id)に対するエンジンが初期化を受けることを通知する。
・gpu_disable_hw_autoscheduling(active_functions)-このコマンドがリスト化された機能に対してMMエンジンワールドスイッチを実行することを停止するようMMSCHに通知する。このコマンドを受信すると、MMSCHは、現在アクティブな機能がそのジョブ(フレーム)を終了することを待機し、次いで、gpu_idleコマンド及びgpu_save_stateコマンドを実行し、更なる演算のために現在アクティブな機能に留まる。
・gpu_disable_hw_scheduling_and_context_switch-このコマンドがワールドスイッチを実行することを停止するようMMSCHに依頼する。このコマンドを受信すると、MMSCHは、現在アクティブな機能がそのジョブを終了することを待機し、次いで、更なる演算のために次の機能に切り替えるgpu_context_switchコマンドを実行する。
・UVDコマンド実行又はVCEコマンド実行がページフォールトに直面するとき、MC/VMがページフォールトに関するUVD/VCE HWブロックを通知し、ホストに中断を起こす、ベアメタルの下でのマルチメディアページフォールトハンドリング。その後、UVD/VCE及びKMDは、以下を実行する。
・UVDがページフォールト通知を受信するとき、それは、ページを発生させたリング/キューによる内部中断を通じてUVDファームウェアに通知する。
・UVDファームウェアは、このリング/キューについての全ての要求をドレイン(ドロップ)する。
・UVDファームウェアは次いで、エンジンをリセットし、VCPUをリブートする。
・VCPUがリブートした後、UVDファームウェアは、その自身のリングバッファにおいていずれかの新たなコマンドをポーリングする。
・KMDがページフォールト中断を受信するとき、KMDは、どのリング/キューがページフォールトを有するかを発見するよう、マルチメディア状態レジスタを読み込む。ページフォールトリング情報を取り出した後、KMDは、障害リング/キューの読み込み/書き込みポインタをゼロにリセットし、FWがサブミットされたコマンドを処理することを再度継続/開始することができるように、ページフォールト誤りがハンドリングされたことをUVD/VCE/VCNファームウェアに示す。
・上記ハンドリングスキームでは、UVD/VCEファームウェアとKMDドライバとの間のハンドシェイクは、UVD_PF_STATUSレジスタ及びVCE_PAGE_FAULT_STATUSレジスタを通じて行われる。
・SR-IOV仮想化の下、ページフォールトハンドシェイクスキームは、依存する他のPFレジスタ及びVFレジスタが存在しないので、メモリ位置方式である。
【0069】
図11は、いくつかの実施形態による、マルチメディアユーザモードドライバ1100及びカーネルモードドライバ1105のブロック図である。VCE/UVD/VCNエンジン等のハードウェアアクセラレータは、復号帯域幅及び符号化帯域幅が制限されており、したがって、ハードウェアアクセラレータは、稼働時間の間に有効化された仮想機能の全てを適切にサービスすることが常に可能でない。ビデオGPU等のプロセシングユニットのいくつかの実施形態は、対応するゲストVMのプロファイルに基づいて、特定の仮想機能に、VCE/UVD/VCN符号化エンジン帯域幅又は復号エンジン帯域幅を配列し又は割り振る。ゲストVMのプロファイルが、ビデオ符号化帯域幅が必要とされることを示す場合、GPUは、グラフィックドライバが仮想機能を初期化することを開始する前に、メールボックスレジスタを通じて仮想機能に伝達されるメッセージを生成する。加えて、GPUは、仮想機能が何れかのジョブサブミットを開始する前に、仮想機能帯域幅要件をスケジューラに通知する。例えば、VCEは、VCEは、約2M MB/秒(1MBが16×16ピクセルに等しい)の最大帯域幅を有するH.264ビデオ符号化が可能である。最大帯域幅情報は、最大サーフェス幅及び高さ(例えば、4096×2160)に従ってビデオBIOSテーブルに記憶される。初期化の間、GPUドライバは、符号化エンジン帯域幅割り振りを管理するための初期の総利用可能帯域幅として帯域幅情報を取り出す。GPUのいくつかの実施形態は、プロファイル/区画に帯域幅情報を変換する。
【0070】
図示した実施形態では、マルチメディアユーザモードドライバ1100及びカーネルモードドライバ1105は、機能ブロックによって多層化及び構造化される。動作中、マルチメディアユーザモードドライバ1100は、オペレーティングシステム(OS)エコシステム1115へのインタフェース1110を含む。インタフェース1110のいくつかの実施形態は、異なるグラフィックパイプライン呼び出しへのインタフェース等のソフトウェアコンポーネントを含む。例えば、マルチメディアユーザモードドライバ1100は、様々なサイズの及び様々な色空間にあるサーフェスを割り当て、フォーマットをタイリングするとき、インタフェース1110において実装されたUDXインタフェース及びDXXインタフェースを使用する。いくつかのケースでは、マルチメディアユーザモードドライバ1100は、インタフェース1110において実装されたダイレクトDX9及びDX11ビデオDDIインタフェース表示を有する。マルチメディアユーザモードドライバ1100は、例えば、Windows(登録商標)、Linux(登録商標)及びAndroid(登録商標) OSエコシステムにおける他のメディアAPI及びフレームワークへの相互作用インタフェースを提供する、図7に示すMFレイヤ730等のメディアファンデーションとインタフェースするために使用されるプライベートAPIセットを実装する。マルチメディアユーザモードドライバ1100のいくつかの実施形態は、外部コンポーネント(例えば、AMF及びAMD UI CCC制御パネル)から移されたイベントを使用する。マルチメディアユーザモードドライバ1100は、同期オブジェクト(フラグ、セマフォ、ミューテックス)、タイマ、ネットワーキングソケットインタフェース及びビデオセキュリティ等のOS独立使用を可能にする、ユーティリティ機能及びヘルパ機能のセットを実装する。マルチメディアユーザモードドライバ1100の底部内部構造のいくつかの実施形態は、C++において記述されたコアベースクラスオブジェクトの周辺で編成される。マルチメディアコアは、OS及びハードウェア独立であり、以下に対するサポートをもたらす、ベースクラスのセットを実装する。
・複数のCODEC及びビデオ解像度をサポートする圧縮ビットストリームビデオ復号
・YUV色空間又はRGB色空間内のサーフェスからH.264、H.265、VP9及びAV1圧縮ビットストリームへのビデオ符号化
・受信されたサーフェス又は生成されたサーフェスの色空間変換及びアップスケーリング/ダウンスケーリングをサポートするビデオレンダリング。色域補正、インターレース解除、顔検出、肌色補正のような他のビデオレンダリング機構が存在し、AMDマルチメディア特徴セレクタ(AFS)及び能力マネージャ(CM)によって自動で有効化され、それらは、グラフィック計算エンジンに対してシェーダとして稼働する。
【0071】
マルチメディアユーザモードドライバ1100に対して導出されたクラスは、OS特有である。例えば、Core Vista(Windows(登録商標) 7~Windows(登録商標) 10を介して、Windows(登録商標) XPからの全ての変形をサポートするWindows(登録商標) OSエコシステムに対する)、Core Linux(登録商標)、及びCore Android(登録商標)に対するマルチメディアコア機能が存在する。それらのコアは、他のOS環境へのマルチメディアソフトウェアスタックのポータビリティをもたらす。デバイスポータビリティは、下位層デバイスを自動検出するマルチメディアハードウェアレイヤにより保証される。カーネルモードドライバ1105との通信は、IOCTL(エスケープ)呼び出しによって達成される。
【0072】
カーネルモードドライバ1105は、全てのカーネル関連デバイス特有呼び出し(DDI呼び出し等)を受信するOSカーネルへのカーネルインタフェース1120を含む。カーネルインタフェース1120は、異なる機能を抽出するカーネルモードドライバ1105の適切なモジュールに呼び出しをディスパッチするディスパッチャを含む。カーネルインタフェース1120は、カーネルにおけるOSベースサービス呼び出しとの相互作用を制御するOSマネージャを含む。また、カーネルモードドライバ1105は、マルチメディア復号(UVDエンジンノード)、マルチメディア符号化(VCEエンジンノード)、及び、マルチメディアビデオコーデックネクスト(APU SOCに対するVCNノード)のためのエンジンノード等のカーネルモードモジュール1125を含む。カーネルモードモジュール1125は、ハードウェア初期化をもたらし、ハードウェア制御されたリングバッファのシステムへの復号ジョブ又は符号化ジョブのサブミットを可能にする。トポロジ変換レイヤ1130は、サービスからノードを隔離し、カーネルモードドライバ1105におけるソフトウェアモジュール1135へのインタフェースを提供する。ソフトウェアモジュール1135の例は、復号ジョブ又は符号化ジョブの受信及びハンドリングのためのリングバッファへのアクセスを提供し、タイリングを制御し、電力ゲーティングを制御し、ユーザモードドライバから受信されたIOCTLメッセージに応答する、ハードウェア特有モジュールである、swUVD、swVCE及びswVCNを含む。また、カーネルモードドライバ1105は、カーネルHVモード1145にあるハイパーバイザを通じたハードウェアIP1140へのアクセスを提供する。
【0073】
図12は、いくつかの実施形態による、仮想化OSエコシステム内でのマルチメディア能力共有をサポートするメッセージシーケンスの第1の部分1200である。メッセージシーケンスは、図1に示すプロセシングシステム100のいくつかの実施形態において実装される。第1の部分1200は、ビデオBIOS(VBIOS)、ハイパーバイザ(HV)、物理機能に対するカーネルモードドライバトポロジ変換レイヤ(TTL-PF)、仮想機能に対するマルチメディアUMD、仮想機能に対するカーネルモードドライバ(TTL-VF)、及び、仮想機能に対するカーネルモードドライバ(KMD)の間で交換されるメッセージを示す。物理機能と仮想機能との間の通信は、ドアベルシグナリングによるメールボックスメッセージ交換プロトコルを介して達成される。いくつかの実施形態では、メールボックスは、共通レジスタセットを介して動作すると共に、ドアベルシグナリングは、物理機能又は仮想機能における中断ベース通知が発生することを可能にする。他の実施形態では、通信は、ドアベルシグナリングによるローカル共有メモリを介して達成される。
【0074】
VBIOSは、システムがSR-IOV能力を有するかどうかを判別し、そうである場合、VBIOSは、ハイパーバイザにフレームバッファのフラグメンテーションを示す情報を提供する(メッセージ1202において)。情報は、UVD/VCE/VCNに対するフレームバッファ細分化を示す特徴フラグを含むことができる。物理機能に関連付けられた仮想機能の各々のサポートされるインスタンスは、自動識別されたデバイスに特有のその自身のフレームバッファ内のレコードを取得する(メッセージ1204において)。このレコードは、所定のデバイス上で持続することができる全ての活動の合計である、1080p60、4K30、4K60、8K24、又は、8K60等の最大マルチメディア能力を示す。いくつかの実施形態では、帯域幅は、復号機能若しくは符号化機能、又は、両方の機能を採用した、1つの仮想機能のみによって消費される。例えば、総マルチメディア能力が4K60である場合、それは、各々が1080p60復号を行う4個の仮想機能をサポートすることができ、又は、各々が1080p24復号を行う最大で10個の仮想機能をサポートすることができ、又は、各々が1080p60復号を行う2個の仮想機能をサポートすることができ、又は、各々が1080p60ビデオ符号化を行う2個の仮想機能をサポートすることができる。
【0075】
仮想機能上で稼働するゲストOS/VM上のアプリケーションが復号のユースケース又は符号化のユースケースの何れかのためにマルチメディアドライバをロードする場合、ロードされたマルチメディアドライバは、現在符号化プロファイル又は復号プロファイルを認識するようになり、KMDドライバのTTLレイヤに要求を送信する(メッセージ1206において)。この要求は、以下の何れかとして定式化されてもよい。
1)ソースの水平サイズ及び垂直サイズ並びにリフレッシュレートを示す復号演算若しくは符号化演算の現在解像度(いわゆる720p24、108030等)、又は、
2)復号される必要がある符号化済みフレーム又は圧縮ビットストリームコンテンツ内のマクロブロックの総数
【0076】
現在仮想機能におけるTTL-VFは、要求を受信し、物理機能のTTLレイヤにそれを転送する(メッセージ1208)。TTL-PFは、最大復号帯域幅又は符号化帯域幅を認識し、各々の仮想機能のマルチメディア利用のレコードを有する。
【0077】
符号化能力又は復号能力が利用可能でない場合、PF TTLはTTL-VFに通知し(メッセージ1210を介して)、TTL-VFは次いで、同一の仮想機能においてUMDに通知する(メッセージ1212を介して)。メッセージ1212に応じて、UMDは、仮想機能においてマルチメディアドライバをロードするアプリケーション要求に失敗し、アプリケーションは、活動1214において終了する。
【0078】
符号化能力又は復号能力が利用可能である場合、PF TTLは、そのブックキーピングレコードを更新し、TTL-VFに通知し(メッセージ1216を介して)、TTL-VFは、ファームウェアをダウンロードし、UVD/VCE又はVCNマルチメディアエンジンを開き及び構成する(メッセージ1218において)要求をKMDに送信する(メッセージ1218を介して)。次に、KMDは、稼働することが可能になり、仮想機能におけるKMDノードは、第1のジョブサブミットを受け付けることが可能なTTL-VFに通知する(メッセージ1220において)。メッセージ1220に応じて、TTL-VFは、その構成プロセスが完了したことを仮想機能に対するUMDに通知する(メッセージ1222において)。
【0079】
図13は、いくつかの実施形態による、仮想化OSエコシステム内でのマルチメディア能力共有をサポートするメッセージシーケンスの第2の部分1300を示す図である。メッセージシーケンスの第2の部分1300は、図1に示すプロセシングシステム100のいくつかの実施形態において実装され、図12に示す第1の部分1200に続いて実行される。第2の部分1300は、ビデオBIOS(VBIOS)、ハイパーバイザ(HV)、物理機能に対するカーネルモードドライバトポロジ変換レイヤ(TTL-PF)、仮想機能に対するマルチメディアUMD、仮想機能に対するカーネルモードドライバTTL(TTL-VF)、及び、仮想機能に対するカーネルモードドライバ(KMD)の間で交換されるメッセージを示す。
【0080】
標準ランタイム動作の間、選択された時間周期内のマルチメディアアプリケーション(例えば、UMD)は、TTL-VFに符号化ジョブ要求又は復号ジョブ要求をサブミットし(メッセージ1305を介して)、TTL-VFは、KMDにメッセージ1310を送信することによって、要求されたジョブをサブミット及び実行するよう適切なノードに通知する。
【0081】
ゲストVM上でのアプリケーションライフサイクルの最後のステップの間、アプリケーションは、TTL-VFにおけるマルチメディアドライバに閉鎖する要求を発行する。TTL-VFは、メッセージ1315を介してTTL-VFに要求を転送する。TTL-VFは、対応するマルチメディアノードに閉鎖要求を発行し(メッセージ1320を介して)、対応するマルチメディアノードは、ノードが閉鎖されたことをTTL-VFに通知する(メッセージ1325を介して)。マルチメディアノードの非活性化が成功すると、TTL-VFは、TTL-PFにシグナリングし(メッセージ1330を介して)、次に、TTL-PFは、符号化帯域幅又は復号帯域幅を再度請求し、そのブックキーピングレコードを更新する(活動1335において)。
【0082】
仮想機能に対する1つのサブミットされたジョブが完了すると、TTL-VFは、ジョブが仮想機能に対して実行されたことをマルチメディアスケジューラにシグナリングする。マルチメディアスケジューラは、仮想機能を非活性化する。マルチメディアスケジューラは次いで、次のアクティブ仮想機能へのワールドスイッチを実行する。マルチメディアスケジューラのいくつかの実施形態は、仮想機能を活性化及びサービスするためにラウンドロビンスケジューラを使用する。マルチメディアスケジューラの他の実施形態は、対応する仮想機能によって使用されるキューのタイプに基づいて優先度が評価される、動的優先度ベーススケジューリングを使用する。更なる他の実施形態では、マルチメディアスケジューラは、優先度ベースキューシステム(例えば、最小待ち時間を伴うSkypeアプリケーションに対する符号化ジョブのためのタイムクリティカルキュー、無線ディスプレイセッションに対する符号化ジョブのためのリアルタイムキュー、非リアルタイムビデオトランスコーディングのための汎用符号化キュー、又は、汎用復号キュー)を使用しているゲストVMよりも低い解像度(例えば、ジョブ周期が短い)の復号ジョブ又は符号化ジョブを有するゲストVMにサービスするレートモノトニックスケジューラを実装する。
【0083】
図12及び図13に開示されたメッセージシーケンスのいくつかの実施形態は、各々のゲストOS/VMにサービスする多くの仮想機能の中で1つのマルチメディアハードウェアエンジンの共有をサポートする。これは、各々のゲストOS/VMがその自身の専用マルチメディアハードウェアを有する印象を生じさせるが、1つのハードウェアインスタンスが多くの仮想クライアントをサービスするよう共有される。最も単純なケースでは、仮想機能の数は2であり、それは、ホスト及びゲストOSがハードウェアアクセラレーテッドビデオ復号又はハードウェアアクセラレーテッドビデオ符号化を同時に稼働させることを可能にする。更なる別の実施形態では、16個程度の仮想機能がサポートされるが、他の実施形態は、より多くの又はより少ない仮想機能をサポートする。
【0084】
図12及び図13に開示されたメッセージシーケンスのいくつかの実施形態は、様々なコンピュータクライアント及びサーバシステムにおいて使用される。クライアントベース仮想化では、ホストOSは、仮想マシン(VM)とユーザアプリケーションとの間でGPU及びマルチメディアハードウェアインテレクチュアルプロパティ(IP)ブロックを共有する。サーバのユースケースは、デスクトップ共有(キャプチャされたスクリーンデータは、低減したネットワークトラフィックに対して圧縮されたH.264である)、クラウドゲーミング、仮想デスクトップインタフェース(VDI)、及び、計算エンジンの共有を含む。
【0085】
以下の実施例を参照して、本願を更に理解することができる。
実施例1:プロセシングユニットであって、
ハイパーバイザ及びゲスト仮想マシン(VM)を実行するように構成されたカーネルモードユニットと、
物理機能を実装するように構成された固定機能ハードウェアブロックであって、前記物理機能に対応する仮想機能は、前記ゲストVMに公開される、固定機能ハードウェアブロックと、
レジスタのセットであって、前記レジスタのセットのサブセットは、前記仮想機能に関連付けられた情報を記憶するように割り当てられており、前記固定機能ハードウェアブロックは、対応するサブセットに記憶された前記情報に基づいて、何れかのゲストVMに対して何れかの仮想機能を実行する、レジスタのセットと、
を備える、プロセシングユニット。
【0086】
実施例2:前記レジスタのセットは、前記仮想機能に割り当てられた最大量の空間に対応するいくつかのサブセットに区画化される、実施例1のプロセシングユニット。
【0087】
実施例3:前記レジスタのセットは、前記仮想機能に割り当てられた最小量の空間に対応するいくつかのサブセットに最初に区画化され、前記サブセットの数は、前記仮想機能の特性に基づいて後に修正される、実施例1のプロセシングユニット。
【0088】
実施例4:前記レジスタのセットの各々のサブセットは、前記サブセットに関連付けられた仮想機能によって影響されるフレームを記憶するためのフレームバッファと、前記仮想機能の動作状態を定義するためのコンテキストレジスタと、前記仮想機能が実行のためにスケジューリングされる準備ができたことをシグナリングするためのドアベルと、を含む、実施例1~3の何れかのプロセシングユニット。
【0089】
実施例5:前記ゲストVMのうち第1のゲストVMからのシグナリングに応じて、第1の時間周期内に前記仮想機能のうち第1の仮想機能を実行するように前記第1のゲストVMをスケジューリングするように構成されたスケジューラを更に備える、実施例4のプロセシングユニット。
【0090】
実施例6:前記ハイパーバイザは、前記第1の時間周期の間に前記レジスタのセットの第1のサブセットへの前記第1のゲストVMのアクセスを許可し、前記ハイパーバイザは、前記第1の時間周期の間に、スケジューリングされていないゲストVMによる前記レジスタのセットへのアクセスを拒否する、実施例5のプロセシングユニット。
【0091】
実施例7:前記固定機能ハードウェアブロックは、前記レジスタのセットの前記第1のサブセット内の第1のコンテキストレジスタに記憶された情報に基づいて、前記第1の仮想機能を実行するように構成されている、実施例6のプロセシングユニット。
【0092】
実施例8:前記第1の仮想機能を実装するために使用されるマルチメディア機能のユーザモードドライバ及びファームウェアイメージのうち少なくとも1つは、前記固定機能ハードウェアブロックにインストールされる、実施例7のプロセシングユニット。
【0093】
実施例9:前記第1のゲストVMは、前記第1のゲストVMが実行のためにスケジューリングされる準備ができたことをシグナリングするように、前記第1のサブセット内のドアベルレジスタに情報を書き込む、実施例7のプロセシングユニット。
【0094】
実施例10:前記第1のゲストVMは、前記ゲストVMに関連付けられた優先度と、スケジューリングされる準備ができた他のゲストVMに関連付けられた他の優先度と、に基づいてスケジューリングされる、実施例9のプロセシングユニット。
【0095】
実施例11:前記第1のゲストVMは、前記第1の時間周期の間、前記第1の仮想機能を使用して、前記第1のサブセット内のフレームバッファに記憶されたフレームに対してグラフィックレンダリングを実行する、実施例9のプロセシングユニット。
【0096】
実施例12:前記第1のゲストVMは、前記第1の時間周期の間に実行を完了したことに応じて、前記ハイパーバイザに通知し、前記第1のサブセット内の前記ドアベルレジスタは、前記第1の時間周期の間に実行を完了したことに応じてクリアされる、実施例11のプロセシングユニット。
【0097】
実施例13:方法であって、
ハイパーバイザにおいて、プロセシングユニットにおいて実行される第1のゲスト仮想マシン(VM)から、前記プロセシングユニット内の固定機能ハードウェアブロックに実装された物理機能に対応する第1の仮想機能にアクセスする要求を受信することと、
前記ハイパーバイザから前記第1のゲストVMに、前記プロセシングユニット内のレジスタのセットの第1のサブセットへのアクセスを許可することであって、前記第1のサブセットは、前記第1の仮想機能に関連付けられた情報を記憶する、ことと、
前記第1のサブセットに記憶された前記情報に基づいて、前記第1のゲストVMに対して前記第1の仮想機能を実行するように前記固定機能ハードウェアブロックを構成することと、
前記第1のゲストVMを使用して、前記第1の仮想機能を実装するように構成された前記固定機能ハードウェアブロックを使用して、前記第1のサブセットに記憶されたフレームに対してグラフィックレンダリングを実行することと、を含む、
方法。
【0098】
実施例14:前記レジスタのセットを、前記仮想機能に割り当てられた最大量の空間に対応するいくつかのサブセットに区画化することを更に含む、実施例13の方法。
【0099】
実施例15:前記レジスタのセットを、前記仮想機能に割り当てられた最小量の空間に対応するいくつかのサブセットに区画化することと、
前記サブセットの数を、前記仮想機能の特性に基づいて修正することと、
を更に含む、実施例13の方法。
【0100】
実施例16:前記レジスタのセットの前記第1のサブセットは、前記第1の仮想機能によって影響される前記フレームを記憶するためのフレームバッファと、前記仮想機能の動作状態を定義するためのコンテキストレジスタと、前記仮想機能が実行のためにスケジューリングされる準備ができたことをシグナリングするためのドアベルレジスタと、を含む、実施例13~15の何れかの方法。
【0101】
実施例17:前記第1のゲストVMからのシグナリングに応じて、第1の時間周期内に前記第1の仮想機能を実行するように第1のゲストVMをスケジューリングすることを更に含む、実施例16の方法。
【0102】
実施例18:前記ハイパーバイザから、前記第1の時間周期の間に前記レジスタのセットの前記第1のサブセットへの前記第1のゲストVMのアクセスを許可することを更に含み、前記ハイパーバイザは、前記第1の時間周期の間に、スケジューリングされていないゲストVMによる前記レジスタのセットへのアクセスを拒否する、実施例17の方法。
【0103】
実施例19:前記第1の仮想機能を構成することは、前記固定機能ハードウェアブロックに前記第1の仮想機能を実装するために使用されるマルチメディア機能のユーザモードドライバ及びファームウェアイメージのうち少なくとも1つをインストールすることを含む、実施例18の方法。
【0104】
実施例20:前記第1のゲストVMから、前記第1のゲストVMが実行のためにスケジューリングされる準備ができたことをシグナリングするように、前記第1のサブセット内の前記ドアベルレジスタに情報を書き込むことを更に含む、実施例18の方法。
【0105】
実施例21:前記第1のゲストVMをスケジューリングすることは、前記ドアベルレジスタから前記情報を読み込んだことに応じて、前記第1のゲストVMをスケジューリングすることを含む、実施例20の方法。
【0106】
実施例22:前記第1のゲストVMをスケジューリングすることは、前記ゲストVMに関連付けられた優先度と、スケジューリングされる準備ができた他のゲストVMに関連付けられた他の優先度と、に基づいて、前記第1のゲストVMをスケジューリングすることを含む、実施例21の方法。
【0107】
実施例23:前記フレームに対して前記グラフィックレンダリングを実行することは、前記第1の時間周期の間、前記第1の仮想機能を使用して前記第1のサブセット内のフレームバッファに記憶されたフレームに対してグラフィックレンダリングを実行することを含む、実施例21の方法。
【0108】
実施例24:前記第1のゲストVMは、前記第1の時間周期の間に実行を完了したことに応じて、別のゲストVMに対して別の仮想機能をロードすることができることを前記ハイパーバイザに通知し、前記第1のサブセット内の前記ドアベルレジスタは、前記第1の時間周期の間に実行を完了したことに応じてクリアされる、実施例21の方法。
【0109】
実施例25:方法であって、
プロセシングユニット上で実行される第1のゲスト仮想マシン(VM)を使用して、前記プロセシングユニットに実装されたレジスタのセットの第1のサブセットに記憶されたフレームに対してグラフィックレンダリングを実行することであって、前記グラフィックレンダリングは、前記第1のサブセットに記憶された第1のコンテキスト情報に基づいて、前記第1の仮想機能を実装するように構成された固定機能ハードウェアブロックに実装された物理機能に対応する第1の仮想機能を使用して実行される、ことと、
ハイパーバイザにおいて、前記物理機能に対応する第2の仮想機能にアクセスするための第2のゲストVMからの要求を検出することと、
前記ハイパーバイザにおいて、前記要求に応じて、前記第2の仮想機能を実行するように前記固定機能ハードウェアブロックを構成するワールドスイッチを実行することと、を含む、
方法。
【0110】
実施例26:前記第2のゲストVMは、前記第2のゲストVMがスケジューリングされる準備ができたことを示すように、前記レジスタのセットの第2のサブセット内のドアベルレジスタに情報を書き込み、前記要求を検出することは、前記ドアベルレジスタから前記情報を読み込むことを含む、実施例25の方法。
【0111】
実施例27:前記要求を検出したことに応じて、スケジューリングされた時間に開始する時間周期の間、前記第2のゲストVMを実行のためにスケジューリングすることを更に含む、実施例26の方法。
【0112】
実施例28:前記時間周期の間に前記第2のゲストVMを実行のためにスケジューリングすることは、前記時間周期の間に前記レジスタのセットへの前記第2のゲストVMの排他的アクセスを許可することを含む、実施例27の方法。
【0113】
実施例29:前記ワールドスイッチを実行することは、前記スケジューリングされた時間に前記ワールドスイッチを実行することを含む、実施例27の方法。
【0114】
実施例30:前記ワールドスイッチを実行することは、前記レジスタのセットの前記第2のサブセットに記憶された第2のコンテキスト情報に基づいて、前記固定機能ハードウェアブロックを構成することを含む、実施例29の方法。
【0115】
実施例31:前記固定機能ハードウェアブロックを構成することは、前記第2の仮想機能を実装するために使用されるマルチメディア機能のユーザモードドライバ及びファームウェアイメージのうち少なくとも1つをインストールすることを含む、実施例30の方法。
【0116】
実施例32:前記第2のゲストVMを使用して、前記第2の仮想機能を使用して前記レジスタのセットの前記第2のサブセットに記憶されたフレームに対してグラフィックレンダリングを実行することを更に含む、実施例30の方法。
【0117】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0118】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0119】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0120】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
【国際調査報告】