[{"data":1,"prerenderedAt":33},["ShallowReactive",2],{"note-one-worker-per-chain-or-one-process-per-plugin-ca":3},{"slug":4,"order":5,"title":6,"summary":7,"measured":8,"topic":9,"toc":10,"html":32},"one-worker-per-chain-or-one-process-per-plugin",100,"\"Un worker per cadena o un procés per plugin: els pros i els contres\"","Agrupar una cadena en un sol worker estalvia la major part de la memòria i bona part de la CPU que gasta un procés per plugin i una fallada continua costant només el plugin que ha fallat; el preu és que cal refiar-se dels plugins que comparteixen procés i això és el que decideix la qualificació.","Raspberry Pi 5 amb Zynthian, 48 kHz, 256 mostres, octubre i novembre del 2026; les versions s'indiquen amb cada xifra.","zynthian",[11,14,17,20,23,26,29],{"id":12,"title":13},"que-hi-guanyes-agrupant","Què hi guanyes agrupant",{"id":15,"title":16},"que-costa","Què costa",{"id":18,"title":19},"allotjar-clap","Allotjar CLAP",{"id":21,"title":22},"qualificacio-i-empremtes","Qualificació i empremtes",{"id":24,"title":25},"compatibilitat-amb-mod-host","Compatibilitat amb mod-host",{"id":27,"title":28},"paquets","Paquets",{"id":30,"title":31},"el-que-no-esta-fet","El que no està fet","\u003Cp>plugin-hostd fa córrer una cadena en un sol procés worker (agrupada) o cada plugin en un worker propi. Els amfitrions del\nmateix Zynthian són als dos extrems: jalv fa córrer un procés per plugin, mod-host tots els plugins en un sol procés. Les\nxifres són a \u003Ca href=\"\u002Fca\u002Fnotes\u002Fplugin-hostd-on-a-raspberry-pi-5\">plugin-hostd en una Raspberry Pi 5\u003C\u002Fa> i a la \u003Ca href=\"\u002Fca\u002Fbenchmarks\">pàgina de bancs de\nproves\u003C\u002Fa>; mesuren el dimoni directament en un graf JACK privat, no a través del motor de Zynthian.\u003C\u002Fp>\n\u003Ch2 id=\"que-hi-guanyes-agrupant\">Què hi guanyes agrupant\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Memòria.\u003C\u002Fstrong> 24 plugins en una sola cadena ocupen 64,1 MB de memòria proporcional, contra 183,1 MB amb un worker per\nplugin i 109,4 MB amb mod-host (plugin-hostd 0.15.9). Amb jalv, 24 plugins van ocupar 993,6 MB (plugin-hostd 0.15.4). En una Pi de 4 GB, aquesta és la diferència que creix amb la cadena.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>CPU.\u003C\u002Fstrong> La cadena agrupada té la càrrega DSP més baixa dels amfitrions mesurats: un 12,51 % per als 24, contra un 17,76 %\namb un worker per plugin i un 15,02 % amb mod-host.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Menys despertars.\u003C\u002Fstrong> Un sol client JACK fa córrer tota la cadena. Amb 16 plugins, la cadena agrupada va fer 6023 canvis de\ncontext en 20 s, contra 84 099 amb un worker per plugin i 72 292 amb mod-host.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Contenció de fallades.\u003C\u002Fstrong> El dimoni reinicia un worker perdut amb els enllaços que ell mateix havia fet, en uns 340 ms;\njalv i mod-host perden el procés i res no torna el plugin. Dins d'una cadena, un membre que avorta deixa els altres\nsonant (vegeu \u003Ca href=\"\u002Fca\u002Fnotes\u002Fchains-plugins-in-series-in-one-worker\">Cadenes\u003C\u002Fa>). Els enllaços fets des de fora, com els de\nl'encaminament de Zynthian, el dimoni no els restableix.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"que-costa\">Què costa\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Cal refiar-se d'un procés compartit.\u003C\u002Fstrong> Un plugin que corromp la memòria en lloc de fallar netament es pot endur la\ncadena. La qualificació n'és la protecció: un plugin que no supera l'escombratge de seguretat en temps real queda aïllat\n(corre en un worker propi i no s'agrupa mai) i un que falla, es penja o no es carrega no s'ofereix.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>L'aïllament també té el seu cost.\u003C\u002Fstrong> Cada plugin aïllat és un worker més, un procés més i un client JACK més: les xifres\nd'un worker per plugin d'abans. A l'aparell, 306 dels 1602 plugins es qualifiquen com a aïllats.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Afegir a una cadena.\u003C\u002Fstrong> Afegits al worker de la cadena, 24 plugins triguen 549 ms en fred contra els 1459 ms de mod-host\ni a partir de quatre plugins una addició en calent és més ràpida que la de mod-host; mod-host afegeix dos plugins a un\namfitrió en marxa més de pressa (44,8 ms contra 55,9 ms).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>La latència\u003C\u002Fstrong> és només la que declaren els clients (cap per a aquests plugins). Una anada i tornada mesurada per a cada\namfitrió necessita un bucle de retorn a través d'una interfície d'àudio i no s'ha fet.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"allotjar-clap\">Allotjar CLAP\u003C\u002Fh2>\n\u003Cp>Zynthian no té un amfitrió CLAP propi: jalv i mod-host només allotgen LV2. plugin-hostd allotja CLAP al seu worker,\nomx-clap-host i LV2 a través de l'adaptador LV2 del mateix worker, de manera que una cadena pot barrejar tots dos formats.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Tots els plugins d'OpenMixer superen nets l'escombratge en tots dos formats.\u003C\u002Fli>\n\u003Cli>Les versions CLAP i LV2 d'un mateix plugin no són intercanviables pel que fa al cost: a 192 kHz i 512 mostres, la versió\nLV2 d'un chorus costa 592,2 ns per mostra de mediana contra 0,85 la seva versió CLAP. No se n'ha establert el motiu.\u003C\u002Fli>\n\u003Cli>CLAP darrere de MOD-UI no funciona: MOD-UI llegeix descripcions LV2, de manera que els ports, els paràmetres, els presets\ni les assignacions MIDI de CLAP no hi arriben. El motor plugin-hostd de Zynthian no passa per MOD-UI.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"qualificacio-i-empremtes\">Qualificació i empremtes\u003C\u002Fh2>\n\u003Cp>Cada plugin de l'aparell es mesura una vegada i plugin-hostd en llegeix el resultat com una empremta per binari: un plugin\nels fitxers del qual canvien es torna a mesurar.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Tres classes: \u003Cstrong>apte\u003C\u002Fstrong>; \u003Cstrong>aïllat\u003C\u002Fstrong>, un plugin que no supera l'escombratge de seguretat en temps real, que corre en un\nworker propi i no s'agrupa mai; i \u003Cstrong>no apte\u003C\u002Fstrong>, un plugin que falla, es penja, no es carrega o fa fallar l'amfitrió.\u003C\u002Fli>\n\u003Cli>L'aptitud dels LV2 va sortir igual per a jalv, mod-host i el worker de plugin-hostd, de manera que la qualificació no\nredueix el que Zynthian ofereix en LV2: aïlla els plugins que reserven memòria, es bloquegen o criden el nucli al fil\nd'àudio i deixa fora els que fallen o es pengen.\u003C\u002Fli>\n\u003Cli>Un plugin que plugin-hostd refusa es queda a jalv, llistat al seu menú: no desapareix res del que té l'usuari.\u003C\u002Fli>\n\u003Cli>El cost encara no forma part de cap veredicte: la sonda només cronometra blocs de 512 mostres, de manera que les\netiquetes de cost dels menús no són del quàntum del mateix Zynthian.\u003C\u002Fli>\n\u003Cli>Una qualificació completa de tots els plugins en una Pi 5 triga unes sis hores. Es fa una vegada per conjunt de plugins,\nno en arrencar i un paquet porta els registres d'un conjunt conegut perquè un aparell nou només sondegi el que és\ndiferent.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"compatibilitat-amb-mod-host\">Compatibilitat amb mod-host\u003C\u002Fh2>\n\u003Cp>plugin-hostd parla el protocol de mod-host al seu port, de manera que MOD-UI i el codi de Zynthian escrit per a mod-host hi\nparlen sense canvis. En una sessió conduïda a través de MOD-UI, 130 de les 135 respostes van ser idèntiques. Les cinc que\ndiferien: \u003Ccode>connect\u003C\u002Fcode> al client \u003Ccode>mod-monitor\u003C\u002Fcode> (cap worker no n'és el propietari), \u003Ccode>feature_enable aggregated-midi\u003C\u002Fcode> (un worker\nengegat després no ho sent mai) i \u003Ccode>preset_load\u003C\u002Fcode> d'un preset d'usuari després de recarregar un pedalboard. El retorn canvia\nper worker: \u003Ccode>transport\u003C\u002Fcode> es va comunicar sis vegades en lloc d'una. El protocol i tots els verbs són a la \u003Ca href=\"\u002Fprojects\u002Fplugin-hostd-protocol\u002Fprotocol\">referència de\nplugin-hostd-protocol\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"paquets\">Paquets\u003C\u002Fh2>\n\u003Cp>Els paquets vénen del repositori apt d'OpenMixer per a Debian 13 arm64: plugin-hostd, omx-clap-host, omx-plugins i\nomx-panel. ZynthianOS Vangelis porta Python 3.13, amb el qual la recepta d'instal·lació de MOD-UI no compilava; el canvi que\nla fa compilar s'ha ofert a Zynthian. Una segona font apt és un cost per a una imatge: una rèplica, claus i un ritme de\nversions que no és el de Zynthian.\u003C\u002Fp>\n\u003Ch2 id=\"el-que-no-esta-fet\">El que no està fet\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Una prova d'escolta a través d'una interfície d'àudio: els plugins es mesuren digitalment als ports de JACK a la Pi i\nl'anada i tornada mostra a mostra d'una cadena es va fer en contenidors.\u003C\u002Fli>\n\u003Cli>La graella de costos als quàntums propis dels amfitrions (128, 256 i 1024 mostres).\u003C\u002Fli>\n\u003Cli>Una estimació de cost al quàntum de Zynthian abans d'inserir un plugin.\u003C\u002Fli>\n\u003Cli>El motor MOD-UI sobre plugin-hostd, mesurat a l'aparell.\u003C\u002Fli>\n\u003C\u002Ful>\n",1793954996459]