14.4. 仮想マシンのメモリーの設定
仮想マシンのパフォーマンスを改善するために、追加のホスト RAM を仮想マシンに割り当てることができます。同様に、仮想マシンに割り当てるメモリー量を減らして、ホストメモリーを他の仮想マシンやタスクに割り当てることができます。
これらの操作を実行するには、Web コンソール または コマンドライン を使用します。
14.4.1. メモリーのオーバーコミットメント
KVM ハイパーバイザー上で実行される仮想マシン (VM) には、専用の物理 RAM ブロックが割り当てられません。代わりに、各仮想マシンが Linux プロセスとして機能し、要求された場合にのみホストの Linux カーネルがメモリーを割り当てます。また、ホストのメモリーマネージャーが、仮想マシンのメモリーを独自の物理メモリーとスワップ領域間で移動できます。メモリーオーバーコミットが有効な場合、仮想マシンによって要求された量よりも少ない物理メモリーを割り当てることをカーネルが決定できます。これは、要求されたメモリー量が仮想マシンのプロセスによって完全に使用されないことが多いためです。
デフォルトでは、Linux カーネルでメモリーオーバーコミットが有効になっており、カーネルは仮想マシンの要求に対して安全なメモリーオーバーコミット量を推定します。ただし、メモリーを大量に消費するワークロードでは、オーバーコミットが頻繁に発生するため、システムが不安定になる可能性があります。
メモリーのオーバーコミットを行うには、すべての仮想マシンを収容するためにホスト物理マシンに十分なスワップ領域を割り当てるとともに、ホスト物理マシンのプロセスに十分なメモリーを割り当てる必要があります。推奨される基本的なスワップ領域のサイズについては、What is the recommended swap size for Red Hat platforms? を参照してください。
ホストのメモリー不足に対処するには、次の方法を推奨します。
- 仮想マシンごとに割り当てるメモリーを減らします。
- ホストに物理メモリーを追加します。
- より大きなスワップ領域を使用します。
仮想マシンは頻繁にスワップされると実行速度が低下します。また、オーバーコミットによりシステムのメモリーが不足 (OOM) する可能性があります。これにより、Linux カーネルが重要なシステムプロセスをシャットダウンする可能性があります。
メモリーのオーバーコミットは、デバイスの割り当てでは対応していません。これは、デバイスの割り当てが使用中の場合に、割り当てられたデバイスでダイレクトメモリーアクセス (DMA) を有効にするには、仮想マシンのすべてのメモリーを静的に事前に割り当てる必要があるためです。
関連情報
14.4.2. Web コンソールを使用した仮想マシンのメモリーの追加および削除
仮想マシンのパフォーマンスを向上させるか、仮想マシンが使用するホストリソースを解放するために、Web コンソールを使用して、仮想マシンに割り当てられたメモリーの量を調整できます。
前提条件
- RHEL 8 Web コンソールがインストールされている。
- cockpit サービスが有効になっている。
ユーザーアカウントが Web コンソールにログインできる。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。
仮想マシンの設定に
memballoon
デバイスが含まれていることを確認します。# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
このコマンドで出力が表示され、モデルが
none
に設定されていない場合は、memballoon
デバイスが存在します。バルーンドライバーがゲスト OS で実行していることを確認します。
-
Windows ゲストでは、ドライバーは
virtio-win
ドライバーパッケージの一部としてインストールされます。手順は、Installing paravirtualized KVM drivers for Windows virtual machines を参照してください。 -
Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、
memballoon
デバイスがあれば、アクティベートされます。
-
Windows ゲストでは、ドライバーは
- Web コンソールの VM プラグインが システムにインストールされている。
手順
オプション: 仮想マシンの最大メモリーと現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
RHEL 8 Web コンソールにログインします。
詳細は、Web コンソールへのログイン を参照してください。
新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。
概要ペインで、
Memory
行の横にある をクリックします。メモリー調整
ダイアログが表示されます。選択した仮想マシンの仮想メモリーを設定します。
最大割り当て: 仮想マシンがそのプロセスに使用できるホストメモリーの最大量を設定します。VM の作成時に最大メモリーを指定することも、後で増やすこともできます。メモリーは、MiB または GiB の倍数で指定できます。
仮想マシンをシャットダウンしてからでないと、最大メモリー割り当てを調整できません。
現在の割り当て - 仮想マシンに割り当てる実際のメモリー量を設定します。この値は、最大割り当てより小さい値にすることができますが、上限を超えることはできません。値を調整して、仮想マシンで利用可能なメモリーをプロセス用に調整できます。メモリーは、MiB または GiB の倍数で指定できます。
この値を指定しない場合、デフォルトの割り当ては最大割り当て の値になります。
仮想マシンのメモリー割り当てが調整されます。
14.4.3. コマンドラインを使用した仮想マシンのメモリーの追加と削除
仮想マシンのパフォーマンスを改善したり、使用しているホストリソースを解放したりするために、CLI を使用して仮想マシンに割り当てられたメモリーの量を調整できます。
前提条件
ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。
仮想マシンの設定に
memballoon
デバイスが含まれていることを確認します。# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
このコマンドで出力が表示され、モデルが
none
に設定されていない場合は、memballoon
デバイスが存在します。ballon ドライバーがゲスト OS で実行されていることを確認します。
-
Windows ゲストでは、ドライバーは
virtio-win
ドライバーパッケージの一部としてインストールされます。手順は、Installing paravirtualized KVM drivers for Windows virtual machines を参照してください。 -
Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、
memballoon
デバイスがあれば、アクティベートされます。
-
Windows ゲストでは、ドライバーは
手順
オプション: 仮想マシンの最大メモリーと現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
仮想マシンに割り当てる最大メモリーを調整します。この値を増やすと、仮想マシンのパフォーマンスが低下する可能性が向上し、値を減らすことで、仮想マシンがホスト上にあるパフォーマンスフットプリントが低減します。この変更は、停止している仮想マシンでのみ実行できるため、実行中の仮想マシンを調整するには再起動する必要があります。
たとえば、仮想マシン testguest が使用可能な最大メモリーを 4096 MiB に変更するには、次のコマンドを実行します。
# virt-xml testguest --edit --memory memory=4096,currentMemory=4096 Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off.
実行中の仮想マシンの最大メモリーを増やすには、仮想マシンにメモリーデバイスを割り当てます。これは、メモリーのホットプラグとも呼ばれます。詳細は、デバイスの仮想マシンへの接続 を参照してください。
警告実行中の仮想マシン (メモリーのホットアンプラグとも呼ばれる) から、メモリーデバイスを削除することはサポートされておらず、Red Hat では推奨していません。
オプション: 仮想マシンで現在使用されているメモリーを最大割り当て量まで調整することもできます。これにより、仮想マシンの最大割り当てを変更せずに、仮想マシンが次回の再起動までホスト上にあるメモリー負荷が調整されます。
# virsh setmem testguest --current 2048
検証
仮想マシンが使用するメモリーが更新されていることを確認します。
# virsh dominfo testguest Max memory: 4194304 KiB Used memory: 2097152 KiB
現在の仮想マシンメモリーを調整した場合は、仮想マシンのメモリーバルーンの統計情報を取得して、そのメモリー使用量がどの程度効果的に制御されているかを評価できます。
# virsh domstats --balloon testguest Domain: 'testguest' balloon.current=365624 balloon.maximum=4194304 balloon.swap_in=0 balloon.swap_out=0 balloon.major_fault=306 balloon.minor_fault=156117 balloon.unused=3834448 balloon.available=4035008 balloon.usable=3746340 balloon.last-update=1587971682 balloon.disk_caches=75444 balloon.hugetlb_pgalloc=0 balloon.hugetlb_pgfail=0 balloon.rss=1005456
14.4.4. huge page を使用するように仮想マシンを設定する
特定のユースケースでは、デフォルトの 4 KiB メモリーページの代わりに huge page を使用することで、仮想マシン (VM) のメモリー割り当てを改善できます。たとえば、huge page は、データベースサーバーなど、メモリー使用率の高い仮想マシンのパフォーマンスを向上させることができます。
前提条件
- メモリー割り当てで huge page を使用するようにホストが設定されている。手順については、起動時の HugeTLB の設定 を参照してください。
手順
- 選択した仮想マシンが実行中の場合はシャットダウンします。
1 GiB の huge page を使用するように仮想マシンを設定するために、仮想マシンの XML 定義を開いて編集します。たとえば、
testguest
仮想マシンを編集するには、次のコマンドを実行します。# virsh edit testguest
XML 定義の
<memoryBacking>
セクションに次の行を追加します。<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>
検証
- 仮想マシンを起動します。
ホストが実行中の仮想マシンに huge page を正常に割り当てたことを確認します。ホスト上で次のコマンドを実行します。
# cat /proc/meminfo | grep Huge HugePages_Total: 4 HugePages_Free: 2 HugePages_Rsvd: 1 Hugepagesize: 1024000 kB
空き huge page と予約済み huge page の数 (
HugePages_Free
+HugePages_Rsvd
) を足すと、結果が huge page の合計数 (HugePages_Total
) よりも少なくなるはずです。この差は、実行中の仮想マシンによって使用される huge page の数によるものです。
関連情報