多年来使用各种 linux 机器,我已经养成了习惯性地使用预链接来加快应用程序加载时间的习惯。
但是,每次重新安装软件包时,运行预链接的好处都会被否定,因为它的所有依赖项及其依赖项都需要重新预链接。
这种预链接可能会导致多个问题,其中一个是二进制 MD5 失效,这对于比较 MD5 与上游修订版或使用 MD5 确定二进制文件是否已更改并因此不希望在删除包时进行清理的事情有问题.
最近,计算机变得更快了,并且预链接产生的好处现在几乎不显着。
使用预链接还是一个理性的概念,还是可以随便丢弃,成为过去的东西?
除非您订阅了 LWN.net,否则您无法在 2009 年 7 月 23 日之前阅读它,但您可能会发现http://lwn.net/Articles/341244/很有用。
我不会说它应该被任意丢弃,但我肯定会说它的使用应该多加考虑。
在频繁更新的现代高端机器上,预链接可能不是有用的优化。但是,仍有许多情况值得使用。例如,在较旧或较低端的机器上,或者在相当静态且不会经历频繁更改或更新的机器上。如果您的程序重复运行率很高,这也是值得的(我可以想到几种情况,您可能有程序快速连续运行或并行运行,其中预链接可以提高性能)。
总而言之,您需要考虑您的具体情况,然后决定收益是否超过额外的工作和努力。
Gentoo 使用预链接。他们通过忽略计算哈希的预链接信息来解决 md5sum 问题。
预链接将始终为您提供速度提升,尽管随着硬件变得更快,它可能变得越来越不明显。确定您的硬件的唯一方法是关闭预链接并查看您对应用程序启动速度减慢的看法。
旁注:OS X 也曾经进行过某种形式的预链接,但已被放弃,取而代之的是链接自身维护的链接缓存。两全其美,与正常链接相比,没有二进制更改,也没有真正的开销。我希望 Linux 在某个时候采纳这个想法 :)
更新:我最近尝试在 Linux 上进行预链接,并且对于包含许多文件和进程的 cscope 编译,我得到了 5% 的速度提升。
我会说预链接在多用户桌面服务器上绝对有用,例如在学校和网吧中使用的 LTSP 服务器。预链接不仅加快了应用程序的加载速度,而且还提高了 RAM 利用率和由于用户之间的争用而导致的磁盘抖动,从而允许在服务器上同时使用更多用户。
我认为随着内存价格的下降,预链接变得不那么有用了。如果您仍然想稍微加快速度,您可以查看preload。
我把这个决定留给操作系统版本。如果默认情况下操作系统选择使用 cron 定期调用预链接,那么很好,否则它可能不是那么有用。我希望发行版的创建者在默认选择添加/删除预链接选项之前已经考虑过了。所以我和他们一起去,而不是自己重新分析事情。