The node-engine runs yielding processes in one capped idle slice (issue 1806, ADR 0553/0554, change A) #148

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

Issue 1806. Change A, group fix/build-cpu-yields with mesh-sdk and mesh-catalog.

A unit whose declared process yields gets Slice=meshyield.slice, Nice=19 and the lowest best-effort IO level; the engine writes one /etc/systemd/system/meshyield.slice (CPUWeight=idle, IOWeight=1, CPUQuota = share × processors) beside the units it owns, rewritten when missing or different. The share is mesh-host's own config build-cpu-share (1-100, default 50, runtime: true; ADR 0554 §1). Nothing yields until change B's composer sends yields, so A is inert on the machines except a new engine build. IO controls bind only under bfq/io.cost (NVMe with scheduler none ignores them; said in the comments).

The operator's values (ADR 0554 §2): 50% on every machine; ace 75% through its node layer right after B.

Tests and vet clean. Try try-1793022907908697761 passed.

Reviewed-by: review-buildcpu@shanks at a78239b2aa

Issue 1806. Change A, group fix/build-cpu-yields with mesh-sdk and mesh-catalog. A unit whose declared process yields gets Slice=meshyield.slice, Nice=19 and the lowest best-effort IO level; the engine writes one /etc/systemd/system/meshyield.slice (CPUWeight=idle, IOWeight=1, CPUQuota = share × processors) beside the units it owns, rewritten when missing or different. The share is mesh-host's own config `build-cpu-share` (1-100, default 50, runtime: true; ADR 0554 §1). Nothing yields until change B's composer sends `yields`, so A is inert on the machines except a new engine build. IO controls bind only under bfq/io.cost (NVMe with scheduler none ignores them; said in the comments). The operator's values (ADR 0554 §2): 50% on every machine; ace 75% through its node layer right after B. Tests and vet clean. Try try-1793022907908697761 passed. Reviewed-by: review-buildcpu@shanks at a78239b2aa05524c96ea55e3921683ad6c8df524
mesh-tools added 7 commits 2026-10-26 14:22:05 +00:00
A build seat's runtime took 1650% of shanks' 24 processors and slowed the
operator's desktop. The unit of a process declared with yields now carries
CPUWeight=idle, IOWeight=1, Nice=19, the lowest best-effort IO level, and
CPUQuota for its share of the processors this machine has.
Review round 1: one quota per unit let three build modules take three shares.
The engine now writes meshyield.slice, top-level so its idle weight binds
against the operator's session, with the node's share as its CPUQuota; each
yielding unit joins it at nice 19. Comments say the IO controls bind only under
bfq or io.cost, not under the none scheduler NVMe disks use.
The share belongs to the part that enforces it: build-cpu-share, default 50,
set per node through the node's settings layer and read by the composer for
the build seats' runtimes. Pin mesh-sdk at fix/build-cpu-yields' head.
Pin mesh-sdk at fix/build-cpu-yields' head (ADR 0553, ADR 0554)
mesh/delivery merged: source.main moved to novox/mesh-host@ff9386dcccc2
mesh/delivery-group group fix/build-cpu-yields merged: every member is merged
mesh/check being carried to a78239b2aa05 on ff9386dcccc2 | from bba9081ca127, mesh-catalog 9a8e54d988fe
a78239b2aa
Author
Member

Delivery novox/mesh-host@a78239b2aa05 — merged since 2026-10-26T14:22:57Z

Source — source.main moved to novox/mesh-host@ff9386dccc. 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-host#148'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-host@a78239b2aa05` — **merged** since 2026-10-26T14:22:57Z **Source** — source.main moved to novox/mesh-host@ff9386dcccc2. 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-host#148'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.
mesh-tools merged commit ff9386dccc into main 2026-10-26 14:22:55 +00:00
mesh-tools deleted branch fix/build-cpu-yields 2026-10-26 14:22:55 +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-host#148