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

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

▶ インテル コーポレイションの特許一覧

特許7359858仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング
<>
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図1
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図2A
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図2B
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図3A
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図3B
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図4
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図5
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図6
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図7
  • 特許-仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-02
(45)【発行日】2023-10-11
(54)【発明の名称】仮想化された環境におけるパススルーデバイスのための直接メモリアクセストラッキング
(51)【国際特許分類】
   G06F 9/455 20180101AFI20231003BHJP
   G06F 12/109 20160101ALI20231003BHJP
【FI】
G06F9/455 150
G06F12/109 120
【請求項の数】 25
(21)【出願番号】P 2021550264
(86)(22)【出願日】2019-03-28
(65)【公表番号】
(43)【公表日】2022-08-03
(86)【国際出願番号】 CN2019080020
(87)【国際公開番号】W WO2020191697
(87)【国際公開日】2020-10-01
【審査請求日】2022-03-23
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ティエン,クン
(72)【発明者】
【氏名】ジャオ,ヤン
(72)【発明者】
【氏名】ジャン,ユ
【審査官】木村 雅也
(56)【参考文献】
【文献】米国特許第9977690(US,B2)
【文献】米国特許出願公開第2017/0147511(US,A1)
【文献】米国特許出願公開第2010/0180276(US,A1)
【文献】米国特許出願公開第2017/0153908(US,A1)
【文献】国際公開第2019/013965(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455
G06F 12/109
(57)【特許請求の範囲】
【請求項1】
性能向上計算システムであって、
デバイスであって、前記デバイスが仮想マシンにパススルーされ、直接制御される、デバイスと、
プロセッサと、
フロントエンドドライバ命令のセットを含むシステムメモリであって、前記フロントエンドドライバ命令は、前記プロセッサによって実行されるときに、前記性能向上計算システムに、
前記デバイスのゲストドライバからのマップ要求をハイパーバイザに通知することであって、前記マップ要求は、前記デバイスが仮想化された実行環境においてゲストメモリページにアクセスしようとする試みに関連付けられる、通知することと、
前記ゲストメモリページが前記仮想化された実行環境でピン留めされているかどうかを判定することと、
前記ゲストメモリページが前記仮想化された実行環境でピン留めされていない場合、前記ハイパーバイザにマップハイパーコールを送信して、前記ゲストメモリページを前記仮想化された実行環境でピン留めさせることと、を行わせる、システムメモリと、を含む、性能向上計算システム。
【請求項2】
前記ハイパーバイザおよび前記フロントエンドドライバ命令にアクセス可能な共有メモリをさらに含み、前記マップ要求を前記ハイパーバイザに通知するために、前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、ダイレクトメモリアクセス(DMA)ビットマップ内のゲストページフレーム番号に対応するビットを設定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記DMAビットマップは、前記共有メモリ内に位置する、請求項1に記載の性能向上計算システム。
【請求項3】
前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、前記ゲストドライバからのアンマップ要求に応答して前記ビットをクリアさせ、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、請求項2に記載の性能向上計算システム。
【請求項4】
前記ハイパーバイザおよび前記フロントエンドドライバ命令にアクセス可能な共有メモリをさらに含み、前記ゲストメモリページがピン留めされているかどうかを判定するために、前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットがセットされているかどうかを判定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは前記共有メモリ内に位置する、請求項1~3のいずれか一項に記載の性能向上計算システム。
【請求項5】
前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、
前記ゲストメモリページがピン留めされている場合、前記マップハイパーコールをバイパスすることと、
全てのアンマップハイパーコールをバイパスするすることと、を行わせる、請求項1~4のいずれか一項に記載の性能向上計算システム。
【請求項6】
フロントエンドドライバ命令のセットを含む少なくとも1つのコンピュータ可読記憶媒体であって、前記フロントエンドドライバ命令は、性能向上計算システムによって実行されるときに、前記性能向上計算システムに、
デバイスのゲストドライバからのマップ要求をハイパーバイザに通知することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御され、前記マップ要求は、前記デバイスが仮想化された実行環境においてゲストメモリページにアクセスしようとする試みに関連付けられる、通知することと、
前記ゲストメモリページが前記仮想化された実行環境でピン留めされているかどうかを判定することと、
前記ゲストメモリページが前記仮想化された実行環境でピン留めされていない場合、前記ハイパーバイザにマップハイパーコールを送信して、前記ゲストメモリページを前記仮想化された実行環境でピン留めさせることと、を行わせる、少なくとも1つのコンピュータ可読記憶媒体。
【請求項7】
前記マップ要求を前記ハイパーバイザに通知するために、前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、ダイレクトメモリアクセス(DMA)ビットマップ内のゲストページフレーム番号に対応するビットを設定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記DMAビットマップは、前記ハイパーバイザ及び前記フロントエンドドライバ命令にアクセス可能な共有メモリ内に位置する、請求項6に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項8】
前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、前記ゲストドライバからのアンマップ要求に応答して前記ビットをクリアさせ、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、請求項7に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項9】
前記ゲストメモリページがピン留めされているかどうかを判定するために、前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットがセットされているかどうかを判定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記ハイパーバイザおよび前記フロントエンドドライバ命令にアクセス可能な共有メモリ内に位置する、請求項6~8のいずれか一項に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項10】
前記フロントエンドドライバ命令は、実行されるときに、前記性能向上計算システムに、
前記ゲストメモリページがピン留めされている場合、前記マップハイパーコールをバイパスすることと、
全てのアンマップハイパーコールをバイパスすることと、を行わせる、請求項6~9のいずれか一項に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項11】
性能向上計算システムであって、
デバイスであって、前記デバイスが仮想マシンにパススルーされ、直接制御される、デバイスと、
プロセッサと、
ハイパーバイザ命令のセットを含むシステムメモリであって、前記ハイパーバイザ命令は、前記プロセッサによって実行されるときに、前記性能向上計算システムに、
ゲストメモリページが仮想化された実行環境でピン留めされていることを判定することと、
前記ゲストメモリページがピン留めされていた場合に、ダイレクトメモリアクセス(DMA)ビットマップに基づいて、デバイスのゲストドライバからのアンマップ要求が発行されたことを判定することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御されるものであり、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、判定することと、
前記アンマップ要求が発行されていた場合、前記ゲストメモリページをピン留め解除することと、を行わせる、性能向上計算システム。
【請求項12】
フロントエンドドライバ及び前記ハイパーバイザ命令にアクセス可能な共有メモリをさらに含み、前記アンマップ要求が発行されたことを判定するために、前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、前記DMAビットマップ内のゲストページフレーム番号に対応するビットがセットされていないことを判定させ、前記ゲストページフレーム番号が前記ゲストメモリページに関連付けられ、前記DMAビットマップは、前記共有メモリ内に位置する、請求項11に記載の性能向上計算システム。
【請求項13】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットをクリアさせ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、共有メモリ内に位置する、請求項11または12に記載の性能向上計算システム。
【請求項14】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、レース条件が検出された場合、前記ビットをリセットさせ、前記レース条件が検出されない場合、前記ゲストメモリページはピン留め解除される、請求項13に記載の性能向上計算システム。
【請求項15】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、
フロントエンドドライバからマップハイパーコールを受信することと、
前記マップハイパーコールに応答して、前記ゲストメモリページをピン留めすることと、
前記マップハイパーコールに応答して、ピン留めされたビットマップ内の前記ゲストページフレーム番号に対応するビットをセットすることであって、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記共有メモリ内に位置する、セットすることと、を行わせる、請求項13または14に記載の性能向上計算システム。
【請求項16】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、前記仮想マシンの作成時にピン留め操作をバイパスさせる、請求項11~15のいずれか一項に記載の性能向上計算システム。
【請求項17】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、
オーバーコミットポリシーに従って、前記ピン留め解除されたゲストメモリページをリクラメーションすることと、
前記ゲストメモリページが汚れていることをライブマイグレーションマネージャに通知することと、を行わせる、請求項11~16のいずれか一項に記載の性能向上計算システム。
【請求項18】
ハイパーバイザ命令のセットを含む少なくとも1つのコンピュータ可読記憶媒体であって、前記ハイパーバイザ命令は、性能向上計算システムによって実行されるときに、前記性能向上計算システムに、
ゲストメモリページが仮想化された実行環境でピン留めされていることを判定することと、
前記ゲストメモリページがピン留めされていた場合に、ダイレクトメモリアクセス(DMA)ビットマップに基づいて、デバイスのゲストドライバからのアンマップ要求が発行されたことを判定することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御されるものであり、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、判定することと、
前記アンマップ要求が発行されていた場合、前記ゲストメモリページをピン留め解除することと、を行わせる、少なくとも1つのコンピュータ可読記憶媒体。
【請求項19】
前記アンマップ要求が発行されたことを判定するために、前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、前記DMAビットマップ内のゲストページフレーム番号に対応するビットがセットされていないことを判定させ、前記ゲストページフレーム番号が前記ゲストメモリページに関連付けられ、前記DMAビットマップは、フロントエンドドライバ及び前記ハイパーバイザ命令にアクセス可能な共有メモリ内に位置する、請求項18に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項20】
前記ハイパーバイザ命令は、実行されると、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットをクリアさせ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、フロントエンドドライバがアクセス可能な共有メモリ内に配置される、請求項18または19に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項21】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、レース条件が検出された場合、前記ビットをリセットさせ、前記レース条件が検出されない場合、前記ゲストメモリページはピン留め解除される、請求項20に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項22】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、
フロントエンドドライバからマップハイパーコールを受信することと、
前記マップハイパーコールに応答して、前記ゲストメモリページをピン留めすることと、
前記マップハイパーコールに応答して、ピン留めされたビットマップ内の前記ゲストページフレーム番号に対応するビットをセットすることであって、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記フロントエンドドライバにアクセス可能な共有メモリ内に位置する、セットすることと、を行わせる、請求項20または21に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項23】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、前記仮想マシンの作成時にピン留め操作をバイパスさせる、請求項18~22のいずれか一項に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項24】
前記ハイパーバイザ命令は、実行されるときに、前記性能向上計算システムに、
オーバーコミットポリシーに従って、前記ピン留め解除されたゲストメモリページをリクラメーションすることと、
前記ゲストメモリページが汚れていることをライブマイグレーションマネージャに通知することと、を行わせる、請求項18~23のいずれか一項に記載の少なくとも1つのコンピュータ可読記憶媒体。
【請求項25】
請求項18~24のいずれか一項に記載の前記ハイパーバイザ命令によって規定される命令を実行するための手段を含む装置。
【発明の詳細な説明】
【技術分野】
【0001】
実施形態は、一般に、仮想化された実行環境に関する。より詳細には、実施形態は、仮想化された環境におけるパススルーデバイスのための直接メモリアクセス(DMA)トラッキングに関する。
【背景技術】
【0002】
仮想化された実行環境は、一般に、複数の仮想マシン(VM)が、同じ物理マシン(例えば、ホスト)上でオペレーティングシステムを独立して実行することを可能にする。このような場合、仮想マシンモニタ(VMM、ハイパーバイザなど)は、VMを作成して実行することができる。いくつかのアーキテクチャでは、デバイスはVMにパススルーされ、VMによって直接制御される。例えば、「パススルー」デバイスは、DMAトランザクションを使用して、VMMとは無関係に「所有者」VMのシステムメインメモリにアクセスすることができる。VMMがDMAトランザクションを追跡できないと、VMのブート待ち時間(例えば、VM作成時にすべてのゲストメモリページをVMMがピン留めするため)、メモリのオーバーコミットの問題(例えば、VMのピン留めされたページをリクラメーション及びスワップすることができないため)、および/またはVMライブマイグレーション中の許容できない長いサービスシャットダウン時間(例えば、VMのすべてのゲストメモリページが汚されているとみなされるため)をもたらすことがある。
【図面の簡単な説明】
【0003】
実施形態の様々な利点は、以下の明細書および添付の特許請求の範囲を読むことによって、および以下の図面を参照することによって、当業者に明らかになるであろう。
【0004】
図1】一実施形態によるDMAアーキテクチャの一例のブロック図である。
図2A】一実施形態によるマッピング動作を行うためにフロントエンドドライバを操作する方法の一例のフローチャートである。
図2B】一実施形態によるDMAビットマップを介してアンマッピング操作を行うためにフロントエンドドライバを操作する方法の一例のフローチャートである。
図3A】一実施形態によるハイパーバイザを操作する方法の一例のフローチャートである。
図3B】一実施形態によるピン留め操作を行うためにハイパーバイザを操作する方法の一例のフローチャートである。
図4】一実施形態によるピン留めマネージャを操作する方法の一例のフローチャートである。
図5】一実施形態による性能向上計算システムの一例のブロック図である。
図6】一実施形態による半導体パッケージ装置の一例の説明図である。
図7】一実施形態によるプロセッサの一例のブロック図である。
図8】一実施形態によるマルチプロセッサベースの計算システムの一例のブロック図である。
【発明を実施するための形態】
【0005】
ここで、図1を参照すると、ゲスト12(例えば、VM)が、パススルーデバイス16(例えば、グラフィックスプロセッサ、ストレージドライブ、ネットワークインターフェースカード/NIC)が、システムメモリ(図示せず)と共に、ゲスト12を生成および実行するハイパーバイザ18(例えば、VMM)の知識なしに、1つ以上のDMAトランザクションを行うことを可能にするDMAアーキテクチャが示されている。より詳細には、図示されたゲスト12は、ハイパーバイザ18によってモニタされないパス(例えば、ワイヤ)上のハイパーバイザ18をバイパスする1つ以上のメッセージ40を介してパススルーデバイス16を直接制御する。一般に、ゲスト12内のDMAフロントエンドドライバ22(例えば、協調情報DMA/ciDMAドライバ)は、ハイパーバイザ18内のDMAバックエンドドライバ28(例えば、ciDMAデバイスモデル)と協調し、パススルーデバイス16が協調した方法でDMAトランザクションを行うことができることを確実にし、ハイパーバイザ18がパススルーデバイス16上のDMAアクティビティを追跡できるようにする。
【0006】
より詳細には、図示されたフロントエンドドライバ22は、共有メモリ24を使用して、パススルーデバイス16のゲストデバイスドライバ36(例えば、ゲストドライバ)からのマップ要求14をハイパーバイザ18に通知し、マップ要求14は、パススルーデバイス16が仮想化された環境内のゲストメモリページにアクセスしようとする試みに関連付けられる。フロントエンドドライバ22はまた、共有メモリ24を使用して、ゲストメモリページがピン留め(pinned)された(例えば、ロックされた、固定された、ワイヤードされた、および/またはその他の方法でリクラメーション処理またはスワップ処理されることを防止された)かどうかを判定し得る。ゲストメモリページがピン留めされている場合、通知は、単に共有メモリ24を更新するだけの「出口なし(exit-less)」である。ゲストメモリページがピン留めされていない場合、図示されたフロントエンドドライバ22は、出るためにマップハイパーコール26をDMAバックエンドドライバ28に送信し、マップハイパーコール26は、ハイパーバイザ18に、入出力メモリマップユニット(IOMMU)27内のゲストメモリページをピン留めさせる。
【0007】
図示されたIOMMU 27は、各パススルーデバイスがランダムシステムメモリを攻撃する代わりに、その所有者のメモリにDMAのみをすることができるように、パススルーデバイス間でDMA活動を分離するハードウェアエージェントである。IOMMU27は、ハイパーバイザ18によって構成されるデバイスごとのDMA再マッピング構造を提供し得る。ほとんどのデバイスはDMAページフォールトを許容しないため、DMA再マッピング構造でゲストメモリページをピン留めする必要があり得る。ハイパーバイザ18がパススルーデバイスのDMA活動についての洞察を持たないため、ゲストメモリページの全てがVM作成時にピン留めされる従来の解決策とは異なり、図示されたアーキテクチャ10は、ハイパーバイザ18が、現在DMAバッファとして使用されているゲストメモリページを正確にピン留めすることを可能にする。したがって、ピン留めされたメモリセットの合計は、所与の時間においてはるかに小さい。
【0008】
マップハイパーコール26に応答して、バックエンドドライバ28は、ピン留めされるべきゲストメモリページのための要求をメモリマネージャ42に送信し得る。一実施形態では、ゲストメモリページをピン留めすることは、ページがリクラメーション処理されたり、別のページとスワップ処理されたりすることを防止するやり方でメモリを割り当てることと、IOMMU仕様に従ってDMA再マッピング構造を更新することと、を含む。図示されたバックエンドドライバ28は、フロントエンドドライバ22およびピン留めマネージャ30(例えば、ゲストDMA/gDMAマネージャ)に、ゲストメモリページが共有メモリ24を介してピン留めされたことを通知する。
【0009】
同様に、図示されたフロントエンドドライバ22は、共有メモリ24を使用して、その後、ハイパーバイザ18のピン留めマネージャ30に、ゲストデバイスドライバ36によってアンマップ要求38が発行されたことを通知する。一実施形態では、アンマップ要求38は、ゲストメモリページへのアクセスを中止するためのパススルーデバイス16の試みに関連付けられる。したがって、ピン留めマネージャ30は、周期的にスキャンして、ゲストメモリページがピン留めされていることを判定し、かつアンマップ要求38が発行されたことを判定し得る。このような場合、ゲストメモリページはリクラメーション可能であり、図示されたピン留めマネージャ30は、ゲストメモリページをピン留め解除する(unpin)ために非同期要求をメモリマネージャ42に送信する。また、ピン留めマネージャ30は、共有メモリ24を更新して、ゲストメモリページがピン留め解除されたことを反映し得る。このような実施形態では、アンマップ要求38の通知は、常にexit-lessであり、共有メモリの更新のみを含む。
【0010】
一実施形態では、ハイパーバイザ18は、ゲスト12の作成時に、すべてのゲストメモリに対するピン留め操作をバイパスする。したがって、DMAページのみが任意の時刻にピン留めされ、VMブート待ち時間が大幅に低減される。さらに、メモリオーバーコミットエージェント44は、オーバーコミットポリシーに従って、ピン留め解除されたゲストメモリページ(および任意の他の非DMAページ)をリクラメーションし得る。したがって、図示されたDMAアーキテクチャ10は、利用可能なメモリの量を増加させ、これは性能を向上させる。
【0011】
追加的に、図示されたピン留めマネージャ30は、ゲストメモリページが汚れている(例えば、変更されたが、まだディスクに書き出されていない)ことをライブマイグレーションマネージャ46に通知する。したがって、ライブマイグレーションマネージャ46は、ゲスト12のすべてのゲストメモリページを汚れているとみなす必要はない。むしろ、あるプラットフォーム/サーバから別のプラットフォーム/サーバへゲスト12をマイグレーションするときに、ライブマイグレーションマネージャ46は、DMAトランザクションのターゲットであったゲストメモリページに対してのみ反復的な事前コピー操作を実行し得る。したがって、図示されたアーキテクチャ10は、VMライブマイグレーション中のサービスシャットダウン時間を低減する。
【0012】
一例では、共有メモリ24は、DMAビットマップ32を含み、DMAビットマップ32内の各ビットはゲストページフレーム番号(GFN、例えば、特定のゲストメモリページに関連付けられる)に対応する。したがって、マップ要求14をハイパーバイザ18に通知するために、フロントエンドドライバ22は、マップされるゲストメモリページのGFNに対応するビットをセットし得る。一実施形態では、フロントエンドドライバ22は、ハイパーコールを発行する必要なく、アンマップされるゲストメモリページのGFNに対応するビットをクリアすることによって、アンマップ要求38のハイパーバイザ18に通知する。
【0013】
同様に、図示された共有メモリ24は、ピン留めされたビットマップ34も含み、ピン留めされたビットマップ34の各ビットは、GFNおよびゲストメモリページに対応する。したがって、フロントエンドドライバ22及びピン留めマネージャ30にゲストメモリページがピン留めされていることを通知するために、バックエンドドライバ28は、ゲストメモリページのGFNに対応するビットをセットする。追加的に、ゲストメモリページがピン留め解除されていることをフロントエンドドライバ22及びバックエンドドライバ28に非同期に通知するために、ピン留めマネージャ30は、ゲストメモリページのGFNに対応するビットをクリアしてもよい。一例では、ハイパーバイザ18は、ゲストメモリページをピン留めし、レース状態が検出されると、ゲストメモリページのGFNに対応するビットをリセットする。
【0014】
レース条件に関して、DMAビットマップ32およびピン留めビットマップ34をチェックすることは、アトミックでない2つの操作である。したがって、ピン留めマネージャ30がDMAビットマップ32内でクリアされたビットを見つけた後、およびピン留めマネージャ30がピン留めビットマップ34をクリアする前に、マップ要求14が発生する可能性がある。その場合、要求されたページは、ゲストフロントエンドドライバ22に既にピン留めされているように見えることがあり、ハイパーコールが発生する。このような場合、ピン留めマネージャ30は、以下により詳細に説明するように、メモリマネージャ42にピン止め解除要求を送信する前に、DMAビットマップ32およびピン留めビットマップ34を再検査する。
【0015】
DMAビットマップ32およびピン留めビットマップ34は、マルチレベルページング構造として一緒に実装され得る。その場合、各ページテーブルエントリ(PTE)は、DMAマップ/ピン留めステータスまたは他の許可情報を示すために、複数のビットを含んでもよい。したがって、ホスト/ゲストは、同じPTEエントリ内の異なるビットを更新するために、アトミック比較および交換(cmpxchg)命令を使用し得る。
【0016】
ゲスト12とハイパーバイザ18との間のインターフェースは、単に、フロントエンドドライバ22が無視できるコストでゲスト12のDMA活動の情報を収集するので、「情報(informational)」とみなすことができる。図示されたフロントエンドドライバ22は、従来の仮想入出力メモリマップユニット(vIOMMU)が提供するような、ゲスト12にDMA再マッピング機能を提供しない限り、「ダム(dumb)」とみなすことができる。したがって、ゲストDMAマップ/アンマップ要求に出会ったときに、物理入出力変換ルックアサイドバッファ(IOTLB)エントリを無効にする必要はないかもしれない。
【0017】
追加的に、ゲスト12とハイパーバイザ18との間のインターフェースは、ハイパーバイザ18(例えば、ホスト)とゲスト12との間で双方向の情報共有が発生するので、「調整された」とみなしてもよい。ゲスト12は、現在DMAマップされているページビットマップをホストと共有し、ホストは、現在ピン留めされているページビットマップをゲスト12と共有する。マップ要求のVM出口は大幅に低減され(例えば、マップ対象のページが現在ピンされていないときのみ)、アンマップ要求のVM出口は完全に削除される(例えば、物理的なIOTLBを無効にする必要がないため)。ピン留めマネージャ30(例えば、ホストスレッド)は、両方のビットマップ32、34を周期的にスキャンし、発見的ページピン留め解除を行う(例えば、ピン留めされたページが現在DMAマップされていない場合)。ピン留め解除ページは、その後、リクラメーションまたはスワップされ得る。
【0018】
したがって、図示されたアーキテクチャ10は、パススルーデバイス16の軽量DMAトラッキングを行うためにパラ仮想化インターフェースを提供する。一実施形態では、アーキテクチャ10はまた、DMA管理フレームワーク48、1つ以上の他のゲストデバイスドライバ50および1つ以上のDMAドライバ52(例えば、ソフトウェアIOTLBドライバ、ハードウェアIOMMUドライバなど)を含む。一実施形態では、ゲストOSは、DMAドライバ52のうちの1つのみが所定の時間に有効にされることを保証する。
【0019】
図示されたアーキテクチャ10はまた、既存のvIOMMUアプローチと比較して、はるかに低い性能コストを提供し、したがって、主要なゲストOS (オペレーティングシステム)ディストリビューションに含めるための道を開く。例えば、全てのアンマップハイパーコールは、削除されてもよく、マップハイパーコールは、要求されたページがピンビットマップ34内にない場合にのみ必要とされてもよい。マップハイパーコールの数は、DMAページの局所性を増加させることによってさらに減少させることができ、これは、所与の時間にピン留めページの総サイズを低減する。例えば、フロントエンドドライバ22は、マッピングキャッシュメカニズム(例えば、最も最近に使用された/LRUポリシーに基づく)を実装することができる。同様に、ピン留めマネージャ30は、頻繁にマップされるページ上の不必要なピン留め解除及びハイパーコールオーバーヘッドを低減するために、ピン留めキャッシュメカニズム(例えば、LRUポリシーにも基づく)を実装してもよい。
【0020】
また、アーキテクチャ10は、パススルーデバイス16が関与する場合、無視できる程度の遅延で、高速なVM作成時間を達成することができる。VMは、ページがピン留めされていない状態で開始することができる(例えば、従来の解決策に比べてブート時のピンページのオーバーヘッドが低減する)。ゲストDMAページは、実際のドライバの使用に基づいてオンデマンドでピン留めされることがありますが、これは主にブート後に発生する。
【0021】
実際、DMAリマッピング機能は、パフォーマンスのオーバーヘッドとエコシステムの準備(例えば、共有仮想メモリ/SVM対応デバイスの不足)の両方のために、現在、仮想化配備において広く使用されている特徴ではない。このような場合、前述のDMA再マッピングは、より多くのパススルーデバイスの使用を可能にする良好なトレードオフであり得る。
【0022】
いくつかの使用では、図示されたアーキテクチャ10は、vIOMMUと組み合わせることができる。例えば、ゲスト12は、vIOMMU上で割り込みリマッピング機能のみを有してもよい。このような場合、ciDMAは、vIOMMU上の特別なDMA機能(例えば、パススルーと同様)として定義することができ、同じ利点がある。さらに、ゲスト12は、vIOMMUのDMA再マッピング能力(例えば、データプレーンデベロッパキット/DPDKまたはSVMをサポートするために、ゲスト物理アドレスに対するIOVA->GPA/IO仮想アドレス)を必要とすることがある。このような場合、ゲスト12によるマップ/アンマップ操作は、ホストIOMMU IOTLBエントリを無効にするためにトラップされてもよい。ここで、ciDMAにおける双方向情報共有は、ハイパーコールを低減するのに役立たないかもしれない。しかしながら、ピン留めマネージャ30は、依然として発見的にページをピン留め解除するために活用されてもよい。
【0023】
図2Aは、マッピング操作を行うためにフロントエンドドライバを操作する方法60を示す。本方法60は、一般に、例えば、既に説明したDMAフロントエンドドライバ22(図1)のようなフロントエンドドライバに実装することができる。より具体的には、本方法60は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、プログラマブルROM(PROM)、ファームウェア、フラッシュメモリなどの機械またはコンピュータ可読記憶媒体に記憶された論理命令のセット、例えば、プログラマブル論理アレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブル論理デバイス(CPLD)などの設定可能な論理、例えば、特定用途向け集積回路(ASIC)、相補型金属酸化物半導体(CMOS)、トランジスタ-トランジスタ論理(TTL)などの回路技術を使用した固定機能ハードウェア論理における、1つ以上のモジュール、またはそれらの任意の組み合わせとして実装されてもよい。
【0024】
例えば、方法60に示される操作を実行するためのコンピュータプログラムコードは、JAVA(登録商標)、SMALLTALK(登録商標)、C++などのオブジェクト指向プログラミング言語と、「C」プログラミング言語または類似のプログラミング言語などの従来の手続き型プログラミング言語とを含む、1つ以上のプログラミング言語の任意の組み合わせで書かれてもよい。追加的に、論理命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、状態設定データ、集積回路の設定データ、電子回路および/またはハードウェアに固有の他の構造コンポーネント(例えば、ホストプロセッサ、中央処理装置/CPU、マイクロコントローラなど)をパーソナライズする状態情報を含んでもよい。
【0025】
図示された処理ブロック62は、パススルーデバイス(例えば、VMにパススルーされ、VMによって直接制御されるデバイス)のゲストドライバからマップ要求を受信(例えば、インターセプト)し、マップ要求は、パススルーデバイスが仮想化された実行環境においてゲストメモリページにアクセスする試みに関連付けられる。ハイパーバイザは、図示のブロック64において、共有メモリへのアップデートを介してマップ要求を通知される。したがって、通知には、通常、データの更新およびイベントの送信(例えば、出口なし通知)が含まれる。より詳細には、ブロック64は、DMAビットマップ内のGPNに対応するビットを設定することを含むことができ、GPNはゲストメモリページに関連付けられる。さらに、DMAビットマップは、ハイパーバイザおよびフロントエンドドライバにアクセス可能な共有メモリ内に位置してもよい。
【0026】
ブロック66において、ゲストメモリページがピン留めされているかどうかを判定がなされ得る。一実施形態では、ブロック66は、ピン留めされたビットマップ内のGPNに対応するビットがセットされているかどうかを判定することを含み、ピン留めされたビットマップは、ハイパーバイザおよびフロントエンドドライバにアクセス可能な共有メモリ内にも位置する。ブロック66においてゲストメモリページがピン留めされていないと判定された場合、図示されたブロック68はハイパーバイザにマップハイパーコールを送信する。さもなければ、方法60は、ハイパーバイザにマップハイパーコールを送信することなく終了する。図示された方法60は、いかなるアンマップハイパーコールを実行しない。
【0027】
図2Bは、フロントエンドドライバを操作して、DMAビットマップを介してアンマップ操作を行う方法70を示す。本方法70は、一般に、例えば、既に説明したDMAフロントエンドドライバ22(図1)のようなフロントエンドドライバで実施することができる。より詳細には、本方法70は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械またはコンピュータ可読記憶媒体に記憶された論理命令のセット、例えば、PLA、FPGA、CPLDなどの設定可能な論理、例えば、ASIC、CMOS、TTLなどの回路技術を使用した固定機能ハードウェア論理における、1つ以上のモジュール、またはそれらの任意の組み合わせとして実装されてもよい。
【0028】
図示された処理ブロック72は、パススルーデバイスのゲストドライバからのアンマップ要求を受信することを提供し、アンマップ要求は、パススルーデバイスがゲストメモリページへのアクセスを中止する試みに関連付けられる。一実施形態では、ブロック74は、DMAビットマップ内のGPNに対応するビットをクリアし、GPNはゲストメモリページに関連付けられる。図示の例では、DMAビットマップは、ハイパーバイザおよびゲストドライバにアクセス可能な共有メモリに位置する。必須のホスト処理がないため、アンマップハイパーコールは行われない。必須のホスト処理に関しては、DMAリマッピング機能がゲストに公開されないため、物理的なIOMMUキャッシュをフラッシュする必要がない。したがって、ホストは、ピン留めされたマネージャが最新の状態を後に取得するときまで、ページをピン留めしたままにしておくことができる。
【0029】
図3Aは、ハイパーバイザを操作する方法80を示す。この方法80は、一般に、例えば、既に説明したハイパーバイザ18(図1)のようなハイパーバイザで実装することができる。より詳細には、本方法80は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械またはコンピュータ可読記憶媒体に記憶された論理命令のセット、例えば、PLA、FPGA、CPLDなどの設定可能な論理、例えば、ASIC、CMOS、TTLなどの回路技術を使用した固定機能ハードウェア論理における、1つ以上のモジュール、またはそれらの任意の組み合わせとして実装されてもよい。
【0030】
図示された処理ブロック82は、ゲストメモリページが仮想化された実行環境においてピン留めされていることを判定する。一実施形態では、ブロック82は、ピン留めされたビットマップ内のビットがセットされていることを非同期に検出することを含み、このビットはゲストメモリページのGPNに対応する。すでに述べたように、ピン留めされたビットマップは、共有メモリに記憶され得る。ブロック84は、DMAビットマップに基づいて、パススルーデバイスのゲストドライバからのアンマップ要求が発行されたことを判定することを提供する。DMAビットマップは、共有メモリ(例えば、ハイパーバイザおよびゲストドライバによってアクセス可能)に位置し得る。図示の例では、アンマップ要求は、パススルーデバイスがゲストメモリページへのアクセスを中止する試みに関連付けられる。一例において、ブロック84は、DMAビットマップ内のGPNに対応するビットがセットされていないことを判定することを含み、このGPNはゲストメモリページに関連付けられる。
【0031】
ブロック86は、ゲストメモリページをピン留め解除する。一実施形態では、ブロック86は、ゲストメモリページをピン留め解除するようにメモリマネージャに指示することと、ピン留めされたビットマップ内のGPNに対応するビットをクリアすることと、を含み、GPNはゲストメモリページに関連付けられる。図示された方法80はまた、ブロック88において、オーバーコミットポリシーに従ってゲストメモリページをリクラメーションし、ブロック90において、ゲストメモリページが汚れていることをライブマイグレーションマネージャに通知する。
【0032】
図3Bは、ピン留め操作を行うためにハイパーバイザを操作する方法100を示す。本方法100は、一般に、例えば、既に説明したハイパーバイザ18(図1)のようなハイパーバイザで実装することができる。より具体的には、本方法100は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械またはコンピュータ可読記憶媒体に記憶された論理命令のセット、例えば、PLA、FPGA、CPLDなどの設定可能な論理、例えば、ASIC、CMOS、TTLなどの回路技術を使用した固定機能ハードウェア論理における、1つ以上のモジュール、またはそれらの任意の組み合わせとして実装されてもよい。
【0033】
図示された処理ブロック102は、フロントエンドドライバからマップハイパーコールを受信し、マップハイパーコールに応答して、ピン留めされたビットマップ内のGPNに対応するビットがブロック104でセットされる。図示の例では、GPNはGPNと関連付けられ、ピン留めされたビットマップは、フロントエンドドライバおよびハイパーバイザにアクセス可能な共有メモリ内に位置する。一実施形態では、ゲストメモリページは、マップハイパーコールに応答してブロック106でピン留めされる。ブロック106は、メモリマネージャがゲストメモリページをピン留めすることを要求することを含むことができる。図示されたブロック108はハイパーコールを完了し、フロントエンドドライバに戻る。
【0034】
図4は、ピン留めマネージャを操作する方法110を示す。方法110は、一般に、例えば、既に説明したピン留めマネージャ30(図1)のようなピン留めマネージャで実装することができる。より具体的には、本方法110は、RAM、ROM、PROM、ファームウェア、フラッシュメモリなどの機械またはコンピュータ可読記憶媒体に記憶された論理命令のセット、例えば、PLA、FPGA、CPLDなどの設定可能な論理、例えば、ASIC、CMOS、TTLなどの回路技術を使用した固定機能ハードウェア論理における、1つ以上のモジュール、またはそれらの任意の組み合わせとして実装されてもよい。
【0035】
ピン留めされたページが与えられると、図示された処理ブロック112は、ページが現在DMAビットマップにセットされているかどうかを判定する。もしそうでなければ、ブロック114はピン留めされたビットマップ内のビットをクリアし得る。一実施形態では、フロントエンドドライバがブロック112と114との間でマップ要求を行うことができる場合、ブロック116において、DMAビットマップが再チェックされるべきかどうか(例えば、レース検出が有効であるかどうか)が判定される。このような場合、ピン留めされたビットマップ内のビットがまだ有効であるため、マップハイパーコールは発行されず、ピン留めマネージャはそのようなレースを捕捉し、直ちにピン留め解除操作を終了する。そのようなレースがブロック118で検出され得る場合、ピン留めマネージャは、ピン留めビットマップ内のビットをリセットする。次に、図示された方法110はブロック120に進み、別のページを見つける。ブロック116において、DMAビットマップが再チェックされないと判定された場合、方法110は、ブロック122においてページをピン留め解除し、ブロック120に進む。ブロック112において、ページが現在DMAビットマップにセットされていないと判定された場合、図示された方法110は直接ブロック120に進む。
【0036】
ここで、図5を参照すると、性能向上計算システム150が示されている。システム150は、一般に、計算機能(例えば、パーソナルデジタルアシスタント/PDA、ノートコンピュータ、タブレットコンピュータ、変換可能なタブレット、サーバ)、通信機能(例えば、スマートフォン)、画像化機能(例えば、カメラ、ビデオカメラ)、メディア再生機能(例えば、スマートテレビ/TV)、ウェアラブル機能(例えば、時計、アイウェア、ヘッドウェア、履物、ジュエリー)、車両機能(例えば、自動車、トラック、オートバイク)、ロボット機能(例えば、自律型ロボット)、またはそれらの任意の組み合わせを有する電子デバイス/プラットフォームの一部とすることができる。図示の例では、システム150は、システムメモリ156に結合された集積メモリコントローラ154を有するホストプロセッサ152(例えば、中央処理装置/CPU)を含む。
【0037】
図示されたシステム150はまた、システムオンチップ(SoC)として、ホストプロセッサ152と共に実装された入力出力(IO)モジュール158と、半導体ダイ162上のグラフィックスプロセッサ160とを含む。図示されたIOモジュール158は、例えば、ディスプレイ164(例えば、タッチスクリーン、液晶ディスプレイ/LCD、発光ダイオード/LEDディスプレイ)、ネットワークコントローラ166(例えば、有線および/または無線NIC)、および大容量記憶装置168(例えば、ハードディスクドライブ/HDD、光ディスク、ソリッドステートドライブ/SSD、フラッシュメモリ)と通信する。
【0038】
一実施形態では、SoC 162は、仮想化された実行環境であり、ホストプロセッサ152および/またはIOモジュール158は、一般に、1つ以上のVM(例えば、ゲスト)をセットアップおよび実行するVMM/ハイパーバイザを実行する。追加的に、グラフィックスプロセッサ160は、VMMの知識なしに、システムメモリ156との間で1つ以上のDMAトランザクションを行うパススルーデバイスであってもよい。したがって、VMは、VMMにモニタされていないか、または隠されていないパス(例えば、ワイヤ)上でVMMをパススルーする1つ以上のメッセージを介して、グラフィックスプロセッサ160を直接制御することができる。
【0039】
このような場合、ホストプロセッサ152および/またはIOモジュール158は、システムメモリ156および/または大容量記憶装置168から取り出された命令170を実行して、すでに説明した方法60(図2A)、方法70(図2B)、方法80(図3A)、方法100(図3B)および/または方法4(図110)の1つ以上の態様を実行してもよい。したがって、図示された命令170は、フロントエンドドライバ命令を含み、これは、ホストプロセッサ152および/またはIOモジュール158によって実行されるときに、計算システム150に、グラフィックスプロセッサ160のゲストドライバからのマップ要求をハイパーバイザに通知させ、マップ要求は、グラフィックスプロセッサ160が仮想化された実行環境内のゲストメモリページにアクセスしようとする試みに関連付けられる。フロントエンドドライバ命令は、実行されるときに、ゲストメモリページがピン留めされているかどうかを計算システム150に判定させ、ゲストメモリページがピン留めされていない場合にマップハイパーコールをハイパーバイザに送信させることもできる。一実施形態では、フロントエンドドライバ命令は、実行されるときに、ゲストメモリページがピン留めされている場合、マップハイパーコールをバイパスし、アンマップハイパーコールを完全にバイパスする。
【0040】
命令170はまた、ホストプロセッサ152および/またはIOモジュールによって実行されるとき、計算システム150にVMの作成時にピン留め操作をバイパスさせるハイパーバイザ命令を含み得る。また、ハイパーバイザ命令の実行により、計算システム150に、フロントエンドドライバからマップハイパーコールを受信し、マップハイパーコールに応答してゲストメモリページをピン留めし、マップハイパーコールに応答してピン留めビットマップ内のGFNに対応するビットをセットするようにさせる。このような場合、GFNはゲストメモリページに関連付けられ、ピン留めされたビットマップは共有メモリ内にある。
【0041】
一実施形態では、ハイパーバイザ命令は、実行されるときに、計算システムに、ゲストメモリページが仮想化された実行環境内にピン留めされていることを判定させ、DMAビットマップに基づいて、ゲストドライバからのアンマップ要求が発行されたことを判定させる。このような場合、ハイパーバイザ命令の実行により、計算システム150にゲストメモリページをピン留め解除させる。一例では、ハイパーバイザ命令の実行により、計算システム150に、オーバーコミットポリシーに従って、ピン留め解除されたゲストメモリページをリクラメーション処理し、および/または、ゲストメモリページが汚れていることをライブマイグレーションマネージャに通知させる。
【0042】
図6は、半導体装置172(例えば、チップ、ダイ、パッケージ)を示す。図示された装置172は、基板174に結合された1つ以上の基板174(例えば、シリコン、サファイア、ガリウムヒ素)および論理176(例えば、トランジスタアレイおよび他の集積回路/IC構成要素)を含む。一実施形態では、論理176は、すでに説明した方法60(図2A)、方法70(図2B)、方法80(図3A)、方法100(図3B)および/または方法4(図110)の1つ以上の態様を実装する。このように、論理176は、デバイスのゲストドライバからのマップ要求をハイパーバイザに通知することができ、このデバイスは、VMにパススルーされ、VMによって直接制御され、マップ要求は、デバイスが仮想化された実行環境内のゲストメモリページにアクセスする試みに関連付けられる。また、論理176は、ゲストメモリページがピン留めされているかどうかを判定し、ゲストメモリページがピン留めされていない場合には、ハイパーバイザにマップハイパーコールを送信してもよい。一実施形態では、論理176は、ゲストメモリページがピン留めされている場合にマップハイパーコールをバイパスし、全てのアンマップハイパーコールをバイパスする。
【0043】
また、論理176は、VMの作成時にピン留め動作をバイパスしてもよい。一実施形態では、論理176は、フロントエンドドライバからマップハイパーコールを受信し、マップハイパーコールに応答してゲストメモリページをピン留めし、マップハイパーコールに応答してピン留めビットマップ内のGFNに対応するビットをセットする。このような場合、GFNはゲストメモリページに関連付けられ、ピン留めされたビットマップは共有メモリ内にある。
【0044】
実施形態において、論理176はまた、ゲストメモリページが仮想化された実行環境においてピン留めされていることを判定し、DMAビットマップに基づいて、ゲストドライバからのアンマップ要求が発行されたことを判定する。このような場合、論理176はゲストメモリページをピン留め解除する。一例では、論理176はまた、オーバーコミットポリシーに従って、ピン留め解除されたゲストメモリページをリクラメーションし、および/またはゲストメモリページが汚れていることをライブマイグレーションマネージャに通知する。
【0045】
論理176は、少なくとも部分的に、設定可能な論理または固定機能性ハードウェア論理に実装することができる。一例では、論理176は、基板174内に位置決めされる(例えば、埋め込まれる)トランジスタチャネル領域を含む。したがって、論理176と基板174との間のインターフェースは、階段接合ではなくてもよい。論理176はまた、基板174の初期ウエハ上に成長されるエピタキシャル層を含むとみなされ得る。
【0046】
図7は、一実施形態によるプロセッサコア200を示す。プロセッサコア200は、マイクロプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、またはコードを実行するための他のデバイスなど、任意のタイプのプロセッサのコアであり得る。図7には1つのプロセッサコア200のみが示されているが、代わりに、プロセッサ要素は、図7に示されたプロセッサコア200のうちの1つ以上を含んでもよい。プロセッサコア200は、シングルスレッドコアであってもよく、少なくとも1つの実施形態では、プロセッサコア200は、コア当たり2つ以上のハードウェアスレッドコンテキスト(または「論理プロセッサ」)を含んでもよいという点で、マルチスレッドであってもよい。
【0047】
図7はまた、プロセッサコア200に結合されたメモリ270を示す。メモリ270は、当業者に既知であるか、またはそうでなければ利用可能であるような、広範な種類のメモリ(メモリ階層の種々の層を含む)のいずれであってもよい。メモリ270は、プロセッサコア200によって実行される1つ以上のコード213命令を含んでもよく、コード213は、すでに説明した方法60(図2A)、方法70(図2B)、方法80(図3A)、方法100(図3B)および/または方法4(図110)を実装してもよい。プロセッサコア200は、コード213によって示される命令のプログラムシーケンスに従う。各命令は、フロントエンド部分210に入り、1つ以上のデコーダ220によって処理されてもよい。デコーダ220は、その出力として、所定のフォーマットの固定幅マイクロ操作のようなマイクロ操作を生成することができ、又はオリジナルのコード命令を反映する他の命令、マイクロ命令、または制御信号を生成することができる。図示されたフロントエンド部分210はまた、レジスタリネーム論理225とスケジューリング論理230を含み、これらは一般にリソースを割り当て、実行のための変換命令に対応する操作を待ち行列に入れる。
【0048】
プロセッサコア200は、実行ユニット255-1~255-Nのセットを有する実行論理250を含むように示されている。いくつかの実施形態は、特定の機能または機能セットに専用の多数の実行ユニットを含んでもよい。他の実施形態は、特定の機能を実行できる1つの実行ユニットまたは1つの実行ユニットのみを含んでもよい。図示された実行論理250は、コード命令によって指定された操作を実行する。
【0049】
コード命令によって指定された操作の実行の完了後、バックエンド論理260は、コード213の命令を退去させる。一実施形態では、プロセッサコア200は、順序外れの実行を可能にするが、命令の順序リタイアメントを必要とする。リタイアメント論理265は、当業者に既知の種々の形態(例えば、リオーダバッファ等)をとることができる。このようにして、プロセッサコア200は、コード213の実行中に、少なくとも、デコーダによって生成される出力、レジスタリネーム論理225によって利用されるハードウェアレジスタおよびテーブル、ならびに実行論理250によって修正される任意のレジスタ(図示せず)に関して、変換される。
【0050】
図7には示されていないが、処理要素は、プロセッサコア200を有するチップ上の他の要素を含んでもよい。例えば、処理要素は、プロセッサコア200と共にメモリ制御論理を含んでもよい。処理要素は、I/O制御論理を含んでもよく、および/またはメモリ制御論理と一体化されたI/O制御論理を含んでもよい。処理要素はまた、1つ以上のキャッシュを含んでもよい。
【0051】
次に、図8を参照すると、一実施形態による計算システム1000の実施形態のブロック図が示される。図8には、第1の処理要素1070および第2の処理要素1080を含むマルチプロセッサシステム1000が示されている。2つの処理要素1070および1080が示されているが、システム1000の実施形態は、1つのそのような処理要素のみを含んでもよいことが理解されるべきである。
【0052】
システム1000は、ポイントツーポイント相互接続システムとして示され、第1の処理要素1070および第2の処理要素1080は、ポイントツーポイント相互接続1050を介して結合される。図8に示された相互接続のいずれかまたは全ては、ポイントツーポイント相互接続ではなくマルチドロップバスとして実装されてもよいことを理解されたい。
【0053】
図8に示すように、処理要素1070および1080の各々は、第1および第2のプロセッサコア(すなわち、プロセッサコア1074aおよび1074b、ならびにプロセッサコア1084aおよび1084b)を含む、マルチコアプロセッサであってもよい。そのようなコア1074a、1074b、1084a、1084bは、図7に関連して上述したものと同様のやり方で命令コードを実行するように構成されてもよい。
【0054】
各処理要素1070、1080は、少なくとも1つの共有キャッシュ1896a、1896bを含んでもよい。共有キャッシュ1896a、1896bは、それぞれ、コア1074a、1074b、および1084a、1084bのような、プロセッサの1つ以上の構成要素によって利用されるデータ(例えば、命令)を記憶してもよい。例えば、共有キャッシュ1896a、1896bは、プロセッサの構成要素によるより速いアクセスのために、メモリ1032、1034に記憶されたデータをローカルにキャッシュしてもよい。1つ以上の実施形態において、共有キャッシュ1896a、1896bは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなどの1つ以上の中間レベルキャッシュ、最後のレベルキャッシュ(LLC)、および/またはそれらの組み合わせを含んでもよい。
【0055】
2つの処理要素1070、1080のみで示されるが、本実施形態の範囲は、それに限定されないことが理解されるべきである。他の実施形態では、1つ以上の追加の処理要素が、所与のプロセッサ内に存在してもよい。代替的には、処理要素1070、1080の1つ以上は、プロセッサ以外の要素、例えば、アクセラレータまたはフィールドプログラマブルゲートアレイであってもよい。例えば、追加の処理要素は、第1のプロセッサ1070と同じである追加のプロセッサ、第1のプロセッサ1070に対して不均一または非対称である追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット)、フィールドプログラマブルゲートアレイ、または任意の他の処理要素を含んでもよい。処理要素1070、1080の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などを含むメトリックのスペクトルに関して、様々な差異があり得る。これらの差異は、実質的に、処理要素1070、1080間の非対称性および不均一性として現れ得る。少なくとも1つの実施形態について、様々な処理要素1070、1080は、同一のダイパッケージ内に存在してもよい。
【0056】
第1の処理要素1070は、メモリコントローラ論理(MC)1072と、ポイントツーポイント(P-P)インターフェース1076および1078と、をさらに含んでもよい。同様に、第2の処理要素1080は、MC1082と、P-Pインターフェース1086および1088と、を含んでもよい。図8に示すように、MC1072および1082は、プロセッサをそれぞれのメモリ、すなわち、メモリ1032およびメモリ1034に結合し、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってもよい。MC1072および1082は、処理素子1070、1080に統合されて示されているが、代替の実施形態では、MC論理は、その中に統合されるのではなく、処理素子1070、1080の外側の離散論理であってもよい。
【0057】
第1の処理要素1070および第2の処理要素1080は、それぞれP-P相互接続1076 1086を介して、I/Oサブシステム1090に結合されてもよい。図8に示すように、I/Oサブシステム1090は、P-Pインターフェース1094および1098を含む。さらに、I/Oサブシステム1090は、I/Oサブシステム1090を高性能グラフィックスエンジン1038と結合するためのインターフェース1092を含む。一実施形態では、バス1049は、グラフィックスエンジン1038をI/Oサブシステム1090に結合するために使用されてもよい。代替的に、ポイントツーポイント相互接続は、これらの構成要素を結合することができる。
【0058】
次に、I/Oサブシステム1090は、インターフェース1096を介して第1のバス1016に結合されてもよい。一実施形態では、第1のバス1016は、ペリフェラルコンポーネント相互接続(PCI)バス、またはPCI Expressバスまたは他の第3世代I/O相互接続バスのようなバスであってもよいが、実施形態の範囲はそれに限定されない。
【0059】
図8に示すように、種々の入出力デバイス1014(例えば、バイオメトリクススキャナ、スピーカ、カメラ、センサ)は、第1のバス1016を第2のバス1020に結合することができるバスブリッジ1018と共に、第1のバス1016に結合されてもよい。一実施形態では、第2のバス1020は、ローピンカウント(LPC)バスであってもよい。一実施形態では、例えば、キーボード/マウス1012、通信デバイス1026、および、ディスクドライブまたはコード1030を含み得る他の大容量記憶装置のようなデータ記憶ユニット1019を含む、種々のデバイスが、第2のバス1020に結合され得る。図示されたコード1030は、すでに説明した方法60(図2A)、方法70(図2B)、方法80(図3A)、方法100(図3B)および/または方法4(図110)を実装してもよく、すでに説明したコード213(図7)と同様であってもよい。さらに、オーディオI/O 1024は、第2のバス1020に結合されてもよく、バッテリ1010は、計算システム1000に電力を供給してもよい。
【0060】
他の実施形態が企図されることに留意する。例えば、図8のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのような通信トポロジを実装してもよい。また、図8の要素は、代わりに、図8に示されているよりも多くの、またはより少ない集積チップを使用して分割されてもよい。
【0061】
追加の注記および例:
例1は、性能向上計算システムであって、デバイスであって、前記デバイスが仮想マシンにパススルーされ、直接制御される、デバイスと、プロセッサと、フロントエンドドライバ命令のセットを含むシステムメモリであって、前記フロントエンドドライバ命令は、前記プロセッサによって実行されるときに、前記計算システムに、前記デバイスのゲストドライバからのマップ要求をハイパーバイザに通知することであって、前記マップ要求は、前記デバイスが仮想化された実行環境においてゲストメモリページにアクセスしようとする試みに関連付けられる、通知することと、前記ゲストメモリページがピン留めされているかどうかを判定することと、前記ゲストメモリページがピン留めされていない場合、前記ハイパーバイザにマップハイパーコールを送信することと、を行わせる、システムメモリと、を含む、計算システムを含む。
例2は、前記ハイパーバイザおよび前記フロントエンドドライバ命令にアクセス可能な共有メモリをさらに含み、前記マップ要求を前記ハイパーバイザに通知するために、前記フロントエンドドライバ命令は、実行されるときに、前記計算システムに、ダイレクトメモリアクセス(DMA)ビットマップ内のゲストページフレーム番号に対応するビットを設定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記DMAビットマップは、前記共有メモリ内に位置する、例1に記載の計算システムを含む。
例3は、前記フロントエンドドライバ命令は、実行されるときに、前記計算システムに、前記ゲストドライバからのアンマップ要求に応答して前記ビットをクリアさせ、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、例2に記載の計算システムを含む。
例4は、前記ハイパーバイザおよび前記フロントエンドドライバ命令にアクセス可能な共有メモリをさらに含み、前記ゲストメモリページがピン留めされているかどうかを判定するために、前記フロントエンドドライバ命令は、実行されるときに、前記計算システムに、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットがセットされているかどうかを判定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは前記共有メモリ内に位置する、例1に記載の計算システムを含む。
例5は、前記フロントエンドドライバ命令は、実行されるときに、計算システムに、前記ゲストメモリページがピン留めされている場合、前記マップハイパーコールをバイパスすることと、 全てのアンマップハイパーコールをバイパスするすることと、を行わせる、例1~4のいずれか1つに記載の計算システムを含む。
例6は、フロントエンドドライバ命令のセットを含む少なくとも1つのコンピュータ可読記憶媒体であって、前記フロントエンドドライバ命令は、計算システムによって実行されるときに、前記計算システムに、デバイスのゲストドライバからのマップ要求をハイパーバイザに通知することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御され、前記マップ要求は、前記デバイスが仮想化された実行環境においてゲストメモリページにアクセスしようとする試みに関連付けられる、通知することと、前記ゲストメモリページがピン留めされているかどうかを判定することと、前記ゲストメモリページがピン留めされていない場合、前記ハイパーバイザにマップハイパーコールを送信することと、を行わせる、少なくとも1つのコンピュータ可読記憶媒体を含む。
例7は、前記マップ要求を前記ハイパーバイザに通知するために、前記フロントエンドドライバ命令は、実行されるときに、前記計算システムに、ダイレクトメモリアクセス(DMA)ビットマップ内のゲストページフレーム番号に対応するビットを設定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記DMAビットマップは、前記ハイパーバイザ及び前記フロントエンドドライバ命令にアクセス可能な共有メモリ内に位置する、例6に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例8は、前記フロントエンドドライバ命令は、実行されるときに、前記計算システムに、前記ゲストドライバからのアンマップ要求に応答して前記ビットをクリアさせ、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、例7に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例9は、前記ゲストメモリページがピン留めされているかどうかを判定するために、前記フロントエンドドライバ命令は、実行されるときに、前記計算システムに、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットがセットされているかどうかを判定させ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記ハイパーバイザおよび前記フロントエンドドライバ命令にアクセス可能な共有メモリ内に位置する、例6に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例10は、前記フロントエンドドライバ命令は、実行されるときに、計算システムに、前記ゲストメモリページがピン留めされている場合、前記マップハイパーコールをバイパスすることと、全てのアンマップハイパーコールをバイパスすることと、を行わせる、例6~9のいずれか1つに記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例11は、性能向上計算システムであって、デバイスであって、前記デバイスが仮想マシンにパススルーされ、直接制御される、デバイスと、プロセッサと、ハイパーバイザ命令のセットを含むシステムメモリであって、前記ハイパーバイザ命令は、前記プロセッサによって実行されるときに、前記計算システムに、ゲストメモリページが仮想化された実行環境でピン留めされていることを判定することと、ダイレクトメモリアクセス(DMA)ビットマップに基づいて、デバイスのゲストドライバからのアンマップ要求が発行されたことを判定することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御されるものであり、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、判定することと、前記ゲストメモリページをピン留め解除することと、を行わせる、計算デバイスを含む。
例12は、前記フロントエンドドライバ及び前記ハイパーバイザ命令にアクセス可能な共有メモリをさらに含み、前記アンマップ要求が発行されたことを判定するために、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、前記DMAビットマップ内のゲストページフレーム番号に対応するビットがセットされていないことを判定させ、前記ゲストページフレーム番号が前記ゲストメモリページに関連付けられ、前記DMAビットマップは、前記共有メモリ内に位置する、例11に記載の計算システムを含む。
例13は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットをクリアさせ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記共有メモリ内に位置する、例11に記載の計算システムを含む。
例14は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、レース条件が検出された場合、前記ビットをリセットさせ、前記レース条件が検出されない場合、前記ゲストメモリページはピン留め解除される、例13に記載の計算システムを含む。
例15は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、前記フロントエンドドライバからマップハイパーコールを受信することと、前記マップハイパーコールに応答して、前記ゲストメモリページをピン留めすることと、前記マップハイパーコールに応答して、ピン留めされたビットマップ内の前記ゲストページフレーム番号に対応するビットをセットすることであって、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記共有メモリ内に位置する、セットすることと、を行わせる、例11に記載の計算システムを含む。
例16は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、前記仮想マシンの作成時にピン留め操作をバイパスさせる、例15に記載の計算システムを含む。
例17は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、オーバーコミットポリシーに従って、前記ピン留め解除されたゲストメモリページをリクラメーションすることと、前記ゲストメモリページが汚れていることをライブマイグレーションマネージャに通知することと、を行わせる、例11~16のいずれか1つに記載のコンピューティングシステムを含む。
例18は、ハイパーバイザ命令のセットを含む少なくとも1つのコンピュータ可読記憶媒体であって、前記フロントエンドドライバ命令は、計算システムによって実行されるときに、前記計算システムに、ゲストメモリページが仮想化された実行環境でピン留めされていることを判定することと、ダイレクトメモリアクセス(DMA)ビットマップに基づいて、デバイスのゲストドライバからのアンマップ要求が発行されたことを判定することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御されるものであり、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、判定することと、前記ゲストメモリページをピン留め解除することと、を行わせる、計算デバイスを含む。
例19は、前記アンマップ要求が発行されたことを判定するために、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、前記DMAビットマップ内のゲストページフレーム番号に対応するビットがセットされていないことを判定させ、前記ゲストページフレーム番号が前記ゲストメモリページに関連付けられ、前記DMAビットマップは、前記フロントエンドドライバ及び前記ハイパーバイザ命令にアクセス可能な共有メモリ内に位置する、例18に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例20は、前記ハイパーバイザ命令は、実行されると、ピン留めされたビットマップ内のゲストページフレーム番号に対応するビットをクリアさせ、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記フロントエンドドライバがアクセス可能な共有メモリ内に配置される、例18に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例21は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、レース条件が検出された場合、前記ビットをリセットさせ、前記レース条件が検出されない場合、前記ゲストメモリページはピン留め解除される、例20に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例22は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、前記フロントエンドドライバからマップハイパーコールを受信することと、前記マップハイパーコールに応答して、前記ゲストメモリページをピン留めすることと、前記マップハイパーコールに応答して、ピン留めされたビットマップ内の前記ゲストページフレーム番号に対応するビットをセットすることであって、前記ゲストページフレーム番号は、前記ゲストメモリページに関連付けられ、前記ピン留めされたビットマップは、前記フロントエンドドライバにアクセス可能な共有メモリ内に位置する、セットすることと、を行わせる、例18に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例23は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、前記仮想マシンの作成時にピン留め操作をバイパスさせる、例22に記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例24は、前記ハイパーバイザ命令は、実行されるときに、前記計算システムに、オーバーコミットポリシーに従って、前記ピン留め解除されたゲストメモリページをリクラメーションすることと、前記ゲストメモリページが汚れていることをライブマイグレーションマネージャに通知することと、を行わせる、例18~22のいずれか1つに記載の少なくとも1つのコンピュータ可読記憶媒体を含む。
例25は、フロントエンドドライバを操作する方法であって、デバイスのゲストドライバからのマップ要求をハイパーバイザに通知することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御され、前記マップ要求は、前記デバイスが仮想化された実行環境においてゲストメモリページにアクセスしようとする試みに関連付けられる、通知することと、前記ゲストメモリページがピン留めされているかどうかを判定することと、前記ゲストメモリページがピン留めされていない場合、前記ハイパーバイザにマップハイパーコールを送信することと、を含む方法を含む。
例26は、ハイパーバイザを操作する方法であって、ゲストメモリページが仮想化された実行環境でピン留めされていることを判定することと、ダイレクトメモリアクセス(DMA)ビットマップに基づいて、デバイスのゲストドライバからのアンマップ要求が発行されたことを判定することであって、前記デバイスは、仮想マシンにパススルーされ、直接制御されるものであり、前記アンマップ要求は、前記デバイスが前記ゲストメモリページへのアクセスを中止する試みに関連付けられる、判定することと、前記ゲストメモリページをピン留め解除することと、を含む方法を含む。
例27は、例25~26のいずれか1つの方法を実行するための手段を含む。
【0062】
したがって、本明細書に記載される技術は、アクセラレータ(例えば、GPU、FPGA、非揮発性メモリエクスプレス/NVMeデバイスなど)およびベンダ固有I/Oオフローディングカードに関して、パススルーデバイスのより多くの使用を容易にし得る。この技術は、デバイスのパススルーに関連するフィーチャギャップ(例えば、ブート時間、メモリのオーバーコミット、ライブマイグレーションなど)を埋める。追加的に、入出力(I/O)ページフォールトの成熟したサポートが市販されているのに数年はかかるかもしれないが、既存のvIOMMUアプローチは、高性能コストのため、ほとんどの実稼働環境では有効にできない。
【0063】
本明細書で説明される技術は、双方向DMA情報共有フレームワーク(例えば、すべての既存のvIOMMUアプローチは、単方向であり得る)に基づいて、フィーチャギャップを埋めるためのクリーンでアーキテクチャ的なアプローチを提供する。このようなフレームワークにより、ゲストIOMMUドライバは、すべてのアンマップ要求のVM出口を削除し、ほとんどのマップ要求のVM出口を大幅に低減することができる。したがって、ライトパフォーマンスコストを有する生産環境が達成される。一方、ピン留めマネージャの導入は、双方向情報をさらに使用して、発見的にゲストメモリページをピン留め/ピン留め解除してもよく、これは、ゲストのDMA要求(例えば、I/Oページフォールトなし)とホストのDMA追跡目的の両方に効果的に対処することができる。簡単に言えば、本明細書で説明される技術は、vIOMMUに関連するパフォーマンスコストを回避し、I/Oページフォールトに関連するエコシステム準備の懸念に対処する。
【0064】
実施形態は、全てのタイプの半導体集積回路(IC)チップでの使用に適用可能である。これらのICチップの例としては、プロセッサ、コントローラ、チップセット構成要素、プログラマブル論理アレイ(PLA)、メモリチップ、ネットワークチップ、システムオンチップ(SoC)、SSD/NANDコントローラASICなどを含むが、これらに限定されない。さらに、いくつかの図面では、信号導体線は線で表される。いくつかは、より多くの構成要素信号パスを示すために異なっており、ある数の構成要素信号パスを示すために、数字ラベルを有し、および/または、一次情報フロー方向を示すために、1つ以上の端部に矢印を有してもよい。しかし、これを限定的に解釈すべきではない。むしろ、回路のより容易な理解を容易にするために、1つ以上の例示的な実施形態に関連して、このような追加の詳細を使用してもよい。任意の表現された信号線は、追加情報を有するか否かにかかわらず、実際には、複数の方向に移動することができる1つ以上の信号を含むことができ、任意の適切なタイプの信号スキーム、例えば、差動ペア、光ファイバ線、および/またはシングルエンド線で実装されるデジタルまたはアナログ線で実装することができる。
【0065】
実施形態は同じものに限定されないが、例示のサイズ/モデル/値/範囲が与えられてもよい。製造技術(例えば、フォトリソグラフィー)は、時間の経過とともに成熟するので、より小さなサイズのデバイスが製造されることが期待される。追加的に、ICチップおよび他の構成要素への周知の電力/接地接続は、図示および説明を簡単にするために、また実施形態の特定の態様を不明瞭にしないために、図中に示されても示されなくてもよい。さらに、アレンジメントは、実施形態を不明瞭にすることを避けるために、また、このようなブロック図のアレンジメントの実装に関する詳細が、実施形態が実装されるプラットフォームに大きく依存するという事実を考慮して、ブロック図の形式で示されてもよく、すなわち、このような詳細は、当業者の範囲内であるべきである。例示の実施形態を説明するために具体的な詳細(例えば、回路)が記載されている場合、実施形態は、これらの具体的な詳細を伴わずに、またはそれらの変更を伴って実施可能であることは当業者に明らかであるべきである。説明は、よって、限定するものでなく例証するものとしてみなすこととする。
【0066】
用語「結合」は、本明細書において、問題の構成要素間の直接的または間接的な任意のタイプの関係を指すために使用することができ、電気的、機械的、流体的、光学的、電磁的、電気機械的または他の接続に適用することができる。追加的に、用語「第1」、「第2」などは、議論を容易にするためにのみ使用することができ、特に指示がない限り、特別な時間的または時間的意味を持たない。
【0067】
この出願及び特許請求の範囲において使用されているように、用語「1つ以上」によって接合された用語のリストは、列挙された用語の任意の組み合わせを意味することができる。例えば、「A、B又はCの1以上」という用語は、A、B、C、A及びB、B及びC、B及びC、又はA、B及びCを意味してもよい。
【0068】
当業者は、前述の説明から、実施形態の広範な技術が種々の形態で実施可能であることを理解するであろう。したがって、実施形態をその特定の例に関連して説明したが、図面、明細書、および以下の請求の範囲の検討により、他の修正が当業者に明らかになるので、実施形態の真の範囲はそれほど限定されるべきではない。
図1
図2A
図2B
図3A
図3B
図4
図5
図6
図7
図8