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 -- Mailing list: https://launchpad.net/~desktop-packages Post to : [email protected] Unsubscribe : https://launchpad.net/~desktop-packages More help : https://help.launchpad.net/ListHelp

