Mondes de benchmark
La plupart des tests de VoxelBench écrivent dans le monde : ils construisent des zones de test, font apparaître des mobs et génèrent des chunks. Cette page explique dans quel monde tourne chaque run et comment le choisir.
Par défaut, les benchmarks tournent dans un monde plat créé pour l'occasion puis supprimé ; vous pouvez aussi épingler un monde que tous les runs utiliseront. Les mondes que crée VoxelBench s'appellent voxelbench_<nom>, et ses garde-fous reposent sur ce préfixe (voir Garde-fous).
Deux réglages de config.yml en décident (voir Configuration) :
benchmark:
target-world: "" # Monde épinglé, défini avec /bench world set
auto-temp-world: true # Monde temporaire quand aucun monde n'est épinglé
Où tournent les runs
Benchmarks, Stress Limit et profils personnalisés
/bench start, /bench stresslimit, /bench tier et /bench custom run choisissent leur monde dans cet ordre :
- Le monde épinglé (
/bench world set), s'il est chargé. Un monde épinglé qui n'est pas chargé est ignoré, avec un avertissement dans le chat. - Un monde temporaire, quand
benchmark.auto-temp-worldvauttrue(valeur par défaut) : un monde plat créé pour le run et supprimé à la fin (voir Mondes temporaires). Un profil de benchmark personnalisé peut remplacer ce réglage par son propreoptions.auto-temp-world. - Le monde principal du serveur (le premier monde qu'il charge, et non celui où vous vous trouvez), avec
auto-temp-world: false, ou quand le monde temporaire n'a pas pu être créé. Sur Folia, c'est toujours le cas sans monde épinglé. Un échec de création n'est signalé que dans la console du serveur.
Avec auto-temp-world: false et aucun monde épinglé, les vérifications préalables de /bench start signalent un constat critique « Aucun monde cible configuré », que seul un joueur disposant de voxelbench.start.force peut outrepasser. Les autres commandes démarrent sans ces vérifications, tout comme /bench start quand confirmation.require-confirmation vaut false (voir Configuration).
Les jobs d'auto-bench lancés depuis voxelbench.com suivent les mêmes règles que la commande de leur mode.
Tests individuels
/bench test (la commande, le GUI des tests et les jobs d'auto-bench en mode test) est plus strict avec les tests qui écrivent dans le monde, c'est-à-dire tous les tests de gameplay sauf worldSave :
- ils tournent dans le monde épinglé, sinon dans un monde temporaire créé pour le test, même si vous vous trouvez dans le monde principal ;
- quand ni l'un ni l'autre n'est possible (
auto-temp-world: false, création échouée, Folia sans monde épinglé), le test est refusé au lieu de se rabattre sur votre monde ou sur le monde principal.
Les tests matériels et CPU, worldSave et les tests ajoutés par des extensions tournent dans le monde épinglé, ou dans celui où vous vous trouvez (le monde principal depuis la console). Le détail, dont la façon dont les joueurs sont emmenés dans les zones de test puis ramenés, se trouve dans Benchmarks.
Mondes temporaires
Un monde temporaire s'appelle voxelbench_temp_<horodatage>. C'est un monde plat (bedrock, deux couches de terre, herbe), de graine benchmark et sans structures : chaque run part donc du même terrain.
- La création prend quelques secondes au début du run. Si Multiverse-Core est installé, le monde y est aussi importé (voir Multiverse-Core).
- La suppression a lieu quelques secondes après la fin du run, y compris après un échec ou un
/bench stop. Les joueurs encore présents sont d'abord déplacés vers un autre monde. - Une session multi-run (
/bench start <runs>,/bench start warmup) utilise un seul monde temporaire pour tous ses runs et le supprime après le dernier. - Si le serveur s'arrête pendant un run, le monde ne peut pas être supprimé pendant l'arrêt : il l'est au démarrage suivant (voir Redémarrages et plantages).
Folia ne sait pas créer de monde pendant que le serveur tourne : aucun monde temporaire n'y est jamais créé (voir Folia).
Épingler un monde
/bench world set <monde> épingle un monde chargé, désigné par son nom complet, pour tous les runs : benchmarks, stress limit, paliers, profils personnalisés et tests individuels. L'épinglage est enregistré dans config.yml sous benchmark.target-world et survit aux redémarrages. /bench world unset le retire, tout comme la suppression du monde épinglé avec /bench world delete.
/bench world create arene
/bench world set voxelbench_arene
Quand épingler un monde
- Vous lancez des tests un par un. Sans monde épinglé, chaque
/bench testd'un test qui écrit dans le monde crée puis supprime son propre monde temporaire, ce qui coûte quelques secondes à chaque fois. - Sessions multi-run. Une session prend son monde avant de préparer quoi que ce soit, y prépare ses zones de test avant le premier run puis, entre deux runs, supprime les fichiers de région qui les entourent, pour que chaque run reparte d'un terrain fraîchement généré — uniquement dans un monde
voxelbench_*. Dans tout autre monde (un monde épinglé d'un autre nom, le monde principal après un repli), elle ne force le chargement de rien et ne supprime rien, l'annonce par un message, et les runs réutilisent les chunks déjà générés. - Folia. Sans monde épinglé,
/bench testrefuse tous les tests qui écrivent dans le monde. - Serveurs qui refusent le monde temporaire, comme certains serveurs hybrides. Les runs se rabattent alors sur le monde principal et
/bench testrefuse. Un monde créé une fois pour toutes avec/bench world createvous évite ce problème.
Choisir le monde
- Épinglez un monde qui ne contient rien à conserver, idéalement créé avec
/bench world create. Les tests y construisent leurs zones et les vident à la fin sans rendre le terrain d'origine (seulplayerWorldLoadrestaure les blocs qu'il modifie), et les sessions multi-run y suppriment des fichiers de région. Les zones de test se trouvent entre 1 000 et 10 000 blocs du spawn du monde, et à des emplacements fixes entre x = z = 50 000 et 100 000. - N'importe quel monde chargé peut être épinglé, votre monde principal compris : le préfixe
voxelbench_n'est pas exigé./bench startsignale alors un constat critique « Monde hors benchmark ciblé », que seul un joueur disposant devoxelbench.start.forcepeut outrepasser ; les autres commandes ne demandent rien. - Préférez un monde plat. Sur un autre terrain, les résultats dépendent de la carte et ne se comparent pas à ceux obtenus sur un terrain plat.
/bench start,/bench stresslimitet/bench tierpréviennent quand le monde épinglé n'est pas plat.
Commandes
Toutes les commandes /bench world exigent voxelbench.world (par défaut : op) en plus de voxelbench.use, et fonctionnent depuis la console. /bench worlds est un alias de /bench world. Le même nœud donne aussi accès à /bench zones tp et à /bench zones clean, qui ne retire d'entités que dans un monde voxelbench_*. Voir aussi Commandes et Permissions.
| Commande | Alias | Effet |
|---|---|---|
/bench world list | Lister les mondes chargés avec leur type de monde. [pinned] marque le monde épinglé et [bench] les mondes voxelbench_* ; la dernière ligne indique si Multiverse-Core a été détecté | |
/bench world show | current, get | Afficher le monde épinglé, avec un avertissement s'il n'est pas chargé |
/bench world set <monde> | pin | Épingler un monde chargé par son nom complet (voxelbench_arene, world…). L'autocomplétion propose tous les mondes chargés |
/bench world unset | clear, unpin | Retirer l'épinglage |
/bench world create <nom> | Créer le monde plat voxelbench_<nom>. Le nom compte de 1 à 32 lettres, chiffres, _ ou - ; create voxelbench_arene donne aussi voxelbench_arene | |
/bench world delete <monde> | remove | Supprimer un monde voxelbench_*, désigné par son nom complet : voxelbench_arene, et non arene. L'autocomplétion ne propose que ces mondes |
/bench world create refuse un nom déjà pris par un monde chargé, ainsi qu'un dossier voxelbench_<nom> qui contient déjà un monde sur le disque (voir Garde-fous).
/bench world delete refuse un monde dont le nom ne commence pas par voxelbench_, un monde qui n'est pas chargé et un monde où un test est en cours (arrêtez-le d'abord avec /bench stop). Les joueurs présents sont déplacés au spawn d'un autre monde, puis le monde est déchargé et son dossier supprimé.
Folia
Folia ne sait ni créer ni décharger de monde pendant que le serveur tourne. Sur Folia :
- aucun monde temporaire n'est jamais créé. Sans monde épinglé,
/bench start,/bench stresslimit,/bench tieret les profils personnalisés tournent dans le monde principal, sans que les vérifications préalables le signalent ;/bench testrefuse tous les tests qui écrivent dans le monde, en expliquant pourquoi ; /bench world createet/bench world deleteéchouent ;- seul un monde que le serveur charge au démarrage peut être épinglé, en pratique le monde principal. Les tests y construisent alors leurs zones puis les vident ; les sessions multi-run n'en réinitialisent pas les régions. Si votre carte compte, faites vos benchmarks sur une copie du serveur.
Voir aussi Compatibilité.
Redémarrages et plantages
À chaque démarrage, avant que le moindre run puisse commencer, VoxelBench :
- supprime les mondes temporaires restants, que Multiverse-Core les ait rechargés ou qu'il ne reste que leur dossier. La console les liste (« Cleaned up N orphan temporary benchmark world(s) from a previous session »). Cela couvre aussi bien un serveur arrêté pendant un run qu'un plantage.
- charge les mondes que vous avez créés avec
/bench world create. Bukkit ne se souvient pas des mondes créés par un plugin : VoxelBench charge donc chaque dossiervoxelbench_<nom>qui contient un monde et que rien d'autre n'a chargé (« Auto-loaded N persistent benchmark world(s) from disk »). Un épinglage sur un tel monde continue donc de fonctionner après un redémarrage.
Un arrêt propre pendant un run (/stop, un redémarrage depuis votre panel) arrête et nettoie le test en cours, comme le fait /bench stop, et libère les chunks dont VoxelBench avait forcé le chargement.
Après un plantage, le test qui tournait laisse un fichier de verrou. Quelques secondes après le démarrage suivant, VoxelBench libère d'abord les chunks dont ce test avait forcé le chargement, quel que soit le monde où il tournait : libérer un chunk ne détruit rien, alors que Minecraft enregistre le chargement forcé avec le monde, si bien qu'un chunk laissé forcé le resterait pour de bon. Il retire ensuite ce que le test avait enregistré (ses blocs, les entités des emplacements de test fixes) seulement s'il tournait dans un monde voxelbench_* rechargé, comme un monde créé avec /bench world create. Pour tout autre monde, le monde principal ou un monde épinglé d'un autre nom, il ne retire rien, pas même les blocs du test, et la console l'indique (« Leftover test lock for world '…': nothing removed there »). Un monde temporaire est de toute façon supprimé (voir plus haut).
Joueurs restés dans un monde de benchmark. Un joueur qui se connecte dans un monde voxelbench_* alors qu'aucun test ne tourne est renvoyé, environ une seconde plus tard, là où il était avant le test, dans son mode de jeu. À défaut, il rejoint son lit, ou le spawn du premier monde qui n'est pas un monde de benchmark, dans le mode de jeu par défaut du serveur. Un message lui indique qu'il a été ramené depuis le monde de benchmark. Tant qu'un test tourne, il est laissé où il est. /bench test ramène aussi, à sa connexion suivante, un joueur qu'il avait déplacé et n'a pas pu ramener lui-même (voir Benchmarks).
Ce sauvetage ne regarde que les mondes voxelbench_*. Après un plantage, un joueur qui se trouvait dans une zone de test d'un monde épinglé portant un autre nom, ou d'un monde temporaire (supprimé au démarrage suivant), n'est pas déplacé, et peut encore être en mode spectateur. Sa position et son mode de jeu d'avant le test se trouvent dans plugins/VoxelBench/data/player-states/<UUID>.yml.
Multiverse-Core
VoxelBench n'a pas besoin de Multiverse-Core. Quand il est installé :
- VoxelBench crée toujours ses mondes lui-même, puis les importe avec la commande console
mv import <monde> normal, si bien qu'ils apparaissent dans/mv list. Si l'import échoue, le monde fonctionne quand même, hors de Multiverse. - Pour supprimer un monde, VoxelBench lance d'abord
mv remove <monde>, puis décharge le monde et supprime son dossier si Multiverse les a laissés. - Au démarrage, les mondes temporaires que Multiverse a rechargés sont supprimés comme les autres.
Il n'y a rien à configurer. Voir aussi Intégrations.
Garde-fous
- Seuls les mondes
voxelbench_*sont supprimés./bench world deleterefuse tout autre nom. Le nettoyage au démarrage ne touche qu'aux dossiers nommésvoxelbench_temp_<chiffres>qui contiennent un monde (un fichierlevel.dat), et le chargement au démarrage qu'aux dossiersvoxelbench_<nom>. Ne donnez pas à vos propres mondes un nom de la formevoxelbench_temp_<chiffres>, par exemple avec/bench world create temp_1: le démarrage suivant les supprimerait. - Pas de mélange avec un ancien dossier.
/bench world createrefuse un dossiervoxelbench_<nom>qui n'est pas chargé mais contient déjà un monde, car ses chunks se mêleraient au nouveau terrain plat. Choisissez un autre nom, ou retirez le dossier pendant que le serveur est arrêté. Vous pouvez aussi redémarrer : le serveur charge alors ce dossier comme l'un de vos mondes, et/bench world deletele supprime. /bench testn'écrit jamais dans le monde où vous vous trouvez (voir Tests individuels).- Les vérifications préalables de
/bench startsignalent un constat critique quand le monde épinglé n'est pas un mondevoxelbench_*, ou quandauto-temp-worldvautfalsesans monde épinglé, et un avertissement quand le monde épinglé n'est pas plat (voir Configuration). - Les joueurs restés dans un monde
voxelbench_*sont ramenés à leur connexion (voir Redémarrages et plantages). - Les chunks chargés de force sont libérés dans tous les mondes. VoxelBench consigne chaque chunk dont il force le chargement.
/bench stop, un arrêt propre du serveur et le redémarrage après un plantage libèrent ceux qui le sont encore, quel que soit le monde, sans en charger un seul. Libérer un chunk n'en retire rien : c'est pourquoi cette règle ne se limite pas aux mondesvoxelbench_*. - Les entités que les tests n'ont pas fait apparaître ne sont retirées que dans les mondes
voxelbench_*. Au début de chaque run de benchmark, de stress limit, de palier ou de profil personnalisé, sur Paper et Spigot, VoxelBench retire les mobs, animaux, villageois, golems, objets au sol, projectiles, wagonnets et bateaux qui pourraient peser sur la mesure, dans les seuls mondesvoxelbench_*(sur Folia, il n'en retire aucun)./bench zones cleanrefuse tout autre monde, et le balayage des emplacements de test fixes qui suit/bench stop, un arrêt propre du serveur ou un redémarrage après plantage l'épargne. Partout ailleurs, chaque test ne retire que ce qu'il a lui-même fait apparaître. - La météo et le cycle jour/nuit sont rendus. Un run dégage la météo et règle l'heure sur midi en arrêtant le cycle jour/nuit, dans tous les mondes chargés. À la fin, la météo et le cycle jour/nuit reviennent tels qu'ils étaient ; l'horloge n'est pas remontée : la journée reprend à partir de midi.
Ce que le préfixe ne protège pas. Le monde épinglé, quel que soit son nom, et le monde principal quand les runs s'y rabattent (auto-temp-world: false, création échouée, Folia) : les tests y construisent puis y vident leurs zones comme dans n'importe quel monde de benchmark. Les fichiers de région, en revanche, ne sont supprimés que dans un monde voxelbench_*, et c'est aussi le seul où sont retirées des entités que les tests n'ont pas fait apparaître.
VoxelBench 2.0.2 et versions antérieures agissaient aussi hors des mondes
voxelbench_*: sans monde épinglé, une session multi-run réinitialisait entre deux runs des régions du monde principal du serveur ; sur Paper et Spigot, le début de chaque run de benchmark, de stress limit, de palier ou de profil personnalisé retirait villageois, animaux (apprivoisés et nommés compris), golems, objets au sol, wagonnets et bateaux de tous les mondes chargés ;/bench stopretirait villageois, chats, golems et objets au sol autour d'emplacements fixes du monde du test, quel qu'il soit ; et, sans monde épinglé,/bench zones cleanretirait toutes les entités, hors joueurs, tableaux et cadres, autour d'une zone du monde principal. Mettez à jour avant de lancer quoi que ce soit sur un serveur dont les mondes comptent. Ces versions ne libéraient pas non plus, après un plantage, les chunks dont VoxelBench avait forcé le chargement : un plantage pendant un test pouvait en laisser forcés pour de bon (la commande vanilla/forceload queryliste ceux d'un monde).