Files
sanctuary-beta/docs/initial-loading.md
T
2026-09-15 09:29:11 +02:00

5.3 KiB
Raw Blame History

STARTUP-01 — raccourcir la création de monde

Branche : codex/initial-loading. Minecraft 26.3-pre-2, Fabric Loader 0.19.5, Fabric API 0.160.0+26.3. Correctif local beta.022, préparé à partir du chantier beta.021 ; publication et instance Prism distinctes.

Problème observé

Les plans deau, de traversées et de structures sont calculés avant larrivée. Le profil JFR du serveur de développement situe le coût surtout dans les bruits Perlin du champ PopulationIslandDensity. Le message Minecraft Time elapsed arrive après la planification : il sous-estime donc la création totale.

Correctif

Les bruits restent identiques, mais leur évaluation devient conditionnelle :

  • À lintérieur de radius - 128, le facteur d’érosion du bord est exactement nul. Le bruit du bord nest pas nécessaire.
  • À partir de Y140, le facteur d’érosion inférieur est exactement nul, même avec les bruits à leurs bornes maximales. Le bruit du dessous est inutile.
  • Lorsque ces deux conditions sont réunies, les bruits de sculpture et de détail ne contribuent plus au champ, sauf dans lancienne variante à terrasses.
  • À partir de Y320, avec le repère vertical normal, l’érosion haute vaut au moins 2 pour un terrain borné à 1 : la densité de base vaut exactement -1. Les corps flottants sont toujours ajoutés ensuite par FloatingTerrain306. La variante historique 30.4, qui déplace le repère vertical, garde son calcul.

Aucun plan nest supprimé ou différé, aucun cache disque nest ajouté. Les codecs, identifiants, graines et formats de sauvegarde restent inchangés. La suppression de calculs doit conserver exactement les mêmes valeurs, pas une approximation visuelle. Les essais utilisent uniquement des mondes de développement neufs.

Mesures

Mac Apple M1, 8 Gio, Java Temurin 25.0.3, tas JVM 2 Gio. Profil de départ Moyen 724, graine 0, structures actives, nouveau dossier de monde à chaque essai.

Mesure Résultat
CPU de 441 colonnes, référence beta.021 médiane 706,874 ms
CPU des mêmes colonnes, correctif médiane 567,929 ms
Réduction de CPU sur ce travail 19,66 %
Création serveur finale, du lancement du serveur de test à sa disponibilité 89 s
Préparation finale du spawn seule, incluse dans ces 89 s 4,578 s

Le benchmark CPU utilise la graine 42, 183 456 densités par passage, un échauffement puis trois paires alternées dans la même JVM. Les six empreintes sont identiques : d47c98ab8f10169c. Il mesure du calcul de terrain, pas un gain universel de 20 % sur la durée totale du lancement.

Le premier serveur profilé demandait 171 s, puis la première optimisation 132 s. Dautres constructions et tests tournaient pendant ces essais. Le dernier essai sans JFR atteint 89 s : ces trois temps ne prouvent pas à eux seuls une division par deux du chargement. Ils excluent le lancement du client, linterface de création, le réseau et le rendu graphique. La planification restante prend encore du temps ; ce correctif ne rend pas la création instantanée.

Vérifications réussies

  • Référence beta.021 figée dans StartupDensityReference : 588 288 comparaisons bit à bit réussies, champs actuels et legacy27, capacités 5/10/20/100 et graines 0, 42, -7228211907433324401. Colonnes traversant les seuils et coordonnées positives/négatives, modes scalaire et volume.
  • Mesure CPU alternée dans une même JVM, sur les mêmes 441 colonnes complètes, pour distinguer le gain de calcul des variations de charge de la machine.
  • ./gradlew check build assemblePack réussit en 7 min 17 s, avec les sélecteurs ci-dessous : tous les contrôles purs et 10 tests serveur réussis. Couverture native : équivalence, mesure CPU, anciennes expéditions, plans aériens, traversées, village et ruines asséchées.
  • Le correctif testé dans build/startup-lab est intégré aux sources principales après contrôle des empreintes avant modification. Les travaux préexistants restent conservés. build assemblePack -x :sanctuary:check y réussit en 18 s : cette seconde commande assemble lintégration et ne remplace pas le check réussi dans lespace isolé. Les classes optimisées du JAR intégré sont identiques octet par octet à celles du serveur testé.
  • Pas dessai graphique ni de validation Windows pour ce correctif.

Commande de validation complète utilisée :

./gradlew check build assemblePack \
  -PsanctuaryFocusedTests=startup,expeditions,aerial,transit,village,drained \
  -PsanctuaryAerial24Tests=true -PsanctuaryTransit29Tests=true

Les preuves restent ignorées dans build/startup-evidence/, build/startup-check-build.log et build/startup-integrated-build.log. Le profil initial reste dans build/startup-baseline-preserved.jfr. Le mod et le pack prennent ensemble la version beta.022. Aucun tag, canal public ou installation Prism nest modifié.

Export local : Sanctuary-beta.022.mrpack. Intégrité ZIP, dépendances exactes, absence de tests et identité du JAR embarqué vérifiées. Reçu : build/startup-evidence/artifact.json.

SHA-256 JAR : 53203075916e1f494e5cb73b6a28959170c7f9df26b6edd4746b3531d404f3d1. SHA-256 MRpack : 97545339b9f7c2465a8248e7fad018e694190ba5acf46aa38c3b40774aa55b56.