You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Group plugins into the fewest workers: planner from pins and running history, proven by the benchmark #182
The operator's priority (2026-10-27): take the most advantage of plugin-hostd's ability to run many plugins in ONE process, to save CPU and RAM, on Zynthian first and then everywhere the host runs.
What decides the grouping:
Qualification: a pin's verdict says which plugins may share a worker (only in-process verdicts do), with their measured cost, memory and latency.
Running history: what each plugin actually did on this machine (CPU, xruns, worker restarts, crashes), kept per plugin and per host class, so the host groups what has been steady together and keeps a plugin that misbehaved on its own.
What to build:
A grouping policy in plugin-hostd: given a chain (or a set of chains), pack the members into the fewest workers the pins and the history allow, and say why for each plugin left on its own. Same inputs give the same plan.
A running-history record, written by the host and read by the planner and by plugin-qualify (the qualification can use it to promote or demote a verdict).
Proof from the benchmark: the omx-bench/1 chains-vs-processes runs on the Pi 5 and the desk must show, at the same load, fewer processes, lower RSS/PSS and CPU, and no more xruns than one process per plugin; and under stress, fewer xruns with grouping than without. A grouping that does not win in the benchmark is not shipped as the default.
Zynthian: the PH engine builds its chains through the planner, so every Zynthian chain is grouped as far as the pins allow.
Design note in PR #183. Lanes: plugin-hostd#184 #185#186#187#188#189#190, omx-clap-core#371, plugin-qualify#158, openmixer-www#46; the benchmark run is this issue's (openmixer#2263).
Pi 5 measurements (Zynthian vangelis-2610.1, plugin-hostd 0.12.0 + omx-clap-host 0.22.1, private JACK, 256 frames, no hardware claim): one worker per chain against one process per plugin, N=3/8/16 omx CLAP plugins, 48 and 96 kHz, with and without 8 busy loops. Individual/grouped: RSS 2.9x/7.5x/14.1x, PSS 1.9x/2.6x/2.8x, cpu_pct 1.2x to 1.9x, context switches 2.7x to 14.8x, DSP load 1.1x to 1.4x; processes 4/9/17 against 2. Xruns over the 12 runs of each mode: grouped 10, individual 41. A grouped chain is one JACK client (openmixer#2266). Table and raw rows: ~/Devel/audio/zynthian-results/grouped-vs-processes.md. Bench harness (#179) four-host rows: zynthian-results/bench/rpi5-20261027-1.json.
Activity
linuxnow commentedon Oct 27, 2026
Design note in PR #183. Lanes: plugin-hostd#184 #185 #186 #187 #188 #189 #190, omx-clap-core#371, plugin-qualify#158, openmixer-www#46; the benchmark run is this issue's (openmixer#2263).
linuxnow commentedon Oct 27, 2026
Pi 5 measurements (Zynthian vangelis-2610.1, plugin-hostd 0.12.0 + omx-clap-host 0.22.1, private JACK, 256 frames, no hardware claim): one worker per chain against one process per plugin, N=3/8/16 omx CLAP plugins, 48 and 96 kHz, with and without 8 busy loops. Individual/grouped: RSS 2.9x/7.5x/14.1x, PSS 1.9x/2.6x/2.8x, cpu_pct 1.2x to 1.9x, context switches 2.7x to 14.8x, DSP load 1.1x to 1.4x; processes 4/9/17 against 2. Xruns over the 12 runs of each mode: grouped 10, individual 41. A grouped chain is one JACK client (openmixer#2266). Table and raw rows: ~/Devel/audio/zynthian-results/grouped-vs-processes.md. Bench harness (#179) four-host rows: zynthian-results/bench/rpi5-20261027-1.json.
Design note: group plugins into the fewest workers from pins and runn…
README: grouped workers against one process per plugin, measured