Acelerando el sistema

Publicado: septiembre 6, 2013 en System
Etiquetas:, , , , , , ,

En esta entrada vamos a ver como acelerar el arranque de aplicaciones. Para ello vamos a utilizar dos herramientas, Preload y Prelink, además de la implementación de Readahead que viene con Systemd. También utilizaremos ZRAM, para optimizar el uso del SWAP.

La primera herramienta que vamos a poner en marcha será Preload. Se ejecuta en modo daemon y recoge estadísticas sobre la utilización de programas, utilizando cadenas de Markov. Con estos datos, se realiza una precarga de aquello que, habitualmente, utilizamos más. Como resultado obtenemos un arranque más rápido de las aplicaciones.

Actualmente se encuentra en el AUR. Para instalar:

wget https://aur.archlinux.org/packages/pr/preload/preload.tar.gz
tar -xzf preload.tar.gz
cd preload && makepkg -si
cd .. && rm -r preload && rm preload*gz

Una vez instala, tan solo debemos iniciar el servicio:

sudo systemctl start preload.service
sudo systemctl enable preload.service

En principio, la configuración que viene por defecto debería ir bien para la mayor parte de los usuarios. Esta configuración está en el archivo /etc/conf.d/preload.conf.

Además de esta herramienta, vamos a utilizar Prelink, pero ¿qué hace Prelink? Los programas suelen utilizar bibliotecas (mal llamadas librerías) a la hora de ser desarrollados. Estas bibliotecas pueden añadirse al ejecutable de forma estática (en el momento de compilación) o de forma dinámica, cargándose en memoria en tiempo de ejecución cuando son necesitadas. Para que esto pueda funcionar, necesitamos un cargador que enlazará el binario y las bibliotecas cuando sea necesario. Esto provocará una penalización en cuanto a rendimiento, pues las bibliotecas pueden ir moviéndose en memoria. Lo que hace Prelink es realizar este enlace por adelantado, de forma que se acelera el arranque de las mismas.

Vamos a instalarlo:

sudo pacman -S prelink

Una vez instalado, debemos pre-linkar (pre-enlazar) los binarios de nuestro sistema. Para ello bastará ejecutar:

sudo prelink -amR

Si queremos eliminar el pre-linkado, podemos ejecutar:

sudo prelink -au

Uno de los problemas que podemos tener es que, al actualizar el sistema, cambiarán tanto bibliotecas, como binarios. Para solucionar esto, tenemos dos vías:

  1. Utilizar cron para que se ejecute el pre-linkado cada cierto tiempo.
  2. Utilizar systemd para pre-linkar cuando se modifiquen binarios o bibliotecas.

Para el primer método, bastará crear un archivo, por ejemplo /etc/cron.daily/prelink.cron, con el siguiente contenido:

#!/bin/bash
[[ -x /usr/sbin/prelink ]] && /usr/sbin/prelink -amR &>/dev/null

Para el segundo método, vamos a crear el archivo /usr/local/lib/systemd/system/prelink.path con el siguiente contenido:

[Unit]
Description=Update prelink

[Path]
PathChanged=/usr/bin/
PathChanged=/usr/lib/
Unit=prelink.service

[Install]
WantedBy=multi-user.target

Lo que vamos a hacer es vigilar  /usr/bin y /usr/lib y lanzar prelink.service en el momento que se produzca alguna modificación. Ahora vamos a ver qué debe contener /usr/local/lib/systemd/system/prelink.service:

[Unit]
Description=Update prelink

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/lib/systemd/scripts/prelink.sh
RemainAfterExit=no

Este servicio lo único que hará será llamar a /usr/local/lib/systemd/scripts/prelink.sh, el cual contendrá:

#!/usr/bin/bash
while [ -a /var/lib/pacman/db.lck ];do
  sleep 20;
done

[[ -x /usr/sbin/prelink ]] && /usr/sbin/prelink -amR &>/dev/null

Tan solo debemos inicializar el servicio, en este caso será:

sudo systemctl enable prelink.path
sudo systemctl start prelink.path

Para agilizar el arranque del sistema, desde el punto de vista de los daemons, podemos utilizar Readahead, que se encargará de, en base a sucesivos reinicios, levantar los servicios de forma que sea más rápido el arranque. Para poder utilizarlo, tan solo debemos ejecutar:

