IOAPIC[0] 不在 IVRS 表中

IOAPIC[0] 不在 IVRS 表中

我通过 USB 安装了全新的 Ubuntu。当我启动 PC 时,它直接带我进入 GNU Grub,当我选择 Ubuntu 时,我收到以下消息。

[Firmware Bug]: AMD-Vi: IOAPIC[0] not in IVRS table
[Firmware Bug]: AMD-Vi: No southbridge IOAPIC found in IVRS table
AMD-Vi: Disabling interrupt remapping

我可以通过“Ubuntu 高级选项”>“Ubuntu,Linux 4.2.0-30-generic(恢复模式)”>“恢复”进入 Ubuntu 桌面,但 CPU 运行速度接近 100% 并且不可持续。

电脑规格:

  • AMD A6-6400K

  • MSI A68HI Mini ITX F M2+ 主板

答案1

CPU 始终处于 100% 使用率的原因我认为这与您看到的消息不同。

关于错误信息

现在介绍AMD-Vi: IOAPIC[0] not in IVRS tableAMD-Vi: No southbridge IOAPIC found in IVRS table错误。这些消息意味着您的 CMOS/BIOS 设置已配置为启用IO管理单元但是 BIOS 缺少 IVRS 表,该表描述了 IOMMU 和 SMBus 控制器的地址。IVRS = I/O 虚拟化报告结构。另请参阅:http://support.amd.com/TechDocs/48882_IOMMU.pdf

什么是 IOMMU?

IO管理单元是目前 CPU 的一部分的硬件单元。它允许将设备可见的虚拟地址映射到物理地址。

为什么选择 IOMMU?

  1. IOMMU 可以提供更好的安全性并保护您的计算机免受某些可以访问 PCIe 和火线等总线的攻击。
  2. 您可以将物理 PCIe 设备公开给 VM(PCI 直通)。
  3. 它需要SR-IOV(VNF)

修复“AMD-Vi:IOAPIC[0] 不在 IVRS 表中”

  1. 更新主板固件

正确的修复应该来自主板的硬件制造商。因此,如果您的主板有 BIOS/固件更新,请安装它,因为这可能会解决问题。不幸的是,对于我的主板(华硕 Crosshair V Formula),即使在最新的 BIOS/固件更新(版本 1703,发布日期:2012 年 10 月 17 日)中,IVRS 也坏了。

  1. Linux 解决方法

如果 MB 制造商没有提供修复,您可以在 Linux 中通过在内核启动参数中使用ivrs_ioapic选项指定这些设备所在的位置来修复此问题。

以下是操作步骤。有关详细信息,请参阅:https://ubuntuforums.org/showthread.php?t=2254677

amd_iommu_dump=1通过添加内核选项来启动内核。您可以在启动过程中通过 grub 菜单执行此操作。

在内核日志中,你会看到类似这样的一些行:

$ dmesg |grep 'DEV_SPECIAL(IOAPIC\|not in IVRS table'
[    0.133756] AMD-Vi:   DEV_SPECIAL(IOAPIC[0])     devid: 00:14.0
[    0.133995] AMD-Vi:   DEV_SPECIAL(IOAPIC[255])       devid: 00:00.1
[    0.134116] [Firmware Bug]: AMD-Vi: IOAPIC[5] not in IVRS table
[    0.134235] [Firmware Bug]: AMD-Vi: IOAPIC[6] not in IVRS table
$ 

记下从 开始的索引IOAPIC。在本例中,它们是56。请注意 devid,其中00:14.0是可以的,00:00.1是不正确的。

搜索这些设备的总线地址并记下地址(00:00.200:14.0

$ lspci -nn | egrep "SMBus | IOMMU"
00:00.2 IOMMU [0806]: Advanced Micro Devices, Inc. [AMD/ATI] RD890S/RD990 I/O Memory Management Unit (IOMMU) [1002:5a23]
00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller [1002:4385] (rev 42)
$ 

现在添加内核参数:ivrs_ioapic[5]=00:14.0 ivrs_ioapic[6]=00:00.2其中 index56在 dmesg 输出中找到,值来自 lspci 输出。您可以通过编辑/etc/default/grub文件然后运行来使其永久生效grub2-mkconfig -o /boot/grub2/grub.cfg

  1. 在 UEFI/BIOS 配置中禁用 IOMMU

禁用 IOMMU 可以带来一些性能上的好处。但为了系统的安全性和稳定性,禁用它是不可取的。某些虚拟化设置(PCI 直通、SR-IOV)需要 IOMMU,因此禁用它不是一个选项。

答案2

我更新了主板的固件,似乎已经解决了问题。

相关内容