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

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

  [复制链接]
61#
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
62#
jeffxl  楼主| 发表于 2012-10-8 15:42 发自PCEVA移动客户端 | 显示全部楼层
IO计数无关用户逻辑,那些货对缓存来说不是游戏,只是热代码。计数是一直积累,时间越久概率越聚合
63#
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倍但是需要计算的最优资源属于剩下的那些最不经常访问的文档,你很难再筛选出谁更容易使用,看起来都不太经常使用。
64#
jeffxl  楼主| 发表于 2012-10-8 17:49 | 显示全部楼层
缓存系统工作是类似的,命中率需要一个学习过程,我们叫做命中率爬坡阶段。越往后,资源概率越集中化。效益对时间成正比关系在增长,收益和资源占用量关系是效益递减的。但就算如此,目前也是唯一最优的资源IO压力分散方案(全局普适,非谈特定极端)
65#
jeffxl  楼主| 发表于 2012-10-8 18:02 发自PCEVA移动客户端 | 显示全部楼层
举例中,桌面相当于缓存,桌面面积是缓存容量。白领自身是缓存管理,学习过程是缓存算法学习和命中爬坡阶段。人的经验是不断累计,相当于基于时间粒度的自学习过程,统计经验的时间片段只有开始,没有结束,随着经验的丰富,效率越来越高。
66#
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能力都没有任何关系,更不谈有没有缓存的影响了。
67#
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游戏盘。
68#
jeffxl  楼主| 发表于 2012-10-8 22:53 | 显示全部楼层
变心金刚2 发表于 2012-10-8 20:26
不用举别的例子,实实在在地针对缓存游戏来讲:你学习的过程是要花时间的,人家早已开始玩了。你学习的东 ...

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

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

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

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

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


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

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


而且,见您是SSD的R0。实话说,不会有任何使用区别,增加了巨大的风险(延迟写风险非常大)。
70#
jeffxl  楼主| 发表于 2012-10-8 23:16 | 显示全部楼层
刘佐 发表于 2012-10-8 23:15
R0组建的目的是用于提升游戏的读取速度以及应用程序意外崩溃的情况下重新启动所耗费的时间。。。

Hearts ...

很遗憾的告诉你,组了R0和没有组R0并没有游戏读取速度上你能感受到得区别。其他的也是相同。
71#
jeffxl  楼主| 发表于 2012-10-8 23:33 | 显示全部楼层
变心金刚2 发表于 2012-10-8 20:26
不用举别的例子,实实在在地针对缓存游戏来讲:你学习的过程是要花时间的,人家早已开始玩了。你学习的东 ...

另外,我还怀疑,您说关于使命8上你大致相当于问我WIN7会不会比XP上更快?

IO体验在压力超越磁盘性能时产生效益,最大可能的减少二次重复数据IO导致的随机瓶颈产生的卡顿。由我上两贴说明,这类游戏在游戏中几乎没有IO资源载入请求,因为在关卡载入时就已经完成,也就是说游戏中的IO压力远低于HDD的磁盘随机性能,也就是说磁盘IO能力不为瓶颈。那么试问在一个各种操作系统下都不会产生游戏中IO瓶颈的场景,如何评价哪个系统会更快?

您想问我的更快是指的什么?怎么个快法?IO不是瓶颈时都无卡顿,因为几乎没有游戏中的IO压力,难道WIN7神奇的缓存还可以提高FPS?IO能力也许会影响到FPS,当磁盘能力不足卡顿时确实会瞬间拉低FPS,基于材质渲染和材质载入有相关性的原因,材质没及时送到现存,当然下一帧画面渲染就要等待。

但是!但是,您的场景里,我已经分析此场景不是IO能力受限的场景。您是想说那些并不需要的,多余的IO性能会提高FPS吗?不是IO瓶颈的预设场景,利用IO能力增加FPS几乎是不可能的。所以您想试问我XP因为没有动态缓存效益会不会比WIN7慢,或者哪个游戏速度因为缓存方式方法不同而产生游戏性能差异的情况根本就不成立。

作为IO体验来说,如果压力并不超越磁盘加上缓存系统的能力,那么不会出现卡顿这种现象(SSD的BUG除外),不存在在满足了IO需求后有"更快”的体验这种说法。这和计算力设备影响巨大的FPS评价相当不同,FPS可以随着计算力设备的性能升高而量化评价运行效能的高低。而磁盘整体IO能力在具体体验上的评价只能说满足了业务/应用需求后就达成部署合理的条件,并不像游戏FPS有线性量化评比。而磁盘性能跑分又正好不能说明这些问题,这也是现在SSD在家用性能过剩的依据,因为只有满足了IO需求就已经不会体验到IO问题导致的“卡顿”,您无法评价出满足了需求后“IO体验更流畅”是个什么概念。

譬如IO需求在磁盘性能的1倍以上时,用户体验为非常卡顿,满足到80%以上时,很可能就是有限的流畅,有时卡顿。满足此应用需求100%需求时,您有更好的IO能力,并不能再应用当中体现出量化效益,那些磁盘性能空着也就空着了,它就是不用,因为应用不需要。而游戏FPS在没有垂直同步时,计算力是有多少用多少,这是可量化于不可量化的区别!

72#
jeffxl  楼主| 发表于 2012-10-8 23:36 | 显示全部楼层
所以我很好奇,您是如何提问,问我在计算力设备不变,又完全没有磁盘压力的游戏场景下,仅因为缓存效益导致的IO能力大量过剩,而能够评价出游戏快慢的区别?  这个命题留待您来解决,但是计算力设不可变更,必须是同设备,仅系统不同而已。我想不出来

我实在想不出如何量化评价。
73#
jeffxl  楼主| 发表于 2012-10-8 23:39 | 显示全部楼层
刘佐 发表于 2012-10-8 23:24
不解,为什么?
毕竟能提供的读取和随机读取完全不在一个级别上了啊.

低QD的随机性能变化不大,应用程序的执行(包括应用的启动)所需要的资源SSD和操作系统是不可预测的,比如启动QQ,您认为逻辑上他就在一个文件夹里,可是在SSD上启动QQ的数据可能分布在1000个不同的位置,完成应用的启动需要随机寻址1000次,而且一般用户的QD深度不高,更而且压力远不够满载单个SSD的磁盘性能。

普通用户的IO线程复用度在1-3之间。

所以只有磁盘性能过剩和更过剩的区别,能YY的是双R0阵列的复制粘贴文件速度,仅此而已。
74#
jeffxl  楼主| 发表于 2012-10-9 14:23 | 显示全部楼层
变心金刚2 发表于 2012-10-9 03:40
缓存只是手段,目的是改善游戏的体验,缓存的价值如果不能体现在游戏中也可以体现于其他方面,但若在游戏 ...

您根本就不懂Cache到底是什么,不是您想让他干什么就干什么,Cache只对自己的热数据统计算法负责(这和您的所有人为想干预过程的想法相左),但并不影响这是目前最好的IO压力分散方式。您根本就不懂什么是Cache,如果您一直停留在某种机制可以无差别减少IO的情况,所以我认为这个话题没有继续讨论的必要。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部