From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
To: Pavel Hofman <pavel.hofman@ivitera.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>
Subject: Re: Enabling tstamp in proc status file externally
Date: Sun, 19 Jun 2022 05:52:49 +0900 [thread overview]
Message-ID: <Yq47ISgw2fWTELwi@workstation> (raw)
In-Reply-To: <9892a324-a549-c411-9d2c-0a10c580422d@ivitera.com>
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
You can easily find many good documentations about them; e.g.
- BPF Performance Tools (Brendan Gregg 2020, Addison Wesley,
ISBN-13 78-0136554820 )
I prefer your intention diagnose the runtime of PCM substream. I think
every one almost certainly love the work. So it's nice to go forward
without discouraged.
[1] Re: [PATCH] aplay: Support setting timestamp
https://lore.kernel.org/alsa-devel/Yq2Lfn+RJx96Qqvh@workstation/
[2] Documentation/sound/designs/tracepoints.rst in source of Linux kernel
https://www.kernel.org/doc/html/latest/sound/designs/tracepoints.html
Cheerss
Takashi Sakamoto
next prev parent reply other threads:[~2022-06-18 20:54 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-09 12:38 Enabling tstamp in proc status file externally Pavel Hofman
2022-06-18 20:52 ` Takashi Sakamoto [this message]
2022-06-19 8:03 ` Pavel Hofman
2022-06-20 4:48 ` Takashi Sakamoto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Yq47ISgw2fWTELwi@workstation \
--to=o-takashi@sakamocchi.jp \
--cc=alsa-devel@alsa-project.org \
--cc=pavel.hofman@ivitera.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox