[linux-audio-dev] more numbers for multichannel playback

New Message Reply About this list Date view Thread view Subject view Author view Other groups

Subject: [linux-audio-dev] more numbers for multichannel playback
From: Paul Barton-Davis (pbd_AT_Op.Net)
Date: Tue Apr 04 2000 - 19:22:16 EEST


Here is a concise way of seeing the problem with multichannel
non-interleaved playback. Note that it can be solved by just using
larger buffers.

But ... wow - given that Cubase can get apparently get by with 256kB
per track, and we seem to need more than twice that to cover the fact
that we're a multi-user OS, not using raw I/O, have possible paging
activity for other programs occuring on the same controller (though
not the same disk) etc. etc.

Note that my "twice as large" assumes that the Cubase figure is with
16 bit samples at 44.1kHz. If it can really do 24/32 bits at 48kHz
with 256kB, our comparison is terrible: 6-7 seconds of that stuff is
1.3MB per track!

This is output from a run with a 4 second track buffer size. Notice
how things look good for quite a while .... these are the times it
took for the butler to do its thing (try to read-ahead for all 24
tracks, if there's enough disk i/o justify the effort). The times in
the range of 1msec are instances when there was not enough disk I/O to
warrant doing any.

Butler took 2185.184msecs << initial fill of all buffers

       < transport mechanism starts playing >

Butler took 1.332msecs
Butler took 1.321msecs
Butler took 1.502msecs
Butler took 1.392msecs
Butler took 1.440msecs
Butler took 1.259msecs
Butler took 1.404msecs
Butler took 1.187msecs
Butler took 1.360msecs
Butler took 1523.152msecs
Butler took 1.802msecs
Butler took 1.376msecs
Butler took 1.410msecs
Butler took 1.355msecs
Butler took 1.333msecs
Butler took 2.222msecs
Butler took 1.509msecs
Butler took 1.334msecs
Butler took 1.250msecs
Butler took 1.372msecs
Butler took 1.357msecs
Butler took 1.622msecs
Butler took 1.501msecs
Butler took 1.481msecs
Butler took 1.473msecs
Butler took 1.355msecs
Butler took 1.364msecs
Butler took 48.421msecs << kernel disk read-ahead is our friend, eh ?
Butler took 1.343msecs
Butler took 1.449msecs
Butler took 1.365msecs
Butler took 133.582msecs
Butler took 135.006msecs
Butler took 1.355msecs
Butler took 477.223msecs
Butler took 92.203msecs
Butler took 1.335msecs
Butler took 1.350msecs
Butler took 142.216msecs
Butler took 96.998msecs
Butler took 1.315msecs
Butler took 1.339msecs
Butler took 1.793msecs
Butler took 1.414msecs
Butler took 1.945msecs
Butler took 1.422msecs
Butler took 1.347msecs
Butler took 2.254msecs
Butler took 1.208msecs
Butler took 1.408msecs
Butler took 1.346msecs
Butler took 1.275msecs
Butler took 1.343msecs
Butler took 1.512msecs
Butler took 1.431msecs
Butler took 1.389msecs
Butler took 1.365msecs
Butler took 1.402msecs
Butler took 1.380msecs
Butler took 47.539msecs
Butler took 1.441msecs
Butler took 1.231msecs
Butler took 1.303msecs
Butler took 136.402msecs
Butler took 137.063msecs
Butler took 1.194msecs
Butler took 322.872msecs
Butler took 1673.610msecs
Butler took 898.151msecs
Butler took 1.818msecs
Butler took 1.326msecs
Butler took 1.342msecs
Butler took 1.735msecs
Butler took 1.719msecs
Butler took 1.363msecs
Butler took 1.378msecs
Butler took 1.381msecs
Butler took 1.366msecs
Butler took 50.016msecs
Butler took 1.393msecs
Butler took 1.309msecs
Butler took 1.338msecs
Butler took 1.309msecs
Butler took 1.805msecs
Butler took 1.467msecs
Butler took 1.371msecs
Butler took 1.414msecs
Butler took 1.282msecs
Butler took 89.722msecs
Butler took 1.371msecs
Butler took 1.421msecs
Butler took 95.661msecs
Butler took 1.410msecs
Butler took 1.352msecs
Butler took 98.897msecs
Butler took 1.318msecs
Butler took 1.293msecs
Butler took 320.332msecs
Butler took 137.575msecs
Butler took 138.532msecs
Butler took 2.296msecs
Butler took 191.107msecs
Butler took 1.657msecs
Butler took 1.322msecs
Butler took 1.345msecs
Butler took 1.806msecs
Butler took 1.715msecs
Butler took 1.357msecs
Butler took 1.221msecs
Butler took 1.371msecs
Butler took 1.344msecs
Butler took 52.252msecs
Butler took 1.333msecs
Butler took 1.437msecs
Butler took 1.389msecs
Butler took 1.582msecs
Butler took 1.352msecs
Butler took 1.350msecs
Butler took 1.418msecs
Butler took 1.364msecs
Butler took 1.425msecs
Butler took 90.903msecs
Butler took 1.290msecs
Butler took 1.294msecs
Butler took 93.225msecs
Butler took 1.309msecs
Butler took 94.007msecs
Butler took 1.190msecs
Butler took 1.221msecs
Butler took 323.551msecs
Butler took 628.275msecs
Butler took 1.649msecs
Butler took 1.600msecs
Butler took 1.375msecs
Butler took 1.384msecs
Butler took 1.391msecs
Butler took 1.279msecs
Butler took 1.992msecs
Butler took 52.285msecs
Butler took 1.211msecs
Butler took 1.219msecs
Butler took 2.192msecs
Butler took 1.779msecs
Butler took 1.439msecs
Butler took 1.336msecs
Butler took 1.433msecs
Butler took 1.422msecs
Butler took 92.723msecs
Butler took 1.364msecs
Butler took 1.364msecs
Butler took 96.903msecs
Butler took 1.490msecs
Butler took 1.566msecs
Butler took 160.993msecs
Butler took 457.520msecs
Butler took 42.354msecs
Butler took 1.248msecs
Butler took 1.249msecs
Butler took 1.257msecs
Butler took 276.424msecs
Butler took 1.485msecs
Butler took 1.394msecs
Butler took 1.811msecs
Butler took 1.365msecs
Butler took 1.356msecs
Butler took 1.535msecs
Butler took 1.352msecs
Butler took 2.172msecs
Butler took 50.732msecs
Butler took 1.389msecs
Butler took 1.468msecs
Butler took 2.075msecs
Butler took 1.542msecs
Butler took 1.202msecs
Butler took 1.255msecs
Butler took 1.214msecs
Butler took 1.199msecs
Butler took 94.441msecs
Butler took 1.334msecs
Butler took 1.284msecs
Butler took 91.693msecs
Butler took 1.317msecs
Butler took 2.206msecs
Butler took 92.238msecs
Butler took 1.345msecs
Butler took 131.174msecs
Butler took 1.710msecs
Butler took 317.057msecs
Butler took 43.974msecs
Butler took 1.456msecs
Butler took 1.468msecs
Butler took 1.437msecs
Butler took 267.110msecs
Butler took 1.613msecs
Butler took 1.392msecs
Butler took 1.818msecs
Butler took 1.470msecs
Butler took 1.373msecs
Butler took 1.388msecs
Butler took 1.347msecs
Butler took 45.965msecs
Butler took 1.342msecs
Butler took 1.380msecs
Butler took 1.331msecs
Butler took 1.362msecs
Butler took 1.722msecs
Butler took 1.333msecs
Butler took 1.375msecs
Butler took 1.289msecs
Butler took 1.426msecs
Butler took 2.040msecs
Butler took 94.874msecs
Butler took 1.326msecs
Butler took 96.856msecs
Butler took 1.354msecs
Butler took 1.349msecs
Butler took 104.700msecs
Butler took 1.348msecs
Butler took 139.641msecs
Butler took 316.730msecs
Butler took 1.306msecs
Butler took 47.331msecs
Butler took 1.388msecs
Butler took 1.305msecs
Butler took 1.366msecs
Butler took 277.408msecs
Butler took 1.432msecs
Butler took 1.814msecs
Butler took 1.340msecs
Butler took 1.391msecs
Butler took 1.366msecs
Butler took 1.330msecs
Butler took 1.360msecs
Butler took 47.561msecs
Butler took 1.366msecs
Butler took 1.431msecs
Butler took 1.450msecs
Butler took 1.883msecs
Butler took 1.437msecs
Butler took 1.426msecs
Butler took 1.403msecs
Butler took 1.356msecs
Butler took 1.318msecs
Butler took 94.319msecs
Butler took 1.231msecs
Butler took 1.176msecs
Butler took 90.571msecs
Butler took 1.281msecs
Butler took 2.212msecs
Butler took 101.153msecs
Butler took 1.437msecs
Butler took 1096.831msecs << a bit slow, but we're still covered by
                            << the buffer size
Butler took 1.447msecs
Butler took 1.303msecs
Butler took 108.320msecs
Butler took 1.461msecs
Butler took 1.407msecs
Butler took 1.698msecs
Butler took 1.356msecs
Butler took 1.287msecs
Butler took 1.190msecs
Butler took 1.301msecs
Butler took 292.895msecs
Butler took 1.487msecs
Butler took 146.518msecs
Butler took 115.238msecs
Butler took 1.452msecs
Butler took 311.477msecs
Butler took 785.359msecs
Butler took 1.458msecs
Butler took 1.722msecs
Butler took 1.699msecs
Butler took 1.432msecs
Butler took 1.208msecs
Butler took 1.442msecs
Butler took 1.348msecs
Butler took 477.841msecs
Butler took 1.539msecs
Butler took 105.497msecs
Butler took 1.479msecs

----------------------------------------------
And then:
----------------------------------------------

Butler took 2949.113msecs
Butler took 6900.270msecs

Kaboom! Our buffer size was 4 seconds, and we're dead. Who knows why ?
A particularly bad piece of block allocation in the fs, causing
excessive seeking ? Perhaps. Some other process paged in/out for some
reason ? Perhaps. A general sync of the buffer cache ?
Perhaps. Whatever the reason, we're hosed.

Whats frustrating about this is that I clearly have a working system
now, except that sometimes, the effective disk I/O rate just goes
through the floor.

--p


New Message Reply About this list Date view Thread view Subject view Author view Other groups

This archive was generated by hypermail 2b28 : Tue Apr 04 2000 - 19:19:17 EEST