Messages in this thread | | | Subject | progress with low-latency audio i/o: mmap | Date | Sat, 24 Jul 1999 23:47:39 -0400 | From | Paul Barton-Davis <> |
| |
i just did some hacks to ALSA to allow mmap() via the native interface. there's a few more details to add, but on top of this new interface, i was able to:
create a SCHED_FIFO task that uses a 2.6ms fragment size (though it doesn't actually use "fragments" per se) and records (not to disk, just to RAM) with *zero* dropouts for 16000 fragments in the face of a system load of 3.8 consisting of:
x11perf -all & while [ true ] ; do cp /boot/vmlinuz /usr/local ; done & while [ true ] ; done cat /proc/interrupts ; done &
the zero dropout rate is completely repeatable.
this is on a dual CPU (PII-450) system, so its not a totally fair comparison, but given the load level, I think this is a fairly reasonable demonstration that we don't *need* RTL to make things work :) That doesn't mean that RTL wouldn't be a good thing. this is also under 2.2.7, so it doesn't have the benefits of any of Ingo's scheduler work that is in 2.2.10 and 2.3.?.
Note that the task does nothing but busy wait on the DAC buffer; however, it does this for 2.6ms at a time, providing lots of time for potential manipulation of the previous buffer ...
I also tried using a 1.3ms fragment size, but this is less reliable (though probably not unusable).
Unlike Ove's description of doing this with the ess137[01], I only write to the DAC buffer at the fragment boundaries, which may help preserve a little bit of bus bandwidth (or it might not).
--p
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |