プレイヤーごとの予算
自分で負荷を増やしている人だけ、混雑中は描画距離を短くします。それ以外の人は一切制限しません。
プレイヤーごとの予算は、リージョンが重すぎるときに 誰が 譲るべきかを決める仕組みです。Storia 26.2-1-beta からは、 「自分で負荷を増やしている人だけ」になりました。初期地点のような混み合った場所で、立っている・建築している・歩いている だけの人は、一切制限されません。
その場所自体の重さ(トラップやモブの群れ)は Tick Guard が受け持ち、プレイヤーではなく群れの処理を減らします。
制限される人#
次の 両方 に当てはまるとき、確認のたびに描画距離を 1 段階ずつ下げます。
- そのリージョンが予算オーバー。 1 ティックの処理が
max-region-mspt(45 ms)を超えている。または、サーバーの ティックスレッドが満杯(pool-saturated-percent、85%)で、そのリージョンがプレイヤーの人数分の取り分より多く使っている。 - 本人が高速で移動している。
fast-mover-speed(毎秒 12 ブロック。ダッシュより速い)を 2 回続けて超えている。 エリトラでの飛行や、速い乗り物などです。高速で移動すると、サーバーは新しいチャンクを大量に読み込み、生成し、送ることになります。
速度が落ちるか、リージョンが回復すれば、確認のたびに 1 段階ずつ戻します。2 回続けて速い必要があるので、1 回のテレポートでは制限されません。
回路は動き続けます
初期設定では シミュレーション距離は一切変えない ので、プレイヤーの周りのレッドストーン、トラップ、モブは動き続けます。 描画距離もシミュレーション距離より下げることはありません。
描画距離を下げられるのは、シミュレーション距離との間に余裕がある場合だけです。server.properties で:
view-distance=10
simulation-distance=6
lower-simulation-distance#
player-budget:
lower-simulation-distance: true
min-simulation-distance: 4
高速で移動している人のシミュレーション距離も、先に 下げるようになります。CPU をより多く節約できますが、下げている間は、 その人から新しい距離より遠くにある装置は止まります。
メモリ#
CPU とは別に、Java のヒープを GC の後の値 で見ています。memory-high-percent(85%)を超えると全員の描画距離を
1 段階ずつ下げ、memory-low-percent(70%)を下回ると戻します。メモリはサーバー全体で共有しているので、全員が対象になるのはこの場合だけです。
計測結果#
Tick Guard を切って、リージョンが重い状態を保ったまま計測しました。Alice は止まっていて、Bob は毎秒 20 ブロックで移動しています。
| プレイヤー | 速度 | 描画距離 |
|---|---|---|
| Alice | 毎秒 0 ブロック | 10 のまま(制限なし) |
| Bob | 毎秒 20 ブロック | 移動中に 10 → 9 → 7 |
状態を見る#
/storia budget
Player budget (checked every 5s)
Tick threads busy: 100% (saturated: busy regions thin out crowds more)
Share per player: 33% of a thread
Heap after GC: 9%
Alice: region 60.6 MSPT, 16.1 TPS, 98% thread, 2 player(s) | 0 blocks/s | sim default, view default
Bob: region 60.6 MSPT, 16.1 TPS, 98% thread, 2 player(s) | 20 blocks/s | sim default, view 9
設定#
設定 (storia.yml) の player-budget の表 を参照してください。オフにするには:
player-budget:
enabled: false