16.2. PCI デバイス割り当てと SR-IOV デバイス

PCI ネットワーク (<source> 要素でドメイン XML に指定される) は、直接のデバイス割り当て (パススルー と呼ばれることがある) を使用してゲストに直接接続されます。標準の単一ポート PCI イーサネットカードドライバーの設計上の制限により、この方法で割り当てられるのは、シングルルート I/O 仮想化 (SR-IOV) の 仮想機能 (VF) デバイスのみになります。標準の単一ポート PCI または PCIe イーサネットカードをゲストに割り当てるには、従来の <hostdev> デバイスの定義を使用します。

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

図16.9 PCI デバイス割り当ての XML サンプル

PCI-SIG が開発したシングルルート I/O 仮想化 (SR-IOV) 仕様は、単一デバイスを複数の仮想マシンで共有できる PCI デバイス割り当てにおける標準です。SR-IOV は、仮想マシンのデバイスパフォーマンスを強化します。
SR-IOV のしくみ

図16.10 SR-IOV のしくみ

SR-IOV は、シングルルート機能 (例: シングルイーサネットポート) を複数の別個の物理デバイスのように見せることができます。SR-IOV 対応の物理デバイスは、PCI 設定領域で複数機能のように見えるように設定することができます。各デバイスには、Base Address Registers (BAR) を備えた独自の設定領域があります。
SR-IOV は、以下の 2 つの PCI 機能を使用します。
  • 物理機能 (PF) は、SR-IOV 機能を含む完全な PCIe デバイスです。物理機能は、通常の PCI デバイスとして検出され、管理され、設定されます。物理機能は、仮想機能を割り当てることで SR-IOV 機能を設定し、管理します。
  • 仮想機能 (VF) は、I/O のみを処理する単純な PCIe 機能です。それぞれの仮想機能は物理機能から派生します。デバイス 1 台に備わる仮想機能の数は、デバイスのハードウェアによって制限されます。物理デバイスであるシングルイーサネットポートは、仮想マシンと共有可能な多くの仮想機能にマッピングできます。
ハイパーバイザーは 1 つまたは複数の仮想機能を仮想マシンに割り当てることができます。仮想機能の設定領域は、その後ゲストに提示される設定領域に割り当てられます。
仮想機能は実際のハードウェアリソースを必要とするので、それぞれの仮想機能は一度に 1 つのゲストにしか割り当てることができません。仮想マシンには複数の仮想機能を含めることができます。仮想機能は、通常のネットワークカードがオペレーティングシステムに対して表示されるようにネットワークカードとして表示されます。
SR-IOV ドライバーはカーネル内に実装されています。コア実装は PCI サブシステム内に内包されていますが、物理機能 (PF) と仮想機能 (VF) デバイスの両方にもドライバーサポートが必要です。SR-IOV 対応デバイスは、物理機能から仮想機能を割り当てることができます。仮想機能は、キューやレジスターセットなどのリソースで物理 PCI デバイスにバックアップされている PCI デバイスのように表示されます。

16.2.1. SR-IOV の利点

SR-IOV デバイスは、1 つの物理ポートを複数の仮想マシンと共有できます。
SR-IOV VF が仮想マシンに割り当てられている場合、VF からのすべてのネットワークトラフィックを特定の VLAN に配置するよう設定することができます (仮想マシンに対して透過的に)。仮想マシンは、自分のトラフィックが VLAN とタグ付けされていることを検知できず、このタグ付けを変更したり削除したりすることはできません。
仮想機能は、ネイティブに近いパフォーマンスを発揮し、準仮想化ドライバーやエミュレートされたアクセスよりもすぐれたパフォーマンスを提供します。仮想機能ではデータがハードウェアによって管理され、制御されるため、同一の物理サーバー上における仮想マシン間でのデータ保護が行われます。
これらの機能により、データセンター内でのホスト上の仮想マシン密度は高くなります。
SR-IOV は、複数ゲストとデバイスの帯域幅を有効活用できます。

16.2.2. SR-IOV の使用

このセクションでは、SR-IOV 対応のマルチポイントネットワークカードの仮想機能をネットワークデバイスとして仮想マシンに割り当てる、PCI パススルーの使い方を説明します。
<hostdev> または virsh edit コマンドで virsh attach-device 内にデバイスエントリーを追加することにより、SR-IOV 仮想機能を仮想マシンに割り当てられます。しかしこの操作は、通常のネットワークデバイスと違って SR-IOV VF は永久的な固有の MAC アドレスを持たず、ホストが再起動するたびに新たな MAC アドレスが割り当てられるので問題になる可能性があります。このため、再起動後にゲストに同じ仮想機能が割り当てられても、ホストが再起動すると、ゲストは新規の MAC アドレスを持たせるために新たなネットワークアダプターを決定します。その結果、ゲストは毎回新たなハードウェアが接続されたと認識し、通常はゲストのネットワークの再設定を要求することになります。
libvirt には、<interface type='hostdev'> インタフェースデバイスが含まれます。このインタフェースデバイスを使って、libvirt はまず指定されたネットワーク特定のハードウェア/スイッチの初期化を行います (MAC アドレスや VLAN タグ、802.1Qbh virtualport パラメーターの設定など)。その後に、ゲストへの PCI デバイス割り当てを実行します。
<interface type='hostdev'> インタフェースデバイスの使用には、以下が必要です。
  • SR-IOV 対応ネットワークカード
  • Intel VT-d または AMD IOMMU 拡張をサポートするホストハードウェア
  • 割り当てられる仮想機能の PCI アドレス

重要

SR-IOV デバイスを仮想マシンに割り当てるには、ホストハードウェアが Intel VT-d または AMD IOMMU 仕様に対応している必要があります。
SR-IOV ネットワークデバイスを Intel または AMD システムに割り当てるには、以下の手順を実行します。

