Cargando microcódigo al procesador

La mayoría de procesadores permiten solucionar errores y mejorar su rendimiento mediante la actualización de su firmware, denominado como microcódigo. Tanto Intel como AMD proveen de estas actualizaciones para sus procesadores, lo que en teoría corrige fallos y mejora el rendimiento. Lamentablemente dichos fabricantes, a día de hoy, no ofrecen la lista de cambios, correcciones o mejoras que ofrecen estas actualizaciones.

Los microcódigos no suponen ningún peligro para su procesador, puesto que realmente no modifica nada de él. Los microcódigos son cargados en la cache del procesador, lo que implica que en cada reinicio debe de volverse a aplicar dicho parche. Cargar microcódigo al procesador no tiene ninguna desventaja, puesto que ocupa una pequeña porción de cache destinada a tal efecto, es decir, dicha porción no es utilizada por el procesador, este libre o no.

Esto que estoy afirmando esta extraído de The linux-kernel mailing list, concretamente de un hilo iniciado por Justin Piszcz, y que responde de forma clara y concisa Dave Jones. El hilo de la discusión es LKML: "Justin Piszcz": Linux Kernel Microcode Question.

Para poder cargar microcódigo en el procesador, el kernel debe tener dicho soporte habilitado. Para saber si tiene habilitado dicho soporte, puede usar el comando grep.

agd-desktop # grep -i microcode .config
CONFIG_MICROCODE=m
CONFIG_MICROCODE_INTEL=y
# CONFIG_MICROCODE_AMD is not set
CONFIG_MICROCODE_OLD_INTERFACE=y

En mi caso, al tratarse de un procesador Intel, compile solo el soporte para Intel. En su caso es posible que tenga compilado el soporte tanta para Intel como para AMD; o para ninguno. Si no tiene soporte para microcódigo deberá añadirlo y compilar de nuevo su núcleo. Lo podrá encontrar en:
.config - Linux Kernel v2.6.36-gentoo-r5 ConfigurationProcessor type and features  --->
   <M> /dev/cpu/microcode - microcode support
      [*]   Intel microcode patch loading support (NEW)

Si usted va a compilar su kernel para añadir o modificar el soporte de microcódigos, puede compilarlo como un módulo (M en lugar de *) aparte. De esta forma, una vez haya cargado el microcódigo al procesador, podrá descargar el módulo microcode del kernel con rmmod microcode.

Una vez su kernel tenga soporte para cargar microcódigos al procesador, deberá de descargar el microcódigo correspondiente y colocarlo en /lib/firmware/. En el caso de que usted use AMD deberá de renombrar el fichero a amd-ucode de forma que quede /lib/firmware/amd-ucode. Además deberá asegurarse que Device Drivers  --->  Generic Driver Options  --->   External firmware blobs to build into the kernel tiene asignado /lib/firmware, quedando tal que así (/lib/firmware) External firmware blobs to build into the kernel .

En el caso de que use Intel, deberá de copiar el microcódigo descargado a /lib/firmware/ de forma que quede /lib/firmware/microcode.dat. Además necesitará instalar la utilidad de Tigran Aivazian, microcode_ctl. Lo más probable es que dicha utilidad se encuentre en los repositorios de su distribución, en cualquier caso puede obtener las fuentes para compilarlo usted mismo en Intel IA32 Microcode Update Utility.

No debe olvidar que tras cada reinicio es necesario volver a cargar el microcódigo al procesador. Usted puede agregar un script de inicio que se encargue de hacer esta tarea con cada inicio del sistema. En caso de que sea usuario de gentoo, puede descargar microcode_ctl del repositorio oficial y activar el script de inicio.

agd-desktop # emerge -av microcode-ctl

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] sys-apps/microcode-data-20101123  498 kB
[ebuild  N    ] sys-apps/microcode-ctl-1.17-r2  320 kB

Total: 2 packages (2 new), Size of downloads: 817 kB

Would you like to merge these packages? [Yes/No] Y
...
agd-desktop linux # rc-update add microcode_ctl default
 * microcode_ctl added to runlevel default
agd-desktop #

2 comentarios:

#
Anónimo dijo...

el script para tratar el microcodigo , deberia de estar en el programa microcode_ctl

#
Antonio Guillen dijo...

@Anónimo

No se exactamente a que te refieres, si al microcódigo en si mismo o al scrit de inicio sysv.

Respecto al microcódigo, antes si se empaquetaba junto con el programa, sin embargo a partir de 2007 su autor no veía sentido seguir lanzando actualizaciones del programa para actualizar el microcódigo, por ello dejó de empaquetar el microcódigo junto con el binario.

Extrecto de la web del autor, donde se indica esto:
"Microcode utility zip not updated with microcode
I can't see much point in rerolling a tarball when only the data is changing! If by some miracle your Linux distribution doesn't have the utility, download one below and update the data file by hand (it's trivial)"

En gentoo, por ejemplo, optaron por crear un paquete independiente, microcode-data, con el microcódigo. Desconozco que es lo que hacen otras distribuciones, aunque es posible que lo empaqueten junto con el binario del microcode tal y como tu has comentado.

Respecto al script sysv, si, viene el script de inicio. Tan solo hay que hacer que se cargue con cada inicio del sistema.

Publicar un comentario

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.