Prelink (o como hacer que KDE arranque en 3 segundos)

Prelink es un programa cuya utilidad es hacer que los programas se abran mas rápido. Aunque la explicación de como lo hace se merecería un articulo entero, podemos decir de una manera tosca que le dice al binario donde buscar primero las librerías dinámicas que necesita cargar.

Así, imaginémonos que tenemos un binario que depende de la librería QtCore, una vez hayamos ejecutado prelink sobre el mismo, buscara primero en el espacio designado por prelink, y en el caso de que no la encuentre (una actualización, por ejemplo) la buscara de la manera tradicional.

Prelink funciona en cualquier sistema que cumpla el estándar POSIX, como GNU/linux o los BSD.

Como aplicar prelink

Optimizar el sistema con prelink es bastante sencillo, podemos optimizar un binario mediante (como root) :

prelink binario

Pero para optimizar el sistema entero debemos realizar :

prelink -amvR

Veréis algo así:

Prelink

Prelink

Aquí una explicación detallada del significado de los parámetros:

  • a : equivale a –all, hace que se aplique a todo el sistema
  • m : equivale a –conserve-memory, la explicación de su funcionamiento es compleja, pero ahorra espacio
  • v: equivale a –verbose, nos permite saber cuales son las librerías pre-enlazadas
  • R : equivale a –random, aumenta la seguridad haciendo un valor sea aleatorio. Desconozco los detalles de su funcionamiento
La terminal es Yakuake, por si a alguien le interesa.

Para des-pre-enlazar (desprelinkar) un binario

prelink  -u

Todo el sistema :

prelink -au

Muchas distribuciones como Ubuntu ofrecen un cron que pre-enlaza periódicamente todos los binarios del sistema si prelink esta instalado
Prelink puede causar problemas en varios binarios privativos, por lo que normalmente son omitidos por defecto. De todos modos, asegúrate de que tu archivo /etc/prelink.conf contenga estas lineas:
# Skype
-b /usr/lib32/skype/skype
-b /usr/lib/skype/skype

# Flash Player Plugin
-b /usr/lib/mozilla/plugins/libflashplayer.so

# NVIDIA
-b /usr/lib/libGL.so*
-b /usr/lib32/libGL.so*
-b //usr/lib/libOpenCL.so*
-b //usr/lib32/libOpenCL.so*
-b /usr/lib32/vdpau/
-b /usr/lib/vdpau/
-b /usr/lib/xorg/modules/drivers/nvidia_drv.so
-b /usr/lib/xorg/modules/extensions/libglx.so*
-b /usr/lib/libnvidia-*
-b /usr/lib32/libnvidia-*

# Catalyst
-b /usr/lib/libati*
-b /usr/lib/fglrx*
-b /usr/lib/libAMDXvBA*
-b /usr/lib/libGL.so*
-b /usr/lib/libfglrx*
-b /usr/lib/xorg/modules/dri/fglrx_dri.so
-b /usr/lib/xorg/modules/drivers/fglrx_drv.so
-b /usr/lib/xorg/modules/extensions/fglrx/
-b /usr/lib/xorg/modules/linux/libfglrxdrm.so
-b /usr/lib/xorg/modules/extensions/libglx.so

Optimizar KDE

Lo prometido es deuda. Si ya habías pre-enlazado tu sistema probablemente no notaste ninguna diferencia en los tiempos de carga de KDE. Esto es así porque KDE ser sirve de una utilidad llamada kdeinit para cargar todas las librerías necesarias. Para evitar el uso de esta herramienta debemos hacerle saber a KDE que esta pre-enlazado. Para hacer esto debemos (como root) crear un archivo de variable :

nano /etc/profile.d/kde-prelink.sh

En el que pegamos la siguiente línea

export KDE_IS_PRELINKED=1

Y le damos los permisos adecuados (no queremos que ningún travieso le añada rm -rf /)

chmod 755 /etc/profile.d/kde-prelink.sh

Y por si no me creéis, aquí un vídeo de KDE arrancando en mi sistema :

