15.5.3.3. Attaching a virtio-mem device to virtual machines


実行中の仮想マシンに追加のメモリーをアタッチ (メモリーのホットプラグとも呼ばれます) し、その後ホットプラグされたメモリーのサイズを変更できるようにするには、virtio-mem デバイスを使用できます。具体的には、libvirt XML 設定ファイルと virsh コマンドを使用し、virtio-mem デバイスを定義して仮想マシン (VM) に割り当てることができます。

前提条件

  • ホストが、Intel 64、AMD64、ARM 64、または IBM Z CPU アーキテクチャーを使用している。
  • ホストは、以下のいずれかのオペレーティングシステムバージョンを使用します。

    • Intel 64 ホストおよび AMD64 ホスト - RHEL 9.4 以降
    • ARM 64 ホストの場合: RHEL 9.6 以降
    • IBM Z ホストの場合:RHEL 9.7 以降
  • ホスト上で実行されている仮想マシンが、次のいずれかのオペレーティングシステムバージョンを使用している。

    • Intel 64 ホストおよび AMD64 ホスト - RHEL 8.10、RHEL 9.4 以降、または RHEL 10.0 以降

      重要

      RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。

    • ARM 64 ホストの場合: RHEL 9.6 以降または RHEL 10.0 以降
    • IBM Z ホストの場合: RHEL 9.7 以降または RHEL 10.1 以降
  • VM にメモリーオンライン化が設定されている。手順は、仮想マシンでのメモリーのオンライン化設定 を参照してください。

手順

  1. ターゲット仮想マシンの XML 設定に maxMemory パラメーターが含まれるようにします。

    # virsh edit testguest1
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <maxMemory unit='GiB'>128</maxMemory>
      ...
    </domain>

    この例では、testguest1 仮想マシンの XML 設定で、128 ギビバイト (GiB) の maxMemory パラメーターが定義されています。maxMemory サイズは、仮想マシンが使用できる最大メモリーを指定します。これには、初期メモリーとホットプラグされたメモリーの両方が含まれます。

  2. XML ファイルを作成して開き、ホスト上の virtio-mem デバイスを定義します。次に例を示します。

    # vim virtio-mem-device.xml
  3. 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>

    この例では、2 つの virtio-mem デバイスが以下のパラメーターで定義されます。

    • size: これは、デバイスの最大サイズです。この例では 48 GiB です。sizeblock サイズの倍数である必要があります。
    • 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-memVirtual 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 デバイスと同様に処理します。

  4. XML ファイルを使用して、定義された virtio-mem デバイスを仮想マシンにアタッチします。たとえば、virtio-mem-device.xml で定義された 2 つのデバイスを実行中の仮想マシン testguest1 に永続的にアタッチするには、次のコマンドを実行します。

    # virsh attach-device testguest1 virtio-mem-device.xml --live --config

    --live オプションは、実行中の仮想マシンにのみデバイスを接続します。再起動後に永続性は維持されません。--config オプションは、設定の変更を永続化します。--live オプションを指定せずに、デバイスをシャットダウンした仮想マシンに接続することもできます。

  5. オプション: 実行中の仮想マシンに接続されている virtio-mem デバイスの requested サイズを動的に変更するには、virsh update-memory-device コマンドを使用します。

    # virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB

    この例では、以下が適用されます。

    • testguest1 は、更新する仮想マシンです。
    • --alias ua-virtiomem0 は、以前に定義されたエイリアスで指定された virtio-mem デバイスです。
    • --requested-size 4GiB は、virtio-mem デバイスの requested サイズを 4 GiB に変更します。

      警告

      requested サイズを減らして実行中の仮想マシンからメモリーをアンプラグすると、信頼性が低下する可能性があります。このプロセスが成功するかどうかは、使用中のメモリーオンライン化ポリシーなど、さまざまな要因によって決まります。

      場合によっては、その時点でホットプラグされたメモリーの量を変更できないため、ゲストオペレーティングシステムが要求を正常に完了できないことがあります。

      さらに、RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。

  6. オプション: シャットダウンした仮想マシンから virtio-mem デバイスを取り外すには、virsh detach-device コマンドを使用します。

    # virsh detach-device testguest1 virtio-mem-device.xml
  7. オプション: 実行中の仮想マシンから virtio-mem デバイスを取り外すには、以下を実行します。

    1. virtio-mem デバイスの requested サイズを 0 に変更します。そうしないと、実行中の仮想マシンから virtio-mem デバイスを取り外す試行が失敗します。

      # virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
    2. 実行中の仮想マシンから virtio-mem デバイスを取り外します。

      # virsh detach-device testguest1 virtio-mem-device.xml --config

検証

  • 仮想マシンで、利用可能な RAM を確認し、合計量にホットプラグされたメモリーが含まれているかを確認します。

    # free -h
    
            total    used    free   shared  buff/cache   available
    Mem:    31Gi     5.5Gi   14Gi   1.3Gi   11Gi         23Gi
    Swap:   8.0Gi    0B      8.0Gi
    # 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
  • 実行中の仮想マシンの XML 設定を表示して、プラグイン RAM の現在の容量をホストで表示することもできます。

    # 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>

    この例では、以下が適用されます。

    • <currentMemory unit='GiB'>31</currentMemory> は、すべてのソースから VM で利用可能な合計 RAM を表します。
    • <current unit='GiB'>16</current> は、virtio-mem デバイスが提供するプラグイン RAM の現在のサイズを表します。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る