Re: DiskIO_UGen glitch
[email protected] Tue, 25 Feb 2020 17:31:26 -0300
| Newsgroups | gmane.comp.audio.supercollider.devel |
|---|---|
| Message-ID | <CAFu0fFe2mURBHs-sq4stG+Hd3c1VP7SJAgHbcC41n1bTb_Nydw@mail.gmail.com> |
block on a different lock until the resource ir ready or taken? (I do the same disclaimer as contact). El lun., 17 feb. 2020 a las 18:46, <[email protected]> escribió: > Hi, > > > i think it's logical that all async tasks compete with each other, > and so one taking very long can cause another to not meet RT deadlines. > > First, async tasks never have to meet any deadlines (that's why they run > on the so called NRT thread :-), and yes, it's not a problem that they > have to wait for each other. The problem is about the Disk IO thread, > which *does* have to meet (soft) deadlines. > > > the only solution would probably be to have more than one > asynchronous thread. > > There are already two threads: the "regular" NRT thread and the private > disk IO threads shared by all DiskIn/DiskOut instances. The problem is > that the latter implicitly depends on the former, although it shouldn't > have to. > > > could you spawn another temporary thread just for that task > > I could, but then I'm "outside" the scsynth architecture of async > commands and stuff like "s.sync" won't work anymore. Many VSTPlugins > load quite quickly, but some need more time. But this is really the same > with sound files: loading a 16 GB WAV file into memory isn't quick > either :-) > > Christof > > On 17.02.2020 22:29, [email protected] wrote: > > hi christof, > > > > (disclaimer: i don't know the server internals well) > > > > i think it's logical that all async tasks compete with each other, and > > so one taking very long can cause another to not meet RT deadlines. the > > only solution would probably be to have more than one asynchronous > > thread. in your case, i don't know how VST initialisation works, but > > perhaps you could avoid bottlenecks by breaking the process up into > > several steps, so that other async tasks like disk-in buffer updates can > > be interleaved in the async queue better? or, if it is not possible and > > really takes long, could you spawn another temporary thread just for > > that task (pardon me if this is not possible in the architecture, i have > > no idea). > > > > best, .h.h. > > > > > > > > On 17/02/2020 22:06, [email protected] wrote: > >> Hi, I just noticed a curious problem with the Disk IO UGens (DiskIn / > >> DiskOut). > >> > >> First some background info: when the IO thread receives a message, it > >> locks the NRT thread. This is done to make sure that the sound buffer is > >> no (accidentally) resized, deleted or modified concurrently by an > >> asynchronous command. As a consequence, the IO thread is basically tied > >> to the NRT thread, leading to priority inversion: Although the IO thread > >> has to meet deadlines, while the NRT thread does not, the former is > >> forced to wait for the latter. > >> > >> The actual problem manifests when individual asynchronous tasks take > >> longer than the DiskIO_UGen's buffer size: the UGen will read/write old > >> data from the buffer or produce garbage. Here's a bug report by a user > >> of VSTPlugin, who noticed that DiskOut fails when loading a large > >> plugin: https://git.iem.at/pd/vstplugin/issues/58#note_5070. This seems > >> very surprising at first, because VST plugins are loaded asynchronously > >> on the NRT thread, and you would expect that it doesn't interfere with > >> realtime tasks. > >> > >> One "solution" is to simply increase the buffer size, but it basically > >> forces you to know in advance how long your asynchronous operations will > >> take at maximum... The bad thing is that you don't notice the problem > >> while playing, you only hear the glitches in the recording. > >> > >> IMHO, the design of disk IO streaming in SuperCollider is a bit flawed, > >> but I don't see an easy solution... Any ideas? Or just live with it and > >> document it in the help file? > >> > >> Christof > >> > >> > >> > >> > >> _______________________________________________ > >> sc-dev mailing list > >> > >> info (subscription, etc.): > >> > http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx > >> > >> archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/ > >> search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/ > > _______________________________________________ > > sc-dev mailing list > > > > info (subscription, etc.): > http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx > > archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/ > > search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/ > > _______________________________________________ > sc-dev mailing list > > info (subscription, etc.): > http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx > archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/ > search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/ >