PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

谈大容量内存的各种使用方案对磁盘效率影响

  [复制链接]
201#
jeffxl  楼主| 发表于 2012-10-8 13:27 | 只看该作者
你再好好想想吧。我没言语

去学习一下什么是缓存,你还没有懂。

热数据统计也不是你想象的那么呆板,统计是“经验积累的”的,通过IO读取频率做记录,是长期积累并统计IO次数频率总和做优先级列表维护,符合概率学原理。

你谈的都不符合可操作性原则,纰漏太多,不可能被业界执行。

202#
jeffxl  楼主| 发表于 2012-10-8 13:48 | 只看该作者
本帖最后由 jeffxl 于 2012-10-8 13:56 编辑
变心金刚2 发表于 2012-10-8 11:15
系统怎么知道游戏中的那些数据将会成为热数据?游戏的所谓“经常读取的热数据”是没有标准的也没有时间范 ...






这是一家50台机器的小型网吧,游戏大概在500G,服务器16G内存,2G用来缓存无盘镜像,11G用来缓存游戏内容(命中率91%),全部为热统计模型下的缓存,基于命中率算法。

其中游戏有162个,每天络绎不绝的玩家会玩不同的游戏,其中只有9%是未命中从磁盘读取,其他平均91%的IO全部从内存直接并发。


按您说的,服务器是怎么知道整个网吧的玩家玩的什么游戏?某游戏中某玩家会干什么?


我说了至少5次了,任何建立在热统计下的缓存都是透明缓存,对应用对用户透明,用户感觉不到他存在,应用也是,缓存不关心数据内容是什么,那只是一些经常访问的0和1而已,判定逻辑甚至可以不在用户端,只关心数据在哪发生IO。你说现在读5次的IO地址后面就不读了?很简单,很快这些数据会被淘汰,在计数统计中会被其他数据超越,永远缓存您最可能访问的数据。随着时间的流逝,这种命中率无限提高的倾向越来越大,因为您说的突然读5次以后不读的现象在相当长的一段时间片内趋向于忽略不计,你以后不读这数据,那么他的计数就是5次,5次IO对于一个经过时间"学习命中率"后的缓存热度列表可以忽略不计,譬如1天内,早有其他IO被读取几万次了,服务器从缓存维护列表中根本不会鸟那突然读的5次以后就不读了的问题,不会去缓存他。


想通了吗?不存在缓存了啥就浪费了什么几G空间问题,缓存是被动检测并驻留数据,所有被缓存的数据都是您曾经的有效IO请求,如果出现次数高,就会在某次再出现时被缓存直接指挥驻留到RAM中,并不需要主动去“缓存”。您还在混淆预读和缓存的概念。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
203#
mcszjs 发表于 2012-10-8 14:12 | 只看该作者
jeffxl 发表于 2012-10-8 13:48
这是一家50台机器的小型网吧,游戏大概在500G,服务器16G内存,2G用来缓存无盘镜像,11G用来缓存游戏 ...

jef版真有耐心啊,跟他说了这么多。今天上来又看到这么多的码字回复。其实我说你可以别管他了,我看他根本就只是拼命的想证明你错了而已,但却一点也不想想自己那种想法究竟有没有问题或者是不是有地方错了,你跟他说再多他都听不进去。我反而获益良多啊。

我觉得你现在就像跟个小学生谈循环小数0.999…=1,而他就一直用小学的数学知识向你证明0.999…不等于1一样,根本谈不下去嘛,都没在说同样的东西。
204#
CHN 发表于 2012-10-8 14:44 | 只看该作者
变心金刚2 发表于 2012-10-8 11:15
系统怎么知道游戏中的那些数据将会成为热数据?游戏的所谓“经常读取的热数据”是没有标准的也没有时间范 ...

几个G的缓存量还不够命中?那CPU才几十K至多几M的缓存,那怎么说,您也觉得这是绝对不会命中的?纯粹瞎浪费资源么?缓存显然是有很大作用的,不然您把CPU缓存关了试试~~
205#
变心金刚2 发表于 2012-10-8 15:07 | 只看该作者
jeffxl 发表于 2012-10-8 13:27
你再好好想想吧。我没言语

去学习一下什么是缓存,你还没有懂。

缓存的场合不同,套用不在游戏上。激光枪想法是好,但是没法为单兵装备上战场。
游戏从一开始就在不断读取数据,对于系统而言根本不清楚哪块数据将会成为此游戏中的热数据——系统不先缓存怎么知道将来哪块将会经常被游戏读取呢?于是这内存的开销就已经太庞大了。然而这只是保留了知悉热数据可能性而已,接下来就是我上面说的由于没有任何可参考的时间,场景范围于是漫无目的吞噬内存……还可能你都玩了半个小时在缓存中还没有可被系统认定为的“热数据”因为访问次数还都差不多,内存倒是快见底了,系统却在不断循环往复,无依据地缓存和丢弃,能否命中完全是在撞大运。还会做出重复缓存游戏已缓存的数据的傻事,所以包括Win7不太可能会去干这种吃力不讨好的活儿,只是用户的愿望。
只有游戏自身统筹安排,设计者知道比如开始到半程哪些场景,任务,台词,装备对应的数据块是重复率最高的,可高效缓存明显改善体验的,然后主动向系统申请内存来作为缓存,然后随着游戏进程的推进抛弃一些读取可能性较小的再缓存一些必要的读取高概率的读取,此时如果你要用到需要读取但被抛弃的缓存数据,那么对不起只能再读硬盘,该慢的还得慢,但这已经是能做到的最高效的缓存了,不需要系统帮忙,系统也帮不上。
206#
变心金刚2 发表于 2012-10-8 15:14 | 只看该作者
jeffxl 发表于 2012-10-8 13:48
这是一家50台机器的小型网吧,游戏大概在500G,服务器16G内存,2G用来缓存无盘镜像,11G用来缓存游戏 ...

系统无法判断所谓IO请求次数高低因为那对系统而言是未知的游戏,没有时间范围的概念怎么能判断游戏所请求的IO高与低?
207#
jeffxl  楼主| 发表于 2012-10-8 15:42 发自PCEVA移动客户端 | 只看该作者
IO计数无关用户逻辑,那些货对缓存来说不是游戏,只是热代码。计数是一直积累,时间越久概率越聚合
208#
变心金刚2 发表于 2012-10-8 16:28 | 只看该作者
本帖最后由 变心金刚2 于 2012-10-8 16:35 编辑
jeffxl 发表于 2012-10-8 15:42
IO计数无关用户逻辑,那些货对缓存来说不是游戏,只是热代码。计数是一直积累,时间越久概率越聚合 ...


那Win7怎么知道对于一个未知的游戏而言该在其进程请求IO多久之后开始根据其这段时间中请求的次数分出热数据?几秒钟还是几分钟得出?然而其实那可能只是你在一片游戏初始地域内的活动,游戏一早就将此区域存在内存之中了,系统再缓存实质是浪费内存做无用功,可能等你不知何时需要时这些热数据已被抛弃,或者你已经先行退出游戏了。
如果是FPS游戏,使命,战地之类缓存有什么用呢?但若Win7的缓存机制真如你所说,那么Win7依然会找热数据,而重复占用内存!
但事实上微软恐怕不会这么干这么高消费低效率的事。


209#
jeffxl  楼主| 发表于 2012-10-8 17:45 | 只看该作者
变心金刚2 发表于 2012-10-8 16:28
那Win7怎么知道对于一个未知的游戏而言该在其进程请求IO多久之后开始根据其这段时间中请求的次数分出热数 ...

这样说吧,缓存的工作就和上班族白领一样:
白领刚进公司不熟悉公司业务范围和企业文化,每天需要使用很多纸质文档工作(各种报表或者其他)。这些东西在你刚进入公司时都来源于公司各种部门或者各种地方,并不在你手边的办公桌上。

