查看: 10800|回复: 26
收起左侧

[讨论] win10系统大内存是否禁用页面文件的跟进

  [复制链接]
eyerain
发表于 2019-12-23 01:51:44 | 显示全部楼层 |阅读模式
首先感谢多位大大对这个问题用资料和官方QA做的科普和引证。

我个人也在这个问题上折腾了很久,感觉有些东西是值得跟大家分享的,水平有限,有说错的地方,也希望大家指正。


在用win10 1909这类比较新的系统时,32G以上内存+高速SSD的机器,设置为无分页文件(pagefile是否还有其价值呢。
(俗称关闭虚拟内存,其实说法是不准确的)


首先是跑分软件测不出差别,日常办公,浏览网页,做简单设计和小规模开发时,我主观上感受不到任何差别,至少我认为是过不了双盲测试的。我个人认为这些情况下,没有必要关闭页面文件,交由win10自己管理就好,已经比win7时代好很多了。




但是对于动作竞技游戏用户来说,win10在开启分页文件时能明显感知到不可预测的帧数波动和延时(非载入情况下的瞬间丢帧或卡顿)。


经过一段时间的折腾,发现这个影响主要来自两个因素:


1. win10新版默认打开的内存压缩技术,将要写入页面文件的内容进行压缩后再写入,减小硬盘写入的压力,这个技术能提高小内存+机械硬盘这种IO瓶颈严重电脑的日常使用感受,但是对于游戏用户就是灾难了,会造成cpu使用率的波动,建议通过powershell命令:Disable-MMAgent -mc 关闭。当然,如果关闭SysMain服务(原superfetch服务),或是禁用页面文件,这个功能也是失效的,可以在任务管理器内存页的“使用中(已压缩)”看到运行状况。


2. win系统的老历史,在打开页面文件的情况下,无论你有多少闲置内存,windows都会往硬盘的页面文件里倒腾东西。现象就是一些载入完成的的场景,开页面文件时会发现系统一下一下访问硬盘,而关闭页面文件运行同一场景,系统就完全没有这些操作,帧数的瞬时波动也就没有了,所以有时候FPS游戏感觉没跟手,真不一定是网络问题。测试的话,单机赛车游戏一个人跑闭环赛道最容易重现与分析。


确实,微软一直不推荐用户关闭页面文件,但是也知道有些情况下,用户是需要完全禁用页面文件的。
所以这个设置既不在策略组,也不在注册表,而是一直保留在系统属性的选项卡里。
能完全禁用页面文件是xp的NT5.1内核开始的,之前的win2000是不能完全禁用的。




如果确实想禁用页面文件的话,还有以下两点需要明确:


1. window内核的功能有部分依赖于页面文件,虽然常用这部分功能的用户不多。
我个人目前只用过崩溃文件转储,这部分也希望其它朋友能给与补充。




2. 明明可用内存还有很多,就报内存不足或出现莫名其妙的死进程的情况。


这个问题主要是因为微软让大家误判了哪一部分是空余内存,因为任务管理器的内存页明确标注了“使用中”和“可用”这两项的内存数量,所以大家自然而然的认为“可用”的那个数量就是空余内存。


而实际上,内存页里的“已提交”容量,才是实实在在的目前所有运行程序所发起的内存总需求量,一旦“已提交”用量超过内存容量,随之而来的就是报内存不足和进程崩溃,即使你有大量的内存在任务管理器上显示为可用


同理,对于那些固定了页面文件大小的用户,物理内存+页面文件的总和就变成了固定阈值,“已提交”超过时也会报内存不足。
所以16G内存+最大16G页面文件和32G内存禁用页面文件,报内存不足的阈值是一样的。
这也是为啥有大佬说,设置页面文件大小的关键是确保Commit Limit > 运行程序要求的Total Commit Charge。



综上,是否禁用页面文件,主要是看用户的用途,针对特殊需求的用户是有价值的。
禁用页面文件,或是指定了偏小的页面文件限制,都需要格外关注已提交这个数据。
我个人推荐32G及以上内存的游戏用户关闭页面文件,16G内存已经有部分游戏的Commit需求会超标。
至于一般家用办公设计等,个人觉得还是交给win10管理最为理想。
内存盘的方式,对于页面文件这一块来说,看来没有啥价值。

参考:
https://blogs.technet.microsoft.com/markrussinovich/2008/11/17/pushing-the-limits-of-windows-virtual-memory/
wybb同学做的测试.






























不知妻美刘强东
头像被屏蔽
发表于 2020-2-11 22:00:17 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
eyerain
 楼主| 发表于 2020-2-13 01:31:02 | 显示全部楼层
不知妻美刘强东 发表于 2020-2-11 22:00
神经病,有那么大内存还缺这点空间,整天咬着个页面文件不放,有什么价值吗,谁他妈告你玩游戏页面文件可以 ...

我本来就是做游戏开发的.目前项目是用unity.
帧率波动是由引擎GC造成的.还是由于win系统自己乱倒腾页面文件造成的.
对于我们来说是必须搞清楚的.
我相信对玩家来说也很重要.

我可以明确告诉你.如果本身程序没有内存泄漏问题.仅仅玩游戏这个领域,是可以做到不用页面文件的.
目前的虚幻4和unity开发的想做到都没问题.有能力用自研引擎的.想做到就更容易了.仅此.

最近组里也做了测试.性能分析器的结果明确.1909版本.即使是64G内存的配置.win10默认设置的页面文件管理方式也仍然会造成帧率波动.所以推荐电竞类用户将虚拟内存选项卡里设置为无分页文件.

最后.请留点口德.自尊自爱.



评分

参与人数 3人气 +3 收起 理由
lchong649cn + 1 精品文章
a27573 + 1 精品文章
qazxsw2 + 1 感谢解答: )

