さて、Windows Server 8 の Hyper-V の設定画面には Second Level Paging の設定項目が増えていました。
そこでセカンドレベルページングってなに?ということで調べてみました。
参考ページはこちら
Dynamic Memory vs. Memory Overcommit
どうやら、このセカンドレベルページングを理解するためには、これらの動作の違いを理解する必要があるようです。
このような表題ですが、調べてみると VMWare と Hyper-V のメモリオーバーコミットの仕組みとも読み取れるようです。
仮想マシンに必要なときにより多くのメモリを使わせるテクノロジーがメモリオーバーコミットになります。
さて、ここで VMWare などで使用されている既存のメモリオーバーコミットとHyper-Vで採用された新しいテクノロジであるダイナミックメモリーの違いについて考えてみます。
(以下の文章は内容を翻訳して私なりの解釈をいれました)
■メモリオーバーコミット
メモリオーバーコミットでは他の仮想マシンが使用していないメモリシェアを調べます。もしメモリシェアを持っていた場合、メモリを要求する仮想マシンに再割り当てされます。だから1つのメモリシェアは2つの仮想マシンに割り当てられ、両方から認識できることになります。
例えば、物理メモリが6Gで2台の仮想マシンに対して4G*2の割り当ては本来ならできませんが、このテクノロジを使用すれば可能になります。
要するに仮想マシンが追加のメモリを要求して、ほかの仮想マシンが”分けてあげる”メモリも持っていれば、メモリオーバーコミットはメモリを要求している仮想マシンが、他の仮想マシン内にある空いているメモリを使えるようにします。
■ダイナミックメモリー
ダイナミックメモリーも、メモリシェアは仮想マシンに提供するリソースとみなしていますが、大きな違いはダイナミックメモリーではそれらのメモリシェアを1度には、1つの仮想マシンにしか提供しないということです。
仮想マシンは動作に必要な最小のメモリー要求のみ行い、ホストに未使用のメモリが残ります。この未使用のメモリ(ホスト用に予約されたメモリは除く)の集合体が1つの「プール」に割り当てられます。仮想マシンが追加のメモリーを要求すると、ダイナミックメモリーはホスト内の空きメモリシェアをプールから探します。空きがあれば、それらが仮想マシンに割り当てられます。仮想マシンが割り当て済みのメモリーを一定期間使用しないと、メモリシェアはプールに戻され、ほかの仮想マシンが使えるようになります。
■結局違いはなに?
仮想マシンを信用するか否か?になります。メモリオーバーコミットはホスト内の情報は利用するが、仮想マシン内の情報は一切関知しません。対して、ダイナミックメモリーは仮想マシンを信用し、Hyper-Vの統合サービスとともにインストールされるDynamic Memory Virtual Service Consumer ドライバを使用して、仮想マシン内部から情報を取得します。
ダイナミックメモリーは仮想マシン内部のOSと通信ができ、メモリーの追加や削除についてのアクションが必要なときに何をすべきなのかを知ることができます。
なんだか、クラスターのシェアードデバイスモデルとシェアードナッシングモデルの考え方に似ているような気がします。メモリオーバーコミットがシェアードデバイスモデルに相当し、ダイナミックメモリーがシェアードナッシングモデルに相当する考え方かな?メモリーバーコミットがメモリシェア上の同一空間を複数の仮想マシンでアクセスし、IMTが排他制御を行っているのではないか。ダイナミックメモリーはメモリシェア上の空間に所有権を設定し、所有権を持つ仮想マシンだけがそのメモリ空間を占有的に使用できるというイメージですね。
■セカンドレベルページング
この基盤テクノロジーは、メモリオーバーコミットが使用しており、ダイナミックメモリーは使用していません。
ぺージングとは、ハードディスクのページングファイルを使用した仮想メモリによる物理メモリの拡張です。物理メモリをすべて使用したら、仮想マシンは仮想メモリに切り替わります。
仮想マシンに割り当てられたメモリの合計が物理マシンのメモリ量を超えると、”容量オーバー”になります。仮想マシンがホストに空きメモリーを見つけられないときには、ディスク上の仮想メモリへのスワッピングが始まります。セカンドレベルページングはハイパーバイザに仮想マシンのスワッピングを、仮想マシン内の仮想メモリではなく、ホスト上の仮想メモリで実行させる機能を提供します。
パフォーマンス上の理由で、仮想マシン内にメモリブロックがとどまってほしいと思うことがあるはずですが、セカンドレベルページングによってメモリブロックがホスト上の仮想メモリでスワッピングされる危険があります。メモリオーバーコミットは仮想マシンを信用していないので、どのメモリブロックをスワップすべきかすべきでないか区別が付かないのでわかりません。
このようなパフォーマンスに悪影響が及ぶ状況を避けるために、ダイナミックメモリーはセカンドレベルページングを使用しません。仮想メモリへのスワッピングはすべて仮想マシン内で行われます。
メモリオーバーコミットやダイナミックメモリーにおいて一番重要なことは、十分なメモリを用意して割り当てることになります。まあ、当たり前のことですが・・・
■ではHyper-V3.0のセカンドレベルページングとは?
ここまで読まれた方は、Hyper-Vではセカンドレベルページングって使われないんでしょ?なぜ、Hyper-Vに「セカンドレベルページングの場所」という設定があるの?と疑問を持たれると思います。そこで内々にある方と世間話をしてみました。
その方もUSに聞いてみたら、まだ説明するレベルにないとのそっけないお返事をいただいたとのこと。
ここからはあくまでも想像のお話しになるのですが、「Hyper-V 3.0のセカンドレベルページングは、ESXのハイパーバイザスワップと同じ方式ではない」のではないか?またダイナミックメモリーでもセカンドレベルページングが使えるかも?などの貴重な話がありました。
ということで、結局何もわからなかったという落ちになりました。
これから、詳しい情報が出てくると思いますがその時には改めて調べてみたいと思います。