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


发新话题
打印

[其他] 不知道什么是“虚拟内存”,我就来教育下。(Update)

引用:
原帖由 火彩 于 2009-6-24 15:41 发表


我就不说自己了,反正肚子里就那么几两油,但自认玩弄虚拟缓存大神还是够的。
倒是TNT,lolicon,你成擦边球了
所以说,我现在只要围观就可以了,我是擦边球。


TOP

引用:
原帖由 legendkang 于 2009-6-24 20:08 发表
那你说说ps3的虚拟内存吧?我做反方:ps3的虚拟内存技术应用变相证明ps3的硬体是有缺陷导致的。通常意义上虚拟内存就是弥补物理内存不足产生的。
1. PS3到底有没有用虚拟内存我都没下定论呢,我只是阐述硬件、软件的条件可能。你这么快就下定论,小心被软狗喷死。:D

2. “变相证明ps3的硬体是有缺陷导致的。通常意义上虚拟内存就是弥补物理内存不足产生的。
     你这句话的因果关系应该是“因为通常意义上虚拟内存就是弥补物理内存不足产生的。所以变相证明了PS3的硬件是有缺陷的”这么改下你应该同意吧。
     弥补物力内存不足这是句实话,但是说得也太轻松了。就拿80386来说,他的地址总线是32位的,那么这意味着它完全可以支持2的32次方,4G的物理内存。现在的64位CPU,能支持更大的内存,不过不到2的64次方,因为这个天文数字完全没含义。内存的大小完全不可能跟上CPU支持的大小。对于操作系统,它为了统一,为了让应用软件设计人员可以面对一个完全一样的环境,它默认软件可以访问整个能够支持的内存空间(当然不是所有的操作系统都是这样,比如有些操作系统不允许软件寻址范围大于2G)。也就是说,应用软件开发人员开发软件时,他可以认为自己拥有一台理想的电脑,内存足够大,比如4G。实际上虽然有这样的假设,但是开发人员当然不会在PC上去开发个占用近4G内存的软件,也不是说我设计的应用软件一般需要1G的内存,你只有256也能虚拟运行毫无问题,所以每个软件都标明了自己对最小内存的需求。所以PC上的操作系统无不使用虚拟内存,这样保证你假如只有1G内存,可以让多个软件同时运行,哪怕这些软件对内存的需求和大于1G。这是针对多任务来说。但是哪怕你仅仅运行一个软件,比如你说的PHOTOSHOP,你256的内存也能运行,但是软件本身对内存的需求绝对不止256。你处理10张照片可能需要1G,当你有1G内存时,可能你又要处理20张照片。所以“不足”本来就没有绝对满足的时候。
    了解到这些后,那么这显然就无法变相证明PS3的(内存)硬件设计有致命的错误。使用同一内存,还只用DDR3肯定更省事省钱,使用XDR还要付专利,设计成统一内存也没有任何技术上的难度,难道有资格给PS3设计硬件结构的人脑子被驴踢了?由于早期的游戏都是先开发的XB版,没有针对PS3内存结构作调整,移植过来当然会有麻烦。现在呢?差距越来越小,反倒是PS3上的独占游戏树立标杆。从来没有人抱怨PS3内存结构的问题啊。而且你有看到PC游戏开发人员抱怨PC为什么没设计成统一内存吗?

[ 本帖最后由 ffcactus 于 2009-6-24 21:12 编辑 ]



TOP

引用:
原帖由 coolj 于 2009-6-24 20:35 发表
今天算是看见啥叫无下限了
FF大婶想追上下限代表白羽大婶才开此帖的,,


TOP

这贴居然还在扯,虚拟内存神不就是想证明神机有多高贵优越吗?自己赶紧去买一台吧,别在无机YY了。

TOP

我TMD都变成蜘蛛侠了,感情美帝海兵队里一大群蜘蛛侠

我羞愧的被自杀了

[ 本帖最后由 sniperm82 于 2009-6-24 21:22 编辑 ]

TOP

总结下吧:首先我只是在阐述PS3有使用虚拟内存的硬件条件和软件条件,过去是这个意思,现在也还是这个意思。

某些人犯的错误思想我也总结下:
1. 意淫,256MB内存无法良好运行1GB内存需求的软件,从而获取精神胜利,得出使用虚拟内存没有意义。
    错了,设计人员没你这么傻 逼。
2. 认为不管什么信息都能利用虚拟内存中的交换挪到硬盘,所以会出现每秒1砸的游戏画面。
    错了,不是所有的内容都可以交换。
3. 认为交换就把整个游戏的所有数据全部挪到硬盘。
    错了,只是一部分。
4. 认为CPU实际上是在运行硬盘中的内容。
    错了,运行的内容始终在内存中。
5. 认为效率会非常低。
    错了,只要合理运用,效果很好,效率也不低。利大于弊。

[ 本帖最后由 ffcactus 于 2009-6-24 21:33 编辑 ]

TOP

FF大神还在继续show啊。

真是佩服啊。

TOP

不带这么欺负人的!

TOP

俺在某索系主机上几个游戏项目里做过优化,以前也跟ff神“交手“过,这里只说一些可能大家都知道的事情,以及我对ff神所说的“虚拟内存”的个人理解:

1. 我们对待时间的优化都会追求极致,因为游戏里的一帧只在几十毫秒里发生,所以储存器速度逐级下降给我们带来了很大的不便:
1) 编译器在能不用内存的时候都不会去用,只用寄存器,譬如叶子函数里的局部变量。这一般叫做register allocation optimization。
2) 用主存的时候,一种推荐的做法就是cache coherency,就是保证指令和数据缓存的命中率足够高。这就是为什么遍历两维数组的时候总是每个子数组一起遍历。
3) 没有需要的时候,尽量不在游戏非loading过程中读取外部设备(光驱,硬盘)。的确需要读取的时候,也只能通过异步读取来解决,因为IO操作是中断请求嘛^_^ 只要IO操作所需要的数据并非即时必须(譬如GTA类游戏中即将但仍未需要使用的远处的场景),这就不是大问题
4) 读取外部设备的时候尽量消灭可能的磁头或光头寻道,否则带来的数十或者数百毫秒的寻道时间将会直接影响游戏性能。

如果是传统Windows意义上的虚拟内存的话,那就没有什么意义。用户态程序在访问某个虚拟内存地址的时候发生缺页中断,操作系统去读取硬盘上该程序该虚拟地址页上数据并存入物理内存的某个地址——而且这一段过程还必须是阻塞(blocking)的,因为程序很可能需要立刻操作该虚拟地址上的数据。无论是光驱还是硬盘,寻道时间加上读取时间都需要至少数十毫秒。如果缺页中断十分频繁的话,游戏中的程序跑一帧,可能就有几十次缺页中断,这样游戏的帧数就会变得很低。这种情况前面很多朋友都有类似经历。

多任务操作系统里用虚拟内存,是为了解决多任务共同进行时候的内存问题,然而在单进程的游戏机上并没有这个必要,而且系统调用和系统程序(譬如PS系的home键菜单或者XO的西瓜键菜单)都可以不需要使用。举个例子吧,MIPS系统上的用户态地址是0x00000000 - 0x7FFFFFFF。内核态的地址在这之上,是可以通过简单的与或操作对应到物理地址的。用户态地址则是通过MMU转换。但是PSP上同时只有一个用户态程序——就是你自己在玩的游戏——在跑,系统调用和系统线程都是在内核态之下。

FF神以前跟我解释过他所谓的”虚拟内存“概念,但很可惜,我认为他所说的在Xbox360上已经以HDD cache,即用户态程序自我管理的磁盘缓存而非操作系统管理的形式存在了。但是Xbox360这么做,主要还是为了避免光盘寻道这个最吃时间的怪物,所以目的上有些区别……PS3由于硬盘容量较大而且是标配,因此很多游戏都强制硬盘安装,也是为了避免光盘读取的问题。

[ 本帖最后由 Ophelia 于 2009-6-24 21:53 编辑 ]
本帖最近评分记录
  • Lucifer6E 激骚 +1 精品文章 2012-10-19 11:13

TOP

引用:
原帖由 Ophelia 于 2009-6-24 21:45 发表
俺在某索系主机上几个游戏项目里做过优化,以前也跟ff神“交手“过,这里只说一些可能大家都知道的事情,以及我对ff神所说的“虚拟内存”的个人理解:

1. 我们对待时间的优化都会追求极致,因为游戏里的一帧只在几 ...
我也认为目前PS3上没有使用这种系统态的虚拟内存管理。但我不知道是否仅仅因为效能问题,还是因为厂商做了某些规定。因为PS3上的操作系统不可能低级到不支持这一技术。能支持应该是更好才是,因为游戏中毕竟还有很多信息是对实时性要求不那么高的。或者是PS3上的编译器没这些设定?当然HDD上的cache本身也是这一概念的运用。(确切的说我认为不能称为cache,cache至少有副本,也就是内容一个在cache里, 一个在cache外)

[ 本帖最后由 ffcactus 于 2009-6-24 22:06 编辑 ]

TOP

”因为游戏中毕竟还有很多信息是对实时性要求不那么高的。“

对实时性要求低的数据,往往都可以通过预处理,作为普通的存在于硬盘上的文件读取进内存里直接使用。这也是用户程序实现的功能,和操作系统毫无关系。建议ff神去看看序列化(serialization)相关的资料……

既然实时性要求低,那就和操作系统虚拟内存的本意以及实现方式相违背,也就不能称之为虚拟内存了。我建议ff神再看清楚一下我前面所说的话。

TOP

看完tf2回来,这帖还这么欢乐

TOP

引用:
原帖由 Ophelia 于 2009-6-24 22:09 发表
”因为游戏中毕竟还有很多信息是对实时性要求不那么高的。“

对实时性要求低的数据,往往都可以通过预处理,作为普通的存在于硬盘上的文件读取进内存里直接使用。这也是用户程序实现的功能,和操作系统毫无关系。 ...
至少可以防止某些情况下系统提示内存足死机或蓝屏吧,莫非这些主机上的游戏都不动态申请内存?或者全由开发人员把握? 另外我认为操作系统实现虚拟内存不是为了“实时”,而是为了“可行”。

TOP

引用:
原帖由 ffcactus 于 2009-6-24 21:06 发表

1. PS3到底有没有用虚拟内存我都没下定论呢,我只是阐述硬件、软件的条件可能。你这么快就下定论,小心被软狗喷死。:D

2. “变相证明ps3的硬体是有缺陷导致的。通常意义上虚拟内存就是弥补物理内存不足产生的。 ...
软饭是不会喷我的因为我就是软饭。
cpu硬件上×86和×64内存寻址上是有限制的而不是简单的位宽乘积得出!其他硬件都要占用很多,主板硬件也有相当限制。软件上微软为了产品的销售刻意限制了内存的容量的使用划分产品。软件是受到容量、读取性能影响效率。不同的软件对容量是有底限的。xdr是很好的内存比那些ddr2更加快。当一个系统内存只能满足于一款软件的最低要求时此时系统就要花大量系统时间去做搬运工放到ps3时游戏肯定会有影响(pc而言最低要求言而之意就是最低效率),毕竟你们越相信ps3强大的cell xdr等高速体系下硬盘就愈加蜗牛,犹如高速公里上的拖拉机!事实上硬件是统一的而游戏是更加制作精美苛刻最终ps3固化的内存这类存储单元容量就非常的要命了。当然圆滑的xo内存器也将遇到麻烦。再谈谈pc开发人员更希望有更多内核gpu内存速度越快的pc。而现在的pc游戏动不动就是10g+硬盘、1g内存+、128mb+显存。还好pc较容易升级。游戏机就没法子了之多破破解超下频吧。ps3的开发机也是比市售的更加好。最后我也没看到ps3用到什么虚拟内存什么的,要是用了显然比xo差!因为xo还没拮据到用这种没办法的办法。

[ 本帖最后由 legendkang 于 2009-6-24 22:46 编辑 ]

TOP

[posted by wap]

我问个问题,就算神机三用的到虚拟内存了吧,现在游戏已经到了神机三内存不够用的状态了?

TOP

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