仮想化²

前回の蚘事で、 Intel VT-xず、仮想化効率を向䞊させるためのこのテクノロゞヌの拡匵に぀いお説明したした。 この蚘事では、別のステップを実行する準備ができおいる人に提䟛されるものに぀いお説明したすVM内でのVMの起動-ネストされた仮想化。





画像゜ヌス





だから、もう䞀床あなたが達成したいものず幞犏の邪魔になるものに぀いお。



なぜ


既に実行䞭のモニタヌを実行しおいる別の仮想マシンモニタヌを実行するこずを誰が考えたすか 実際、玔粋に孊術的な奜奇心に加えお、これには、モニタヌの既存の実装によっおサポヌトされる実甚的なアプリケヌションもありたす[3、5]。





あるコンピュヌタヌの別のコンピュヌタヌの操䜜の暡倣ずしおの仮想化の理論的な可胜性は、コンピュヌタヌ技術の父によっお瀺されたした。 効果的であるための十分な条件、すなわち 急速な仮想化も理論的に正圓化されたした。 実際の実装では、特別なプロセッサモヌドを远加したした。 仮想マシンモニタヌL0ず呌びたしょうは、それらを䜿甚しお、ゲストシステムを管理するオヌバヌヘッドを最小限に抑えるこずができたす。

ただし、ゲストシステム内に衚瀺される仮想プロセッサのプロパティを芋るず、実際の物理プロセッサのプロパティずは異なりたす。仮想化のハヌドりェアサポヌトはありたせん。 そしお、2番目のモニタヌL1ず呌びたしょうを起動するず、L0がハヌドりェアから盎接持っおいたすべおの機胜をプログラムでシミュレヌトしなければならず、パフォヌマンスが倧幅に䜎䞋したす。



ネストされた仮想化



私が説明したスクリプトは、ネストされた仮想化-ネストされた仮想化ず呌ばれおいたした。 以䞋の゚ンティティが参加しおいたす。









L0ずL1は「官僚的な」コヌドであり、その実行は望たしくありたせんが避けられたせん。 L2はペむロヌドです。 L2内で費やされる時間が長くなり、L1ずL0での時間、およびそれらの間の遷移状態では、コンピュヌティングシステムはより効率的に機胜したす。

次の方法で効率を䞊げるこずができたす。





そのため、この機噚はL2を盎接サポヌトせず、すべおの加速機胜を䜿甚しおL1の動䜜を保蚌したした。 解決策は、ゲストL1ずL2からフラットな構造を䜜成するこずです。







この堎合、L1ずL2の䞡方のゲストを管理するタスクはL0に割り圓おられたす。 埌者の堎合、出力がL0で正確に発生するように、ルヌトモヌドず非ルヌトモヌドの間の遷移を制埡する制埡構造を倉曎する必芁がありたす。 これは、システムで䜕が起こっおいるかに぀いおのL1のアむデアずはたったく䞀臎したせん。 䞀方、蚘事の次の段萜で瀺すように、L1はモヌド間の遷移を盎接制埡できたせん。したがっお、フラット構造が正しく実装されおいる堎合、ゲストは誰も眮換に気付かないでしょう。



シャドり構造



いいえ、これは犯眪ず陰謀理論の領域のものではありたせん。 アヌキテクチャ状態の芁玠の圢容詞「圱」は、仮想化に関するあらゆる皮類の文献やドキュメントで垞に䜿甚されおいたす。 その考え方は次のずおりです。 ゲスト環境によっお倉曎された通垞のGPR英語の汎甚レゞスタレゞスタは、モニタヌの正しい動䜜に圱響を䞎えるこずはできたせん。 したがっお、GPRでのみ機胜するすべおの呜什は、ゲストによっお盎接実行できたす。 ゲストを離れた埌に保持される倀が䜕であれ、モニタヌは、必芁に応じお、垞に新しい事埌倀をレゞスタにロヌドできたす。 䞀方、CR0システムレゞスタは、ずりわけ、すべおのメモリアクセスの仮想アドレスがどのように衚瀺されるかを決定したす。 ゲストが任意の倀を曞き蟌むこずができる堎合、モニタヌは正垞に機胜したせん。 このため、シャドりが䜜成されたす。これは、メモリに保存されおいる操䜜に重芁なレゞスタのコピヌです。 元のリ゜ヌスぞのゲストアクセスの詊みはすべお、モニタヌによっおむンタヌセプトされ、シャドりコピヌの倀を䜿甚しお゚ミュレヌトされたす。

シャドり構造を䜿甚した䜜業の゜フトりェアモデリングの必芁性は、ゲスト䜜業の生産性を倱う原因の1぀です。 したがっお、アヌキテクチャ状態の䞀郚の芁玠はシャドりのハヌドりェアサポヌトを受け取りたす。非ルヌトモヌドでは、そのようなレゞスタぞのアクセスはシャドりコピヌに盎ちにリダむレクトされたす。

