그래픽 카드 통과를 위해 커널에서 IOMMU 활성화


16

짧은 질문 :

intel_iommuLinux 커널에서 설정을 켜려면 어떻게 해야합니까? grub2 부트 로더를 사용하여 데비안 호스트를 실행합니다. 내가 본 문서는 edit이라고 말하는데 /boot/grub/menu.lstgrub 1.x에만 해당되는 것으로 보입니다. 파일이 없기 때문입니다.

이 부팅 옵션을 변경하면 다음과 같은 오류 메시지가 사라질 수 있다는 것을 이해하고 있습니다. /var/log/kern.log

vboxpci: No IOMMU domain (attach)

긴 질문 :

게스트 OS에 그래픽 카드에 대한 직접 액세스 권한 부여

최근에 PCI-express 장치를 통해 Virtualbox에서 실행되는 게스트 OS로 전달할 수 있다는 것을 깨달았습니다. 쿨, 나는 생각했다! 2 개의 NVIDIA Quadro FX 그래픽 카드 (SLI 브리지 연결을 통해 슬픔을 일으키지 않기로 함)가 있고 두 번째 그래픽 카드를 게스트 OS 전용으로 사용하여 OpenGL 기능을 사용할 수 있습니다 Photoshop et al.

엔비디아는이 " SLI Multi-OS "구성을 시장에 내놓았습니다. 기본적으로 몇 년 동안 설정하고 싶었지만 가상화 소프트웨어 (병렬 워크 스테이션 익스트림)에 대한 비용을 지출하고 싶지는 않습니다. 몇 년 동안 VirtualBox를 아주 행복하게 사용하고 있습니다.

호스트 시스템

필자는 고급 워크 스테이션 장비 (Intel ICH10R 칩셋 및 Xeon W3680 CPU를 갖춘 Asus P6T7 WS Supercomputer mobo)에서 데비안 리포지토리에서 linux-3.5.0-19를 실행 중이며 커널에서 IOMMU 지원을 켜고 싶습니다. 바람직하게 직접 컴파일하지 않아도됩니다.

BIOS

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 Update에서 작업을 시작했으며 올바른 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가 있으며 "이 장치는 충분한 여유 리소스를 찾을 수 없습니다"라는 메시지가 표시됩니다. technet.microsoft.com에 대한 추가 설명 .

호스트 커널 로그에서 유망한 것으로 보입니다.

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 바로 가기를 사용하여 시스템을 강제 종료하지 않고 종료 할 수 있기 때문에 확실히 로그인 단계를 마칩니다 ..

이제 나는 아이디어가 부족합니다 ...이 작업을 수행 할 제안이 있습니까? 더 이상 정보를 제공 할 수 있습니까?

UPDATE2 :

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
하드웨어가 지원하는 경우 IOMMU 설정은 데비안 안정에서 기본적으로 활성화되어 있어야합니다. 로그에 문제와 수많은 오류가 발생했기 때문에로 비활성화해야했습니다 intel_iommu=soft. 당신은 통과 시도 할 수 있습니다 intel_iommu=on.
Marco

1
쿨, 방금 파일과 줄을 찾았습니다. KDE의 grub-config 모듈이 CONFIG_CMDLINE_LINUX=intel_iommu=on에 삽입 되었습니다 /etc/default/grub. 이제 게스트 부츠는하지만 ... 그래픽 카드를 감지하지 않습니다
알렉스 리치

intel_iommu=soft유효한 커널 옵션이 아닌 것 같습니다.이 옵션을 사용하면 intel_iommu=on.. (으)로 되돌아갑니다 . www.kernel.org 에서는 사용할 수는 iommu=soft있지만 문서를 찾을 수는 없습니다. 합니까?
Alex Leach

3
당신 말이 맞아, 그건 iommu=soft. 하드웨어 IOMMU (시스템에서 수많은 DMA 오류가 발생 함)를 비활성화하고 대신 소프트웨어 IOMMU를 사용합니다. 다음은 기존 스레드에 대한 링크 입니다. 모든 커널 패키지에 iommu = soft를 사용하도록 제안
Marco

