<div dir="ltr">On my not-so-mighty system (Intel G620) I have underruns from time to time. As a direct result of that the latency increases. If some program has chosen a small latency and had underruns because of CPU load the Pulseaudio server may increase the latency to 100+ ms which is applied to every program and worst of all, it's never decreased. The only way is to restart PA and all its clients. Our bug discussion ( <a href="https://bugs.freedesktop.org/show_bug.cgi?id=49608">https://bugs.freedesktop.org/show_bug.cgi?id=49608</a> ) has come to nowhere as it seems that no PA developers are interested in this. So I decided to post here.<div><br></div><div>My question is, why dmix works flawlessly on this system while PA skips? I have this ALSA setup when using dmix:</div><div><br></div><div><div>> aplay -v /usr/share/sounds/alsa/Front_Center.wav</div><div>Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono</div><div>Plug PCM: Route conversion PCM (sformat=S32_LE)</div><div>  Transformation table:</div><div>    0 <- 0</div><div>    1 <- 0</div><div>Its setup is:</div><div>  stream       : PLAYBACK</div><div>  access       : RW_INTERLEAVED</div><div>  format       : S16_LE</div><div>  subformat    : STD</div><div>  channels     : 1</div><div>  rate         : 48000</div><div>  exact rate   : 48000 (48000/1)</div><div>  msbits       : 16</div><div>  buffer_size  : 16384</div><div>  period_size  : 1024</div><div>  period_time  : 21333</div><div>  tstamp_mode  : NONE</div><div>  period_step  : 1</div><div>  avail_min    : 1024</div><div>  period_event : 0</div><div>  start_threshold  : 16384</div><div>  stop_threshold   : 16384</div><div>  silence_threshold: 0</div><div>  silence_size : 0</div><div>  boundary     : 4611686018427387904</div><div>Slave: Soft volume PCM</div><div>Control: PCM Playback Volume</div><div>min_dB: -51</div><div>max_dB: 0</div><div>resolution: 256</div><div>Its setup is:</div><div>  stream       : PLAYBACK</div><div>  access       : MMAP_INTERLEAVED</div><div>  format       : S32_LE</div><div>  subformat    : STD</div><div>  channels     : 2</div><div>  rate         : 48000</div><div>  exact rate   : 48000 (48000/1)</div><div>  msbits       : 32</div><div>  buffer_size  : 16384</div><div>  period_size  : 1024</div><div>  period_time  : 21333</div><div>  tstamp_mode  : NONE</div><div>  period_step  : 1</div><div>  avail_min    : 1024</div><div>  period_event : 0</div><div>  start_threshold  : 16384</div><div>  stop_threshold   : 16384</div><div>  silence_threshold: 0</div><div>  silence_size : 0</div><div>  boundary     : 4611686018427387904</div><div>Slave: Direct Stream Mixing PCM</div><div>Its setup is:</div><div>  stream       : PLAYBACK</div><div>  access       : MMAP_INTERLEAVED</div><div>  format       : S32_LE</div><div>  subformat    : STD</div><div>  channels     : 2</div><div>  rate         : 48000</div><div>  exact rate   : 48000 (48000/1)</div><div>  msbits       : 32</div><div>  buffer_size  : 16384</div><div>  period_size  : 1024</div><div>  period_time  : 21333</div><div>  tstamp_mode  : NONE</div><div>  period_step  : 1</div><div>  avail_min    : 1024</div><div>  period_event : 0</div><div>  start_threshold  : 16384</div><div>  stop_threshold   : 16384</div><div>  silence_threshold: 0</div><div>  silence_size : 0</div><div>  boundary     : 4611686018427387904</div><div>Hardware PCM card 0 'HDA Intel PCH' device 0 subdevice 0</div><div>Its setup is:</div><div>  stream       : PLAYBACK</div><div>  access       : MMAP_INTERLEAVED</div><div>  format       : S32_LE</div><div>  subformat    : STD</div><div>  channels     : 2</div><div>  rate         : 48000</div><div>  exact rate   : 48000 (48000/1)</div><div>  msbits       : 32</div><div>  buffer_size  : 16384</div><div>  period_size  : 1024</div><div>  period_time  : 21333</div><div>  tstamp_mode  : ENABLE</div><div>  period_step  : 1</div><div>  avail_min    : 1024</div><div>  period_event : 0</div><div>  start_threshold  : 1</div><div>  stop_threshold   : 4611686018427387904</div><div>  silence_threshold: 0</div><div>  silence_size : 4611686018427387904</div><div>  boundary     : 4611686018427387904</div><div>  appl_ptr     : 0</div><div>  hw_ptr       : 0</div></div><div><br></div><div>16 periods, 21.3 ms each, it results in 341 ms. Yet there's no audible latency which makes me think that dmix's latency is approximately equals the period size, i.e. 21 ms. If I setup Pulseaudio so it uses the same configuration (tsched=0, fragment size=21, fragments=16) the latency equals the whole buffer size, 336 ms as reported by pacmd list-sinks and noticeable well in LMMS. It is unacceptable of course.  So is there a way to make PA work just like dmix, with the fixed latency of 21 ms or alike and without skips at the same time? With PA's interrupt-driven model I can get either bad latency with presumably no skips or good latency and underruns from time to time. With the new timer-based scheduling I have both skips and growing latency up to 168 ms or something like this in the end of the working day.</div><div><br></div><div>Another question is about pavucontrol. I usually listen to music in Chrome streaming from grooveshark, it uses HTML5 Audio. When I launch pavucontrol the first time, the playback skips pretty badly and the latency increases. The same sometimes happens when I launch pacmd list-sinks. No way these tools occupy so much CPU that Chrome can't sink audio to the server. It's like they block somewhere in the server and it can't accept audio from the outside. This doesn't happen when launching any other app except LMMS which also makes Chrome skip (if tsched=0) or produce garbled sound for a while (if tsched is not defined, i.e. =1) after which PA recovers.</div><div><br></div><div>Many internal details are provided in the bug I mentioned before so you can check I've tried pretty many things to make it work, including EFI update and various snd-hda-intel module options. I also have to note that all of this is not the issue on my home PC which is quite faster, i7-2600 with PCI SB Live 7.1. I use preemptive kernels on both machines, compiled from the patched pf source (pf-kernel). With the stock Debian kernel the matters are even worse and I had underruns on the home PC as well.</div></div>