[{"data":1,"prerenderedAt":33},["ShallowReactive",2],{"note-cpu-idle-states-and-plugin-hosting-en":3},{"slug":4,"order":5,"title":6,"summary":7,"measured":8,"topic":9,"toc":10,"html":32},"cpu-idle-states-and-plugin-hosting",150,"\"CPU idle states and plugin hosting: what holding cpu_dma_latency buys\"","Holding \u002Fdev\u002Fcpu_dma_latency at 10 µs, so no core sleeps deeper than C1, cuts the audio graph's cycle three to five times on every host measured and removes the overruns, for one to four watts; holding it at 0 costs sixty watts for a little more. With the hold, mod-host's lead over the other hosts disappears.","An Intel Core Ultra 9 275HX desktop (8 performance and 16 efficiency cores), Fedora 44, kernel 7.2, PipeWire 1.6.9, 96 and 48 kHz at 128 frames, October 2026.","core",[11,14,17,20,23,26,29],{"id":12,"title":13},"the-question","The question",{"id":15,"title":16},"the-machine","The machine",{"id":18,"title":19},"the-whole-graph","The whole graph",{"id":21,"title":22},"what-it-says","What it says",{"id":24,"title":25},"per-plugin","Per plugin",{"id":27,"title":28},"jalv-as-zynthian-runs-a-layer","jalv, as Zynthian runs a layer",{"id":30,"title":31},"caveats","Caveats","\u003Ch2 id=\"the-question\">The question\u003C\u002Fh2>\n\u003Cp>The host library can hold \u003Ccode>\u002Fdev\u002Fcpu_dma_latency\u003C\u002Fcode> while it runs, which tells the kernel not to put any core in an idle\nstate whose exit takes longer than the value. The same plugins were run through mod-host, omx-clap-host (CLAP and the LV2\nadapter), the in-process tier, plugin-hostd and jalv, with the device held at nothing, at 10 µs (C1 only, the shipped\ndefault) and at 0 (no idle state).\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>path\u003C\u002Fth>\n\u003Cth>what holds the device\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>omx-clap-host, CLAP and adapter\u003C\u002Ftd>\n\u003Ctd>its own `--idle-hold=&lt;off\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>in-process CLAP and LV2\u003C\u002Ftd>\n\u003Ctd>the same library call the console's in-process tier makes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>plugin-hostd\u003C\u002Ftd>\n\u003Ctd>its worker, omx-clap-host, with the option passed through\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>mod-host, jalv\u003C\u002Ftd>\n\u003Ctd>nothing of their own: the bench keeps the same request open for the run, as a setup script would\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>&quot;Off&quot; is the machine at rest: its tuned profile held the device at 4000 µs, which refuses no state (C3 exits in 1048 µs).\nThe three holds interleaved per repetition, so a drift of the machine over the hour does not line up with one hold. The\nCLAP rows carry seven plugins, the LV2 rows eight.\u003C\u002Fp>\n\u003Ch2 id=\"the-machine\">The machine\u003C\u002Fh2>\n\u003Cp>Intel Core Ultra 9 275HX (8 performance and 16 efficiency cores, 24 threads), the performance governor, \u003Ccode>intel_idle\u003C\u002Fcode> with the\nmenu governor, states POLL, C1 (1 µs), C2 (127 µs) and C3 (1048 µs), all enabled. Watts are the package's RAPL counter,\nintegrated over each run's 30 s window. Another real-time audio graph ran on the same machine and is inside every watt\nfigure: only the differences between holds mean anything, not the level.\u003C\u002Fp>\n\u003Ch2 id=\"the-whole-graph\">The whole graph\u003C\u002Fh2>\n\u003Cp>Cycle end is the driver's time from wake-up to the last node finished; overruns are cycles that ended past their period.\n96 kHz, 128 frames (period 1333 µs), median of three repetitions:\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>path\u003C\u002Fth>\n\u003Cth>hold\u003C\u002Fth>\n\u003Cth>cycle end p50 µs\u003C\u002Fth>\n\u003Cth>cycle end p99 µs\u003C\u002Fth>\n\u003Cth>overruns \u002F 30 s\u003C\u002Fth>\n\u003Cth>host CPU %\u003C\u002Fth>\n\u003Cth>RSS MiB\u003C\u002Fth>\n\u003Cth>package W\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>mod-host\u003C\u002Ftd>\n\u003Ctd>off\u003C\u002Ftd>\n\u003Ctd>235\u003C\u002Ftd>\n\u003Ctd>675\u003C\u002Ftd>\n\u003Ctd>19\u003C\u002Ftd>\n\u003Ctd>20.7\u003C\u002Ftd>\n\u003Ctd>41.0\u003C\u002Ftd>\n\u003Ctd>19.4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>mod-host\u003C\u002Ftd>\n\u003Ctd>10\u003C\u002Ftd>\n\u003Ctd>74\u003C\u002Ftd>\n\u003Ctd>116\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>8.6\u003C\u002Ftd>\n\u003Ctd>41.0\u003C\u002Ftd>\n\u003Ctd>18.6\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>mod-host\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>27\u003C\u002Ftd>\n\u003Ctd>47\u003C\u002Ftd>\n\u003Ctd>1\u003C\u002Ftd>\n\u003Ctd>3.7\u003C\u002Ftd>\n\u003Ctd>40.9\u003C\u002Ftd>\n\u003Ctd>79.3\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-clap-host CLAP\u003C\u002Ftd>\n\u003Ctd>off\u003C\u002Ftd>\n\u003Ctd>324\u003C\u002Ftd>\n\u003Ctd>720\u003C\u002Ftd>\n\u003Ctd>14\u003C\u002Ftd>\n\u003Ctd>16.5\u003C\u002Ftd>\n\u003Ctd>42.6\u003C\u002Ftd>\n\u003Ctd>17.9\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-clap-host CLAP\u003C\u002Ftd>\n\u003Ctd>10\u003C\u002Ftd>\n\u003Ctd>103\u003C\u002Ftd>\n\u003Ctd>183\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>10.4\u003C\u002Ftd>\n\u003Ctd>42.4\u003C\u002Ftd>\n\u003Ctd>20.1\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-clap-host CLAP\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>41\u003C\u002Ftd>\n\u003Ctd>103\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>4.4\u003C\u002Ftd>\n\u003Ctd>42.5\u003C\u002Ftd>\n\u003Ctd>79.6\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-clap-host adapter\u003C\u002Ftd>\n\u003Ctd>off\u003C\u002Ftd>\n\u003Ctd>355\u003C\u002Ftd>\n\u003Ctd>756\u003C\u002Ftd>\n\u003Ctd>26\u003C\u002Ftd>\n\u003Ctd>15.8\u003C\u002Ftd>\n\u003Ctd>28.8\u003C\u002Ftd>\n\u003Ctd>18.0\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-clap-host adapter\u003C\u002Ftd>\n\u003Ctd>10\u003C\u002Ftd>\n\u003Ctd>72\u003C\u002Ftd>\n\u003Ctd>120\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>8.6\u003C\u002Ftd>\n\u003Ctd>28.8\u003C\u002Ftd>\n\u003Ctd>19.2\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-clap-host adapter\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>26\u003C\u002Ftd>\n\u003Ctd>42\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>3.8\u003C\u002Ftd>\n\u003Ctd>28.7\u003C\u002Ftd>\n\u003Ctd>79.7\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>in-process CLAP\u003C\u002Ftd>\n\u003Ctd>off\u003C\u002Ftd>\n\u003Ctd>369\u003C\u002Ftd>\n\u003Ctd>797\u003C\u002Ftd>\n\u003Ctd>39\u003C\u002Ftd>\n\u003Ctd>18.8\u003C\u002Ftd>\n\u003Ctd>40.5\u003C\u002Ftd>\n\u003Ctd>17.8\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>in-process CLAP\u003C\u002Ftd>\n\u003Ctd>10\u003C\u002Ftd>\n\u003Ctd>101\u003C\u002Ftd>\n\u003Ctd>186\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>10.9\u003C\u002Ftd>\n\u003Ctd>40.9\u003C\u002Ftd>\n\u003Ctd>19.5\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>in-process CLAP\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>43\u003C\u002Ftd>\n\u003Ctd>80\u003C\u002Ftd>\n\u003Ctd>1\u003C\u002Ftd>\n\u003Ctd>4.8\u003C\u002Ftd>\n\u003Ctd>40.6\u003C\u002Ftd>\n\u003Ctd>79.6\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>in-process LV2\u003C\u002Ftd>\n\u003Ctd>off\u003C\u002Ftd>\n\u003Ctd>392\u003C\u002Ftd>\n\u003Ctd>768\u003C\u002Ftd>\n\u003Ctd>17\u003C\u002Ftd>\n\u003Ctd>18.2\u003C\u002Ftd>\n\u003Ctd>24.6\u003C\u002Ftd>\n\u003Ctd>17.6\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>in-process LV2\u003C\u002Ftd>\n\u003Ctd>10\u003C\u002Ftd>\n\u003Ctd>72\u003C\u002Ftd>\n\u003Ctd>127\u003C\u002Ftd>\n\u003Ctd>1\u003C\u002Ftd>\n\u003Ctd>9.6\u003C\u002Ftd>\n\u003Ctd>24.6\u003C\u002Ftd>\n\u003Ctd>19.4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>in-process LV2\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>26\u003C\u002Ftd>\n\u003Ctd>44\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>3.8\u003C\u002Ftd>\n\u003Ctd>24.6\u003C\u002Ftd>\n\u003Ctd>79.6\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>plugin-hostd\u003C\u002Ftd>\n\u003Ctd>off\u003C\u002Ftd>\n\u003Ctd>224\u003C\u002Ftd>\n\u003Ctd>644\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>26.1\u003C\u002Ftd>\n\u003Ctd>91.4\u003C\u002Ftd>\n\u003Ctd>18.1\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>plugin-hostd\u003C\u002Ftd>\n\u003Ctd>10\u003C\u002Ftd>\n\u003Ctd>82\u003C\u002Ftd>\n\u003Ctd>139\u003C\u002Ftd>\n\u003Ctd>1\u003C\u002Ftd>\n\u003Ctd>16.5\u003C\u002Ftd>\n\u003Ctd>91.5\u003C\u002Ftd>\n\u003Ctd>19.5\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>plugin-hostd\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>27\u003C\u002Ftd>\n\u003Ctd>140\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>7.2\u003C\u002Ftd>\n\u003Ctd>91.6\u003C\u002Ftd>\n\u003Ctd>79.8\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>jalv\u003C\u002Ftd>\n\u003Ctd>off\u003C\u002Ftd>\n\u003Ctd>341\u003C\u002Ftd>\n\u003Ctd>816\u003C\u002Ftd>\n\u003Ctd>23\u003C\u002Ftd>\n\u003Ctd>16.6\u003C\u002Ftd>\n\u003Ctd>109.4\u003C\u002Ftd>\n\u003Ctd>21.1\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>jalv\u003C\u002Ftd>\n\u003Ctd>10\u003C\u002Ftd>\n\u003Ctd>72\u003C\u002Ftd>\n\u003Ctd>121\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>8.2\u003C\u002Ftd>\n\u003Ctd>109.3\u003C\u002Ftd>\n\u003Ctd>20.7\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>jalv\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>26\u003C\u002Ftd>\n\u003Ctd>50\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>3.4\u003C\u002Ftd>\n\u003Ctd>109.4\u003C\u002Ftd>\n\u003Ctd>78.9\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>At 48 kHz and 128 frames the story is the same with higher numbers: 243 to 439 µs at rest, 80 to 118 at 10 and 26 to 49 at\n0, and no path overran in any hold.\u003C\u002Fp>\n\u003Ch2 id=\"what-it-says\">What it says\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>The hold at 10 µs cuts the cycle end three to five times on every path, and mod-host's lead is gone.\u003C\u002Fstrong> With the hold\noff, mod-host and plugin-hostd end their cycles at 224 to 235 µs, where omx-clap-host and the in-process tier take 324 to\n392. At 10 every path sits between 72 and 103 µs; at 0 between 26 and 43. mod-host's advantage at rest was the cores its\nextra clients kept awake; once no core sleeps past C1 the hosts are equal for one plugin set. The two CLAP rows stay about\n30 µs above the LV2 rows at every hold: that is the CLAP paths' own cost, not an idle effect.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Overruns go with it\u003C\u002Fstrong>: 14 to 39 per 30 s with the hold off at 96 kHz, 0 or 1 at 10.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>10 µs costs one to four watts; 0 costs sixty.\u003C\u002Fstrong> At 96 kHz the hold at 10 reads 1.2 to 2.2 W more than rest on most\npaths; at 48 kHz 1.6 to 3.7 W more, since the cores have twice as long to sleep between cycles there. The hold at 0 refuses\neven C1, so every thread polls between cycles: 58 to 64 W more, four times the package power, for a further 45 to 60 µs of\ncycle end. So 10 µs is the default, and 0 only an explicit choice.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Host CPU is clock time\u003C\u002Fstrong>, so it falls as cycles shorten; it is not the host working less.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Memory does not move with the hold.\u003C\u002Fstrong> Between paths: in-process LV2 25 MiB, the adapter 29, mod-host and the CLAP rows\n41 to 43, plugin-hostd 91 (the daemon and its worker), jalv 109 for eight processes.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"per-plugin\">Per plugin\u003C\u002Fh2>\n\u003Cp>The node's own time per cycle (the plugin plus what its host does inside the node's cycle), 96 kHz, 128 frames, median of\nthree repetitions, µs, hold off \u002F 10 \u002F 0:\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>plugin\u003C\u002Fth>\n\u003Cth>mod-host\u003C\u002Fth>\n\u003Cth>omx-clap-host CLAP\u003C\u002Fth>\n\u003Cth>adapter\u003C\u002Fth>\n\u003Cth>in-process CLAP\u003C\u002Fth>\n\u003Cth>in-process LV2\u003C\u002Fth>\n\u003Cth>plugin-hostd\u003C\u002Fth>\n\u003Cth>jalv\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>omx-comp\u003C\u002Ftd>\n\u003Ctd>3.8 \u002F 2.7 \u002F 2.4\u003C\u002Ftd>\n\u003Ctd>4.6 \u002F 5.4 \u002F 2.7\u003C\u002Ftd>\n\u003Ctd>3.1 \u002F 4.1 \u002F 2.4\u003C\u002Ftd>\n\u003Ctd>3.9 \u002F 3.5 \u002F 3.5\u003C\u002Ftd>\n\u003Ctd>3.3 \u002F 3.3 \u002F 3.2\u003C\u002Ftd>\n\u003Ctd>5.5 \u002F 5.6 \u002F 2.6\u003C\u002Ftd>\n\u003Ctd>2.6 \u002F 2.4 \u002F 2.2\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-delay\u003C\u002Ftd>\n\u003Ctd>2.2 \u002F 1.2 \u002F 0.9\u003C\u002Ftd>\n\u003Ctd>2.8 \u002F 1.3 \u002F 0.8\u003C\u002Ftd>\n\u003Ctd>3.4 \u002F 1.5 \u002F 0.9\u003C\u002Ftd>\n\u003Ctd>5.0 \u002F 3.7 \u002F 1.6\u003C\u002Ftd>\n\u003Ctd>5.6 \u002F 3.9 \u002F 1.8\u003C\u002Ftd>\n\u003Ctd>3.1 \u002F 2.3 \u002F 1.0\u003C\u002Ftd>\n\u003Ctd>4.0 \u002F 2.0 \u002F 0.8\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-deesser\u003C\u002Ftd>\n\u003Ctd>4.6 \u002F 5.7 \u002F 3.3\u003C\u002Ftd>\n\u003Ctd>6.1 \u002F 6.7 \u002F 3.6\u003C\u002Ftd>\n\u003Ctd>5.5 \u002F 5.8 \u002F 3.4\u003C\u002Ftd>\n\u003Ctd>8.2 \u002F 8.2 \u002F 3.9\u003C\u002Ftd>\n\u003Ctd>7.6 \u002F 7.6 \u002F 3.4\u003C\u002Ftd>\n\u003Ctd>6.1 \u002F 6.2 \u002F 3.4\u003C\u002Ftd>\n\u003Ctd>5.5 \u002F 5.7 \u002F 3.2\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-eq8\u003C\u002Ftd>\n\u003Ctd>1.7 \u002F 1.2 \u002F 0.6\u003C\u002Ftd>\n\u003Ctd>1.9 \u002F 1.1 \u002F 0.5\u003C\u002Ftd>\n\u003Ctd>2.4 \u002F 1.5 \u002F 0.6\u003C\u002Ftd>\n\u003Ctd>4.6 \u002F 2.7 \u002F 1.5\u003C\u002Ftd>\n\u003Ctd>5.4 \u002F 3.1 \u002F 1.4\u003C\u002Ftd>\n\u003Ctd>2.5 \u002F 2.0 \u002F 0.7\u003C\u002Ftd>\n\u003Ctd>2.3 \u002F 1.4 \u002F 0.5\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>omx-reverb\u003C\u002Ftd>\n\u003Ctd>5.8 \u002F 7.7 \u002F 3.7\u003C\u002Ftd>\n\u003Ctd>5.7 \u002F 7.3 \u002F 3.2\u003C\u002Ftd>\n\u003Ctd>6.3 \u002F 7.7 \u002F 3.5\u003C\u002Ftd>\n\u003Ctd>8.2 \u002F 8.5 \u002F 4.5\u003C\u002Ftd>\n\u003Ctd>8.5 \u002F 8.8 \u002F 4.0\u003C\u002Ftd>\n\u003Ctd>8.0 \u002F 8.6 \u002F 3.9\u003C\u002Ftd>\n\u003Ctd>6.5 \u002F 7.0 \u002F 3.2\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ZamCompX2\u003C\u002Ftd>\n\u003Ctd>3.8 \u002F 4.6 \u002F 2.4\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>4.4 \u002F 5.0 \u002F 2.5\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>6.7 \u002F 6.6 \u002F 3.1\u003C\u002Ftd>\n\u003Ctd>5.2 \u002F 5.5 \u002F 2.7\u003C\u002Ftd>\n\u003Ctd>4.1 \u002F 4.6 \u002F 2.4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>caps PlateX2\u003C\u002Ftd>\n\u003Ctd>5.7 \u002F 9.4 \u002F 4.4\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>6.2 \u002F 9.7 \u002F 4.3\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>8.8 \u002F 11.2 \u002F 5.2\u003C\u002Ftd>\n\u003Ctd>7.1 \u002F 9.8 \u002F 4.6\u003C\u002Ftd>\n\u003Ctd>6.0 \u002F 8.8 \u002F 4.3\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>caps CompressX2\u003C\u002Ftd>\n\u003Ctd>9.8 \u002F 16.8 \u002F 8.5\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>10.2 \u002F 16.8 \u002F 8.6\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>12.8 \u002F 19.0 \u002F 9.7\u003C\u002Ftd>\n\u003Ctd>11.6 \u002F 17.4 \u002F 7.9\u003C\u002Ftd>\n\u003Ctd>10.0 \u002F 16.7 \u002F 8.4\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>LSP compressor\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>5.7 \u002F 4.8 \u002F 2.0\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>8.3 \u002F 6.0 \u002F 2.8\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Dragonfly Room\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>28.0 \u002F 49.6 \u002F 25.0\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>31.5 \u002F 51.1 \u002F 26.7\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cul>\n\u003Cli>\u003Cstrong>Across hosts, at one hold, a plugin costs the same within one or two microseconds.\u003C\u002Fstrong> The in-process rows read one to\nthree microseconds higher on the light plugins: the per-block guards the in-process tier runs (a clamp and a non-finite\nscan), which the socket hosts do not.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The hold's effect per node is not monotonic.\u003C\u002Fstrong> From rest to 10 the light plugins get faster but the heavy ones slower, on\nevery host alike: one compressor from about 10 to 17 µs, a reverb from 28 to 50. At 0 everything is fastest. The whole\ngraph still gains at 10, because the idle-state exit it removes is hundreds of microseconds.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Two checks were made for that slowdown, and neither explains it. Core placement: the host's real-time threads sat on\nperformance cores 65 % of the time at rest, 77 % at 10 and 61 % at 0, so the slowest hold had the most performance-core\ntime. Clocks: the uncore held its maximum under every hold, and the cores read 3.8 to 4.6 GHz at rest and at 10. So a\nreverb or a look-ahead compressor runs slower per cycle with every core halted in C1, on every host, and this run does not\nsay why. The whole-graph gain stands over it by an order of magnitude.\u003C\u002Fp>\n\u003Ch2 id=\"jalv-as-zynthian-runs-a-layer\">jalv, as Zynthian runs a layer\u003C\u002Fh2>\n\u003Cp>One \u003Ccode>jalv -i\u003C\u002Fcode> process per plugin, eight processes, the LV2 build of the same set:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Eight processes cost the same cycle as one.\u003C\u002Fstrong> With the hold at 10, jalv ends the cycle at 72 µs against 72 to 74 for\nmod-host and the adapter in one process; at 0, 26 against 26 to 27.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>They cost memory and a little power\u003C\u002Fstrong>: 109 MiB for eight jalv processes against 29 to 41 for one process holding the\nsame plugins.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>jalv's probe cycles arrive late more often\u003C\u002Fstrong> at every hold, though its node times per plugin are everyone's.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A plugin GUI shown on a virtual X server changes the cycle by nothing\u003C\u002Fstrong> and costs 94 MiB and about a watt.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"caveats\">Caveats\u003C\u002Fh2>\n\u003Cp>One machine, one plugin set, 30 s windows, three repetitions. The in-process rows are the bench's own small host making\nthe same library calls as the console's tier, not the console itself.\u003C\u002Fp>\n",1793954995919]