감사. 다음에 다시 부팅 할 때 샷을 줄 수 있습니다. 모든 하드웨어가 IOMMU를 지원한다고 생각하므로 소프트웨어 에뮬레이션이 좋은 아이디어인지 확신 할 수 없습니다. 관련 메모에서, 내 GPU에 DMAR 장치가 있는지, 그리고 그것이 사용하는 것이 좋은지 확실하지 않습니다 intel_iommu=igfx_off...
Alex Leach

답변:


2

vfio-vga와 함께 하이퍼 바이저로 KVM을 사용하여 NVIDIA GTX 760으로 작업하는 VGA 패스 스루를 얻었습니다. 나는 Virtualbox로 그것을 시도한 적이 없다. 그것은 고통 스럽지만 구성을 올바르게 한 후에 잘 작동합니다. KVM은 데스크탑에서 빠른 VM을위한 Virtualbox만큼 편리하며 다른 옵션으로 고려할 수 있습니다.

이 스레드에는 다양한 구성 및 문제 해결 단계에 대한 수많은 정보가 있으며 실제로 도움이되었습니다. https://bbs.archlinux.org/viewtopic.php?id=162768


1
CUDA가 작동합니까?
Aleksandr Dubinsky

이 블로그는 이제 구식이라고 주장하고 vfio.blogspot.com을
Aleksandr Dubinsky

콜드 그라운드에서 효율적인 KVM + qemu를 설정하는 것이 그렇게 빠르지 않을 수도 있습니다.
sitilge

@AleksandrDubinsky, CUDA가 작동하려면 현재 특정 Linux 커널을 사용해야합니다. superuser.com/a/1392031/109803
Gabriel Fair

0

Nvidia 드라이버가 충분한 여유 리소스를 찾지 못했다고 말하면 장치 관리자에서 에뮬레이트 된 "표준 VGA 어댑터"를 비활성화하십시오. 게스트를 재부팅하면 다음과 같은 순서로 진행될 수 있습니다.

1) VM POST / 부팅은 에뮬레이트 된 VGA 어댑터에서 발생합니다. 2) 에뮬레이트 된 VGA 어댑터가 로그인 화면에 들어가기 직전에 공백이됩니다. 3) Nvidia 드라이버가로드되어 패스 스루 GPU를 불러오고 Nvidia 카드에 로그인 화면이 나타납니다.

운이 좋으면 거기서부터 잘 작동한다는 것을 알 수 있습니다. 이것은 Xen과 비슷한 설정에서 발생하는 것과 거의 비슷합니다. 결과를보고하십시오. :)


0

두 가지 별도의 문제가있는 것 같습니다. VGA 패스 스루로 작업하기 위해 재부팅을하는 것은 큰 부담이 될 수 있습니다. Xen에서 VGA 장치는 종종 이동식 장치로 표시되며 일부 사람들은 재부팅하기 전에 장치를 "꺼내기"하는 것이 좋습니다.

코드 12 오류는 Windows 장치 관리자에서 가상 비디오 장치를 비활성화하여 간단히 해결할 수 있습니다.


0

다음 중 하나를 설정하십시오 /etc/grub.

  • iommu=memmaper
  • iommu=soft
  • vga=normal
  • vesa=0

나는 새로운 AMD 64 비트 시스템을 가지고 있으며 Linux에서 BIOS의 iommu 설정으로 인한 Nvidia 및 DMA 설정에 문제가 있음을 발견했습니다. 따라서 grub에서 설정하면 문제가 해결되었습니다.

자세한 내용은 이것을 읽으십시오 .


-1

"IOMMU found"메시지를보기 위해 HP dc7900에서 테스트되었습니다.

통합 비디오 비활성화

iommu=calgary intel_iommu=on intel_iommu=igfx_off
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.