使用Prelink是否有意义?


11

在使用各种Linux系统这些年来,我已经得到了到使用的习惯中预链接仪式来加速应用加载时间。

但是,每次重新安装软件包时,运行预链接的好处都会被抵消,因为它需要重新链接其所有依赖项及其依赖项。

这种预链接可能会导致多种问题,其中之一就是二进制MD5失效,这对于比较MD5与上游修订版或使用MD5来确定二进制是否已更改并因此不希望在删除软件包时进行清理的问题引起问题。 。

最近,计算机变得越来越快,并且预链接收益的收益现在几乎不显着。

使用预链接仍然是一个合理的概念,还是可以随便丢掉它并留在过去的时代?

Answers:


4

除非您已订阅LWN.net,否则您要等到2009年7月23日才能阅读它,但您可能会发现http://lwn.net/Articles/341244/非常有用。


然后,您可以提供本文的“用户链接”。
wazoox

5
我总是对使用订户链接感到难过。就像我要把它们撕掉一样。
大卫·帕什利

2
我同意。当我遇到有趣的文章时,我不介意为订户提供直接联系人(朋友或同事)的链接,但是公开发布它是错误的。
Christopher Cashell

1

我不会说应该将其随意丢弃,但是我绝对会说应该多加考虑。

在频繁更新的现代高端计算机上,预链接可能不是有用的优化。但是,仍然有许多情况值得使用。例如,在较旧或较低端的计算机上,或在相当静态且不会频繁更改或更新的计算机上。如果您有大量重复运行的程序,这也可能是值得的(我可以想到几种情况,其中程序可以快速连续运行或并行运行,而预链接可以提高性能)。

总而言之,您需要考虑自己的具体情况,然后确定收益是否超过了额外的工作量和工作量。


1
“大量的程序被重复运行”-如果您处于这种情况,二进制文件和库将最终存储在文件系统缓存中。唯一的预链接会有所帮助的时间是,如果您内存不足而无法使用fs缓存
Daniel Lawson,2009年

2
即使程序存储在文件系统缓存中,预链接也可以加快程序启动速度。诚然,当程序(和相关的库)被缓存时,性能的提高不太明显。但是,根据运行程序的速率,几微秒的累加可能最终会有所不同。
Christopher Cashell

1

我要说的是,预链接在多用户桌面服务器(例如学校和网吧中使用的LTSP服务器)上绝对有用。预链接不仅可以加快应用程序的加载速度,而且还可以提高RAM利用率和由于用户之间的争用而导致的磁盘抖动,从而允许服务器上同时运行更多用户。


0

我认为随着内存价格的下降,预链接变得越来越有用。如果您仍然想稍微加快速度,可以考虑使用preload


我尝试了预加载,但是发现它坐在那儿咀嚼两个内核做预读操作时,启动时间变慢了。而且由于某种原因,我无法确定导致X在启动期间死亡。另外,如果您不经常重启,则预加载根本就不再有用。
肯特·弗雷德里克

0

我将这个决定留给OS版本。如果默认情况下OS选择使用cron定期调用预链接,那么可能不是那么有用。我希望发行版的创建者在选择默认添加/删除预链接选项之前已经考虑过。所以我和他们一起去,而不是自己再分析事情。


er,它不是真正的默认值,它是您必须安装的软件包,如果未安装,则不会获得预链接的内容。如果已安装,则倾向于创建一个cron脚本,默认情况下该脚本处于关闭状态,您必须手动启用它。
肯特·弗雷德里克

默认情况下,在fedora上默认不关闭。它被设置为19,但没有关闭。它自Fedora的6或7被相同
SAURABH Barjatiya

0

Gentoo使用预链接。他们在计算哈希值时忽略了预链接信息,从而解决了md5sum问题。

虽然随着硬件变得越来越快,预链接可能会变得越来越不那么明显,但它总是会给您提速。唯一确定知道硬件的方法是关闭预链接,然后查看您对应用启动速度是否满意。

旁注:OS X过去也曾做过一种预链接形式,但为了支持链接缓存自身而保留的链接缓存已被放弃。两全其美,与常规链接相比,没有二进制更改,也没有实际开销。我希望Linux能够在某个时候采纳这个想法:)

更新:最近尝试在Linux上进行预链接,对于包含许多文件和进程的cscope编译,速度提高了5%。


1
它并不是真的……您仍然需要安装和配置它,我这样说是因为正在使用gentoo。而且,您不能完全“关闭”预链接,只能停止运行预链接,或者去取消整个系统的预链接。同样,由于某种我不知道的原因,paludis存在预链接二进制文件的问题,并且没有undo-prelink钩子(不受支持),它留下了二进制文件,产生了混乱。最近,我发现一些KDE应用程序实际上是在安装钩子之前遗留下来的,它们在其他位置之前位于较新的应用程序的路径上,从而导致段错误
Kent Fredric

可能的是,启用链接器优化(-Wl,-O1)和gnu-hash分配中的新变化更类似于OSX迁移到的版本,这可能是更有效的选择。
肯特·弗雷德里克

我必须承认,自从我使用gentoo以来已经有一段时间了……从那以后,我开始转向OS X :)。我记得我曾经在OS X上进行过一次测试:一次启动所有应用程序,然后启动(大约iirc)。然后,删除所有预链接信息,然后重新启动所有应用程序。那个时间花了5分钟……这是在2005年,当时是一台真正的野兽Mac塔。
w00t

1
与您的想法相反,预链接加速可能变得不太明显:随着程序在使用运行时可加载库的使用中飞速增长,它们可能变得越来越重要。2009年的gvim使用了55个运行时库。2年前的一个使用了73。2009年的'mount'使用了7,而今天使用了,在/ usr / lib64中使用了10,其中有4个,在/ lib64中使用了6 ...因此它们正在扩展,变得越来越大,并且越来越分散。-与以往一样-硬件速度越快,SW就会变得越来越复杂以吸收提升。
阿斯塔拉

@astara是正确的,但是库使用的增长没有硬盘和内存速度的增长快。
w00t 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.