手順16.8 SR-IOV ネットワークデバイスをIntel または AMD システムに割り当てる

  1. Intel VT-d または AMD IOMMU 仕様を BIOS およびカーネル内で有効にします。

    Intel システムでは、Intel VT-d が有効にされていない場合、BIOS で有効にします。BIOS およびカーネルで Intel VT-d を有効にする方法については、手順16.1「Intel システムでの PCI デバイス割り当ての準備」を参照してください。
    Intel VT-d が有効にされ、機能している場合は、このステップを省略してください。
    AMD システムでは、AMD IOMMU 仕様が有効にされていない場合、BIOS で有効にします。BIOS で IOMMU を有効にする方法については、手順16.2「AMD システムでの PCI デバイス割り当ての準備」を参照してください。
  2. サポートを確認します。

    SR-IOV 機能に対応する PCI デバイスが検出されるかどうかを確認します。この例では、SR-IOV 対応の Intel 82576 ネットワークインタフェースカードが一覧表示されています。lspci コマンドを使ってデバイスが検出されたかどうかを確認します。
    # lspci
    03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    出力が変更されて、他のデバイスがすべて削除されていることに注意してください。
  3. 仮想機能をアクティブにします。

    次のコマンドを実行します。
    # echo ${num_vfs} > /sys/class/net/enp14s0f0/device/sriov_numvfs
  4. 仮想機能を永続化します。

    再起動後も仮想機能を存続させるためには、任意のエディターを使って以下のような udev ルールを作成し、VF の数をネットワークインターフェースカードでサポートされる上限値までの間で指定します (この例では 2 つ)。以下の例では、enp14s0f0 を PF ネットワークデバイス名に置き換え、ENV{ID_NET_DRIVER} の値を使用中のドライバーと一致させています。
    # vim /etc/udev/rules.d/enp14s0f0.rules
    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe",
    ATTR{device/sriov_numvfs}="2"
    これにより、この機能がブート時間に有効になります。
  5. 新たな仮想機能を検査します。

    lspci コマンドを使用して、Intel 82576 ネットワークデバイスに割り当てられ、新たに追加された仮想機能を一覧表示します。(または、grep を使って Virtual Function、または仮想機能をサポートするデバイスを検索します。)
    # lspci | grep 82576
    0b:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    0b:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    0b:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.6 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.7 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    PCI デバイスの ID は、-n コマンドの lspci パラメーターを使って確認します。物理機能は、0b:00.0 および 0b:00.1 に対応します。仮想機能にはすべて Virtual Function と記述されます。
  6. virsh を使用してデバイスの有無を確認します。

    デバイスを仮想マシンに追加する前に、libvirt サービスはそのデバイスを認識する必要があります。libvirt は、lspci 出力に類似する表示を使用します。 出力では、すべての句読点とコロン (:) およびピリオド (.lspci) は、アンダースコア (_) に変換されます。
    virsh nodedev-list コマンドと grep コマンドを使って、利用可能なホストデバイスの一覧から Intel 82576 ネットワークデバイスを選び出します。この例の 0b は、Intel 82576 ネットワークデバイスのフィルターです。これはお使いのシステムによっても異なり、結果として別のデバイスが加わる場合もあります。
    # virsh nodedev-list | grep 0b
    pci_0000_0b_00_0
    pci_0000_0b_00_1
    pci_0000_0b_10_0
    pci_0000_0b_10_1
    pci_0000_0b_10_2
    pci_0000_0b_10_3
    pci_0000_0b_10_4
    pci_0000_0b_10_5
    pci_0000_0b_10_6
    pci_0000_0b_11_7
    pci_0000_0b_11_1
    pci_0000_0b_11_2
    pci_0000_0b_11_3
    pci_0000_0b_11_4
    pci_0000_0b_11_5
    この一覧には、仮想機能と物理機能の PCI アドレスが表示されます。
  7. virsh を使用してデバイスの詳細情報を取得します。

    pci_0000_0b_00_0 は物理機能の 1 つであり、pci_0000_0b_10_0 はこの物理機能に対応する最初の仮想機能です。virsh nodedev-dumpxml コマンドを使って、両方のデバイスのデバイス情報を表示します。
    # virsh nodedev-dumpxml pci_0000_03_00_0
    <device>
      <name>pci_0000_03_00_0</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:00.0</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>igb</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>3</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x10c9'>82576 Gigabit Network Connection</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <capability type='virt_functions'>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x4'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x6'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x2'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x4'/>
        </capability>
        <iommuGroup number='14'>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
        </iommuGroup>
      </capability>
    </device>
    # virsh nodedev-dumpxml pci_0000_03_11_5
    <device>
      <name>pci_0000_03_11_5</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:11.5</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>igbvf</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>3</bus>
        <slot>17</slot>
        <function>5</function>
        <product id='0x10ca'>82576 Virtual Function</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <capability type='phys_function'>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
        </capability>
        <iommuGroup number='35'>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x5'/>
        </iommuGroup>
      </capability>
    </device>
    この例では、仮想機能 pci_0000_03_10_2 をステップ 8 の仮想マシンに追加します。仮想機能の busslot、および function パラメーターは、デバイスを追加するのに必要になります。
    /tmp/new-interface.xml などの一時 XML ファイルにこれらのパラメーターをコピーします。
       <interface type='hostdev' managed='yes'>
         <source>
           <address type='pci' domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
         </source>
       </interface>

    注記

    仮想マシンが起動すると、物理アダプターが提供し、MAC アドレスが設定されたネットワークデバイスのタイプが認識されます。このMAC アドレスは、ホストおよびゲストが再起動しても変更されません。
    以下の <interface> の例では、オプションの <mac address><virtualport><vlan> 要素の構文を示しています。実際には、<vlan> または <virtualport> を、例のように両方同時に使用するのではなく、どちらか一方を使用します。
    ...
     <devices>
       ...
       <interface type='hostdev' managed='yes'>
         <source>
           <address type='pci' domain='0' bus='11' slot='16' function='0'/>
         </source>
         <mac address='52:54:00:6d:90:02'>
         <vlan>
            <tag id='42'/>
         </vlan>
         <virtualport type='802.1Qbh'>
           <parameters profileid='finance'/>
         </virtualport>
       </interface>
       ...
     </devices>
    MAC アドレスは、指定されない場合は自動生成されます。<virtualport> 要素は、802.11Qbh ハードウェアスウィッチに接続する場合のみ使用されます。<vlan> 要素は、ゲストのデバイスを 42 とタグ付けされた VLAN に透過的に配置します。
  8. 仮想機能を仮想マシンに追加します。

    直前のステップで作成された一時ファイルで以下のコマンドを使用して、仮想機能を仮想マシンに追加します。これで新規デバイスは即時に割り当てられ、これ以降のゲストの再起動に備えて保存されます。
    virsh attach-device MyGuest /tmp/new-interface.xml --live --config
    --livevirsh attach-device を指定することで、新規デバイスを実行中のゲストに割り当てます。--config オプションを使うと、これ以降のゲストの再起動後も新規デバイスが確実に利用可能となります。

    注記

    --live オプションはゲストが実行中の場合にのみ受け入れられます。virsh オプションが実行中ではないゲストで使用されると、--live はエラーを返します。
