그래픽 패스스루를 위해 커널에서 IOMMU 활성화

그래픽 패스스루를 위해 커널에서 IOMMU 활성화

짧은 질문:

intel_iommuLinux 커널에서 설정을 여는 방법은 무엇입니까 ? 저는 grub2 부트로더를 사용하여 Debian 호스트를 실행하고 있습니다. 내가 본 문서에는 edit 라고 적혀 있는데 /boot/grub/menu.lst, 해당 파일이 없기 때문에 이것은 grub 1.x에만 관련된 것 같습니다.

내가 이해한 바에 따르면(그리고 내가 생각할 수 있는 마지막 옵션) 이 부팅 옵션을 변경하면 다음 오류 메시지가 제거될 수 있습니다./var/log/kern.log

vboxpci: No IOMMU domain (attach)

긴 질문:

게스트 운영 체제가 그래픽 카드에 직접 액세스하도록 허용

저는 최근 Virtualbox에서 실행되는 게스트 운영 체제에 PCI-express 장치를 전달할 수 있다는 것을 깨달았습니다. 멋지다! 두 개의 NVIDIA Quadro FX 카드(SLI 브리지가 설치되어 있어 문제가 발생하지 않기를 바랍니다)가 있고 Photoshop 등에서 OpenGL 기능을 사용할 수 있도록 두 번째 카드를 게스트 OS 전용으로 사용하고 싶습니다.

NVIDIA 시장은 이것"SLI 다중 운영 체제"구성은 기본적으로 제가 수년 동안 설정하고 싶었던 것이지만, 수년간 VirtualBox를 아주 즐겁게 사용해 왔기 때문에 가상화 소프트웨어(Parallels Workstation Extreme)에 너무 많은 돈을 쓰고 싶지 않았습니다.

호스트 시스템

나는 상당히 고급형 워크스테이션 장치(Intel ICH10R 칩셋 및 Xeon W3680 CPU를 갖춘 Asus P6T7 WS 슈퍼컴퓨터 mobo)의 Debian 저장소에서 linux-3.5.0-19를 실행하고 있으며 커널에서 IOMMU 지원을 활성화하고 싶습니다. 직접 컴파일하지 않는 것이 좋습니다.

바이오스

BIOS 설정에서 VT-x 및 VT-d 지원을 활성화했습니다. 하지만 IOMMU에 대한 구체적인 언급은 보이지 않습니다.

PCI 장치 연결

매우 간단합니다! VirtualBox의 공식 문서는 다음과 같습니다.여기. 내가 한 일은(덜 모호한 것으로 나타났습니다) 를 열고 nvidia-settings보조 그래픽 카드를 선택한 다음 버스 ID(제 경우에는 "PCI:5:0:0")를 기록해 두는 것이었습니다. 그런 다음 호스트의 명령줄에서 다음을 수행합니다.-

VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0

