» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[其他] 谈谈“虚拟内存”对游戏运行的作用

    联动贴:http://club.tgfc.com/thread-6090821-1-1.html
    还有,帖子太长没看完,不清楚论战结果
     一家之言,欢迎指正,人参自重

  扯淡之前,先讲一个实例。假如一个游戏需要512MB的内存,我现在只有256MB的空余内存,能不能跑动这个游戏?
    答案是:能运行,但是会
优化的水平的高低,只能减少卡的时间和次数,但是一定会卡。
     估计很多人不会看完,先把我的结论说下
     与其让所需内存超过256MB面临未可知的麻烦,不如把所需内存限制在256MB内优化



一、虚拟内存在使用上等同内存,但性能上实际上是硬盘水平
    当初设计出内存的原因(回头想想这句是表达不当,该说成在PC中添加内存这一结构),就是硬盘的性能和高速缓存的性能(cache)相差实在太大而高速缓存的造价太高,所以才让内存作为硬盘和高速缓存的一个桥梁。(此段大误,我重新查了资料,是为了解决内存造价过高,牺牲了性能发展了辅存外存(磁盘,硬盘,光盘)。是为了解决内存和CPU之间N个数量级的速度差,才引进了高速缓存,但是价格更要命)

      虚拟内存虽然带有“内存”这2个字,但是实际上是利用了硬盘空间。所以写在虚拟内存这部分数据,会造成整个数据传输的瓶颈部分。
     “  PS3的内存是先进的XDR,速度很快,并且PS3标配硬盘,可以运用虚拟内存技术或类似的机理解决内存不足的问题。”(那一贴的原文)
     
      假如PS3使用了虚拟内存技术,确实能解决内存不足的问题。也就是,让原本跑不动的程序变得可能跑动(不是一定,后面解释)。但是,无论内存再怎么先进,也改善不了硬盘传输速度的瓶颈。就比如说,前面的管子开的再大,和后面小水管供水的速度没有关系





二、虚拟内存对多任务并发操作有显著性能提升,对单任务而言意义不大
     
       人们使用计算机的时候,不可能只干一件事情。也就是说,不可能让一个程序使用完整个内存。

      计算机解决方法就是:如果内存不够,又有新程序申请分配内存,就让部分暂时用不上的数据写到虚拟内存。多余的空间装在新程序,如果不够,剩下的部分也入驻虚拟内存。

       如果CPU需要的部分不在内存里,CPU会让这个任务挂起,然后发出命令把需要的部分从虚拟内存读出来。在这个过程中,CPU会调用其它任务运行,直到需要的内容全部写在了内存里,再次通知CPU可以运行自己(具体更复杂,这里只是最简单的模型)。由于是有多个任务进行,一个任务的挂起不会影响其他任务的运行。所以提高了整个运行效率,但是对于挂起的任务,就在那等待。

        对于单任务而言,如果能全部装载进内存,则无问题;一旦所需的内存大于实际空闲内存,就必定有写进虚拟内存的部分。一旦需要虚拟内存的数据,整个程序会住等待硬盘数据的读取。前面说过,机械硬盘的读取速度是无法解决的的硬伤。不然也没必要分什么内存、虚拟内存、高速缓存了。

         很遗憾的是,就游戏机而言,运行的是属于单任务的范畴。



三、对单个任务而言,一旦使用虚拟内存,就必定造成运行效率降低

        一个工匠,做一件家具需要4件工具(需求512MB内存),现在有2个工匠,一个能同时拿4件工具(能提供512MB内存)。另个一个只同时能拿在手上的只有2件(只能提供256MB内存),但是可以用工具袋装下另外2件(256MB虚拟内存)。毫无疑问,2个工匠都能做完这件家具。但是过程很值得思量。

          第一个工匠没什么好说的,要的东西全在手上,直接干活就是了。

           第二个工匠么,一旦需要第三件工具会怎么做?

          第一步:停下工作,把手上不要用的工具放回工具袋已-------修改数据回写,如果数据没有被修改,可以直接丢弃。

          第二步:找到需要工具的位置,并拿出来------虚拟地址变换实际地址,磁头寻轨,数据读取。其中话的大量时间在磁头寻轨和数据读取上,而且花的时间不短,数据量大的情况下甚至能让人感觉到停顿

          第三步:继续做。

          以上是虚拟内存工作的简单模型。也就是说,就算是有虚拟内存,但是一旦需要虚拟内存的数据,还必须先读到内存里。 也就面临“抖动”风险。
  
         如,四件工具,1和2在手上,3和4 在包里。
  
         现在需要工具的顺序,1234121212.....
  
         解释比较枯燥,大概的意思就是,刚放进工具袋的工具(刚写入虚拟内存),就是下次要用的工具,又必须拿出来。造成了大量的读写I/O(硬盘)操作,巨废时间。
  
          所谓的虚拟内存优化,只是减少抖动的次数和程度。但是除了理想算法(必须知道需要资源的次序,这个不可能实现),现在没有任何一个算法不造成抖动,除非不使用虚拟内存。




四、虚拟内存不能完全解决内存不足的问题
       扯淡扯累了,简单的说下
  
        如果同时需要3件工具,第二个工匠得立刻回家。
  
        也就是说,需求的资源分布超过256MB,神机3就傻眼了。必要要做天文次数的读写操作。这个不是不可能,长时间运行后,数据在内存的分布有很大的未知性,如果用汇编语言严格控制内存,你一个游戏写一辈子吧。




五、结论
           与其让所需内存超过256MB面临未可知的麻烦,不如把所需内存限制在256MB内优化
      

[ 本帖最后由 喋血战狼 于 2009-6-26 13:53 编辑 ]


TOP

结论,360的显卡有512MB,CPU是0MB,不用跟PS3比,连跑程序自己都完败了。。。。

不过早就说了,越多的资源,开发人员就会越吃不消,这是很容易了解的问题,为什么还有人不懂呢。参照以下比如吧:
用2个4核心CPU+50核心集合所有技术的GPU+1000GB内存的PC。你叫开发人员怎么开发呢,开发怎么样的游戏呢,以现在的技术,吃不消吧。

[ 本帖最后由 ... 于 2009-6-25 23:55 编辑 ]



TOP

引用:
原帖由 ... 于 2009-6-25 23:51 发表
结论,360的显卡有512MB,CPU是0MB,不用跟PS3比,连跑程序自己都完败了。。。。
扯淡总要讲点道理吧
   无论对还是不对,总要拿出依据来
     纯粹搞笑有意思?


TOP

引用:
原帖由 喋血战狼 于 2009-6-25 23:54 发表

扯淡总要讲点道理吧
   无论对还是不对,总要拿出依据来
     纯粹搞笑有意思?
那句话是给某F看的,某F自己最清楚了。并非针对你的内容。

TOP

当初设计出内存的原因,就是硬盘的性能和高速缓存的性能(cache)相差实在太大,而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁。
这一段是扯谈。 内存估计是比CPU更早出现的东西。

另外一个观点,虚拟内存技术对单任务没什么含义。
你这里谈的任务实际上是想表达“软件”的意思。如果你电脑上什么软件都不运行, 就运行个大型的软件, 比如大型的CAD软件什么的, 虚拟内存技术也是非常有用。

另外一个观点,只要使用虚拟内存性能就必定下降。
这句话是没错的, 下降1%, 与下降90%都是下降。是不是所有情况都会下降非常明显呢?显然不是。
举几个例子,第一个例子。现在如果你PC开了休眠,那么你的C盘上应该有一个和你内存一样大小的文件,这个文件中保持的就是你内存里的实时内容。你电脑是不是性能下降了90%?
第二个例子。一个软件或游戏在256MB的内存上运行, 它需要300MB的内存才能维持运行, 但是我可能并不是每时每刻都要用这300MB的信息,大概每个时间段只需要30MB就可以了。
第三个例子,我这个游戏读光盘上200MB的程序, 运行后产生了10MB的信息保留在内存中,但是这个信息我并不需要时常用到,我到底是把这10MB的信息保留在内存中,还是丢弃,用的时候我再去加载200MB的光盘程序,再运算一遍呢?

