perf(poort): de tagpoort meet geen dekking meer, en de runner draait één taak tegelijk #796
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!796
Loading…
Reference in a new issue
No description provided.
Delete branch "perf/ci-zonder-dekkingsmeting"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
De twee wijzigingen uit het onderzoek naar de trage gate. De derde optie — de gate op de Mac-runner — is bewust níet gedaan.
Wat er is gemeten
Een poortrun op de eigen runner duurde 46 minuten tegen 2,5 lokaal. Nagemeten waar die tijd zat:
3,8× trager per kern × ~3× minder kernen ≈ 11×, en dat is precies de waargenomen factor. Schijf en opslagstuurprogramma nagekeken en vrijuit (
overlayfs, ~106 MB/s sequentieel) — het werk is CPU-gebonden.Van die 46 minuten ging 33 min 49 s naar één fase:
flutter test --coverage. Die instrumentatie houdt per test een VM-Service-verbinding open tot het eind van de run en parallelliseert daarmee het slechtst van alles wat we draaien.Wat er verandert
make check-no-coverage— elke statische poort diecheckook draait, daarnatestin plaats vancoverage+coverage-per-file. De volledige suite draait onverkort en in willekeurige volgorde; alleen de instrumentatie gaat eraf. De statische poorten staan nu in één gedeeldeSTATIC_GATES-lijst, zodat een nieuwe poort niet aan één van de twee doelen kan ontbreken.De tagpoort in
.forgejo/workflows/ci.ymldraait dat doel.Runnercapaciteit 1 (op de server, buiten deze PR): stond op 4. Taak 661 deelde de bak met 662 en 663 — drie gates tegelijk op vier fysieke kernen, elk met een
flutter testdie per kern werkers opstart. Dat verergerde de wachttijd én was de bron van de flakes onder last. Config geback-upt, runner herstart met 0 taken onderbroken.Wat dit kost
De dekkingsvloer en de per-bestandsvloer draaien in CI niet meer. Ze zijn onveranderd en onverkort verplicht in
make check, op de machine van de committer, vóór main. Dat is een verplaatsing en geen versoepeling, en ze houdt alleen omdat de samenvoegpoort daar toch al lag (#790). Het staat expliciet in het Makefile-doel zelf, in de workflow, en in CHECKS.md — op drie plekken, want dit is precies het soort ding dat stil wegzakt.Eerlijk over de opbrengst
Die 74% is niet de winst — de suite moet nog steeds draaien. Lokaal nagemeten:
make test112 s wandklok / 595 s CPU tegenmake coverage147 s / 971 s, dus −24% wandklok en −39% CPU. Op vier kernen zit de run tegen zijn CPU aan en nadert de wandklokwinst die −39%: geschat 33 min 49 s → ~21 min, oftewel ~13 minuten van de 46. Reëel, maar geen factor.Ik had eerder ~34 minuten winst genoemd. Dat was fout: ik verwarde de duur van de fase met de winst van het weghalen van de instrumentatie.
Poorten
make checkgroen (6300 toetsen, exit 0) — de dekkingsvloeren dus ook.make check-no-coveragegroen (6300 toetsen, exit 0).make check-secretsgroen,make sastgroen (0 bevindingen).render_page_serialisation_testviel om bij het laden onder--coverage, na vier volledige suites achter elkaar. Weg narm -rf build/test_cache; los draaien was altijd groen. Bekende klasse, geen bevinding van deze wijziging.