sudo systemctl enable systemd-readahead-collect systemd-readahead-replay

Para el caso del SWAP, la memoria de intercambio, podemos optimizar su utilización mediante el uso  del módulo ZRAM. Este módulo, crea un dispositivo de bloque en RAM, con una pequeña parte del SWAP comprimido. A costa de perder un poquito de RAM, se agiliza el desempeño. En máquinas con menos de 4GB de RAM, se hace necesario la utilización del SWAP, al menos en equipos de escritorio. Para utilizarlo, basta instalar el paquete zramswap, que está disponible en AUR, y levantar el servicio correspondiente:

yaourt -S zramswap
sudo systemctl enable zramswap

Pues, nada amigos, con esto nuestro sistema debería ir un poquito más rápido, tanto en el arranque del mismo, como en el arranque de las aplicaciones más utilizadas.

Anuncios
comentarios
  1. Yoyo dice:

    Acelera, acelerando… acelera?

    Acelera un poco más
    porque me quedo tonto y vamos muy lentos.
    Y acelera un poco más,
    corre más que el veneno que llevo dentro.

    PD: Buen tip 😛

  2. Una duda, utilizando sistemd para prelink me podría “olvidar” de actualizar los enlaces entre binarios y bibliotecas, cierto?

  3. Bumiga dice:

    Excelente post, mi pregunta es: ¿Esto también aplica a distribuciones basadas en Ubuntu como Linux Mint?

    • Archeando dice:

      Gracias! Es parecido, pero en distribuciones que no utilizan systemd, prelink debes lanzarlo con cron. Preload, en distribuciones basadas en Debian y Ubuntu, el daemon se levanta solo y no utilizan systemd.

  4. dmacias dice:

    Vaya, en cuanto tenga un rato voy probando todas estas cosas ya que yo no sufro de picadistros y voy a estar muuuuuucho tiempo con Arch. Pese a tener una maquina muy modesta va muy rapido mi Arch, espero batir records con estos consejillos 🙂 .

    Por cierto, muy buena info y muy util en todo lo que llevo visto de tu blog

    • Archuser dice:

      Muchas gracias! 🙂

      Yo tampoco cambio habitualmente, suelo quedarme con las mamás, las derivadas es raro que las pruebe. Estuve mucho tiempo con Debian, un poco con Ubuntu y, desde hace ya unos años, con Arch. Mucho tiene que cambiar esta distro para que la deje…

  5. dmacias dice:

    Hace unos dias puse en practica casi todos estos consejos que comentas y la verdad es que si se nota el cambio, no digamos espectacular, pero si elimina ese 1/4 de segundo que tardan en abrir las aplicaciones, va como mas fluido.

    Lo que no he puesto en practica es lo de la memoria swap, ya que tengo 6 gigas de ram y casi casi nunca he visto andar la swap que ademas la tengo en un ssd, asi que ni la he tocado.

    Buen post

  6. […] Acelerando el sistema | Archeando […]

  7. Que tal Miguel,llevo usando Arch como tres meses sin ningun problema,me identifico como un usuario muy basico y novato,Arch lo tengo instalado en una Pc viejita Pentium 4 con 1.5 gb ram,con escritorio LXDE,siguiendo tu publicacion saltando los pasos anteriores e instalando desde AUR, yaourt -S zramswap y sudo systemctl enable zramswap,este paso simple me sirve para mi equipo?,gracias.
    Saludos..

    • Archuser dice:

      Hola!

      En pincipio, sí. Hay otra opción a zramswap, que está en los repos, que es systemd-swap. Se pude escoger entre zram o zswap, además de generar un swap como fichero, en caso de no existir particiones swap creadas.

      El consumo de RAM no aumenta mucho y puede mejorar un poco el sistema. De todas formas, lo mejor es probrarlo: Si ves que no mejora el rendimiento y que se llena antes la ram, siempre puedes desactivarlo.

      Mi equipo dispone de 2 GB, de los cuales, 256 MB son de la gráfica, así que, ando más o menos como tú y lo tengo activado…

      Un saludo!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s