查看全部评分

不知妻美刘强东
头像被屏蔽
发表于 2020-2-13 02:17:28 | 显示全部楼层
eyerain 发表于 2020-2-13 01:31
我本来就是做游戏开发的.目前项目是用unity.
帧率波动是由引擎GC造成的.还是由于win系统自己乱倒腾页面 ...

你觉得世界上就只有你开发的游戏?
https://www.chiphell.com/thread-1890078-1-1.html
闪电战
发表于 2020-2-13 09:47:13 | 显示全部楼层
关闭虚拟内存玩GTA5,就等着玩着玩着报错退出吧(32G RAM)
嫌页面文件占地方,手动设置就行了
我设置初始1G,最大8G(小于8G就玩不了GTA5)
eyerain
 楼主| 发表于 2020-2-13 16:34:44 | 显示全部楼层
闪电战 发表于 2020-2-13 09:47
关闭虚拟内存玩GTA5,就等着玩着玩着报错退出吧(32G RAM)
嫌页面文件占地方,手动设置就行了
我设置初 ...

其实吧.现在固态这么便宜.内存这么便宜.页面文件占点空间完全不算个事了.

在意的是摸不清规律的,因为系统倒腾页面文件而造成的帧率波动和处理延时.

要上赶上用户还开着新版win10默认打开的内存压缩技术.那就不是小延时了.造成卡顿也正常.

GTA5的GC是有问题的.官方fix了好几次.没想到PC版本现在也没给处理好.

这种夸平台的游戏.按说GC都是测试的重头.毕竟主机平台那点小内存.和贼慢的2.5机械硬盘.处理不好用户体验是崩溃的啊.只能说pc玩家又被开发组给忽视了.
eyerain
 楼主| 发表于 2020-2-13 16:39:54 | 显示全部楼层

你发的链接就是wybb同学做的测试啊.

拜托请看看我主题最后附的参考信息.

喷人可以.但是请别无脑喷.

不知妻美刘强东
头像被屏蔽
发表于 2020-2-13 16:51:09 | 显示全部楼层
eyerain 发表于 2020-2-13 16:39
你发的链接就是wybb同学做的测试啊.

拜托请看看我主题最后附的参考信息.

我的意思是让你自己看看他帖子下面的反馈,有问题的不少
eyerain
 楼主| 发表于 2020-2-13 17:06:17 | 显示全部楼层
不知妻美刘强东 发表于 2020-2-13 16:51
我的意思是让你自己看看他帖子下面的反馈,有问题的不少

是.

确实有很多人有出现问题的经历.包括我自己也出过.

所以我写的第一个参考信息是微软的.那篇在原理上解释的比较清楚.windows的处理机制是支持系统跑在无页面文件模式的.

所以我在最后写的是16G内存不推荐.推荐32G及以上.
eyerain
 楼主| 发表于 2020-2-13 17:17:24 | 显示全部楼层
我也解释一下初衷吧.

现在的项目对实时度有很高的要求.

我们在GC上写了很多功夫.甚至有冲动去改用最新的dots模式开发.在网络和服务器上给了超高资源.

pc端依然不能避免测试的时候莫名的延迟和卡顿.

就好比格斗游戏.一局一共99秒.一个延时可能就造成玩家输掉整局.

找了很多人咨询和支持.都没结果.后来发现竟然是因为windows在倒腾页面文件.

然后我们又测试了吃鸡 csgo 赛车类游戏.都有这个问题.玩家一般是把延时怪罪到网络.其实测下来还真不全是网络的问题.这锅windows是要背的.win10的游戏模式确实有一定改善.但是并没有解决这个问题.确实让人对windows非常失望.我们认为根本原因是系统并没有对不同硬件配置的用户做相应的配置调整.

所以才写了这个主题.我们也给微软反馈了.不过并没有得到重视.
albertmars
发表于 2020-2-14 00:25:03 | 显示全部楼层
其实有大内存,不想要页面文件,又怕兼容性,这个很容易解决的,用ramdisk就可以了,用ramdisk虚拟一块硬盘,然后把页面文件放到这块虚拟内存上,这样相当于把页面文件设置成内存了,兼容性还很好!我以前的老电脑,内存4g,xp识别不了,就是用ramdisk这么干的,把系统识别不了的内存,用ramdisk做成硬盘,然后把页面文件放到里面,一点问题都没有,win10应该也是可以的,不过得选好ramdisk
hez2010
发表于 2020-2-14 21:48:40 | 显示全部楼层
游戏经常会申请较大的连续内存,但显然内存中剩余连续的大容量并不多,都被碎片化的打散了。此时如果没有虚拟内存的话就等着程序报内存不足然后崩溃吧。对于游戏来说,如果游戏本身访存优化不到位,缺页造成的延时也是在所难免的。
sixuliuxvn
发表于 2020-2-19 00:45:24 | 显示全部楼层
本帖最后由 sixuliuxvn 于 2020-2-19 00:47 编辑

