5.3 KiB
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 d’eau, de traversées et de structures sont calculés avant l’arrivé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 :
- À l’intérieur de
radius - 128, le facteur d’érosion du bord est exactement nul. Le bruit du bord n’est 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 l’ancienne 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 n’est supprimé ou différé, aucun cache disque n’est 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. D’autres 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, l’interface 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 assemblePackré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-labest intégré aux sources principales après contrôle des empreintes avant modification. Les travaux préexistants restent conservés.build assemblePack -x :sanctuary:checky réussit en 18 s : cette seconde commande assemble l’intégration et ne remplace pas lecheckréussi dans l’espace isolé. Les classes optimisées du JAR intégré sont identiques octet par octet à celles du serveur testé. - Pas d’essai 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 n’est 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.