IOAPIC[0] 不在 IVRS 表中

Mar*_*nes 12 linux grub ubuntu

我从 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
Run Code Online (Sandbox Code Playgroud)

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

电脑规格:

  • AMD A6-6400K

  • 微星 A68HI ?Mini ITX F?M2+ 主板

Mir*_*ici 13

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

关于错误信息

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

什么是 IOMMU?

IOMMU是一个硬件单元,如今已成为 CPU 的一部分。它允许将设备可见的虚拟地址映射到物理地址。

为什么是 IOMMU?

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

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

  1. 更新主板固件

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

  1. Linux 解决方法

如果 MB 的制造商没有提供修复程序,您可以在 Linux 中修复此问题,方法是在内核启动参数中使用ivrs_ioapicoption指定这些设备所在的位置。

以下是执行此操作的步骤。有关更多详细信息,请参阅: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
$ 
Run Code Online (Sandbox Code Playgroud)

记下 中的索引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)
$ 
Run Code Online (Sandbox Code Playgroud)

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

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

禁用 IOMMU 有很小的性能优势。但是为了系统的安全性和稳定性,禁用它是不可取的。某些虚拟化设置(PCI 直通、SR-IOV)需要 IOMMU,禁用它不是一种选择。


Mar*_*nes 3

我更新了主板的固件,这似乎已经修复了它。