工作2天后,最近有一些文档经常需要阅览和编辑,你认为它们是最常用的,就把他放在办公桌的手边上,便于随时使用查阅或编辑。其实你不知道,在1个月或1年的粒度当中,这其实就是这2天才用这些文档而已。经过1个月的工作实习,你发现刚开始经常使用的2篇文档你认为当时很常用,2天翻阅多次,后来28天却没动过(业务需要而已),浪费了办公桌的面积资源。你就发现一个经验,从这一个月的各种文档使用量做30天的平均加权使用率才是合理的。

1年后,其实你发现最初1个月统计出的常用文档在1年中的后11个月却也都不常用,这就是概率学问题了。那么这次统计整年的全部文档操作次数后,你用365天的各种文档的使用频率平均加权使用率来安排你办公桌上的文档放置规划才是合理的,这符合资源概率最优化。

其实经过1年的“经验学习”你找到了办公桌如何在1年这个时间粒度上发挥最大桌面效益的方式,而一般公司业务不会每年更换,但有季度和月份使用频次差异。所以你找到了1年这个粒度最有效率的办公桌面利用方式和方法。

至此,通过1年的工作经验搜集,您的办公桌在1年这个粒度上,文档访问命中率高达90%,虽然某个月或者某天的命中率可能低一些,但您知道这不影响您1年当中的整体工作效率,不会为那些“命中率毛刺”效应改变您1年经验才学习来的规划方式。

但是虽然年命中率已经高达90%,桌子上已经是公司业务的精华文档,使用起来已经非常顺手,大部分常用资源就被您安排在身边,不需要从其他地方去取。但是!但是,桌面面积是有限的,想再提高1%的使用效率,已经碰到使用面积效率递减效应,剩下那10%没命中的部分,非常难以安排,文档的种类分布非常广泛,把桌子面积再增加一倍以后可能增加了2%的使用命中率可以置换和优化的面积增加1倍但是需要计算的最优资源属于剩下的那些最不经常访问的文档,你很难再筛选出谁更容易使用,看起来都不太经常使用。
210#
jeffxl  楼主| 发表于 2012-10-8 17:49 | 只看该作者
缓存系统工作是类似的,命中率需要一个学习过程,我们叫做命中率爬坡阶段。越往后,资源概率越集中化。效益对时间成正比关系在增长,收益和资源占用量关系是效益递减的。但就算如此,目前也是唯一最优的资源IO压力分散方案(全局普适,非谈特定极端)
211#
jeffxl  楼主| 发表于 2012-10-8 18:02 发自PCEVA移动客户端 | 只看该作者
举例中,桌面相当于缓存,桌面面积是缓存容量。白领自身是缓存管理,学习过程是缓存算法学习和命中爬坡阶段。人的经验是不断累计,相当于基于时间粒度的自学习过程,统计经验的时间片段只有开始,没有结束,随着经验的丰富,效率越来越高。
212#
mcszjs 发表于 2012-10-8 18:27 | 只看该作者
变心金刚2 发表于 2012-10-8 16:28
那Win7怎么知道对于一个未知的游戏而言该在其进程请求IO多久之后开始根据其这段时间中请求的次数分出热数 ...

我真忍不住,你就别来现你的下限了好不好?连数据和程序的层次都分不清还要跟jef版瞎扯。

版大说了那么多次,系统根本不管也不用知道你下次究竟要什么数据,他只是从一开始就一直统计着所有读过的数据的重复机会,然后把重复机会最大的那些,从高到低排好,你内存空了多少出来,他就把那些重复机会大的扔进去,扔到把空的内存差不多填满为止。缓存这块上面,系统管你什么用户什么程序,他直接就只对数据来干活,你总扯程序和用户行为干什么?看这么多楼,我觉得你就不是想跟版大正经的讨论,根本只是歪搅蛮缠而已。
213#
变心金刚2 发表于 2012-10-8 20:26 | 只看该作者
本帖最后由 变心金刚2 于 2012-10-8 20:32 编辑
jeffxl 发表于 2012-10-8 17:49
缓存系统工作是类似的,命中率需要一个学习过程,我们叫做命中率爬坡阶段。越往后,资源概率越集中化。效益 ...


不用举别的例子,实实在在地针对缓存游戏来讲:你学习的过程是要花时间的,人家早已开始玩了。你学习的东西是要被抛弃的,因为你的热数据太多内存不可能装下所有热数据,系统抛弃的不是冷数据也是热数据只因为内存装不下了!所以很可能用户重复时已经抛弃了而存着的时候却一直没用到,而且留下的即便是有用的缓存也可能是重复游戏的缓存,本来就由游戏装入内存里了,游戏本身所占用的内存也包括干这个的,如果多占用你那缓存的3G内存能有效率游戏自己就多申请3G了。你想能剩多少效率?
不想一再重复了,实际操作很简单:
你认为Win7玩使命召唤感觉会比XP快或者流畅吗?试一试
XP安装缓存软件玩游戏你觉得你会感觉更流畅吗?试一试
214#
jeffxl  楼主| 发表于 2012-10-8 22:03 发自PCEVA移动客户端 | 只看该作者
变心金刚2 发表于 2012-10-8 20:26
不用举别的例子,实实在在地针对缓存游戏来讲:你学习的过程是要花时间的,人家早已开始玩了。你学习的东 ...

我大概知道您在纠结什么了。你根本不想讨论缓存效益问题。

在这种关卡载入型的fps游戏里,当前关卡需要的数据基于进程资源占用可控的原则,一般设计为在载入时一次性载入当前关卡需要的资源数据。游戏关卡运行中并不是像魔兽那样是做无缝地图,资源即时读写。所以在关卡载入时就已经造成当前关卡资源已经在进程所在的私有地址空间里了。

这种游戏IO模型并不依赖外部缓存来提高游戏中的IO体验,无非IO体验的区别就是关卡载入速度这和你之前有没有载入过这个关卡有关,如果之前您载入过这个关卡,那么二次载入时的速度会比SSD还快。如果比的都是首次载入当前关卡,那么比的是磁盘IO能力。所以这里只有二次载入关卡这里有缓存效益。

这例子无法证明谁的缓存系统好,你原则的论据非常给力。因为你谈的是游戏中的效益,这和缓存优劣并不相关,没有相关性和依赖性。


拿完全没有缓存相关性的论据,论证和缓存效率无关的事,作证您的观点。这个论证方式和方法您相当的精明啊。我有点服了。

所有举证最没有缓存效益的案例,这无关任何操作系统。不能证明缓存系统的效率。

其实任何人都可以用意淫法来反驳我比如说假设xp的文件复制效率比win7高,以此证明win7的缓存系统没xp优秀,这也是可以拿来忽悠的论据。其实一般的人可能就认了。其实仅仅是两个系统的复制算法改变导致的,这个也你也可以去查查。


你的例子是同理,你刚才的范例可以在游戏载入时比拼IO能力,这样的论点可以去做。但是这种关卡游戏,在游戏中连IO请求都很少,基本当前关卡资源已经全部载入内存中运行了,这里无论什么系统,甚至和IO能力都没有任何关系,更不谈有没有缓存的影响了。
215#
dfgy1234 发表于 2012-10-8 22:20 | 只看该作者
帝国时代 WIN7 64位可以完美运行 还支持大分辨率 不相信?去帝国时代论坛有解决插件
216#
刘佐 发表于 2012-10-8 22:30 | 只看该作者
举手问一下LZ FancyCache For Disk (Beta)
只开启缓存写用来缓解SSD R0的写入压力可行么?
217#
jeffxl  楼主| 发表于 2012-10-8 22:34 | 只看该作者
本帖最后由 jeffxl 于 2012-10-8 22:55 编辑
刘佐 发表于 2012-10-8 22:30
举手问一下LZ FancyCache For Disk (Beta)
只开启缓存写用来缓解SSD R0的写入压力可行么? ...


