Hi, Gathering data for USB async gadget feedback ( https://mailman.alsa-project.org/pipermail/alsa-devel/2019-August/154819.htm... ) requires measuring average data rate to/from a device. For testing I added measuring/averaging code to methods snd_pcm_hw_writei, snd_pcm_hw_readi, and snd_pcm_hw_mmap_commit in https://github.com/alsa-project/alsa-lib/blob/master/src/pcm/pcm_hw.c . In all cases I take the parameter "size" of all the three methods as the number of samples written/read.
RW: The averaging works very well for R/W access (hw:X) for playback and capture, I get same values on the same device (playback/capture timed by one clock).
MMAP: When mmap is used (e.g. plughw:X + sample format conversion), I get very stable results for MMAP playback on all soundcards I have tested. But for capture I get identical results to playback for one soundcard (PCI Envy24), while the averaged rate calculated from "size" in snd_pcm_hw_mmap_commit fluctuates for capture on Intel HDA.
The averaging is simply summing "size" in every call of the method and dividing by passed nanosecs every approx 10 seconds:
Working OK (Infrasonic Quartet, and all soundcards for read/write mode): Playback MMAP Time: 19440.900391, averaged samplerate: 48000.511829 MMAP Time: 19451.140625, averaged samplerate: 48000.360218 MMAP Time: 19461.380859, averaged samplerate: 48000.176846 MMAP Time: 19471.619141, averaged samplerate: 48000.664570 MMAP Time: 19481.861328, averaged samplerate: 48000.199970 MMAP Time: 19492.101562, averaged samplerate: 48000.589854 MMAP Time: 19502.341797, averaged samplerate: 48000.288977 MMAP Time: 19512.580078, averaged samplerate: 48000.516104 MMAP Time: 19522.820312, averaged samplerate: 48000.225282
Capture: MMAP Time: 19454.578125, averaged samplerate: 48000.430766 MMAP Time: 19464.818359, averaged samplerate: 48000.397611 MMAP Time: 19475.056641, averaged samplerate: 48000.400049 MMAP Time: 19485.296875, averaged samplerate: 48000.293275 MMAP Time: 19495.539062, averaged samplerate: 48000.549048 MMAP Time: 19505.779297, averaged samplerate: 48000.445214 MMAP Time: 19516.017578, averaged samplerate: 48000.417299 MMAP Time: 19526.257812, averaged samplerate: 48000.376264 MMAP Time: 19536.498047, averaged samplerate: 48000.422957 MMAP Time: 19546.738281, averaged samplerate: 48000.538619 MMAP Time: 19556.976562, averaged samplerate: 48000.241647 MMAP Time: 19567.216797, averaged samplerate: 48000.447243
Fluctuating Capture (Intel HDA): Playback - OK: MMAP Time: 19574.498047, averaged samplerate: 47998.971874 MMAP Time: 19584.568359, averaged samplerate: 47998.871734 MMAP Time: 19594.636719, averaged samplerate: 47998.929850 MMAP Time: 19604.707031, averaged samplerate: 47998.972555 MMAP Time: 19614.775391, averaged samplerate: 47998.925531 MMAP Time: 19624.845703, averaged samplerate: 47998.893351 MMAP Time: 19634.916016, averaged samplerate: 47998.949489 MMAP Time: 19644.986328, averaged samplerate: 47998.593678 MMAP Time: 19655.056641, averaged samplerate: 47999.230857 MMAP Time: 19665.125000, averaged samplerate: 47998.777034 MMAP Time: 19675.195312, averaged samplerate: 47999.177460 MMAP Time: 19685.263672, averaged samplerate: 47998.798503
Capture - fluctuating, clearly some samples are not counted: MMAP Time: 19539.853516, averaged samplerate: 47191.039837 MMAP Time: 19549.923828, averaged samplerate: 46369.921890 MMAP Time: 19559.994141, averaged samplerate: 47998.831508 MMAP Time: 19570.148438, averaged samplerate: 47190.998307 MMAP Time: 19580.302734, averaged samplerate: 47191.275432 MMAP Time: 19590.373047, averaged samplerate: 47998.894343 MMAP Time: 19600.443359, averaged samplerate: 47998.906779 MMAP Time: 19610.511719, averaged samplerate: 47999.174771 MMAP Time: 19620.582031, averaged samplerate: 47998.747971 MMAP Time: 19630.650391, averaged samplerate: 47998.881964 MMAP Time: 19640.722656, averaged samplerate: 47998.999974 MMAP Time: 19650.791016, averaged samplerate: 47998.769240
I suspect the size parameter of snd_pcm_hw_mmap_commit is not the actual amount of samples read during the MMAP capture. Please how to calculate the number of samples read from the variables available in that method?
Thanks a lot.
Pavel.