Skip to content

fix(runners,#19805): budget memoire po-2024 42 -> 16 Go, coherent avec la VM de 24 Go - #19806

Closed
jsboige wants to merge 2 commits into
mainfrom
fix/runners-mem-24gb
Closed

jsboige wants to merge 2 commits into
mainfrom
fix/runners-mem-24gb

Conversation

@jsboige

@jsboige jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling — lane myia-po-2024:CoursIA — prev: MED/notebook-python #19688

Mission URGENTE ai-01 (ai01-urgent-po2024-runners-mem-2220, 2026-10-08T00:13Z). Le budget memoire des runners de po-2024 declare 42 Go pour une VM de 24 032 Mo, sans coursia-ci.slice (aucun mur kernel derriere le budget userspace).

Mesure firsthand (2026-10-08, WSL)

Jambe En vol Cap/conteneur RAM declaree Swap potentiel
docker (execution) 6 1536 Mo 9 216 Mo 18 432 Mo (2x)
waiters (PR-gate) 12 512 Mo 6 144 Mo 12 288 Mo (2x)
lean 2 6144 Mo 12 288 Mo 24 576 Mo (2x)
total 27 648 Mo 55 296 Mo

VM : 24 032 Mo (.wslconfig → memory=24GB), 16 cœurs, swap 32 Go deja entame (2,3 Go utilises). La sur-souscription est acquise au repos (27 648 > 24 032), et 54 Go de swap potentiel ecrivent sur le NVMe qui porte le pagefile de l'hote.

Cause racine — une declaration qui a survecu a sa config

Le 42 n'est pas une erreur de calcul : il vient de l'agrandissement VM du 2026-09-21 (24 032 → 40 110 Mo, arbitrage user, #17322). Cet agrandissement n'existe plus — .wslconfig porte memory=24GB. C'est la deuxieme derive de la meme famille (la premiere : 12 Go declares pour 24 Go de VM, corrigee par #17322 dans l'autre sens).

Changement

Budget unique 16 Go sur les trois jambes, composition recomposee pour tenir dans la VM :

4x1536 docker + 8x512 waiters + 1x6144 lean = 16 384 Mo, les ~7 500 Mo restants etant la marge du noyau, de dockerd et du page cache.

Fichier Geste
persist/coursia-runner-start.sh COURSIA_RUNNER_BUDGET_GB 42 → 16, commentaire date (cause, composition, marge)
persist/coursia-lean-start.sh meme budget 16 ; COURSIA_LEAN_RUNNER_MEMORY declare (6g) et ..._MEMORY_SWAP = la RAM → --memory-swap = --memory, soit aucun swap
persist/coursia-runner.service start 6 → start 4 ; historique de dimensionnement a jour
persist/coursia-waiters.service 12 → 8
persist/coursia-lean.service 2 → 1 ; caps annonces corriges (memory=8g, memory-swap=24g etaient perimes)

Ce qui ne baisse pas, et pourquoi : les caps par conteneur. Ils sont calibres — docker --memory est atteint sous charge avec 0 oom_kill, donc les baisser ferait tuer des jobs sains. Ce sont les effectifs qui baissent. Le volume coursia-runner-work-lean-2 n'est pas supprime : il reste le geste de retour si la VM est reagrandie.

Verification

  • test_supervise_guards.sh : 137 PASS / 0 FAIL (rejoue apres le dernier changement ; le fichier est intact).
  • bash -n sur les trois scripts touches : OK.
  • Arithmetique : composition = 16 384 Mo = budget declare sur les trois jambes ; les trois annoncent le meme nombre (assert_memory_budget somme les familles entre elles — une divergence refuserait des slots sans nommer sa cause).
  • Effet swap : 54 Go → 20 Go de swap potentiel (le lean, 24 576 Mo, passe a zero ; le residu docker+waiters 2x subsiste, cf Residuel).

Residuel declare (non traite ici)

  1. 20 480 Mo de swap potentiel subsistent sur docker (4x3072) et waiters (8x1024). Le mandat ne portait que le lean ; passer ces deux familles a 1x est un geste separe, a mesurer.
  2. Aucun organe ne compare la composition declaree a la config de la VM — c'est ce trou qui laisse la classe se reproduire sans bruit (measure_po2024_topology.py mesure la topologie mais ne confronte rien, et assert_memory_budget ne connait que le budget declare). Item ouvert sur fix(runners): budget memoire po-2024 incoherent avec la VM -- 42 Go declares pour 24 032 Mo disponibles #19805, spec esquissee.
  3. Deploiement : la copie de reference est corrigee ici ; l'application sur l'hote (unites en /etc/systemd/system, wrapper en /usr/local/bin) est un geste sudo poste separement, avec sortie de verification avant application (discipline dry-run).
  4. Ecart de mesure a signaler : le DM annoncait memory-swap=24g sur les lean ; le live porte 12 GiB par slot (2x). La conclusion ne change pas, le chiffre si.

See #19805. Part of #15574. See jsboige/Maintenance#76.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 8, 2026 00:51
…c la VM de 24 Go

La VM WSL est revenue a 24 032 Mo (`.wslconfig memory=24GB`, mesure 2026-10-08)
alors que les declarations budget etaient restees a 42 Go, calibrees sur les
40 110 Mo de l'elargissement du 2026-09-21 (#17322), disparu depuis. Mesure
firsthand : 27 648 Mo de caps declares en vol pour 24 032 Mo de RAM, et
55 296 Mo de swap potentiel -- la sur-souscription est acquise au repos, et
le swap ecrit sur le NVMe qui porte le pagefile de l'hote.

- budget unique 16 Go sur les trois jambes (runner-start, lean-start) ;
- composition recomposee : docker 4x1536 + waiters 8x512 + lean 1x6144
  = 16 384 Mo ; les ~7 500 Mo restants sont la marge du noyau, de dockerd
  et du page cache ;
- les caps PAR CONTENEUR sont conserves (ils sont calibres : docker --memory
  est atteint sous charge, les baisser ferait tuer des jobs sains) : ce sont
  les effectifs qui baissent ;
- memory-swap = memory sur les conteneurs lean : 24 576 Mo de swap non
  comptes par le budget rendus au noyau (cout assume : un build lean qui
  depasse 6 Go sort en exit 137 au lieu de swapper -- la reponse reste de le
  router vers un runner hosted, pas de remonter le total) ;
- commentaires de dimensionnement remis a jour : les trois unites portaient
  encore des effectifs perimes (6/12/2) et coursia-lean.service annoncait des
  caps qui n'existaient plus (memory=8g, memory-swap=24g).

test_supervise_guards.sh : 137 PASS / 0 FAIL.

See #19805. Part of #15574.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…, budget 16 -> 18 Go

Reprise du commit precedent apres lecture de la table du README de persist/ :
`coursia-waiters.service` et `coursia-waiters-start.sh` appartiennent a ai-01.
Les reduire de 12 a 8 aurait change la declaration d'une AUTRE machine depuis
une mission po-2024 -- retire, effectif waiters inchange.

Composition recomposee en consequence : 4x1536 docker + 12x512 waiters +
1x6144 lean = 18 432 Mo, budget declare 18 Go sur les deux jambes po-2024,
marge VM 5 600 Mo pour le noyau, dockerd et le page cache.

Mesure au passage (firsthand, hote po-2024) : les fichiers DEPLOYES ne portent
pas 42 mais 21, avec `start 4` deja dans l'unite docker et le swap lean deja
exporte a `= memory` -- et les services n'ont PAS ete redemarres (conteneurs
live 6/12/2, swap lean 12 GiB). La composition deployee (24 576 Mo) depasse
son propre budget (21 504 Mo) : la machine est a un restart de refuser ses
slots lean. Le depot redevient coherent ici ; l'application sur l'hote est un
geste sudo separe (mot de passe requis, cf #19805).

test_supervise_guards.sh : 137 PASS / 0 FAIL apres le changement de valeurs.

See #19805.
@jsboige jsboige closed this Oct 7, 2026
@jsboige

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

Fermee par sa lane : doublon de #19802, ma propre livraison de la meme mission URGENT (22:43Z, pre-compaction) que cette session avait perdu de vue en resumant le contexte -- #19806 (23:12Z) a re-fait l'arithmetique sans relire ses PRs ouvertes firsthand (lecon post-compaction, encore).

#19802 est canonique : anterieure, deja DEPLOYEE sur l'hote (mur kernel MemoryHigh=20G/MemoryMax=22G/MemorySwapMax=0 actif au releve du 23:50Z, composition 4x1536 + 6x512 + 2x6144 = 21 504 Mo exacte via drop-in waiters machine-specific), et plus complete (cgroup-parent wiring + listes #15202).

Ce que cette PR portait de different, consigne pour l'arbitrage au merge de #19802 si utile : marge VM 5,6 Go (composition 18 432 Mo avec waiters 12 et lean reduit a 1 slot) contre 2,5 Go, et le garde-fou du fichier waiters appartenant a ai-01 -- que #19802 resout plus proprement par drop-in po-2024/.

L'issue d'incident #19805 reste ouverte : elle porte l'organe manquant (rien ne compare composition declaree / config VM -- 2e derive de la famille mesuree).

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Bash Syntax Advisory — shebang / executable-bit warnings

See the Shebang + dry-run advisory job log for the per-file ::warning:: lines. Non-blocking.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant