Player 【Lv:4】 正式会员 注册 2019/05/23 消息 6 金粒 1,422金粒 2020/02/22 #3 目测楼主讲的是Linux版本BDS。 只从优化来讲,很难,您要做好心里准备,主要是Linux版本BDS没有任何优化,连std::move都躺在里面,执行效率可想而知。不过您可以使用有优化的Windows版BDS,优化更好,单核用量相对小,更适合人多的服。 总的来说,BDS卡顿的解决方案大概是这样的: 1、尝试优化Linux版 由于完全没有优化,您可以尝试对bedrock_server执行perf record -g ./bedrock_server进行分析,最后使用perf report -g查找到底是什么玩意儿吃单核。为了方便,这里我把结果简单说下,BDS内部最吃单核的还是它的一个工作线程“MC_SERVER”,主要的起始函数:ServerInstance::_update,内部执行网络包解析,收发(可能是部分),世界(包括玩家、生物)定时tick,任务品种十分齐全。您需要对这个线程进行上手操作,来减少它对CPU的占用: (1)重写该线程下面的一些函数,以达到优化的目的 由于Linux版本毫无优化,可以通过逆向工程工具(比如IDA)很容易理清楚内部的逻辑。重写起来也十分方便。使用插件机制拦截BDS内部函数,转移到您自己重写并编译后的机器码上面来,这样就完成了重写工作。具体请自行学习BDS插件编写。 (2)将该线程内部的部分工作移到其他工作线程上执行 这个对分析者水平要求很高,至少要能做到把部分工作移出去还能保证BDS不炸。不过,相对于要保证游戏逻辑完全正确,这个标准已经下降了不少。 (3)使用第三方工具进行优化 同样的,这个也很困难,最可能去做这件事情的工具叫BOLT,但是由于bedrock_server这个ELF文件本身没有附带.rela.text(重定位表)节,又几乎不能根据已有的信息重新恢复它,它不符合BOLT对输入文件的要求,没办法用BOLT进行优化。另外,一些其他的工具可以去尝试,比如McSema,可以配合IDA将内部的函数“提升”到LLVM IR上,再优化写回ELF也是可能的。最后,还有更多的潜在途径需要发掘。 2、使用Windows版BDS代替 由于Windows版BDS的优化更好,您可以尝试使用Windows版BDS开服: (1)使用Windows Server 2016以上版本的服务器系统运行BDS (2)在Linux系列服务器上使用wine64 wine64允许64位Windows程序运行在Linux环境下,支持Windows版BDS。如果执行时提示缺少VCxxxx.dll或者MSVCPxxx.dll,请尝试安装VC2015运行库。如果缺少Chakra.dll,请到github上搜索ChakraCore项目,然后在“Release”栏目上下载最新的二进制DLL文件ChakraCore.dll,并改名Chakra.dll放入BDS目录下。 另外,您也可以使用诸如wine-bdlauncher这类第三方的端,使用前请自行了解潜在的麻烦与风险。 最后编辑: 2020/02/22
目测楼主讲的是Linux版本BDS。 只从优化来讲,很难,您要做好心里准备,主要是Linux版本BDS没有任何优化,连std::move都躺在里面,执行效率可想而知。不过您可以使用有优化的Windows版BDS,优化更好,单核用量相对小,更适合人多的服。 总的来说,BDS卡顿的解决方案大概是这样的: 1、尝试优化Linux版 由于完全没有优化,您可以尝试对bedrock_server执行perf record -g ./bedrock_server进行分析,最后使用perf report -g查找到底是什么玩意儿吃单核。为了方便,这里我把结果简单说下,BDS内部最吃单核的还是它的一个工作线程“MC_SERVER”,主要的起始函数:ServerInstance::_update,内部执行网络包解析,收发(可能是部分),世界(包括玩家、生物)定时tick,任务品种十分齐全。您需要对这个线程进行上手操作,来减少它对CPU的占用: (1)重写该线程下面的一些函数,以达到优化的目的 由于Linux版本毫无优化,可以通过逆向工程工具(比如IDA)很容易理清楚内部的逻辑。重写起来也十分方便。使用插件机制拦截BDS内部函数,转移到您自己重写并编译后的机器码上面来,这样就完成了重写工作。具体请自行学习BDS插件编写。 (2)将该线程内部的部分工作移到其他工作线程上执行 这个对分析者水平要求很高,至少要能做到把部分工作移出去还能保证BDS不炸。不过,相对于要保证游戏逻辑完全正确,这个标准已经下降了不少。 (3)使用第三方工具进行优化 同样的,这个也很困难,最可能去做这件事情的工具叫BOLT,但是由于bedrock_server这个ELF文件本身没有附带.rela.text(重定位表)节,又几乎不能根据已有的信息重新恢复它,它不符合BOLT对输入文件的要求,没办法用BOLT进行优化。另外,一些其他的工具可以去尝试,比如McSema,可以配合IDA将内部的函数“提升”到LLVM IR上,再优化写回ELF也是可能的。最后,还有更多的潜在途径需要发掘。 2、使用Windows版BDS代替 由于Windows版BDS的优化更好,您可以尝试使用Windows版BDS开服: (1)使用Windows Server 2016以上版本的服务器系统运行BDS (2)在Linux系列服务器上使用wine64 wine64允许64位Windows程序运行在Linux环境下,支持Windows版BDS。如果执行时提示缺少VCxxxx.dll或者MSVCPxxx.dll,请尝试安装VC2015运行库。如果缺少Chakra.dll,请到github上搜索ChakraCore项目,然后在“Release”栏目上下载最新的二进制DLL文件ChakraCore.dll,并改名Chakra.dll放入BDS目录下。 另外,您也可以使用诸如wine-bdlauncher这类第三方的端,使用前请自行了解潜在的麻烦与风险。
SnowPea8072 【Lv:3】 注册 2020/01/31 消息 29 金粒 2,045金粒 2020/03/01 #5 3601594248 说: 亲,升级配置是最好的选择哦~:wink: 点击展开... 对不起,想要优化的话要么自己改,要么换成windows开服
NameMicrobe7931 【Lv:2】 注册 2021/12/30 消息 93 金粒 3,773金粒 2023/04/11 #7 赛扬G3900,带七八个插件延迟直接干到一万多,还是本地开服,爽爆了