Folia et ses dérivés

Sous Folia et ses dérivés (Canvas…), chaque groupe de chunks chargés est une région qui tique à part. VoxelBench mesure chaque région et la région globale, les liste en jeu avec /bench regions, et dit de quelle région parlent ses chiffres de TPS et de MSPT.

Les régions en quelques mots

Folia découpe chaque monde en régions : des groupes de chunks chargés voisins, avec leurs joueurs et leurs entités. Chaque région tique de son côté, sur l'un des fils de l'ordonnanceur des régions de Folia : une région peut ramer pendant que les autres tournent à 20 TPS. Les régions fusionnent quand leurs chunks se rapprochent et se scindent quand ils s'éloignent ; chacune a un identifiant, qui change à chaque fusion ou scission.

La région globale est à part : elle exécute ce qui n'appartient à aucun chunk (heure, météo, tâches globales, commandes de la console). Elle ne possède aucune entité : elle ne peut pas compter elle-même les entités ou les chunks d'un monde.

Un « TPS du serveur » unique a donc peu de sens sous Folia. VoxelBench donne :

  • la pire région, le TPS médian des régions et le nombre de régions en retard (sous 18 TPS) ;
  • la région globale : son TPS, la durée moyenne de ses ticks et son utilisation ;
  • l'utilisation de chaque région et le total, rapporté à la capacité des fils de l'ordonnanceur (un fil = 100 %). L'utilisation est la part du temps qu'un fil a passée à faire tourner la région, tâches entre deux ticks comprises — le chiffre du /tps de Folia. Elle peut dépasser 100 % de très peu.

Voir les régions

/bench regions [monde] [page]
/bench regions tp <id>
/bench regions gui

/bench regions affiche la synthèse (régions, régions en retard, pire TPS et TPS médian, région globale, utilisation sur la capacité, TPS de la région où vous êtes), puis chaque région, les pires d'abord, 8 par page : identifiant, monde, bloc central (les coordonnées du /tps de Folia), joueurs, entités, chunks, TPS, durée de tick moyenne / 95e centile / pire, et utilisation. Ajoutez un nom de monde pour n'afficher que ses régions, et un numéro de page pour parcourir la liste (ou cliquez sur les flèches). Les chiffres couvrent les 15 dernières secondes.

Un joueur qui a voxelbench.regions.tp voit un lien [Téléporter] après chaque région : il lance /bench regions tp <id>, qui téléporte au centre de la région, debout sur le bloc le plus haut (dans le Nether, dans le premier espace libre sous le plafond de bedrock). L'endroit doit être sûr : aucun liquide aux pieds ni à la tête, un sol solide qui n'est ni de la lave ni du magma. Au-dessus d'un océan, d'un lac de lave ou du vide de l'End, il n'y en a pas : la commande le dit au lieu de téléporter. Une région fusionnée, scindée ou déchargée depuis l'affichage est refusée avec un message : relancez /bench regions ; une téléportation refusée par le serveur est signalée aussi.

Le même contenu existe en écran : /bench regions gui, le lien [Ouvrir l'écran], ou le bouton Régions (Folia) de l'onglet Monitor de /bench gui. La synthèse est en haut, puis un objet par région, coloré selon son TPS ; un clic y téléporte (avec voxelbench.regions.tp).

Sous Paper et Spigot, qui font tiquer tous leurs mondes sur un seul fil principal, /bench regions et son écran disent que le serveur n'est pas régionisé et donnent son TPS et son MSPT sur la dernière minute.

Permissions : voxelbench.regions pour voir les régions, voxelbench.regions.tp en plus pour s'y téléporter (ce n'est pas un enfant de voxelbench.regions). Voir Permissions.

Comment VoxelBench mesure les régions

  • Tick par tick. Folia émet son événement de fin de tick à la fin de chaque tick de région, sur le fil de la région. L'unique écouteur de ticks de VoxelBench demande à Folia quelle région tique et ajoute le tick à la fenêtre de cette région : TPS, durée de tick moyenne, 95e centile et pire tick, ticks au-delà de 50 ms, secondes sous 18 TPS. Les régions sans joueur (fermes, chargeurs de chunks) sont mesurées comme les autres.
  • Par les rapports de Folia. L'utilisation, la durée d'un tick de la région globale et le nombre de fils viennent des rapports que Folia tient pour sa commande /tps, lus toutes les 15 secondes — jamais pendant un tick.
  • Toujours active. La mesure tourne dès le démarrage, que le monitoring distant soit actif ou non. Une région fusionnée, scindée ou déchargée est oubliée, pas déclarée figée ; une région vivante qui ne tique plus affiche 0 TPS.
  • Mémoire bornée. Au plus 512 régions sont suivies à la fois ; chacune garde un histogramme de taille fixe de ses durées de tick (le 95e centile est à moins de 3,2 % de la valeur exacte ; la moyenne et le pire tick sont exacts). Au-delà de 512, une région est seulement comptée, et /bench regions dit combien.

Folia n'offre aucune API publique pour ses régions : VoxelBench lit ses classes internes. Elles ont été vérifiées sur Folia 26.1.2 et 26.2 et sur Canvas 26.1.2 (dont l'ordonnanceur est aussi l'ordonnanceur « EDF » de Folia). Chaque valeur est lue séparément : s'il en manque une sur un dérivé, seule celle-là manque. Si les régions elles-mêmes sont illisibles, /bench regions le dit et ne montre que la région globale, et la console l'écrit une fois.

Ce que montrent les autres vues sous Folia

VueSous Folia
/bench tps, /bench msptLes chiffres du serveur sont ceux de votre région quand un joueur tape la commande, de la région globale depuis la console ; le moniteur de VoxelBench mesure la région globale. Les deux sont nommés, la pire région et la médiane s'y ajoutent, et la région d'un joueur n'est pas comparée à la région globale (elles tiquent sur des fils différents).
Boss barsTPS et MSPT de la pire région (la région globale tant qu'aucune région n'est mesurée), avec la mention (pire région) / (région globale).
Tableau de bord web et /api/metricstps et mspt de la pire région ; entités et chunks comptés par Folia région par région (sans détail par catégorie) ; une section Régions avec la synthèse et le tableau des régions.
Placeholders%voxelbench_tps% et %voxelbench_mspt% de la pire région, entités et chunks comptés par Folia, et les placeholders region_* ci-dessous. tps_avg, tps_min, tps_max et mspt_avg, mspt_min, mspt_max ne portent que sur la région globale (voir plus bas).
/bench info, écrans d'information, rapport texteTPS et MSPT de la pire région ; les entités sont la somme des régions (sans détail par type).
Tableau de bord voxelbench.comChaque région dans chaque relevé, les valeurs pire / moyenne / médiane, la région globale, le nombre de fils et l'utilisation totale.

Une valeur non mesurée s'affiche N/A, jamais un 20,0 TPS ou un 50,0 ms inventé. Sous Folia, VoxelBench ne lit jamais World#getEntities() depuis la région globale : ces entités appartiennent à d'autres fils.

Placeholders

Avec PlaceholderAPI :

PlaceholderValeur
%voxelbench_region_tps%TPS de la région du joueur sur 15 s, par l'API publique de Folia (_5s, _15s, _1m, _5m, _15m pour une autre fenêtre)
%voxelbench_region_count%, %voxelbench_region_lagging%Régions mesurées, et celles sous 18 TPS
%voxelbench_region_tps_worst%, %voxelbench_region_tps_median%, %voxelbench_region_tps_avg%TPS de la pire région, médian et moyen
%voxelbench_region_mspt_worst%Plus haute durée de tick moyenne d'une région, en ms
%voxelbench_region_global_tps%, %voxelbench_region_global_mspt%, %voxelbench_region_global_util%Région globale : TPS, durée de tick, utilisation
%voxelbench_region_threads%, %voxelbench_region_util_total%, %voxelbench_region_util_capacity%Fils des régions, utilisation totale et capacité, en % d'un fil

Ils couvrent les 15 dernières secondes et valent N/A sous Paper et Spigot.

%voxelbench_tps_avg%, %voxelbench_tps_min%, %voxelbench_tps_max% et %voxelbench_mspt_avg%, %voxelbench_mspt_min%, %voxelbench_mspt_max% ne sont pas des chiffres de région : ils viennent du moniteur de TPS de VoxelBench, qui sous Folia ne voit que la région globale. Une région en retard n'y apparaît pas ; prenez les placeholders region_*, ou %voxelbench_tps% / %voxelbench_mspt% (pire région).

Le profilage sous Folia

/bench profile fonctionne sous Folia : les threads de tick qu'il échantillonne sont les threads de région. Un profil dit aussi où ils ont travaillé — la part des échantillons de tick prise dans chaque région, avec son monde, son centre et qui y tournait, et la part hors de tout tick de région (la région globale). Le vidage automatique du tampon circulaire guette aussi les ticks de chaque région : un lag qui se voit sur une région est capturé, et le profil nomme cette région (les pauses du ramasse-miettes de toute la JVM sont mises à part). Voir Profilage — Par région, sous Folia et Vidage automatique sur lag. Un partage public garde les régions par leur numéro seulement, sans monde ni coordonnées.

Les benchmarks sous Folia

Folia ne sait pas créer de monde, et Canvas ne sait pas en supprimer pendant qu'il tourne, ce qui change l'endroit où tournent les benchmarks : sur Folia, installez une fois la dimension de benchmark avec /bench world install ; sur Canvas, VoxelBench crée voxelbench_bench au démarrage. Voir Mondes de benchmark — Folia. Le TPS et le MSPT d'un test sont lus sur les régions où il travaille (voir Compatibilité).

Limites

  • Les identifiants de région ne sont pas stables : une fusion ou une scission donne un autre identifiant à la région, et un redémarrage les renumérote.
  • Avec un seul fil de régions (l'ordonnanceur par défaut de Folia démarre avec un seul), toutes les régions le partagent : une région lourde ralentit aussi les autres. Le nombre de fils figure à côté de l'utilisation.
  • Le TPS de la région du joueur (region_tps, la ligne de /bench regions) vient de Folia, sur ses propres fenêtres ; tous les autres chiffres sont la mesure de VoxelBench sur les 15 dernières secondes.
  • Sur un dérivé qui a réécrit les régions de Folia, elles ne sont pas listées et le monitoring distant mesure à la place les zones autour des joueurs (voir Monitoring).