데비안에서 Linux-KVM으로 PCI-Passthrough 구현


10

PCI-Passthrough를 사용하여 오래된 비디오 카드 (Radeon 4770)를 가상 컴퓨터에 연결하려고합니다. Linux-KVM을 사용하여 Debian Linux (Wheezy, 3.2.0-4-amd64) 호스트에서 가상 머신을 실행하고 있습니다.

질문

명확히하기 위해 Linux KVM으로 PCI-Passthrough를 구현하기위한 올바른 '경로'가 무엇인지 확실하지 않습니다. 이 단계에서 나는 올바른 작업을하는 것입니다 의심 추가 CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONCONFIG_PCI_STUB은 "버스 옵션 (PCI 등)"커널 소스 및 재 컴파일의 섹션에.

그러나 이것이 다시 작성하기 전에 필요한 추가 목록을 모두 포함하고 있는지 확실하지 않습니다 . 또는 커널을 다시 컴파일 해야하는 경우 더 쉬운 방법이 있습니까?

내가 참조한 가이드 중 linux-kvm.org 만이 컴파일이 필요하다고 명시 적으로 언급했습니다. Linux-KVM이 이미 설치되어 하이퍼 바이저로 작동합니다.

연구

이 시점에서 내 문제는 내 커널과 관련이 있다고 생각합니다. 내 주요 리소스는 linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ) 의 가이드였습니다 . 그러나 분포에 따라 약간 다른 방법을 나타내는 다른 리소스를 찾았습니다.

Fedora-- https://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html

SUSE- "openSUSE : KVM을 사용한 가상화"(관련성이 낮고 2 링크 제한으로 인해 링크가 생략 됨)

Fedora 안내서는 참조 setsebool가 RedHat에 특정한 것으로 보일 때까지 작동합니다 . SUSE 설명서는 SUSE에서 그래픽 카드 할당을 지원하지 않음을 나타내지 만 CONFIG_DMAR_DEFAULT_ON/ boot / config-`uname -r` 에서 문자열을 찾아야하므로 참조하고 있습니다. linux-kvm.org 사이트는 참조는 CONFIG_DMAR_DEFAULT_ON,이 나타납니다 공통 필요한 구성 요소가 될 수 있도록.

참고 : Fedora 또는 Debian 설명서에서 그래픽 카드에 대한 제한 사항을 찾지 못했습니다. 참조 된 SUSE 문서의 날짜는 2006-2013입니다.

CONFIG_DMAR_DEFAULT_ON시스템의 / boot / config-`uname -r`에서 찾을 수 없습니다 . 더 많은 연구가 제안 CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ON그리고 CONFIG_PCI_STUB의 지시와 관련이있는 리눅스 커널 구성 항목입니다 linux-kvm.org은 . 따라서 나는이 3 가지 (적어도) 커널 구성 항목으로 호스트 커널을 다시 컴파일해야한다고 생각합니다. intel_iommu=on내 호스트 OS에 커널 매개 변수로 부팅하는 것만으로는 충분하지 않은 것 같습니다.

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

VT-d / IOMMU / KVM 지원 확인

내 연구에 따르면 PCI-Passthrough에는 VT-d에 대한 CPU 및 마더 보드 지원이 모두 필요합니다.

VT-D

k아닌 INTEL i7-3770 (ark.intel.com/products/65719에 따라) 인 내 프로세서 가 VT-d를 지원함 을 확인했습니다 .

직접 I / O를위한 인텔 ® 가상화 기술 (VT-d) ‡ 예

My Asrock Z77 Extreme4 마더 보드는 VT-d도 지원합니다 (사용자 설명서의 62 페이지 당).

VT-d 인텔 ® VT-d 기술 (Directed I / O 용 인텔 ® 가상화 기술)을 활성화 또는 비활성화하려면이 옵션을 사용하십시오. 이 기능의 기본값은 [해제]입니다.

이오 무

시스템에서 IOMMU를 지원하는지 확인했습니다.

dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[    0.000000] Intel-IOMMU: enabled

KVM

KVM은 PCI-Passthrough 지원 외에 다음과 같이 설치되고 작동합니다.

lsmod | grep kvm
kvm_intel             121968  0 
kvm                   287749  1 kvm_intel

VT-d가 메인 보드의 BIOS를 통해 활성화되도록했습니다. 따라서 VT-d 사용을 방해하는 하드웨어 / BIOS 문제는 의심되지 않습니다. 어쨌든, 비디오 카드를 호스트에서 성공적으로 분리하여 가상 머신에 다시 할당 할 수 없습니다 .

결산 생각

마지막으로 테스트를 시도했다고 언급하고 싶습니다.

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
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0

대상 VM을 생성하려고 시도한 후 다음 오류가 발생했습니다.

Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized

호스트가 여전히 비디오 카드 제어를 포기하지 않기 때문에 커널이 적절한 구성 항목으로 컴파일되지 않았기 때문일 것입니다.

이것은 나를위한 새로운 영역이므로 경험이없는 것을 용서해주십시오. 나는 것이 크게 는 확인이 내가 곧 정상 궤도에 오전 단순히 경우에도, 어떠한 의견을 보내 주셔서 감사합니다. 눈부신 감독을했거나 지나치게 생각하고 있다면 알려주십시오. 내 질문에 대한 건설적인 비판도 환영합니다. "도움을 돕기 위해"(또는 너무 많이 포함시킨 경우) 충분한 정보를 제공하지 않은 경우 알려주십시오. 내 질문을보다 명확하게하거나 쉽게 대답 할 수 있도록 도와 드리겠습니다.

미리 감사드립니다.


비디오 카드가 호스트에 전혀 연결되지 않도록하는 경우가 발생합니다 (예 : 비디오 카드를 호스트에 연결하지 않고 부팅. 드라이버를 제공 / 비활성화하지 않거나 커널 부팅 매개 변수를 사용하여 부팅하는 동안 건너 skip) ?
Hennes

답변:


1

PCI 통과에 대해 언급 된 기사, 커널 구성이 필요합니다

make menuconfig
set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"

optional setting: 
set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"

그러나 "버스 옵션"에서 이러한 옵션을 찾을 수없고 대신 "장치 드라이버-> IOMMU 하드웨어 지원"에서 찾을 수 없습니다.

언급 된 기사를 따른 후에도 여전히 게스트 컴퓨터를 부팅하는 동안 "장치 'pci-assign'을 초기화 할 수 없다는 오류가 발생했습니다."라는 오류가 발생했습니다. 나는 다음을 실행하여 부팅 할 수 있었다.

 echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

여전히 문제가있는 경우 다음 기사를 참조하십시오. http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

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