Soft_Job 板


LINE

原始文章: https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/ 如何减少 GTA Online 70% 载入时间? 作者觉得 GTA Online 载入时间机八久,因此想要一探究竟 首先作者做 benchmark 发现 Story mode load time: ~1m 10s Online mode load time: ~6m flat 然後看看 cpu usage 同时在这段时间燃烧 第一步,作者先做 profiling 可以得知哪一些 function 占了最多 CPU 资源 第二步,用 disassembler 去看程式码 问题1. It’s… strlen?! 好像会 parse 一个高达 10MB 的 json 档案,其中包含 63k items 这些资料是游戏中的线上商城的 问题不是 10MB,而是读取资料的方式 https://i.imgur.com/ZHLlEDJ.png
读法是用 sscanf 一次读一个 char,读完马上呼叫 strlen, 再继续读下一个 char.... 然後当要读的档案有 10mb 这麽大就有很重的 overhead 更新: 这段是错的 请见另一位版友回文 问题2. Let’s use a Hash- … Array? 有一段 code 是读取资料,判断是否存在 array 中 (linear scan),然後储存 然後如果资料有 ~63k,则会有 1984531500 次判断,然後大部分没用 为什麽不用 hash map!!!! POC 作者写了一个 .dll 然後 inject 到 GTA 问题1.解法; - hook strlen - wait for a long string -“cache” the start and length of it - if it’s called again within the string’s range, return cached value 问题2.解法; 移除重复的判断,然後直接塞值 (因为已经知道值一定唯一) 结果: 效能增进 70% 最後 GTA 开发商采用了这个,并给出 10k 的奖金 --- 心得 觉得这篇的 troubleshooting 思考脉络与技巧非常强 很值得细读 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 106.73.26.66 (日本)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1616858969.A.62A.html
1F:推 ms0529876: 推 03/27 23:44
2F:推 APTON: 推 03/28 06:36
3F:推 ab4daa: 威 没有source 还能加速 03/28 11:27
4F:推 hduek153: 菜鸡表示strlen看不太懂 有人能解释一下吗 03/28 12:35
好像是当读取 10MB 的 JSON,读法是用 sscanf 一次读一个 char, 读完马上呼叫 strlen,再继续读下一个 char.... 然後当要读的档案有 10mb 这麽大就有很重的 overhead
5F:推 tomap41017: 干谁写的烂扣 03/28 12:40
※ 编辑: alihue (106.73.26.66 日本), 03/28/2021 12:48:33
6F:→ fr75: 卖了几亿的公司只发了一万镁赏金 帮QQ 03/28 12:53
※ 编辑: alihue (106.73.26.66 日本), 03/28/2021 12:57:49
7F:推 peterbrucele: 看到linear scanf就头疼... 03/28 19:32
8F:→ peterbrucele: 更正 scan 03/28 19:32
9F:推 jasonwung: 厉害推 03/29 00:07
10F:推 viper9709: 推卖了几亿只发一万赏金XD 03/29 01:21
11F:推 Ofianse: 然後拿着这头衔看看能不能多赚几百万镁 03/29 02:01
12F:推 Sindragosa: 赞 03/29 10:13
13F:推 zrna0515: 推 03/29 10:58
14F:推 fbid: 所以每次strlen出来都是1? 03/29 18:12
15F:→ shooter555: 应该是加快strlen吧 先做好string cache 然後判断str 03/30 17:02
16F:→ shooter555: ring是哪一份cache里的就直接回整份cache的长度 就不 03/30 17:02
17F:→ shooter555: 用跑原本strlen一个字一个字判断结尾的动作 03/30 17:03
18F:→ shooter555: 话说用strstr会不会快一点 03/30 17:17
19F:→ shooter555: 前面看错了 他只是靠static cache前一次的point 03/30 17:18
20F:→ alihue: 我对於 strlen 那段理解是错的,详情请看另一篇版友回文 03/30 17:38
※ 编辑: alihue (106.73.26.66 日本), 03/30/2021 22:08:45
21F:→ ce173310: 既然确定是parse json,就可以省略检查有没有重复的步 04/08 21:38
22F:→ ce173310: 骤 04/08 21:38







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP