KVM NIC パススルー「デバイスはすでに使用中です」

KVM NIC パススルー「デバイスはすでに使用中です」

2つのNICを備えたサーバーがあります

01:00.0 イーサネット コントローラー: Intel Corporation イーサネット コントローラー 10 ギガビット X540-AT2 (rev 01) 01:00.1 イーサネット コントローラー: Intel Corporation イーサネット コントローラー 10 ギガビット X540-AT2 (rev 01)

そして、これらの2つのNICデバイスをゲスト(Ubuntuサーバー14.04)に割り当てたいのですが、このトピックに従っていますこのトピック:KVMでVT-dを使用してデバイスを割り当てる方法 だから私は言われた通りにやった:

  • カーネル構成の変更:

    menuconfigで「バスオプション(PCIなど)」->「DMA再マッピングデバイスのサポート」を「「バスオプション(PCIなど)」->「DMA再マッピングデバイスを有効にする」を「「バスオプション(PCIなど)」->「PCIスタブドライバ」を「*」に設定し、カーネルを保存して再構築します

  • 私のdmesg | grep -e DMAR -e IOMMU表示:

    [ 0.000000] ACPI: DMAR 00000000ddfaabc8 000078 (v01 INTEL SNB 00000001 INTL 00000001) [ 0.000000] Intel-IOMMU: 有効 [ 0.018789] dmar: IOMMU 0: reg_base_addr fed90000 ver 1:0 cap >c9008020660262 ecap f010da [ 0.018860] IOAPIC id 2 under DRHD base 0xfed90000 IOMMU 0 [ 1.610427] DMAR: ATSR が見つかりません [ 1.610449] IOMMU 0 0xfed90000: キューイングされた無効化を使用 [ 1.610451] IOMMU: RMRR を設定しています: [ 1.610460] IOMMU: デバイス 0000:00:1d.0 の ID マップを設定しています >[0xdde16000 - 0xdde32fff] [ 1.610478] IOMMU: デバイス 0000:00:1a.0 の ID マップを設定しています >[0xdde16000 - 0xdde32fff] [ 1.610487] IOMMU: LPC 用に 0-16MiB ユニティ マッピングを準備しています [ 1.610494] IOMMU: デバイス 0000:00:1f.0 の ID マップを設定しています [0x0 - 0xffffff]

    • また、/boot/grub/grub.confファイルのカーネル行にintel_iommu=onパラメータを追加して、カーネルでIntel VT-dを有効にします。
    • BIOSでVT-dを有効にする
    • ホストカーネルドライバーから NIC をアンバインドします:

      echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind echo 0000:01:00.0 > /sys/bus/pci/drivers/pci-stub/bind

    • lspci -kでアンバインドを確認しました: ドライバーはpci_stubでした

ゲストVMのXMLファイルに次の行を追加すると、エラーが発生しました

デバイス 01:00.0 はすでに使用されています

XML追加

hostdev モード='サブシステム' タイプ='pci' 管理対象='はい' ソースアドレス ドメイン='0x0000' バス='0x01' スロット='0x00' 機能='0x0'/ /source /hostdev

関連情報