Skip to content

Keep the post-update setup off the boot path, and stop the web seeder holding the boot - #125

Merged
solutionphil merged 1 commit into
alphafrom
boot-priority
Sep 5, 2026
Merged

solutionphil merged 1 commit into
alphafrom
boot-priority

Conversation

@solutionphil

Copy link
Copy Markdown
Owner

Symptom: since the guard set went live, the display comes up 30–50 s later than it used to.

Measured 2026-09-05 on the dev printer (seconds after power-on): the 12 klipper guards 17→26, klippy ready 28.6; Spoolman 18→64 (34 s Python start, 8 s migrations); optimize-boot.sh running in the background 19→80 as arco-reconcile after the #124 update; Moonraker only from 64, server ready 83; voronFDM starts at 64 and can connect at 83; arco-console-filters 64→87 holding multi-user.target.

The Spoolman ordering is that printer's personal unit and not the kit's business. What is the kit's:

  1. The two detached optimize-boot.sh runs (arco-reconcile from ensure-imageid.sh, arco-guard-repair-run from repair-guards.sh) now start with --nice=19 -p IOSchedulingClass=idle. Nothing waits on them; both take effect on the next start.
  2. arco-console-filters.service is Type=simple with a single ExecStart, the new scripts/apply-web-seeds.sh, which runs the same three seeds in the same order and with the same tolerance the three ExecStart= lines had. A oneshot under multi-user.target held "Startup finished" for the whole poll.

Not changed, worth knowing: the 22 daemon-reloads inside optimize-boot.sh run in PID 1 and are not affected by nice; a follow-up could batch them.

Checks: bash -n on all four scripts, ShellCheck error-severity clean, no other script depends on the old unit shape (grep over scripts/ and .github/).

🤖 Generated with Claude Code

… holding the boot

After every kit update the first boot runs optimize-boot.sh for about 60 s in the background
(22 daemon-reloads, every drop-in rewritten), at default priority, on the same two cores every
service shares. Measured 2026-09-05 on the dev printer: a Spoolman cold start stretched to 46 s,
Moonraker -- ordered after it there -- started at 64 s and the display connected at 83 s instead
of about 35 s. On the alpha channel nearly every boot is a post-update boot.

The two detached runs (arco-reconcile from ensure-imageid.sh, arco-guard-repair-run from
repair-guards.sh) now start with nice 19 and idle I/O. Nothing waits on either: both take effect
on the next start, so they can yield to everything that does.

arco-console-filters.service was a Type=oneshot with three ExecStart= lines, and a oneshot under
multi-user.target holds "Startup finished" until it exits: 22.9 s of 82 s on a printer with nothing
left to seed. It is now Type=simple with the one ExecStart that shape allows, apply-web-seeds.sh,
which runs the same three seeds in the same order with the same tolerance.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@solutionphil
solutionphil merged commit b095738 into alpha Sep 5, 2026
5 checks passed
@solutionphil
solutionphil deleted the boot-priority branch September 5, 2026 07:53
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