为什么当我点击打开应用程序时,例如,firefox 或 vlc,它在大约 5 或 10 秒后启动?我可以加快启动时间吗?打开浏览器或任何其他应用程序(如软件中心)是否通常需要等待 10 秒钟?它取决于什么?我有赛扬双核 cpu 1007u 和常春藤桥显卡..我认为它适合正常使用,例如冲浪或看电影。提前致谢。
这个答案更像是一个 Wiki,在尝试使用 Preload 或 Prelink 之前,应该先阅读和理解它。
我们需要先了解Linux下Applications是如何启动的,Windows我不做评论。Linux 在设计上是安全的,那么我们真正的意思是什么?
Linux 程序通常由引用多个共享库的二进制可执行文件组成。这些库一次加载到内存中,并由多个可执行文件共享。为了实现这一点,动态链接器(即 ld.so)需要更改内存中的二进制文件,以便库对象的任何地址都指向内存中的正确位置。对于具有许多共享库的应用程序(例如 GUI 程序),该过程可能需要一些时间。对于大多数小程序,这种动态链接非常快。但是,当启动更大的程序时,可能需要时间。我的意思是相当长的时间。
Linux 使用 ASLR 来随机化内存中的地址。地址空间布局随机化 (ASLR) 背后的想法之一是在每次程序运行或库加载时随机化这些位置,以便恶意程序无法轻松且可重复地预测地址
让我们通过上下文了解什么是预加载,什么是 prelinknig,以及它们如何帮助减少应用程序启动时间。
预加载是将目标文件放入并保存到 RAM 中的操作。好处是预加载的应用程序启动得更快,因为从 RAM 读取总是比从硬盘读取要快。但是,您的部分 RAM 将专用于此任务,但不会超过您保持应用程序打开的情况。因此,预加载最好与大型且常用的应用程序一起使用,例如 Firefox 和 LibreOffice。
Preload 是一个自适应的、预读的恶魔。它观察应用程序在一段时间内启动。了解应用程序启动行为。它收集信息并根据信息开始将程序所需的库预加载到设备 RAM 中。因此,在一段时间内,应用程序启动时间显着减少,应用程序启动速度更快。
由于 Preload 需要内存来存储程序代码,因此系统无论如何都应该拥有 1GB 以上的内存。
速度提升可高达 55%。但是,安装后不会立即检测到这一点。预加载需要几天或一两周的时间,直到创建可靠的统计数据。这个统计使用Preload来加载内存中对应程序的代码。
在大多数系统上,库不会经常更改,并且在运行程序时,每次用于链接程序的操作都是相同的。Prelink 通过执行链接并将其存储在可执行文件中来利用这一点,实际上是对其进行了预链接。
理想情况下,它消除了地址的随机化,这意味着很容易预测库的存储位置,因此可以快速访问库。这反过来又大大减少了发射时间。
预链接背后的想法相当简单:通过提前执行并存储结果来减少动态链接器执行这些地址重定位所需的时间。prelink 程序以与 ld.so 大致相同的方式处理 ELF 二进制文件和共享库,然后将特殊的 ELF 部分添加到描述重定位的文件中。当 ld.so 加载预先链接的二进制文件或库时,它会检查这些部分,如果库加载到预期位置并且库没有更改,它可以更快地完成其工作。
这意味着在一个变化不大的系统上。库在很长一段时间内保持不变,例如 Ubuntu LTS/RHEL/CentOS/Debian 基本上固定的发行版,Prelink 将运行得更好并提供出色的结果。
只有一个 Caviat。
预链接需要被调度,它需要在库/程序升级后运行,因为库正在发生变化。可以使用简单的 Cron 作业来实现这一点,也可以偶尔手动运行它。
所以我们可以在技术上结合 Preload 和 Prelink。然而,预链接仍然像一个黑客,但你的里程可能会有所不同。无论如何我都会试一试。如果我使用的是 Debian 或 CentOS 之类的东西,我肯定会同时使用 Preload 和 Prelink。
更多信息参考。
http://sysmagazine.com/posts/108454/
https://wiki.archlinux.org/index.php/Preload
https://wiki.archlinux.org/index.php/Prelink
http://lwn.net/Articles/341244/
https://wiki.gentoo.org/wiki/Prelink
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |