martes, 4 de septiembre de 2007

optimizando debian al máximo

Para los que tengais algún cacharro viejo y querais darle algún uso (más allá de servidor casero o criador de polvo) diré que optimizando "un poco" debian consume aproximadamente 20Mb de ram, con una resolución de 1024x768. Mi equipo en cuestión, imac g3 bondi blue, consta de 233Mhz, 64Mb de ram, y 4'3gb de HD y optimizado se puede usar diariamente sin (más o menos) perder la paciencia, Para que os hagais una idea... Hasta veo divx! :D

- Cómo puedo optimizarlo yo también?
Pueeeeeeees... Manos a la obra!

En mi caso he partido de una instalación de debian etch netinstall para ppc para conseguir que no sólo consumiese pocos recursos sino que también consumiese poco disco. Así que una vez instalado el sistema base...:

- Quitar noatime de las particiones

Linux graba cuando fueron creados los archivos y cuando fue su última modificación, poniendo noatime en nuestros sistemas de fichero conseguimos que no lo haga con el consecuente ahorro de escrituras/lecturas en disco, para hacer esto puedes modificar los parámetros de montaje de los sistemas de fichero en la instalación del sistema o más tarde editando el fstab y añadiendo la opción noatime (para la swap no hace falta):

# vim /etc/fstab

Y añadirlo en las opciones:

/dev/hda4 / ext3 noatime,errors=remount-ro 0 0

javier:
Si estás utilizando ese mini sistema como servidor (lo digo porque con las X de hoy en día, por mucho ION que le pongas se arrastrará) no es conveniente añadir la opción de noatime, ya que así dejas de tener información valiosa como la que esa directiva te priva, sobretodo en temas de forensics o simplemente al hace reports.



- Desactivar las consolas virtuales

Las consolas virtuales son las de alt+Fx, normalmente están sin usar, así que podemos desactivarlas todas y dejar una por si acaso, para desactivarlas hay que editar el fichero inittab y comentar unas líneas:

# vim /etc/inittab

Comentar las líneas de las tty, recordad dejar al menos una!, algo parecido a:


#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6


- No instalar ningún display manager (kdm, gdm, xdm...)

Parece que no, pero se ahorra "mucha" memoria evitando el uso de un display manager, sin el display manager podemos iniciar sesión en consola y lanzar el entorno gráfico de forma manual con el comando startx (Si tuviésemos varios habría que poner startENTORNO, pero como es un howto para máquinas poco potentes asumo que solo vamos a instalar uno).

- Instalar una interfaz ligera

Después de instalar x-window-system-core deberíamos instalar una interfaz... Hay un montón de interfaces ligeras: fluxbox, fvwm, fvwm-crystal, icewm, xfce4... Yo he escogido xfce4, consume solo 9Mb más de ram que fluxbox o fvwm-crystal y para lo que quería yo me venía mejor por ser gtk.

- Reducir el consumo de swap

Cuando una máquina cae en el swapping empieza el estrés, todo va infinitamente lento y más en este tipo de máquinas que ya son lentas por naturaleza más... Para evitar el consumo de swap a la ligera podemos editar el fichero swappiness que controla la tendencia del kernel al swapping (por defecto es de 60).

# echo 10 > /proc/sys/vm/swappiness

- Reconfigurar la calidad del color del entorno gráfico

Nosotros no podemos distinguir entre 16bits y 24bits, pero nuestra tarjeta gráfica sí...

# dpkg-reconfigure xserver-xorg


- "Capar" los servicios que no usamos

Digo capar porque basta con quitarles los permisos para que no se ejecuten al inicio, así si capamos alguno que no debemos o necesitamos uno más adelante podemos darle permisos y ejecutarlo a mano, como los servicios son muchos y varían dependiendo de la máquina que cada uno utilice el google para saber cuales puede capar.

Ir al directorio init.d

$ cd /etc/init.d


Ver qué servicios se ejecutan al inicio

$ ls


Capar los servicios que no usemos

# chmod 000 <>

