我正在浏览一个服务列表服务器(CentOS 5) - 这个问题可能也适用于其他 RedHat、Fedora 等版本。
请注意,我的服务器通常在运行级别 3 下运行(没有启动 GUI 服务器进程)。
我偶然发现了两项服务:
- 提前预读
- 稍后阅读
这两个服务的配置来自/etc/sysconfig/readahead.d
这些服务的目的似乎是将某些文件预加载到缓存中。
浏览配置文件(保留默认内容),我看到的主要是与 X11 相关的文件和一些库。
这些过程的深层意义是什么?据我所知,每个文件在第一次读取访问后都会进入缓存。为什么我应该预加载 - 为什么我应该预加载所有这些不需要的文件?
恕我直言,这是在操作系统启动期间对读取带宽的无用浪费。
更新
我发现这些预读只会缓存列出的文件的第一个索引节点条目(通过fstat
系统调用)。所以它只是加快查找这些文件的速度......
更新2012-10-02
问题归结为:我可以安全地在服务器上禁用这些服务,还是我在这里遗漏了一些重要的东西?
我相应地更新了问题的标题,因为给出的答案还没有达到目标。
答案1
这个想法是将这些文件加载到缓存中前它们是必需的,因此当 X 尝试启动时无需等待它们。
显然,对于系统日常操作中实际上不需要的文件执行此操作没有多大意义,因此例如缓存 X 服务器本身在您的情况下会适得其反,是的;然而,您可能会对有时会拉入的内容感到惊讶:您的服务器运行的某些程序很可能实际上确实拉入了 X11 库,也许是通过 Cairo,所以不要也仓促地认为这是无用的!
如果系统在启动时定期跟踪自身以找出预缓存什么(以及何时),可能会更好; Windows 就做了类似的事情。 (它还在进程启动的每个 exe 基础上执行此操作;实际上我已经见过内核在查阅有关新进程可执行文件的记录后,尽早将内容拉入缓存!)
同样,这都是为了减少等待东西从存储中进入所花费的时间。
编辑:
当然,这不是必需的。如果不发生的话,什么都不会破坏(除了愚蠢的错误);只是启动时间会有所不同。
答案2
其背后的思考过程是,最终用户更有可能遭受更长的启动时间,而有利于更快的应用程序启动时间。
启动时间为数十秒到几分钟,因此延长几秒几乎不会被注意到。无论如何,额外的预加载时间都不到启动时间的 1 倍。另一方面,firefox(仅举一个示例应用程序和虚拟数字)可能会在未缓存的情况下在 15 秒内启动,但如果缓存则只需 1.5 秒。在这个(纯粹是假的)示例中,速度提高了 10 倍,用户肯定会注意到这一点。
总而言之,总时间可能没有显着差异。但这是人类的心理伎俩,而不是真的关于减少等待时间。人类对时间的感知具有极强的可塑性。这就是为什么去商店比回家要花更长的时间,也是为什么有人看管的锅永远不会沸腾。