Virtual-Machine

如何為 AMD IOMMU 編譯 Gentoo 核心?

  • December 8, 2018

我有一個 AMD A4-5300 CPU 和一個支持 IOMMU 的主機板,我試圖在我的 Gentoo Hardened 4.3.3-r4 核心上啟用 IOMMU,目的是在 KVM VM 上使用顯卡。根據這裡的指南,我應該使用一些提供的選項(“支持 DMA 重新映射設備”、“啟用 DMA 重新映射設備”和“PCI Stub 驅動程序”)重新編譯我的核心。但是,我的核心配置中沒有“支持 DMA 重新映射設備”和“啟用 DMA 重新映射設備”。

然後我在配置中搜尋“remap”並嘗試啟用一些選項,它們是 CONFIG_IRQ_REMAP、CONFIG_DMAR_TABLE、CONFIG_IOMMU_SUPPORT、CONFIG_SWIOTLB 和 CONFIG_PCI_IOV。然後我在啟用這些選項的情況下重新編譯我的核心,amd_iommu=fullflush iommu=force在核心命令行上啟動我的系統,並根據上述指南,我通過在我的核心消息中查找“AMD-Vi”來檢查 IOMMU 是否在我的系統上執行:

dmesg | grep AMD-Vi

我的核心日誌上沒有顯示任何關於 AMD-Vi 的資訊。

此外,當我嘗試使用附加的 PCI 設備在 virt-manager 上啟動 VM 時,我收到一條消息*“錯誤啟動域:不支持的配置:主機不支持主機 PCI 設備的直通”*。

我找到的幾乎所有東西都適用於 Fedora、Ubuntu 和 Debian,其中 IOMMU 顯然開箱即用。我不相信這是我的主機板和 CPU 不支持它的問題,因為我的 BIOS 有一個選項,而且因為我記得幾年前能夠在 Debian 上執行帶有 IOMMU 的 VirtualBox VM(儘管我沒有t 跟進它,因為我從沒想過我需要兩個顯卡才能通過 IOMMU 在 VM 上使用 GPU)。

這是我已經嘗試過但沒有奏效的方法:

  1. 使用標準核心而不是強化核心。
  2. 啟用設備驅動程序 >> IOMMU 硬體支持AMD IOMMU 支持使用 DMA 重映射設備支持 Intel IOMMU支持中斷重映射匯流排選項(PCI 等)>> PCI 存根
  3. 使用最新的核心,目前剛剛升級到 4.4.8-hardened-r1。

這是我用來啟動核心的命令行,為方便起見,每個參數都在單獨的行中:

root=/dev/ram0 
crypt_root=/dev/disk/by-uuid/c1ce6456-4c6a-4a64-8027-5ec4fdc0f344 
dolvm 
real_root=/dev/mapper/cryptgentoo-raiz 
rootfstype=jfs 
real_init=/sbin/init 
root_keydev=/dev/disk/by-partuuid/086194de-e476-4abb-82da-9744e6fb0257 
root_key=luks-key.gpg 
keymap=la 
amd_iommu=on 
iommu=on

我仍然缺少核心配置選項嗎?


***更新:***由於心不在焉,我錯誤地發布了ps -ef | grep -i iommu,看看我剛剛發現的……

rockshooter ~ # ps -ef | grep iommu
root        66     2  0 02:57 ?        00:00:00 [amd_iommu_v2]

如果我看到一個核心執行緒,我想我可能有機會讓 IOMMU 執行,只是我的核心沒有說明它。這只是一個瘋狂的猜測……但我會繼續嘗試使用它。

最後,經過多次哀號、抱怨和抨擊,我終於弄清楚發生了什麼事。

事實證明,IOMMU 一直在工作,只是核心日誌沒有顯示它。ps -ef但是 IOMMU 驅動程序在那裡,它正在工作,當我錯誤地輸入而不是dmesg這樣時,我偶然發現:

rockshooter ~ # ps -ef | grep -i iommu
root        66     2  0 04:19 ?        00:00:00 [amd_iommu_v2]  

當我看到核心執行緒執行時,我想,也許我的 IOMMU 真的在工作?所以我執行了與之前為 Debian 所做的相同的配置步驟,一小時後,你瞧,我在連接到顯卡的虛擬機上玩一些遊戲。

請保存此執行緒以供將來參考,因為我花了 3 週的時間才弄清楚這一點。我仍然給了另一張海報一些當之無愧的 +50 聲譽,因為我費心設置和測試這個問題。

IOMMU 主要選項

嘗試Device Drivers >> IOMMU Hardware Support

IOMMU 選項

AMD IOMMU

然後啟用AMD IOMMU support.

DMA 重新映射

使能夠Support for Intel IOMMU using DMA Remapping Devices

可選:IRQ 重映射

使能夠Support for Interrupt Remapping

可選:啟用版本 2 支持

AMD IOMMU Version 2 driver


PCI 選項

巴士選項

Bus options (PCI etc.) >> PCI Stub


從不grep使用配置文件,始終使用menuconfig/鍵來搜尋所需的選項。您連結的指南存在三個問題:

  1. 它是為 Fedora/Redhat 使用者量身定做的。
  2. 由於#1,核心版本不同,因此選項位於不同的位置。
  3. Gentoo 的核心比指南中使用的核心更新。

更新

我的主機板太舊,無法支持 PCI Passthrough,但我希望您看到這些選項現在已正確啟用。使用我指示您使用的確切選項:

IOMMU 主要選項

AGP: Checking aperture...
[    0.000000] AGP: No AGP bridge found
[    0.000000] AGP: Node 0: aperture [bus addr 0xc4000000-0xc5ffffff] (32MB)
[    0.000000] Aperture pointing to e820 RAM. Ignoring.
[    0.000000] AGP: Your BIOS doesn't leave an aperture memory hole
[    0.000000] AGP: Please enable the IOMMU option in the BIOS setup
[    0.000000] AGP: This costs you 64MB of RAM
[    0.000000] AGP: Mapping aperture over RAM [mem 0xc4000000-0xc7ffffff] (65536KB)
...
[    0.959270] PCI-DMA: Disabling AGP.
[    0.959337] PCI-DMA: aperture base @ c4000000 size 65536 KB
[    0.959338] PCI-DMA: using GART IOMMU.
[    0.959340] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture
...
[    1.375277] AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
[    1.375277] AMD IOMMUv2 functionality not available on this system

引用自:https://unix.stackexchange.com/questions/291297