20.27. ホストマシンの管理

本セクションでは、ホストシステム (コマンドでは node と呼ばれます) の管理に必要なコマンドについて説明します。

20.27.1. ホスト情報の表示

virsh nodeinfo コマンドは、モデル番号、CPU の数、CPU のタイプ、および物理メモリーのサイズを含むホストについての基本情報を表示します。この出力は、virNodeInfo の構造に対応しています。特に「CPU socket(s)」フィールドは NUMA セルごとの CPU ソケット数を示しています。

例20.54 ホストマシン情報の表示

以下の例では、ホストについての情報が表示されます。
$ virsh nodeinfo
CPU model:           x86_64
CPU(s):              4
CPU frequency:       1199 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         3715908 KiB

20.27.2. NUMA パラメーターの設定

virsh numatune コマンドは、指定されたゲスト仮想マシンの NUMA パラメーターの設定または取得のいずれかを実行できます。ゲスト仮想マシンの設定 XML ファイル内で、これらのパラメーターは <numatune> 要素内にネスト化されます。フラグを使用しないと、現在の設定のみが表示されます。numatune domain コマンドには指定されたゲスト仮想マシン名が必要で、以下の引数を取ります。
  • --mode - このモードは strictinterleave、または preferred のいずれかに設定できます。ゲスト仮想マシンが strict モードで起動されたのではない限り、ゲスト仮想マシンが稼働中の場合にそれらのモードを変更することはできません。
  • --nodeset - ゲスト仮想マシンを実行するためにホスト物理マシンによって使用される NUMA ノードの一覧が含まれます。この一覧にはノードが含まれますが、それぞれはコンマで区切られ、ノード範囲にはダッシュ - が、ノードの除外にはキャレット ^ が使用されます。
  • 各インスタンスごとに使用できるのは以下の 3 つのフラグの 1 つのみです。
    • --config は、永続的なゲスト仮想マシンの次回の起動で実施されます。
    • --live は、実行中のゲスト仮想マシンのスケジューラー情報を設定します。
    • --current は、ゲスト仮想マシンの現在の状態に影響を与えます。

例20.55 ゲスト仮想マシンの NUMA パラメーターを設定する方法

以下の例では、実行中の strict 仮想マシンのノード 0、2、および 3 で NUMA モードを guest1 に設定します。
virsh numatune guest1 --mode strict --nodeset 0,2-3 --live
このコマンドを実行すると guest1 の実行中の設定が XML ファイルで以下の設定に変更されます。
<numatune>
        <memory mode='strict' nodeset='0,2-3'/>
</numatune>

20.27.3. NUMA セルの空きメモリー容量の表示

virsh freecell コマンドは、指定された NUMA セル内のマシンで利用可能なメモリー容量を表示します。このコマンドは、指定されるオプションに応じて、マシンで利用可能なメモリーについての 3 つの異なる表示のいずれかを提供します。

例20.56 仮想マシンおよび NUMA セルのメモリープロパティーを表示する方法

以下のコマンドでは、全セル内で利用可能なメモリーの合計容量が表示されます。
virsh freecell
Total: 684096 KiB
個別セル内で利用可能なメモリー容量を表示するには、--all オプションを使用します。
virsh freecell --all
    0:     804676 KiB
--------------------
Total:     804676 KiB
指定したセル内の個別メモリー容量を表示するには、--cellno オプションを使用します。
virsh freecell --cellno 0
0: 772496 KiB

20.27.4. CPU 一覧の表示

virsh nodecpumap コマンドは、ホストマシンで利用可能な CPU 数を表示します。また、現在オンラインの CPU 数も表示します。

例20.57 ホストで利用可能な CPU 数の表示

以下の例では、ホストで利用可能な CPU 数が表示されます。
virsh nodecpumap
   CPUs present: 4
   CPUs online: 1
   CPU map: y

20.27.5. CPU 統計の表示

virsh nodecpustats [cpu_number] [--percent] コマンドは、ホストの CPU 負荷のステータスに関する統計情報を表示します。CPU を指定すると、その CPU についての情報のみが表示されます。percent オプションを指定すると、1 秒間隔で記録された各タイプの CPU 統計のパーセンテージが表示されます。

例20.58 CPU の使用状況についての統計情報を表示する方法

以下の例では、ホスト CPU の負荷に関する全般的統計情報が返されます。
virsh nodecpustats
user:               1056442260000000
system:              401675280000000
idle:               7549613380000000
iowait:               94593570000000
以下の例では、CPU 番号 2 の統計情報がパーセンテージで表示されます。
virsh nodecpustats 2 --percent
usage:            2.0%
user:             1.0%
system:           1.0%
idle:            98.0%
iowait:           0.0%

20.27.6. デバイスの管理

20.27.6.1. virsh を使用したデバイスの割り当てと更新

ストレージデバイスの割り当てについてさらに詳しくは、「ストレージデバイスのゲストへの追加」 を参照してください。

手順20.4 ゲスト仮想マシンが使用する USB デバイスのホットプラグ

USB デバイスの割り当ては、ゲスト仮想マシンの実行中にホットプラグインで実行することも、ゲストの停止中に実行することもできます。ゲストで使用するデバイスは、ホストマシンに割り当てられている必要があります。
  1. 以下のコマンドを実行して、割り当てる USB デバイスを特定します。
    lsusb -v
    
    idVendor           0x17ef Lenovo
    idProduct          0x480f Integrated Webcam [R5U877]
  2. XML ファイルを作成し、そのファイルに論理名 (例: usb_device.xml) を指定します。ベンダーと製品 ID (16 進数の番号) は、検索時に表示されたものと全く同じものをコピーするようにしてください。この情報は、図20.2「USB デバイス XML スニペット」 に示されるように XML ファイルに追加します。このファイルの名前は次のステップで必要になるので留意してください。
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x17ef'/>
        <product id='0x480f'/>
      </source>
    </hostdev>

    図20.2 USB デバイス XML スニペット

  3. 以下のコマンドを実行してデバイスを割り当てます。コマンドの実行時に、guest1 を仮想マシンの名前に、usb_device.xml を直前のステップで作成したデバイスのベンダーと製品 ID を含む XML ファイルの名前に置き換えます。次回の起動時に変更を有効にするには、--config を使用します。変更を現在のゲスト仮想マシンで有効にするには、--current 引数を使用します。追加の引数については virsh man ページを参照してください。
    virsh attach-device guest1 --file usb_device.xml --config

例20.59 ゲスト仮想マシンからデバイスのホットアンプラグを実行する方法

以下の例では、usb_device1.xml ファイルで設定したUSB デバイスが guest1 仮想マシンから割り当て解除されます。
virsh detach-device guest1 --file usb_device.xml

20.27.6.2. インターフェースデバイスの割り当て

virsh attach-interface domain type source [<target>] [<mac>] [<script>] [<model>] [<inbound>] [<outbound>] [--config] [--live] [--current] コマンドは、以下の引数を取ります。
  • --type: インターフェースのタイプを設定できます。
  • --source: ネットワークインターフェースのソースを設定できます。
  • --live: 実行中のゲスト仮想マシンの設定からその値を取得します。
  • --config: 次回起動時に有効になります。
  • --current: 現在の設定に基づいて値を取得します。
  • --target: ゲスト仮想マシン内のターゲットデバイスを示します。
  • --mac: ネットワークインターフェースの MAC アドレスを指定するには、このオプションを使用します。
  • --script: デフォルトのスクリプトファイルの代わりにブリッジを処理するスクリプトファイルへのパスを指定するには、このオプションを使用します。
  • --model: モデルのタイプを指定するには、このオプションを使用します。
  • --inbound: インターフェースの受信帯域幅を制御します。使用できる値は、averagepeak、および burst です。
  • --outbound - インターフェースの送信帯域幅を制御します。使用できる値は、averagepeak、および burst です。

    注記

    平均およびピークの値は 1 秒あたりのキロバイト単位で表示されますが、バースト値は Network XML upstream documentation で説明されているピーク速度時の単一バーストにおけるキロバイト単位で表示されます。