可以,但延迟写的缓存数据在没有回写到磁盘前的风险需要您自己考虑好。

丢失的不仅仅是当次没有回写的数据风险,假设文件分配表的改写或者分区表的改写逻辑还在缓存中没有回写,或者是半回写状态,此时掉电产生的元数据丢失风险会导致你损失磁盘或者分区上的所有数据,这个风险远大于没有第三方延迟写时的风险。

如果您的R0是基于性能导向的,个人数据,或者不可能二次获取的数据不在此阵列,那么可以拿风险换性能,数据丢了再下载安装就是了,比如R0游戏盘。
218#
刘佐 发表于 2012-10-8 22:48 | 只看该作者
本帖最后由 刘佐 于 2012-10-8 22:51 编辑
jeffxl 发表于 2012-10-8 22:34
可以,但延迟写的缓存数据在没有回写到磁盘前的风险需要您自己考虑好。

丢失的不仅仅是当次没有回写的数 ...


3块M4 128G 组建的
16G内存划分4G进行延迟写入
用于系统安装以及游戏盘

数据条带大小 4K 正确么?
219#
jeffxl  楼主| 发表于 2012-10-8 22:53 | 只看该作者
变心金刚2 发表于 2012-10-8 20:26
不用举别的例子,实实在在地针对缓存游戏来讲:你学习的过程是要花时间的,人家早已开始玩了。你学习的东 ...

再谈,这种关卡一次性资源载入的方式,操作系统的缓存按既定算法一般也不会缓存这种数据。很有可能读一次就不会再读,不过每个关卡的引擎通用数据时共用的,在连续玩几个关卡后,每次读条的共同部分显然会被缓存拦截下来做热数据比对,如果比缓存列表的最冷数据热 ,那么就可以保留。

您的这些游戏案例本身就不符合全局有利性原则,而缓存是基于命中率统计的,所以本身就自动不缓存这些数据反而是合理的,您不觉得这种原则下设计的缓存本身很“聪明”吗?

为什么您非要把这些数据要求或猜测系统缓存在RAM里面?其实有利性原则已经规避了您说的无知的无差别缓存的情况,并不违反有利性原则。

之前讲过太多次,假设现在缓存欠载(刚开机,在命中率爬升阶段),任何可能的IO都为以后可能的命中目标。在缓存没有满载前,确实会做无差别被动填充,这不是浪费,因为还没有“经验”数据,缓存还有剩余容量,而且填充过程是随着应用IO无开销免费获得的。直到缓存满载后就开始热数据排序过程了,通过热度优胜劣汰算法命中率开始稳步爬升。您说的奇怪的缓存载入没有意义的一次性IO的浪费根本不会出现

而您假设会缓存这些内容,我早说过这种算法并不呆板,如果您考虑到这些纰漏导致命中率损失(您说的这种无差别缓存以后都不会用的数据,就是下一次永远不会命中的命中率损失),那么缓存的设计理念早就推翻了。您要知道基于热数据统计的缓存原理是久经考验的。
220#
jeffxl  楼主| 发表于 2012-10-8 23:00 | 只看该作者
刘佐 发表于 2012-10-8 22:48
3块M4 128G 组建的
16G内存划分4G进行延迟写入
用于系统安装以及游戏盘


这种搭配,文件系统元数据非常容易丢失就是了。运气不好,2到3次非正常关闭操作系统都会导致你丢失全部数据,特别是操作系统盘,后台进程回写多,这会产生大量的半回写状态,大量系统文件被改写某个部分,剩下在磁盘的部分仅从磁盘上看根本就不是以个2进制严谨的程序,如果此时非法关闭操作系统(包括掉电什么的),您至少会因为关键系统文件不可读而导致系统无法再次启动。这个风险还和文件系统元数据丢失重叠,也就是说您“出事”的几率还是很大的。

非要这么用,就纯游戏盘使用还稍微强点


而且,见您是SSD的R0。实话说,不会有任何使用区别,增加了巨大的风险(延迟写风险非常大)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部