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