LifePlay-Revival/Docs/Migration/etat/OPT/OPT0/OPT0-PIPELINE.md

108 lines
8 KiB
Markdown
Raw Permalink Normal View History

# OPT0-PIPELINE : organisation du pipeline de mesure et de test (axe B, par paliers)
2026-10-15, session Sonnet · OPT0-R, fiche K0. Décision de l'utilisateur pour l'axe B : par paliers, d'abord le banc console + CSV, puis un essai Gauntlet. Source des faits : `OPT\BC\` (ids cités). Ce document organise ; il ne livre aucun outil installé ni essai.
Révision du 2026-10-15 (lot PIPE1, fiche PIPE1-IMPL-02) : paliers réalignés sur le barème M0 à M4 adopté par l'utilisateur (« approuve le modèle de xHigh »). Le choix du palier se fait par la grille question × enjeu du skill lp-perf (`bareme.md`) ; preuves dans `etat\AG\PIPE1\PIPE1-REVUE-02-MODELE.md`. L'ancien P1 (PresentMon en direct) devient M2 hors ligne ; P2a devient M1 ; P2b (Gauntlet) passe hors grille ; P3 (Tracy) est retiré.
## Vue d'ensemble
| Palier | Outil | Mesure | Build | Statut en 5.8 | BUILD-GO |
|---|---|---|---|---|---|
| M0 | `Tools\LogStats.ps1 -Compare -Stats` | compteurs du jeu : F5, DESTROY, à-coups (`-LPHitchLog`) | Development | en service | non, si la build existe |
| M1 | CSV Profiler par le lanceur Session C, `SummarizeDebugCsv.ps1`, PerfReportTool (R4-01 à R4-04, R11-08 à R11-10) | cadence instrumentée, coût par fil, mémoire LLM | Development | éprouvé en 5.5, à éprouver en 5.8 | oui si la build Development est à refaire |
| M2 | trace ETW hors ligne puis `PresentMon --etl_file` (R11-01 à R11-06) | cadence ressentie de la Shipping | Shipping | jamais essayé (B2-ter) | non (la build existe) |
| M3 | journal de performance d'AMD Adrenalin | cadence (grain à relever) | toutes | format inconnu | non |
| M4 | Unreal Insights : lanceur Session A, export sans interface (R11-11, R4-05 et suivantes) | quelle fonction, quel Blueprint | DebugGame ou Development | éprouvé en 5.5, à éprouver en 5.8 | oui si la build est à refaire |
| hors grille | Gauntlet (R3-12, R3-101, R11-17, R11-18) | lancer, jouer et juger sans humain | Development | à éprouver après M1 | oui (BuildCookRun) |
Pas de build Test : le moteur du lanceur ne l'installe pas (`BaseEngine.ini:4002-4007`, relevé dans `PIPE1-REVUE-02.md` F2). Tracy est retiré : Insights (M4) couvre les fonctions.
## Règles communes
- Le palier se choisit par la grille de `bareme.md` (skill lp-perf) ; la fiche porte la ligne `Mesure : …` avant tout lancement.
- Verdict = nombres comparés à la base (`bareme.md` R8) : pour M0, M1 et M4 (Development), référence O0 (5.5 : médiane 16,7 ms, 159 images > 50 ms, 112 > 100 ms ; critère médiane ≤ 17 ms ± 1, `Docs\18_Build_Debug.md:86-87, :128`), rebasée sur O0-5.8 après l'épreuve de M1 ; pour M2 et M3 (Shipping), base Shipping de l'alpha établie par l'épreuve de M2, sans laquelle le verdict est « non jugé ». Jamais de comparaison entre les deux. Aucun seuil n'est inventé ici.
- Résultats rangés sous `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\<projet>\<lot>\` ; jamais dans `.hyperai\work\`.
- Aucune installation par un agent : le téléchargement des outils tiers est un geste de l'utilisateur, avec relevé du MD5.
- Un palier rodé est lancé par la session (script, sortie d'une ligne par passe) ; un agent `lp-perf` seulement si le script manque ou échoue ; un agent qui juge est `lp-validator` (relit les nombres, ne modifie rien).
- Rôle humain : jouer le scénario O0 (une partie par passe), ressenti (caméra, confort), décision, gestes de poste (session élevée, activation d'Adrenalin, téléchargements).
## M0 : LogStats
| Rubrique | Contenu |
|---|---|
| Déclencheur | non-régression des compteurs du jeu (grille : Q0, ou plancher E1) |
| Entrées | `LifePlay.log` de deux parties Development (A et B), même scénario |
| Commandes | `Tools\LogStats.ps1 -Compare <A>,<B> -Stats` |
| Sorties | compteurs normalisés, section trame / F5 / DESTROY / hitch |
| Verdict | écart des compteurs A/B ; à-coups seulement si la partie a été lancée avec `-LPHitchLog` |
| Rôle humain | jouer la partie (souvent la même passe que M1) |
| Emplacement | `etat\OPT\<lot>\logstats\` |
## M1 : CSV Profiler (lanceur Session C)
| Rubrique | Contenu |
|---|---|
| Déclencheur | cadence instrumentée, coût par fil ou mémoire (Q1, Q3), plancher E2 et E3 |
| Entrées | build Development (`Tools\BuildDebug.ps1 -Config Development`), scénario O0 |
| Commandes | recette `csvprofile.md` : `-csvGpuStats -llm -llmcsv -ExecCmds="csvprofile repeat=20, csvprofile frames=9000"`, sans `-LPHitchLog`, jamais `-csvCaptureFrames` |
| Sorties | `Saved\Profiling\CSV\*.csv`, synthèse `SummarizeDebugCsv.ps1`, rapport PerfReportTool en option |
| Verdict | médiane FrameTime, images > 50 et > 100 ms, GT ; contre la base O0 |
| Rôle humain | jouer le scénario O0, une partie par passe |
| Emplacement | `etat\OPT\<lot>\csv\` |
## M2 : PresentMon hors ligne
| Rubrique | Contenu |
|---|---|
| Déclencheur | cadence ressentie de la Shipping (Q2), plancher E3 |
| Entrées | build Shipping (alpha), version de PresentMon figée (2.6.0) |
| Commandes | trace ETW par `wpr` ou `logman` (fournisseurs relevés dans le source de PresentMon 2.6.0), puis `PresentMon --etl_file` ; recette `presentmon.md` |
| Sorties | CSV de PresentMon, synthèse `Tools\PresentMonStats.py` |
| Verdict | percentiles 95 et 99 de MsBetweenPresents, images au-dessus du seuil de la base Shipping (sans base : « non jugé »), MsGPUBusy contre MsBetweenPresents |
| Rôle humain | session élevée ; jouer le scénario |
| Réserve | la capture en direct ne capte rien sur ce poste (0 image en 6 essais, `OPT0-TACHES.md:203-218`) ; la voie hors ligne n'est pas essayée et peut échouer pour la même cause. Repli : M3 |
| Emplacement | `etat\OPT\<lot>\presentmon\` |
## M3 : AMD Adrenalin
Repli de M2. Activation par l'utilisateur ; format et grain à relever sur un vrai fichier avant d'écrire une recette (`OPT0-TACHES.md:217`).
## M4 : Unreal Insights
| Rubrique | Contenu |
|---|---|
| Déclencheur | quelle fonction ou quel Blueprint coûte (Q4) ; montée depuis M1 (`bareme.md` R3) |
| Entrées | build DebugGame ou Development ; passe courte (4 min au plus), à part de M1 |
| Commandes | canaux `cpu,frame,bookmark,loadtime` (sans `memory`), `-statnamedevents`, `-tracefile` ; export `UnrealInsights.exe -OpenTraceFile=… -AutoQuit -NoUI -ExecOnAnalysisCompleteCmd="@=export.rsp"` (`TimingInsights.ExportTimerStatistics`), `bareme.md` § 1.1 |
| Sorties | `.utrace`, export CSV des minuteurs d'un fil |
| Verdict | minuteurs en tête du fil visé ; la trace fausse la cadence, ses temps d'image ne servent pas de verdict |
| Rôle humain | jouer la passe courte |
| Réserve | traces longues : 3,3 Go pour 10 min, plus de 50 Go de mémoire à l'analyse (`Docs\11_Audit_Optimisation.md:280-281`) |
| Emplacement | `etat\OPT\<lot>\insights\` |
## Hors grille : Gauntlet (après l'épreuve de M1)
| Rubrique | Contenu |
|---|---|
| Déclencheur | M1 stable ; décision de l'utilisateur de rejouer M1 sans humain |
| Entrées | build empaquetée Development par BuildCookRun (tests compilés hors Test et Shipping, R11-17), nom de test |
| Commandes | recette `gauntlet.md` |
| Sorties | rapport JSON / HTML (`-ReportExportPath`, R3-02), code de sortie |
| Verdict | code de sortie + comparaison des CSV de M1 |
| Rôle humain | décider la fin de l'essai ; lire les rapports de plantage |
| Agents | lp-impl pour la SPEC et les réglages, lp-builder pour lancer |
| Emplacement | `etat\OPT\<lot>\gauntlet\` |
| Réserve | un éditeur hôte pilote le client (R11-18, estimé) |
## Pilotage par agent (axe B, hors paliers)
Le MCP de l'éditeur et Remote Control (R6) servent à piloter l'éditeur ; Remote Control est désactivé en build empaquetée et s'active par drapeaux. Les paliers M0 à M4 ne dépendent pas du MCP.
## Suite
1. Épreuve de M1 en 5.8 (fiche à part) : donne la base O0-5.8 et la dispersion du poste, d'où les seuils et le nombre de passes de X2.
2. Épreuve de M4 en 5.8 (lanceur Session A, export sans interface).
3. Épreuve de M2 (fiche B2-ter, accord de l'utilisateur) ; en cas d'échec, M3.
4. Après l'épreuve de M1 seulement : décision sur Gauntlet.
5. K1 : versement des enseignements dans les skills, soumis à l'utilisateur.