javier:
La eliminación de servicios que no se usan ha de hacerse de otra forma: quitar permisos en /etc/init.d no es el camino porque impides que se ejecuten y, si tu mismo quieres arrancar un servicio en un momento determinado te tocará otorgar de nuevo permiso de ejecución (o lectura macho, que has puesto un chmod 000 xDD). Lo que has de hacer es eliminar el enlace simbólico del servicio en su runlevel correspondiente. En Gentoo sería en /etc/runlevels, en Debian o CentOS (por ejemplo) se hace en /etc/rcX.d, siendo la X el runlevel.


*Actualizado (06/09/2007):


- Activar DMA

DMA es el acceso directo a memoria, los dispositivos lo usan para poder leer/escribir sin depender de la cpu, si podeis lo deberíais activar en disco duro y cdrom.

Instalar hdparm:

# apt-get install hdparm


Consultar la información del dispositivo

# hdparm /dev/hda

Si aparece 'using_dma = 1 (on)', sino podemos activarla temporalmente con el comando:

# hdparm -d1 /dev/hda

Para activar el DMA siempre hay que editar el fichero /etc/hdparm.conf y descomentar las líneas del dispositivo y de hdparm.

Abrir el archivo para editar

# vim /etc/hdparm.conf


Buscar la sección del dispositivo

#/dev/hda {
# mult_sect_io = 16
# write_cache = off
# dma = on
#}



Dejarla:

/dev/hda {
# mult_sect_io = 16
# write_cache = off
dma = on
}


Guardar y reiniciar.

*Actualizado (14/09/2007): He añadido unos matices que dejó javier en los comentarios que me parecen interesantes y que debrería haber puesto :P

Si conoceis algún "truco" más que no haya puesto dejadlo como comentario y lo iré añadiendo al post, todos los agradeceremos ;D

