回复
151
查看
8453
收藏
53
UID: 203664

27

赠楼

145%

赠楼率

2502

蒸汽

245

主题

2085

帖子

6155

积分

Gaming is boring.

▘干渴水滴▘成人学生卡

发表于 2021-3-1 18:02:44 | 显示全部楼层 |阅读模式

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+2/-0

本文为 tukana 经「其乐」发布的原创(翻译)文章,未经许可,严禁转载
本帖最后由 tukana 于 2021-3-1 21:19 编辑

今天Hacker News首页第一名的文章:《如何将GTA Online的加载时间缩短70%》


背景和分析



原作者应该是很久没玩过GTA线上模式了,他最近想上游戏看看新增了哪些内容,却发现这个模式的加载过程依然像六年前那样十分漫长。作者翻看了一些网上的讨论,都将这个问题归因于“游戏内容过于庞大”,或者“P2P网络的原因”,但他觉得这个问题并没有那么简单,于是想一探究竟。

作者首先用任务管理器简单查看了线上模式的整个加载过程。他奇怪地发现,在完成单人游戏内容的加载后,游戏的多人部分加载仅仅是在利用CPU的单核性能,几乎没有磁盘读取、没有内存写入、也没有网络活动。要知道对于一个网络游戏来说,这一点非常奇怪。

由于无法看到源代码,作者接下来使用一个十年前的古老工具Luke Stackwalker来进行堆栈采样,试图从调用树进行分析。他发现,造成性能瓶颈的原因不是一个,而是两个(但此时还不知道具体的原因是什么)。

随后,在借助了工业界级别的逆向工具,以及x64dbgProcess Dump的帮助后,作者发现了游戏在数据结构上存在着低级缺陷:

低级缺陷一:



1、线上模式在加载时,会从大小为10MB左右JSON数据中解析出游戏内所有可购买的物品,数量大概为63000个;

2、编写这部分解析代码的某位天才工程师,在代码中使用的是sscanf()和strlen(),更为奇葩的是,他可能使用的取值方法,是在这个10MB大小的字符串中进行逐个字符的遍历

低级缺陷二:

1、将某个物品从JSON中解析出来之后,游戏会将它存储在数组或者列表中(事实上这一步是完全没必要的,见后);

2、然而在存储之前,这位(或另一位)天才工程师遍历了整个数组,并且根据物品的哈希值来进行重复性检查。那么,既然每个物品都有不同的哈希值,为什么不使用hash map呢?

3、事实上,由于在加载JSON之前,整个所谓的哈希数组都是空的,而且每个物品的哈希值都不同,那么根本就不需要检查这件物品是否在数组中!更夸张的是,R星的这位(或另一位)天才工程师甚至还专门写了个函数来处理物品的插入。

解决方案



基于以上分析,原作者给出了解决这两个问题的方案:

1、将strlen()进行hook;
2、等待长字符串;
3、将字符串的开始和结束进行“缓存”;
4、如果在字符串的范围内再次被调用,返回缓存值。

对于上面讨论的缺陷二,直接跳过重复性检查即可。

完整的代码:https://github.com/tostercx/GTAO_Booster_PoC

如果有兴趣的话,你也可以自行使用这个补丁:git clone以上代码后,使用MSVC编译整个工程得到DLL文件,然后在游戏启动时,使用DLL注入器将其注入到游戏中。

注意:由于涉及到和外挂类似的DLL注入,因此风险自负。

在使用这个补丁后,线上模式的加载时间减少了70%。

太长不看版



1、线上模式启动时存在CPU单核性能的大量占用;

2、分析发现其原因是游戏在加载时,会解析一个10MB左右大小的JSON数据;

3、R星某位天才工程师将这个解析器做得十分低效;

4、解析之后还存在一个完全没有必要的物品重复性检查。

后续



查看原博文可以点击此处,里面有更详细的技术细节。

这篇文章在今天的Hacker News上位居热度第一,里面的讨论也颇为热烈。显然,当一款游戏加载时,大多数玩家并不会关心这个过程的背后,如果时间太慢,也只会觉得这个游戏过于庞大,或者自己的机器性能不好。但对于GTA5这种体量的游戏,仅仅是因为一个菜鸟级别的数据处理方法,就让全世界数以千万的玩家在这六年里浪费了70%的加载时间,不由得让人感叹。不知道R星是否会推出后续补丁来修复这个问题。

评分

参与人数 12体力 +27 蒸汽 +7 动力 +7 收起 理由
UID: 581249 aoxu + 1 给dalao递体力
UID: 209945 neowell + 2 优秀资料
UID: 1338772 清尘轩少 + 1 乐于助人
UID: 268394 天坑世界 + 3 优秀资料
UID: 217733 DC_LangX + 2 优秀资料
UID: 841150 cvisy + 2 亦可赛艇
UID: 221942 xdrh + 2 优秀资料
UID: 598302 生存并突击 + 2 乐于助人
UID: 758770 Ai_shuang + 2 真的有毒
UID: 179519 Dark淡藍 + 1 除了牛逼,我能说什么

查看全部评分

回复

使用道具 举报

当然支持啦
本帖热门回复
landwet | 支持 +15 评分 (体力 +4) 发表于 2021-3-1 18:23
好家伙 编写这部分的是真"天才"... 10mb左右大小的字符串 来用strlen来获取长度 CPU:我可tm谢谢你啊 来自 #11
Avaloner | 支持 +7 评分 发表于 2021-3-1 20:45
一个人浪费一分钟,全班六十个人就是浪费一个小时 来自 #54
wsz987 | 支持 +5 评分 发表于 2021-3-1 18:10
多少人因为看云时间太长 被劝退了
[表情]
试想 这个问题解决了 相当于给给她爱打了肾上腺
[表情]
gta6 删除 如果这个问题解决了 那么gta6我也觉得无所谓了
[表情]
薛定谔的gta6
来自 #4
UID: 1268262

0

赠楼

0%

赠楼率

444

蒸汽

40

主题

1625

帖子

1001

积分

发表于 2021-3-1 18:06:04 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+0/-0

有没有人统计下一共浪费了多少时间
回复 支持 +2

使用道具 举报

UID: 307657

1

赠楼

1%

赠楼率

228

蒸汽

36

主题

1705

帖子

1259

积分

▘车资存根▘慧眼独具

发表于 2021-3-1 18:09:44 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 973554

6

赠楼

1%

赠楼率

123

蒸汽

525

主题

6004

帖子

3562

积分

其乐牌手扶 嘟~嘟~嘟~

▘慧眼独具▘车资存根▘片十字花瓣

发表于 2021-3-1 18:10:58 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+9/-0

本帖最后由 wsz987 于 2021-3-1 18:17 编辑

多少人因为看云时间太长 被劝退了
试想 这个问题解决了  相当于给给她爱打了肾上腺gta6 删除

如果这个问题解决了  那么gta6我也觉得无所谓了  薛定谔的gta6
[发帖际遇]: wsz987 不会数 3,被 G 胖选中入职 Valve,喜加体力 1 点 幸运榜 / 衰神榜
回复 支持 +5

使用道具 举报

UID: 227377

0

赠楼

0%

赠楼率

900

蒸汽

51

主题

1476

帖子

2043

积分

老板,来份老婆饼不要饼

发表于 2021-3-1 18:12:47 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 934736

0

赠楼

0%

赠楼率

491

蒸汽

5

主题

420

帖子

812

积分

▘车资存根▘慧眼独具

发表于 2021-3-1 18:14:31 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+6/-0

啊,希望r星能更新个补丁。不过我觉得够呛
回复 支持 +

使用道具 举报

UID: 219972

0

赠楼

0%

赠楼率

521

蒸汽

6

主题

405

帖子

619

积分

发表于 2021-3-1 18:15:52 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 1197174

41

赠楼

4%

赠楼率

408

蒸汽

125

主题

4169

帖子

5712

积分

想成为有用的人

▘慧眼独具▘片十字花瓣▘车资存根

发表于 2021-3-1 18:19:40 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+3/-0

我记得哪个游戏有开发者就说修bug就是在原有的shit上加更多shit

点评

恐怕还不只一人吐过这种苦水...  发表于 2021-3-1 20:49
回复 支持 +

使用道具 举报

UID: 343393

0

赠楼

0%

赠楼率

160

蒸汽

1

主题

1024

帖子

1337

积分

▘慧眼独具

发表于 2021-3-1 18:21:16 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+1/-0

希望能修复了,基本上玩过的朋友都会吐槽加载慢。
回复 支持 +

使用道具 举报

UID: 260128

0

赠楼

0%

赠楼率

904

蒸汽

44

主题

530

帖子

1264

积分

发表于 2021-3-1 18:23:04 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+5/-0

网络游戏很多都是类似,不停地加新东西而不优化架构,原有的架构一般没为后续海量的新内容作预留和优化,所以问题会越来越严重。
回复 支持 +2

使用道具 举报

UID: 1240734

0

赠楼

0%

赠楼率

131

蒸汽

0

主题

21

帖子

148

积分

发表于 2021-3-1 18:23:09 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+0/-0

好家伙 编写这部分的是真"天才"...  10mb左右大小的字符串 来用strlen来获取长度  CPU:我可tm谢谢你啊

评分

参与人数 1体力 +4 收起 理由
UID: 562534 桥本爱 + 4 亦可赛艇

查看全部评分

回复 支持 +15

使用道具 举报

UID: 546573

0

赠楼

0%

赠楼率

1033

蒸汽

7

主题

362

帖子

1319

积分

发表于 2021-3-1 18:42:41 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+0/-0


好厉害啊
[发帖际遇]: sdysyhj 和 V 社员工 PY 成功退款了不符合资质的游戏,喜加体力 1 点 幸运榜 / 衰神榜
回复 支持 +

使用道具 举报

UID: 598976

20

赠楼

0%

赠楼率

174

蒸汽

77

主题

3462

帖子

2109

积分

▘慧眼独具▘车资存根

发表于 2021-3-1 18:45:26 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+34/-0

真天才,游戏加载慢的原因找到了
回复 支持 +

使用道具 举报

UID: 1399554

0

赠楼

0%

赠楼率

25

蒸汽

0

主题

13

帖子

38

积分

发表于 2021-3-1 18:47:55 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+0/-0

不明觉厉
[发帖际遇]: LangoDark 千辛万苦抢到的测试 Key 转正了,获得体力 1 点 幸运榜 / 衰神榜
回复 支持 +

使用道具 举报

UID: 294783

30

赠楼

3%

赠楼率

380

蒸汽

91

主题

1331

帖子

1300

积分

▘车资存根

发表于 2021-3-1 18:48:59 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+16/-0

浪费了不少时间
[发帖际遇]: shubin 在 Steam 喜加一的行为受到 G 胖赞赏,喜加体力 1 点 幸运榜 / 衰神榜
回复 支持 +

使用道具 举报

UID: 1412120

6

赠楼

28%

赠楼率

179

蒸汽

17

主题

811

帖子

306

积分

发表于 2021-3-1 18:49:29 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 248922

46

赠楼

2%

赠楼率

925

蒸汽

258

主题

4949

帖子

4426

积分

▘片十字花瓣

发表于 2021-3-1 18:51:41 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+17/-0

好的 明天 来R星那上班。这补丁直接成为官方更新 提升玩家载入时间吧
回复 支持 +

使用道具 举报

UID: 187691

212

赠楼

3%

赠楼率

757

蒸汽

347

主题

3766

帖子

3628

积分

▘片十字花瓣▘车资存根

发表于 2021-3-1 18:52:37 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+5/-0

不会是收了硬件厂商的黑钱把
回复 支持 +

使用道具 举报

UID: 230026

0

赠楼

0%

赠楼率

2046

蒸汽

0

主题

184

帖子

2130

积分

▘成人学生卡

发表于 2021-3-1 18:52:42 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+0/-0

线上的很多相似bug反复出现甚至无法修复,都是源于底层代码的缺陷,而想解决就基本等于重做游戏
如果对这类信息关注多的话,应该早就看过上面这条结论 (毕竟我玩线上也就不到2年时间)
所以这些问题会在今年的新版gta5得到解决嘛?吃瓜看戏就完了~
回复 支持 +

使用道具 举报

UID: 1263180

4

赠楼

2%

赠楼率

271

蒸汽

6

主题

1098

帖子

559

积分

发表于 2021-3-1 18:54:02 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 947051

16

赠楼

3%

赠楼率

304

蒸汽

129

主题

1万

帖子

3464

积分

盐于律己,甜以待人

▘车资存根▘片十字花瓣▘慧眼独具

发表于 2021-3-1 18:54:56 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 1301410

0

赠楼

0%

赠楼率

52

蒸汽

12

主题

1328

帖子

1024

积分

▘慧眼独具

发表于 2021-3-1 18:56:46 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 293897

13

赠楼

2%

赠楼率

877

蒸汽

109

主题

4478

帖子

4215

积分

育碧奖励国区换为光之子

▘成人学生卡▘片十字花瓣▘车资存根

发表于 2021-3-1 19:02:26 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+12/-0

这个类似于下了本10M的txt小说用系统自带记事本打开的酸爽吧
回复 支持 +

使用道具 举报

UID: 1231751

3

赠楼

6%

赠楼率

1

蒸汽

30

主题

709

帖子

577

积分

发表于 2021-3-1 19:02:52 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+3/-0

我玩了800h+的GTAV,估计至少有几十个小时在看云
回复 支持 +

使用道具 举报

UID: 1066373

0

赠楼

0%

赠楼率

101

蒸汽

0

主题

395

帖子

1025

积分

▘车资存根

发表于 2021-3-1 19:08:14 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+0/-0

gta5挺好玩的,就是每次想到那漫长的加载时间就会让我放弃打开这游戏
[发帖际遇]: pzmonly 肉身跨区填错申报单被征税,被海关人员退税体力 1 点 幸运榜 / 衰神榜
回复 支持 +

使用道具 举报

UID: 370344

61

赠楼

6%

赠楼率

424

蒸汽

214

主题

2865

帖子

4478

积分

大哲♂学家

▘慧眼独具▘成人学生卡▘片十字花瓣▘车资存根

发表于 2021-3-1 19:10:28 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+11/-0

我还以为云端体验是连不上R星服务器的中国玩家的独享服务
回复 支持 +

使用道具 举报

UID: 673248

0

赠楼

0%

赠楼率

834

蒸汽

32

主题

1974

帖子

1854

积分

呦咿~呦咿~咚~哒哟~

发表于 2021-3-1 19:12:05 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+0/-0

狙击手RiCkY 发表于 2021-3-1 18:23
网络游戏很多都是类似,不停地加新东西而不优化架构,原有的架构一般没为后续海量的新内容作预留和优化,所 ...

没错,说的就是炉石传说BUG英雄传,近两年炉石的BUG以每个大版本为基础呈几何倍数的增长
[发帖际遇]: Morphina 在古埃及骑上了他心爱的彩虹小马,喜加体力 1 点 幸运榜 / 衰神榜
回复 支持 +

使用道具 举报

UID: 800143

0

赠楼

0%

赠楼率

406

蒸汽

5

主题

2107

帖子

1667

积分

乌拉

发表于 2021-3-1 19:13:02 | 显示全部楼层

资料 加好友 聊天 库存 截图 好友 群组 愿望单 评测 信誉+8/-0

好家伙,当初浪费了我多少时间,看云模拟器不是盖的
回复 支持 +

使用道具 举报

UID: 47565

0

赠楼

0%

赠楼率

2372

蒸汽

16

主题

1404

帖子

4201

积分

▘密钥涂层▘十字花瓣

发表于 2021-3-1 19:14:36 | 显示全部楼层
回复 支持 +

使用道具 举报

UID: 1386231

0

赠楼

0%

赠楼率

214

蒸汽

41

主题

3891

帖子

767

积分

发表于 2021-3-1 19:17:02 发自移动设备 - 你的掌上 其乐Keylol 社区 | 显示全部楼层
回复 支持 +

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

欢迎发帖参与讨论 o(*≧▽≦)ツ,请注意
1. 寻求帮助或答案的帖子请发到问题互助版块,悬赏有助于问题解决的速度。发错可能失去在该板块发布主题的权限(了解更多
2. 表达观点可以,也请务必注意语气和用词,以免影响他人浏览。如觉得违规可使用举报功能 交由管理人员处理,请勿引用对方的内容。
3. 开箱晒物交易中心游戏互鉴福利放送版块请注意额外的置顶版规。
4. 除了提问帖和交易帖以外,不确认发在哪个版块的帖子可以先发在谈天说地

  作为民间站点,自 2004 年起为广大中文 Steam 用户提供技术支持与讨论空间。历经十余载风雨,如今已发展为国内最大的正版玩家据点。

列表模式 · · 微博 · Bilibili频道 · Steam 群组 · 贴吧 · QQ群 
Keylol 其乐 ©2004-2021 Chinese Steam User Fan Site.
Designed by Lee in Balestier, Powered by Discuz!
推荐使用 ChromeMicrosoft Edge 来浏览本站
广告投放|文字版|手机版|其乐 Keylol ( 粤ICP备17068105号-2 )
GMT+8, 2021-4-11 09:23, PE: 0.063219s , QE: 45, Redis On.
快速回复 返回顶部 返回列表