108 lines
8 KiB
Markdown
108 lines
8 KiB
Markdown
|
|
# 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.
|