仮想マシンが新規ネットワークインタフェースカードを検出します。この新規カードが、SR-IOV デバイスの仮想機能です。

16.2.3. SR-IOV デバイスの場合の PCI 割り当ての設定

SR-IOV ネットワークカードは、複数の仮想機能 (VF) を提供します。これらの仮想機能は、それぞれ PCI デバイス割り当てを使用してゲスト仮想マシンに割り当てることができます。いったん割り当てられると、それぞれの仮想機能は完全な物理ネットワークデバイスのように機能します。これにより、多くのゲスト仮想マシンが、ホスト物理マシン上で単一スロットのみを使用していても、直接の PCI デバイス割り当てによるパフォーマンス上の利点を得られます。
これらの仮想機能 (VF) は、<hostdev> 要素を使用する従来の方法によりゲスト仮想マシンに割り当てられますが、SR-IOV VF ネットワークデバイスには永続的な固有の MAC アドレスがないため、ホスト物理マシンが再起動されるたびにゲスト仮想マシンのネットワーク設定を再設定する必要があるという問題が生じます。この問題に対処するには、VF をホスト物理マシンに割り当てる前に MAC アドレスを設定する必要があり、この設定はゲスト仮想マシンの起動時に毎回行う必要があります。他のオプションと同様にこの MAC アドレスを割り当てるには、以下の手順を参照してください。

手順16.9 SR-IOV で PCI デバイスを割り当てるための MAC アドレス、vLAN、および仮想ポートの設定

<hostdev> 要素は、MAC アドレス割り当て、vLAN タグ ID 割り当て、または仮想ポートの割り当てなどの機能固有の項目に使用することはできません。<mac><vlan>、および <virtualport> 要素は <hostdev> の有効な子ではないためです。それらは hostdev インターフェースタイプ <interface type='hostdev'> で使用できます。このデバイスタイプは、<interface><hostdev> のハイブリッドとして機能します。そのため、PCI デバイスをゲスト仮想マシンに割り当てる前に、libvirt はゲスト仮想マシンの XML 設定ファイルに示されるネットワーク固有のハードウェアまたはスイッチ (MAC アドレスの設定、vLAN タグの設定、および/または 802.1Qbh スイッチとの関連付け) を初期化します。vLAN タグ設定についての情報は、「vLAN タグの設定」を参照してください。
  1. 情報を収集します。

    <interface type='hostdev'> を使用するには、SR-IOV 対応ネットワークカード、また Intel VT-d または AMD IOMMU 拡張のいずれかをサポートするホスト物理マシンハードウェアが必要であり、割り当てる VF の PCI アドレスを把握しておく必要があります。
  2. ゲスト仮想マシンをシャットダウンします。

    virsh shutdown コマンドを使用して、ゲスト仮想マシンのシャットダウン (ここで使用される名前は guestVM) を実行します。
    # virsh shutdown guestVM
  3. XML ファイルを開いて編集します。

    編集する XML ファイルを開くには、virsh save-image-edit オプションを指定して 「ゲスト仮想マシン設定の編集」 コマンドを実行します (詳細は、--runningを参照してください)。この例の設定ファイルの名前は guestVM.xml です。
     # virsh save-image-edit guestVM.xml --running 
    ユーザーのデフォルトエディターで guestVM.xml を開きます。
  4. XML ファイルを編集します。

    以下のような guestVM.xml エントリーを組み込むように設定ファイル (<devices>) を更新します。
    
     <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>

    図16.11 hostdev インターフェースタイプのドメイン XML のサンプル

    MAC アドレスを指定しない場合、他のタイプのインターフェースデバイスの場合と同様に、アドレスは自動的に生成されます。さらに、<virtualport> 要素は、802.11Qgh ハードウェアスイッチ (802.11Qbg (別名「VEPA」) に接続される場合にのみ使用されます。これらのスイッチは現在サポートされていません。
  5. ゲスト仮想マシンを再起動します。

    ステップ 2 でシャットダウンしたゲスト仮想マシンを再起動するために virsh start コマンドを実行します。詳細は、「仮想マシンの起動、再開および復元」を参照してください。
     # virsh start guestVM 
    ゲスト仮想マシンが起動すると、設定済みの MAC アドレスと共に、物理ホストマシンのアダプターによって指定されたネットワークデバイスが表示されます。この MAC アドレスは、ゲスト仮想マシンと物理ホストマシンの起動時に変更されることはありません。

16.2.4. SR-IOV 仮想機能のプールからの PCI デバイス割り当ての設定

特定の仮想機能 (VF) の PCI アドレスをゲストの設定にハードコーディングする上で、2 つの重要な制限があります。
  • 指定した VF は、ゲスト仮想マシンの起動時にはいつでも利用可能な状態でなければなりません。つまり、各 VF を管理者が単一のゲスト仮想マシンに対して永久的に割り当てなければならないことを意味しています (または各ゲスト仮想マシンの起動時に、すべてのゲスト仮想マシンで現在使用されていない VF の PCI アドレスを指定するよう設定ファイルを修正する必要があります)。
  • ゲスト仮想マシンが別のホスト物理マシンに移行する場合、そのホスト物理マシンには、PCI バス上の同じ場所に全く同じハードウェアがなければなりません (または、ここでも起動前にゲスト仮想マシンの設定を変更する必要があります)。
これらの問題は、いずれも SR-IOV デバイスのすべての VF を含むデバイスプールで libvirt ネットワークを作成することによって回避できます。いったんこれが実行されると、このネットワークを参照するようにゲスト仮想マシンを設定できます。ゲストが起動するたびに、単一の VF がプールからゲスト仮想マシンに割り当てられます。ゲスト仮想マシンが停止すると、VF は別のゲスト仮想マシンが使用できるようにプールに戻ります。

手順16.10 デバイスプールの作成

  1. ゲスト仮想マシンをシャットダウンします。

    virsh shutdown コマンドを使用して、ゲスト仮想マシンのシャットダウン (ここで使用される名前は guestVM) を実行します。
    # virsh shutdown guestVM
  2. 設定ファイルを作成します。

    任意のエディターを使用して、passthrough.xml ディレクトリーに XML ファイル (例:/tmp) を作成します。pf dev='eth3' は、お使いの SR-IOV デバイスの物理機能 (PF) の netdev 名に置き換えるようにしてください。
    以下は、物理機能 (PF) をホスト物理マシンの「eth3」に設定し、SR-IOV アダプターのすべての VF のプールを利用可能にするネットワーク定義のサンプルです。
          
    <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>
          

    図16.12 ネットワーク定義の サンプルドメイン XML

  3. 新しい XML ファイルをロードします。

    /tmp/passthrough.xml を直前のステップで作成した XML ファイルの名前と場所に置き換え、以下のコマンドを入力します。
    # virsh net-define /tmp/passthrough.xml
  4. ゲストを再起動します。

    passthrough.xml を直前のステップで作成した XML ファイルの名前に置き換え、以下を実行します。
     # virsh net-autostart passthrough # virsh net-start passthrough 
  5. ゲスト仮想マシンを再起動します。

    最初のステップでシャットダウンしたゲスト仮想マシンを再起動するために virsh start コマンドを実行します (例では、ゲスト仮想マシンのドメイン名として guestVM を使用しています)。詳細は、「仮想マシンの起動、再開および復元」を参照してください。
     # virsh start guestVM 
  6. デバイスのパススルーを開始します。

    単一デバイスのみが表示されていますが、libvirt はゲスト仮想マシンの初回起動時に、PF に関連付けられたすべての VF の一覧を自動的に派生させます。この起動には、以下のようなドメイン XML 内のインターフェース定義が使用されます。
             
    <interface type='network'>
       <source network='passthrough'>
    </interface>
          

    図16.13 インターフェースネットワーク定義のサンプルドメイン XML

  7. 検証します。

    ネットワークを使用する最初のゲストの起動後に virsh net-dumpxml 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>
          

    図16.14 XML ダンプファイル passthrough の内容

16.2.5. SR-IOV の制限

SR-IOV は、以下のデバイスを使用する場合についてのみ十分なテストが行われています。
  • Intel® 82576NS Gigabit Ethernet Controller (igb ドライバー)
  • Intel® 82576EB Gigabit Ethernet Controller (igb ドライバー)
  • Intel® 82599ES 10 Gigabit Ethernet Controller (ixgbe ドライバー)
  • Intel® 82599EB 10 Gigabit Ethernet Controller (ixgbe ドライバー)
他の SR-IOV デバイスも機能する可能性がありますが、リリース時にはテストを実施していません。