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


 51 1234
发新话题
打印

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

    联动贴: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

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



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:37 发表


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

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

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

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

TOP

引用:
原帖由 ffcactus 于 2009-6-26 01:04 发表

第一:那句话是我表达有问题,但是“而高速缓存的造价太高,所以才设计出内存作为硬盘和高速缓存的一个桥梁”是很靠谱的。可以从20386这块芯片问世起,那句话就是成立的
而20386可以说是现在CPU的代表构架了
--- ...
第一:认为我那句话有矛盾的人才有矛盾,别估计来估计去的吧,这样扯淡很没意思。要别人拿出具体数据的同时,自己一个估计就算了。
内存确实未必是30386时代的东西,但是30386构架的PC却肯定有高速缓存和内存及存储设备(硬盘,软盘,光盘)

第二:我实在看不出脑内补完的样子,你表达的意思和我表达的意思完全一样,为什么说我脑内补完??

第三:无论哪种替换算法,都不可避免抖动。还有,那些替换算法是以命中率为坐标竖轴的,性能降低的地方就是不命中地方。有转到了原地
还是不能避免磁盘读写速度的瓶颈,不可避免的停顿等数据。你认为游戏中突然停一下掉几帧的高画质游戏很爽么?
PS:1-90%是你自己的数据,现在想用自己的数据咬我一口啊
当然,你自己认为你自己的数据很搞笑也很正常,毕竟都是估计的啊
说来说去 你还是没说什么

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

TOP

引用:
原帖由 村上春樹 于 2009-6-26 02:50 发表


開啟休眠的視窗系統是隨時在硬盤上儲存內存資料,還是當使用者下休眠指令時才將內存資料轉存?

FF神會異想天開地拿休眠當作內存轉存硬盤,效能影響不大的證據,令人對其IT水平的理解層次感到畏懼
我还没注意他这个说法
  他还真当开了睡眠,内存数据就和硬盘缓存文件数据随时同步??
   我靠,CPU光做数据交换工作别干其他事情了

TOP

引用:
原帖由 ffcactus 于 2009-6-26 08:57 发表


你那教科书还真不是一般的搞笑,你是否认为教科书上的内容100%都是真理?
当初设计出内存的原因, 我是不是可以这么认为,在当初以前,就还没设计出内存,就还没有内存这个东西,对吧,你不觉得可笑吗? 世界第 ...
你已经技穷了么???
       你请看我的帖子,感谢指正我的饿错误,这点我表述不清楚,我已经承认了
         我已经改成了 (PC中添加内存这一结构
引用:
原帖由 zhangjingy2008 于 2009-6-26 08:30 发表
太逗了,XO是统一架构,用512和0来分配比较吗?哈哈哈。
天姐老因为自己的无知而发笑,情何以堪
   我不知道XO是怎么样的统一构架的,但是统一个构架不是新技术
     相反是个老的不能再老的老构架
       C51单片机可以说是代表吧
     用个很简单的机制就可以解决问题
代码段在内存由下向上   数据段从上往下分配
还有,这已经是个成熟构架,也用了几十年,别担心2个段不会不相遇的问题(课没继续开,只知道原理不知道具体实现。不过话说回来,如果我要是也知道具体怎么实现了,也不会闲的来灌水)


就一般情况而言一个程序的代码段是用不了多少内存的,而且大小是可以预知的。可以空出的多少内存做其他用途(这句话是出自接口技术,别一个估计又秒杀了)

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

TOP

引用:
原帖由 zhangjingy2008 于 2009-6-26 09:56 发表
说XO的统一架构是老的不能再老,小心软狗出来咬LZ,哈哈哈。
老构架=技术落后??
       天姐我再次情何以堪
         还有,我前文已近说了,我不清楚XO的构架怎么实现
           但是使用统一构架不会造成 512+0的结局
              天姐转移话题的功夫再次见识了
                用错误的观点嘲笑别人被拆穿,还能继续换话题嘲笑
                    C51构架可以说是目前世界上效率最高的构建之一了
                      而使用范围,是你想想不到的广

TOP

引用:
原帖由 boostloki 于 2009-6-26 10:09 发表
我可以很负责任的告诉大家

X360的统一架构 是在Direct3D9.0c的末期才有的,说这个技术是老的不能再老的人,不知道您真的了解GPU吗?
先搞清楚内存统一构建和GPU的渲染统一构架再来发言
谢谢
这一天姐是指内存的统一构架
  你是很负责,话也没错,但是不对题
   真是莫名其妙,看帖不认真还把人往死抽

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

TOP

引用:
原帖由 zhangjingy2008 于 2009-6-26 10:14 发表


我说到技术落后了吗?看清楚再说吧
512比256,软狗这么比的多了去了,你应该给他们上上课。
我的观点错误啊,那你说说正确的吧,哈哈哈。
天姐  别继续转移话题啊
   你为什么“觉得”统一构架会造成512+0的结局
    还用这个观点战了2天嘲弄无数人啊
当然也不会是512:256
但是  至少是比256高的内存供给GPU
256+X  X等于多少看优化本本事
个人推测在100MB左右浮动(此条没任何依据,无须战)
还是那句话,代码段要求的内存不会很高

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

TOP

引用:
原帖由 ffcactus 于 2009-6-26 10:19 发表

你已经技穷了么???
       你请看我的帖子,感谢指正我的饿错误,这点我表述不清楚,我已经承认了
         我已经改成了 (PC中添加内存这一结构)
到底是技穷还是你本来就说错了?我指出你说错了就是技穷? ...
引用:
原帖由 ffcactus 于 2009-6-26 10:19 发表

你已经技穷了么???
       你请看我的帖子,感谢指正我的饿错误,这点我表述不清楚,我已经承认了
         我已经改成了 (PC中添加内存这一结构)
到底是技穷还是你本来就说错了?我指出你说错了就是技穷? ...
第一:我已经指明了芯片 80386  谢谢,不是8086  也不是80386
说80386没有高速缓存的泪牛满面啊 ,纠结我我的表述问题  256+虚拟内存构架就可以性能飙升了??

第二:暂时离开,稍候一下。个人感觉是装B再次遭雷P ,而且被P的很有可以是我,真的把C51的构建搞错了
对就是对,错就是错  大家看的明白

但是256MB+虚拟内存能不能弥补小内存的缺点???
   对于一个游戏,原本用2256跑不动的,现在用虚拟内存让它跑动了,但是会卡会掉桢
   对于游戏来说说利大于弊??

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

TOP

引用:
原帖由 ffcactus 于 2009-6-26 10:59 发表

你首先说“为了匹配高速缓存与硬盘之间的速率差才设计出内存的”
---我说,抛开电子技术发展不谈,难道第一台计算机有硬盘或高速缓存? 但是他有内存啊。
你又说“是针对80386来讲的”
---我说,难道386之前没有 ...
那句话我修改N久了
  最极端的说法,那句话说错的
     那就证明了 硬盘虚拟内存技术的速度能和内存一样??没有传输瓶颈??

TOP

引用:
原帖由 ffcactus 于 2009-6-26 11:17 发表

不一样, 有瓶颈, so what?
然后又要我重新讲一遍?
既然知道有瓶颈还理直气壮的来句 SO WHAT??

TOP

游戏程序和一般的程序不同,他必须把可能用到的东西全要抓在手上
    一个游戏最基本的要求 每秒30FPS
        如果用虚拟内存欺骗了CPU  告诉他所有的东西都持有
    而且高效算法命中率确实不错
    但是我前面强调N次,除了理想算法,没有任何算法能避免抖动
     任何算法也无法保证,我丢硬盘的东西,下一个刻肯定用不上
    这样才有不命中的情况
    一旦不命中,你认为有多少时间等硬盘吧东西传输过来??
     这样不是贴图错误就是掉桢,这样也算是成功解决了内存不够的问题??
----------------------------------------------------------
一个游戏以一般画质,以30FPS的速度运行  可以判定  这个游戏是流畅的
领一个游戏  以高画质  以30FPS的速度运行  但是偶尔出现 20FPS的情况??这个游戏是否是流畅的??
那中间的20FPS就是不命中而去读硬盘的情况
这样的游戏能容忍??

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

TOP

引用:
原帖由 ffcactus 于 2009-6-26 11:32 发表

30FPS与内存速度根本就没什么关系,你换了块显卡,到了120FPS, 未必你内存速度快了4倍?我也不知道你一直在YY什么。
我也讲过无数遍了, 游戏中不是所有的数据都与你那可笑的“30FPS”有关系,不同游戏区别甚至都 ...
这样说来,我用顶级显卡+1G的内存  就可以跑永恒之塔了
   如果显卡升级,内存不变   那个游戏我跑的更快
     原来我错了 其实我只要64MB内存+顶级显卡就够了
-------------------------------------------------------------------------------
  原来当年升级巫妖王  广大WOW众只升级显卡 和内存没关系

既然没关系,你开贴说虚拟内存弥补小内存的缺陷死磕三红机干什么

原来有发挥作用的技术能给PS3的性能带来飞升

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

TOP

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