2011-01-14 19 views

Respuesta

20

En general, no. Técnicamente, habrá un muy ligero golpe de rendimiento para la indirección, pero no será notable para su aplicación. Como ejemplo, la mayoría de las bibliotecas compartidas son enlaces simbólicos a enlaces simbólicos (por ejemplo, libQtCore.so -> libQtCore.so.4 -> libQtCore.so.4.7 -> libQtCore.so.4.7.1).

3

efectos secundarios

Sí. Solo puede juntar tantos enlaces simbólicos antes de que el kernel y/o la aplicación se nieguen a seguir la cadena. (Debido a que la detección de ciclos es costosa en cuanto a la memoria, especialmente en el kernel, no se utilizan marcas "vistas" y en su lugar se limita la profundidad de recursión)

+6

¿Tiene alguna fuente de información sobre los efectos secundarios? – Gerrat

+5

Debe citar sus referencias. – becko

9

Esto es principalmente un comentario del argumento de Daniel Gallagher, pero no Encaja en el cuadro de comentarios, por lo que será más legible. De Wikipedia on symbolic links:

Las primeras implementaciones de enlaces simbólicos almacenaron la información del enlace simbólico como datos en archivos normales. El archivo contenía la referencia textual al objetivo del enlace, y un indicador [aclaración necesaria] que lo denota como un enlace simbólico.

Este método era lento y un uso ineficiente del espacio de disco en sistemas pequeños. Una mejora, llamada enlaces simbólicos rápidos, permitió el almacenamiento de la ruta de destino dentro de las estructuras de datos utilizadas para almacenar información de archivos en el disco (inodos). Este espacio normalmente almacena una lista de direcciones de bloques de discos asignadas a un archivo. Por lo tanto, se accede rápidamente a los enlaces simbólicos con rutas cortas de destino. Los sistemas con enlaces simbólicos rápidos a menudo recurren al uso del método original si la ruta de destino excede el espacio de inodo disponible. El estilo original se denomina retroactivamente un enlace simbólico lento. También se usa para compatibilidad de disco con otras versiones anteriores de sistemas operativos.

Aunque almacenar el valor del enlace dentro del inodo guarda un bloque de disco y una lectura de disco, el sistema operativo aún necesita analizar el nombre de ruta en el enlace, que siempre requiere leer inodos adicionales y generalmente requiere leer otros, y potencialmente muchos , directorios, procesando tanto la lista de archivos como los inodos de cada uno de ellos hasta que encuentre una coincidencia con los componentes de ruta del enlace. Solo cuando un enlace apunta a un archivo en el mismo directorio, los "enlaces rápidos" proporcionan un rendimiento significativamente mejor que otros enlaces simbólicos.

Por lo tanto, la penalización de usar enlaces simbólicos a enlaces simbólicos para bibliotecas en /usr/lib es menos grave que las búsquedas de rutas más largas que quizás abarquen varios puntos de montaje.

No he visto números sin procesar sobre el tema, pero por experiencia personal, diría que es como mucho un golpe de rendimiento menor, que no se nota en la mayoría de los casos. Los éxitos de rendimiento en combinación con los enlaces simbólicos de los que he oído hablar (no visto en persona) han sido implementaciones (probablemente malas) en las que se usan las diapositivas del sistema para encontrar el objetivo de un enlace simbólico determinado.

Sin embargo, me encantaría ver comentarios "carnosos" sobre los enlaces simbólicos y el rendimiento, ya que es la segunda vez en un par de meses que los he analizado sin llegar a una conclusión definitiva.

Cuestiones relacionadas