¿Hay algún punto en usar Prelink más?


11

A lo largo de los años, utilizando varias cajas de Linux, me he acostumbrado a usar el preenlace ritualmente para acelerar los tiempos de carga de las aplicaciones.

Sin embargo, los beneficios de ejecutar prelink se niegan cada vez que se reinstala un paquete, ya que todas sus dependencias y sus dependientes deben volver a vincularse.

Esta vinculación previa puede causar múltiples problemas, y uno como tal es la invalidación binaria de MD5, lo que es problemático para cosas que comparan las revisiones MD5 frente a las anteriores o usan MD5 para determinar si el binario ha cambiado o no y, por lo tanto, no se desea limpiar al retirar el paquete .

Recientemente, las computadoras se han vuelto mucho más rápidas, y el beneficio del rendimiento del preenlace ahora es apenas notable.

¿El uso del preenlace sigue siendo un concepto racional, o puede descartarse casualmente y dejarse atrás como algo de una época pasada?

Respuestas:


4

No puede leerlo hasta el 23 de julio de 2009 a menos que esté suscrito a LWN.net, pero puede encontrar útil http://lwn.net/Articles/341244/ .


Entonces podría proporcionar un "enlace de suscriptor" a este artículo.
wazoox

55
Siempre me siento mal por usar enlaces de suscriptor. Como si los estuviera estafando o algo así.
David Pashley el

2
Estoy de acuerdo. No me importa proporcionar enlaces de suscriptores a contactos directos (amigos o compañeros de trabajo) cuando me encuentro con un artículo interesante, pero se siente mal publicarlo públicamente.
Christopher Cashell

1

No diría que debería descartarse arbitrariamente, sin embargo, definitivamente diría que su uso debería pensarse un poco más.

En una máquina moderna de gama alta que se actualiza con frecuencia, el enlace previo puede no ser una optimización útil. Sin embargo, todavía hay una serie de casos en los que podría valer la pena usar. Por ejemplo, en una máquina más antigua o inferior, o en máquinas que son bastante estáticas y no experimentan cambios o actualizaciones frecuentes. También podría valer la pena si tiene una alta tasa de programas que se ejecutan repetidamente (puedo pensar en un par de situaciones en las que podría tener programas que se ejecutan en rápida sucesión o en paralelo donde la vinculación previa podría mejorar el rendimiento).

En general, debe considerar su situación específica y luego decidir si los beneficios superan el trabajo y el esfuerzo adicionales.


1
"una alta tasa de programas que se ejecutan repetidamente": si se encuentra en esa situación, los archivos binarios y las bibliotecas terminarán en la memoria caché del sistema de archivos. El único momento en el que la vinculación previa sería útil es si estás tan hambriento de memoria que tienes muy poca caché de fs disponible
Daniel Lawson el

2
La vinculación previa acelerará el inicio del programa incluso si el programa está almacenado en la memoria caché del sistema de archivos. Es cierto que cuando el programa (y las bibliotecas asociadas) se almacenan en caché, el aumento del rendimiento es menos notable. Sin embargo, dependiendo de la velocidad de los programas que se ejecutan, pueden sumarse unos pocos microsegundos para eventualmente hacer la diferencia.
Christopher Cashell

1

Diría que el preenlace es definitivamente útil en servidores de escritorio multiusuario, como los servidores LTSP utilizados en escuelas y cafés de red, por ejemplo. El preenlace no solo acelera la carga de la aplicación, sino que también mejora la utilización de RAM y la agitación del disco debido a la contención entre usuarios, permitiendo muchos más usuarios simultáneos en un servidor.


0

Creo que con la caída de los precios de la memoria, la vinculación previa se está volviendo menos útil. Si todavía quiere acelerar un poco las cosas, puede buscar precarga .


Intenté precargar, solo encontré que hacía que los tiempos de inicio fueran más lentos mientras se quedaba allí masticando ambos núcleos haciendo lo de leer por adelantado. Y también, por alguna razón, no puedo entender que X muera durante el arranque. Además, si no reinicia con frecuencia, la precarga deja de ser útil.
Kent Fredric el