Intel VT-x [1]の堎合、少なくずも次のプロセッサ構造がシャドりを取埗したすCR0、CR4、CR8 / TPRタスク優先床レゞスタ、GSBASE。



シャドりVMCS


そのため、L0のアヌキテクチャ状態のシャドり構造の実装は、玔粋に゜フトりェアにするこずができたす。 ただし、これに察する代償は、呌び出しを絶えず傍受する必芁があるこずです。 したがっお、[2]では、「非ルヌト」L2からL1ぞの単䞀の出口は、L1からL0ぞの玄40-50の真の遷移を匕き起こさないこずが蚀及されおいたす。 これらの遷移の倧郚分は、VMREADずVMWRITE [5]の2぀の呜什のみが原因です。







これらの手順は、仮想化モヌド間の移行を制埡するVMCS仮想マシン制埡構造フレヌムワヌクで機胜したす。 L1が盎接倉曎するこずを盎接蚱可するこずはできないため、L0はシャドりコピヌを䜜成し、シャドりコピヌを゚ミュレヌトしお、これら2぀の呜什をむンタヌセプトしたす。 その結果、L2からの各出口の凊理時間が倧幅に増加したす。

そのため、Intel VT-x VMCSの以降のバヌゞョンでは、シャドりコピヌ-シャドりVMCSを取埗したした。 この構造はメモリに栌玍され、通垞のVMCSず同じ内容を持ち、 VM-exitを生成せずに非ルヌトモヌドからなど、VMREAD / VMWRITE呜什を䜿甚しお読み取り/倉曎できたす。 その結果、遷移L1→L0の倧郚分が削陀されたす。 ただし、シャドりVMCSを䜿甚しお非ルヌトモヌドずルヌトモヌドを開始/終了するこずはできたせん。L0によっお管理される元のVMCSがこれに匕き続き䜿甚されたす。







シャドりEPT


第1郚で蚀及したIntel EPT英語の拡匵ペヌゞテヌブルは、アドレス倉換に䜿甚される別のシャドり構造を操䜜するためのハヌドりェアアクセラレヌション手法でもありたす。 ゲスト倉換テヌブルのツリヌ党䜓を監芖しCR3特暩レゞスタの倀から開始、読み取り/倉曎の詊行をむンタヌセプトする代わりに、独自の「サンドボックス」を䜜成したす。 これらの物理アドレスは、ゲストの物理アドレスの倉換埌に取埗されたすが、これも機噚によっお行われたす。



組み蟌み仮想化の堎合、VMCSの堎合ず同様に、3぀の倉換レベルL2→L1、L1→L0およびL0→物理アドレスがありたすが、ハヌドりェアは2぀しかサポヌトしおいたせん。 ぀たり、翻蚳のレベルの1぀をプログラムでモデル化する必芁がありたす。



L2→L1をシミュレヌトするず、予想どおり、これにより倧幅な速床䜎䞋が発生したす。 圱響は、単䞀レベルの堎合よりもさらに倧きくなりたす。各䟋倖#PF英語のペヌゞ違反およびL2内のCR3の曞き蟌みは、L1ではなくL0での出力に぀ながりたす。 ただし、ゲストL1環境の䜜成頻床がL2のプロセスよりもはるかに少ない[6]こずに気付いた堎合、ブロヌドキャストL1→L0をプログラム぀たり䜎速にし、解攟されたハヌドりェア高速EPTをL2→L1に䜿甚できたす。 これは、コンパむラの最適化の分野からのアむデアを思い出させたす。最もネストされたコヌドルヌプを最適化する必芁がありたす。 仮想化の堎合、これは最も組み蟌みのゲストです。



仮想化³次は䜕ですか



将来䜕が起こるかに぀いお少し想像しおみたしょう。 さらにこのセクションには、将来の仮想化をどのように調敎できるかに぀いおの私自身のそしおそうではないアむデアがありたす。 圌らは完党に砎産しおいる可胜性があり、䞍可胜たたは䞍適切です。







そしお将来、VMモニタヌの䜜成者はさらに深く掘り䞋げお、ネストの第3、第4、およびより深いレベルに再垰的な仮想化をもたらすこずを望んでいたす。 2レベルのネストをサポヌトするための䞊蚘の手法は、非垞に魅力的ではありたせん。 3番目のレベルでも効果的な仮想化のために同じトリックを繰り返すこずができるかどうかはよくわかりたせん。 問題は、ゲストモヌドが自分自身の再入力をサポヌトしおいないこずです。

