クライアントがサーバーにデータを要求する頻度。
単位はper second、デフォルトでは20となっている。 単純に考えると
1000 / 20 = 50ms
最大で50msの待ち時間が考えられる。平均値を取って約25ms。 最大値の100にすれば
1000 / 100 =10 ms
と理論上はLatencyを減らすことができる。しかしサーバーによってはChokeが発生する原因ともなる。
これをあげるとnet_graph 3での
Inの値のレートが大きくなっていることに気づく。
標準ではsv_maxupdaterate 60とサーバー側の
上限があるので60以上も意味がないかもしれない。
とりあえず20はISDNやモデムの設定、とのことらしいので
20 – 60程度の間で適当に決めるのがいいかもしれない。
ただしChokeが出るようだったら 下げたほうがいいだろう。
クライアントがサーバーに送るコマンド(操作全般)の頻度。
単位はper second、デフォルトでは30となっている。
これをあげるとnet_graph 3でのOutの値のレートが
大きくなっていることに気づく。
cl_cmdrateが低すぎると送信するコマンドが多いときにラグを感じる。
具体的にはcl_cmdrate 10で
武器をカチャカチャ切り替えながら走ってみればわかる。
これも大きすぎるとサーバーに負荷がかかる。
これも30 – 60程度の間で適当に。
転送速度の設定。単位は Byte/S。単純に考えると6000だと6Kbyte/s、48Kbps必要な計算になる。
rateだけを上げてもあまり意味がない。この設定を転送量が超えるとchokeとなる。
試しにrate 1000、cl_updaterate
100、にしてみればChokeが100ぐらいになり、Latencyが 大幅に増えるのがわかるはず。
ただしローカルで試す場合はサーバーを
sv_lan 0にしないとクライアントのrateが無視されるようだ。
サーバー側ではsv_maxrate、sv_minrate
で上下限が決められている。あまり上げてもサーバーに負荷がかかる。
ADSL以上の回線ならなら6000以上はあった方がいい。
LANなら25000ぐらいにしといて問題ない。
また、サーバーがsv_lan 1の場合、rateは適切な値に設定される。
実際の転送速度はrateを基準に
が採用される。
fpsの上限。HLエンジンの仕様で100が上限。
Vsyncをオンに設定している場合は、Refresh rateの制限もつく。
ネットワークに関わらず、スペックがあるなら100にしておくべき。
通信はクライアント、サーバーのfpsにも基づいている。
よってfpsが低いとかなりLatencyが高くなる。
試しにfps_max 20程度に設定してみれば
Latencyがかなり増えることがわかるはず。
1000 / 100 =10 ms
fps100でも1フレーム10msなので、50切ってるようだったらLatencyよりまずは新しいPCを買うべき。
オンラインでのfpsの制限。 0にしておかないと、そのfpsに制限されてしまう。
pingboost | cl_updaterate | cl_cmdrate | fps_max | latency(ms) | in(k/s) | out(k/s) | in | out |
---|---|---|---|---|---|---|---|---|
0 | 20 | 30 | 100 | 12 | 1.52 | 1.78 | 57 | 36 |
0 | 30 | 40 | 100 | 9 | 1.7 | 1.85 | 39 | 30 |
0 | 60 | 60 | 100 | 18 | 3.39 | 3.12 | 34 | 27 |
0 | 100 | 100 | 100 | 18 | 3.67 | 5 | 34 | 24 |
0 | 100 | 100 | 20 | 28 | 1.7 | 1.18 | 34 | 24 |
0 | 10 | 100 | 100 | 29 | 0.98 | 4.49 | 34 | 25 |
0 | 100 | 10 | 100 | 18 | 1.2 | 0.85 | 34 | 51 |
2 | 20 | 30 | 100 | 14 | 1.39 | 1.65 | 39 | 34 |
2 | 30 | 40 | 100 | 7 | 1.7 | 1.83 | 34 | 30 |
2 | 50 | 40 | 100 | 6 | 2.25 | 2.15 | 39 | 30 |
2 | 60 | 60 | 100 | 7 | 2.7 | 2.7 | 39 | 29 |
2 | 100 | 100 | 100 | 8 | 3.85 | 5.49 | 34 | 24 |
2 | 100 | 100 | 20 | 23 | 1.78 | 1.31 | 34 | 25 |
2 | 10 | 100 | 100 | 15 | 1.01 | 4.72 | 34 | 28 |
LAN上でのLatencyと設定の対応表を作ってみた。
サーバーはLAN内にあってPen!!!800 / RAM 256MB / Linux hlds_l_3110。
オプションは
-game cstrike +maxplayers 20
+map de_aztec -nomaster +sv_lan 1 -pingboost 2
0の方は-pipngboost無しで起動。
+showscoresで最も安定したLatencyを書いた。
In-Outは静止した状態でのnet_graph 3の値を書いた。
実際のゲームではもっと多くの数値になる。
サーバーはsys_ticrate 100。fpsは常に100出てると思う。
sv_lan 1なのでrateは制限されない。
クライアントもfps_maxの値は常に出る。
Latency自体あまり安定しなく、不正確なので表もけっこう不正確。
まずfps_max 20においては、Latencyがかなりあがる。
またcl_updaterate、cl_cmdrate
が100であるにもかかわらずIn-Outは、
cl_updaterate 20、cl_cmdrate 30の
値より小さくなっている。
もしかするとfps以上の送受信は行われないのかもしれない。
Pingboostを使用した場合は、明らかにLatencyが小さくなる。
やはりサーバー側のfpsの影響が高いことがわかる。 標準よりLatencyが10ほど低くなる。
updaterate、
cmdrateは100にすればいい、というわけではないようだ。
100にしておくとrateが足りなくて、多くのサーバーでchokeが発生する。
実際にサーバーにつないで最適な値を見つけるのがいいかもしれない。