Recompilación de un kernel en Ubuntu 11.04 para un mejor rendimiento con los nuevos procesadores Intel Core i. [colaboración]

Gilberto Ruiz Rojina

Por: Gilberto Ruiz Rojina

30/08/2011

     

1583

Jorge Valdivieso (@Lav0s) nos hizo el favor de compartir aquí en SPK, para todos ustedes, un interesante tutorial para recompilar Ubuntu 11.04 para un mejor aprovechamiento de procesadores de nueva generación, como el Intel Core i7. Aunque él mismo lo advierte, no nos hacemos responsables por lo que suceda tras seguir de forma equivocada el tutorial, confiamos en su buen juicio y en el de ustedes. A continuación citamos su aportación:

En esta ocasión haremos un recompilado fácil del kernel de Ubuntu, para mejorar su rendimiento, especialmente en procesadores nuevos (usaremos el Core i7 de Intel para este ejemplo).

Asimismo decidí hacer este tutorial más entendible al usuario final y no al geek que todos llevamos dentro, esto es con el fin de quitarles el miedo a la recompilación y optimización del kernel para su procesador y que disfruten de lo que por miedo de muchos fue reservado para pocos, asimismo te doy una breve explicación del porque de los comandos que vas a ejecutar.

¿En qué se notará la diferencia? En el tiempo de respuesta, en la reproducción de videos de alta definición (1080p) los cuales serán fluidos y no tomará más del 20% de recursos totales del sistema y en los tiempos de inicio y apagado que se verán reducidos a meros segundos (4 segundos después de la selección en el grub en mi equipo), así como un escritorio más responsivo, y muchos otros.

Como en todo proceso existe un riesgo, las opciones que aquí te doy tienen un riesgo mínimo, NO ME HAGO RESPONSABLE POR DAÑOS CAUSADOS POR LLEVAR A CABO ESTE TUTORIAL, sólo es específico para procesadores Intel Core i7, asimismo, ES OBLIGATORIO TENER LAS ÚLTIMAS ACTUALIZACIONES DE SOFTWARE Y DE UBUNTU 11.04, asimismo, SI POSEES DRIVERS PROPIETARIOS, ES PREFERIBLE QUE LOS TENGAS INSTALADOS Y CONFIGURADOS ANTES DE INICIAR. Con esto último, nos referimos a los drivers privativos de tarjetas de video como NVIDIA o AMD, tarjetas inalámbricas (Ubuntu te los ofrece al terminar la instalación por primera vez, se encuentran bajo controladores adicionales en español o Additional Drivers en inglés).

Asimismo les recomiendo que hayan realizado un reboot antes de proceder con el tutorial y que copien las líneas de comando tal y como están escritas en este documento, las líneas de comando son identificables por estar en itálicas.

cp archivo1 archivo2

Asimismo, cualquier tecla que pida que presiones la marcaré del siguiente modo (con paréntesis cuadrados):

[ENTER]

Una vez terminada esta introducción procedamos.

Como vamos a recompilar el source del kernel, necesitaremos tener las dependencias necesarias para evitarnos sorpresas a la hora de compilar, para agilizar pueden copiar directamente los comandos en la terminal.

*** Instalar los Basicos para compilar el Kernel: necesarios para compilar casi cualquier tipo de programa desde su código fuente.

sudo apt-get install fakeroot buildessential crash kexectools makedumpfile kernelwedge libncurses5 binutilsdev libelfdev libdwdev libnewtdev libncurses5dev

sudo apt­-get –­­no­-install­-recommends install asciidoc xmlto

*** Preparamos las dependencias de compilación: con esto aseguramos que no haya faltantes de ningún tipo antes de iniciar los trabajos críticos. (1)

sudo apt-get build-dep –no-install-recommends linux-image-$(uname -r)

*** Creamos los directorios que usaremos para trabajar: NO TE SALTES ESTE PASO

mkdir ~/src

cd ~/src

*** Descargamos la ultima versión oficial del kernel para ubuntu: después de descargar la versión correspondiente, aplicará los parches necesarios para dejar un source como lo compilaron los desarrolladores de Ubuntu.

apt-get source linux-image-$(uname -r)

*** entramos al directorio donde trabajaremos: el tab es para que autocompletes

cd linux [tab]

*** Limpiamos el código fuente: en palabras resumidas, dejamos el código listo para compilar

make clean

make mrproper