TOP

楼主有心了,不过何必对X弹琴呢?让别人的神机梦继续做下去不好吗?

TOP

引用:
原帖由 ffcactus 于 2009-6-26 00:04 发表
当初设计出内存的原因,就是硬盘的性能和高速缓存的性能(cache)相差实在太大,而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁。
这一段是扯谈。 内存估计是比CPU更早出现的东西。

另外一个 ...
第一点,内存是解决硬盘和高速缓存的速度差。是书上原话,如果你认为你的话比大学教材还靠谱,你可以无视

第二点,CAD作图更依靠的是内存,如果内存不够就想用CAD作图。搞笑吧,看卡不死你。加内存对CAD运行速度影响很大,设计专业的都知道,而不是依靠什么可怜的虚拟缓存

第三点,对于一个软件,我能容许只有30MB,在内存里。其余的临时再读,应为停顿关系不是很大。但是对于游戏这个需要大量数据现炒现卖的东西,你认为有时间等你读硬盘???

第四点,我真不知道你是不是有机,有游戏机的都知道。光盘的传输速度甚至远远不及硬盘,所以只能一次读取足够的数据

第五点,你承认会性能降低,这个很好。但是具体降低百分之一还是百分之九十,这个就很不好说,看抖动程度了。但是256MB的内存运行需要512MB内存的游戏,抖动的程度不难想象。最 乐观估计多话30%时间。(提供一个最直观的测试方法,用1G的内存和1.5G的内存跑跑永恒之塔。你就知道用虚拟内存玩游戏多么可笑)

还有PC休眠那个例子,我都怀疑你是故意自抽的。
   PC从休眠状态唤醒需要多少秒???你可以自己去用秒表看看
   如果出一帧游戏也要几秒,原谅我,其实我在看幻灯片

[ 本帖最后由 喋血战狼 于 2009-6-26 00:40 编辑 ]

TOP

引用:
原帖由 ffcactus 于 2009-6-26 00:04 发表
当初设计出内存的原因,就是硬盘的性能和高速缓存的性能(cache)相差实在太大,而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁。
这一段是扯谈。 内存估计是比CPU更早出现的东西。

另外一个 ...
直接笑喷了...

TOP

楼主,你蛋疼了,居然为了这么个人写了这么个科普帖...= =

TOP

认真你就输了

我觉得,FF神,很成功

TOP

引用:
原帖由 喋血战狼 于 2009-6-26 00:20 发表

第一点,内存是解决硬盘和高速缓存的速度差。是书上原话,如果你认为你的话比大学教材还靠谱,你可以无视

第二点,CAD作图更依靠的是内存,如果内存不够就想用CAD作图。搞笑吧,看卡不死你。加内存对CAD运行速度影响很大,设计专业的都知道,而不是依靠什么可怜的虚拟缓存

第三点,对于一个软件,我能容许只有30MB,在内存里。其余的临时再读,应为停顿关系不是很大。但是对于游戏这个需要大量数据现炒现卖的东西,你认为有时间等你读硬盘???

第四点,我真不知道你是不是有机,有游戏机的都知道。光盘的传输速度甚至远远不及硬盘,所以只能一次读取足够的数据
我还真不知道你是阅读的什么高级计算机教材,好吧,姑且算你那句话没问题。但是你说而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁就扯谈了,微电子技术我就不想多扯谈了懂的人肯定不多。世界上第一台计算机大家都了解吧。有硬盘吗?有高速缓存吗?但是肯定有内存。

更大的内存是可以在运行大型CAD软件时效果更好,但是虚拟内存可以让你的电脑运行起来比“当前”内存的效果更好,你说有意义吗?哦, 你非要去买内存,好啊,你买了后,有虚拟内存只会更好,当然你又可以去买内存。。。

为什么你就那么肯定有戏中有那么多需要现炒现卖的东西,所有的游戏都如此吗,哪怕有10%的内容不是非要现炒现卖,那存在就有意义啊。

你把我原文中的“光盘”这个词换成“硬盘”, 你或许应该明白我表达什么意思了。

TOP

引用:
原帖由 测试一下 于 2009-6-26 00:25 发表


直接笑喷了...
实在是太好笑了,亏他敢说出来……

TOP

引用:
原帖由 ffcactus 于 2009-6-26 00:37 发表
我还真不知道你是阅读的什么高级计算机教材,好吧,姑且算你那句话没问题。但是你说而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁就扯谈了,微电子技术我就不想多扯谈了懂的人肯定不多。世界上第一台计算机大家都了解吧。有硬盘吗?有高速缓存吗?但是肯定有内存。
虽然不和CPU比年龄了...

但为什么我依然想笑...

居然刷不出敲地板的表情~

太郁闷了...

[ 本帖最后由 测试一下 于 2009-6-26 00:53 编辑 ]

TOP

引用:
原帖由 ffcactus 于 2009-6-26 00:37 发表


我还真不知道你是阅读的什么高级计算机教材,好吧,姑且算你那句话没问题。但是你说而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁就扯谈了,微电子技术我就不想多扯谈了懂的人肯定不多。 ...
第一:那句话是我表达有问题,但是“而高速缓存的造价太高,所以才让内存作为硬盘和高速缓存的一个桥梁”是很靠谱的。可以从20386这块芯片问世起,那句话就是成立的
  我承认你抓住了我表达的漏洞,那个表达也确实是错的。可以你的反驳照样没有力力度,没有内存,没有高速缓存,没有硬盘的构架,关我那句话什么事情??
我那句话的前提是高速缓存存在,硬盘也存在,之后才有了内存这个桥梁。
而20386可以说是现在CPU的代表构架了

第二:很好,你再次承认了更大的内存比小内存加虚拟内存要速度快,但是你为什么一直说高速缓存构架可以弥补内存小的缺陷么??
用PC的前提是,设计的人不知道用户有多少内存,而用户也不知道要多大内存才跑的舒坦。这个时候虚拟内存的作用很大
但是多游游戏机,所以东西一个萝卜一个坑。在范围内设计

第三:冒着性能下降1%-90%(你的数据)的危险,却为了10%的东西去使用虚拟缓存。未免太儿戏
   更何况,如果只多需求10%的内存,可以考虑压缩算法或者稍稍降低制材减少特效都可以,毕竟游戏是一流畅运行为最基本的要求。

[ 本帖最后由 喋血战狼 于 2009-6-26 01:08 编辑 ]

TOP

引用:
原帖由 喋血战狼 于 2009-6-26 00:52 发表

第一:那句话是我表达有问题,但是“而高速缓存的造价太高,所以才让内存作为硬盘和高速缓存的一个桥梁”是很靠谱的。可以从20386这块芯片问世起,那句话就是成立的
而20386可以说是现在CPU的代表构架了

第二 ...
第一:那句话是我表达有问题,但是“而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁”是很靠谱的。可以从20386这块芯片问世起,那句话就是成立的
而20386可以说是现在CPU的代表构架了
--- 那你就矛盾了, 未必内存时386时代出现的东西?

第二:很好,你再次承认了更大的内存比小内存加虚拟内存要速度快,但是你为什么一直说高速缓存构架可以弥补内存小的缺陷么??
--- 请你不要脑内补完(这可是软饭的纱帽表现之一哦), 弥补不等于消灭所有缺陷,不等于就完美无缺了。

第三:冒着性能下降1%-90%(你的数据)的危险,却为了10%的东西去使用虚拟缓存。未免太儿戏
   更何况,如果只多需求10%的内存,可以考虑压缩算法或者稍稍降低制材减少特效都可以,毕竟游戏是一流畅运行为最基本的要求。
--- 这就搞笑了,你以为是重了病毒啊,性能在1%-90%之间跳来跳去, 那还要交换算法干什么?又不是随机抽取内存数据,是根据陈旧度算来的。

TOP

发新话题
     
官方公众号及微博