[especificaciones] Detalles del sistema:

  • HDD a 7200 RPM
  • Gentoo
  • XFS
  • Ksplash desactivado (causa de la pantalla negra del video
[/especificaciones]

Cron y prelink

Si usas un sistema como Archlinux, en el que las actualizaciones son muy frecuentes, puede ser interesante añadir un cron que ejecute prelink todos los días.

Así, abrimos con nano el archivo cron (como root) :

nano /etc/cron.daily/prelink

Y pegamos lo siguiente:

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

Despues le damos los permisos adecuados (ya he mencionado que nadie quiere que se alguien le añada código malintencionado):
chmod 755 /etc/cron.daily/prelink

Un buen habito a la hora de leer un articulo es investigar que hace exactamente el script. Un buen habito a la hora de escribirlo es explicar para que sirve. Aquí el despiece

  1. La primera linea sirve para decirle al sistema que es un script en bash y la localización del interprete.
  2. La segunda hace que bash ejecute un subshell en modo debug, desconozco el porque, pero es lo recomendable, se puede eliminar sin riesgo. El && significa que cuando el comando termine, ejecute el siguiente.
  3. Ejecuta prelink con unos parámetros ya explicados, el &>/dev/null redirige cualquier salida a /dev/null, esto es, la desecha

Links de interes


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Iván Barra dijo

    Con el «strike» que le diste al [ENTER], se asustaron los enanitos que tiene el pc y empezaron a trabajar al doble de la velocidad de antes, dices usar PRELINK, pero tu sistema se basa en el terror… jajajaa!!

    Saludos y Excelente post

    Gracias por compartir.

    1.    roader dijo

      Umm , con el ruido que hace no me extrañaria que hubiese una mina en mi ordenador XD .

    2.    dhunter dijo

      Epic el chiste, verdad que le metió con ganas al enter, jeje.

  2.   Sheosi dijo

    Me gustaría comentar que hace un tiempo realizé un benchmark de esto, i pude notar que las diferencias eran casi nulas ( use como pruebas creo que y hunde e bits firefox y nautilus).
    Si hay interesados publicaré el archivo ( no lo publiqué en su día por pereza).

    1.    roader dijo

      Umm , no en todos los archivos se puede percibir mejoria , pero , como minimo , el sistema suele arrancar mas rapido .

  3.   jomada dijo

    Hubo un tiempo que usaba el e4rat y mejoraba unos segundos el inicio, por ser un hdd arranca demasiado rápido por lo que veo, actualmente tengo un pequeño ssd con kaos y en xfs y cuando vi el tiempo de arranque no lo podia creer.
    http://i.imgur.com/ds6WqIT.png

    1.    Joao dijo

      Exijo saber el tema de escritorio que estás utilizando y el set de íconos (en buena onda)

      1.    roader dijo

        Juraria que el tema es helium .

      2.    jomada dijo

        El tema plasma y los iconos se llaman Dynamo y la ventana Next thin.
        http://sta.sh/02ful04ags1
        http://hombremaledicto.deviantart.com/art/Dynamo-Plasma-beta-473014317
        http://kde-look.org/content/show.php?content=164722

        Perdón al autor del tema por el off 🙂

    2.    jose-rod dijo

      ¿Cómo se llama ese lanzador de aplicaciones? 🙂

      1.    roader dijo

        Creo que es uno llamado simple qml launcher .

      2.    jomada dijo

        Como dice roader, es el QML

      3.    jose-rod dijo

        Gracias 😉

  4.   eliotime3000 dijo

    Muy buen tip, aunque KDE corre de maravillas en Arch y Slackware (los he probado y en verdad es que andan espectaculares).

  5.   Azureus dijo

    Genial, muchas gracias. Lo probé en mi Arch, hice un prelink general y debo decir que la mejoría es bastante buena y me siento muy a gusto jeje

  6.   ianpocks dijo

    No se si soy yo…. pero yo no noto ninguna diferencia y con systemd-analyze todavía tarda más en arrancar…

    1.    roader dijo

      Bueno , algun problema debe haber en tu SO , ya sabes , prelink -au y todo resuelto .

  7.   Blablabla dijo

    Hasta donde sé (por experiencia propia), por lo menos en Gentoo no hace falta crear un archivo nuevo para pasar el valor de la variable KDE_IS_PRELINKED. Sólo basta descomentar la línea KDE_IS_PRELINKED=1 en /etc/env.d/43kdepaths (No estoy seguro si esa es la ruta exacta, pues no tengo mi máquina en el momento).

    Cada vez que se compila completamente KDE hay que revisar ese archivo, pues alguno de los paquetes que instala vuelve a sobreescribir el archivo que mencioné.

    1.    roader dijo

      Y probablemente sea asi en muchas distribuciones . pero hacerlo de la manera que lo he hecho yo garantiza que esa configuracion no sea cambiada .

  8.   Statick dijo

    Excelente post, Felicitaciones

    Sugiero elabores un tuto para instalar Gentoo

    1.    roader dijo

      Lo tendre en cuenta . Gracias

  9.   cristianhcd dijo

    buenísima utilidad, aunque no me sirve, porque le tengo :asquito a KDE

  10.   Javier dijo

    ¿Acelerará dolphin? Siempre me ha parecido lento al arranque

    1.    roader dijo

      Deberia , no se , yo siempre lo uso por defecto . Uso gentoo , portage , si detecta que prelink esta instalado , automaticamente preenlaza los binarios , asi que , ni idea .

  11.   Pepo dijo

    ¡Interesante, gracias!

    P.D.- Library = Biblioteca, no librería 😉
    Bueno, y el escritorio se llama Plasma Desktop, no KDE. Ok, ya paro xD

    1.    roader dijo

      En la jerga informatica es un fallo aceptado , al fin y al cabo , las lenguas son pragmaticas , mas en traducciones .
      https://es.wikipedia.org/wiki/Librería_(desambiguación)

  12.   dtulf dijo

    buenas. Estaba por probarlo en ArchLinux KDE (base, no el DE completo) y me pone «Error guardando ‘/etc/cron.daily/ Error guardando ‘/etc/cron.daily/prelink’: No existe el fichero o el directorio prelink’: No existe el fichero o el directorio». No tengo «cron» instalado y en la wiki[1] hablan de cronie, fcron y otras variantes. Qué debo instalar o hacer para poder completar el tutorial?

    [1] https://wiki.archlinux.org/index.php/cron#Installation