7 comentarios:

  1. El truco del noatime es bastante relativo...si bien evitas el movimiento del cabezal y su caché en ram... ¿realmente ahorras algo? diría que es mas bien algo de tiempo que no de ram o espacio...

    Me explicaré:

    al acceder a un fichero, el sistema ejecuta toda una serie de ordenes (llama al driver etc...) que acaba accediendo a disco...

    Este lee el inodo (que contiene los datos del fichero, entre ellos el atime)

    y carga el fichero...

    lo "normal" cuando se carga un fichero es modificarlo (evidentemente, no los binarios, pero si los de uso general, como documentos) así que modifica el inodo y graba los datos...

    En pc's la grabación de datos en disco se hace en bloques de 512byte, eso significa que no puedes leer o grabar menos de esa cantidad es "un pack" así que si quieres leer 4 byte (un int en C de 32bit) debes leer 512byte

    Al grabar sucede lo mismo...

    No se que tamaño tienen los metadatos de los inodos... quizá algo menos (o quizá 4 veces mas) en cualquier caso.. seguro que se lee todo de golpe y se pone en ram, y ya que debe modificarse, puede tocarse el atime también...

    Claro que eso implica quizá mas uso de ram por parte del código que calcule la hora y lo ponga... pero no se yo si sale a cuenta

    En cualquier caso, se prueba (en un portátil seguro que es muy útil)

    En cuanto a lo de 16 o 24bit... si se nota,lo que no se nota es el cambio de 24 a 32bit, que se ha creado solo por que es poco óptimo tener un número que ocupe 3 byte en vez de 2 o 4 (por eso a 24bit lo llaman el modo lento, pq se debe modificar los datos (añadir un byte) por cada pixel)

    Si no notas el cambio es pq todos los programas que usas habitualmente usan 16bit... los videos se codifican a 16bit (incluso creo que a 15) los iconos y demás deben ser incluso de 8 bit etc...

    La diferencia la notarás cuando uses por ejemplo blender (gimp no sirve, pq aunque trabajes a 2 colores, el usa 24bit "a la fuerza" por código)

    En cualquier caso, probaré unos dias el atime, a ver que tal :))

    Buen post!

    ResponderEliminar
  2. Lo del noatime lo puse porque es que lo que dices tú, liberas su caché y además ahorras escrituras/lecturas en disco, el post no trata solo de ahorrar ram, sino de optimizar el pc todo lo que puedas, son discos lentos, cuanto menos trabajo les des mejor ;) (De hecho voy a subir ahora lo del dma ,que se me olvidó :$)

    En estos trastos olvídate de blender, morirías mientras renderiza 10Mb! ;)

    Gracias! :D

    ResponderEliminar
  3. Dios se me olvido decirte el otro día que pusieras lo del DMA, me acordé en el sábado por la noche en el parque. Porque le noté bastante la diferencia.

    Cuidate!

    Pakito vs Imac G3 in da ludus party 2k7 xDDD

    ResponderEliminar
  4. A mí también se me acordó (somos unos freaks... XD ), me olvidé a la hora de subir el artículo :P Sí que se nota, sí...

    No tienes lo que hay que tener para aparecer con tu pakito, voy a ser el más freak de la party!! ;)

    ResponderEliminar
  5. Hola.

    Un par de cosillas que he visto mejorables:

    1) La eliminación de servicios que no se usan ha de hacerse de otra forma: quitar permisos en /etc/init.d no es el camino porque impides que se ejecuten y, si tu mismo quieres arrancar un servicio en un momento determinado te tocará otorgar de nuevo permiso de ejecución (o lectura macho, que has puesto un chmod 000 xDD). Lo que has de hacer es eliminar el enlace simbólico del servicio en su runlevel correspondiente. En Gentoo sería en /etc/runlevels, en Debian o CentOS (por ejemplo) se hace en /etc/rcX.d, siendo la X el runlevel.

    2) Lo del noatime: si estás utilizando ese mini sistema como servidor (lo digo porque con las X de hoy en día, por mucho ION que le pongas se arrastrará) no es conveniente añadir la opción de noatime, ya que así dejas de tener información valiosa como la que esa directiva te priva, sobretodo en temas de forensics o simplemente al hace reports.

    ResponderEliminar
  6. Correcto Javier, bien matizado :D (Debería haberlo matizado yo también en el post)

    La máquina la uso como desktop, para chatear, navegar y poco más, por eso he dado chmod 000, porque a veces necesito arrancar servicios como samba, y al no usarla como servidor ni almacén de datos ni nada mínimamente importante no necesito la información de noatime :)

    Meto una entrada a tu comentario en los respectivos apartados, gracias ;)

    ResponderEliminar
  7. Muy buena entrada, yo tengo un Imac G3 333 con 32MB de ram y 6Gb de HD que tenían en un Servicio técnico sin usar, me anime a instalar Debían, por que utilizo debian en el pc, pero primero tuve que componerlo, le puse una fuente ATX por que la que traia estaba quemada junto con el monitor esto lo intente por que crei que la placa logica podria estar bien y hoo sopresa encendio, despues de eso me construi un cable conversor de video mac a vga e iluionado prendi mi monitor y vi la pantalla de inicio del mac que estaba bien solo tubo que ejecutar la ulidad de erroes del disco cuando de apaga mal, conseguí un raton para pc y lo introduje en puerto usb haber si lo detectaba y boila lo detecto, despues le introduje un teclado normal para pc para ver si funcionaba y funcionó solo que me quede sin ningun puesto usb por que estas imac trae solo dos, desargue de internet un debian para ppc y lo introduje en el cd de la mac y lo cargo pero no detecta el teclado del pc se queda en el prompt tengo que reiniciar para poder cargar el mac os 8.2..en un principio me pregunte si el teclado no es compatible por que no puedo escribir nada cuando inicia con el disco del debian ppc tambien pense que podria ser la escasa memoria..alguien de aqui podria ayudarme a salir de esta duda..tenia planeado comprarme uno teclado para mac pero no se si sirva por eso le pregunto....??..alguien podria ayudarme?...le he dedicado algunos dias al asunto y me deule pensar que un debian noo jale por un teclado cuando estnado dentro del mac os puedo escribir con el teclado?...Alguna ayuda?

    ResponderEliminar