【レポート】

Fall Processor Forum 2005 - Pacificaの詳細

1 ハードウェアとゲストOSの間に入るHypervisor

    大原雄介  [2005/10/31]

    Photo01:Kevin J.McGrath氏(AMD fellow, California microprocessor division)。AMD64のアーキテクトであり、古くはNx586のMicroarchitectureの作業に携わった。

    たまにはx86の話題でも……と言いながら全然x86ではないのだが、AMDは今回のFPFでPacificaの詳細を発表した。実を言えば詳細自体は以前か発表されており、実際今回の発表もかなりの部分が既に公表済の内容ではあるのだが、新しい話も含まれているので、併せて少しPacificaの内容について説明してみたい(Photo01)。

    Overall

    PacificaはIntelのVirtualization Technology同様に、ハードウェアをパーティショニングする技術というか、ゲストOSに対して仮想マシンを提供する技術である。従来だとOSが直接ハードウェアを操作していたが、Pacificaを使うことで間にHypervisor層が入る形になる(Photo02)。

    Photo02:Pacificaの動作模式図。Guest OSはHypervisor層の上で動く事になる。

    このHypervisor層とGuest OS層の動作を切り替える命令として新設されたのがVMRUNである。Pacificaの場合、ブート直後はHypervisor層が動作するが、ここでVMRUNを発行するとGuestOSの動作が開始される。ただ、切り替えメカニズムがこれだけだと、HypervisorとGuestOSが並行して走るとは言いがたい。GuestOSが動いているときにHypervisorが動きたい場合もあるからだ。このために用意されているのがIntercept(横取り)機構である。具体的には命令レベルでのIntercept、及び例外/割り込みのInterceptである。特定の命令が実行された場合、あるいは割り込みとか例外が発生した場合、それをトリガーにして制御をHypervisorに戻し、適切な処理を行ってからGuestOSに処理を戻すことが可能である。この辺りの状態を管理するのがVMCBで、これもPacificaで新設された管理テーブルである(Photo05)。

    Photo03:戻ってくるのは#VMEXIT、例えばOSをシャットダウンしたとかいう場合である。

    Photo04:VMCBはVirtual Machine Control Blockの略。

    Photo05:このページの"Virtual Memory Control Block"はTypoである。

    Memory管理

    さて、Virtual Machineを考える際に、メモリをどう仮想化して、どう見せるかは課題の一つである。Pacificaは以前からここにShadow Page Table(SPT)とNested Paging(NP)、およびPaged Real Modeという3つの種類をサポートすることを表明していたが、SPTやPaged Real ModeはともかくNPの詳細な説明はなされていなかった。そこで、この3つをもう少し細かく説明したい(Photo06)。

    Photo06:どちらのメモリ管理を使うにせよ、TLB(Tranlation Lookup Buffer)でのハンドリングが増えるため、これを助ける目的でASIDというフィールドがTLBに新設された。ちなみにPaged Real Modeは仮想アドレス変換ではないのでここには含まれない。

    SPTは名前の通り、Page TableをShadowingする方法である。Guest OSが直接Page Tableをアクセスしてしまうと、全ての物理メモリにアクセスできてしまう。そこでHyperVisorがPage TableのShadow Setを作り、GuestOSの操作が許される物理メモリだけをそこに割り当てるという仕組みだ(Photo07)。この場合、HypervisorはGuestOSのCR3を常に監視し、変更が加えられたら必要に応じて大元のPage Tableを書き換える必要がある。

    Photo07:CR3というレジスタがPage Tableのアドレスを指している。そこでHypervisorはまずPage TableのShadow Setを作り、次にGuestOSのCR3レジスタの内容をそのShadow Setのアドレスに書き換えるという仕組みである。

    これに対し、NPはもう少し複雑である。一言で説明すれば、仮想アドレス→物理アドレスの間にもう一段テーブルを介することでメモリのパーティショニングをしようというものだ(Photo08)。この方式のメリットは、HypervisorがいちいちPageTableのメンテナンスをする必要がなくなることである。この辺りを図で示したのがPhoto09である。NPを使うと、物理メモリがGP(Guest Physical)とHP(Host Physical)に分離され、GP→HPの割り当てはHost側のPage Tableで決まることが判る。後はHypervisorが適切にHostのPage Tableを操作すればよいという話だ。

    Photo08:NPを使うと、GuestOSは物理メモリを操作しているつもりで、実際は間に追加されたテーブルを操作することになる。で、これを実際の物理メモリに割り当てるのはHypervisorの仕事である。

    Photo09:この方式だと、GuestOSがGPを操作しても、それにあわせてHypervisorがHPをあれこれ操作する必要がない。最初の手間は掛かるが、一度稼動すればSPTよりも負荷は低い。

    ちなみにこのSPTとNPを比較したのがPhoto10だ。SPTは、あくまでもPageTableだけを書き換える方式だから、GuestOSが認識する物理メモリのアドレスは、実際の物理アドレスだ。つまり仮想化の度合いはやや低い。これに対しNPではGuestOSが認識する物理アドレスは、実際には仮想化されたものである。つまり仮想化の度合いが高いわけだ。

    Photo10:こちらはAMDが今年5月30日に公開した"AMD “Pacifica” Virtualization Technology"よりの抜粋。同資料、残念ながら今はダウンロードできなくなっている。

    ではNPで例えばページフォルトが発生したらどうなるか?というと、この際にはGuestOSはPageFaultにより#VMEXITが発生、処理はHypervisorに移る。このため、後はHypervisorが該当するアドレスのPage in作業を行ってからVMRUNを実施する形になる(Photo11)。

    Photo11:HypervisorはGuestOSがPageFaultを起こしたアドレス(これはGPである)が、HPではどこにあたるかを認識してから、そのPage Inを行う事になる。

    最後がPaged Real Modeあるが(Photo12)、これは仮想アドレスのメカニズムはHypervisorが管理するそのままで、GuestOS毎に個別のOffsetを持たせることでメモリのパーティショニングを行う仕組みである。

    Photo12:普通のOSではこのモードを使うケースは余りないだろう。

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン