Microcode - Como atualizar o firmware do processador

O que é microcode e como o Debian permite trabalhar com essa funcionalidade.

[ Hits: 54.072 ]

Por: Perfil removido em 09/05/2014


CPU Microcode



De acordo com [1], microcode é um conjunto de instruções em baixo nível (linguagem de máquina) que controla diretamente o modo de funcionamento de um processador.

Nos processadores modernos, o microcode é implementado na forma de circuitos e não pode ser modificado. Algumas arquiteturas, como RISC, simplesmente eliminaram o microcode de dentro do processador. Outras arquiteturas, como mini e mainframes, são atualizáveis por microcode armazenado em chips EEPROM.

Segundo [2], microcode de processadores, podem ser entendidos com uma espécie de firmware. O kernel Linux é capaz de injetar esse código em tempo de boot, modificando o comportamento do processador, sem necessidade de outro tipo de atualização como, por exemplo, é feito com as BIOS.

Os processadores modernos da Intel e da AMD, estão preparados para funcionar com microcode injetado. Manter seu microcode atualizado elimina potenciais problemas de funcionamento e corrupção de dados. Problemas difíceis de detectar como as falhas de segmentação, travamentos, reboots aleatórios e outros inexplicáveis, estão relacionados à falhas do processador.

As BIOS (tradicionais) ou sistemas EFI podem atenuar o problema, se estiverem atualizadas. Todavia, os vendedores não atualizam suas BIOS com frequência e os usuários fazem isso com muito menos frequência. Bilhões de computadores estão funcionando com suas BIOS completamente desatualizadas.

Suporte Debian para microcode

Conforme anunciado em [3], por Henrique M. Holschuh (desenvolvedor Debian) o suporte para atualização de microcode em tempo de boot para processadores Intel e AMD, está disponível no Debian.

Para detectar se seu processador está sendo executado, com ou sem o suporte, basta filtrar a expressão microcode da leitura de /proc/cpuinfo.

# fgrep -i microcode /proc/cpuinfo

A instalação e as configurações necessárias, são totalmente automatizadas pela instalação dos pacotes de microcode (amd64-microcode ou intel-microcode) e pelos utilitários do pacote iucode-tool.

Todavia, esses pacotes não estão de acordo com as rígidas regras do licenciamento Debian e não são considerados software livre. Para obter esses pacotes, é preciso atualizar seu arquivo /etc/apt/sources.list, incluindo as seções contrib e non-free em cada um dos seus repositórios oficiais, como, por exemplo:

deb http://ftp.br.debian.org/debian/ wheezy main contrib non-free

Posteriormente, basta atualizar sua lista de pacotes:

# apt-get update

E proceder a instalação dos pacotes:

# apt-get install intel-microcode iucode-tool

Observe que a atualização do microcode é efêmera e a cada boot, ele deve ser reaplicado. Em alguns casos, o simples fato do sistema entrar em modo de suspensão para memória RAM, ou para o disco rígido, pode ser suficiente para desfazer a injeção do microcode. Esteja atendo a isso e evite utilizar os modos de hibernação e suspensão para RAM.

Para sistemas em produção, saiba que não é necessário o reinício (reboot) e o microcode será aplicado imediatamente após a instalação dos pacotes e estará disponível a partir deste ponto.

Particularmente, eu recomendo a instalação em um momento de manutenção programada, para que possa fazer um reinício e ter certeza que a característica foi corretamente instalada.

Caso os pacotes (iucode-tool e amd64-microcode ou intel-microcode) sejam removidos, a funcionalidade deixará de existir em seu sistema.

Para checar a versão do microcode que está em execução no sistema, faça:

# fgrep -i microcode /proc/cpuinfo
 microcode       : 0xa4
 microcode       : 0xa4


Confirmando a implantação

# fgrep -i microcode /proc/cpuinfo
 microcode       : 0xa4
 microcode       : 0xa4


Outra forma de filtrar e confirmar a injeção do microcode durante o boot, é:

# dmesg |fgrep -i microcode
 [    2.887380] microcode: CPU0 sig=0x6fd, pf=0x1, revision=0x0
 [    2.902898] platform microcode: firmware: agent loaded intel-ucode/06-0f-0d into memory
 [    2.914852] microcode: CPU0 updated to revision 0xa4, date = 2010-10-02
 [    2.926347] microcode: CPU1 sig=0x6fd, pf=0x1, revision=0x0
 [    2.951439] platform microcode: firmware: agent loaded intel-ucode/06-0f-0d into memory
 [    2.963699] microcode: CPU1 updated to revision 0xa4, date = 2010-10-02
 [    2.975655] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba


As BIOS (SETUP) novas, podem exibir o valor original do microcode do processador antes da atualização. Esse valor será diferente, quando o microcode for atualizado em tempo de execução.

Outras dicas

O módulo cpuid pode ser necessário para a correta funcionalidade de iucode_tool. Para tanto, inclua esse módulo em /etc/modules para garantir seu carregamento em tempo de execução.

# modinfo cpuid
 filename:       /lib/modules/3.2.0-4-amd64/kernel/arch/x86/kernel/cpuid.ko
 license:        GPL
 description:    x86 generic CPUID driver
 author:         H. Peter Anvin <hpa@zytor.com>
 depends:
 intree:         Y
 vermagic:       3.2.0-4-amd64 SMP mod_unload modversions


Não sei qual é o meu processador, e agora?

# cat /proc/cpuinfo
 processor       : 1
 vendor_id       : GenuineIntel
 cpu family      : 6
 model           : 15
 model name      : Intel(R) Pentium(R) Dual  CPU  E2160  @ 1.80GHz
 stepping        : 13
 microcode       : 0xa4
 cpu MHz         : 1200.000
 cache size      : 1024 KB
 physical id     : 0
 siblings        : 2
 core id         : 1
 cpu cores       : 2
 apicid          : 1
 initial apicid  : 1
 fpu             : yes
 fpu_exception   : yes
 cpuid level     : 10
 wp              : yes
 flags       : fpu vme de pse tsc msr pae mce cx8 apic
   sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
   pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor
   ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm
 bogomips        : 3591.20
 clflush size    : 64
 cache_alignment : 64
 address sizes   : 36 bits physical, 48 bits virtual
 power management:


De acordo com [4], as seguintes CPUs aceitam atualizações de microcode:

- AMD CPUs

De acordo com a AMD:

     10h (Barcelona)
     11h (Turion X2 Ultra/Llano)
     12h (Fusion), 14h (Bobcat)
     15h (Bulldozer)


- Intel CPUs

De acordo com a Intel:

     Intel® Atom™ Processor
     Intel® Atom™ processor for Entry Level Desktop PCs
     Intel® Celeron® Desktop Processor
     Intel® Core™ Duo Processor
     Intel® Core™ i3 Desktop Processor
     Intel® Core™ i3 Mobile Processor
     Intel® Core™ i5 Desktop Processor
     Intel® Core™ i5 Mobile Processor
     Intel® Core™ i7 Desktop Processor
     Intel® Core™ i7 Mobile Processor
     Intel® Core™ i7 Mobile Processor Extreme Edition
     Intel® Core™ i7 Processor Extreme Edition
     Intel® Core™ Solo processor
     Intel® Core™2 Duo Desktop Processor
     Intel® Core™2 Duo Mobile Processor
     Intel® Core™2 Extreme Mobile Processor
     Intel® Core™2 Extreme Processor
     Intel® Core™2 Quad Mobile Processor
     Intel® Core™2 Quad Processor
     Intel® Core™2 Solo Processor
     Intel® Pentium® 4 Processor Extreme Edition
     Intel® Pentium® 4 Processors
     Intel® Pentium® D Processor
     Intel® Pentium® M Processor
     Intel® Pentium® Processor Extreme Edition
     Intel® Pentium® Processor for Desktop
     Intel® Pentium® Processor for Mobile
     Intel® Setup and Configuration Software (Intel® SCS)
     Intel® vPro™ technology
     Intel® Xeon® Processor
     Intel® Xeon® Processor 3000 Sequence
     Intel® Xeon® Processor 5000 Sequence
     Intel® Xeon® Processor 6000 Sequence
     Intel® Xeon® Processor 7000 Sequence
     Intel® Xeon® processor E3-1200 Product Family
     Intel® Xeon® processor E5-1600 Product Family
     Intel® Xeon® processor E5-2400 Product Family
     Intel® Xeon® processor E5-2600 Product Family
     Intel® Xeon® processor E5-4600 Product Family
     Intel® Xeon® processor E7-2800 Product Family
     Intel® Xeon® processor E7-4800 Product Family
     Intel® Xeon® processor E7-8800 Product Family
     Intel® Z2460 Smartphone
     Mobile Intel® Celeron® Processors
     Mobile Intel® Pentium® 4 Processors - M


Referências


Página anterior    

Páginas do artigo
   1. Conceitos básicos
   2. CPU Microcode
Outros artigos deste autor

ROX-Files: Ícones para gerenciadores de janelas que não suportam ícones

Bloqueando SPAM no Kmail com o SpamAssassin

Fazendo particionamento avançado no Debian

Configuração do serviço NTP em servidor cliente

Netcat - O canivete suíco do TCP/IP

Leitura recomendada

Wireless RTL-8180 no Linux

Placa de vídeo Nvidia no Ubuntu Hardy

Instalando drivers da nVidia com kernel 2.6

Tabela de Partição GUID - Uma Pequena Introdução

InputClass no X server aplicada as configs do synaptics (touchpad)

  
Comentários
[1] Comentário enviado por robsontex em 09/05/2014 - 00:54h

Muito bom artigo. Bastante esclarecedor.

[2] Comentário enviado por nicolo em 09/05/2014 - 11:13h

Não sabia que o código do processdor precisava de atualização.
Atualizeiu a BIOS duas vezes: Na primeira vez perdi uma plada ASUS pentium 100.
Mais recente atualizei uma ASUS AM3+ com sucesso usando o Windows XP. A tal ferramenta da BiOS da placa mãe simplesmente não funciona.

Os firmware são perigosos de mexer. As ferramentas nem, sempre funcionam bem.

O LINUX , na configuração do Kernel tem opção para selecionar o processador de modo mais específico. AS distros preferem deixar no Genérico., assim todos funcionam, como mula manca mas funcionam.

Pergunto se essa alteração no Kernel favorece o carregamento do tal microcode que carrega em tempo de boot.

[3] Comentário enviado por mattos_gru em 09/05/2014 - 15:36h


[2] Comentário enviado por nicolo em 09/05/2014 - 11:13h:

Não sabia que o código do processdor precisava de atualização. .... ....

..... Pergunto se essa alteração no Kernel favorece o carregamento do tal microcode que carrega em tempo de boot.


Ola!

O microcode favorece a estabilidade do CPU como um todo, principalmente em Kernels genéricos, i.e. não recompilado para aquele CPU específico.

Como brilhantemente elucidado pelo autor @Kyetoy, o microcode será carregado como módulo e a maquina terá uma melhor estabilidade/escalabilidade e, em alguns casos, pode até eliminar ou reduzir "comportamentos estranhos" de alguns hardwares.

A fim de exemplificar, após adotar o microcode, se não me engano em 2010, em três servidores de produção, um deles que a cada dois/três meses desligava do nada, não deu mais problemas.

Adotado em notebooks, posso afirmar por experiência própria, os mesmos tornaram-se mais confiáveis - porem à que se tomar outras precauções tambem, como limpeza periódica, coolers de apoio, etc, etc.

O Artigo lhe agradou ou lhe ajudou? De sua nota

A Comunidade VOL agradece!

Dell Vostro 1310 wxga mate - Bios A15
Intel Core2 Duo T8300 @ 2.40GHz
8 GB RAM - HDs 250 Gb + 400 Gb Sata II
Intel Mobile GM965/GL960 Graphics Controller
Debian Sid Kernel 3.14.2-1-rt-amd64 x86_64 PREEMPT_RT
Kde 4.12.4-1 - plasma-desktop 4.11.8-1
Debian 7.5 Wheezy Kernel 3.12.9-1~bpo70+1 x86_64
Kernel 3.2.57-3-rt-amd64 x86_64 PREEMPT_RT
Kde 4.8.4-2 - plasma-desktop 4.8.4-6

[4] Comentário enviado por albfneto em 11/05/2014 - 14:16h

Bom artigo, 10

em sabayon e gentoo verifiquei, os arquivos de Microcode existem apenas para os processadores Intel, os para AMD não.

[5] Comentário enviado por Buckminster em 24/05/2014 - 22:58h

Antes de instalar dei um fgrep -i microcode /proc/cpuinfo e apareceu

microcode : 0xa07
microcode : 0xa07
microcode : 0xa07
microcode : 0xa07

e o dmesg |fgrep -i microcode apareceu

[ 5.938157] [drm] Loading RV710 Microcode

O sistema (Debian Wheezy 7.5 64 bits) foi instalado ontem, está como veio ao mundo.

O processador é um Core 2 Quad.

Depois de instalado mudou para:

microcode : 0xa0b
microcode : 0xa0b
microcode : 0xa0b
microcode : 0xa0b

e

[ 5.938157] [drm] Loading RV710 Microcode
[37223.490341] microcode: CPU0 sig=0x1067a, pf=0x10, revision=0xa07
[37223.493810] platform microcode: firmware: agent loaded intel-ucode/06-17-0a into memory
[37223.497837] microcode: CPU0 updated to revision 0xa0b, date = 2010-09-28
[37223.498781] microcode: CPU1 sig=0x1067a, pf=0x10, revision=0xa07
[37223.501861] platform microcode: firmware: agent loaded intel-ucode/06-17-0a into memory
[37223.505828] microcode: CPU1 updated to revision 0xa0b, date = 2010-09-28
[37223.506936] microcode: CPU2 sig=0x1067a, pf=0x10, revision=0xa07
[37223.509990] platform microcode: firmware: agent loaded intel-ucode/06-17-0a into memory
[37223.513907] microcode: CPU2 updated to revision 0xa0b, date = 2010-09-28
[37223.516471] microcode: CPU3 sig=0x1067a, pf=0x10, revision=0xa07
[37223.519910] platform microcode: firmware: agent loaded intel-ucode/06-17-0a into memory
[37223.523910] microcode: CPU3 updated to revision 0xa0b, date = 2010-09-28
[37223.526548] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba


Reiniciei o computador e continuou instalado.
Desliguei o computador, desliguei a fonte, esperei 1 minuto, liguei tudo e continuou instalado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts