← Back to team overview

desktop-packages team mailing list archive

[Bug 996906]

 

So I've done some research. This article describes the timer model and
how ALSA works in regards of periods/fragments and software/hardware
buffers: http://0pointer.de/blog/projects/pulse-glitch-free.html

According to the article, PA works in two modes, with tsched=0 it's the
old IRQ-driven mode as ALSA does and it heavily relies to the fragments
number and size. Hence it gets ALSA underruns if the app is too slow to
fill the buffer. It happens to my work PC sometime because it isn't too
fast (model name: Intel(R) Pentium(R) CPU G620 @ 2.60GHz) and I mostly
listen to music in Chrome (HTML5 audio). Chrome has the latency of ~65
ms now. It's quite feasible that some program would occupy the CPU for
this much time so I'd have a skip/underrun. In case of tsched=0 there's
nothing we can do as period/buffer size is set up on startup and
basically can't be changed in runtime.

When tsched=1 or not specified (defaults to 1) PA sets up an ALSA buffer
of 2 seconds long with two periods of 1 second each. This way it doesn't
underrun in ALSA but rather underruns in PA itself. This code is
responsible for tweaking the watermark and latency:
https://github.com/pulseaudio/pulseaudio/blob/master/src/modules/alsa
/alsa-sink.c#L326

