Enabling tstamp in proc status file externally

Pavel Hofman pavel.hofman at ivitera.com
Sun Jun 19 10:03:24 CEST 2022


Hi Takashi,

Dne 18. 06. 22 v 22:52 Takashi Sakamoto napsal(a):
> Hi Pavel,
> 
> On Thu, Jun 09, 2022 at 02:38:58PM +0200, Pavel Hofman wrote:
>> Hi,
>>
>> Please is there any way to enable the tstamp in stream status without
>> modifying the client calling the alsa-lib API? I wanted to measure
>> samplerate ratio between soundcards using data in their status proc files
>> (comparing advancement of tstamp vs. hw_ptr). The method seems to work quite
>> good, but some clients enable the stream status tstamp (e.g. pulseaudio) and
>> some don't (e.g. sox, aplay), resulting in zeros in the status proc file.
>>
>> Thanks a lot for any help or hint.
> 
> One night sleep after posting my comment to your patch for aplay[1] brings
> me an idea to use tracepoints events for your purpose (it's 5:00 am at
> UTC+07:00).
> 
> ALSA PCM core supports some kinds of tracepoints events[2]. They are
> categorized to two parts; the history of hwptr/applptr and hardware
> parameters of PCM substream. I think the former category of tracepoints
> events are available for your work to invent diagnostics tools since all
> of tracepoints events can be retrieved by user space application with
> system time stamp. I think the type of time stamp is selectable by
> options when retrieving records of tracepoints events. Furthermore the
> time stamp is essentially the same as the ones of trigger/current/driver
> time stamps in ALSA PCM interface.
> 
> I did not add enough description about the category of tracepoints when
> committed to document [2], but roughly describe here:
> 
> - hwptr
>   - the position for audio frame transmission (e.g. DMA).
> - applptr
>   - the position for user space application to read/write audio frame
>     except for operations over mmapped buffer (but depending on audio
>     hardware)
> 
> This is call graph when operating the procfs node:
> 
> (sound/core/pcm.c)
> ->snd_pcm_substream_proc_status_read()
>    (sound/core/pcm_native.c)
>    ->snd_pcm_status64()
>      (sound/core/pcm_lib.c)
>      ->snd_pcm_update_hw_ptr()
>        (sound/core/pcm_trace.h)
>        ->trace_hwptr()
> 
> You can see hwptr event is triggered as well. Actually, trace_hwptr() is
> called more frequently by usual ALSA PCM applications; e.g. ioctl(2)
> with PCM hwptr request.
> 
> We have some ways to retrieve the tracepoints events in user space:
>   - tracefs
>   - perf system call
>   - bpf


Thanks a lot for your detailed explanation. Please correct me if I am 
wrong but IIUC the snd_pcm_update_hw_ptr does not update the timestamp 
if it's not enabled. I already have access to the timestamp via the 
procfs status file, but if the client does not enable the timestamp 
specifically, the struct field will not be updated. That's why I added 
the timestamp-enable code to the alsa clients aplay/axfer.

Can the tracepoints modify the status struct and enable the timestamping 
from aside?

Thanks a lot,

Pavel.


More information about the Alsa-devel mailing list