AMD-VI IOTLB_INV_TIMEOUT
由于此类错误或AER: Corrected error received
内核恐慌,为 RX580 保留所有 PCIe 插槽会阻止我的电脑启动。添加linux参数iommu=soft
并pci=noaer
解决启动问题。在 Lubuntu 和 Ubuntu 20.04 上,我从内核 drm 中看到以下日志:
00:58:47 lubu kernel: [drm] PCIE GART of 256M enabled (table at 0x000000F400000000).
00:58:47 lubu kernel: [drm] UVD and UVD ENC initialized successfully.
00:58:47 lubu kernel: [drm] VCE initialized successfully.
00:58:47 lubu kernel: [drm] Cannot find any crtc or sizes
此外,在 Ubuntu 20.04 上,gdm3 会向我的 Journalctl 发送大量此类消息:
14:02:36 ub20 /usr/lib/gdm3/gdm-x-session[1334]: (II) AMDGPU(0): EDID vendor "GSM", prod id 19311
14:02:36 ub20 /usr/lib/gdm3/gdm-x-session[1334]: (II) AMDGPU(0): DDCModeFromDetailedTiming: 720x480 Warning: We only handle separate sync.
14:02:36 ub20 /usr/lib/gdm3/gdm-x-session[1334]: (II) AMDGPU(0): Using EDID range info for horizontal sync
14:02:36 ub20 /usr/lib/gdm3/gdm-x-session[1334]: (II) AMDGPU(0): Using EDID range info for vertical refresh
14:02:36 ub20 /usr/lib/gdm3/gdm-x-session[1334]: (II) AMDGPU(0): Printing DDC gathered Modelines:
但是,如果我广泛使用 GPU,在两个发行版中我都会遇到随机系统冻结的情况。如果我主要检查journalctl,我会看到这样的错误日志:
00:59:06 lubu kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring sdma0 timeout, signaled seq=175, emitted seq=177
00:59:06 lubu kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* Process information: process pid 0 thread pid 0
00:59:06 lubu kernel: amdgpu 0000:07:00.0: amdgpu: GPU reset begin!
30 00:59:06 lubu kernel: amdgpu: [powerplay]
last message was failed ret is 65535
或者
kernel: [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!
kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring gfx timeout, signaled seq=4226, emitted seq=4228
一些Linux用户报告iommu=pt
解决了这样的问题,参见https://bbs.archlinux.org/viewtopic.php?id=250297。
几个月来我一直对这个问题感到困惑,我想深入学习和理解这里发生了什么。因此,我阅读了有关 iIOMMU 调整的 Linux 内核文档https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html可能的参数以及参数的含义https://www.kernel.org/doc/Documentation/x86/x86_64/boot-options.txt。
由于我不是 IOMMU 专家,我很难理解这些术语,例如 GART、重新/取消映射、反弹缓冲 (SWIOTLB) 以及 amdgpu 与 Linux 系统本身之间的交互。我可以阅读:iommu=soft
表示 Linux 使用软件反弹缓冲 (SWIOTLB),默认值noforce
会阻止操作系统在我的 PC 上启动。noforce
意味着硬件IOMMU不被强制使用。
然后,还有另一个参数,称为,amd_iommu
这对我的硬件设置当然很重要。该选项具有三个可能的值:fullflush、off、force_isolation。不幸的是,我不知道这个选项的默认值是什么。
我的简短问题是:参数的最佳组合是什么iommu
,以及amd_iommu
我的硬件如何充分利用 Ryzen5 上的 RX580?
我的额外问题:
- 是
amd_iommu
补充iommu
?还是amd_iommu
指 AMD Ryzen CPU 或 AMD GPU 硬件?如果还有intel_iommu
,我认为amd_iommu
是指 Ryzen 芯片组。 - 如果
iommu
不强制使用硬件IOMMU,会有什么影响amd_iommu = off
?
我将非常感谢阅读更深入的解释和源代码的直接链接。
谢谢!