Build seats yield: the decoder, buildcpu and NodeLimits (issue 1806, ADR 0553/0554, change A) #94

Merged
mesh-tools merged 6 commits from fix/build-cpu-yields into main 2026-10-26 14:22:47 +00:00
Member

Issue 1806 (build modules ran with no CPU limit; shanks reached 1650%). ADR 0553 (accepted, operator) and ADR 0554 (accepted). Change A, group fix/build-cpu-yields with mesh-host and mesh-catalog. Change B (the composer, fix/build-cpu-yields-compose) merges only after A's mesh-host runs on every node (ADR 0553 §5).

  • declaration.Process.Yields (decoder type), YieldSlice = "meshyield.slice".
  • buildcpu: the share, quota, threads per step (share ÷ the module's own capacity), the words, and reading what the cgroup holds. No share word → no thread limit.
  • buildstep.NodeLimits reads those words.
  • Seat.Yields on node-build-go/node/image (Decision names ADR 0553); no composer change in A, so A changes no composed bytes.

Tests: buildcpu_test.go, TestNodeLimits. Suites and vet clean. Try try-1793022717406822322 passed.

Reviewed-by: review-buildcpu@shanks at 17b7cc480d

Issue 1806 (build modules ran with no CPU limit; shanks reached 1650%). ADR 0553 (accepted, operator) and ADR 0554 (accepted). Change A, group fix/build-cpu-yields with mesh-host and mesh-catalog. Change B (the composer, fix/build-cpu-yields-compose) merges only after A's mesh-host runs on every node (ADR 0553 §5). - `declaration.Process.Yields` (decoder type), `YieldSlice = "meshyield.slice"`. - `buildcpu`: the share, quota, threads per step (share ÷ the module's own capacity), the words, and reading what the cgroup holds. No share word → no thread limit. - `buildstep.NodeLimits` reads those words. - `Seat.Yields` on node-build-go/node/image (Decision names ADR 0553); no composer change in A, so A changes no composed bytes. Tests: buildcpu_test.go, TestNodeLimits. Suites and vet clean. Try try-1793022717406822322 passed. Reviewed-by: review-buildcpu@shanks at 17b7cc480d6d772572e0b7d7b81b6e832a6b3c59
mesh-tools added 6 commits 2026-10-26 14:22:00 +00:00
The operator's desktop slows while it builds: the Go build runtime took 1650% of
shanks' 24 processors with nothing holding it back. A build seat's holder now
runs its runtime at idle priority under its node's cpu-cap share (declaration
Yields, composed from Seat.Yields and the module's cpu-cap setting), and
buildcpu/buildstep give each step its part of that cap in threads.
Review round 1: the decoder type ships before any composer can emit it, so a
routine SDK bump never sends yields to an engine that refuses them; the
composer half moves to a later change. Every yielding process of a node goes
into one top-level slice, meshyield.slice, so the three build modules share one
quota instead of taking one each; the share is one node value, node-tools'
build-cpu-share, and each step's threads divide it by every build slot of the
node (words from the composer, a conservative fallback without them).
Review round 2: change A must not slow builds before any slice exists, so a
module given no share sets no GOMAXPROCS. The slice's quota bounds the total;
threads only size one step, from the node's share over the module's own
capacity (shanks: 24 x 50% / 3 = 4). The share is the node-engine's own config.
Merge main into fix/build-cpu-yields
mesh/delivery merged: source.main moved to novox/mesh-sdk@75be8acbad4d
mesh/delivery-group group fix/build-cpu-yields merged: every member is merged
mesh/check checking 17b7cc480d6d on d103ed88ab17 | novox/mesh-sdk#94 in group fix/build-cpu-yields
17b7cc480d
Author
Member

Delivery novox/mesh-sdk@17b7cc480d6d — merged since 2026-10-26T14:22:49Z

Source — source.main moved to novox/mesh-sdk@75be8acbad. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/build-cpu-yields: novox/mesh-catalog@2aecbe8055, novox/mesh-host@a78239b2aa, novox/mesh-sdk@17b7cc480d

Transitions

  • 2026-10-26 14:22 (new) → proposed (announced): novox/mesh-sdk#94's head announced
  • 2026-10-26 14:22 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-10-26 14:22 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@17b7cc480d6d` — **merged** since 2026-10-26T14:22:49Z **Source** — source.main moved to novox/mesh-sdk@75be8acbad4d. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/build-cpu-yields`: novox/mesh-catalog@2aecbe80553c, novox/mesh-host@a78239b2aa05, novox/mesh-sdk@17b7cc480d6d **Transitions** - 2026-10-26 14:22 (new) → proposed (announced): novox/mesh-sdk#94's head announced - 2026-10-26 14:22 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-10-26 14:22 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-tools merged commit 75be8acbad into main 2026-10-26 14:22:47 +00:00
mesh-tools deleted branch fix/build-cpu-yields 2026-10-26 14:22:47 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#94