我看了几个用户的xperf痕迹,这里的内核函数ntoskrnl.exe!SmKmStoreHelperWorker
开始分配内存。
(点击图片放大)
我在sysinternals发现了这个问题。
我问过微软,答案是这是设计的。它与系统内存压缩有关。
在 Windows 10 Build 10525 的公告中,微软解释了一下 。
在Windows 10中,我们在内存管理器中加入了一个新的概念,叫做压缩存储,这是一个压缩页的内存集合。这意味着当内存管理器感到内存压力时,它将_压缩未使用的页面,而不是将它们写入磁盘。这减少了每个进程所使用的内存量,使Windows 10能够在物理内存中一次保持更多的应用程序。这也有助于在整个Windows 10中提供更好的响应能力。压缩存储位于系统进程的工作集中。由于系统进程在内存中持有存储,因此其工作集正好在为其他进程提供内存时变大。这一点在任务管理器中可以看到,也是系统进程看起来比以前的版本消耗更多内存的原因.*
所以它不是将内存数据写入页文件,而是将它们压缩。而这个压缩后的内存会显示在系统进程中。
微软还在内部中心发布了更多细节。Winbeta创建了一篇文章其中包括更多细节。
显然,发生这种情况的原因与微软选择在UWP应用程序不在前台时暂停它们有关,非常类似于一些智能手机的操作系统管理。Windows 8用户明白(也许不明白),如果应用不在屏幕上,它们就不会运行,直到用户切换回它们。'要么全有,要么全无'的方法正在更新,Windows 10在分页文件和正常的分页活动之间引入了一个层。现在,当面临内存压力问题时,MM将在一个称为修剪的过程中决定哪些页面应该被移动到修改列表中.修改列表是一个二级分页文件列表,备份了一个备用分页文件列表。备用列表是为了防止内存被另一个进程从备用列表中回收,而原来的进程来寻找它的页面。Windows 10 MM将压缩未使用的页面,而不是将其写入磁盘,而不是全部或全部不使用。由于减少了写入,结果应该是减少了磁盘操作–这要归功于压缩–现在可以在内存中存储更多数据。
根据Windows团队的说法," 在实践中,压缩后的内存占用了未压缩内存的40%左右,由于典型设备运行典型的工作负载,Windows 10将页面写入磁盘的频率仅为之前版本操作系统的50%。" 如果一切按计划进行,Windows用户可能会体验到所有设备的等待时间减少,以及基于闪存的硬盘驱动器的系统寿命延长。
解压缩也是Windows 10设计好的。Windows 10是利用并行性和顺序读取的结合,一旦调用就会产生页面进入内存。新的解压应该会带来更快的体验,因为Windows 10是同时使用多个CPU并行解压和读取数据。旧版本的Windows可能会因为磁盘之间的传输速率而感到迟缓。
微软还在channel9上发布了一段视频,对该功能进行了说明。
Windows 10 RTM中的内存压缩 https://channel9.msdn.com/Blogs/Seth-Juarez/Memory-Compression-in-Windows-10-RTM
在这个视频中,Mehmet Iyigun花了一些时间讨论为什么Windows 10中的系统进程会占用更多的内存,以及为什么这是一件好事。一个进程占用更多的内存听起来像是一件坏事–直到我了解了更多关于内存管理、分页和硬/软页故障。原来,操作系统正在做一些聪明的优化,允许你的进程修剪一些内存,但不一定要把它分页到磁盘上。不仅内存被保存在RAM中,而且还被压缩了–使硬页故障更加罕见。这样做的结果应该是使体验更加敏捷。
在最新的TH2 Builds中,微软更新了任务管理器中的描述,现在还显示SYSTEM进程托管compressed memory
。
为了避免 “高 "使用率的混淆。
在2016年8月发布的Window 10周年更新中,微软将压缩提取到现在显示为一个名为Memory Compression
的伪进程中,不再让用户困惑为什么SYSTEM的内存使用率如此之高。
但貌似Taskmgr并没有显示这个进程,只有ProcessExplorer/ProcessHacker能够显示。Taskmgr只在概览中显示压缩内存的数量。
如果你把鼠标悬停在Taskmgr的已用内存图上,你会看到一个工具提示,显示被压缩的数据量。
在这个演示中,388MB被压缩为122MB,所以267MB被压缩后保存了下来。