2

私の理解では、VMwareのESXi ServerなどのVMMは、シャドウページテーブルを維持して、ゲストオペレーティングシステムの仮想ページアドレスをマシン(ハードウェア)アドレスに直接マップします。シャドウページテーブルは、プロセッサのページングハードウェアによって直接使用され、VM内のメモリアクセスを変換オーバーヘッドなしで実行できるようになると言われています。

シャドウページテーブルメカニズムがVMMでどのように機能するかについてもう少し理解したいと思います。上記の私の高レベルの理解は正しいですか?もしそうなら、

  • シャドウページテーブルの実装では、どのような種類のデータ構造が使用されますか?

  • ゲストオペレーティングシステムからハードウェアへの制御の流れは何ですか?

  • オープンソースVMMのソースコードを直接読む以外に、ハードウェア仮想化について詳しく知るためにどのようなリソースを調べることができますか?

4

3 に答える 3

4

これが私が言えることです。間違っている場合は修正してください。シャドウ ページ テーブルは、ハイパーバイザー/VMM によって作成および維持されます。ゲストの仮想アドレスとマシンの物理アドレスを含むテーブルです。シャドー ページ テーブルがない場合を想像してみてください。マシンの物理アドレスを取得するには、まず仮想アドレスを取得し、次に OS (ゲスト) ページ テーブルを調べてゲストの物理アドレスを取得する必要があります。次に、ゲストの物理アドレスをマシンの物理アドレスに変換する必要があります。シャドー ページ テーブルのシナリオの下で、1 つのゲスト仮想アドレスがどのようにマシンの物理アドレスに変換されるかを確認してください。

  1. 最初の物理プロセッサは仮想アドレスを認識し、その宛先はマシンの物理アドレスを取得することです。最初に行うことは、エントリが TLB にある場合は TLB (Translation look aside buffer) を調べて、マシン アドレスを取得することです。これは、TLB ヒット ケースと呼ばれる最も単純なケースです。パフォーマンスの問題はまったくありません。本来の速度と呼ばれるもので実行されます。

    TLB にエントリがない場合 (TLB ミス) はどうなりますか?

  2. TLB にエントリがない場合、プロセッサはシャドウ ページ テーブルでページ テーブル ウォークを実行します。対応するマッピング (ゲスト VA からマシンの物理アドレスへ) があると仮定すると、プロセッサは TLB に値を挿入し、実行を再開します。この場合は問題ありません。これはもう1つの良い例です。シャドウ ページ テーブルのルックアップには約 10 サイクルかかる場合があるため、パフォーマンスに関してはあまり心配する必要はありません。

    シャドウ ページ テーブルにエントリがない場合はどうなりますか?

  3. プロセッサはシャドウ ページ テーブルでルックアップを行っていますが、エントリが見つかりませんでした。この場合、ルックアップは特権であるため、障害が発生します。VMM (仮想マシン モニター) は、ゲスト ページ テーブルを調べて問題を解決します。このケースは少し複雑です。VMM がゲスト ページ テーブルを通過する場合、2 つの可能性があります。

    1. ルックアップでエントリが見つかった場合: ルックアップでエントリが見つかった場合は、ゲスト ページ テーブルを歩いて最終的にゲストの物理アドレスを取得することしかできません。私たちの目標は、物理マシンのアドレスを取得することです。どのように我々はそこに着くん。モニターはゲストの物理アドレスを取得し、PMap テーブル (または構造) を検索します。エントリが見つかった場合、値 (基本的にはゲストの仮想アドレス、マシンの物理アドレス) をシャドウ ページ テーブルに挿入します。これで、シャドウ ページ テーブルにエントリができました。プロセッサが命令を再起動すると、シャドウ ページ テーブルからマッピングを取得できるようになります。. ああ!このケースについて言及することを忘れないでください。モニターは、PMap または PhysMap を使用して対応するマシンの物理アドレスを取得することにより、問題を解決するために隠しページ フォールトを実行しています。

    2. 検索でエントリが見つからない場合、モニター (VMM) は仮想ゲスト ページ フォールトを挿入します。ゲスト内で、ページ フォールトがあることがわかります。OS が来て、問題を解決します。ページがゲストによってディスクにスワップアウトされた場合、これには数千から数十万サイクルまたはそれ以上かかることがあります。OS(ゲストOS)が問題を解決すると仮定します。3.1 のステップを再開できます。

