問題

問題

我正在嘗試使用 PCI-Passthrough 將舊顯示卡 (Radeon 4770) 連接到虛擬機器。我正在使用 Linux-KVM 在 Debian Linux(Wheezy、3.2.0-4-amd64)主機上運行虛擬機器。

問題

澄清一下,我不確定使用 Linux KVM 實現 PCI 直通的正確「路徑」是什麼。在這個階段,我懷疑正確的行動是CONFIG_DMARCONFIG_DMAR_DEFAULT_ON、 和CONFIG_PCI_STUB新增至核心原始碼的「匯流排選項(PCI 等)」部分並重新編譯。

但我不確定如果這是重新編譯之前必要添加的詳盡清單。或者如果需要重新編譯內核--也許有更簡單的方法?

在我參考過的指南中,僅linux-kvm.org明確提到編譯是必要的。 Linux-KVM 已安裝並作為虛擬機器管理程式運行。

研究

此時我認為我的問題與我的核心有關。我的主要資源是指南linux-kvm.orghttp://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM)。然而,我發現了其他資源,這些資源表明了(看似)特定於發行版的稍微不同的方法:

軟呢帽——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.orgsite 也引用了CONFIG_DMAR_DEFAULT_ON,因此這似乎是一個常見且必要的組件。

筆記:我在 Fedora 或 Debian 的指南中沒有發現對顯示卡的限制。引用的 SUSE 文件日期為 2006-2013 年。

CONFIG_DMAR_DEFAULT_ON我在系統上的 /boot/config-`uname -r` 中找不到。進一步的研究表明,CONFIG_DMARCONFIG_DMAR_DEFAULT_ON、 和CONFIG_PCI_STUB是與 上的指令相關的 Linux 核心配置項。linux-kvm.org。因此,我相信我需要使用這 3 個(至少)內核配置項重新編譯主機的核心。intel_iommu=on作為我的主機作業系統的核心參數啟動似乎是不夠的。

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

VT-d/IOMMU/KVM 支援確認

我的研究顯示 PCI-Passthrough 需要 CPU 和主機板都支援 VT-d。

VT-d

我已經確認我的處理器是非kINTEL i7-3770(根據 ark.intel.com/products/65719),支援 VT-d:

英特爾® 定向 I/O 虛擬化技術 (VT-d) ‡ 是

我的 Asrock Z77 Extreme4 主機板也支援 VT-d(使用手冊第 62 頁):

VT-d 使用此選項啟用或停用Intel ® VT-d 技術(Intel ® 定向I/O 虛擬化技術)。此功能的預設值為[停用]。

IOMMU

我驗證了我的系統有 IOMMU 支援:

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

鍵盤虛擬機

除了 PCI 直通支援之外,KVM 已安裝並正常運作:

lsmod | grep kvm
kvm_intel             121968  0 
kvm                   287749  1 kvm_intel

我已確保透過主機板的 BIOS 啟用 VT-d。因此,我不懷疑硬體/BIOS 問題會妨礙 VT-d 的使用。不管,我無法成功地將視訊卡與主機分開並將其重新分配給虛擬機

結束語

最後我想提一下,我也嘗試過測試:

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

嘗試建立目標虛擬機器後出現以下錯誤:

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-分配’無法初始化”的錯誤。我設法透過執行以下命令來啟動它:

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

如果您仍然遇到問題,請參閱以下文章:http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

相關內容