btw, I tried the latency.c app in polling mode too (./latency -P plughw:0 -C plughw:0 -f S16_LE -c 1 -r 8000 -m 320 -M 960 -s 600 -p) with same "spiking" results.
Further hints?
On 4/13/07, Giovanni Maruzzelli gmaruzz.lists@gmail.com wrote:
I applied the first hint from Jaroslav (at the end of this post the new asound.conf), but the problem seems not gone: one time each 256 seconds I get a very strong cpu load spike, that is maybe related (my guess) to the usage of plugin (maybe periodic cleaning each 256 secs?). When there is no spike, the cpu load is 0.0% with occasional 0.1% any 60-90 secs.
I ran the latency test code with plughw:0 (I can't use latency.c with my virtual cards because they can't link the in and out togheter) using the blocking mode, real time, no poll. Any 256 secs, spike! (a cpu load for latency.c of 45.00%, for roughly a sec, with the cumulated cpu time of the latency.c app reported from top -d 1.0 passing from: 0:00.01 to: 0:00.64 to: 0:01.26 etc, any 256 seconds.
latency.c output:
./latency -P plughw:0 -C plughw:0 -f S16_LE -c 1 -r 8000 -m 320 -M 960 -s 600 -b Playback device is plughw:0 Capture device is plughw:0 Parameters are 8000Hz, S16_LE, 1 channels, blocking mode Wanted tick time: 0us, poll mode: no Loop limit is 4800000 frames, minimum latency = 320, maximum latency = 960 Plug PCM: Route conversion PCM (sformat=S32_LE) Transformation table: 0 <- 0 1 <- 0 2 <- 0 3 <- 0 4 <- 0 5 <- 0 6 <- 0 7 <- 0 8 <- 0 9 <- 0 Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 1 rate : 8000 exact rate : 8000 (8000/1) msbits : 16 buffer_size : 320 period_size : 160 period_time : 20000 tick_time : 10000 tstamp_mode : NONE period_step : 1 sleep_min : 0 avail_min : 160 xfer_align : 1 start_threshold : 2147483647 stop_threshold : 320 silence_threshold: 0 silence_size : 0 boundary : 1342177280 Slave: Hardware PCM card 0 'M Audio Delta 1010LT' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S32_LE subformat : STD channels : 10 rate : 8000 exact rate : 8000 (8000/1) msbits : 24 buffer_size : 320 period_size : 160 period_time : 20000 tick_time : 10000 tstamp_mode : NONE period_step : 1 sleep_min : 0 avail_min : 160 xfer_align : 1 start_threshold : 2147483647 stop_threshold : 320 silence_threshold: 0 silence_size : 0 boundary : 1342177280 Plug PCM: Route conversion PCM (sformat=S32_LE) Transformation table: 0 <- 0*0.0833333 + 1*0.0833333 + 2*0.0833333 + 3*0.0833333 + 4*0.0833333 + 5*0.0833333 + 6*0.0833333 + 7*0.0833333 + 8*0.0833333 + 9*0.0833333 + 10*0.0833333 + 11*0.0833333 Its setup is: stream : CAPTURE access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 1 rate : 8000 exact rate : 8000 (8000/1) msbits : 16 buffer_size : 320 period_size : 160 period_time : 20000 tick_time : 10000 tstamp_mode : NONE period_step : 1 sleep_min : 0 avail_min : 160 xfer_align : 1 start_threshold : 2147483647 stop_threshold : 320 silence_threshold: 0 silence_size : 0 boundary : 1342177280 Slave: Hardware PCM card 0 'M Audio Delta 1010LT' device 0 subdevice 0 Its setup is: stream : CAPTURE access : MMAP_INTERLEAVED format : S32_LE subformat : STD channels : 12 rate : 8000 exact rate : 8000 (8000/1) msbits : 24 buffer_size : 320 period_size : 160 period_time : 20000 tick_time : 10000 tstamp_mode : NONE period_step : 1 sleep_min : 0 avail_min : 160 xfer_align : 1 start_threshold : 2147483647 stop_threshold : 320 silence_threshold: 0 silence_size : 0 boundary : 1342177280 Trying latency 320 frames, 40000.000us, 40.000000ms (25.0000Hz) Success Playback: *** frames = 4800320 *** state : RUNNING trigger_time: 1176471431.639255951 tstamp : 1176472031.482713139 delay : 317 avail : 3 avail_max : 192 Capture: *** frames = 4800000 *** state : RUNNING trigger_time: 1176471431.639255951 tstamp : 1176472031.482757926 delay : 1 avail : 1 avail_max : 189 Maximum read: 160 frames Maximum read latency: 20000.000us, 20.000000ms (50.0000Hz) Hardware sync Playback time = 1176471431.639255, Record time = 1176471431.639255, diff = 0
new asound.conf:
pcm.c3 { type dsnoop ipc_key 56789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 12 format S32_LE } bindings { 0 2 } } pcm.capt3 { type plug slave.pcm c3 }
pcm.c4 { type dsnoop ipc_key 56789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 12 format S32_LE } bindings { 0 3 } } pcm.capt4 { type plug slave.pcm c4 }
pcm.c5 { type dsnoop ipc_key 56789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 12 format S32_LE } bindings { 0 4 } } pcm.capt5 { type plug slave.pcm c5 }
pcm.c6 { type dsnoop ipc_key 56789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 12 format S32_LE } bindings { 0 5 } } pcm.capt6 { type plug slave.pcm c6 }
pcm.c7 { type dsnoop ipc_key 56789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 12 format S32_LE } bindings { 0 6 } } pcm.capt7 { type plug slave.pcm c7 }
pcm.c8 { type dsnoop ipc_key 56789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 12 format S32_LE } bindings { 0 7 } } pcm.capt8 { type plug slave.pcm c8 }
############################# #############################
pcm.s3 { type dshare ipc_key 123456789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 10 format S32_LE } bindings { 0 2 } } pcm.play3 { type plug slave.pcm s3 }
pcm.s4 { type dshare ipc_key 123456789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 10 format S32_LE } bindings { 0 3 } } pcm.play4 { type plug slave.pcm s4 }
pcm.s5 { type dshare ipc_key 123456789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 10 format S32_LE } bindings { 0 4 } } pcm.play5 { type plug slave.pcm s5 }
pcm.s6 { type dshare ipc_key 123456789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 10 format S32_LE } bindings { 0 5 } } pcm.play6 { type plug slave.pcm s6 }
pcm.s7 { type dshare ipc_key 123456789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 10 format S32_LE } bindings { 0 6 } } pcm.play7 { type plug slave.pcm s7 }
pcm.s8 { type dshare ipc_key 123456789 slave { pcm "hw:0,0" rate 8000 period_time 0 period_size 320 channels 10 format S32_LE } bindings { 0 7 } } pcm.play8 { type plug slave.pcm s8 }
On 4/13/07, Giovanni Maruzzelli gmaruzz.lists@gmail.com wrote:
Thanks a lot Jaroslav, I'll apply your suggestions and I'll report here
On 4/13/07, Jaroslav Kysela perex@suse.cz wrote:
On Fri, 13 Apr 2007, Giovanni Maruzzelli wrote:
Dear Alsa developers,
I want to use a 1010lt (ice1712 driver) as 6 analog mono duplex cards.
I want to use the /etc/asound.conf (.asoundrc) to split the card (that has 8 in and 8 out - but I use just 6 in/out), with minimal latency.
I mean, I want to record and play (duplex) from/to each virtual card concurrently and from separate application instances.
My app works with S16_LE, 8000, mono.
Is the following asound.conf (.asoundrc) correct and efficient for this?
Use dsnoop bindings rather than routing (ttable) for capture too, otherwise alsa-lib works with all channels internally.
I got spikes of cpu load (at 5-6%) on each virtual card any roughly 256 seconds when using a(play|record) to record or play from/to any
aplay|arecord is not very good test. Use latency test code - available in alsa-lib/test directory.
Jaroslav
Jaroslav Kysela perex@suse.cz Linux Kernel Sound Maintainer ALSA Project, SUSE Labs