关于Librazy的某些东西

自我介绍:I’m Librazy赖博阳

十八般武艺样样稀松的高中生,就读于三明二中,OIer 伪前端攻城狮,站长,librains的作者。

心愿很小&理想很大&&一个人的路&一个人听歌&&相信那颗流星&会帮我抛开过去&&最害怕的&最想要的&&如此之近&如此之远&&在心里泛起的小小涟漪&是风吹过的痕迹

安静一点&努力一点&说好的图灵神&说好的逆袭&&被虐&被虐&被鄙视&我要去那黑暗之海&&弱者为何而战

掌握技能

不小心看了一本Flash5的书,结果越陷越深,从AS,PHP,C,VB到HTML,CSS,C#,ASP.NET,C++,还是啥都不大会。
正在努力啃黑书,做一个正经的OIer。

作为学生

就读于三明市第二中学(三明二中),标准理科生,虽然地理也还可以。
英语看rp,有的时候无压力AC有的时候死很惨。数理化理解能力超强,但状态不对也不行。记忆力不错但讨厌背书和背单词。

一般出没地点

现居三明梅列区,是三明二中的好学生。

 

出没网站

果壳网:Librazy  http://www.guokr.com/i/2022628690/

百度:封魔闪神的宣告 www.baidu.com/p/封魔闪神的宣告

腾讯微博: http://t.qq.com/librazy0598

新浪微博: http://weibo.com/librazy0598

Google+:https://plus.google.com/116889421833313889030/posts

Librazy的卡兜名片

Recent Posts

[Dr.Lib]Minecraft 服务器资源控制策略:AI 抑制而非数量限制

转载自 Minecraft 服务器资源控制策略:AI 抑制而非数量限制 · Phoenix’s island

Minecraft 的 lag 问题已经司空见惯,各种控制资源消耗和卡顿的插件也层出不穷。但是它们几乎都非常用力地在一个点上:控制实体数量。

这并不无道理,因为 Minecraft 中最消耗资源的部分就是实体。但是暴力控制实体数量会导致刷怪塔无法正常工作、掉落物清理速度过快等问题,在生存服务器中可能引发玩家的强烈不满。

所以,喵窝开发组从另一个角度做出了一些尝试。

启发

生物实体的数量巨大,主要集中的地区显然不是野外的自然刷怪区,而是玩家聚集的刷怪场、村民工程、动物养殖场等。如果不限制生物的数量和密度同时降低资源消耗,那么只能从生物实体的特性入手了。

Minecraft 最近的版本中引用了 NoAI  的 NBT Tag,带有此标签的生物将不会进行 AI 计算。换句话说,除了占用服务器内存中的一点数据,几乎不会对这个生物实体有任何其他的 CPU 算力消耗。

也就是说,实体消耗的算力资源,绝大部分都是 AI 计算的消耗。

方案

抓上一票人做了一些测试,结果证实生物失去 AI 后大幅降低了 CPU 的算力消耗。这是个 positive 的信号,但是接下来的测试则遇到了问题。

对于养殖场,等生物数量变化不大(或者说只是定期来清理并重新养殖一次)的设施,生物失去 AI 的影响很小,只有在重新繁殖时需要恢复 AI。但是刷怪塔则因为生物没有 AI,同时也被强制不受重力影响而几乎无法使用,即便同时设置 NoGravity 为 false 也无效。

开发组中 @Librazy 提到了 Spigot 的一个参数 nerf-spawner-mobs ,开启时刷怪笼生成的生物将不会拥有 AI,但是会被外界影响(例如水流和火球等)而移动。这个选项是全局的,因此不需要开启,只需要反射 spigot 中设置该功能的方法即可。

经过 @Cylin 查阅Spigot的代码,这个参数会给刷怪笼生成的实体设置 fromMobSpawner = true ,导致实体的 doTick()中跳过实体的AI处理。

于是整个方案的流程便是当服务器卡顿时抑制生物密集区的生物 AI 从而降低资源占用,同时最大程度上保证玩家对生物的需求。「服务器卡顿」的考量以服务器 TPS 而非实体数量为准,当服务器 TPS 高于一定值时即认为服务器没有超负荷,不会有任何操作,最大程度上利用硬件的性能。

实现

插件主要由开发组的 @Cylin 编写,源代码以 MIT 协议发布在 GitHub 上。

插件每隔一段时间扫描服务器的 TPS 确认运行状况,如果 TPS 低于阈值则触发 AI 控制,TPS 高于一定值且持续一段时间即认为服务器已恢复正常运行状态,自动恢复被抑制的实体 AI 减少对生存体验的影响。

实现过程中额外添加了一些额外可能被生存服务器用到的功能:

  • per-world 控制,如果玩家需要建造以仇恨为基础的小黑塔,可以关闭对末地的控制。
  • 实体总量和单区块实体密度在 AI 抑制时纳入考虑,更加精准抑制资源消耗较高的区块。

测试

yasui 插件在 毛玉線圈物語 服务器中应用测试。由于近期玩家数量爆炸式增长(日常在线 5 人到 ~30 人甚至 50 人),各种实体控制插件均告无效。yasui 插件应用后被证实数次发挥作用,没有任何实体数量限制的前提下将服务器 TPS 稳定在 19 以上,服务器实体承载数量从 ~2500 提到至接近 5000,并且还有继续提高的可能(数次触发中最高一次单世界实体记录是 4808,其他世界中仍有大约 2000 实体未被计入)。

吐槽:你们贼能刷

  1. [Dr.Lib]跑起一个TiDB 评论
  2. [Dr.Lib]各种.travis.yml 评论
  3. [Dr.Lib@ASTL]开始使用Open-Channel SSD 评论
  4. GeekyTeen Conference 青少年极客大会 2016 GeekyTeen Conference 青少年极客大会 2016已关闭评论
  5. Functional Programming For The Rest Of Us 评论
  6. [时间复杂度 Time Complexity of Algorithms 沙发已占
  7. [海韵日常]以及图集 沙发已占
  8. [时间线]一个莫名《奇妙的朋友》引发的公开博弈 沙发已占
  9. Windows 10 vs Longhorn 9 条吐槽