*** Copiamos la configuración actual del kernel: para evitar conflictos con cualquier driver o update hecho por los desarrolladores de Ubuntu.

cp /boot/config-`uname -r` .config

EN ESTE MOMENTO TE PEDIRÉ DE LA MANERA MÁS ATENTA QUE SÓLO MUEVAS LAS OPCIONES QUE TE EXPLICO, PUES EL CAMBIAR OTRAS CONFIGURACIONES PUEDE RESULTAR EN UN SISTEMA QUE NO INICIE.

*** invocamos el menú de configuración del kernel

make menuconfig

— te aparecera esta pantalla después de haber introducido el comando.

Como notarás, moví el cursor hasta “Load an Alternate Configuration File”, realiza lo mismo y oprime [ENTER] para continuar.

Como en uno de los pasos anteriores copiamos la configuración predeterminada del kernel, sólo presionamos [ENTER] para cargar nuestra configuración por defecto, esto nos facilitará más el proceso restante, en vez de estar configurando a mano cada uno de los más de 200 parámetros del kernel.

Procedemos a optimizar esta configuración, dirígete a la opción “Processor type and features” y presiona una sola vez [ENTER].

Llegarás a esta página en la cual haremos uno de los cambios más específicos para el procesador, como ya mencioné antes, esta optimización la haremos para el Core i7.

Dirígete a la opción “Processor family (Generic-x86-64) —>” y presiona [ENTER].

Una vez en este punto notarás que tenemos varios procesadores para seleccionar, pon el cursor sobre la opción “Core 2/newer Xeon” y oprime [ENTER].

Con esto habremos cambiado la marcha por defecto del kernel, volviéndolo de un kernel genérico (en mi caso genérico de 64 bits) a un kernel específico para un procesador, Core 2 Duo o superior, y dentro de esta categoría estriban también los procesadores core i3, core i5, core i7 de primera y segunda generación.

Nos desplazamos un poco más abajo, hasta encontrar “Preemption Model (Voluntary Kernel Preemption (Desktop))” y volvemos a dar [ENTER].

Una vez en esta página, seleccionamos “Preemptible Kernel (Low-Latency Desktop)” y presionamos [ENTER].

En esta ocasión le estamos indicando al kernel qué tipo de respuesta esperamos de los entornos gráficos, en este caso es una respuesta de latencia baja o de modo inmediato.

Ahora nos desplazamos casi al final de la lista y nos preparamos para la última modificación que haremos en esta interfaz, la frecuencia de respuesta.

Seleccionamos la opción “Timer frecuency (100 Hz)”

La cambiamos a este valor en específico (1000 HZ), y una vez más damos [ENTER] y procederemos a guardar la configuración.

Ahora presionemos la tecla de cursor hacia la derecha [®], de modo que sombreemos la opción “EXIT” que se encuentra en medio del menú y presionemos [ENTER] para que nos regrese al menú principal.

Ahora, dirígete hasta la opción “Save an Alternate Configuration File” y presiona [ENTER] para acceder.

Guarda los cambios que realizamos a la configuración de compilado del kernel, presionando una vez más, la tecla [ENTER].

Presiona la tecla de cursor hacia la derecha, para que selecciones “Exit” y presiona [ENTER].

¿Te preguntarás si terminamos?, no, todavía, no, estamos en un punto mágico, el punto en que puedes decir CASI.

Vamos a realizar una optimización mínima en este momento, vamos a determinar directamente cuántos núcleos utilizables tiene tu procesador, (seamos sinceros es un core i7, sabemos que son 8), este es el modo de comprobar cuántos núcleos posee tu procesador.

grep -c ^processor /proc/cpuinfo

Bueno y ahora se preguntarán, ¿por qué los hice teclear ese comando si sólo nos aventó un número como resultado?

La respuesta es sencilla, cuando compilamos, como tenemos un KERNEL GENÉRICO no ocupamos toda la potencia del procesador, ahora que saben directamente que tienen 8 núcleos (8 cores) en su computadora les será más fácil entender esto, cuando compilamos en Linux, podemos aprovechar todos los núcleos, para así hacer más rápido cualquier proceso, en este caso pondremos todos los núcleos a compilar a la vez, indicándolo con el siguiente comando:

export CONCURRENCY_LEVEL=9

*** Ahora para indicar que lo que compilemos sea entregado de un modo final, sin archivos objeto o residuos de compilación: en pocas palabras, que nos deje limpio el resultado y lo marque como paquete de instalación del sistema, utilizamos el siguiente comando:

make-kpkg clean

Felicidades, has llegado al momento que más esperabas, estamos por terminar, antes de poner las últimas líneas de comando, te anticipo, el proceso que hará tu computadora después de que presiones [ENTER] es tardado, así que una vez que pase eso, simplemente sal por unos 20 minutos y aprovéchalos para relajarte :) [o para visitar todas y cada una de las notas de SPK*  *anuncio patrocinado por el editor].

*** Compilamos el kernel: para los que lo están pensando, sólo la palabra – corei7 – es cambiable, sólo se aceptan minúsculas pero para este caso práctico, déjalo como está para evitarte dolores de cabeza.

fakeroot make-kpkg –initrd –us –uc –append-to-version=-corei7 kernel-image kernel-headers

Una vez que termines de compilar, el sistema te arrojará 2 archivos “.deb”, los cuales deberás instalar para así empezar a usar tu nuevo kernel, optimizado exclusivamente para tu core i7.

Cabe aclarar que muestro qué archivos son, pero dependiendo de la versión del kernel serán los nombres de los archivos, para este ejemplo instalaré los archivos resultantes con el nombre resultante, así que cuidado, para tiempos futuros, este último paso puede cambiar, pero anexo algo que les guiara un poco.

*** Regresamos al directorio de trabajo donde nos espera nuestro nuevo kernel

cd ~/src

*** Listamos los archivos para saber qué nombre tomó nuestro nuevo kernel

ls -l

*** Procedamos a su instalación: como dije anteriormente, usaré los nombres resultantes, los subrayé para que sepan exactamente cuáles usaré:

sudo dpkg -i linux-headers-2.6.38.8-corei7_2.6.38.8-corei7-10.00.Custom_amd64.deb linux-image-2.6.38.8-corei7_2.6.38.8-corei7-10.00.Custom_amd64.deb

A partir de este momento iniciará la instalación de su kernel, hará los cambios requeridos, cabe hacer hincapié que si no siguieron las recomendaciones de la primera página (parte superior de este post), de haber actualizado, y si tenían drivers privativos de haberlos también actualizado, es posible que aquí dé error y pues sólo quedaría que desinstalaras el kernel que acabas de instalar.

Pero como sé que leíste la primera página (la parte superior de este post), entonces no tendrás ningún problema, así que serás capaz de presumirle a muchos que has compilado tu propio kernel de Ubuntu. A continuación te incluyo una imagen de cómo se ve el kernel que tenías y el kernel que tendrás, así como una muestra de una instalación exitosa del kernel.

Nota: UNA VEZ TERMINADA LA INSTALACIÓN, REINICIA 2 VECES, la primera para que se hagan los symlinks y se termine de instalar el nuevo kernel y la segunda para que notes la diferencia real.

Un Antes y un después.

Este era mi kernel antes de compilarlo.

Y este es mi kernel una vez recompilado.

¿Cómo sé que el proceso de instalación fue satisfactorio?

Observarás en la imagen que hasta los drivers privativos no dan problemas.

Nota (1) acerca de $(uname -r), es una variable indicando la última versión del kernel que se encuentre instalada en este momento en el sistema, la cual puedes consultar con el comando uname -a.

Jorge Valdivieso (@Lav0s)

comentarios
  • http://konoha-uploads.blogspot.com/ Luis Ricardo

    No leí completo, solo los primeros párrafos, pero también deberían advertir que deben considerar que hacer esto es un proceso bastante tardado, así que lo hagan con tiempo.

  • http://twitter.com/ChechareTRs Chechare! ♪

    No esta disponible para otra distro como Fedora?

    • http://twitter.com/jorgeavc Jorge Valdivieso

      deja me instalo fedora y luego publico una guia si les parece, con que 7 personas digan si es un hecho que la realizaria :)

    • http://www.spk.la/editorial SPK.LA (Gilberto)

      Yo digo que sí ;)  

    • http://twitter.com/ChechareTRs Chechare! ♪

      SI! :D

  • Emiliano

    es posible que funcione en Ubuntu 11.10?

  • Javbarros

    Gracias por el aporte, en realidad me arriesgue, ya que realice la compilación en ubuntu 12.04 beta 2… pero todo resulto bien…

    Gracias… en realidad se nota la diferencia..