Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
第9章 ゲスト仮想マシンデバイスの設定
- Emulated devices は、実際のハードウェアを模倣する純粋な仮想デバイスであり、未変更のゲストオペレーティングシステムは標準のインボックスドライバーを使用して動作できるようにします。Red Hat Enterprise Linux 6 は、216 virtio デバイスまで対応します。
- VirtIO devices は、仮想マシンで最適に動作するように設計された仮想デバイスです。VirtIO デバイスはエミュレートされたデバイスと似ていますが、Linux 以外の仮想マシンには、デフォルトで必要となるドライバーは含まれません。Virtual Machine Manager (virt-manager) や Red Hat Virtualization Hypervisor などの仮想化管理ソフトウェアは、サポートされている Linux 以外のゲストオペレーティングシステム用にこれらのドライバーを自動的にインストールします。Red Hat Enterprise Linux 6 は、最大 700 の scsi ディスクに対応します。
- 割り当てられたデバイス は、仮想マシンに公開される物理デバイスです。このメソッドは passthrough としても知られています。デバイスの割り当てにより、仮想マシンはさまざまなタスクで PCI デバイスに排他的にアクセスできるようになり、PCI デバイスがゲストオペレーティングシステムに物理的に接続されているかのように見え、動作します。Red Hat Enterprise Linux 6 は、仮想マシンごとに割り当てられたデバイスを最大 32 個までサポートします。
/etc/security/limits.conf
で設定され、/etc/libvirt/qemu.conf
でオーバーライドできます)。他の制限要因には、仮想バスで利用可能なスロット数や、sysctl で設定されたオープンファイルのシステム全体の制限が含まれます。
allow_unsafe_interrupts
vfio_iommu_type1
モジュールへのオプションを使用して引き続き PCI デバイスの割り当てを許可することを選択できます。これは、以下を含む /etc/modprobe.d
に .conf ファイル (local.conf
など) を追加することで、永続的に実行できます。
options vfio_iommu_type1 allow_unsafe_interrupts=1または sysfs エントリーを使用して動的に同じことを行います。
# echo 1 > /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts
9.1. PCI デバイス
手順9.1 PCI デバイス割り当てのための Intel システムの準備
Intel VT-d 仕様を有効にする
Intel VT-d 仕様では、物理デバイスを仮想マシンに直接割り当てるハードウェアサポートが提供されます。この仕様は、Red Hat Enterprise Linux で PCI デバイスの割り当てを使用するために必要です。Intel VT-d 仕様は、BIOS で有効にする必要があります。システムの製造元によっては、この仕様をデフォルトで無効にしている場合があります。これらの仕様を表示するのに使用される用語はメーカーにより異なります。適切な用語は、システムの製造元のドキュメントを参照してください。カーネルで Intel VT-d をアクティブにします。
/etc/sysconfig/grub
ファイル内の GRUB_CMDLINX_LINUX 行の末尾に、引用符で囲んでintel_iommu=on
パラメーターおよび iommu=pt パラメーターを追加して、カーネル内で Intel VT-d をアクティブにします。以下は、Intel VT-d を有効にした修正grub
です。GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01 vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/ rhcrashkernel-param || :) rhgb quiet intel_iommu=on"
設定ファイルの再生成
以下を実行して /etc/grub2.cfg を再生成します。grub2-mkconfig -o /etc/grub2.cfg
UEFI ベースのホストを使用している場合は、ターゲットファイルが/etc/grub2-efi.cfg
であることに注意してください。使用準備完了
システムを再起動して、変更を有効にします。これで、システムで PCI デバイスの割り当てが可能になります。
手順9.2 PCI デバイス割り当て用の AMD システムの準備
AMD IOMMU 仕様を有効にする
Red Hat Enterprise Linux で PCI デバイスの割り当てを使用するには、AMD IOMMU の仕様が必要です。この仕様は、BIOS で有効にする必要があります。システムの製造元によっては、この仕様をデフォルトで無効にしている場合があります。IOMMU カーネルサポートの有効化
システムの起動時に AMD IOMMU 仕様が有効になるように、/etc/sysconfig/grub
の GRUB_CMDLINX_LINUX 行の末尾に引用符で囲ってamd_iommu=on
を追加します。設定ファイルの再生成
以下を実行して /etc/grub2.cfg を再生成します。grub2-mkconfig -o /etc/grub2.cfg
UEFI ベースのホストを使用している場合は、ターゲットファイルが/etc/grub2-efi.cfg
であることに注意してください。使用準備完了
システムを再起動して、変更を有効にします。これで、システムで PCI デバイスの割り当てが可能になります。
9.1.1. virsh を使用した PCI デバイスの割り当て
pci_0000_01_00_0
、および完全に仮想化されたゲストマシン guest1-rhel6-64 を持つ PCIe ネットワークコントローラーを使用します。
手順9.3 virsh を使用した PCI デバイスのゲスト仮想マシンへの割り当て
デバイスの識別
まず、仮想マシンへのデバイス割り当てに指定されている PCI デバイスを特定します。使用可能な PCI デバイスの一覧を表示する場合は、lspci コマンドを実行します。grep を使用して、lspci の出力を絞り込むことができます。この例では、以下の出力で強調表示されているイーサネットコントローラーを使用します。# lspci | grep Ethernet 00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
このイーサネットコントローラーは、短い識別子00:19.0
で表示されます。この PCI デバイスを仮想マシンに割り当てるには、virsh が使用する完全な ID を確認する必要があります。これを行うには、virsh nodedev-list コマンドを使用して、ホストマシンに接続されている特定タイプ (pci
) のデバイスをすべて一覧表示します。次に、使用するデバイスの短い識別子にマップする文字列の出力を調べます。この例では、短い識別子00:19.0
を使用して、イーサネットコントローラーにマップする文字列を示しています。この例では、:
と.
が、完全な識別子では、文字はアンダースコアに置き換えられます。# virsh nodedev-list --cap pci pci_0000_00_00_0 pci_0000_00_01_0 pci_0000_00_03_0 pci_0000_00_07_0 pci_0000_00_10_0 pci_0000_00_10_1 pci_0000_00_14_0 pci_0000_00_14_1 pci_0000_00_14_2 pci_0000_00_14_3 pci_0000_00_19_0 pci_0000_00_1a_0 pci_0000_00_1a_1 pci_0000_00_1a_2 pci_0000_00_1a_7 pci_0000_00_1b_0 pci_0000_00_1c_0 pci_0000_00_1c_1 pci_0000_00_1c_4 pci_0000_00_1d_0 pci_0000_00_1d_1 pci_0000_00_1d_2 pci_0000_00_1d_7 pci_0000_00_1e_0 pci_0000_00_1f_0 pci_0000_00_1f_2 pci_0000_00_1f_3 pci_0000_01_00_0 pci_0000_01_00_1 pci_0000_02_00_0 pci_0000_02_00_1 pci_0000_06_00_0 pci_0000_07_02_0 pci_0000_07_03_0
使用するデバイスにマップする PCI デバイス番号を記録します。これは別の手順で必要になります。デバイス情報の確認
ドメイン、バス、および機能の情報は、virsh nodedev-dumpxml コマンドの出力から取得できます。virsh nodedev-dumpxml pci_0000_00_19_0 <device> <name>pci_0000_00_19_0</name> <parent>computer</parent> <driver> <name>e1000e</name> </driver> <capability type='pci'> <domain>0</domain> <bus>0</bus> <slot>25</slot> <function>0</function> <product id='0x1502'>82579LM Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <iommuGroup number='7'> <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iommuGroup> </capability> </device>
注記IOMMU グループは、IOMMU からの視認性とデバイスの分離に基づいて決定されます。各 IOMMU グループには、1 つ以上のデバイスを含めることができます。複数のデバイスが存在する場合は、グループ内のすべてのデバイスがゲストに割り当てられるため、IOMMU グループ内のすべてのエンドポイントが要求されます。これは、追加のエンドポイントをゲストに割り当てるか、virsh nodedev-detach を使用してホストドライバーから外すことで実行できます。1 つのグループに含まれるデバイスが複数のゲストに分割されたり、ホストとゲストが分割されたりすることはありません。PCIe root ポート、スイッチポート、ブリッジなどのエンドポイント以外のデバイスは、ホストドライバーから分離しないでください。また、エンドポイントの割り当てに影響を及ぼしません。IOMMU グループ内のデバイスは、virsh nodedev-dumpxml 出力の IOMMU グループセクションを使用して決定できます。グループの各メンバーは、別のアドレスフィールドで提供されます。この情報は、sysfs で以下を使用して取得することもできます。$ ls /sys/bus/pci/devices/0000:01:00.0/iommu_group/devices/
この出力の例を以下に示します。0000:01:00.0 0000:01:00.1
ゲストに 0000.01.00.0 のみを割り当てるには、ゲストを起動する前に、使用されていないエンドポイントをホストから分離する必要があります。$ virsh nodedev-detach pci_0000_01_00_1
必要な設定の詳細を決定する
設定ファイルに必要な値は、virsh nodedev-dumpxml pci_0000_00_19_0 コマンドの出力を参照してください。この例のデバイスは、bus = 0、slot = 25、および function = 0 の値を持ちます。10 進数の設定では、この 3 つの値が使用されます。bus='0' slot='25' function='0'
設定の詳細の追加
virsh edit を実行し、仮想マシン名を指定し、<source>
セクションにデバイスエントリーを追加して、PCI デバイスをゲスト仮想マシンに割り当てます。# virsh edit guest1-rhel6-64 <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0' bus='0' slot='25' function='0'/> </source> </hostdev>
または、virsh attach-device を実行して、仮想マシンの名前とゲストの XML ファイルを指定します。virsh attach-device guest1-rhel6-64
file.xml
仮想マシンの起動
# virsh start guest1-rhel6-64
9.1.2. virt-manager を使用した PCI デバイスの割り当て
手順9.4 virt-manager を使用した PCI デバイスのゲスト仮想マシンへの割り当て
ハードウェア設定を開く
ゲスト仮想マシンを開き、Add Hardware をクリックして、仮想マシンに新しいデバイスを追加します。図9.1 仮想マシンのハードウェア情報ウィンドウ
PCI デバイスの選択
左側の Hardware 一覧から PCI Host Device を選択します。未使用の PCI デバイスを選択します。別のゲストが使用している PCI デバイスを選択すると、エラーが発生する可能性があります。この例では、予備の 82576 ネットワークデバイスが使用されています。Finish を選択して設定を完了します。図9.2 Add new virtual hardware ウィザード
新しいデバイスの追加
セットアップが完了し、ゲスト仮想マシンが PCI デバイスに直接アクセスできるようになりました。図9.3 仮想マシンのハードウェア情報ウィンドウ
9.1.3. virt-install を使用した PCI デバイスの割り当て
--host-device
パラメーターを使用します。
手順9.5 virt-install を使用した、仮想マシンへの PCI デバイスの割り当て
デバイスの識別
ゲスト仮想マシンにデバイス割り当てに指定されている PCI デバイスを特定します。# lspci | grep Ethernet 00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
virsh nodedev-list コマンドは、システムに接続されているすべてのデバイスの一覧を表示し、各 PCI デバイスを文字列で識別します。出力を PCI デバイスのみに制限するには、次のコマンドを実行します。# virsh nodedev-list --cap pci pci_0000_00_00_0 pci_0000_00_01_0 pci_0000_00_03_0 pci_0000_00_07_0 pci_0000_00_10_0 pci_0000_00_10_1 pci_0000_00_14_0 pci_0000_00_14_1 pci_0000_00_14_2 pci_0000_00_14_3 pci_0000_00_19_0 pci_0000_00_1a_0 pci_0000_00_1a_1 pci_0000_00_1a_2 pci_0000_00_1a_7 pci_0000_00_1b_0 pci_0000_00_1c_0 pci_0000_00_1c_1 pci_0000_00_1c_4 pci_0000_00_1d_0 pci_0000_00_1d_1 pci_0000_00_1d_2 pci_0000_00_1d_7 pci_0000_00_1e_0 pci_0000_00_1f_0 pci_0000_00_1f_2 pci_0000_00_1f_3 pci_0000_01_00_0 pci_0000_01_00_1 pci_0000_02_00_0 pci_0000_02_00_1 pci_0000_06_00_0 pci_0000_07_02_0 pci_0000_07_03_0
PCI デバイス番号を記録します。この番号は他の手順で確認する必要があります。ドメイン、バス、および機能の情報は、virsh nodedev-dumpxml コマンドの出力から取得できます。# virsh nodedev-dumpxml pci_0000_01_00_0 <device> <name>pci_0000_01_00_0</name> <parent>pci_0000_00_01_0</parent> <driver> <name>igb</name> </driver> <capability type='pci'> <domain>0</domain> <bus>1</bus> <slot>0</slot> <function>0</function> <product id='0x10c9'>82576 Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <iommuGroup number='7'> <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iommuGroup> </capability> </device>
注記IOMMU グループに複数のエンドポイントがあり、そのすべてがゲストに割り当てられていない場合は、ゲストを起動する前に次のコマンドを実行して、ホストからその他のエンドポイントの割り当てを手動で解除する必要があります。$ virsh nodedev-detach pci_0000_00_19_1
IOMMU グループの詳細は、「virsh を使用した PCI デバイスの割り当て」 の 注記 を参照してください。デバイスの追加
virshnodedev コマンドから出力された PCI 識別子を--host-device
パラメーターの値として使用します。virt-install \ --name=guest1-rhel6-64 \ --disk path=/var/lib/libvirt/images/guest1-rhel6-64.img,size=8 \ --nonsparse --graphics spice \ --vcpus=2 --ram=2048 \ --location=http://example1.com/installation_tree/RHEL6.0-Server-x86_64/os \ --nonetworks \ --os-type=linux \ --os-variant=rhel6 --host-device=pci_0000_01_00_0
インストールを完了する
ゲストのインストールを完了します。PCI デバイスはゲストに接続する必要があります。
9.1.4. 割り当てられた PCI デバイスの取り外し
手順9.6 virsh を使用したゲストからの PCI デバイスの切り離し
デバイスの取り外し
次のコマンドを使用して、ゲストの XML ファイルから PCI デバイスを削除し、ゲストから PCI デバイスを切り離します。# virsh detach-device name_of_guest file.xml
デバイスをホストに再接続します (オプション)。
デバイスがmanaged
モードにある場合は、この手順を省略します。デバイスは自動的にホストに戻ります。デバイスがmanaged
モードを使用していない場合は、以下のコマンドを使用して PCI デバイスをホストマシンに再接続します。# virsh nodedev-reattach device
たとえば、pci_0000_01_00_0
デバイスーをホストコンピューターに再接続するには、次のコマンドを実行します。virsh nodedev-reattach pci_0000_01_00_0
これで、デバイスがホストで使用できるようになります。
手順9.7 virt-manager を使用したゲストからの PCI デバイスの切り離し
仮想ハードウェアの詳細画面を開きます。
virt-manager で、デバイスを含む仮想マシンをダブルクリックします。Show virtual hardware details ボタンを選択すると、仮想ハードウェアの一覧が表示されます。図9.4 仮想ハードウェアの詳細ボタン
デバイスを選択して削除する
左側のパネルにある仮想デバイスの一覧から、取り外す PCI デバイスを選択します。図9.5 取り外す PCI デバイスの選択
Remove ボタンをクリックして確定します。これで、デバイスがホストで使用できるようになります。
9.1.5. PCI ブリッジの作成
9.1.6. PCI パススルー
<source>
要素で指定される PCI ネットワークデバイスは、ジェネリックデバイスパススルーを使用してゲストに直接割り当てられます。このデバイスの MAC アドレスは、最初にオプションで設定された値に設定され、そのデバイスの MAC アドレスがオプションで指定された virtualport 要素を使用して 802.1Qbh 対応スイッチに関連付けられます (<type='direct'>
ネットワークデバイスの場合は、上記の仮想ポートの例を参照してください)。標準的なシングルポートの PCI イーサネットカードドライバー設計の制限により、この方法で割り当てることができるのは Single Root I/O Virtualization (SR-IOV) virtual function (VF) デバイスのみとなります。標準的なシングルポートの PCI または PCIe イーサネットカードをゲストに割り当てる場合は、従来の <hostdev>
デバイス定義を使用します。
<type='hostdev'>
インターフェイスは name 属性を持つオプションのドライバーサブ要素を持つことができます vfio に設定します。従来の KVM デバイス割り当てを使用するには、名前を kvm に設定できます (または、現在、<driver ='kvm'>
がデフォルトであるため、単に <driver>
要素を省略します)。
<hostdev>
デバイスの機能と非常に似ています。相違点は、パススルーデバイスに MAC アドレスと<virtualport>
を指定できることです。これらの機能が必要ない場合、SR-IOV をサポートしない標準のシングルポート PCI、PCIe、または USB ネットワークカードを使用している場合 (したがって、ゲストドメインに割り当てられた後、リセット中に設定された MAC アドレスが失われます)、または 0.9.11 より前のバージョンの libvirt を使用している場合は、<interface type='hostdev'/>
の代わりに、標準の <hostdev>
を使用してデバイスをゲストに割り当てる必要があります。
図9.6 PCI デバイスの割り当ての XML 例
<devices> <interface type='hostdev'> <driver name='vfio'/> <source> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </source> <mac address='52:54:00:6d:90:02'> <virtualport type='802.1Qbh'> <parameters profileid='finance'/> </virtualport> </interface> </devices>
9.1.7. SR-IOV デバイスを使用した PCI 割り当て (パススルー) の設定
<hostdev>
要素を使用して割り当てることができますが、SR-IOV VF ネットワークデバイスには永続的な一意の MAC アドレスがないため、ホストの物理マシンを再起動するたびにゲスト仮想マシンのネットワーク設定を再設定する必要があります。これを解決するには、VF をホスト物理マシンに割り当てる前に MAC アドレスを設定する必要があり、ゲスト仮想マシンが起動するたびにこれを設定する必要があります。この MAC アドレスやその他のオプションを割り当てるには、手順9.8「SR-IOV で PCI デバイスを割り当てる MAC アドレス、vLAN、および仮想ポートの設定」の手順を参照してください。
手順9.8 SR-IOV で PCI デバイスを割り当てる MAC アドレス、vLAN、および仮想ポートの設定
<mac>
、<vlan>
、および <virtualport>
要素は <hostdev>
の有効な子ではないため、<hostdev>
要素は MAC アドレス割り当て、vLAN タグ ID 割り当て、仮想ポート割り当てなどの機能固有の項目には使用できないことに注意してください。これらは <インターフェイス>
で有効であるため、新しいインターフェイスタイプのサポートが追加されました (<interface type='hostdev'>
)。この新しいインターフェイスデバイスタイプは、<インターフェイス>
と <hostdev>
のハイブリッドとして動作します。そのため、libvirt は、ゲスト仮想マシンに PCI デバイスを割り当てる前に、ゲスト仮想マシンの XML 設定ファイルに示されているネットワーク固有のハードウェア/スイッチを初期化します (MAC アドレスの設定、vLAN タグの設定、802.1Qbh スイッチへの関連付けなど)。vLAN タグの設定に関する詳細は、「vLAN タグの設定」 を参照してください。
ゲスト仮想マシンをシャットダウンします。
virsh shutdown コマンドの使用 (「ゲスト仮想マシンのシャットダウン」 を参照)、guestVM という名前のゲスト仮想マシンをシャットダウンします。# virsh shutdown guestVM
情報の収集
<interface type='hostdev'>
を使用するには、SR-IOV 対応のネットワークカード、Intel VT-d 拡張機能または AMD IOMMU 拡張機能に対応するホストの物理マシンハードウェアが必要で、割り当てる VF の PCI アドレスを把握している必要があります。編集する XML ファイルを開く
# virsh save-image-edit コマンドを実行し、XML ファイルを編集用に開きます (詳細は 「ドメイン XML 設定ファイルの編集」 を参照してください)。ゲスト仮想マシンを以前の実行状態に復元する必要があるため、この場合は--running
が使用されます。この例の設定ファイルの名前は guestVM.xml です。ゲスト仮想マシンの名前は guestVM です。# virsh save-image-edit guestVM.xml
--running
guestVM.xmlがデフォルトのエディターで開きます。XML ファイルの編集
設定ファイル (guestVM.xml) を更新して、以下のような<devices>
エントリーが表示されるようにします。図9.7 hostdev インターフェイスタイプのサンプルドメイン XML
<devices> ... <interface type='hostdev' managed='yes'> <source> <address type='pci' domain='0x0' bus='0x00' slot='0x07' function='0x0'/> <!--these values can be decimal as well--> </source> <mac address='52:54:00:6d:90:02'/> <!--sets the mac address--> <virtualport type='802.1Qbh'> <!--sets the virtual port for the 802.1Qbh switch--> <parameters profileid='finance'/> </virtualport> <vlan> <!--sets the vlan tag--> <tag id='42'/> </vlan> </interface> ... </devices>
MAC アドレスを指定しないと、その他のタイプのインターフェイスデバイスと同様に、MAC アドレスが自動的に生成されることに注意してください。また、<virtualport>
要素は、802.11Qgh ハードウェアスイッチ(802.11Qbg)に接続する場合にのみ使用されます。"VEPA")スイッチは現在サポートされていません。ゲスト仮想マシンの再起動
virsh start コマンドを実行して、最初の手順でシャットダウンしたゲスト仮想マシンを再起動します (例では、ゲスト仮想マシンのドメイン名として guestVM を使用します)。詳細は、「定義済みドメインの開始」 を参照してください。# virsh start guestVM
ゲスト仮想マシンは起動時に、設定された MAC アドレスを持つ、物理ホストマシンのアダプターにより提供されたネットワークデバイスを認識します。この MAC アドレスは、ゲスト仮想マシンやホストの物理マシンを再起動しても変更されません。
9.1.8. SR-IOV 仮想機能のプールからの PCI デバイス割り当ての設定
- 指定の VF は、ゲスト仮想マシンが起動したときにいつでも利用できる必要があります。つまり、管理者は、各 VF を 1 つのゲスト仮想マシンに永続的に割り当てる必要があります (または、各ゲスト仮想マシンの設定ファイルを変更して、ゲスト仮想マシンが起動するたびに現在使用されていない VF の PCI アドレスを指定します)。
- ゲスト仮想マシンを別のホスト物理マシンに移動する場合は、そのホスト物理マシンのハードウェアが PCI バス上の同じ場所にある必要があります (または、ゲスト仮想マシンの設定を起動前に変更する必要があります)。
手順9.9 デバイスプールの作成
ゲスト仮想マシンをシャットダウンします。
virsh shutdown コマンドの使用 (「ゲスト仮想マシンのシャットダウン、再起動、および強制シャットダウン」 を参照)、guestVM という名前のゲスト仮想マシンをシャットダウンします。# virsh shutdown guestVM
設定ファイルの作成
任意のエディターを使用して、/tmp
ディレクトリーに XML ファイル (名前は passthrough.xml など) を作成します。pf dev='eth3'
を、ご使用の SR-IOV デバイスの PF の netdev 名に置き換えてください。以下は、ホスト物理マシンの "eth3' にある physical function (PF) を持つ SR-IOV アダプターのすべての VF のプールを使用できるようにするネットワーク定義の例です。図9.8 サンプルのネットワーク定義ドメイン XML
<network> <name>passthrough</name> <!--This is the name of the file you created--> <forward mode='hostdev' managed='yes'> <pf dev='myNetDevName'/> <!--Use the netdev name of your SR-IOV devices PF here--> </forward> </network>
新しい XML ファイルの読み込み
/tmp/passthrough.xml を、前の手順で作成した XML ファイルの名前と場所に置き換え、次のコマンドを実行します。# virsh net-define /tmp/passthrough.xml
ゲストの再起動
以下の passthrough.xml を、前の手順で作成した XML ファイルの名前に置き換えます。# virsh net-autostart passthrough # virsh net-start passthrough
ゲスト仮想マシンの再起動
virsh start コマンドを実行して、最初の手順でシャットダウンしたゲスト仮想マシンを再起動します (例では、ゲスト仮想マシンのドメイン名として guestVM を使用します)。詳細は、「定義済みドメインの開始」 を参照してください。# virsh start guestVM
デバイスのパススルーの開始
表示されているデバイスは 1 つだけですが、libvirt は、ゲスト仮想マシンが次のようなドメイン XML のインターフェイス定義で初めて起動されたときに、その PF に関連付けられているすべての VF のリストを自動的に取得します。図9.9 インターフェイスネットワーク定義のサンプルドメイン XML
<interface type='network'> <source network='passthrough'> </interface>
検証
ネットワークを使用する最初のゲストを起動したら、virsh net-dumpxml passthrough コマンドを実行し、これを確認できます。以下のような出力が得られます。図9.10 XML ダンプファイルのpassthroughコンテンツ
<network connections='1'> <name>passthrough</name> <uuid>a6b49429-d353-d7ad-3185-4451cc786437</uuid> <forward mode='hostdev' managed='yes'> <pf dev='eth3'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x1'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x3'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x5'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x7'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x1'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x3'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x5'/> </forward> </network>