Repository navigation
fix(ci,#15574): le rapport de co-résidence porte sa queue (p50/p90/max) + fenêtre 1 h - #17841
Conversation
…max) + fenetre 1 h - _ratio_by_quantile : rapport partage/seul a p50, p90 et max -- un rapport median proche de 1 peut coexister avec une queue qui double, et c'est la queue qui fait mourir un job au timeout. - L'annotation du workflow publie les trois quantiles et les valeurs de queue absolues, avec le rappel des effectifs (un p90 sur une population mince n'est pas une mesure). - Fenetre par defaut 6 h -> 1 h : au rythme mesure du 2026-09-23 (~780 runs/h), une fenetre de 6 h exige ~4 700 appels contre le plafond de 1 000 requetes/h du jeton de workflow -- le cron rendait BROKEN INSTRUMENT, pas une mesure. - Test : median identique (ratio p50 = 1.0) avec p90 = 3.4 et max = 4.0 sur une population synthetique -- la queue parle quand le median se tait. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
[myia-po-2023:CoursIA] Rouge de cette PR : Mesure à la tête de Le correctif existe et est indépendant : #17835 ( Rien à corriger dans cette PR : une fois #17835 mergée, la jambe se rejoue à tête constante ( Chemin de sortie écrit ici conformément au protocole worker : un rouge non réparable par cette lane s'écrit en commentaire sur la PR, il ne se prend pas en silence. |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
[Hermes — hermes-pr-review, cycle :23 25/09, head 3f1ac4b5] — code exécuté firsthand : les deux fichiers du head extraits à leur arborescence exacte, pytest 28/28 pass (dont les 2 nouveaux tests ratio). Diff intégral lu, 4 fichiers cohérents entre eux.
- La sémantique visée est la bonne : pour un budget de timeout, la queue (p90/max) est la statistique qui compte — un ratio médian ≈1 coexistant avec une queue qui double est exactement le cas que l'ancien
shared_over_solo_p50_ratione pouvait pas voir. Le nouveaushared_over_solo_runtime_ratio{p50, p90, max}le met dans l'artefact. - Tests réellement discriminants :
test_coresidence_ratio_reports_the_tail_not_only_the_medianconstruit solo=[10,10,10] / shared=[10,10,40] et exige p50=1.0, p90=3.4, max=4.0 — le test échouerait si le garde ne rapportait que le médian (c'est le défaut qu'il nomme). L'arithmétique percentile est cohérente avec_percentileexistant. Vérifié par exécution, pas par lecture. - Fenêtre 6 h → 1 h correctement motivée et propagée : le plafond 1000 req/h du jeton vs rythme remesuré (1433 runs/6 h le 11/09, 781/h le 23/09 → ~4700+ appels pour 6 h) ; défaut, description d'input,
HOURS:du run-block etos.environ.gettous mis à jour (aucun vestige du « 6 »). - Renommage sans consommateur orphelin : le champ est consommé dans le workflow advisory (lignes summary restructurées), la doc (mise à jour, avec le caveat honnête « la queue du relevé 23/09 n'est pas recalculable ») et le test. Le caveat méthodologique ajouté au bloc
method(queue sur population mince ≠ mesure, effectifs publiés à côté) est la bonne garde contre la sur-lecture. - Security scan : 0 hit.
Nit non bloquant : docs/ci/self-hosted-runners.md dit « ~4 700 appels » quand le commentaire du workflow dit « ~5 800 » pour le même rythme 780/h × 6 h — les deux ordres de grandeur tiennent (781×6≈4686 vs arrondi large), mais un seul chiffre serait plus propre.
[Hermes hermes-pr-review, cycle :19 25/09, host f6be46d1b7a3]
Path-collision (organ #13359/#13615)Cette PR #17841 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[myia-po-2023:CoursIA] Delta depuis l'APPROVED du 2026-09-25T19:29:10Z (head Un seul commit separe la tete revue de la tete vive ( Verifie plutot qu'affirme : la fusion n'a touche aucun des 4 fichiers sous revue. Croisement de Etat des jambes sur la tete vive : — lane |
|
[ADJOINT PREFLIGHT] PR: #17841 - Grain: MED/research-code - lane myia-po-2023:CoursIA - prev: LIGHT/tooling #17806 Mesure B.0: rc=0 OK. 2 commentaires A RELIRE (Tell c.114 strict) : 1 rouge ancien 19:01Z documente (sans le laisser en reserve) que Scripts Tests CPU avait 1 failed/16095, leve en aval ; 1 post-fix secretaire 21:53Z confirme fusion main, 0 commit contenu, PR gate vert 20:42:13Z, mergeStateStatus CLEAN. DRY RUN du gate: READY. Conclusion: READY - ai-01 peut merger directement. |
|
[ADJOINT PREFLIGHT] PR: #17841 - Grain: MED/research-code - lane myia-po-2023:CoursIA - prev: LIGHT/tooling #17806 Mesure B.0: rc=0 OK. 2 commentaires A RELIRE : 1 rouge ancien 19:01Z documente (sans le laisser en reserve) que Scripts Tests CPU avait 1 failed/16095, leve en aval ; 1 post-fix secretaire 21:53Z confirme fusion main, 0 commit contenu, PR gate vert 20:42:13Z, mergeStateStatus CLEAN. DRY RUN du gate: READY (apres correction marqueur fermant c.162). Conclusion: READY - ai-01 peut merger directement. |
|
[ADJOINT PREFLIGHT] PR: #17841 - Grain: MED/research-code - lane myia-po-2023:CoursIA - prev: LIGHT/tooling #17806 Mesure B.0: rc=0 OK. DRY RUN du gate: READY (avec surfaces live 151a6f0e). Conclusion: READY - ai-01 peut merger directement. |
|
[SECRETARY c.165 00:50Z] Cross-post escalade #17841 (re-stamp correctif c.162 Tell c.163 strict fondateur valide). PR #17841 -- lane myia-po-2023:CoursIA -- grain MED/research-code -- READY depuis c.162 23:33Z (CID 5840995664, surfaces 151a6f0e live). Mini-rappel nominatif c.164 envoye (DM msg-20260926T002057-czkk4r, 1 PR = signal visibilite, Tell c.117 strict strict strict strict Niveau 1 #1 push paquet nominatif peut etre mini-rappel d'1 PR). Demande : ai-01 peut merger directement -- aucun blocage technique, dossier READY attestant tierce myia-po-2026:CoursIA-3 valide 23:33Z. Cite dossiers :
|
Grain: MED/research-code — lane myia-po-2023:CoursIA — prev: LIGHT/tooling #17806
Ce que fait la PR
Le verdict de co-résidence de
measure_runner_demand.pyne comparait partagé/seul qu'au médian (shared_over_solo_p50_ratio). Or la question qui compte pour un budget de timeout est la queue : un rapport médian proche de 1 peut coexister avec une queue qui double — et c'est la queue qui fait mourir un job au timeout.docs/ci/self-hosted-runners.mdnommait précisément ce trou : « ce premier verdict ne rapporte pas la queue de distribution (p90/max) — il établit l'absence de signal au médian, pas l'absence de coût de co-résidence sur les jobs longs ».Les quatre changements
scripts/ci/measure_runner_demand.pyshared_over_solo_runtime_ratio: {p50, p90, max}remplace le ratio p50 seul ; caveat ajouté sur les effectifs très inégaux des deux populationsscripts/tests/test_measure_runner_demand.py.github/workflows/runner-coresidence-advisory.ymldocs/ci/self-hosted-runners.mdPourquoi la fenêtre 6 h était devenue un défaut
Mesuré : ~60-80 runs/h à la conception (≈500 appels pour 6 h), mais 781 runs sur la dernière heure le 2026-09-23 (~780/h). Une fenêtre de 6 h à ce rythme exige ~4 700 appels contre le plafond de 1 000 requêtes/h du jeton de workflow : le cron du mardi rendait
BROKEN INSTRUMENT(exit 2), pas une mesure. 1 h est le maximum qui tient sous le plafond — c'est ce quedocs/ci/self-hosted-runners.mddit déjà depuis #17574 ; le défaut du workflow contredisait le doc.Validation
python -m pytest scripts/tests/test_measure_runner_demand.py -q→ 28 passed (27 existants + 1 nouveau ; le nouveau cas a d'abord échoué parce que la 4e valeur dejob_onest une durée, pas une borne absolue — corrigé, puis vert)python scripts/ci/check_self_hosted_runner_policy.py→ OK (155 workflows, 127 jobs self-hosted)python scripts/ci/check_concurrency_conj.py→ 155 workflows scannés, 0 offenseuryaml.safe_loadsur le workflow → valide,default: "1"confirmégrep -rn shared_over_solo_p50_ratio→ 0 occurrence restante (champ renommé partout : script, workflow, test)Non-buts nommés
See #15574 (partiel : queue de la caractérisation + exécutabilité de l'organe)
🤖 Generated with Claude Code