The problem here is that watermark can go in both directions, up and
down, while latency can only grow until the sink is reset (recreated).
This actually means that if some particular program has chosen too
little latency and had several underruns because of that, THE WHOLE LOT
OF OTHER PROGRAMS now will suffer bad latency as well! And there's no
other way to lower it back other than restarting PA itself together with
all its clients or when PA gets unsuspended (
https://github.com/pulseaudio/pulseaudio/blob/master/src/modules/alsa
/alsa-sink.c#L1021 ).

I haven't found a way to setup a default minimal latency so that if I
know that my system isn't capable to deliver 4 ms, I can set it to 16
instead of having  0.5 ms and several underruns just to let PA get to
that latency by itself. It seems to me that this minimal latency is just
hardcoded (
https://github.com/pulseaudio/pulseaudio/blob/master/src/pulsecore/sink.c#L54
) and there are no tools to call pa_sink_set_latency_range (
https://github.com/pulseaudio/pulseaudio/blob/master/src/pulsecore/sink.c#L3091
)

And also, I repeat, launching pavucontrol for the first time and
sometimes pacmd list-sinks causes stuttering on my work system (works ok
at home but there I have i7-2600 and PCI SB Live 7.1). I don't know how
and why but they seem to block PA somewhere so that Chrome can't sink
its audio to it in time and hence we get an underrun, latency increase
and the bad mood. I dunno, maybe I have to file this pavucontrol bug
separately.

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to pulseaudio in Ubuntu.
https://bugs.launchpad.net/bugs/996906

Title:
  periodic audio skips with Intel HDA

Status in PulseAudio sound server:
  Confirmed
Status in pulseaudio package in Ubuntu:
  Confirmed

Bug description:
  When running PulseAudio, if I'm playing music via any source (Exaile, Totem,
  Flash in Firefox or Chromium, VLC, etc.) every few minutes the audio will skip
  once or twice.  top doesn't show any process eating CPU any more when it
  happens.  dmesg doesn't show anything.  Nothing else seems to be affected.  It
  doesn't seem to happen regularly.

  I just installed Ubuntu 12.04 from scratch (with pulseaudio 1:1.1-0ubuntu15),
  but the same thing happened in 10.04 on the same hardware.  Uninstalling the
  PulseAudio packages and going back to ALSA gives me no issues whatsoever, which
  is how I know the issue is with PulseAudio.  I'm using my onboard audio device:

  $ lspci | grep Audio
  00:14.2 Audio device: Advanced Micro Devices [AMD] nee ATI SBx00 Azalia (Intel
  HDA)

  Following mailing list instructions, pulseaudio -vvvv --log-time shows during a
  skip:

  ( 684.030|   5.000) I: [alsa-sink] alsa-sink.c: Underrun!
  ( 684.030|   0.000) I: [alsa-sink] alsa-sink.c: Increasing minimal latency to
  26.00 ms
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 26.00ms
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=60952
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15944
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 26.00ms
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=60952
  ( 684.030|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15944
  ( 684.031|   0.000) D: [alsa-sink] protocol-native.c: Underrun on 'ALSA
  Playback', 0 bytes in queue.
  ( 684.036|   0.004) D: [alsa-sink] protocol-native.c: Requesting rewind due to
  end of underrun.
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: Requested to rewind 10940
  bytes.
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: Limited to 3320 bytes.
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: before: 830
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: after: 830
  ( 684.036|   0.000) D: [alsa-sink] alsa-sink.c: Rewound 3320 bytes.
  ( 684.036|   0.000) D: [alsa-sink] sink.c: Processing rewind...
  ( 684.036|   0.000) D: [alsa-sink] sink.c: latency = 1337
  ( 684.036|   0.000) D: [alsa-sink] sink-input.c: Have to rewind 3320 bytes on
  render memblockq.
  ( 684.036|   0.000) D: [alsa-sink] source.c: Processing rewind...
  ( 696.234|  12.197) I: [alsa-sink] alsa-sink.c: Underrun!
  ( 696.234|   0.000) I: [alsa-sink] alsa-sink.c: Increasing wakeup watermark to
  15.99 ms
  ( 702.033|   5.799) I: [alsa-sink] alsa-sink.c: Underrun!
  ( 702.033|   0.000) I: [alsa-sink] alsa-sink.c: Increasing minimal latency to
  36.00 ms
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 36.00ms
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=59188
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15680
  ( 702.033|   0.000) D: [alsa-sink] alsa-sink.c: Latency set to 36.00ms
  ( 702.034|   0.000) D: [alsa-sink] alsa-sink.c: hwbuf_unused=59188
  ( 702.034|   0.000) D: [alsa-sink] alsa-sink.c: setting avail_min=15680
  ( 702.034|   0.000) D: [alsa-sink] protocol-native.c: Underrun on 'ALSA
  Playback', 0 bytes in queue.

  ...and it goes on.

  The "Underrun!" messages alone happened a few times before, but it
  didn't skip.

  I'd like to use PulseAudio, but it's pretty annoying having audio skip all the
  time.

  ProblemType: Bug
  DistroRelease: Ubuntu 12.04
  Package: pulseaudio 1:1.1-0ubuntu15
  ProcVersionSignature: Ubuntu 3.2.0-24.37-generic 3.2.14
  Uname: Linux 3.2.0-24-generic x86_64
  NonfreeKernelModules: nvidia
  AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.24.
  ApportVersion: 2.0.1-0ubuntu7
  Architecture: amd64
  AudioDevicesInUse:
   USER        PID ACCESS COMMAND
   /dev/snd/controlC0:  toxite     2136 F.... pulseaudio
   /dev/snd/pcmC0D0p:   toxite     2136 F...m pulseaudio
  Card0.Amixer.info:
   Card hw:0 'SB'/'HDA ATI SB at 0xfe024000 irq 16'
     Mixer name	: 'Realtek ALC889'
     Components	: 'HDA:10ec0889,1458a102,00100004'
     Controls      : 48
     Simple ctrls  : 22
  Date: Tue May  8 21:45:17 2012
  InstallationMedia: Ubuntu 12.04 LTS "Precise Pangolin" - Release amd64 (20120425)
  ProcEnviron:
   TERM=xterm
   PATH=(custom, user)
   LANG=en_US.UTF-8
   SHELL=/bin/bash
  SourcePackage: pulseaudio
  UpgradeStatus: No upgrade log present (probably fresh install)
  dmi.bios.date: 12/03/2009
  dmi.bios.vendor: Award Software International, Inc.
  dmi.bios.version: F2
  dmi.board.name: GA-790FXTA-UD5
  dmi.board.vendor: Gigabyte Technology Co., Ltd.
  dmi.board.version: x.x
  dmi.chassis.type: 3
  dmi.chassis.vendor: Gigabyte Technology Co., Ltd.
  dmi.modalias: dmi:bvnAwardSoftwareInternational,Inc.:bvrF2:bd12/03/2009:svnGigabyteTechnologyCo.,Ltd.:pnGA-790FXTA-UD5:pvr:rvnGigabyteTechnologyCo.,Ltd.:rnGA-790FXTA-UD5:rvrx.x:cvnGigabyteTechnologyCo.,Ltd.:ct3:cvr:
  dmi.product.name: GA-790FXTA-UD5
  dmi.sys.vendor: Gigabyte Technology Co., Ltd.

To manage notifications about this bug go to:
https://bugs.launchpad.net/pulseaudio/+bug/996906/+subscriptions