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.
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!!! =)
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.
Gracias por la invitación, despues seguimos por mail entonces 😉
De casualidad no habrá instrucciones para Archlinux, no? 🙂
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…
Acá encontré como aplicarlas en Archlinux, es bastante similar al de fedora: http://pastebin.com/raw.php?i=sHRYRuAN
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
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
Listo! Corregido! Gracias!
Es cierto! Gracias x recordármelo!
Acabo de agregar esa aclaración al comienzo del post.
Un abrazo! Pablo.
Concreta mente, que beneficios obtendré como usuario, y que mejoras en rendimiento se veran en mi sistema.
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.
Avisame si descubrís cómo implementar el parche en Arch. Yo intentaría corriendo el que funciona en Fedora.
Abrazo! Pablo.
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.
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?
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.
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:~$
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.
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 😀
Qué rc.local? Hay varios, cuál es? Saludos.
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.
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.
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.
¿Cual sería el procedimiento en PCLinuxOs?
La verdad que no sé…
Si averiguás, no te olvides de compartir la data con el resto!
Muchas gracias!
Saludos! Pablo.
Me lo parece a mi o no has puesto ninguna referencia de donde lo has sacado?? Me podrias decir la fuente?
Gracias
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.
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.
Este cambio sirve para 32 y 64 bit, por igual.
Saludos! Pablo.
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)
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.