本帖最后由 jeffxl 于 2011-10-16 20:07 编辑
这游戏引擎设计导致磁盘IO性能瓶颈,除了换固态硬盘没有办法解决卡顿和贴图延迟问题(你转头或者晃动鼠标,看看硬盘灯吧),我把游戏从固态硬盘复制到机械盘运行,问题就可以反复重现,固态盘运行没有任何问题,这几乎是第一个必须使用固态硬盘才能保持游戏中效能的游戏。以下是我这两天的分析,不想看长篇的人可以跳过
我这两天在下游戏,各大游戏论坛中一直发现在讨论此游戏运行中的贴图延迟等问题,发现问题出现在如果你视角和角色不前后移动,那么没有问题,只要屏幕视角内的发生角度改变产生新的模型需要显示或者向前移动更远处的贴图模型需要显示,那个时候硬盘会立即狂读盘,类似复制粘贴时的状态。今天我游戏下好了,发现没有这个问题,我思考很久,发现很可能是游戏引擎机制导致机械盘渣一样的随机读写性能不够,导致即时读取贴图到显存来不及响应导致的贴图延迟。我们知道机械盘不管什么档次,就算你5万转的盘,持续读写有1000M,但是由于机械结构的原因需要寻道和等待潜伏期,一般随机性能就5兆以下每秒的随机性能。而这个游戏可能是第一个需要固态硬盘才能提供响应的即时读取贴图性能的游戏,我从相关资料了解到这个游戏是显存-内存-磁盘三级缓存架构来保证把性能最大利用,我们发现这个游戏的远景精度非常高,并没有像其他游戏那样节省显存而降低远景精度,那么游戏设计就极可能把你面前需要显示的贴图尽可能填充满你的显存,这个可和其他游戏不一样,其他游戏会把你周遭的环境全部调入显存或内存待读取,内存和显存比硬盘快得多,而这个游戏几乎除了你当前屏幕上的贴图模型用它能提供的最高精度自动自适应填充满,精度按你的显存大小来,你显存大填充的数据也就多,但是他只是尽力把你当前屏幕的模型精度提高到填充满你的显存得到当前画面最大模型精度。而角色可能转身,可能移动,任何需要改变、新增到你当前画面的模型都需要即时从磁盘读取,这个量不算小,任何的角度改变和移动都会导致大量随机读取。为什么是随机读取?因为你的移动和视角改变,计算机无法预计和缓存,需要读的东西几乎都是随机和突发的,而需要的贴图资源在文件结构上的分布也是随机的,机械硬盘5M以下的随机性能远远不够即时读取贴图呈现在画面上,所以出现这个问题。而固态硬盘随机IOPS几乎超过机械盘的几十倍到几百倍,这里完全体现了固态硬盘的性能优势,所以可以避免贴图延迟的问题,比如转身机械盘需要0.5秒甚至到N秒以上读取完你改变当前视角产生的新模型读取要求,而固态盘只需要0.01秒甚至更低的时间完成。
显存大的同学同样不能缓解这个问题,比如3G显存,引擎还是会把当前画面用你显存大小的精度填充进显存,你转头会导致更大的读取量,因为精度提高了
很多同学说我拿4个猛禽做RAID0持续读写都超过固态硬盘了,行不行?不行!因为程序执行包括游戏执行是随机读写,不是复制粘贴,机械盘再多的RAID都只能提高持续读写,随机IOPS性能几乎没有增长或者反而降低,这样的随机性能相对于固态盘来说依然是忽略不计(磁头数量变多了,更多磁头需要寻道,机械结构更复杂),固态硬盘在游戏中也提供增益性能的时代几乎就要来了,不只是启动时间缩短读盘缩短哦。我预计固态硬盘普及后,游戏引擎运行机制会有大范围改变,3D游戏会设计成只缓存当前屏幕的贴图模型,把显存所有容量用来显示当前屏幕画面,你移动改变了视角立即从磁盘读取即时贴图,那个时候机械盘就真成渣了(这样对画面材质的提升是几何倍数的)
另外注:我的硬盘是镁光M4固态64G,移动视角会同样导致我的固态盘读盘频繁,闪动不停,我估计机械盘就是常亮状态,而且还贴图延迟,不信你们原地左右晃动视角看看硬盘灯,这游戏还真是一点都不缓存贴图,你一晃他立即狂读,你在晃回你刚才的视角他还是要全部重新读入贴图。我的硬盘IOPS是机械盘的百倍,不知道各位机械盘玩这游戏的如何解决这个问题,这个问题是无法靠缓存的方式解决的,玩家移动和视角改变是无法预计的。
还有,我发现内存再大也不能缓解这个问题,我从4G-16G都测试过,无法避免,除了提高磁盘IO性能(换固态硬盘)
以下借用浴室的测评图详细说明此问题的来源:
浴室的测评环境为:SSD Gskill Falcon 50nm 128GB MLC 三星NAND,barefoot主控。测试时间为正常游戏1个关卡20分钟游戏时间
以上为传输尺寸统计数据。可以发现64K的传输占了整个统计数据的大多数,可以肯定的是64K尺寸的传输占整个游戏95%以上强。
上面为游戏过程中的传输率心电图,从纵轴(传输率)来看有几个非常高突发传输值,预计那个时候机械盘会产生突然的卡顿来应对突发的传输情况,横轴100秒附近还产生了大量10M以上的传输
这个不解释,引用浴室原话“全局访问,好多“零散”的点。。机械盘悲剧。。”
这是游戏各种文件夹各种文件的访问数据,可以看到大型开阔场景几乎都是随机数据访问,室内或小场景是持续占多。
数据汇总。持续传输只有25%不到、平均传输率5M/S、平均读传输尺寸64974字节(64K左右)、最大出现过一次6S的读延迟,大于1毫秒的读响应达到528次
对于浴室测评的总结和机械盘对游戏的影响:
从传输尺寸可得知游戏当中64K访问达到95%强。我测试我的西数绿盘(仓库盘)在64K尺寸下的随机性能是3M/S左右、我的M4在SATA2下的64K尺寸传输率是179M/S,这两个盘这里有60倍的性能差距。然后从后面的图片展示得知随机传输占到了85%以上。平均传输率为5M/S。但是如果只看平均是不够的,从综合传输率图和随机访问分布图中的波形细节和点,可以发现几乎可以看到几个大的波峰和很多密集的5-10M左右的(几乎80%)波峰和随机传输点示。预计平均传输被游戏室内简单场景和视角几乎静止的低状态(接近0的传输率)拉低。那么可以预期的性能发挥是,磁盘IO系统必须提供至少10M以上64K尺寸的随机性能才能保证80%的时间不贴图延迟,200M或者以上的持续传输率保证不出现突然的卡顿效应。
此外预计SSD普及后,游戏引擎的设计转向为IO导向型,显存中不再冗余和缓存待访问材质,全容量自适应最高精度(看显存大小)显示当前画面当前帧的材质、游戏容量巨大,80%为材质资源文件占用,以满足大显存的朋友显示最高精度的材质并不再限制视野距离保持远距精度、显存大小变得不那么敏感、显存越大提供的是越高精度的材质、显存溢出卡顿效应大大减少。
我的设置是全高,版本1.1(设置中可改贴图精度为最高) 抗狗牙4X |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|