如何為 AMD IOMMU 編譯 Gentoo 核心?

如何為 AMD IOMMU 編譯 Gentoo 核心?

我有一個 AMD A4-5300 CPU,其主機板支援 IOMMU,我試圖在我的 Gentoo Hardened 4.3.3-r4 核心上啟用 IOMMU,目的是在 KVM 虛擬機器上使用顯示卡。根據本指南在這裡,我應該使用一些提供的選項(「支援 DMA 重新映射裝置」、「啟用 DMA 重新映射裝置」和「​​PCI 存根驅動程式」)重新編譯核心。但是,我的核心配置中缺少「Support for DMA Remapping Devices」和「Enable DMA Remapping Devices」。

然後,我在配置中搜尋“重新映射”,並嘗試啟用多個選項,其中包括 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 的內容。

此外,當我嘗試在 virt-manager 上啟動具有附加 PCI 設備的虛擬機器時,我收到一條訊息:“啟動域時發生錯誤:不支援的配置:主機不支援主機 PCI 設備的直通”

我發現的幾乎所有內容都適用於 Fedora、Ubuntu 和 Debian,其中 IOMMU 顯然是開箱即用的。我不認為這是我的主機板和 CPU 不支援它的問題,因為我的 BIOS 有一個選項,而且因為我記得幾年前能夠在 Debian 上運行帶有 IOMMU 的 VirtualBox VM(儘管我沒有)不再跟進,因為我目前從未想過我需要兩個顯示卡才能透過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 運行,但我的核心沒有對此做任何說明。這只是一個瘋狂的猜測......但我將繼續嘗試使用它。

答案1

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 直通,但我想讓您看到這些選項現在已正確啟用。

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 <[email protected]>
[    1.375277] AMD IOMMUv2 functionality not available on this system

答案2

經過一番哀嚎、抱怨和搖頭之後,我終於明白是怎麼回事了。

事實證明,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 聲譽,因為他費盡心思設置和測試這個問題。

相關內容