Recordais ese parche «milagro» de 200 lineas de código que mejoraba el rendimiento en la agrupación de tareas ejecutadas desde la consola. Pues bien, he sacado un «ratejo» e implementado un pequeño script (valga la redundancia) para facilitar su instalación. El script (que teneis que ejecutar como root) es el siguiente:
#!/bin/bash YELLOW="\033[1;33m" RED="\033[0;31m" ENDCOLOR="\033[0m" #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # PARCHEAR # # Aplica las mejoras del kernel (parche de 200 lineas) # pero en 4 lineas de bash. # #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function PARCHEAR() { FICHERO="$HOME/.bashrc" echo "" echo -e $YELLOW"Parcheando el fichero [${FICHERO}]..."$ENDCOLOR echo "" # Añadiendo cadenas a .bashrc # Primero buscamos una cadena "base" para ver si esta o no ya añadido LINEAS=`cat $FICHERO | grep "/dev/cgroup/cpu/user" | wc -l` if [ "$LINEAS" == "0" ]; then echo "Añadiendo parche para rendimiento..." echo "if [ \"\$PS1\" ] ; then" | tee -a $FICHERO echo "mkdir -m 0700 /dev/cgroup/cpu/user/\$\$" | tee -a $FICHERO echo "echo \$\$ > /dev/cgroup/cpu/user/\$\$/tasks" | tee -a $FICHERO echo "fi" | tee -a $FICHERO else echo "Parece que parche ya fue incluido en $FICHERO" fi FICHERO="/etc/rc.local" echo "" echo -e $YELLOW"Parcheando el fichero [${FICHERO}]..."$ENDCOLOR echo "" # Añadiendo cadenas a /etc/rc.local # Primero buscamos una cadena "base" para ver si esta o no ya añadido LINEAS=`cat $FICHERO | grep "/dev/cgroup/cpu/release_agent" | wc -l` if [ "$LINEAS" == "0" ]; then echo "Añadiendo parche para rendimiento..." POSI=`cat $FICHERO | grep -n "exit 0" | sort -nr | head -n 1 | awk -F: '{print $1}'` #echo "Posi es [$POSI]" echo "Sacando copia de seguridad de $FICHERO en /etc/rc.local.backup.txt" cp /etc/rc.local /etc/rc.local.backup.txt sed "${POSI}imkdir -p /dev/cgroup/cpu\nmount -t cgroup cgroup /dev/cgroup/cpu -o cpu\nmkdir -m 0777 /dev/cgroup/cpu/user\necho \"/usr/local/sbin/cgroup_clean\" > /dev/cgroup/cpu/release_agent" /etc/rc.local | tee /etc/rc.new.local mv /etc/rc.new.local /etc/rc.local #echo "#========== parche mejora ============" | tee -a $FICHERO #echo "mkdir -p /dev/cgroup/cpu" | tee -a $FICHERO #echo "mount -t cgroup cgroup /dev/cgroup/cpu -o cpu" | tee -a $FICHERO #echo "mkdir -m 0777 /dev/cgroup/cpu/user" | tee -a $FICHERO #echo "echo \"/usr/local/sbin/cgroup_clean\" > /dev/cgroup/cpu/release_agent" | tee -a $FICHERO #echo "#====================================" | tee -a $FICHERO else echo "Parece que parche ya fue incluido en $FICHERO" fi echo "" echo -e $YELLOW"Dando permisos de ejecucion a [${FICHERO}]..."$ENDCOLOR echo "" sudo chmod +x $FICHERO FICHERO="/usr/local/sbin/cgroup_clean" echo "" echo -e $YELLOW"Creando el fichero [${FICHERO}]..."$ENDCOLOR echo "" if [ -f $FICHERO ]; then echo "#!/bin/sh" | tee $FICHERO echo "rmdir /dev/cgroup/cpu/$*" | tee -a $FICHERO else echo "Fichero $FICHERO ya existe." fi; echo "" echo -e $YELLOW"Dando permisos de ejecucion a [${FICHERO}]..."$ENDCOLOR echo "" sudo chmod +x $FICHERO echo "FINALIZADO. Parche aplicado, reinicia y disfruta de Linux..." } #----------------------------------------------------------------------------- # Comprobar que eres usuario root if [ $USER != root ]; then echo -e $RED"Error: tienes que ser root." echo -e $YELLOW"Finalizando..."$ENDCOLOR exit 0 fi # Parchear el Sistema PARCHEAR # end of parche.sh
Nota: no me hago responsable de si se rompe algo en tu equipo (que ya tengo bastante con soportar a «zanganos» en el trabajo ^^, asi que ejecutalo bajo tu propia responsabilidad). De todas formas es fácil volver «hacia atrás» si se siguen las instrucciones del post original. Sin embargo, antes de ejecutar el script te recomiendo sacar una copia de seguridad de tu «.bashrc» y de tu «/etc/rc.local». Si no da muchos problemas, lo empaquetare como .deb.
Descarga | (Renombra el .doc a .sh) parche.sh
Mejor espero a que salga la versión full, no vaya a ser cosa que rompa algo en el sistema xD
Bueno, yo lo llevo probado en 2 equipos con exito, pero tampoco me voy a mojar…
lo instalo y me dice lo siguiente;
domingopv@pc1:~$ sudo sh mejorar.sh
mejorar.sh: 14: Syntax error: «(» unexpected
domingopv@pc1:~$
Si dejo el enlace como .doc aunque realmente es texto plano, este ya no deberia dar error, pues es el que uso.
me da el mismo error que domingo perez
Seguro que es una chorrada pero no entiendo porque se queja de esta línea cuando sólo es la declaración de la función:
sudo ./hack_200_lines
./hack_200_lines: 15: Syntax error: «(» unexpected
Saludos.
mmm, voy a subirlo como .doc (wordpress no me deja subir .sh) directamente.
Me olvide una cosa en el script. si te sale un error como:
mkdir: no se puede crear el directorio «/dev/cgroup/cpu/user/10955»: Permiso denegado
bash: /dev/cgroup/cpu/user/10955/tasks: No existe el archivo o directorio
Es que hay que dar permisos de ejecucion al directorio /dev/cgroup/cpu/user
como root ejecuta:
chmod a+rwx /dev/cgroup/cpu/user
pero bueno, esto mismo tambien te pasaria si ejecutas las instrucciones manuales paso a paso.
lo guardo como parche.sh pero al abrirlo me lo abre con gedit, como lo ejecuto?
un de dos:
1) le das click derecho, propiedades y bajo la pestaña permisos tildas permitir ejecutar como un programa. ahi le das doble click y te preguntara si queres ejecutarlo, ejecutarlo en una terminal o solo mostrar.
2) (la forma que me gusta) abris una terminal, navegas hasta el directorio donde tenes el sh y le das:
$ chmod +x parche.sh
$ ./parche.sh
de cualquiera de las dos formas hace lo mismo.
gracias amigo, pude ejecutarlo con el primer paso!
pues no hay manera,me sale lo mismo que la otra vez
domingopv@pc1:~$ sudo sh parche.sh
[sudo] password for domingopv:
parche.sh: 14: Syntax error: «(» unexpected
domingopv@pc1:~$
lo probe descomentando la linea 14 y al reiniciar teclee glxgears en el terminal y me ha aumentado en 1000 frames x segundo o sea que mejoria hay.
Saludos a todos… de verdad alguien se cree que 4 lineas puedan sustituir a 200, pues yo no creo en los milagros.
Es exactamente lo mismo pero implementado directamente en el kernel por eso la cantidad de lineas, es como ahora José hizo su script con más lineas de las necesarias pero al final tendremos el mismo resultado. :D.
Mismo error:
$ sudo sh parche.sh
parche.sh: 14: Syntax error: «(» unexpected
pues metan sudo ./parche.sh y ya xD
gracias!! 🙂
Gracias por el Script, me ha sido de mucha utilidad. Personalmente lo he aplicado en mi portátil y tengo que reconocer que va algo mejor que sin él parche. Sirve para Ubuntu Lucid?
Un saludo.
Hola, muy bueno y muy util el script, pero queria comentarte que en la linea 77 la logica debe ser la inversa,es decir, las acciones a realizar en el then deberian ir en el else, ya que el comando test -f $fichero va a devolver true si existe, y false si no existe..
saludos,
mcongom
There are a few errors in the script:
1.
if [ -f $FICHERO ];
then
echo «#!/bin/sh» | tee $FICHERO
echo «rmdir /dev/cgroup/cpu/$*» | tee -a $FICHERO
else
The above doesn’t work and doesn’t create the file. This works:
if [ ! -e $FICHERO ];
then
echo «#!/bin/sh» | tee $FICHERO
echo «rmdir /dev/cgroup/cpu/$*» | tee -a $FICHERO
else
2. Your script writes the following in the ~/.bashrc file:
if [ «$PS1» ] ; then
mkdir -m 0700 /dev/cgroup/cpu/user/$$
echo $$ > /dev/cgroup/cpu/user/$$/tasks
fi
It should write this:
if [ «$PS1» ] ; then
mkdir -p -m 0700 /dev/cgroup/cpu/user/$$ > /dev/null 2>&1
echo $$ > /dev/cgroup/cpu/user/$$/tasks
echo «1» > /dev/cgroup/cpu/user/$$/notify_on_release
fi
You can ignore «> /dev/null 2>&1», but not «-p -m» and not the last echo line… That’s because I’ve updated the instructions as it didn’t work for some people (not sure why).
3. The cgroup_clean file should look like this:
#!/bin/sh
rmdir /dev/cgroup/cpu/$*
Thx Andrew.
By the way, regarding #3 in my comment above, you simply forgot to add a «/» in front of the «$» sign:
echo «rmdir /dev/cgroup/cpu/\$*» | tee -a $FICHERO
Bueno, a ver si sacan una versión que funcione porque visto el comentario de andrew me parece que no anda del todo fino.
Me sale el siguiente error:
Dando permisos de ejecucion a [/usr/local/sbin/cgroup_clean]…
chmod: no se ha podido acceder a «/usr/local/sbin/cgroup_clean»: No such file or directory
Yo lo aplique el parche, pero parece que no funciona bien con un viejo prescott 800.
Bueno sera para cuando tenga otro nucleo nuevo.
Por cierto, muy interesante el parche, así me gusta ver cositas así en español, porque me ayuda a comprender mas como se hacen los scripts en bash.
Gracias por publicarlo
Creo que falla algo:
Dando permisos de ejecucion a [/usr/local/sbin/cgroup_clean]…
chmod: no se puede acceder a «/usr/local/sbin/cgroup_clean»: No existe el archivo o directorio
Quiero compartir un .deb que hice para la distro Tuquito, pero es compatible con Debian/Ubuntu
http://social.tuquito.org.ar/forum/topics/como-instalar-el-parche-de
Saludos!
Muchas gracias 🙂 Todo pefecto en linux mint «Julia»
Saludos.
Solo tengo una duda y no tiene nada que ver con el parche ¿Que etiquetas pongo en WordPress para que las líneas de código de bash me salgan como a ti?
Hola, si. tienes que usar sourcecode y /sourcecode encerrado entre corchetes, con un atributo language indicando el tipo de codigo: html, css, bash, etc..
Ejemplo:
Vaya es que lo aplicac directamente, pero es como en HTML
usanso corchetes y los tags serian sourcecode y /sourcecode
aqui_abre_corchete sourcecode language=»bash» aqui_cierra_corchete
Contenido
bla
bla
bla
aqui_abre_corchete /sourcecode aqui_cierra_corchete
Muchas gracias 😀
Pero eso sólo funciona si tienes éste plugin instalado:
http://wordpress.org/extend/plugins/syntaxhighlighter/
Yo me lo acabo de probar y hasta ahora no he tenido problemas. Veamos en el transcurso de la semana q
devuelve:
: orden no encontrada
: orden no encontrada 33m
: orden no encontrada 31m
: orden no encontrada
‘/parche.sh: línea 14: error sintáctico cerca del elemento inesperado `
‘/parche.sh: línea 14: `function PARCHEAR()
Soluciones?
al parecer si está bien el script, pero no existe el archivo /usr/local/sbin/cgroup_clean o almenos no en ubuntu 10.04 lts, entonces yo creo que hay que crearlo y agregar la linea en el script, lo probaré y vere que tal funciona espero que bien y cuando realices el deb concideres este error ya que no se si en todas las versiones de ubuntu sea así
Me causa mucha curiosidad si Linus Tordwals de verdad lo usó… Si alguien tiene un link oficial, sería muy interesante.
Saludos.
Es irresponsable decir que este script aplica el «parche de 200 líneas» de Mike Galbraith, son dos cosas ABSOLUTAMENTE distintas, el parche de Mike Galbraith implica una modificación del kernel para generar grupos de tareas por TTY, este script es una *alternativa* que se ejecuta en el espacio de usuario (userspace) y que genera grupos de tareas «por usuario», esta alternativa fué postulada por Lennart Poettering de Red Hat en las lístas del kernel Linux.-
Decir que este script aplica el parche de las 200 líneas es cuando sumo, una chorrada! … a menos que se descargara el kernel, lo descomprimiera, le aplicara el parche de Mike Galbraith, te lo compilara y lo empaquetara en .deb …
Muy de acuerdo con phenobarbital…
Una explicación más acertada, se encuentra en el siguiente link:
http://www.huntingbears.com.ve/el-famoso-script-de-lennart-poettering-mejorado-en-hunting-bears.html
…publicado en WebUp8 fue visto originalmente en el sitio Ubuntu Life, esto demuestra… http://www.rsmvirtual.com/2010/12/las-4-lineas-de-bash-que-mejoran-linux.html
Good Work,very thx.You are best…
Hola, no se que ha pasado pero glxgears me daba el doble antes y no se si han cambiado algo en los drivers de nvidia o es el que el parche ha dejado de funcionar con alguna actualización del sistema. Ahora me da exactamente el mismo resultado en glxgears que antes de aplicar el parche hace unos meses :S