Soft_Job 板


LINE

※ 引述《alihue (wanda wanda)》之铭言: : 原始文章: 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 是sscanf的function里会呼叫strlen,也不是一次读一个char。 https://opensource.apple.com/source/xnu/xnu-792/libkern/stdio/scanf.c.auto.html 虽然不知微软如何implement sscanf,不过应该大致相同。 这10mb的json是一个string。回圈里的sscanf会读一个item(key:value)。 所以这个parser里的strlen的complexity是 strlen(10mb)+strlen(10mb-length(key:value))+strlen(10mb-2*length(key:value)...... 这回圈会跑63k次。很不幸的一个quadratic time的parser就出现了,因为程式师不知sscanf里有strlen。 GTA的insert也是quadratic time,但这真的蠢,有code review应该都会抓的到 无论如何,json parser不应该自己写。 https://github.com/simdjson/simdjson - 最快的parser https://rapidjson.org/ - 实际上快又准确,最多人建议的parser https://github.com/nlohmann/json - 好用也多人建议的parser google 一下,有超多的选择。 上面任何一个都可以在几秒(0.几秒吧)内处理完10mb 63k的json。 而现在优化的GTA还是需要快一分钟处理!对sscanf is slooooooow。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.216.27.86 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1617027914.A.8CD.html
1F:推 alihue: 谢谢补充说明 03/29 22:25
2F:→ nh60211as: 所以这算是自己造轮子失败的案例吗 03/29 23:11
对,游戏业的习惯,喜欢自己造轮子。十几二十几年前,因为各种限制,造轮子还有道理,现在还不趁机导入业界好用的lib就是怠惰了。
3F:推 jasonwung: 推 03/29 23:43
4F:推 viper9709: 原来是这样 03/30 00:00
※ 编辑: oopFoo (59.115.98.214 台湾), 03/30/2021 10:52:24
5F:推 dreamnook: 03/30 14:14
6F:推 Barchem: 推 03/30 14:44
7F:推 tsairay: 怕找开源的lib商用要付钱吧 03/30 18:13
8F:→ oopFoo: mit/bsd/apache license的libs超多,这几个json libs都是 03/30 18:36
9F:推 hduek153: 推 03/30 19:43
10F:→ superpandal: 这事情有应不应该? 不过M$就不说了 03/30 19:53
11F:→ superpandal: 不过 XD 03/30 20:07
12F:推 OppOops: 事实上我认为他是用 recursive 的方式去处理 json 03/30 21:48
13F:→ OppOops: 所以才会重复展开 sscanf 03/30 21:49
15F:→ oopFoo: 很早就知道sscanf有strlen的问题。 03/30 23:03
16F:→ oopFoo: 跟重复展开无关 03/30 23:04
17F:推 wangm4a1: 推 04/01 16:09







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