Alex wrote:The task manger is not a good measuring tools for audio performance. You need at least a tool that show the usage for each thread. Almost the same is valid true for the audio usage display of Live. What you cant see there are the peaks which again are responsible for the audio drop-outs you can hear.
After I am vinished with the regular videos (2 more to come, one about Plugin Buffers and one comparing Live 6.10) I will shot a video that includes what you asked for. I already did those test after reading your post and can tell you as much as this already: Neither
hardware-interrupts, DPC or any of Live's threads seems to peak when measured at 0.5 second intervalls. The more Midi tracks are
played the more CPU load is used by Microsoft's C Runtime Library MSVC71.dll. DPC Latencty Checker also remains all green and I can run a 3D stress-test via ATI-Tool without recognizing any much differences.
I underlined hardware-interrupts and DPC because Nico wrote me in his last e-mail that running the Midi port drivers hot would result in heavy CPU/system load because of hardware-interrupts. My system does not feel loaded down when Live starts producing drop-outs, albeit I can pretty much load it once I play several dozend Midi tracks.
Microsoft Hardware Developer Center wrote:For good system performance, a Windows kernel-mode driver should minimize the time it spends in its deferred procedure calls (DPCs) and interrupt service routines (ISRs). DPCs and ISRs run at an elevated interrupt request level, or IRQL (DISPATCH_LEVEL and device IRQL, respectively). A driver that spends too much time in its DPCs and ISRs prevents the system from servicing threads, which degrades overall system performance. A driver should spend no more than 25 microseconds in an ISR and no more than 100 microseconds in a DPC.
You can measure the time that Windows kernel-mode drivers spend in DPCs and ISRs by using a new feature of Tracelog, a command-line tool provided with the Windows Driver Kit (WDK) that manages software tracing sessions. The DPC/ISR feature of Tracelog captures the activity of all drivers running in the kernel during the trace, even drivers that are not instrumented for tracing.
If necessary I can download that Tracelog app, but maybe that's more of a task for your quality assurance/coder department, because I feel that I already invested too much time into this. All I want is to get rid of the bugs and see Live performing at its best.
Alex wrote:It is true, sending many (several hundreds or more) MIDI notes through a MIDI port at the same time will lead to audio drop outs. But that's the case for all previous Live versions too.
What would be interesting is to know if there's a certain Live set that produces drop-outs in Live 7 but not in Live 6 (both version with the same setup of course).
Live 6.10 behaves completely different! While in Live 7 only the
total ammount of Midi data is relevant and it doesn't make any difference wether you are using one or several ports. In Live 6 the ammount of data
per port is limited. In Live 6 I can send about three tracks of 127 notes out per
one Midi port without drop-outs. So when I use three Midi ports I can send out a total of 9 tracks, while I can only send 3 tracks with one port. I can push Live 6's CPU meter upto 3000% while my system isn't even sweating. I will demonstrate all this in Video 3.
Alex wrote:Another question is the one for a real scenario concerning the maximal number of MIDI notes sent out via an MIDI port.
First of all, I setup these tests to run Live into the extreme and thus be able to find the weak spots. I know quite well that in real life you are not gonna send out several hundred Midi notes at once. But in order to get away from
sporadic drop-outs/glitches and crashes to something reproducible I had to come up with an easy to setup test-scenario. Nevertheless I had one very particular practical application in mind!
There is a regular scenario in which
hundreds of Midi bytes are send out to physical interfaces: Sysex output of Control Interfaces! For very good reasons we Remote SL users have experienced the worst performance issues. The following list displays the Midi data being send from Live to the Remote SL while moving
one single track fader from minimum to maximum position via mouse, and that's only one fader to one control surface (I'm using several!):
Code: Select all
TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT
0000B02F 1 -- B0 10 01 1 --- Control Change
0000B03E 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 04 04 2D 35 38
SYSX: 2E 30 20 64 42 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000B040 1 -- B0 10 05 1 --- Control Change
0000B048 1 -- B0 10 08 1 --- Control Change
0000B051 1 -- B0 10 0A 1 --- Control Change
0000B059 1 -- B0 10 0D 1 --- Control Change
0000B062 1 -- B0 10 12 1 --- Control Change
0000B068 1 -- B0 10 13 1 --- Control Change
0000B072 1 -- B0 10 16 1 --- Control Change
0000B081 1 -- B0 10 19 1 --- Control Change
0000B089 1 -- B0 10 1C 1 --- Control Change
0000B099 1 -- B0 10 20 1 --- Control Change
0000B0A0 1 -- B0 10 23 1 --- Control Change
0000B0B2 1 -- B0 10 29 1 --- Control Change
0000B0B3 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 04 04 2D 32 30
SYSX: 2E 32 20 64 42 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000B0BA 1 -- B0 10 2D 1 --- Control Change
0000B0C2 1 -- B0 10 30 1 --- Control Change
0000B0D0 1 -- B0 10 34 1 --- Control Change
0000B0D6 1 -- B0 10 35 1 --- Control Change
0000B0DE 1 -- B0 10 36 1 --- Control Change
0000B0F0 1 -- B0 10 38 1 --- Control Change
0000B0F6 1 -- B0 10 39 1 --- Control Change
0000B100 1 -- B0 10 3C 1 --- Control Change
0000B106 1 -- B0 10 3D 1 --- Control Change
0000B110 1 -- B0 10 40 1 --- Control Change
0000B11A 1 -- B0 10 44 1 --- Control Change
0000B122 1 -- B0 10 47 1 --- Control Change
0000B122 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 04 04 2D 31 31
SYSX: 2E 36 20 64 42 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000B12A 1 -- B0 10 4A 1 --- Control Change
0000B12F 1 -- B0 10 4C 1 --- Control Change
0000B140 1 -- B0 10 51 1 --- Control Change
0000B152 1 -- B0 10 59 1 --- Control Change
0000B158 1 -- B0 10 5B 1 --- Control Change
0000B162 1 -- B0 10 60 1 --- Control Change
0000B16A 1 -- B0 10 63 1 --- Control Change
0000B170 1 -- B0 10 66 1 --- Control Change
0000B182 1 -- B0 10 6E 1 --- Control Change
0000B187 1 -- B0 10 73 1 --- Control Change
0000B187 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 04 04 32 2E 33
SYSX: 36 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000B193 1 -- B0 10 77 1 --- Control Change
0000B19A 1 -- B0 10 7B 1 --- Control Change
0000B1A2 1 -- B0 10 7E 1 --- Control Change
0000B1AA 1 -- B0 10 7F 1 --- Control Change
0000B1FB 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 04 04 36 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000BB61 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 01 04 50 6C 65
SYSX: 61 73 65 20 73 65 6C 65 63 74 20 61 20 44 65 76 69 63
SYSX: 65 20 69 6E 20 4C 69 76 65 20 74 6F 20 65 64 69 74 20
SYSX: 69 74 2E 2E 2E 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000BB61 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 02 04 31 2D 41
SYSX: 75 64 69 6F 20 20 20 32 2D 4D 49 44 49 20 20 41 2D 52
SYSX: 65 74 75 72 6E 20 42 2D 52 65 74 75 72 6E 20 20 4D 61
SYSX: 73 74 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000BB61 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 03 04 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7
0000BB62 1 -- F0 Buffer: 88 Bytes System Exclusive
SYSX: F0 00 20 29 03 03 11 04 04 00 02 01 00 04 04 36 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 30 2E 30 30 20 64 42 20 20 30 2E 30
SYSX: 30 20 64 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20
SYSX: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7