sábado, 20 de noviembre de 2010

El parche de cerca de 200 líneas que hace maravillas.

El día 16 de noviembre Michael Larabel publicó en Phoronix un artículo sobre un parche recién creado por Mike Galbraith (según una sugerencia del propio Linus) que incrementa de manera dramática el rendimiento del sistema (Linux) en situaciones de altas cargas de CPU y memoria. Hasta el momento no se ha incorporado al kernel estable, las pruebas fueron en un kernel 2.6.-37-RC(n). Bien, Linus Torvalds está más que complacido con el susodicho parche y  le ha hecho elogios vía mail que aqui les traigo:
.....Sip, y tengo que decir que estoy (felizmente) sorprendido con que tan pequeño terminó resultando el parche, y lo poco intrusivo o feo que es.....
Además también estoy muy contento con lo que hace al rendimiento interactivo. En realidad mis pruebas fueron triviales (leer un mail en un web browser y dar algunas vueltas mientras hago un "make -j64" en el kernel al mismo tiempo) pero para mi es una prueba bastante relevante. Y es una mejora considerable.
Es una mejora para cosas como desplazarse suavemente por el sistema. Pero lo que encontré mas interesante es que parece hacer que las páginas web se cargen mucho mas rápido. Probablemente no debió sorprenderme, pero siempre lo asocié al rendimiento de la red. Claramente cargar una página nueva significa una carga suficiente para un CPU si cargas más de 50 al mismo tiempo, el sistema quedará hambriento de CPU en el proceso de carga, así que no procesará todas las solicitudes http lo suficientemente rápido.
Así que creo que este parche es uno de esos "avances reales". Buen trabajo. La planificación en grupos va de "ser útil para algunas cargas especificas del servidor" a "esta es una característica de batalla".
Linus.
Bueno hasta aquí todo bien, lo que sucede es que uno de los chicos de RedHat (Lennart Poettering) revira y dice que la cosa no es para tanto y que además no hacia falta meter el parche en el kernel, que con hacer unos cambios en el /.bashrc se puede trasladar el asunto a userland (ya hace tiempo el mismo Linus admitió que el Kernel de Linux se estaba inflando demasiado) así que aquí van los cambios (para Ubuntu no funciona así, hay que hacer otras cosas):
Editas tu /.bashrc y le adicionas lo que sigue al final:

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

Luego como superusuario haces lo siguiente:

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

Y listo, sin más problemas y sin tener que meterse en el núcleo, y sip, se enredaron en una discusión via mail que es una chulada. La posicion de Lennart es que no hay porqué meterle mas cáscara al Kernel, la de Linus es que si mejora el redimiento significativamente pues va, y no hay que dejarlo en manos del usuario, mejor que quede automático (y le puso una putiza bien grosera que no voy a traducir "Numbers talk, bullshit walks. .... And you're just full of bullshit.")
Que que hace el parche? pues crear grupos de tareas por TTY de manera automática y aisla al procesador de bastante trabajo de planificación. 
EMHO, el parche (donde sea que lo pongas) introduce una manera interesante de manejar estas situaciones pero las cosas recién empiezan, no creo que quede ahí, lo demas lo dirá el tiempo, de momento les dejo con un (dos, el antes y el después) video de una especie de benchmark (ya hay bastantes pruebas hechas y una respuesta muy positiva), están compilando un kernel, mientras ejecutan glxgears, abren una página web y ven el corto de Big Buck Bunny, la realidad es que la diferencia es notable. Juzguen ustedes. 
Antes:


Después: