18.5. 仮想マシンのメモリーの設定
仮想マシンのパフォーマンスを改善するために、追加のホスト RAM を仮想マシンに割り当てることができます。同様に、仮想マシンに割り当てるメモリー量を減らして、ホストメモリーを他の仮想マシンやタスクに割り当てることができます。
これらの操作を実行するには、Web コンソール または コマンドライン を使用します。
18.5.1. メモリーのオーバーコミット
KVM ハイパーバイザーで実行している仮想マシンには、物理 RAM の専用ブロックが割り当てられていません。代わりに、各仮想マシンは、ホストの Linux カーネルが、要求された場合にのみメモリーを割り当てる Linux プロセスとして機能します。さらに、ホストのメモリーマネージャーは、仮想マシンのメモリーを、自身の物理メモリーとスワップ領域の間で移動できます。メモリーのオーバーコミットが有効にされている場合、カーネルは仮想マシンのプロセスで要求する量よりも少ない物理メモリーを割り当てることを決定できます。これは、要求されるメモリー量が仮想マシンのプロセスによって完全に使用されていないためです。
デフォルトで、Linux カーネルではメモリーのオーバーコミットが有効になり、カーネルは仮想マシンの要求に対してメモリーのオーバーコミットの安全な量を推定します。ただし、メモリーを大量に消費するワークロードに対するオーバーコミットが頻繁に行われても、システムが不安定になる可能性があります。
メモリーのオーバーコミットでは、すべての仮想マシンに対応するのに十分な swap 領域と、ホストマシンのプロセスに十分なメモリーを割り当てる必要があります。基本的な推奨スワップ領域サイズの説明は、What is the recommended swap size for Red Hat platforms?を参照してください。
ホストのメモリー不足に対応するために推奨される方法は、以下のとおりです。
- 仮想マシンごとに割り当てるメモリーが少なくなります。
- ホストに物理メモリーをさらに追加します。
- 大きなスワップ領域を使用します。
頻繁にスワップされると、仮想マシンの実行は遅くなります。また、オーバーコミットによりシステムのメモリーが不足 (OOM) する可能性があります。これにより、Linux カーネルが重要なシステムプロセスをシャットダウンする可能性があります。
メモリーのオーバーコミットは、デバイスの割り当てでは対応していません。これは、デバイスの割り当てが使用されている場合、割り当てられたデバイスでダイレクトメモリーアクセス(DMA)を有効にするには、すべての仮想マシンのメモリーを静的に事前に割り当てる必要があるためです。
18.5.2. Web コンソールを使用した仮想マシンのメモリーの追加および削除
仮想マシンのパフォーマンスを向上させるか、仮想マシンが使用するホストリソースを解放するために、Web コンソールを使用して、仮想マシンに割り当てられたメモリーの量を調整できます。
前提条件
- RHEL 9 Web コンソールがインストールされている。
- cockpit サービスが有効になっている。
ユーザーアカウントが Web コンソールにログインできる。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。
仮想マシンの設定に
memballoon
デバイスが含まれていることを確認します。virsh dumpxml testguest | grep memballoon
# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
Copy to Clipboard Copied! このコマンドで出力が表示され、モデルが
none
に設定されていない場合は、memballoon
デバイスが存在します。バルーンドライバーがゲスト OS で実行していることを確認します。
-
Windows ゲストでは、ドライバーは
virtio-win
ドライバーパッケージの一部としてインストールされます。手順は、Installing KVM paravirtualized drivers for Windows virtual machines を参照してください。 -
Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、
memballoon
デバイスがあれば、アクティベートされます。
-
Windows ゲストでは、ドライバーは
- Web コンソールの仮想マシンプラグインが システムにインストールされている。
手順
オプション: 仮想マシンの最大メモリーと現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。
virsh dominfo testguest
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
Copy to Clipboard Copied!
RHEL 9 Web コンソールにログインします。
詳細は、Web コンソールへのログイン を参照してください。
新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。
概要ペインで、
Memory
行の横にある をクリックします。メモリー調整
ダイアログが表示されます。選択した仮想マシンの仮想メモリーを設定します。
最大割り当て: 仮想マシンがそのプロセスに使用できるホストメモリーの最大量を設定します。VM の作成時に最大メモリーを指定することも、後で増やすこともできます。メモリーは、MiB または GiB の倍数で指定できます。
仮想マシンをシャットダウンしてからでないと、最大メモリー割り当てを調整できません。
現在の割り当て - 仮想マシンに割り当てる実際のメモリー量を設定します。この値は、最大割り当てより小さい値にすることができますが、上限を超えることはできません。値を調整して、仮想マシンで利用可能なメモリーをプロセス用に調整できます。メモリーは、MiB または GiB の倍数で指定できます。
この値を指定しない場合、デフォルトの割り当ては最大割り当て の値になります。
仮想マシンのメモリー割り当てが調整されます。
18.5.3. コマンドラインを使用した仮想マシンのメモリーの追加と削除
仮想マシンのパフォーマンスを改善したり、使用しているホストリソースを解放したりするために、CLI を使用して仮想マシンに割り当てられたメモリーの量を調整できます。
前提条件
ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。
仮想マシンの設定に
memballoon
デバイスが含まれていることを確認します。virsh dumpxml testguest | grep memballoon
# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
Copy to Clipboard Copied! このコマンドで出力が表示され、モデルが
none
に設定されていない場合は、memballoon
デバイスが存在します。ballon ドライバーがゲスト OS で実行されていることを確認します。
-
Windows ゲストでは、ドライバーは
virtio-win
ドライバーパッケージの一部としてインストールされます。手順は、Installing KVM paravirtualized drivers for Windows virtual machines を参照してください。 -
Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、
memballoon
デバイスがあれば、アクティベートされます。
-
Windows ゲストでは、ドライバーは
手順
オプション: 仮想マシンの最大メモリーと現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。
virsh dominfo testguest
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
Copy to Clipboard Copied! 仮想マシンに割り当てる最大メモリーを調整します。この値を増やすと、仮想マシンのパフォーマンスが低下する可能性が向上し、値を減らすことで、仮想マシンがホスト上にあるパフォーマンスフットプリントが低減します。この変更は、停止している仮想マシンでのみ実行できるため、実行中の仮想マシンを調整するには再起動する必要があります。
たとえば、仮想マシン testguest が使用可能な最大メモリーを 4096 MiB に変更するには、次のコマンドを実行します。
virt-xml testguest --edit --memory memory=4096,currentMemory=4096
# virt-xml testguest --edit --memory memory=4096,currentMemory=4096 Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off.
Copy to Clipboard Copied! 実行中の仮想マシンの最大メモリーを増やすには、仮想マシンにメモリーデバイスを割り当てます。これは、メモリーのホットプラグとも呼ばれます。詳細は、Attaching memory devices to virtual machines を参照してください。
警告実行中の仮想マシン (メモリーのホットアンプラグとも呼ばれる) から、メモリーデバイスを削除することはサポートされておらず、Red Hat では推奨していません。
オプション: 仮想マシンで現在使用されているメモリーを最大割り当て量まで調整することもできます。これにより、仮想マシンの最大割り当てを変更せずに、仮想マシンが次回の再起動までホスト上にあるメモリー負荷が調整されます。
virsh setmem testguest --current 2048
# virsh setmem testguest --current 2048
Copy to Clipboard Copied!
検証
仮想マシンが使用するメモリーが更新されていることを確認します。
virsh dominfo testguest
# virsh dominfo testguest Max memory: 4194304 KiB Used memory: 2097152 KiB
Copy to Clipboard Copied! 現在の仮想マシンメモリーを調整した場合は、仮想マシンのメモリーバルーンの統計情報を取得して、そのメモリー使用量がどの程度効果的に制御されているかを評価できます。
virsh domstats --balloon testguest
# 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
Copy to Clipboard Copied!
18.5.4. Huge Page を使用するための仮想マシンの設定
特定のユースケースでは、デフォルトの 4 KiB メモリーページの代わりにヒュージページを使用して、仮想マシンのメモリー割り当てを改善できます。たとえば、Huge Page を使用すると、データベースサーバーなどのメモリー使用率が多い仮想マシンのパフォーマンスを向上できます。
前提条件
- ホストが、メモリー割り当てでヒュージページを使用するように設定されています。手順は、起動 時の HugeTLB の設定を参照してください。
手順
- 選択した仮想マシンが実行中の場合はシャットダウンします。
1 GiB の Huge Page を使用するように仮想マシンを設定するには、仮想マシンの XML 定義を開いて編集します。たとえば、仮想マシン
testguest
を編集するには、次のコマンドを実行します。virsh edit testguest
# virsh edit testguest
Copy to Clipboard Copied! XML 定義の <
memoryBacking> セクションに
以下の行を追加します。<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>
<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>
Copy to Clipboard Copied!
検証
- 仮想マシンを起動します。
ホストが実行中の仮想マシンに Huge Page を正常に割り当てたことを確認します。ホストで以下のコマンドを実行します。
cat /proc/meminfo | grep Huge HugePages_Total: 4 HugePages_Free: 2 HugePages_Rsvd: 1 Hugepagesize: 1024000 kB
# cat /proc/meminfo | grep Huge HugePages_Total: 4 HugePages_Free: 2 HugePages_Rsvd: 1 Hugepagesize: 1024000 kB
Copy to Clipboard Copied! 空きページおよび予約された Huge Page (
HugePages_Free
+HugePages_Rsvd
)の数を一緒に追加すると、その結果は Huge Page の合計数(HugePages_Total
)よりも小さくなるはずです。相違点は、実行中の仮想マシンで使用される Huge Page の数です。
18.5.5. virtio-mem を使用した仮想マシンメモリーの追加および削除
RHEL 9 は、virtio-mem
準仮想化メモリーデバイスを提供します。このデバイスを使用すると、仮想マシン (VM) 内のホストメモリーを動的に追加または削除できます。たとえば、virtio-mem
を使用して、実行中の仮想マシン間でメモリーリソースを移動したり、現在の要件に基づいてクラウドセットアップの仮想マシンメモリーのサイズを変更したりできます。
18.5.5.1. virtio-mem の概要
virtio-mem
は、仮想マシンでホストメモリーを動的に追加または削除するために使用できる準仮想化メモリーデバイスです。たとえば、このデバイスを使用して、実行中の仮想マシン間でメモリーリソースを移動したり、現在の要件に基づいてクラウドセットアップの仮想マシンメモリーのサイズを変更したりできます。
virtio-mem
を使用すると、4 から数百メビバイト (MiB) の単位で、仮想マシンのメモリーを初期サイズより増やしたり、元のサイズに縮小したりできます。ただし、virtio-mem
は、特にメモリーを確実にアンプラグするために、特定のゲストオペレーティングシステム設定にも依存していることに注意してください。
virtio-mem 機能の制限
virtio-mem
は現在、以下の機能と互換性がありません。
- ホスト上のリアルタイムアプリケーションのメモリーロックの使用
- ホストでの暗号化された仮想化の使用
-
virtio-mem
とホスト上でのmemballoon
膨張および収縮の組み合わせ -
仮想マシンでの
virtio_mem
ドライバーのアンロードまたはリロード -
virtiofs
を除く vhost-user デバイスの使用
18.5.5.2. 仮想マシンでのメモリーのオンライン化設定
virtio-mem
を使用して実行中の仮想マシンにメモリーを接続する (メモリーのホットプラグとも呼ばれます) 前に、ホットプラグされたメモリーが自動的にオンライン状態に設定されるように仮想マシン (VM) オペレーティングシステムを設定する必要があります。そうしないと、ゲストオペレーティングシステムは追加メモリーを使用できなくなります。メモリーのオンライン化については、次のいずれかの設定から選択できます。
-
online_movable
-
online_kernel
-
auto-movable
これらの設定の違いについては、メモリーのオンライン化設定の比較 を参照してください。
RHEL では、メモリーのオンライン化はデフォルトで udev ルールで設定されます。ただし、virtio-mem
を使用する場合は、カーネル内でメモリーのオンライン化を直接設定することを推奨します。
前提条件
- ホストが、Intel 64、AMD64、または ARM 64 CPU アーキテクチャーを使用している。
- ホストがオペレーティングシステムとして RHEL 9.4 以降を使用している。
ホスト上で実行されている仮想マシンが、次のいずれかのオペレーティングシステムバージョンを使用している。
RHEL 8.10
重要RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。
- RHEL 9
手順
仮想マシンで
online_movable
設定を使用するようにメモリーオンライン化を設定するには、以下を実行します。memhp_default_state
カーネルコマンドラインパラメーターをonline_movable
に設定します。grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
Copy to Clipboard Copied! - 仮想マシンを再起動します。
仮想マシンで
online_kernel
設定を使用するようにメモリーオンライン化を設定するには、以下を実行します。以下のように、
memhp_default_state
カーネルコマンドラインパラメーターをonline_kernel
に設定します。grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
Copy to Clipboard Copied! - 仮想マシンを再起動します。
仮想マシンで
auto-movable
メモリーオンライン化ポリシーを使用するには、以下の手順を実行します。memhp_default_state
カーネルコマンドラインパラメーターをonline
に設定します。grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
Copy to Clipboard Copied! memory_hotplug.online_policy
カーネルコマンドラインパラメーターをauto-movable
に設定します。grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
# grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
Copy to Clipboard Copied! オプション:
auto-movable
オンライン化ポリシーをさらにチューニングするには、memory_hotplug.auto_movable_ratio
およびmemory_hotplug.auto_movable_numa_aware
パラメーターを変更します。grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage> grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
# grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage> # grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
Copy to Clipboard Copied! -
memory_hotplug.auto_movable_ratio parameter
は、任意の割り当てに使用できるメモリーと比較すると、移動可能な割り当てにのみ使用できるメモリーの最大比率を設定します。比率はパーセントで表され、デフォルト値は 3:1 の比率である 301 (%) です。 memory_hotplug.auto_movable_numa_aware
パラメーターは、memory_hotplug.auto_movable_ratio
パラメーターを使用可能なすべての NUMA ノードのメモリーに適用するか、単一の NUMA ノード内のメモリーのみに適用するかを制御します。デフォルト値は y (yes) です。たとえば、最大比率を 301% に設定し、
memory_hotplug.auto_movable_numa_aware
が y (yes) に設定されている場合は、アタッチされたvirtio-mem
デバイスを持つ NUMA ノード内でも 3:1 の比率が適用されます。パラメーターが n (no) に設定されている場合、最大 3:1 の比率はすべての NUMA ノード全体に対してのみ適用されます。また、比率を超えていない場合、新しくホットプラグされたメモリーは、移動可能な割り当てに対してのみ利用できます。それ以外の場合では、新しくホットプラグされたメモリーは、移動可能な割り当てと移動不可能な割り当ての両方に使用できます。
-
- 仮想マシンを再起動します。
検証
online_movable
設定が正しく設定されているかを確認するには、memhp_default_state
カーネルパラメーターの現在の値を確認します。cat /sys/devices/system/memory/auto_online_blocks online_movable
# cat /sys/devices/system/memory/auto_online_blocks online_movable
Copy to Clipboard Copied! online_kernel
設定が正しく設定されているかを確認するには、memhp_default_state
カーネルパラメーターの現在の値を確認します。cat /sys/devices/system/memory/auto_online_blocks online_kernel
# cat /sys/devices/system/memory/auto_online_blocks online_kernel
Copy to Clipboard Copied! auto-movable
設定が正しく設定されているかを確認するには、以下のカーネルパラメーターを確認してください。memhp_default_state
:cat /sys/devices/system/memory/auto_online_blocks online
# cat /sys/devices/system/memory/auto_online_blocks online
Copy to Clipboard Copied! memory_hotplug.online_policy
:cat /sys/module/memory_hotplug/parameters/online_policy auto-movable
# cat /sys/module/memory_hotplug/parameters/online_policy auto-movable
Copy to Clipboard Copied! memory_hotplug.auto_movable_ratio
:cat /sys/module/memory_hotplug/parameters/auto_movable_ratio 301
# cat /sys/module/memory_hotplug/parameters/auto_movable_ratio 301
Copy to Clipboard Copied! memory_hotplug.auto_movable_numa_aware
:cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware y
# cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware y
Copy to Clipboard Copied!
18.5.5.3. Attaching a virtio-mem device to virtual machines
実行中の仮想マシンに追加のメモリーをアタッチ (メモリーのホットプラグとも呼ばれます) し、その後ホットプラグされたメモリーのサイズを変更できるようにするには、virtio-mem
デバイスを使用できます。具体的には、libvirt XML 設定ファイルと virsh
コマンドを使用し、virtio-mem
デバイスを定義して仮想マシン (VM) に割り当てることができます。
前提条件
- ホストが、Intel 64、AMD64、または ARM 64 CPU アーキテクチャーを使用している。
- ホストがオペレーティングシステムとして RHEL 9.4 以降を使用している。
ホスト上で実行されている仮想マシンが、次のいずれかのオペレーティングシステムバージョンを使用している。
RHEL 8.10
重要RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。
- RHEL 9
- VM にメモリーオンライン化が設定されている。手順は、仮想マシンでのメモリーのオンライン化設定 を参照してください。
手順
ターゲット仮想マシンの XML 設定に
maxMemory
パラメーターが含まれるようにします。virsh edit testguest1
# virsh edit testguest1 <domain type='kvm'> <name>testguest1</name> ... <maxMemory unit='GiB'>128</maxMemory> ... </domain>
Copy to Clipboard Copied! この例では、
testguest1
仮想マシンの XML 設定で、128 ギビバイト (GiB) のmaxMemory
パラメーターが定義されています。maxMemory
サイズは、仮想マシンが使用できる最大メモリーを指定します。これには、初期メモリーとホットプラグされたメモリーの両方が含まれます。XML ファイルを作成して開き、ホスト上の
virtio-mem
デバイスを定義します。次に例を示します。vim virtio-mem-device.xml
# vim virtio-mem-device.xml
Copy to Clipboard Copied! virtio-mem
デバイスの XML 定義をファイルに追加し、保存します。<memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>0</node> <block unit='MiB'>2</block> <requested unit='GiB'>16</requested> <current unit='GiB'>16</current> </target> <alias name='ua-virtiomem0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memory> <memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>1</node> <block unit='MiB'>2</block> <requested unit='GiB'>0</requested> <current unit='GiB'>0</current> </target> <alias name='ua-virtiomem1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memory>
<memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>0</node> <block unit='MiB'>2</block> <requested unit='GiB'>16</requested> <current unit='GiB'>16</current> </target> <alias name='ua-virtiomem0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memory> <memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>1</node> <block unit='MiB'>2</block> <requested unit='GiB'>0</requested> <current unit='GiB'>0</current> </target> <alias name='ua-virtiomem1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memory>
Copy to Clipboard Copied! この例では、2 つの
virtio-mem
デバイスが以下のパラメーターで定義されます。-
size
: これは、デバイスの最大サイズです。この例では 48 GiB です。size
はblock
サイズの倍数である必要があります。 -
node
: これは、virtio-mem
デバイスに割り当てられた vNUMA ノードです。 -
block
: これはデバイスのブロックサイズです。これは、少なくとも transparent huge page (THP) のサイズである必要があります。THP は、Intel 64 および AMD64 CPU アーキテクチャーでは 2 MiB です。ARM64 アーキテクチャーでは、THP のサイズはベースページサイズに応じて 2 MiB または 512 MiB になります。通常、Intel 64 または AMD64 アーキテクチャーでは、2 MiB ブロックサイズが適切なデフォルトの選択となります。virtio-mem
を Virtual Function I/O (VFIO) または 仲介デバイス (mdev) で使用する場合、すべてのvirtio-mem
デバイスにまたがるブロックの合計数は 32768 を超えることはできません。超えると、RAM のプラグインに失敗する可能性があります。 -
requested
: これは、virtio-mem
デバイスを使用して仮想マシンに割り当てるメモリー量です。ただし、これは VM に対する単なるリクエストであり、VM が適切に設定されていない場合など、正常に解決されない可能性があります。requested
サイズはblock
サイズの倍数である必要があり、定義された最大size
を超えることはできません。 -
current
: これは、virtio-mem
デバイスが仮想マシンに提供する現在のサイズを表します。たとえば、リクエストを完了できない場合や VM を再起動する場合など、current
サイズは、requested
サイズとは異なる場合があります。 alias
: これは、libvirt コマンドでデバイスを編集する場合など、目的のvirtio-mem
デバイスを指定するために使用できるオプションのユーザー定義のエイリアスです。libvirt のすべてのユーザー定義のエイリアスは、"ua-" 接頭辞で始まる必要があります。これらの特定のパラメーターとは別に、
libvirt
は、virtio-mem
デバイスを他の PCI デバイスと同様に処理します。VM に接続された PCI デバイスの管理の詳細は、仮想デバイスの管理 を参照してください。
-
XML ファイルを使用して、定義された
virtio-mem
デバイスを仮想マシンにアタッチします。たとえば、virtio-mem-device.xml
で定義された 2 つのデバイスを実行中の仮想マシンtestguest1
に永続的にアタッチするには、次のコマンドを実行します。virsh attach-device testguest1 virtio-mem-device.xml --live --config
# virsh attach-device testguest1 virtio-mem-device.xml --live --config
Copy to Clipboard Copied! --live
オプションは、実行中の仮想マシンにのみデバイスを接続します。再起動後に永続性は維持されません。--config
オプションは、設定の変更を永続化します。--live
オプションを指定せずに、デバイスをシャットダウンした仮想マシンに接続することもできます。オプション: 実行中の仮想マシンに接続されている
virtio-mem
デバイスのrequested
サイズを動的に変更するには、virsh update-memory-device
コマンドを使用します。virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
# virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
Copy to Clipboard Copied! この例では、以下が適用されます。
-
testguest1
は、更新する仮想マシンです。 -
--alias ua-virtiomem0
は、以前に定義されたエイリアスで指定されたvirtio-mem
デバイスです。 --requested-size 4GiB
は、virtio-mem
デバイスのrequested
サイズを 4 GiB に変更します。警告requested
サイズを減らして実行中の仮想マシンからメモリーをアンプラグすると、信頼性が低下する可能性があります。このプロセスが成功するかどうかは、使用中のメモリーラインニングポリシーなど、さまざまな要因によって決まります。場合によっては、その時点でホットプラグされたメモリーの量を変更できないため、ゲストオペレーティングシステムが要求を正常に完了できないことがあります。
さらに、RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。
-
オプション: シャットダウンした仮想マシンから
virtio-mem
デバイスを取り外すには、virsh detach-device
コマンドを使用します。virsh detach-device testguest1 virtio-mem-device.xml
# virsh detach-device testguest1 virtio-mem-device.xml
Copy to Clipboard Copied! オプション: 実行中の仮想マシンから
virtio-mem
デバイスを取り外すには、以下を実行します。virtio-mem
デバイスのrequested
サイズを 0 に変更します。そうしないと、実行中の仮想マシンからvirtio-mem
デバイスを取り外す試行が失敗します。virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
# virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
Copy to Clipboard Copied! 実行中の仮想マシンから
virtio-mem
デバイスを取り外します。virsh detach-device testguest1 virtio-mem-device.xml --config
# virsh detach-device testguest1 virtio-mem-device.xml --config
Copy to Clipboard Copied!
検証
仮想マシンで、利用可能な RAM を確認し、合計量にホットプラグされたメモリーが含まれているかを確認します。
free -h
# free -h total used free shared buff/cache available Mem: 31Gi 5.5Gi 14Gi 1.3Gi 11Gi 23Gi Swap: 8.0Gi 0B 8.0Gi
Copy to Clipboard Copied! numactl -H
# numactl -H available: 1 nodes (0) node 0 cpus: 0 1 2 3 4 5 6 7 node 0 size: 29564 MB node 0 free: 13351 MB node distances: node 0 0: 10
Copy to Clipboard Copied! 実行中の仮想マシンの XML 設定を表示して、プラグイン RAM の現在の容量をホストで表示することもできます。
virsh dumpxml testguest1
# virsh dumpxml testguest1 <domain type='kvm'> <name>testguest1</name> ... <currentMemory unit='GiB'>31</currentMemory> ... <memory model='virtio-mem'> <target> <size unit='GiB'>48</size> <node>0</node> <block unit='MiB'>2</block> <requested unit='GiB'>16</requested> <current unit='GiB'>16</current> </target> <alias name='ua-virtiomem0'/> <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/> ... </domain>
Copy to Clipboard Copied! この例では、以下が適用されます。
-
<currentMemory unit='GiB'>31</currentMemory>
は、すべてのソースから VM で利用可能な合計 RAM を表します。 -
<current unit='GiB'>16</current>
は、virtio-mem
デバイスが提供するプラグイン RAM の現在のサイズを表します。
-
18.5.5.4. メモリーのオンライン化設定の比較
実行中の RHEL 仮想マシンにメモリーをアタッチする場合 (メモリーのホットプラグとも呼ばれます)、仮想マシン (VM) のオペレーティングシステムでホットプラグされたメモリーをオンライン状態に設定する必要があります。そうしないと、システムはメモリーを使用できなくなります。
次の表は、利用可能なメモリーのオンライン化設定を選択する際の主な考慮事項をまとめたものです。
設定名 | 仮想マシンからのメモリーのアンプラグ | メモリーゾーンの不均等性が発生するリスク | 潜在的なユースケース | 目的のワークロードのメモリー要件 |
---|---|---|---|---|
| ホットプラグされたメモリーを確実に取り外すことができます。 | あり | 比較的少量のメモリーのホットプラグ | ほとんどがユーザー空間のメモリー |
| ホットプラグされたメモリーの可動部分は確実に取り外すことができます。 | 最小 | 大量のメモリーのホットプラグ | ほとんどがユーザー空間のメモリー |
| ホットプラグされたメモリーは確実に取り外すことができません。 | なし | 信頼性の低いメモリーの取り外しは許容されます。 | ユーザー空間またはカーネル空間のメモリー |
ゾーン不均衡 とは、Linux メモリーゾーンの 1 つに、使用可能なメモリーページがないことです。ゾーン不均衡 になると、システムのパフォーマンスに悪影響を及ぼす可能性があります。たとえば、移動不可能な割り当てが原因で空きメモリーが不足すると、カーネルがクラッシュする可能性があります。通常、移動可能な割り当てには、主にユーザー空間のメモリーページが含まれ、移動不可能な割り当てには、主にカーネル空間のメモリーページが含まれています。