type は、物理ネットワークデバイスを指定する場合は network か、デバイスへのブリッジを指定する場合は bridge のいずれかにすることができます。source はデバイスのソースです。割り当てられたデバイスを除去するには、virsh detach-device コマンドを使用します。

例20.60 デバイスをゲスト仮想マシンに割り当てる方法

以下の例では、networkw ネットワークデバイスが guest1 仮想マシンに割り当てられます。ゲストには、インターフェイスモデルは virtio として提示されます。
virsh attach-interface guest1 networkw --model virtio

20.27.6.3. CDROM メディアの変更

virsh change-media コマンドは CDROM のメディアを別のソースまたはフォーマットに変更します。このコマンドは以下の引数を取ります。これらの引数の例および説明については、man ページを参照してください。
  • --path: ディスクデバイスの完全修飾パスまたはターゲットを含む文字列です。
  • --source: メディアのソースを含む文字列です。
  • --eject: メディアを取り出します。
  • --insert: メディアを挿入します。
  • --update: メディアを更新します。
  • --current: ハイパーバイザードライバーの実装によって、--live--config のいずれかまたはその両方にすることができます。
  • --live: 実行中のゲスト仮想マシンの動作中の設定を変更します。
  • --config: 永続的な設定を変更します。次回起動時に反映されます。
  • --force: メディアの変更を強制します。

20.27.7. ホストの一時停止

virsh nodesuspend targetduration コマンドは、ホストマシンを s3 (suspend-to-RAM)、s4 (suspend-to-disk)、または Hybrid-Suspend と同様のシステム全体でのスリープ状態に置き、リアルタイムクロックをセットアップして、設定された期間が経過した後にホストを起動します。target 変数は、memdisk、または hybrid のいずれかに設定できます。これらのオプションは、一時停止するメモリー、ディスク、またはこれら 2 つの組み合わせを設定するために指定します。--duration を設定すると、設定された期間が経過した後にノードが起動するよう指示されます。期間は秒単位で設定されます。60 秒を超える期間に設定することが推奨されます。

例20.61 ゲスト仮想マシンをディスク s4 に一時停止する方法

以下の例では、ホスト物理マシンをディスクに 90 秒間一時停止します。
virsh nodesuspend disk 90

20.27.8. ノードメモリーパラメーターの設定および表示

virsh node-memory-tune [shm-pages-to-scan] [shm-sleep-milisecs] [shm-merge-across-nodes] コマンドは、ノードメモリーパラメーターを表示し、これを設定することを可能にします。このコマンドでは、以下のパラメーターが設定できます。
  • --shm-pages-to-scan - kernel samepage merging (KSM) サービスがスリープに入る前にスキャンするページ数を設定します。
  • --shm-sleep-milisecs - KSM サービスが次回のスキャンの前にスリープするミリ秒数を設定します。
  • --shm-merge-across-nodes - 異なる NUMA ノードからページをマージできるかどうかを指定します。

例20.62 NUMA ノード間でメモリーページをマージする方法

以下の例では、NUMA ノードすべてからの全メモリーページをマージします。
virsh node-memory-tune --shm-merge-across-nodes 1

20.27.9. ホスト上デバイスの一覧表示

virsh nodedev-list --cap --tree コマンドは、libvirt サービスが認識しているホスト上の利用可能なすべてのデバイスを一覧表示します。--cap を使用すると、一覧を機能タイプでフィルターしてそれぞれがコンマ区切りになりますが、--tree と共に使用することはできません。引数 --tree を使用すると、出力は以下に示すようなツリー構造になります。

例20.63 ホスト上で利用可能なデバイスの表示方法