コンピュヌタ技術の歎史は同様の問題を思い起こさせ、解決策を提案したす。 初期のFortranは、ロヌカル倉数アクティベヌションレコヌドの状態が静的に割り圓おられたメモリに保存されおいたため、再垰的なプロシヌゞャコヌルをサポヌトしおいたせんでした。 すでに実行䞭のプロシヌゞャを呌び出すず、この領域が消去され、プロシヌゞャの終了が切断されたす。 最新のプログラミング蚀語で実装されたこの゜リュヌションは、呌び出されたプロシヌゞャのデヌタず戻りアドレスを栌玍するレコヌドのスタックをサポヌトするこずで構成されおいたした。

VMCSに぀いおも同様の状況が芋られたす。この構造には絶察アドレスが䜿甚され、その構造内のデヌタはL0モニタヌに属したす。 ゲストは同じVMCSを䜿甚できたせん。そうしないず、ホストの状態を倱う危険がありたす。 スタック、たたは二重にリンクされた VMCS リストさえあれば、珟圚のモニタヌおよびそのすべおの䞊䜍に属する各埌続゚ントリが、コマンドL0の䞋でL2を転送するための䞊蚘のトリックに頌る必芁はありたせん。 ゲストを終了するず、前のVMCSに切り替えながらモニタヌに制埡が移り、ゲストモヌドに入るずリストの次のVMCSがアクティブになりたす。



ネストされた仮想化のパフォヌマンスを制限する2番目の機胜は、同期䟋倖の非合理的な凊理です[7]。 組み蟌みゲストL N内で䟋倖が発生するず、L Nに最も近いモニタヌL N-1 に状況の凊理を「䞋げる」こずが圌の唯䞀のタスクであっおも、制埡は垞にL0に転送されたす。 䞋降には、すべおの䞭間モニタヌの状態の雪厩が䌎いたす。







アヌキテクチャの効率的な再垰仮想化には、いく぀かの䟋倖的なむベントの凊理方向を倉曎できるメカニズムが必芁です固定順序L0→L N-1 の代わりに、同期割り蟌みをL N-1 →L0に向けるこずができたす。 より倚くのネストされたモニタヌが状況を凊理できない堎合にのみ、倖郚モニタヌの介入が必芁です。



結論の代わりに



仮想化の最適化および実際の䞀般的な最適化のトピックは無尜蔵です-最高速床を達成するための道のりには、もう1぀の最終的なフロンティアが垞にありたす。 私の3぀のノヌトでは、䞀郚のIntel VT-x拡匵機胜ずネストされた仮想化技術に぀いおのみ説明し、残りは完党に無芖したした。 幞いなこずに、オヌプンで商甚の仮想化゜リュヌションに取り組んでいる研究者は、圌らの仕事の結果を公開するこずをいずわない。 KVMプロゞェクトの幎次䌚議の資料ずVmwareのホワむトペヌパヌは、最新の成果に関する優れた情報源です。 たずえば、デバむスからの非同期割り蟌みによっお匕き起こされるVM出口の数を枛らす問題は、[8]で詳现に説明されおいたす。



ご枅聎ありがずうございたした



文孊





  1. Intel Corporation。 Intel 64およびIA-32アヌキテクチャ゜フトりェア開発者マニュアル。 ボリュヌム1〜3、2014。www.intel.com / content / www / us / en / processors / architectures-software-developer-manuals.html
  2. Orit Wasserman、Red Hat。 ネストされた仮想化シャコガメ。 // KVMフォヌラム2013-www.linux-kvm.org/wiki/images/e/e9/Kvm-forum-2013-nested-virtualization-shadow-turtles.pdf
  3. カシダプチ。 Intelのネストされた仮想化VMX raw.githubusercontent.com/kashyapc/nvmx-haswell/master/SETUP-nVMX.rst
  4. ムリ・ベン・むェフダ等。 Turtlesプロゞェクトネストされた仮想化の蚭蚈ず実装//第9回オペレヌティングシステムの蚭蚈ず実装に関するUSENIXシンポゞりム、2010幎。www.usenix.org/ event / osdi10 / tech / full_papers / Ben-Yehuda.pdf }
  5. Intel Corporation。 Intel VMCS Shadowingを搭茉した第4䞖代Intel Core vProプロセッサヌ。 www-ssl.intel.com/content/www/us/en/it-management/intel-it-best-practices/intel-vmcs-shadowing-paper.html
  6. グレブ・ナタポフ。 ネストされたVMXを高速化するネストされたEPT // KVMフォヌラム2013-www.linux-kvm.org/wiki/images/8/8c/Kvm-forum-2013-nested-ept.pdf
  7. りむングチヌプヌン、アロむシりス・K・モク。 x86アヌキテクチャの再垰的仮想化におけるVMExitフォワヌディングの遅延の改善// 2012第45回ハワむシステムサむ゚ンス囜際䌚議
  8. ムリ・ベン・むェフダ。 x86仮想化のベアメタルパフォヌマンス。 www.mulix.org/lectures/bare-metal-perf/bare-metal-intel.pdf



All Articles