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.

     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.

        roader dijo

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

        dhunter dijo

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

     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).

        roader dijo

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

     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

        Joao dijo

      Exijo saber el tema de escritorio que estรกs utilizando y el set de รญconos (en buena onda)

          roader dijo

        Juraria que el tema es helium .

          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 ๐Ÿ™‚

        jose-rod dijo

      ยฟCรณmo se llama ese lanzador de aplicaciones? ๐Ÿ™‚

          roader dijo

        Creo que es uno llamado simple qml launcher .

          jomada dijo

        Como dice roader, es el QML

          jose-rod dijo

        Gracias ๐Ÿ˜‰

     eliotime3000 dijo

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

     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

     ianpocks dijo

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

        roader dijo

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

     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รฉ.

        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 .

     Statick dijo

    Excelente post, Felicitaciones

    Sugiero elabores un tuto para instalar Gentoo

        roader dijo

      Lo tendre en cuenta . Gracias

     cristianhcd dijo

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

     Javier dijo

    ยฟAcelerarรก dolphin? Siempre me ha parecido lento al arranque

        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 .

     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

        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)

     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