Windows 11/10 のネストされた仮想化とは?

ネストされた仮想化により、仮想マシン内でハイパーバイザーを実行できます。Windows 10 にネストされた仮想化が導入されました。必要かどうかは別として、興味深い情報がいくつかあります。

コンテナー内のコンテナー: Windows のネストされた仮想化について

以前は、メインメモリが許す限り多くの並列コンテナーを作成し、さまざまな目的で使用できました。Microsoft は現在、10565 番号の最新の Insider ビルドでネストされた仮想化の機能をリリースしました。Windows のネストされた仮想化の機能により、コンテナー内でコンテナーを作成できます。この機能はまだ完璧ではありませんが、知っておくべきことは次のとおりです。

Hyper V を使用した仮想化

Windows は Droka をサポートしています。これにより、並列で使用できるシンプルなコンテナーを作成したり、シンプルなコンテナーよりも優れていると考えられている Hyper V コンテナーを作成したりできます。Windows コンテナーを並列に作成できますが、多くの場合、同じライブラリとリソースを使用することになります。この場合、1 つ以上の「不良」コンテナーがリソースを保持して他のコンテナーが使用できないようにすることで、ジャムが発生する可能性があります。これが Hyper V コンテナーが導入された唯一の欠点です。

Hyper V コンテナーは、各仮想環境に対してすべてを個別に作成します。つまり、OS さえも再作成され、その仮想コンパートメントで実行されているアプリケーションに提供されます。これは、共通の仮想リソースがないため、競合が発生しないことを意味します。

Windows のネストされた仮想化は Hyper V を使用して実現されます。他の方法を試すこともできますが、Microsoft は現在、ネストされた仮想化は Hyper V コンテナーでのみ機能すると述べています。そのため、1 つのコンテナーを作成してから、その最初のコンテナー内に別のコンテナーを作成する必要があります。他のハイパーバイザーを使用するか、すでに作成したものと並行して別の Hyper V コンテナーを作成しようとすると、機能しない場合があります。ただし、私の頭には疑問が浮かびます。Windows では並列コンテナーは不可能ではないのでしょうか? それについては次のセクションでも説明します。

ネストされた仮想化とは何か、どのように実装するか?

前述のように、Hyper V コンテナーを作成できます。このコンテナーは、他のハイパーバイザーがコンテナーを見られないようにします。つまり、コンテナーのみが CPU として表示され、実際には CPU が他のハイパーバイザーに表示されないため、並列に別のコンテナーを作成することさえできません。この場合の疑問は、2 つ以上の Hyper V コンテナーを並列に作成できるか、作成した最初のコンテナー内でのみコンテナーを作成できるかということです。

Microsoft のブログでは、Hyper V コンテナーを作成すると、他のハイパーバイザーがそれ以上の Hyper V コンテナーをインストールできなくなると述べています。これは、本物の CPU を認識できないためです。すでに作成したコンテナーの外側にさらにコンテナーを作成することはできません。その後、他の仮想化を実行すると、仮想化はコンテナーが実際の CPU であると認識し、そのコンテナー内に仮想コンテナーを作成します。

これがネストされた仮想化です。コンテナー内にコンテナーがあり、それぞれが完全に独立しています。共有ライブラリやドライバーはありません。並列コンテナーの疑問を除けば、良さそうです。Microsoft から借りた画像を以下に示します。ネストされた仮想化の仕組みを説明するために使用します。

ネストされた仮想化の実装については、確認すべき要素がいくつかあります。例を次に示します。

  1. RAM の量 (RAM は制限要因であることに注意してください。RAM で保持できる数だけのコンテナーしか作成できません)
  2. プロセッサがサポートされているか? (MS は、現時点では Intel VT-X のみサポートされていると述べています)
  3. 動的メモリをオフにする
  4. 実行時メモリなどを監視する

現時点では、Microsoft が後段階で対処する可能性のある問題が多数あります。しかし、ネストされた仮想化を試すために、GitHub から呼び出すことができる PowerShell スクリプトを開発しました。

Windows 11/10 はネストされた仮想化をサポートしていますか?

はい、Windows 11 と Windows 10 はネストされた仮想化をサポートしています。ご参考までに、これはソフトウェアベースの機能ではなく、ハードウェア機能です。つまり、コンピューターのハードウェアは SLAT (Second Level Address Translation) をサポートしている必要があります。それ以外の場合は、コンピューターでネストされた仮想化を使用できません。

Windows 11/10 でネストされた仮想化を有効にするにはどうすればよいですか?

Hyper-V を使用して仮想マシンを作成する場合、追加の設定を有効にするかオンにする必要はありません。一方、Virtual Box または VMware を使用して仮想マシンを作成する場合は、それぞれの設定を見つけることができます。仮想マシンを実行する前にそれらをオンにする必要があります。そうすることで、仮想 OS 内に別の仮想マシンを作成して使用できます。

Windows 10 でネストされた仮想化コンテナーを作成する方法など、詳細については、この MSDN ブログ記事を参照してください。