Mejorar la velocidad de carga de aplicaciones con Prelink

bokeh link fence

Prelink es un programa, desarrollado principalmente para Linux, que permite mejorar la velocidad del sistema, reduciendo el tiempo necesario para la carga de las aplicaciones. La mejora obtenida no suele ser espectacular, pero en sistemas con una gran cantidad de librerías, como KDE, el incremento de velocidad de carga es normalmente apreciable.

Casi todos los programas necesitan de librerías para funcionar. Estas normalmente se distribuyen de manera separada a las aplicaciones, y es muy común que existan múltiples aplicaciones que utilicen una misma librería. Por ejemplo, si queremos desarrollar un reproductor de música en formato ogg, seguramente utilizaremos alguna librería disponible para este objetivo, y nosotros nos centraríamos en la interfaz y en las funciones particulares que nuestra aplicación le dará al usuario.

Reproducción de un archivo ogg vorbis

Normalmente las librerías se distribuyen de manera separada a la aplicación, y deben ser vinculadas dinámicamente al momento de ejecutarla. Esto tiene grandes ventajas con respecto a la administración de las librerías y el tamaño de los ejecutables, ya que al separarlas del código particular es posible que sean usadas por muchas aplicaciones. De esta manera logramos, por ejemplo, que los cientos de aplicaciones que componen a Plasma Desktop (KDE) no contengan duplicados del código de la librería, y que esta sólo deba cargarse una vez en la memoria RAM. En cambio, si la librería se incluyera dentro de la aplicación, cada programa tendría su copia de la misma.

Uno de los inconvenientes de esta manera de realizar el linkeo es que, al cargar cada aplicación, es necesario que el sistema encuentre dónde están las librerías necesarias en la memoria RAM, ya que su ubicación puede cambiar con cada ejecución.  Esto provoca un pequeño impacto en el rendimiento, aunque se incrementa a medida que más librerías sean necesarias. Prelink intenta mitigar este efecto realizando la vinculación entre los ejecutables y las librerías de manera anticipada.

Aplicando Prelink

Prelink se encuentra en los repositorios de todas las distribuciones populares, por lo que su instalación no representa un problema.

Si bien prelink tiene muchas opciones, y permite linkear aplicaciones individualmente, para estas instrucciones se va a considerar sólo el caso más común, en el que se optimiza todo el sistema (salvo algunas excepciones). El método que utiliza prelink puede provocar algunos inconvenientes con algunas librerías y aplicaciones propietarias (como drivers de video de Nvidia y AMD o Skype), por lo que el primer paso consistirá indicar estas excepciones en el archivo /etc/prelink.conf. Copiamos en este archivo lo siguiente:

# 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

Una vez indicadas estas excepciones, podemos realizar la optimización del sistema entero: prelink -amvR

Programar optimización

Con este comando se habrá hecho el prelinkeo de todo el sistema. De todas maneras es recomendable programar periódicamente la ejecución de este comando, ya que cuando existe una modificación en las librerías o las aplicaciones es necesario volver a aplicarlo. Según la wiki de Arch, la mejor manera es realizar la ejecución diariamente creando el archivo /etc/cron.daily/prelink con el siguiente contenido:

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

Para que se ejecute es necesario darle permisos de ejecución: chmod 755 /etc/cron.daily/prelink

Configuración especial para KDE

Es conocido del hecho de que KDE es probablemente el entorno de escritorio que más se beneficia con la utilización de prelink, pero para poder aprovechar al máximo, es necesario informarlo en el archivo /etc/profile.d/kde-is-prelinked.sh, agregándole el siguiente contenido:

export KDE_IS_PRELINKED=1

Luego, le damos los permisos necesarios: chmod 755 /etc/profile.d/kde-is-prelinked.sh

 

Leave a Reply

Connect with Facebook