以下の例では、ホスト上で利用可能なデバイスをツリー構造で一覧表示します。結果は一部省略されていることに注意してください。
virsh nodedev-list --tree
computer
  |
  +- net_lo_00_00_00_00_00_00
  +- net_macvtap0_52_54_00_12_fe_50
  +- net_tun0
  +- net_virbr0_nic_52_54_00_03_7d_cb
  +- pci_0000_00_00_0
  +- pci_0000_00_02_0
  +- pci_0000_00_16_0
  +- pci_0000_00_19_0
  |   |
  |   +- net_eth0_f0_de_f1_3a_35_4f
	[...]
以下の例では、ホスト上で利用可能な SCSI デバイスが表示されます。
# virsh nodedev-list --cap scsi
scsi_0_0_0_0

20.27.10. ホストマシン上でのデバイス作成

virsh nodedev-create file コマンドを使用すると、ホスト物理マシン上にデバイスを作成し、それをゲスト仮想マシンに割り当てることができます。libvirt は使用できるホストノードを自動的に検出しますが、このコマンドは libvirt が検出しなかったホストハードウェアの登録を可能にします。この指定されたファイルには、ホストデバイスの上位レベルの <device> XML 記述が含まれている必要があります。このファイルの例については、例20.66「デバイスの XML ファイルを取得する方法」 を参照してください。

例20.64 XML ファイルによるデバイスの作成方法

以下の例では、PCI デバイス用の XML ファイルが作成済みで、scsi_host2.xml として保存されていることを前提としています。以下のコマンドを実行すると、このデバイスをゲストに割り当てることができます。
virsh nodedev-create scsi_host2.xml

20.27.11. デバイスの削除

virsh nodedev-destroy コマンドは、デバイスをホストから削除します。virsh ノードデバイスドライバーは永続的な設定をサポートしないため、ゲストを再起動するとデバイスも使用できなくなることに注意してください。
異なる割り当てでは、デバイスが異なるバックエンドドライバー (vfio、kvm) にバインドされる可能性があることにも注意してください。--driver 引数を使用することにより、目的のバックエンドドライバーを指定することができます。

例20.65 デバイスをホスト物理マシンから削除する方法

以下の例では、ホストマシンから scsi_host2 という名前の SCSI デバイスが削除されます。
virsh nodedev-destroy scsi_host2

20.27.12. デバイス設定の収集

virsh nodedev-dumpxml device コマンドは、指定したホストデバイスの XML 表現を出力します。この XML 表現には、デバイス名、デバイスが接続されている BUS、ベンダー、製品 ID、ケイパビリティー、および libvirt で使用できる情報が含まれます。引数 device はデバイス名か、または WWNN、WWPN フォーマット (HBA のみ) の WWN ペアのいずれかにすることができます。

例20.66 デバイスの XML ファイルを取得する方法

以下の例では、scsi_host2 という SCSI デバイスの XML ファイルが取得されます。この名前は、virsh nodedev-list コマンドを実行することで確認できます。
virsh nodedev-dumpxml scsi_host2
   <device>
     <name>scsi_host2</name>
     <parent>scsi_host1</parent>
     <capability type='scsi_host'>
       <capability type='fc_host'>
         <wwnn>2001001b32a9da5b</wwnn>
         <wwpn>2101001b32a9da5b</wwpn>
       </capability>
     </capability>
   </device>

20.27.13. デバイスのリセットのトリガー

virsh nodedev-reset device コマンドは、指定されたデバイスのリセットをトリガーします。このコマンドは、ゲスト仮想マシンのパススルーとホスト物理マシン間でノードデバイスを転送する前に実行すると有効です。libvirt は必要に応じてこのアクションを自動的に実行しますが、このコマンドは必要な場合に明示的なリセットを許可します。

例20.67 ゲスト仮想マシンでデバイスをリセットする方法

以下の例では、ゲスト仮想マシン上の scsi_host2 という名前のデバイスをリセットします。
virsh nodedev-reset scsi_host2