うーん、全体の流れは少し複雑です。その過程をご理解いただければ幸いです。. 注: シャドウ ページ テーブルは、VMware、Microsof などのソフトウェアで実装されます。バイナリ変換モード (BT) でのみ使用されます。Nested Page Table では、シャドウ ページ テーブルはまったく必要ありません。

シャドウ ページ テーブルに問題があります。

  • TLB の無効化はゲストに依存しています。問題は、ゲスト ページ テーブルとシャドウ ページ テーブルの間の一貫性を保ちたいということです。ゲストがページテーブルを更新するとどうなるか、ゲストがプロセスを切り替えるとどうなるか想像してみてください。ページテーブルを切り替える必要があります。この場合、ページ テーブルのエントリを更新して無効にすることをハードウェアに通知する必要があります。

  • 積極的なシャドウ ページ テーブルのキャッシュが必要です。シャドウ ページ テーブルをキャッシュする必要があります。ゲストがコンテキスト スイッチを実行していて、多数のゲスト プロセスがある場合に何が起こるかを確認してください。シャドウ ページ テーブル ポインタを変更する必要があることをハードウェアに通知する必要があります。すべてのスイッチが TLB をフラッシュします。伝統的に、実行中のプロセスごとにシャドウ ページ テーブルがありますが、プロセスがテーブルを持っているのと比較して、シャドウ ページ テーブルほど多くはありません。

  • ゲスト ページ テーブル (別の言葉はトレース) への書き込み保護は、たとえばページが何らかの理由でオペレーティング システムによってロックされた場合に何が起こるかを確認するために、情報を取得する必要があります。

于 2012-04-26T17:21:58.440 に答える
0

50回以上のビューと何もない?

freenode.net の ##linux の IRC でVidar Holenと話をしました。彼は、このAMD テクニカル レポートを参照するよう提案してくれました。優れたリソースであることが証明されています。他の提案はありますか?

于 2010-05-05T05:22:56.650 に答える
0

基本的に、ゲスト OS は仮想アドレスを物理アドレスに変換しようとしますが、このように見える物理アドレスは実際には実際の物理アドレスではなく、これらは VMM/ハイパーバイザーから来ているため、これらのアドレスは連続したアドレスではありません。 VM. したがって、これらのゲストの物理アドレスを実際のマシン アドレスにマップするには、もう 1 つの変換が必要です。これを実現するために、VMM/ハイパーバイザーはシャドウ ページ テーブルを保持して、これらのゲストの物理アドレスをマシンの物理アドレスにマップします。

さらに、ハードウェアは TLB を提供することでページ テーブル ウォークを回避するメカニズムを提供しますが、ご想像のとおり、ゲスト内のこれらの TLB は実際のハードウェア TLB であってはならず、VMM/ハイパーバイザーも何らかの方法でこれらをエミュレートする必要があります。同時に、シャドウページテーブルをゲストの TLB として使用できます。

これはシャドウ ページ テーブルの基本的な考え方ですが、おそらくハードウェア仮想化テクノロジの中で最も複雑なテクノロジです。私も完全に理解していない多くの詳細とキャッチを省略しました.

以下は、単純化されたシャドウ ページ テーブルに関するいくつかの問題と、kvm がそれらを回避しようとする方法について説明しているリンクです。

http://lwn.net/Articles/216794/

もう 1 つ、このメカニズムにはハードウェア サポートもあり、これらは EPT および NPT と呼ばれ、Intel と AMD の両方でサポートされています。

HTH。

于 2012-02-17T04:40:25.190 に答える