KVM NIC 패스스루 "장치가 이미 사용 중"

KVM NIC 패스스루 "장치가 이미 사용 중"

2개의 NIC가 있는 서버가 있습니다.

01:00.0 이더넷 컨트롤러: Intel Corporation 이더넷 컨트롤러 10-Gigabit X540-AT2 (rev 01) 01:00.1 이더넷 컨트롤러: Intel Corporation 이더넷 컨트롤러 10-Gigabit X540-AT2 (rev 01)

그리고 저는 이 2개의 NIC 장치를 게스트(우분투 서버 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 아래 DRHD 기본 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: 장치에 대한 ID 맵 설정 0000:00:1a.0 >[0xdde16000 - 0xdde32fff] [ 1.610487] IOMMU: LPC에 대한 0-16MiB 통합 매핑 준비 [1.610494] IOMMU: ID 맵 설정 장치 0000:00:1f.0 [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

관련 정보