From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: David Henningsson <david.henningsson@canonical.com>,
"Alexander E. Patrakov" <patrakov@gmail.com>,
ALSA Development Mailing List <alsa-devel@alsa-project.org>,
Takashi Iwai <tiwai@suse.de>,
Takashi Sakamoto <o-takashi@sakamocchi.jp>
Subject: Re: Master Plan on rewinding
Date: Tue, 09 Sep 2014 14:56:09 -0500 [thread overview]
Message-ID: <540F5B59.2080203@linux.intel.com> (raw)
In-Reply-To: <540CE674.9010004@canonical.com>
>> 2. PulseAudio blindly assumes that it can rewind up to hwbuf_frames -
>> (snd_pcm_avail() + rewind_safeguard) frames. The rewind safeguard is
>> needed due to reasons that I don't completely understand, but one of
>> them is imprecise reporting of the hardware pointer, and another one is
>> that the hardware transfers several bytes at a time, and the bytes we
>> need to overwrite may be already cached by the hardware.
>
> Pierre added the rewind safeguard due to DMA controller problems. IIRC,
> some DMA controllers go nuts (such as breaking the stream, causing
> interrupt storms, or something else seriously buggy) when trying to
> write to data that the DMA controller is just about to transfer. Pierre
> (now cc:ed) would know more about this than I do, though.
>
> In my world, since this is a very hardware near problem, ALSA rather
> than PulseAudio should take these kinds of problems into account when
> reporting back snd_pcm_rewindable() so PulseAudio does not have to.
Sorry to chime-in late on this, my real job keeps me busy.
I would like to highlight that there is a fundamental conflict between
requirements here.
- for power consumption optimization, you want to let the hardware
prefetch audio samples opportunistically and buffer as much as possible
as close as possible to the serial link. Given the pressure on power
optimizations these days, no one should expect the hardware buffering to
reduce - and this buffering could vary depending on the platform power
modes with the position of the DMA read pointer becoming less predictable.
- for low-latency and user interaction, you want to rewind the write
pointer as much as possible.
The question is 'how much'. The reason why i introduced this
'rewind_safeguard' was to factor in a good-enough latency that no one
would ever complain about and yet large enough to avoid using stale data.
We could ask drivers to provide a conservative estimate of this
safeguard, but asking for a dynamic query of a safe position or an
empirical determination based on the min period size is really asking
for trouble. At a given point, if you really need very low-latency, i.e.
sub ms, you will need a dedicated configuration that probably doesn't
rely on rewinds and you probably don't use PulseAudio in the first place.
next prev parent reply other threads:[~2014-09-09 19:55 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-07 15:16 Master Plan on rewinding Alexander E. Patrakov
2014-09-07 18:38 ` Tanu Kaskinen
2014-09-07 19:05 ` Alexander E. Patrakov
2014-09-07 20:51 ` Clemens Ladisch
2014-09-08 3:06 ` Raymond Yau
2014-09-08 7:31 ` Alexander E. Patrakov
2014-09-09 8:43 ` Clemens Ladisch
2014-09-09 8:55 ` Alexander E. Patrakov
2014-09-09 9:08 ` David Henningsson
2014-09-09 9:31 ` Alexander E. Patrakov
2014-09-21 2:02 ` Raymond Yau
2014-09-22 13:20 ` Lars-Peter Clausen
2014-09-22 13:36 ` Alexander E. Patrakov
2014-09-22 13:44 ` Lars-Peter Clausen
2014-09-23 8:29 ` Raymond Yau
2014-09-23 10:22 ` Alexander E. Patrakov
2014-09-09 13:45 ` Clemens Ladisch
2014-09-09 15:55 ` Alexander E. Patrakov
2014-09-09 16:09 ` Takashi Iwai
2014-09-07 23:12 ` David Henningsson
2014-09-09 19:56 ` Pierre-Louis Bossart [this message]
2014-09-10 5:38 ` Alexander E. Patrakov
2014-09-08 7:34 ` Lars-Peter Clausen
2014-09-08 7:59 ` David Henningsson
2014-09-08 8:46 ` Alexander E. Patrakov
2014-09-08 9:26 ` David Henningsson
2014-09-08 10:21 ` Alexander E. Patrakov
2014-09-09 8:43 ` Clemens Ladisch
2014-09-11 3:49 ` Raymond Yau
2014-09-11 4:19 ` A. C. Censi
2014-09-13 9:15 ` Raymond Yau
2014-09-11 5:28 ` Alexander E. Patrakov
2014-09-11 6:21 ` Raymond Yau
2014-09-13 8:57 ` Raymond Yau
2014-09-13 10:43 ` Alexander E. Patrakov
2014-09-13 11:33 ` Raymond Yau
2014-09-13 11:36 ` Alexander E. Patrakov
2014-09-13 18:35 ` Alexander E. Patrakov
2014-09-14 11:37 ` Raymond Yau
2014-09-14 12:07 ` Alexander E. Patrakov
2014-09-15 2:43 ` Raymond Yau
2014-09-15 9:19 ` Takashi Iwai
2014-09-15 9:58 ` Alexander E. Patrakov
2014-09-15 10:08 ` Takashi Iwai
2014-09-15 17:01 ` Pierre-Louis Bossart
2014-09-15 17:14 ` Alexander E. Patrakov
2014-09-15 18:08 ` Takashi Iwai
2014-09-18 1:15 ` Raymond Yau
2014-09-21 9:22 ` Alexander E. Patrakov
2014-09-21 9:53 ` Clemens Ladisch
2014-09-21 10:56 ` Alexander E. Patrakov
2014-09-22 3:27 ` Raymond Yau
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=540F5B59.2080203@linux.intel.com \
--to=pierre-louis.bossart@linux.intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=david.henningsson@canonical.com \
--cc=o-takashi@sakamocchi.jp \
--cc=patrakov@gmail.com \
--cc=tiwai@suse.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.