PCI-Passthrough를 사용하여 기존 비디오 카드(Radeon 4770)를 가상 머신에 연결하려고 합니다. Debian Linux(Wheezy, 3.2.0-4-amd64) 호스트에서 가상 머신을 실행하기 위해 Linux-KVM을 사용하고 있습니다.
질문
명확히 하자면, Linux KVM에서 PCI-Passthrough를 구현하는 데 올바른 '경로'가 무엇인지 잘 모르겠습니다. 이 단계에서 나는 올바른 조치가 다음과 같다고 생각합니다.커널 소스의 "버스 옵션(PCI 등)" 섹션에 CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
및 를 추가 하고 다시 컴파일하십시오.CONFIG_PCI_STUB
하지만 잘 모르겠어요이것이 다시 컴파일하기 전에 필요한 추가 사항의 전체 목록인 경우.또는커널을 다시 컴파일해야 하는 경우--아마 더 쉬운 방법이 있을까요?
제가 참고한 가이드 중에서linux-kvm.org컴파일이 필요하다고 명시적으로 언급합니다. Linux-KVM은 이미 설치되어 하이퍼바이저로 작동하고 있습니다.
연구
이 시점에서 내 문제는 내 커널과 관련이 있다고 생각합니다. 나의 주요 자원은 다음의 가이드였습니다.linux-kvm.org(http://www.linux-kvm.org/page/How_to_sign_devices_with_VT-d_in_KVM). 그러나 (겉으로는) 배포판에 특정한 약간 다른 방법을 나타내는 다른 리소스를 찾았습니다.
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 커널 구성 항목입니다.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 지원:
VT-d(지정 I/O용 인텔® 가상화 기술) ‡ 예
내 Asrock Z77 Extreme4 마더보드는 VT-d도 지원합니다(사용자 설명서의 62페이지 참조):
VT-d Intel ® VT-d 기술(Intel ® Directed I/O용 가상화 기술)을 활성화하거나 비활성화하려면 이 옵션을 사용합니다. 이 기능의 기본값은 [비활성화]입니다.
아이오무
내 시스템에 IOMMU가 지원되는지 확인했습니다.
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
PCI-Passthrough 지원 외에도 KVM이 설치되어 작동합니다.
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
마더보드의 BIOS를 통해 VT-d가 활성화되었는지 확인했습니다. 따라서 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
나는 이것이 호스트가 여전히 비디오 카드의 제어권을 포기하지 않고 커널이 적절한 구성 항목으로 컴파일되지 않았기 때문이라고 추측합니다.
이것은 저에게 새로운 영역이므로 미숙한 점을 양해해 주시기 바랍니다. 나는매우제가 올바른 길을 가고 있다는 단순한 확인일지라도 어떤 피드백이라도 감사하겠습니다. 제가 눈에 띄게 실수를 했는지, 아니면 지나치게 생각하고 있는지 알려주세요. 내 질문에 대한 건설적인 비판도 환영합니다. "도움이 될 수 있도록" 충분한 정보를 제공하지 않은 경우(또는 너무 많은 내용을 포함한 경우) 알려주세요. 제 질문에 대한 답변을 더 명확하게 하거나 더 쉽게 할 수 있도록 기꺼이 도와드리겠습니다.
미리 감사드립니다.
답변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-ass'를 초기화할 수 없습니다."라는 오류가 발생했습니다. 다음을 실행하여 부팅할 수 있었습니다.
echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts
여전히 문제가 있는 경우 다음 문서를 참조하세요.http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html