[pulseaudio-tickets] [PulseAudio] #722: High CPU load during capture from the ALSA "default" device

PulseAudio trac-noreply at tango.0pointer.de
Wed Nov 18 07:06:02 PST 2009


#722: High CPU load during capture from the ALSA "default" device
-------------------------------------------+--------------------------------
 Reporter:  krnekit                        |       Owner:  ossman            
     Type:  defect                         |      Status:  new               
Milestone:                                 |   Component:  alsa-plugins-pulse
 Keywords:  alsa capture default cpu load  |  
-------------------------------------------+--------------------------------
 While doing capture from the ALSA "default" device the program have high
 cpu load (~20% of one core on my AMD Athlon X2). This can be reproduced by
 the following command:
 {{{
 arecord > /dev/null
 }}}

 Using the device, distinct from "default" (for example "plughw:0,0"),
 using capture through pulseaudio without emulation (with parecord) or
 doing playback works well without high cpu load.

 This problem discovered in version 0.9.19 on Mandriva Linux 2010.0. Also
 it have been reproduced on Ubintu 9.10 and Fedora 12 with the same version
 of pulseaudio, and on Mandriva 2009.1.
 This problem is absent in pulseadio 0.9.12 (openSUSE 11.1). But in 0.9.10
 on Mandriva 2009.0 it again gives high cpu load.

 Calling strace on arecord gives information about enormous amount of
 poll() calls:
 {{{
 % time     seconds  usecs/call     calls    errors syscall
 ------ ----------- ----------- --------- --------- ----------------
  95.30    0.014735           0     62709           poll
   2.43    0.000375         375         1           execve
   2.27    0.000351           2       156         2 futex
   0.00    0.000000           0       233        92 read
   0.00    0.000000           0       167           write
   0.00    0.000000           0        75        14 open
   0.00    0.000000           0        62           close
   0.00    0.000000           0         1           stat
   0.00    0.000000           0        57           fstat
   0.00    0.000000           0        96           mmap
   0.00    0.000000           0        54           mprotect
   0.00    0.000000           0        18           munmap
   0.00    0.000000           0         4           brk
   0.00    0.000000           0         5           rt_sigaction
   0.00    0.000000           0         1           rt_sigprocmask
   0.00    0.000000           0        17           writev
   0.00    0.000000           0         6         3 access
   0.00    0.000000           0         2           pipe
   0.00    0.000000           0         2           socket
   0.00    0.000000           0         2           connect
   0.00    0.000000           0         1         1 sendto
   0.00    0.000000           0         1           getsockname
   0.00    0.000000           0         1           getpeername
   0.00    0.000000           0         1           setsockopt
   0.00    0.000000           0         1           clone
   0.00    0.000000           0         8         1 kill
   0.00    0.000000           0         1           uname
   0.00    0.000000           0        23           fcntl
   0.00    0.000000           0         1           ftruncate
   0.00    0.000000           0         2           getdents
   0.00    0.000000           0         1           unlink
   0.00    0.000000           0         2           readlink
   0.00    0.000000           0         1           getrlimit
   0.00    0.000000           0         1           getuid
   0.00    0.000000           0         1           statfs
   0.00    0.000000           0         1           arch_prctl
   0.00    0.000000           0         1           set_tid_address
   0.00    0.000000           0         1           set_robust_list
 ------ ----------- ----------- --------- --------- ----------------
 100.00    0.015461                 63717       113 total
 }}}
 This is for approximately ten seconds.

 More detailed strace output shows, that this call:
 {{{
 poll([{fd=5, events=POLLIN|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=5,
 revents=POLLIN}])
 }}}
 repeated ~1000 times.

 Doing playback, poll() not called so frequently:
 {{{
 % time     seconds  usecs/call     calls    errors syscall
 ------ ----------- ----------- --------- --------- ----------------
  87.26    0.004999          54        92           poll
   9.25    0.000530          17        32         2 futex
   3.23    0.000185           2        77           write
   0.26    0.000015           0        96           mmap
   0.00    0.000000           0       267        75 read
   0.00    0.000000           0        75        14 open
   0.00    0.000000           0        62           close
   0.00    0.000000           0         1           stat
   0.00    0.000000           0        57           fstat
   0.00    0.000000           0        54           mprotect
   0.00    0.000000           0        17           munmap
   0.00    0.000000           0         4           brk
   0.00    0.000000           0         5           rt_sigaction
   0.00    0.000000           0         1           rt_sigprocmask
   0.00    0.000000           0        17           writev
   0.00    0.000000           0         6         3 access
   0.00    0.000000           0         2           pipe
   0.00    0.000000           0         2           socket
   0.00    0.000000           0         2           connect
   0.00    0.000000           0         1         1 sendto
   0.00    0.000000           0         1           getsockname
   0.00    0.000000           0         1           getpeername
   0.00    0.000000           0         1           setsockopt
   0.00    0.000000           0         1           clone
   0.00    0.000000           0         1           execve
   0.00    0.000000           0         8           kill
   0.00    0.000000           0         1           uname
   0.00    0.000000           0        23           fcntl
   0.00    0.000000           0         1           ftruncate
   0.00    0.000000           0         2           getdents
   0.00    0.000000           0         2           readlink
   0.00    0.000000           0         1           getrlimit
   0.00    0.000000           0         1           getuid
   0.00    0.000000           0         1           statfs
   0.00    0.000000           0         1           arch_prctl
   0.00    0.000000           0         1           set_tid_address
   0.00    0.000000           0         1           set_robust_list
 ------ ----------- ----------- --------- --------- ----------------
 100.00    0.005729                   918        95 total
 }}}
 for the approximately same time.
 Playback is executed as:
 {{{
 aplay < /dev/zero
 }}}

-- 
Ticket URL: <http://pulseaudio.org/ticket/722>
PulseAudio <http://pulseaudio.org/>
The PulseAudio Sound Server


More information about the pulseaudio-bugs mailing list