Un nuevo parche de 4 líneas que puede incrementar enormemente el rendimiento de tu sistema

Para hacer la historia corta, hace unos días uno de los desarrolladores del kernel subió un patch (de 200 líneas de código) que permitía mejorar considerablemente (casi una 10 veces) el rendimiento del sistema, especialmente al lidiar con el multitasking durante la ejecución de una tarea pesada (como compilar el kernel). Linus felicitó a este desarrollador por su gran aporte. No obstante, un desarrollador de Red Hat, Lennar Poettering, no estaba de acuerdo en implementar esa mejora directo desde el kernel; para él era mejor hacer los cambios en el espacio de usuario (~/.bashrc). Linus se enojó e increpó a este desarrollador, diciéndole que los resultados hablaban por sí mismos. Lennar, en vez de responder con palabras duras, se sentó e ideó una alternativa (que no precisa de parchear el kernel) y que ocupa apenas 4 líneas. En definitiva, le cerraron el pico a Linus… 

Nota: este método requiere de soporte a grupos de tareas en el Kernel Linux (cgroups), es decir, solamente usuarios con Kernel superior a 2.6.36 podrían aplicarlo.

Cómo aplicar el parche en Fedora

1.- Editá el archivo ~/.bashrc.

gedit ~/.bashrc

2.- Pegá el siguiente código al final del archivo:

if [ "$PS1" ] ; then
mkdir -m 0700 /sys/fs/cgroup/cpu/user/$$
echo $$ > /sys/fs/cgroup/cpu/user/$$/tasks
fi

3.- Ejecutá los siguientes comandos:

mount -t cgroup cgroup /sys/fs/cgroup/cpu -o cpu
mkdir -m 0777 /sys/fs/cgroup/cpu/user

Cómo aplicar el parche en Ubuntu

En Ubuntu la cosa es un poquito más complicada…

1.- Editá el archivo rc.local con este comando:

sudo gedit /etc/rc.local

y pegá antes de donde dice “exit 0”, lo siguiente:

mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent

2.- Guardá el archivo y otorgale permisos de ejecución:

sudo chmod +x /etc/rc.local

3.- Editá el archivo ~/.bashrc:

gedit ~/.bashrc

4.- Pegá el siguiente código al final del archivo:

if [ "$PS1" ] ;
then mkdir -m 0700 /dev/cgroup/cpu/user/$$
echo $$ > /dev/cgroup/cpu/user/$$/tasks
echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release
fi

5.- Modificá el archivo cgroup_clean:

sudo gedit /usr/local/sbin/cgroup_clean

6.- Pegá el siguiente código al final del archivo:

#!/bin/sh
if [ "$*" != "/user" ]; then
rmdir /dev/cgroup/cpu/$*
fi

7.- Guardá el archivo y otorgale permisos de ejecución:

sudo chmod +x /usr/local/sbin/cgroup_clean

8.- Reiniciá el sistema.

Nota: si ves la carpeta /dev/cgroup/ vas a notar una mejora considerable en la gestión de la multitarea.


