关于mud负载和性能的分析
MUD的主要负担包括两个方面:CPU和IO。由于mudos是一个单线程程序,所以这两者会互相影响。CPU的占用率必须和IO的繁忙程度成比例,整个系统才能处于较优的状态。
北侠从1996年开始,经历了不同的阶段,服务器负载问题的矛盾也一直在转移。
96年到2000年,系统的主要瓶颈是内存。内存不足导致大量的磁盘/内存交换,低速的IO让CPU空转,而整个mud在仅仅40人在线,且绝大部分人连dazuo都是手动的情况下都不敢再加一个玩家。
随着硬件的升级,内存不再是问题。巫师在编写代码时,也不再对内存分毫必较。同时CPU性能的狂升,让计算资源也极大丰富。在socket通讯方面,100,200,300甚至到1000之前,linux都可以无太大压力的处理。所以北侠渡过了一段幸福的时期,直到2008,2009年,系统开始不稳定。
这一次的原因是堆栈溢出。而堆栈溢出的本质原因是系统中的对象太多。其实这个时候cpu和内存依然没有压力,但是原生的mudos堆栈太小,而北侠从2000年开始任务模式的丰富和地图的扩展让堆栈急剧上升。一旦堆栈溢出,系统立刻崩溃。在修改mudos的堆栈配置后,问题消失。北侠重新进入快速稳定阶段。
再后来,mudos又出现了新的瓶颈,这次是cpu的负载问题了。mudos在执行lpc时,通过各种cache极大的提升了效率。但是随着系统代码的继续扩展,cache的命中率急剧下降,最终大部分的cache都hit miss。于是mudos只能每一次都重新定位,cpu负载上升。通过扩大mudos的cache规模,这个问题解决。
这一次的负载问题的罪魁祸首再次是对象数量的继续上升。根据昨晚的统计结果,北侠的对象数量已经突破4w。这4w个对象,即便没有任何活动,没心跳,没动作,对于cpu也是一个巨大的压力。因为在每一个mudos的大循环周期中,都要对这4w个对象进行必要的检查和操作。对目前北侠的服务器来说,4w个对象已经达到极限。
所以,这一轮的优化目标就是减少系统中的对象数量,目标是2w。根据统计,在4w个对象中,房间占大约5000个,各种npc大约占1w个。其他是npc身上的衣服,武器,盔甲。房间生成的各种物品。玩家的粮食,药品,装备,金钱。主要的优化办法是两个:
第一,最直接的减少物品数量。不再掉落伏魔刀,加速尸体腐烂,hyd盗宝人死亡不留尸体,干粮,金疮药等加大重量都属于这一类。统计结果显示出强烈的长尾效应,而非8-2原理。所以相关的修改将是复杂,涉及广泛的。
第二,则是使用写时拷贝技术。对于大量没有特别属性的对象,只保留一个对象和一个计数。平时大家共享一个对象,只有当有人需要修改对象的时候,才会复制出一个对象出来。这个方法相对复杂,需要更长的时间。相比之下,第一个方法会有更快的效果。近期会有一系列针对性的调整。
北大侠客行MUD,中国最好的MUD 颜色那么难看 我给你换个 本帖最后由 ruoyu 于 2012-8-25 06:23 PM 编辑
学习中……
MUD的主要负担包括两个方面:
CPU和IO。由于mudos是一个单线程程序,所以这两者会互相影响。CPU的占用率必 ...
jason 发表于 2012-8-25 05:55 PM http://pkuxkx.net/forum/images/common/back.gif
学习完了,有这么几点疑问,真诚学习,求解答:
是不是可以说
玩家数量 和 id的不断扩容以及不断增加的新东东,导致了出现4万个对象呢?
那有没有可能从硬件方面提升性能?
比如换个更好的cpu啦,更大的硬盘或内存啦等等……
如果可以从硬件方面提升,成本是多少?
如果换硬件是有效的,那么换了硬件以后,
玩家id扩增仍然是一个不能控制的增加量,
但是不是可以控制新东西的生成,来提高新硬件的使用效率 和 使用寿命 呢? 顶,多发些这样的普及帖就好了 学习中……
学习完了,有这么几点疑问,真诚学习,求解答:
是不是可以说
玩家数量 和 id ...
ruoyu 发表于 2012-8-25 06:05 PM http://pkuxkx.net/forum/images/common/back.gif
升级硬件是最简单有效的办法。目前北侠的服务器是志强3.6G的cpu,升级的空间已经不大。我目前寻求的还是软件的办法,希望能让北侠在400玩家下稳定流畅。随着北侠持续成长,硬件升级可能还是必要的。当然,软件上实现分布式也是一个办法,只是不如买硬件那么容易。
以后的任务开发就必须要考虑会给系统新增多少对象了。也就是对象的管理会成为wiz代码的一个指标。 普及帖好,可以解除玩家对修改的疑虑 本帖最后由 ruoyu 于 2012-8-25 06:42 PM 编辑
升级硬件是最简单有效的办法。目前北侠的服务器是志强3.6G的cpu,升级的空间已经不大。我目前寻求的还是 ...
jason 发表于 2012-8-25 06:32 PM http://pkuxkx.net/forum/images/common/back.gif
谢谢解答
说实话,有些东西改的,确实影响玩家体验了,死了没尸体,太不武侠了~
那么讨论一下那个简单办法
升cpu是否需要换主板?连带有多少东西要换呢?
这一系列要换的东东,你们搞IT的应该能估出大致要换什么、要花多少钱
呃,根据费用多少,看一下玩家募捐的可能性,如果这个费用总额是在募捐的可能性之内,我觉得可以募捐一下。
既然是我提议,到时我肯定是会力所能及捐些。
或者用北侠现有的网络资金先升级部分硬件,然后2013年的网络费用再进行新的募捐? 是否可以把 萧峰任务 产生的 那个假的蒙面杀手这个设定去掉?
可以减少一定的npc数量以及物品啊。 哥们你做个分布式计算的mudos吧,然后我们多弄几台pc就行了。。。
yhzzyahoo 发表于 2012-8-25 06:40 PM http://pkuxkx.net/forum/images/common/back.gif
分布式计算确实是大杀器。而且不需要多个pc,服务器有4个核心。不过也有问题。
1. 第一是工作量比较大
2. 第二是分布式之后,有些体验会变。比如pp会变成只能在该核心所服务的区域内生效等。
实际上分布式的本质就是没一个核心负责一部分地图。玩家在地图之间移动的时候,要自动登陆到另一个核心。所以,为了避免频繁切换,还需要有一个网关核心专门负责对外登陆,同时要限制玩家跨区域的频率。任务什么的必须改,不能再天南地北了。
KOK在2000年上市的时候,就是这个架构。 去掉随机装备,每个人身上只能穿一件衣服,这样能少上万个开销了yct45
每次上线就丁零当啷地穿一堆装备,太不武侠了!