• 【问卷调查奖励发放公告】

    感谢大家积极参与本次 MineBBS 社区问卷调查。200 金粒的参与奖励已完成发放。部分用户发放失败,请【点击此处】 查看详情。

讨论 如何优化bds服务端

  • 主题发起人 主题发起人 HLGMC
  • 开始时间 开始时间

HLGMC

【Lv:4】

正式会员
注册
2019/01/08
消息
80
金粒
1,288金粒
开服后CPU占用常常很高
 
亲,升级配置是最好的选择哦~:wink:
 
目测楼主讲的是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这类第三方的端,使用前请自行了解潜在的麻烦与风险。
 
最后编辑:
如果CPU占用高的话改一下服务器端时距
 
赛扬G3900,带七八个插件延迟直接干到一万多,还是本地开服,爽爆了
 

在线会员

  • Loliiiico
  • 浩朋
  • XingZi_Nina
  • 小白开水
  • 魑魅 魍魉
  • 绯色月下
  • sssjiu
  • linghun91
  • 师哥
  • 肆无忌惮
  • 予地以花
后退
顶部 底部