
如果你使用Windows系统多年,你可能听说过…… 预取、超级预取或系统主程序 但你可能并不完全清楚它们的具体作用、区别,或者禁用它们是否有意义,尤其是在几乎所有人都安装了固态硬盘 (SSD) 的情况下。它们就像是默默运行的功能,只有当硬盘开始发出噪音或内存不足时,我们才会想起它们。
本文将详细分析…… Windows 系统中预取和 Superfetch 的区别我们将解释它们的内部工作原理、它们与 CPU 的关系、它们对 HDD 和 SSD 的实际影响,以及何时应该修改它们(或保持原样)。我们将使用通俗易懂的语言,但也会深入探讨技术细节,并借鉴我们从文档和实践经验中获得的丰富知识。
什么是预取:硬件预取与软件预取
术语 预取描述了一种技术 这指的是在需要数据或指令之前,将其加载到速度更快的内存中,目的是最大限度地减少系统或应用程序使用这些数据或指令时的延迟。这一概念既存在于软件层面(操作系统、编译器),也存在于硬件层面(处理器)。
当我们谈到软件预取时,我们指的是 操作系统或编译器中实现的机制这些工具会分析访问模式并预先准备数据。一个典型的例子是使用诸如以下函数: 编译器(例如 GCC)中的 __builtin_prefetch它会在二进制文件中插入特殊指令,以便处理器在需要数据之前从内存中请求数据。
在硬件方面,预取是由 CPU 实现的。 专用单元用于监控内存访问 它们会尝试进行预测。例如,在 x86 架构中,有一些特定的指令,例如: 预取 这些技术允许 CPU 预先将内存数据行加载到 L1/L2/L3 缓存中。这种方法的妙处在于它对用户完全透明。
这两种情况的共同目标是,当数据或指令要被使用时,它们已经存在于速度非常快的内存中,以便: 尽量减少因访问主内存或磁盘而导致的等待时间Windows 正是基于这一总体概念,发展出了自己的预取和超级取取技术。
Windows 中的预取:它是什么以及它是如何工作的
在Windows生态系统中, 预取是 Windows XP 中引入的一项技术。 并在 Windows Vista、Windows 7、Windows 10 和 Windows 11 等后续版本中得到维护。它在 Windows NT 内核中实现,其主要目的是加快系统启动和应用程序的初始加载速度。
当 Windows 启动或运行程序时,系统会…… 它会记录读取了哪些文件以及读取的顺序。利用这些信息,它会生成扩展名为 .pf 的特殊文件,并将其保存在文件夹中。 C:\ WINDOWS \预取每个受监控的可执行文件都有自己的预取文件,其中存储了下次启动速度加快所需的访问跟踪信息。
多亏了这些文件,在随后的 Windows 启动过程中,它可以…… 重新排序和分组磁盘读取 这优化了系统,防止其在硬盘上随机跳转,并显著缩短了系统启动时间和打开常用应用程序所需的时间。这是Windows XP相比其前代产品性能更流畅的关键因素。
除了算法本身之外,还有我们可以称之为……的东西。 系统中集成了“预取服务”。它负责处理跟踪的捕获和使用。从用户的角度来看,您不会在“服务”控制台中看到名为“服务”的服务,但您可以在文件夹中清楚地看到相关活动。 预取 创建和修改 .pf 文件。
需要注意的是,Windows 中的预取功能是在文件系统级别工作的: 它不仅仅是一个简单的内存缓存。而是一种机制,它决定在后续启动或应用程序执行之前,读取哪些文件、以什么顺序以及在什么时间读取这些文件。
预取文件夹和 .pf 文件:它们包含什么内容以及它们的用途
著名的文件夹 C:\Windows\Prefetch 是可见的心形 这是 Windows 系统中的预取系统。该目录中存储着 .pf 文件,这些文件代表了每个应用程序或系统组件在经过此优化过程后的负载跟踪信息。
每次运行程序时,Windows 都可能会生成或更新 一个包含应用程序名称和标识符的 .pf 文件 (例如,FIREFOX.EXE-24B8FB1A.pf)。此文件包含初始化期间访问的文件、其内部路径(例如,\DEVICE\HARDDISKVOLUME1\WINDOWS\SYSTEM32\KERNEL32.DLL 等路径)以及元数据,例如执行次数或上次启动时间。
从管理和计算机取证的角度来看,这些文件非常有用,因为 它们允许重建使用模式哪些应用程序运行过、运行了多少次、运行时间,甚至启动时加载了哪些特定的库或文件。诸如此类的工具可以做到这一点。 WinPrefetchView、Prefetch Parser、Windows 文件分析器或预取工具 它们允许您打开并详细分析这些 .pf 文件。
Prefetch 目录中存储的条目数量存在内部限制: Windows 通常最多保留 128 条痕迹。这意味着,随着系统的持续使用,使用较少或较旧的应用程序将根据当前模式逐步淘汰,为最相关的应用程序腾出空间。
许多用户根本不知道这个文件夹的存在,这使得现实世界中的环境…… 它通常包含大量有用信息。正因如此,许多“隐私清理”或“优化”套件都包含清空 Prefetch 文件夹的选项,这可以清除用于取证分析的宝贵痕迹,并且至少可以暂时重置 Windows 的一些学习功能。
预取和超级预取(SysMain)的区别
随着 Windows Vista 的到来,微软添加了一个名为“第二个组件”的组件。 SuperFetch的 (更名为) SysMain (自 Windows 10 版本 1809 起),它经常与预取混淆,尽管它们的功能略有不同。两者都是……的一部分 Windows 中的高级内存和应用程序加载管理但它们解决的是不同的问题。
一方面,预取功能用于优化。 从磁盘读取模式 系统启动和应用程序初始加载期间,系统会使用 .pf 文件作为指导。它关注的是从磁盘读取哪些数据以及读取顺序,而不是将任何超出正常文件缓存行为范围的数据保留在 RAM 中。
另一方面,Superfetch 是一项在后台运行的服务,其主要任务是 预估你可能会使用的应用程序。 并预先将数据加载到内存中。它的作用是观察用户一段时间内的使用习惯(例如,用户打开哪些程序、在什么时间打开、打开频率如何),并据此将最常用的应用程序保存在内存中,以便它们几乎可以瞬间打开。
预取主要负责管理 磁盘跟踪和读取调度Superfetch 扮演着这样的角色 RAM“管家”只存放你最可能需要的东西。对于内存充足的机器来说,这很有优势,因为未使用的空闲内存实际上就是浪费的内存。
需要注意的是,Superfetch/SysMain 的行为会随着 Windows 版本的更新而变化,尤其是在 SSD 使用标准化之后,它能更好地调整预加载数据的时机和方式。即便如此,仍然存在一些情况…… Superfetch 的优点或缺点 它们很大程度上取决于你的内存容量和存储类型。
Superfetch/SysMain:对 HDD 和 SSD 的实际影响
Superfetch最初的设计理念就是面向团队。 速度相对较慢的机械硬盘(HDD)在搜索和访问时间较长的场景下,Windows 预先将常用应用程序的数据填充到 RAM 中,从而避免每次都从磁盘读取数据,这种做法完全合理。
在机械硬盘 (HDD) 上,随机访问时间远高于固态硬盘 (SSD),因此任何 减少随机读取或分组访问 这通常会转化为明显的运行速度提升。因此,许多较早的指南建议在配备机械硬盘的系统中启用预取和超预取功能。
随着消费级固态硬盘的广泛普及,其随机读取速度远超其他产品, Superfetch的积极影响已大幅降低从 SSD 加载应用程序的时间已经非常短,因此维护一个将数据重新排序并预加载到 RAM 中的服务,在改进方面可能无关紧要,甚至在某些情况下会适得其反,因为它会消耗内存并产生额外的 I/O。
事实上,许多使用固态硬盘和小内存的用户都观察到了这一点。 SysMain 可以触发磁盘或内存使用 在某些情况下,尤其是在较旧或性能较差的硬件上,为了寻求更稳定和可预测的系统,即使程序加载方面会损失一些“预期”,该功能也已被禁用。
微软方面则在最新版本的 Windows 10 和 11 中改进了该服务的行为,以便: 对配备固态硬盘的系统要降低侵略性。但这并不意味着在某些特定的计算机上,如果用户发现活动或磁盘磨损出现不必要的异常峰值,他们就可以决定将其关闭。
CPU预取:缓存预取和类型
除了 Windows 系统之外,“预取”一词也用于描述…… 现代CPU的内部机制 旨在降低访问慢速内存所带来的性能损失。在这种情况下,我们不再讨论操作系统中的 .pf 文件或文件夹,而是处理器内部的硬件逻辑。
当前的微架构包含 分析访问模式的缓存预取器 将数据和指令加载到内存中,并尝试将尚未正式请求但根据观察到的模式很可能接下来需要的行加载到缓存中。
总的来说,我们可以区分两种类型的 CPU 级预取: 数据预取和指令预取第一种方法侧重于指令将要操作的操作数(内存中的数据结构、缓冲区等),而第二种方法则引入尚未执行的预先指令,为 CPU 的指令队列提供数据,从而减少因缺少缓存代码而导致的延迟。
这类技术已经存在了几十年。例如,处理器…… 英特尔 8086 处理器拥有 6 字节的尾部 摩托罗拉68000系列处理器采用4字节缓存,属于早期指令预取技术。如今,任何高性能台式机或笔记本电脑处理器都包含多级缓存。 高级预取算法 能够识别顺序模式、步幅、间接模式等。
在某些BIOS/UEFI中,您会找到诸如以下的选项: CPU预取、硬件预取器、相邻缓存行预取 或者类似的设置,允许您启用或禁用这些机制。通常情况下,除非您正在排查非常具体的问题,否则不建议修改这些设置,因为它们旨在提升几乎所有工作负载的整体性能。
如何在 Windows 中启用或禁用预取
Windows 中的预取行为是通过以下方式控制的: 系统注册到特定密钥这样,您可以调整系统是否将预取应用于启动项、应用程序或两者都应用,甚至可以根据需要完全禁用它。
主配置位于注册路径中 HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\会话管理器\内存管理\ PrefetchParameters该键中包含一个名为的值 将EnablePrefetcher (或在某些参考资料中称为 EnablePrefetch)接受多个数值。
该参数的典型值如下: 0 表示禁用预取。 完全启用,1 仅启用与应用程序启动相关的预加载,2 专注于系统启动,3 同时激活系统启动和应用程序启动的优化,后者是推荐值,通常是默认值。
要修改此行为,您需要打开 Windows注册表编辑器(regedit)导航至上述路径并更改 EnablePrefetcher 的值。务必谨慎操作,如果可能,请先备份注册表,因为错误的更改可能会导致性能或稳定性问题。
除了更改配置值之外,一些用户还选择 定期清空 C:\Windows\Prefetch 文件夹的内容 清理系统。然而,Windows 会自动管理此目录,删除旧的或不常用的痕迹,因此,除非在非常特殊的情况下(例如性能测试或非常特殊的环境),否则通常既没有必要,也没有特别的好处。
如何在 Windows 10 及更高版本中启用或禁用 Superfetch (SysMain)
与主要通过注册控制的预取功能不同, Superfetch/SysMain 主要由 Windows 服务管理这意味着它可以像其他系统服务一样,通过服务控制台启用或禁用。
在 Windows 10 1809 之前的版本中,该服务被称为 SuperFetch的从那次更新之后,微软开始使用这个名称 SysMain 虽然组件的功能保持不变,但其功能却有所不同:监控使用模式并将应用程序预加载到内存中,以加快其响应速度。
要操作此服务,您需要打开执行窗口。 Win + R 并输入 services.msc按下回车键,在“服务”窗口中找到相应的条目(根据您的系统版本,可能是 Superfetch 或 SysMain)。双击该条目即可打开服务属性窗口。
在这些属性中,您可以更改 开始类型 启用、手动或禁用。如果选择“禁用”并应用更改,该服务将停止运行,Windows 将停止主动将应用程序预加载到 RAM 中,但系统仍会使用其基本文件缓存和其他内部优化功能。
许多使用配备硬盘驱动器 (HDD) 的电脑的用户选择 保持 Superfetch/SysMain 活动 因为这样有助于系统感觉响应更快,而使用 SSD 的用户,尤其是在内存较小的计算机上,通常会禁用此功能,以避免他们认为不必要的 I/O 峰值,因为 SSD 的速度对于他们的日常使用来说已经足够快了。
HDD 和 SSD 的预取和超预取功能:何时应该禁用它们?
最常见的问题之一是 建议禁用预取和超级预取功能。 当操作系统安装在固态硬盘 (SSD) 而不是传统的机械硬盘上时,两个组件的响应并不相同。
就预取而言,即使使用固态硬盘, Windows 系统仍然在一定程度上受益于读取优化。对于硬件配置较低或工作负载多样化的系统来说,这一点尤其重要。虽然性能提升不如使用机械硬盘那样显著,但启用该功能带来的负面影响通常很小,因此在大多数情况下,除非有非常特殊的原因,否则不建议禁用它。
使用 Superfetch/SysMain 时情况略有不同:在配备 SSD 和足够内存的系统上, 将应用程序预加载到内存中的好处较小 因为固态硬盘的读取速度已经非常快了。此外,如果服务会产生大量的磁盘或内存活动,在某些机器上,它反而会成为一种阻碍而非助力,尤其是在运行资源密集型应用程序或可用内存不足的情况下。
另一方面,需要注意的是,预取和超取都存在这个问题。 它们会略微增加磁盘写入和读取次数。这对于 HDD 来说并不特别重要,但确实会影响 SSD 的长期磨损,尽管如今的 SSD 即使启用这些服务,也具有足够的耐用性以满足日常使用需求。
最终,决定通常取决于在您自己的设备上进行测试的结果: 如果您注意到磁盘峰值或性能问题明显与 SysMain 有关禁用预取功能或许会有帮助,看看系统运行情况是否有所改善。不过,除非你需要非常特定的行为或调试特定问题,否则对于预取功能,通常最好将其保留为默认值 (3)。
预取和超取的局限性、问题及批判性观点
虽然从理论上讲,预取和超级取是 加速 Windows 的智能机制实际上,它们并非完美无缺,其设计决策也存在一些问题。其中最受诟病的一点是,预取和监控的内容缺乏区分。
例如,系统甚至可以从以下位置生成跟踪和预取: 仅使用一次的可执行文件许多 setup.exe 安装程序下载后运行,然后删除或移动,这种情况很常见。在这种情况下,创建安装痕迹并将其保存在 Prefetch 文件中几乎没有任何意义,因为该文件在大多数情况下都不会再次使用。
另一个被指出的问题是,当程序频繁更新时, 预取和超级预取可以从旧版本中累积条目。 已卸载或已更改位置的应用程序仍保留在列表中,这些引用已不再有用。虽然程度不大,但这会造成一些混乱,并占用空间存放一些毫无实际用途的数据。
在这种情况下,一些高级用户选择使用 更高级的卸载程序例如,一些开源工具除了卸载软件外,还会扫描注册表、文件系统,甚至删除与这些应用程序相关的预取条目,试图让系统更干净,不留任何痕迹。
最后,一些人批评说,尽管距离 Windows 10 于 2015 年发布已经过去了一段时间, 这些功能的发展并没有人们预期的那么大。虽然微软一直致力于整合广告、Web 组件、小部件、预装应用程序和多个重叠的设置面板,但从更关键的角度来看,与第三方软件提供的用于搜索、索引和性能管理的更轻量级的替代方案相比,Prefetch/Superfetch 设计似乎已经停滞不前。
了解预取、超级预取/系统主操作和 CPU 预取的工作原理可以 做出更明智的决定 关于它们的配置,评估何时值得保持它们的活动状态,何时可能有利于停用它们,并顺便利用它们的痕迹进行性能分析任务,甚至在取证调查中重建系统的活动。