这方面我也不了解,我猜是不是也因为ASLR技术,内存中可能大部分程序模块和堆栈地址都是随机的碎片化的,很难做到连续大空间的
记录微笑
发表于 2020-2-19 08:41:18 | 显示全部楼层
很显然楼主没有学习过.net 中的内存管理。

学习过之后你就会知道虚拟内存是多么重要了,并不是内存大就想关就关。
eyerain
 楼主| 发表于 2020-2-19 12:38:44 | 显示全部楼层
记录微笑 发表于 2020-2-19 08:41
很显然楼主没有学习过.net 中的内存管理。

学习过之后你就会知道虚拟内存是多么重要了,并不是内存大就 ...

IL2CPP后到底如何做的内存管理.感觉就像一个黑盒.一头雾水.

只能靠性能检测来反推引擎在做啥.

如果win10能在打开页面文件的情况下不造成性能波动, 是不想在这个问题上花费时间的. 望理解.

真心求教. 微软 Mark 那篇按已提交计数的说法是有问题的吗?

还是会造成额外的影响吗?麻烦指点一下学习这部分的网页.先谢过了.
记录微笑
发表于 2020-2-19 14:30:39 | 显示全部楼层
eyerain 发表于 2020-2-19 12:38
IL2CPP后到底如何做的内存管理.感觉就像一个黑盒.一头雾水.

只能靠性能检测来反推引擎在做啥.

屏幕截图(截图时间:2020-02-19_143014).png
不知道触发了哪个关键字,没办法原文提交,只能截图。

评分

参与人数 1人气 +1 收起 理由
a27573 + 1 感谢解答: )

查看全部评分

eyerain
 楼主| 发表于 2020-2-20 14:39:01 | 显示全部楼层
记录微笑 发表于 2020-2-19 14:30
不知道触发了哪个关键字,没办法原文提交,只能截图。

感谢回复

确实微软没有对页面内存这块有更新更详细的解释了.所以都翻到那个年代的玩意了.

win10大概是从1607版本引入内存压缩机制的.可以关闭.用powershell控制台Disable-MMAgent -mc命令可以关.这部分微软给了控制余量.不过这个内存压缩技术是依赖于硬盘页面文件.在关闭了页面文件的时候.这个功能就失效了.所以猜测压缩后的部分.是放入硬盘的.而不是保留在内存中.微软说.这个功能能大幅提升低配置电脑的办公性能.然后实实在在坑了一批高配置的游戏玩家.微软将superfetch服务升级为sysmain服务.主要就是加了这个功能.

确实.关闭页面文件之后.内存被程序已提交无端占了很多.不过内存压缩已经不工作了.所以这部分导致的cpu波动就没了.所以并不会导致更频繁的内存压缩.

至于应用程序的GC这款.我们咨询了引擎官方.是否打开页面文件.是否内存吃紧.他们的程序不会判断.都是相同的GC工作方式.只是提醒我们自己测好用量.

win10系统自己的GC.关闭页面文件是否引起工作模式变化.这部分目前没人给答案.微软的回复也只是搪塞.最近也咨询几个技术相对比较好的人.给的回复是,不开源的东西.黑盒.不用深究.也推荐我们关着页面文件跑测试.剔除干扰因素.如果16g内存的机器因为内存问题跑崩了.老老实实找自己的问题.

另外.我们测了一下,在内存绝对充足的情况下.打开页面文件.也就是理论上完全不应该有数据被写入硬盘页面文件的情况下.ssd和机械硬盘.win10 1909系统.偶发的性能波动幅度几乎一样.关闭之后.都会完全消失.
当然.真的需要实实在在写入页面文件的时候.这俩的差距天壤之别.

目前知道的.也就是这些了.如果再有发现.我会继续修改帖子.

再次感谢回复哈
kxmp
发表于 2020-2-20 23:23:42 | 显示全部楼层
页面文件一般不怎么动的. 好多人连页面文件使用率一辈子都不会看
kxmp
发表于 2020-2-20 23:31:14 | 显示全部楼层
sixuliuxvn 发表于 2020-2-19 00:45
这方面我也不了解,我猜是不是也因为ASLR技术,内存中可能大部分程序模块和堆栈地址都是随机的碎片化的,很 ...

虚拟内存 提交 物理内存 页面文件 含义都不一样
zplju1
头像被屏蔽
发表于 2020-2-25 19:24:31 | 显示全部楼层
以前2G内存的时候都有不少人讨论这个问题了。自己也试过几次,速度没感觉出来快,后来就不试了。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-12-16 02:29 , Processed in 0.129846 second(s), 5 queries , Redis On.

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表