(처음 이 프로그램을 실행했을 때 VirtualBox가 PIIX 칩셋을 에뮬레이션했기 때문에 오류가 발생했습니다. PCI 패스스루는 ICH9 칩셋에서만 작동한다고 했습니다. 그래서 VirtualBox VM 시스템 설정에서 칩셋을 ICH9로 변경하고 게스트를 열어 설치했습니다. 필요한 새 드라이버 재부팅 후 모든 것이 잘 작동하므로 게스트를 종료하고 명령을 다시 실행했습니다.

출력이 없으며 거의 ​​즉시 명령줄로 돌아갑니다.

게스트에서 호스트 GPU 사용

게스트를 켜기 전에 커널에서 문서화되지 않은 일이 발생해야 하는 경우를 대비하여 먼저 virtualbox-dkms를 통해 호스트를 재부팅했습니다. 권한 없이 이전 명령을 실행했기 때문에 sudo변경 사항이 있는지 의심됩니다.

다음에 게스트를 시작하면 Windows 업데이트가 작업을 시작하고 올바른 NVIDIA 드라이버를 자동으로 감지하고 설치합니다. 지금까지는 모든 것이 좋아 보입니다. 하지만 장치를 사용하려면 게스트를 재부팅해야 합니다...

질문

이제 그래픽 카드 드라이버가 클라이언트 시스템에 설치되고 PCI 장치가 연결되었으므로 Windows 바탕 화면에 액세스할 수 없습니다. Windows 로그인 화면으로 이동한 후 로그인한 후 화면이 멈추고 "환영합니다"라는 메시지와 함께 "회전해야 하지만 회전하지 않습니다."라는 파란색 원이 옆에 표시됩니다.

에서 /var/log/kern.log인쇄된 마지막 메시지는 다음과 같습니다.

vboxpci: vboxPciOsDevInit: dev=500
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061bea0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
device eth0 entered promiscuous mode
power state: 0
vboxpci: No IOMMU domain (attach)

이 문제를 해결하는 방법을 아시나요?

고쳐 쓰다:

이제 를 사용하여 커널을 부팅했지만 intel_iommu=on여전히 완전히 작동하지 않습니다. 호스트를 다시 시작한 후 게스트가 부팅되고 정상적으로 로그인되며 모든 것이 시작 전과 동일해 보입니다. 두 번째 그래픽 카드가 아무 것도 출력하지 않습니다.

장치 관리자에서 Quadro FX 장치 옆에 느낌표가 있고 장치 속성에 "이 장치는 충분한 여유 리소스를 찾을 수 없습니다."라는 메시지와 함께 오류 코드 12가 나타납니다. 추가 설명마이크로소프트 기술 네트워크.

호스트 커널 로그에서는 유망해 보입니다.

vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061baa0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
created IOMMU domain ffff88058377c9a0
device eth0 entered promiscuous mode
power state: 0
vboxpci: iommu_attach_device() success

호스트를 재부팅하지 않고 게스트 OS를 두 번째로 부팅하면 "환영" 단계에서 디스플레이가 다시 정지됩니다. 하지만 강제로 종료하지 않고도 Windows 바로 가기를 사용하여 컴퓨터를 종료할 수 있었기 때문에 확실히 로그인 단계가 완료되었습니다.

이제 아이디어가 부족해요... 작동시키는 방법에 대한 제안이 있으신가요? 더 많은 정보를 제공할 수 있나요?

업데이트 2:

dmesg좀 더 흥미로운 오류가 포함되어 있지만 이에 대해 어떻게 해야 할지 모르겠습니다.

IOMMU 0 0xfbfff000: using Queued invalidation
IOMMU 1 0xfbffe000: using Queued invalidation
------------[ cut here ]------------
WARNING: at /build/buildd/linux-3.5.0/drivers/iommu/intel-iommu.c:4254 init_dmars+0x39b/0x74f()
Hardware name: System Product Name

Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.

BIOS vendor: American Megatrends Inc.; Ver: 0811   ; Product Version: System Version
...
Your BIOS is broken; RMRR ends before it starts!

답변1

저는 NVIDIA GTX 760과 VGA 패스스루를 갖춘 vfio-vga용 하이퍼바이저로 KVM을 사용하고 있습니다. Virtualbox에서는 사용해 본 적이 없습니다. 고통스럽지만 올바르게 구성하면 훌륭하게 작동합니다. KVM은 데스크톱에서 가상 머신을 빠르게 생성하는 데 있어 Virtualbox만큼 편리하며 대안으로 고려할 수 있습니다.

이 스레드에는 다양한 구성 및 문제 해결 단계에 대한 많은 정보가 포함되어 있으며 매우 유용합니다.https://bbs.archlinux.org/viewtopic.php?id=162768

답변2

Nvidia 드라이버에서 사용 가능한 리소스를 충분히 찾을 수 없다고 표시되면 장치 관리자에서 에뮬레이트된 "표준 VGA 어댑터"를 비활성화해 보십시오. 게스트를 다시 시작하면 다음이 순서대로 발생하는 것을 확인할 수 있습니다.

1) VM POST/부팅이 에뮬레이트된 VGA 어댑터에서 발생합니다. 2) 로그인 화면에 들어가기 전에 에뮬레이트된 VGA 어댑터가 공백으로 표시됩니다. 3) Nvidia 드라이버가 패스스루 GPU를 로드하고 시작하면 Nvidia 카드에 로그인 화면이 표시됩니다.

운이 좋다면 그 시점부터 일이 순조롭게 진행될 수도 있습니다. 비슷한 설정으로 Xen을 사용할 때 이런 일이 발생합니다. 결과를 보고해주세요. :)

답변3

두 가지 다른 문제가 있는 것 같습니다. VGA 패스스루 기능을 사용하려면 재부팅이 정말 어렵습니다. Xen에서 VGA 장치는 종종 이동식 장치로 나타나며 일부 사람들은 재부팅하기 전에 장치를 "꺼내기"하는 것이 더 나을 수도 있습니다.

코드 12 오류를 수정하려면 Windows 장치 관리자에서 가상 비디오 장치를 비활성화하기만 하면 됩니다.

답변4

HP dc7900에서 테스트한 결과 "IOMMU 발견" 메시지가 표시되었습니다.

통합 비디오 비활성화

iommu=calgary intel_iommu=on intel_iommu=igfx_off

관련 정보