A razão pela qual a CPU está o tempo todo 100% usada, eu acho que é diferente da mensagem que você está vendo.
Sobre a mensagem de erro
Agora, sobre os erros AMD-Vi: IOAPIC[0] not in IVRS table
e AMD-Vi: No southbridge IOAPIC found in IVRS table
. Essas mensagens significam que sua configuração de CMOS / BIOS está configurada para ativar a IOMMU , mas o BIOS não tem a tabela IVRS que está descrevendo qual é o endereço do IOMMU e do SMBus Controller. IVRS = Estrutura de Relatório de Virtualização de E / S. Veja também: link
O que é o IOMMU?
O IOMMU é uma unidade de hardware que hoje faz parte da CPU. Permite mapear endereços virtuais visíveis ao dispositivo para endereços físicos.
Por que o IOMMU?
- O IOMMU permite ter uma melhor segurança e proteger seu computador de alguns ataques de alguém que tenha acesso a alguns ônibus como o PCIe e o firewire.
- você pode expor um dispositivo PCIe físico a uma VM.
- é necessário para SR-IOV (VNF)
Corrigindo "AMD-Vi: IOAPIC [0] não na tabela IVRS"
- Atualizar o firmware da placa-mãe
A correção apropriada deve vir do fabricante do hardware da placa-mãe. Portanto, se você tiver uma atualização de BIOS / firmware para sua placa-mãe, instale-a, pois isso pode resolver o problema. Infelizmente para minha placa-mãe (Fórmula Asus Crosshair V), o IVRS está quebrado mesmo na atualização mais recente do BIOS / firmware (versão 1703, Data de Lançamento: 17/10/2012).
- Linux workarround
Se o fabricante do MB não estiver oferecendo uma correção, você pode corrigir isso no Linux especificando nos parâmetros de inicialização do kernel onde esses dispositivos estão localizados usando a opção ivrs_ioapic
.
Aqui estão os passos para o fazer. Para mais detalhes, consulte: link
Inicialize seu kernel adicionando amd_iommu_dump=1
às opções do kernel. Você pode fazer isso através do menu do grub durante a inicialização.
No log do kernel, você verá algumas linhas como:
$ 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
$
Anote os índices de IOAPIC
. Nesse caso, esses são 5
e 6
. Observe o devid, em que 00:14.0
está ok e 00:00.1
está incorreto.
Pesquise o endereço do barramento desses dispositivos e anote os endereços ( 00:00.2
e 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)
$
Agora adicione como parâmetros do kernel: ivrs_ioapic[5]=00:14.0 ivrs_ioapic[6]=00:00.2
, onde o índice 5
e 6
foram encontrados na saída do dmesg e os valores são da saída lspci. Você pode tornar isso permanente editando /etc/default/grub
file e executando grub2-mkconfig -o /boot/grub2/grub.cfg
.
- Desativar o IOMMU na configuração UEFI / BIOS
Desativar o IOMMU tem um pequeno benefício de desempenho. Mas é indesejável para segurança e estabilidade do sistema. O IOMMU é necessário para determinadas configurações de virtualização (passagem PCI, SR-IOV) e desativá-lo não é uma opção.