Mode Stress Limit
Le mode Stress Limit trouve le point de rupture de votre serveur : il augmente la charge d'un type de travail palier par palier jusqu'à ce que le serveur ne suive plus, puis affine la limite exacte.
Qu'est-ce que le Stress Limit ?
Un benchmark standard mesure les performances de votre serveur sous une charge fixe. Le Stress Limit répond à une autre question : quelle quantité d'une charge donnée ce serveur peut-il encaisser ? Le résultat est un nombre par type de charge, par exemple « le serveur a tenu 2 400 lignes de hoppers avant de rompre ».
Comment l'utiliser
Run Stress Limit complet
/bench stresslimit
- Doit être lancé en jeu par un joueur connecté.
- Le premier appel affiche un récapitulatif (type de serveur, contrôle du monde de benchmark, plage de charge de chaque type de stress, seuil de TPS). Retapez la commande dans les 10 secondes pour démarrer.
- Exécute tous les types de stress l'un après l'autre, chacun dans des zones de test générées à neuf, avec une courte pause entre deux types.
- Partage le cooldown de
/bench start;/bench stresslimit forcele contourne (nécessitevoxelbench.start.force). - Les résultats sont sauvegardés localement et soumis à voxelbench.com.
/bench stopinterrompt le run ; rien n'est soumis.
Vous pouvez aussi le lancer depuis l'interface : /bench gui, puis l'onglet Stress Limit, qui liste aussi les rapports de stress précédents.
Un seul type : /bench tier
/bench tier <type> [options]
Exécute l'échelle de paliers sur un seul type de stress, ce qui va beaucoup plus vite pour régler ou diagnostiquer une charge précise. Contrairement à /bench stresslimit, elle ne demande aucune confirmation et ignore le cooldown. Elle nécessite un joueur connecté et la permission voxelbench.tier.
| Option | Effet |
|---|---|
from=<charge> | Charge de départ (par défaut : la charge de départ du type) |
to=<charge> | Charge plafond (par défaut : le plafond nominal du type) |
tiers=<1-40> | S'arrêter après ce nombre de paliers |
duration=<3-120> | Secondes par palier |
zones=<1-8> | Nombre de zones de test |
cold | Ignorer le démarrage à chaud et monter depuis la charge de départ |
noskip | Désactiver la fin anticipée des paliers, pour mesurer chaque palier sur toute sa durée |
Exemples :
/bench tier tnt tiers=3 cold noskip
/bench tier hoppers from=100 to=2000 duration=12 zones=2
Un run tier est sauvegardé comme rapport de stress local mais n'est jamais soumis comme résultat Stress Limit complet. Si la synchronisation des tests unitaires est activée (reports.backend.unit-tests: true) et le serveur lié, il est envoyé sur le canal des tests unitaires à la place. Il ne met pas à jour la mémoire du démarrage à chaud.
Types de stress
| Type | Ce qui augmente | Charge de départ | Plafond nominal |
|---|---|---|---|
mobs | Mobs | 400 | 15 000 |
chunks | Débit de génération de chunks | 8 | 2 000 |
hoppers | Lignes de hoppers | 5 | 8 000 |
tnt | Charges de TNT | 40 | 5 000 |
redstone | Circuits redstone | 100 | 5 000 |
entities | Objets (deux tiers d'items au sol, un tiers de mobs) | 1 000 | 80 000 |
villagers | Villageois | 50 | 5 000 |
/bench tier accepte aussi des variantes courantes comme mob, explosion, collision ou villager.
Le plafond nominal est souple : si le serveur a encore beaucoup de marge en l'atteignant, le plafond est doublé, jusqu'à un plafond dur égal à cinq fois la valeur nominale. Ce plafond dur ne peut pas être relevé, pas même par un profil personnalisé.
Comment ça marche
- Paliers : chaque palier exécute la charge à un niveau donné, 10 secondes par défaut, suivi d'une pause d'une seconde et d'un nettoyage des zones avant le suivant. Un palier peut se terminer plus tôt quand le serveur est manifestement à l'aise (TPS d'au moins 19,5 et MSPT d'au plus 15 ms par défaut, une fois la charge entièrement installée) ; certaines charges ne sont jamais écourtées.
- Verdict : un palier rompt quand le serveur ne suit plus, principalement quand le TPS moyen passe sous 18 ou que le MSPT moyen dépasse 55 ms. D'autres signaux peuvent faire rompre un palier : sur Folia, la cadence et la surcharge de la région qui exécute le test ; la part de la charge demandée que le serveur a réellement traitée ; et un score de santé combiné. Un palier sans mesure exploitable n'est jamais compté comme stable.
- Montée adaptative : après un palier stable, la charge suivante est la charge actuelle multipliée par un facteur qui dépend de la marge restante : environ ×2,5 quand le serveur est au repos, jusqu'à ×1,15 près du point de rupture. Après trois paliers presque au repos d'affilée, chaque palier de plus multiplie le pas par 1,5, de façon cumulative ;
ramp.plateauBoost: falsecoupe ce mécanisme. - Confirmation de rupture : la première fois qu'une charge rompt, la même charge est mesurée une seconde fois. Seul un second échec est retenu comme rupture.
- Affinage : VoxelBench effectue ensuite une recherche dichotomique entre la dernière charge stable et la charge rompue, jusqu'à un écart d'environ 250 unités ou au plus 8 essais. La dernière charge stable trouvée constitue le résultat.
- Fin : un type se termine aussi quand le plafond dur est atteint en restant stable, ou au bout de 10 minutes.
Démarrage à chaud
Après chaque run complet, la dernière charge stable de chaque type est enregistrée dans plugins/VoxelBench/stress-warmstart.yml. Le run suivant démarre à 70 % de cette valeur au lieu de la charge de départ, ce qui évite de nombreux paliers faciles. Si ce premier palier rompt, VoxelBench cherche vers le bas (6 étapes au plus) ; si rien ne tient, il repart proprement de la charge de départ. Les valeurs de plus de 30 jours, ou supérieures ou égales au plafond actuel, sont ignorées.
Le comportement se règle dans config.yml :
stress-limit:
warm-start:
enabled: true # false = toujours monter depuis la charge de départ
factor: 0.70 # démarrer à 70 % de la dernière valeur stable
max-refine-down-steps: 6 # étapes de dichotomie quand la sonde à chaud rompt
max-age-days: 30 # ignorer les valeurs mémorisées plus anciennes
Profils de stress personnalisés
Un profil de stress personnalisé est un fichier YAML placé dans plugins/VoxelBench/custom_benchmarks/ avec kind: stresslimit. Il choisit les types de stress à exécuter et peut modifier leurs bornes, les seuils de rupture et la façon de monter en charge. Trois exemples sont fournis : stress-redstone.yml, stress-monster.yml et stress-freehost.yml.
kind: stresslimit
name: "Redstone Torture"
description: "Redstone uniquement, montée fine, grande précision au point de rupture."
version: 1
submit: false # false (défaut) = les résultats restent locaux
stress:
types: # types à exécuter, avec des bornes optionnelles
- id: redstone
base: 400 # charge de départ
max: 8000 # plafond souple (le plafond dur s'applique toujours)
thresholds: # quand un palier rompt
tpsBreak: 18.0
msptBreak: 55.0
ramp: # vitesse de montée
stepMin: 1.12 # multiplicateur près du point de rupture
stepMax: 1.8 # multiplicateur quand le serveur est au repos
curve: 2.0
plateauBoost: true # pas agrandis après plusieurs paliers presque au repos (false : désactivé)
refine: # dichotomie au point de rupture
targetPrecision: 100
maxIterations: 8
timing:
palierDurationSec: 10 # secondes par palier
maxDurationMinutes: 10 # durée maximale par type
earlySkip: true
zones: 4
Tous les réglages sont facultatifs sauf stress.types ; les valeurs absentes gardent les défauts décrits plus haut. Un type inconnu fait rejeter le profil.
Lancez-le comme n'importe quel profil personnalisé :
/bench custom list
/bench custom info stress-redstone
/bench custom run stress-redstone
Les règles des autres profils personnalisés s'appliquent : en jeu uniquement, serveur lié obligatoire, cooldown partagé, une seule itération. Le lancer exige en plus voxelbench.stresslimit, comme /bench stresslimit. Avec submit: true, le rapport est envoyé à voxelbench.com à la fin du run. Il y appartient au compte auquel le serveur est lié et il est d'abord privé : vous pouvez le partager par lien (non répertorié), jamais le rendre public. Il n'a ni score ni rang et n'apparaît dans aucun classement, puisque ses seuils et sa montée sont ceux de l'auteur du profil (voir Profils personnalisés).
Comprendre les résultats
À la fin de chaque type, le chat affiche la charge stable la plus élevée et le TPS mesuré à cette charge, et indique si le serveur a réellement rompu ou est resté stable jusqu'au plafond. Survolez une ligne de palier pour voir ses métriques détaillées. L'échelle complète, palier par palier, est conservée dans le rapport local (/bench reports, filtre Stress Limit) et dans le rapport en ligne.
- Limite élevée : votre serveur a de la marge pour cette charge
- Limite basse : cette charge est un goulot d'étranglement à optimiser
- Stable jusqu'au plafond : le serveur n'a pas rompu dans la plage testée
Conseils
- Lancez les tests de stress quand le serveur est au repos, dans un monde plat dédié (
/bench world create, puis/bench world set) - Les résultats dépendent de votre logiciel serveur, de sa configuration et des plugins installés
- Utilisez
/bench tier <type> coldpour remesurer une charge depuis zéro après une modification - Comparez les résultats avant et après vos optimisations pour mesurer le gain
Permissions
Nécessite la permission voxelbench.stresslimit (défaut : OP). /bench tier vérifie voxelbench.tier. Un profil de stress personnalisé exige voxelbench.stresslimit en plus de voxelbench.custom (ou voxelbench.start) ; sans elle, les profils de stress ne sont proposés ni par l'autocomplétion de /bench custom run ni par l'écran des profils personnalisés.