Имеет ли создание символической ссылки на другую символическую ссылку какие-либо побочные эффекты? - PullRequest
40 голосов
/ 14 января 2011

Имеет ли создание символической ссылки на другую символическую ссылку на linux box какие-либо побочные эффекты (особенно с точки зрения производительности)?

Ответы [ 3 ]

22 голосов
/ 14 января 2011

В общем, нет.Технически, это будет очень небольшое снижение производительности для косвенного обращения, но оно не будет заметно для вашего приложения.Например, большинство общих библиотек являются символическими ссылками на символические ссылки (например, libQtCore.so -> libQtCore.so.4 -> libQtCore.so.4.7 -> libQtCore.so.4.7.1).

9 голосов
/ 08 августа 2011

Это в основном комментарий к аргументу Дэниела Галлахера, но он не помещается в поле для комментариев, так что это сделает его более читабельным. Из Википедии по символическим ссылкам :

Ранние реализации символических ссылок сохраняли информацию о символических ссылках в виде данных в обычных файлах. В файле содержалась текстовая ссылка на цель ссылки и индикатор [требуется уточнение], обозначающий ее как символическую ссылку.

Этот метод был медленным и неэффективным использованием дискового пространства в небольших системах. Усовершенствование, называемое быстрой символической ссылкой, позволило сохранить целевой путь в структурах данных, используемых для хранения файловой информации на диске (inode). В этом пространстве обычно хранится список адресов блоков дисков, выделенных для файла. Таким образом, символические ссылки с короткими целевыми путями доступны быстро. Системы с быстрыми символическими ссылками часто прибегают к использованию исходного метода, если целевой путь превышает доступное пространство инода. Оригинальный стиль задним числом называется медленной символической ссылкой. Он также используется для совместимости дисков с другими или более старыми версиями операционных систем.

Несмотря на то, что при сохранении значения ссылки внутри inode сохраняется блок диска и чтение диска, операционной системе по-прежнему необходимо проанализировать имя пути в ссылке, что всегда требует чтения дополнительных inode и, как правило, требует чтения других и, возможно, многих, каталоги, обрабатывающие как список файлов, так и иноды каждого из них, пока он не найдет совпадение с компонентами пути ссылки. Только когда ссылка указывает на файл в том же каталоге, «быстрые символические ссылки» обеспечивают значительно лучшую производительность, чем другие символические ссылки.

Таким образом, штраф за использование символических ссылок на символические ссылки для библиотек в /usr/lib менее строг, чем поиск по более длинным путям, который, возможно, даже охватывает несколько точек монтирования.

Я не видел необработанных цифр по этому вопросу, но по личному опыту я бы сказал, что это в лучшем случае незначительный удар по производительности, незаметный в большинстве случаев. Хиты производительности в сочетании с символическими ссылками, о которых я слышал (не видел лично), были (вероятно, плохими) реализациями, в которых системные вилки используются для нахождения цели определенной символической ссылки.

Хотелось бы увидеть «более плотные» комментарии, касающиеся символических ссылок и производительности, хотя, так как это второй раз за пару месяцев, я смотрел на это, не придя к окончательному выводу.

3 голосов
/ 15 января 2011

побочные эффекты

Да.Вы можете сложить столько символических ссылок только до того, как ядро ​​и / или приложение откажутся следовать по цепочке.(Поскольку обнаружение цикла требует больших затрат памяти, особенно в ядре, «видимые» флаги не используются, а глубина рекурсии ограничена.)

...