0

Dejo esa decisión a la versión del sistema operativo. Si, de manera predeterminada, el sistema operativo elige llamar al preenlace regularmente usando cron, entonces, de lo contrario, puede que no sea tan útil. Espero que los creadores de distribuciones hayan pensado antes de elegir agregar / eliminar la opción de preenlace de forma predeterminada. Así que voy con ellos en lugar de analizar las cosas nuevamente.


er, no es realmente predeterminado, es un paquete que debes instalar, y si no está instalado no obtienes elementos preenlazados. Si está instalado, tiende a crear una secuencia de comandos cron, que está desactivada de forma predeterminada, que debe habilitar manualmente.
Kent Fredric el

Está predeterminado en fedora, no está desactivado de forma predeterminada. Se reniced a 19 pero no apagado. Ha sido igual desde Fedora 6 o 7.
Saurabh Barjatiya

0

Gentoo usa preenlace. Evitan el problema de md5sum al ignorar la información de preenlace cuando se calcula el hash.

Prelink siempre le dará un aumento de velocidad, aunque puede volverse cada vez menos notable a medida que el hardware se vuelve más rápido. La única forma de saber con certeza sobre su hardware es desactivar el preenlace y ver cómo le gusta la desaceleración en los lanzamientos de aplicaciones.

Nota al margen: OS X también solía hacer una forma de vinculación previa, pero se ha abandonado a favor de un caché vinculado que el enlace se mantiene. Lo mejor de ambos mundos, sin cambios binarios y sin sobrecarga real versus enlaces normales. Espero que Linux recoja esta idea en algún momento :)

Actualización: Me recientemente intentado prelinkado en Linux , y para una compilación de cscope con muchos archivos y procesos Tengo un impulso de velocidad 5%.


1
En realidad no ... su todavía algo que tienes que instalar y configurar, lo digo porque yo estoy usando gentoo. Y no puede exactamente "desactivar" el preenlace, solo puede dejar de ejecutar el preenlace o ir y desconectar todo el sistema. Además, por alguna razón que yo desconozco, paludis tiene problemas con los archivos binarios preenlazados, y sin un gancho de deshacer-enlace previo (sin soporte) deja atrás los archivos binarios, produciendo cruft. Recientemente descubrí algunas aplicaciones de KDE que se quedaron atrás de hecho antes de instalar el gancho, y estaban en el camino antes que las más nuevas en una ubicación diferente, causando seg's
Kent Fredric

Posiblemente, habilitar la optimización del enlazador (-Wl, -O1) ¸y los nuevos cambios en la asignación de gnu-hash se asemejan más a lo que OSX ha cambiado, lo que posiblemente sea una opción más efectiva.
Kent Fredric el

Debo admitir que ha pasado un tiempo desde que usé gentoo ... desde entonces me mudé a OS X :). Recuerdo una prueba que hice una vez en OS X: iniciar todas las aplicaciones a la vez y al mismo tiempo (aproximadamente 1 minuto iirc). Luego, elimine toda la información de preenlace y vuelva a iniciar todas las aplicaciones. Esa vez tardó 5 minutos ... Esto fue en 2005 en una torre Mac, una verdadera bestia.
w00t

1
Como respuesta a su idea de que las aceleraciones previas a la vinculación pueden ser menos notorias: es probable que se vuelvan más importantes a medida que los programas se disparan en su uso del uso de bibliotecas cargables en tiempo de ejecución. Un gvim de 2009 utilizó 55 bibliotecas de tiempo de ejecución. Uno de hace 2 años usó 73. 'mount' de 2009 usó 7, mount de hoy, usa 10 con 4 de ellos en / usr / lib64 y 6 en / lib64 ... por lo que se están expandiendo, haciéndose más grandes y más dispersos . - igual que siempre - tan pronto como HW se vuelve más rápido, SW se vuelve mucho más complejo para absorber el impulso.
Astara

@astara es cierto, pero el crecimiento en el uso de la biblioteca no es tan rápido como el crecimiento en el disco duro y la velocidad de la memoria.
w00t
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.