KVM を使用してネストされた BIOS VM を実行するときに 2GB を超える RAM を使用する方法

KVM を使用してネストされた BIOS VM を実行するときに 2GB を超える RAM を使用する方法

Debian 11 を実行している Linux ホストがあり、そのホストには Ubuntu 22.04 VM があります。その VM 内で、ネストされた仮想化を使用して Windows 10 VM を実行したいと考えています。Ubuntu VM は EFI を使用して起動され、ネストされた仮想化は正常に動作します。

Ubuntu VM 内で実行されている Windows VM も EFI を使用して起動すると、すべてが正常に動作し、割り当てたすべての RAM が検出され使用可能になり、VM のパフォーマンスが良好であるため、ネストされた仮想化が正常に動作します。

私の問題は、EFI 使用時にスナップショットが vibvirt で (まだ) サポートされていないため、BIOS を使用する必要があることです。ただし、VM を BIOS に変更すると、ゲストが 2GB の RAM しか認識しなくなる点を除いて、すべて正常に動作します。その VM で Linux を起動して memtest を実行してみましたが、どちらも 2GB しか認識しません。新しい VM を作成してみましたが、まったく同じ動作が見られます (EFI で起動すると正常に動作しますが、BIOS では動作しません)。

VM ディスクと構成を 1:1 でホストにコピーしたところ、8GB 全体 (または設定した値) が正常に検出されました。したがって、この問題はネストされた状態で実行され、BIOS を使用している場合にのみ発生します。

この時点で、非常に単純な qemu コマンドを実行しても、さまざまな構成を試しましたが、何らかの理由で EFI なしでネストして実行すると 2 GB の壁を破ることができません。

私が気づいていない制限があるのでしょうか?

ソフトウェア バージョン (ネストされた Ubuntu VM 内):
QEMU エミュレータ バージョン 7.2.0
libvirtd (libvirt) 9.0.0
Linux 5.19.0-35-generic

答え1

はい、BIOS モードでネストされた仮想化を使用する場合は制限があります。発生している問題は、仮想マシンの BIOS ファームウェアがゲスト オペレーティング システムに 2 GB を超える RAM を公開できないことが原因である可能性があります。

これは BIOS ベースの仮想化の既知の制限であり、BIOS ファームウェアがメモリをマップする方法によって発生します。対照的に、最新の仮想マシンで使用される UEFI ファームウェアはメモリマップ I/O をサポートしており、ゲスト オペレーティング システムはより多くのメモリにアクセスできます。

この制限を回避するには、EFI モードでネストされた仮想化を引き続き使用するか、EFI モードでスナップショットをサポートする別の仮想化テクノロジを使用するように切り替えます。または、仮想マシンの BIOS ファームウェアでメモリ設定を調整することもできますが、これが常に可能または効果的であるとは限りません。

要約すると、ネストされた仮想化による BIOS ベースの仮想化の制限は、ゲスト オペレーティング システムが最大 2 GB の RAM にしかアクセスできない可能性があることです。

関連情報