Plugins - measured

One worker per chain, or one process per plugin.

plugin-hostd can run a chain of plugins inside one worker process, or give every plugin its own process. This page is one measurement of the two on a Raspberry Pi 5, with every row, and with what was not measured.

01

What came out.

  • Memory: with 16 plugins, resident memory (RSS) is 14x smaller grouped (125.4 MB against 1764.6 MB at 48 kHz) and proportional memory (PSS) is 2.8x smaller (42.9 MB against 118.2 MB).
  • CPU: 1.2 to 1.9x less when grouped, across 3, 8 and 16 plugins at 48 and 96 kHz.
  • Context switches: up to about 14x fewer when grouped, 13.9x at 48 kHz and 14.8x at 96 kHz with 16 plugins.
  • Xruns over the 12 runs of each mode: 10 grouped against 41 with one process per plugin.

RSS counts a shared library once for every process that maps it, so a design with many processes looks larger than it is. PSS divides shared pages between the processes that use them, so it is the honest figure, and both are shown. Do not read the RSS ratio as the saving in real memory.

Each run is one window of 10 seconds and the xruns in it are few and unevenly spread, so the 10 against 41 is suggestive and not proof. Read it as a count and not as a rate.

02

How it was measured.

Raspberry Pi 5 with 4 cores running Zynthian, CPU governor on performance during the runs. plugin-hostd 0.12.0 with omx-clap-host 0.22.1 as the worker. N instances of omx plugins in series (chorus, comp, deesser, delay, drive, eq8, flanger and geq, in turn), a sine in, 256 frames, on a private JACK server with a dummy driver. The JACK server of the live system was not touched. Both modes produce the same output signal (peaks equal within 1%).

Each run is one window of 10 seconds after 1 second of warm-up. N is 3, 8 or 16, the rate 48 or 96 kHz, each with and without stress (8 busy-loop processes on the 4 cores). That is 12 runs of each mode.

Memory and CPU are summed over plugin-hostd and its workers. CPU is a percentage of one core. Context switches are voluntary plus involuntary ones of all their threads in the window. DSP is the JACK load, average and maximum, read once a second. Xruns are the JACK xrun callbacks in the window.

03

What was not measured.

  • Only 256 frames. 128 frames were not run.
  • Only plugin-hostd, with omx plugins. No other plugin host, and no third-party plugin, is in these numbers.
  • The grouping planner that will decide which plugins share a worker is not part of this result. The numbers compare the two fixed modes and no default has been changed because of them.
  • DSP load and xruns are those of the JACK dummy driver. No claim about real audio hardware is made.

04

The ratios.

One process per plugin divided by grouped, without stress. Processes are shown as individual / grouped. For CPU and context switches a ratio above 1 means the grouped run used less.

Rate (Hz)PluginsProcessesRSSPSSCPUContext switches
4800034 / 22.92x1.90x1.24x2.71x
4800089 / 27.46x2.60x1.62x7.02x
480001617 / 214.07x2.76x1.86x13.92x
9600034 / 22.92x1.90x1.21x2.83x
9600089 / 27.46x2.60x1.43x7.41x
960001617 / 214.07x2.76x1.60x14.78x

05

Every row.

The 24 runs as measured. Memory in MB, CPU as percent of one core, DSP as average / maximum percent.

Rate (Hz)PluginsStressModeProcessesJACK clientsRSS MBPSS MBCPU %Context switchesDSP avg / max %Xruns
480003nogrouped21113.431.02.127952.1 / 2.270
480003noone per plugin43331.059.02.675792.34 / 2.370
480003yesgrouped21113.430.92.428382.11 / 2.230
480003yesone per plugin43330.958.92.776162.4 / 2.450
480008nogrouped21118.135.63.927933.86 / 3.880
480008noone per plugin98881.692.76.3196124.86 / 4.90
480008yesgrouped21118.135.6428093.89 / 3.990
480008yesone per plugin98881.792.66.49198204.92 / 5.330
4800016nogrouped21125.442.97.228017.25 / 7.290
4800016noone per plugin17161764.6118.213.39389859.83 / 9.980
4800016yesgrouped21125.442.97.327957.24 / 7.310
4800016yesone per plugin17161764.5118.013.15392199.94 / 12.4918
960003nogrouped21113.431.03.846784.05 / 4.110
960003noone per plugin43330.959.04.6132334.52 / 4.570
960003yesgrouped21113.430.93.947494.16 / 4.260
960003yesone per plugin43330.959.04.8133974.62 / 4.820
960008nogrouped21118.135.67.546797.62 / 7.792
960008noone per plugin98881.592.710.69346749.38 / 9.450
960008yesgrouped21118.135.67.446967.59 / 7.763
960008yesone per plugin98881.792.611.38348759.53 / 10.1510
9600016nogrouped21125.442.914.2470014.41 / 14.790
9600016noone per plugin17161764.5118.222.686946619.16 / 22.3313
9600016yesgrouped21125.442.914.2471714.37 / 14.615
9600016yesone per plugin17161764.4118.023.337652019.52 / 19.940

The plugins themselves are described on the page on the shipped plugins.

openmixer

A software mixing console for Linux. The desk is the software; the browser is the surface.

Pages

Licence

OpenMixer is free software under the GPL-3.0-or-later. Every package in the workspace carries the same licence.

Roland, Midas, Behringer, RME and the product names used here belong to their respective owners. OpenMixer is an independent project and is not affiliated with any of them.