小樱 发表于 2023/2/10 23:59

一些游戏的读盘策略,机械盘优化io性能稀烂,就算用PrimoCache也拯救不了磁盘速度

一些游戏的读盘策略,机械盘优化io性能稀烂,就算用PrimoCache也拯救不了磁盘速度

点名消逝的光芒2
问题所在
大部分游戏都是这个逻辑,例如打开一个背包,背包里面有300个道具,背包道具文件假设在ziyuan.vpk中,ziyuan.vpk里包含了5000个所有的道具模型和贴图等,文件总大小10G。
但是游戏就是傻傻的,例如读取800KB-801KB,2MB-2.1MB这样,不会进行组合式读取,导致打开背包要随机触发300次访问磁盘,后续缓存到进程内存中,这种做法是没有命中率的,所以磁盘活动会100%。

这点应该学习比特彗星1.96,优化长效上传磁盘缓存策略,提高命中率,减少读盘次数(一次性取16MB区块,不在是随机读取磁盘了)
https://www.cometbbs.com/t/195%E6%B5%8B%E8%AF%95%E7%89%88/77383/133
其实我觉得长效上传的缓存效率目前不高,,,因为我最多大概就占用2G过,然后看读取缓存次数和实际读盘次数都是100多次每秒,疯狂读盘,不知道能不能一次取16M做缓存内存块来优化。
例如一个100MB文件完整为1234567891011121314151617181920------100
用户访问目标为其中22-100的位置,那么就取17-32,33-48—以此类推作为缓存块?
用户后续访问第23,24,25,26个MB时候,直接调用17-32的缓存结果,这样应该有效提高命中率?
一个100MB的文件作为长效上传,16MB一个区块,实际读盘应该为7次。

其中一台服务器,,,命中率不超过40%,,现在的长效缓存,反正感觉很奇怪

怎么说呢,可能一般人看不懂我在说什么,,,总体就是太多游戏都有这个毛病了,期待游戏厂商去更新优化,还不如期待后续PrimoCache能更新改善这个问题,来提高命中率解决游戏首次访问卡顿的毛病。

BAKAAAAAA 发表于 2023/2/11 09:32

原来如此。
那如果不是机械盘的话,会有同样问题吗。

还有小白想问一下,
读取的方式是一定跟程序相关吗,比如说游戏代码让读300次,那执行读取操作的时候,硬盘就一定会读300次吗。

小樱 发表于 2023/2/11 09:41

BAKAAAAAA 发表于 2023/2/11 09:32
原来如此。
那如果不是机械盘的话,会有同样问题吗。



游戏代码读取300次文件分别在不同位置的话,硬盘实际会发生读取300次。
假设如果读取的是1个道具300次,硬盘实际发生是1次,因为会缓存起来。
固态硬盘iops很高,可以承受每秒10000次甚至更高的读取次数,使用SSD一般就不会发生这种现象了。

328508474 发表于 2023/5/25 16:57

PrimoCache有二级缓存啊,固态分出一个区化做机械硬盘二级缓存,游戏玩几遍基本就缓存到固态里了,重启二级缓存也是实时的,不用重新加载。不管用吗?

小樱 发表于 2023/5/25 18:02

328508474 发表于 2023/5/25 16:57
PrimoCache有二级缓存啊,固态分出一个区化做机械硬盘二级缓存,游戏玩几遍基本就缓存到固态里了,重启二级 ...

二级缓存是有效的,但是这种做法比较适合网吧
页: [1]
查看完整版本: 一些游戏的读盘策略,机械盘优化io性能稀烂,就算用PrimoCache也拯救不了磁盘速度