31 comentarios

  1.   Thalskarth dijo

    Encontré las instruciones para Arch, están aquí: http://pastebin.com/raw.php?i=sHRYRuAN

    Por mi parte, apliqué el parche, mucha mejora no noto en general, pero si se nota un gran cambio al hacer scroll en las paginas web, realmente por primera vez van fluidas!!! =)

  2.   Usemos Linux dijo

    Buenísimo! Muchas gracias x compartir!
    Te dije que estamos buscando gente que use Arch para escribir en el blog? Si te interesa, escribinos a usemoslinux@gmail.com
    Un gran abrazo! Pablo.

  3.   Thalskarth dijo

    Gracias por la invitación, despues seguimos por mail entonces 😉

  4.   Thalskarth dijo

    De casualidad no habrá instrucciones para Archlinux, no? 🙂

  5.   Usemos Linux dijo

    No las encontré. Pero algo me dice que seguro es más parecido a Fedora. Por otra parte, habría que tener en cuenta que como cada cual va armando Arch como quiere, tal vez eso influya en el procedimiento a seguir…

  6.   Thalskarth dijo

    Acá encontré como aplicarlas en Archlinux, es bastante similar al de fedora: http://pastebin.com/raw.php?i=sHRYRuAN

  7. bash: /dev/cgroup/cpu/user/$/tasks: No existe el archivo o directorio

    Seguí estas instrucciones y me sigue diciendo este error al abrir el terminal AMD64 x si tiene algo que ver

  8. Ya lo he encontrado, por favor pablo corrigelo http://www.webupd8.org/2010/11/alternative-to-200-lines-kernel-patch.html

    Lo que hay que hacer en ubuntu – en vez de lo que pones – es:

    sudo gedit /usr/local/sbin/cgroup_clean

    y poner esto:

    #!/bin/sh
    if [ “$*” != “/user” ]; then
    rmdir /dev/cgroup/cpu/$*
    fi

  9.   Usemos Linux dijo

    Listo! Corregido! Gracias!

  10.   Usemos Linux dijo

    Es cierto! Gracias x recordármelo!
    Acabo de agregar esa aclaración al comienzo del post.
    Un abrazo! Pablo.

  11.   Dasinex dijo

    Concreta mente, que beneficios obtendré como usuario, y que mejoras en rendimiento se veran en mi sistema.

  12.   Usemos Linux dijo

    Todo va mucho más rápido. No obstante, las diferencias se “ven” realmente cuando estás realizando una tarea pesada y querés realizar al mismo tiempo otras. Por ejemplo, estás corriendo la instalación de varios programas o estás compilando el kernel o editando un video pesado y al mismo tiempo querés navegar por internet o ver una peli, etc.

  13.   Usemos Linux dijo

    Avisame si descubrís cómo implementar el parche en Arch. Yo intentaría corriendo el que funciona en Fedora.
    Abrazo! Pablo.

  14.   Usemos Linux dijo

    Supongo que eso depende del uso que vos le des a tu compu. Si apenas usás internet y algún editor de texto ligero… no vas a “sentir” la diferencia. En cambio, si sos como yo y realizás tareas pesadas (como convertir videos, compilar el kernel, etc.) mientras navegás en internet o mirás pelis, sí se nota la diferencia.

  15.   Domingopv dijo

    Realizados todos los pasos ,al abrir el terminal me sale siempre lo siguiente:
    mkdir: no se puede crear el directorio «/dev/cgroup/cpu/user/1844»: No existe el archivo o directorio
    bash: /dev/cgroup/cpu/user/1844/tasks: No existe el archivo o directorio
    bash: /dev/cgroup/cpu/user/1844/notify_on_release: No existe el archivo o directorio
    domingopv@pc1:~$
    Todo funciona bien incluso el terminal,¿realice algo mal?

  16.   Usemos Linux dijo

    Mmmm..la verdad no sé qué puede ser. No obstante, me da la impresión de que es muy probable que no hayas realizado bien alguno de los pasos, del 5 en adelante especialmente. Probá repitiéndolos o asegurándote de que los hayas hecho bien. Eso es todo lo que se me ocurre por ahora.
    Un gran abrazo! Pablo.

  17.   Domingopv dijo

    Reinstale maverick y reinstale el parche y ahora me sale lo siguiente.
    mkdir: no se puede crear el directorio «/dev/cgroup/cpu/user/1678»: No existe el archivo o directorio
    bash: /dev/cgroup/cpu/user/1678/tasks: No existe el archivo o directorio
    bash: /dev/cgroup/cpu/user/1678/notify_on_release: No existe el archivo o directorio
    domingopv@pc1:~$

  18.   Usemos Linux dijo

    Uyy..la verdad que no sé qué puede ser. A mí me funcionó perfecto.
    Algo me dice que la limpieza de cgroup no se realiza bien. Por eso te insistí en que vieras del paso 5 en adelante.
    Saludos! Pablo.

  19.   Nolodigo dijo

    Madre mia, impresionante, puedo ver videos flash 1080p en una nvidia 8400 pasiva, osea, mala mala, PERFECTAMENTE, las cpus todas funcionando, maravilloso uffff, que mejora, va muchisimo mejor, tengo Ubuntu 10.04 😀 que bien, los videos me van jajajaj 😀

  20.   Delano dijo

    Qué rc.local? Hay varios, cuál es? Saludos.

  21.   Usemos Linux dijo

    Simplemente escribí los comandos que se listan en el punto 4. No tenés que copiar eso dentro de un archivo sino ejecutar esos comandos.
    Saludos! Pablo.

  22.   GNU/Linux Tips dijo

    Está mal explicado.

    Lo que hay que hacer es editar el archivo rc.local con:

    sudo gedit /etc/rc.local

    hay que pegar dentro (antes del exit 0):

    mkdir -p /dev/cgroup/cpu
    mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
    mkdir -m 0777 /dev/cgroup/cpu/user
    echo “/usr/local/sbin/cgroup_clean” > /dev/cgroup/cpu/release_agent

    Ese es el problema. Esos pasos están mal explicados.

  23.   Usemos Linux dijo

    Tenés razón! Dice claramente, “editar el archivo rc.local”. Lo que faltó agregar es el comando para realizar tal cosa (que tal vez algunos no lo conozcan). Ya mismo lo agrego.
    Gracias x el aviso! Saludos! Pablo.

  24.   Aespinoza dijo

    ¿Cual sería el procedimiento en PCLinuxOs?

  25.   Usemos Linux dijo

    La verdad que no sé…
    Si averiguás, no te olvides de compartir la data con el resto!
    Muchas gracias!
    Saludos! Pablo.

  26.   gonho dijo

    Me lo parece a mi o no has puesto ninguna referencia de donde lo has sacado?? Me podrias decir la fuente?

    Gracias

  27.   Usemos Linux dijo

    No hay una única fuente. Fui buscando cómo hacerlo de diferentes fuentes y de mi propia experiencia personal. En términos generales, te puedo decir que las fuentes son los millones de blogs que reprodujeron esa noticia. Buscá “parche 200 líneas kernel linux” y vas a ver de qué hablo. No lo recuerdo exactamente, pero es posible que la parte de Ubuntu la haya obtenido de WebUpd8; no así la de Fedora.

  28.   luckys0921 dijo

    Yo soy usuario de no hace mucho, de ubuntu 64 bit y al ver este tip me pongo a investigar y el kernel actual que tengo es 2.6.32-27 según el post este solo se puede aplicar dicho parche a kernels que sean superior o igual al 2.6.36 Mi pregunta es si este cambio solo sirve para distros de 32 bit o en mi actual distro se puede actualizar el kernel a 2.6.36 ¿?

    Gracias por toda la info de la web, excelente material.

  29.   Usemos Linux dijo

    Este cambio sirve para 32 y 64 bit, por igual.
    Saludos! Pablo.

  30.   Mr Tuxito dijo

    a una pregunta, y esto no haría líos con alguna actualización posterior?
    en caso de que no fuese bien, qué sería lo peor que podría ocurrir?
    (ya ves que luego el solo ir de un ubuntu 10.04 a un 10.10 crashea todo)

  31.   jesuslara dijo

    Lo primero que se debería aclarar (para evitar el uso irresponsable del método) es que este requiere de soporte a grupos de tareas en el Kernel Linux (cgroups), es decir, solamente usuarios con Kernel superior a 2.6.36 podrían aplicar este método de mejora.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *