Причина, по которой процессор все время используется на 100%, я думаю, что он отличается от сообщения, которое вы видите.
О сообщении об ошибке
Теперь о AMD-Vi: IOAPIC[0] not in IVRS table
и AMD-Vi: No southbridge IOAPIC found in IVRS table
. Эти сообщения означают, что в вашей настройке CMOS/BIOS настроено включение IOMMU, но в BIOS отсутствует таблица IVRS, в которой описывается адрес IOMMU и контроллера SMBus. IVRS = структура отчетности виртуализации ввода / вывода. Смотрите также: http://support.amd.com/TechDocs/48882_IOMMU.pdf
Что такое IOMMU?
IOMMU - это аппаратная единица, которая сегодня является частью CPU. Это позволяет сопоставить видимые с устройства виртуальные адреса с физическими адресами.
Почему ИОММУ?
- IOMMU позволяет повысить безопасность и защитить компьютер от некоторых атак со стороны кого-либо, имеющего доступ к некоторым шинам, таким как PCIe и FireWire.
- Вы можете открыть физическое устройство PCIe для виртуальной машины.
- требуется для SR-IOV (VNF)
Исправление «AMD-Vi: IOAPIC [0] не в таблице IVRS»
- Обновление прошивки материнской платы
Правильное исправление должно исходить от производителя оборудования материнской платы. Поэтому, если у вас есть обновление BIOS/ прошивки для вашей материнской платы, установите его, так как это может решить проблему. К сожалению, для моей материнской платы (Asus Crosshair V Formula) IVRS не работает даже в последнем обновлении BIOS/ прошивки (версия 1703, дата выпуска: 17.10.2012).
- 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
. В этом случае это 5
и 6
. Обратите внимание на devid, где 00:14.0
в порядке, а 00:00.1
- неверно.
Найдите адрес шины для этих устройств и запишите адреса (00:00.2
и 00: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
где индексы 5
и 6
были найдены в выводе dmesg, а значения получены из вывода lspci. Это можно сделать постоянным, отредактировав файл /etc/default/grub
и запустив grub2-mkconfig -o /boot/grub2/grub.cfg
.
- Отключить IOMMU в конфигурации UEFI/BIOS
Отключение IOMMU имеет небольшое преимущество в производительности. Но нежелательно отключать его для безопасности и стабильности системы. IOMMU требуется для определенных настроек виртуализации (сквозной канал PCI, SR-IOV), и отключение этого параметра невозможно.