sábado, 7 de abril de 2012

Actualizando el microcódigo de la CPU (microcode.ctl)

[Explicación]
Los procesadores tienen un firmware, también llamado microcódigo. El firmware está situado entre el hardware y el lenguaje ensamblador. Mas o menos la cosa iría así:

hardware -> firmware (microcódigo) -> ensamblador -> kernel -> S.O. y aplicaciones

Es un bloque de instrucciones máquina que establece la lógica a más bajo nivel y que está fuertemente ligado a la electrónica subyacente. Pero así mismo, es un cacho de código. O sea, software.

Cuando compras una CPU en una tiena, o te compras un portátil estás adquiriendo un modelo concreto, que viene con una revisión (versión) de firmware concreta. Pero ¿Qué passa si Intel saca una nueva versión de firmware con mejoras, optimizaciones, uso de algoritmos mas eficientes y con menor consumo de energía, corrección de bugs, etc? Pues que no los puedes disfrutar, a menos que instales el firmware nuevo. Y...¿Cómo se consigue actualizar el microcódigo? Pues normalmente no te queda otra que actualizar la BIOS de tu máquina actualizando así el microcódigo de tu procesador.

Pero ya sabes que actualizar la BIOS no siempre es buena idea. Si mientras la estás actualizando se vá la corriente, puedes tirar el procesador directamente, que es irrecuperable. Es algo peligroso. Se puede hacer, pero no es algo que quieras hacer muy amenudo. Enserio.

Cagonlaputa. Entonces, ¿no hay alternativa posible? Si. Si la hay. Almenos en Linux si.

[Conociendo la herramienta]
Hay un hermoso paquete llamado microcode.ctl que hace éste trabajo por nosotros y que se encarga de cargar el microcódigo de manera dinámica en nuestro procesador. Esto significa que no flashea el procesador (no hace los cambios permanentes) sinó que actualiza el firmware del procesador al vuelo y en tiempo de ejecución cada vez que se inicia el S.O. Esto tiene varias ventajas:
  1. Lista numeradaNada de actualizar la BIOS del modo tradicional, por lo que nos evitamos un procedimiento peligroso (y tedioso).
  2. Se descarga automáticamente las nuevas versiones sacadas por Intel y las aplica en el próximo reinicio.
  3. En caso de que se descargue una versión que por lo que sea falla y nos dá problemas, solo debemos desactivar el daemon que se encarga de actualizar el microcódigo del procesador cada vez que se inicia el sistema, y santas pascuas.
[Instalación]
Pff.... ¿enserio que tengo que hacer esta sección? Si las secciones de "instalación" siempre son iguales en Linux :/
$ sudo aptitude install microcode.ctl

...y a correr. En la instalación te pedirá si te quieres descargar también el paquete propietario intel-microcode que contiene las últimas versiones de los microcódigos. Obviamente la resuesta es SI, QUIERO. Y punto. Si vas a ver el fichero /var/log/syslog puede que te encuentres con estas bonitas líneas (pero dependen de la versión de firmware que tengas, claro):

microcode: CPU0 sig=0x20655, pf=0x10, revision=0x2
microcode: CPU1 sig=0x20655, pf=0x10, revision=0x2
microcode: CPU2 sig=0x20655, pf=0x10, revision=0x2
microcode: CPU3 sig=0x20655, pf=0x10, revision=0x2
microcode: Microcode Update Driver: v2.00 , Peter Oruba
microcode: CPU0 updated to revision 0x3, date = 2011-09-01
microcode: CPU1 updated to revision 0x3, date = 2011-09-01
microcode: CPU2 updated to revision 0x3, date = 2011-09-01
microcode: CPU3 updated to revision 0x3, date = 2011-09-01

Un saludo!


3 comentarios:

  1. «Si las secciones de "instalación" siempre son iguales en Linux :/»

    Va a ser que no: http://wiki.gentoo.org/wiki/Intel_microcode :/

    ResponderEliminar
  2. hola, me gustó tu blog

    en cuanto al articulo, escribes todo lo bueno del microcodigo, pero como todo en esta vida tiene su lado oscuro, puedes señalar si instalar el microcodigo tiene alguna desventaja.

    ResponderEliminar
    Respuestas
    1. Bueno, creo que todo el mundo está loco con esto de Star Wars y el 'lado oscuro de las cosas'. En realidad no veo nada malo en el Microcódigo. Intel va haciendo diferentes firmwares a medida que va pasando el tiempo. Si compraras un procesador igual que el que tienes, pero un año mas tarde probablemente el firmware sería distinto (y por alguna buena razón: optimización de un proceso, arreglo de un bug...).

      En definitiva, si confías en Intel (y lo haces, puesto que has comprado un procesador suyo), actualizar al último firmware no le veo nada malo.

      Lo peor que podría pasar es que, por algún motivo, dejara de funcionar algo. Pero como estás poniendo el firmware en runtime y no lo flasheas en el procesador, simplemente desactiva microcode.ctl y todo funcionará como siempre.

      Un saludo, Jan.

      Eliminar