上篇讲完了Netcode原理和客户端网络参数,
深度教学7:从wNv被“黑”掉的世界冠军,到CS的Netcodes与客户端参数weibo.com/ttarticle/p/show?id=#_0这篇来讲讲服务器的参数和质量。
对于Tickrate概念不熟悉的朋友,建议看看上面那篇和下面这篇做一个知识储备:
Kryp:通过Tickrate告诉你CS:GO为什么是世界上最好FPS电竞游戏164 赞同 · 67 评论文章目录
Net_graph命令和网络侧信息
首先把Net_graph设置为1,我们能看到这样网络参数面板。
第一行是客户端运行情况,包括客户端FPS,客户端var,
然后是网络连接情况,
ping是延迟,
Loss:服务器下发的数据包,客户端漏接的比例,这个受服务器、通讯线路网络状态限制。
Choke:对应的是你上传的丢包。
这两个数是网络运营商线路质量决定的,除非服务器出口线路整体被拥塞。
所以上面参数是收受你电脑和网络运营商线路质量决定的,出现异常找自己电脑和网络运营商的问题去,不要怒骂服务器烂,只要不是服务器被DDOS或者出口线路整体被拥塞,与服务器质量没关系。
我下方说的服务器质量指的是计算性能。
服务器性能参数及原理
以下部分是由V社员工Vitaliy Genkin 在2014年做的技术介绍的通俗化解释。记得BOT维塔利Vitaliy吗?就是以他命名的
1.sv、var的解释
sv和sv+-:
这个参数的意思是,服务器收到一帧frame(比如128tick就是每秒128个frame)各个客户端(玩家)发过来的数据包后,需要进行运算,再把运算结果下发给各客户端。这个运算所需要的时间就是Sv,单位是毫秒ms。(1秒s=1000毫秒ms)。这个数字越低,服务器性能越好,运算越快,玩家体验就越好。
sv后面的+- 号数据,是sv值的标准差,统计样本是之前连续50个frame(tick)。标准差是高中数学知识,不知道的不解释了自行百度,简单来说可以认为是这个运算时间的偏差情况,这个数字越低,表面服务器运算速度越一致,体验就稳定一些。这个数字大,说明服务器运算不稳定,运算时间时长时短。
刚才说了,比如64tick服务器,服务器每次运算之间是1/64秒,也就是15.625ms,sv值刚才说了是服务器每次预算需要的时间,我们可以看到官匹64tick服务器现在每次运算只需要2ms多一点。那么服务器在剩下十几毫秒的时间内干嘛呢,就是休息一下(微休眠nanosleep)等下一次运算。可以理解,每个frame之间的间隔,就是运算+微休眠,总时间不能超过1/tickrate秒,否则服务器就会出现拥塞卡顿。因此我们的服务器运算时间sv上,再加上sv+-的标准差值,要确保不高于这个1/tickrate(此时微休眠时间为0)。我们看到官匹的sv+sv+-大约在3ms左右,远小于15.625ms要求。因此是没有问题的。
官匹
128tick,这一标准就要压缩到一半7.8ms左右,对服务器质量要求提高一倍。我们看到Faceit的服务器,sv+sv+-在1.5ms左右,说明服务器性能远好于官匹,自然满足7.8ms的要求。
总结就是:
64 tickrate服务器:
Sv+sv+-小于 15.625ms就满足要求,大于这个数就是烂服务器,会卡顿。
128 tickrate服务器:Sv+sv+-小于 7.8ms就满足要求,大于这个数就是烂服务器,会卡顿。
var:
那么var值呢?我们看net_graph里有两个var,上面一行fps边上的var是你的客户端var值。下面sv右边的的是服务器var值。这个var大家肯定猜到了是variation,也就是某个样本标准差,来表征离散程度的。
先插个客户端var的解释,算是彩蛋,与服务器无关:客户端var是指的你客户端每帧之间间隔的时间偏离量。比如说你平均300fps,那么每个fps之间应该是3.3ms,当然由于fps不稳定,间隔时大时小,比如你脸前没人站着不动,fps可能上400,脸前一堆烟闪雷火可能掉到200fps,那么间隔就会变化,这个var就是之前1000个frame的间隔时间的标准差,越大越不好,越小说明你电脑运算越稳定,体验越好。
那么问题来了,我们看到很多欧美职业直播的时候,明明用着超级棒的电脑,上四五百fps没问题,为什么通过fps_max命令把fps上限锁死在300呢(比如stewie2k)?
就是为了确保在任何时刻电脑客户端有过剩的运算能力,都能在3.3ms内完成预算显示下一帧,这样客户端var就会非常非常低(稳定)。如果设置成fps_mas 999,那么每个frame帧之间毫无微休眠时间,运算完了一frame直接开算下一frame,但是每个frame的运算量又不同,比如有烟闪雷火运算量就大了,自然var就上去了,客户端感觉就不顺滑一致了。因此我也是建议,如果你电脑比较好,反而可以考虑锁300的fps上限(补:2020年初valve将fps max设置成了400)。
理解了客户端var,我们来说说服务器端var,道理也是类似。因为服务器预算频率(每秒运算次数)已经设定成了固定64或者128,那么如果服务器不太烂,就一定会有微休眠nanosleep。服务器var的值就是每两次微休眠的时间间隔的标准差,统计样本是服务器上50次运算,与sv一致。
因此如果服务器性能好稳定,以64tick官匹举例,在15.6ms内,运算大约3ms,剩下12ms在微休眠,下次运算启动的时候服务器肯定是在微休眠中的,唤醒直接开算,大约又3ms以后算完再次进入微休眠,大家可以看出,如果运算时间不超过15.6ms,那么这两次微休眠之间的时间就是上次运算时间和本次运算时间的时间长度差,这个值是非常小的,标准差就更小了。比如我们官匹看到这个数基本上在0.013ms左右,faceit能做到0.002ms几乎就是等于0。这个基本上超出人能感知的上限了。
2.服务器质量评判
但是服务器如果烂,在上个tickrate间隔内,没能把运算完成呢?那这就出事了。
我们以一个假设为例,也是回答为什么官匹一直不升128的原因之一。
我们看到官匹完成一次运算大概是2-3ms之间,64tick说了15.6毫秒运算一次就可以,有大约12-13秒可以微休眠。每次微休眠之间的间隔数学期望应该就是15.6-sv,也就是12毫秒左右。但是如果现在服务器性能不变,改成128tick呢?那么每7.8毫秒就要运算一次,这个微休眠余量就变成了5ms左右。
那么问题来了,比如一个128tick的服务器运算时间,突然从稳定3ms,开始到5-20ms左右波动,那么我们发现,运算时间一旦超过了7.8ms,就会导致这个tick之内服务器没时间去开展微休眠了,下次微休眠还不知道是啥时候,也就是下次微休眠可能产生在几个tick之后,这个微休眠间隔就一下从几ms跳到几十ms,那么这个异常在50个样本里就很严重了,标准差var一下就上去了。
也就是说服务器var高,就说明服务器运行不稳定。如果var出现了红色,到了1以上,那说明服务器已经开始掉帧,可能做不到标称的tickrate了(Valve官方推荐Source引擎理论上推荐var最高不应该超过1,到2的话基本上无游戏体验了)。下图可以看到,大部分网游的服务器真实fps都是会出现波动的。以CSGO为例,如果var瞬间到了5-6ms,那么说明最近五十个休眠间隔中,平均间隔都有应该几十ms了,如果50ms,那么服务器平均帧数已经掉到了20fps,跟计划的128就差太多了,游戏体验就不用说了。
服务器质量对比
那么,我们来看看目前的各家平台,服务器质量到底怎么样。我这些都是从以前的截图库里找的截图,因此包括官匹单机Faceit,5E因为不好截图,我就去截主播的直播。对数据有异议的,也可以自己去测试。
官匹64tick:
官方休闲64tick:
Faceit:
B5
完美平台排不到人,就算了,因为跟官匹应该是同一批服务器,结果可能类似。
作为补充,也给大家看看单机什么样:
单机大负荷模式(调试模式会卡,游戏体验不用说用来做土豆服务器的参考),;
单机小负荷模式(标准单机)
5E
前两个好像是没有高端服的主播,第三个好像是SVIP。这个数据已经比我自己测的要好了。
总结如下:
官匹是合格的服务器,本身也是64tick。而且从服务器性能来讲,确实可以提升至128tick。B5和Faceit的服务器性能很好,而且很稳定。B5目前高端服务器免费用,只有成都服是普通服,其他全部是高端服了。Faceit要打APL天梯的话,需要每月交5美金。5E正常情况下,无论是普通还是高端服务器,虽然从运算速度来讲只是B5的10%,Faceit的20%,官匹的一半,但是参数依然满足要求。但是,5E普通服务器(高端未测试,我是根据SVIP的主播视频看的)不稳定的情况非常严重,短期内sv经常上到9,var别说跳过1变红了,我有时能跳到5-6,也就是说这时候已经是假128tick服务器了,运算时间达不到7.8ms的要求了,瞬间fps应该已经降到几十,甚至几十的初级阶段了。这就是为什么你烟雾瞄准了丢疵了,因为服务器不好。服务器质量,B5=>Faceit>>官匹=>5E高端>>5E普通尾声
到上面,深度教学7-8就结束了。由于很多人知道的,我个人对5E和Tyloo的不喜爱态度,可能不少人会说我在这里黑,不过各个平台都是开放的,大家自己测,如果结果你不认可,只看前面理论分析部分就可以了。欢迎探讨。
这里也发表下对各个平台运营的看法:
最早中国全国性的平台,不是现在这样的。而是o3o4o5(5E前身)作为一个服务器黄页,大家自行上去发布对战信息。然后有专业提供服务器租赁的公司(薇薇比赛服有听说过的吗?),玩家可以自己去租。这样o3o4o5运营成本不大,服务器提供商也是根据订单安排,因此都有钱赚,盈利或者维持模式没问题。
后来,在官匹缺失,需要挂收费加速器去外服打的时候,5E免费上线给大家提供服务器,确实给大家带来了很多方便,这个必须承认和感谢5E在中国CS社区中的好的贡献和作用。
但是CSGO经过在国内快速发展的3年多时间,已经进入现在这个新的阶段,很多人对游戏的需求已经从温饱有的打就行,变成追求更好的游戏体验(与“新时代的社会主要矛盾:人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾” 异曲同工)。5E的服务器质量确实落后了。在这里并不能强求5E把服务器质量提上来,那毕竟也需要很大的成本,但是玩家可以试试新的平台。
因此B5等平台包括最新的FaceIt(收费)等,已经开始给玩家提供更好体验的服务器,现在虽然人少匹配慢,但是我相信只要宣传做得好,还是会有更多的人愿意尝试的。反正我自从Faceit上线后,除了带朋友开黑之外我是没有打过5E的。B5背靠明基公司,财力相信也不会有问题,希望他们也能有所作为。
自古以来,垄断会带来服务质量的下降,这是亘古不变的经济学原理,只有强大的对手,才能促进彼此的提高。没有Android,现在的iPhone不会这么好用;没有AMD,Intel和NV还会继续挤牙膏。
希望FaceIT和B5在国内也能成长起来,来与5E互相竞争,服务质量的提升中,收益的最终还是我们玩家。
B5已经把大部分服务器默认开放成高端服了