Alsaloop long-running session leads to CPU spikes and stalls

GitHub issues - opened github at alsa-project.org
Thu Sep 8 13:15:46 CEST 2022


alsa-project/alsa-utils issue #168 was opened from ebrodlic:

We have a recurring issue on an embedded system where we use alsaloop to continually forward audio between:
EC25E modem -> system speaker (output)
system microphone (input) -> EC25E modem

The two alsaloop processes run constantly in the background, and are in charge of enabling the GSM call audio functionality on our devices.

What ends up happening is:
- System boots up and starts the 2 processes
- System usage is normal levels for 2-3 hours (very low CPU utilization)
- After cca 3 hours of runtime, one alsaloop process will spike a single core of the CPU up to 100% continually
- After a seemingly random amount of time of the single CPU core being fully utilized, the system may show reduced responsiveness, eventually showing recurring kernel warnings regarding CPU stalls

```
[Tue Aug 30 16:50:42 2022] rcu: INFO: rcu_preempt self-detected stall on CPU
[Tue Aug 30 16:50:42 2022] rcu:         3-....: (5048 ticks this GP) idle=752/1/0x4000000000000002 softirq=1819133/1819133 fqs=2493
[Tue Aug 30 16:50:42 2022]      (t=5250 jiffies g=3235733 q=26917)
[Tue Aug 30 16:50:42 2022] Task dump for CPU 3:
[Tue Aug 30 16:50:42 2022] alsaloop        R  running task        0   761      1 0x00000202
[Tue Aug 30 16:50:42 2022] Call trace:
[Tue Aug 30 16:50:42 2022]  dump_backtrace+0x0/0x140
[Tue Aug 30 16:50:42 2022]  show_stack+0x14/0x20
[Tue Aug 30 16:50:42 2022]  sched_show_task+0x110/0x138
[Tue Aug 30 16:50:42 2022]  dump_cpu_task+0x40/0x4c
[Tue Aug 30 16:50:42 2022]  rcu_dump_cpu_stacks+0x94/0xd0
[Tue Aug 30 16:50:42 2022]  rcu_sched_clock_irq+0x75c/0x9c8
[Tue Aug 30 16:50:42 2022]  update_process_times+0x2c/0x68
[Tue Aug 30 16:50:42 2022]  tick_sched_handle.isra.0+0x30/0x50
[Tue Aug 30 16:50:42 2022]  tick_sched_timer+0x48/0x98
[Tue Aug 30 16:50:42 2022]  __hrtimer_run_queues+0x110/0x1b0
[Tue Aug 30 16:50:42 2022]  hrtimer_interrupt+0xe4/0x240
[Tue Aug 30 16:50:42 2022]  arch_timer_handler_phys+0x30/0x40
[Tue Aug 30 16:50:42 2022]  handle_percpu_devid_irq+0x80/0x140
[Tue Aug 30 16:50:42 2022]  generic_handle_irq+0x24/0x38
[Tue Aug 30 16:50:42 2022]  __handle_domain_irq+0x60/0xb8
[Tue Aug 30 16:50:42 2022]  gic_handle_irq+0x5c/0x148
[Tue Aug 30 16:50:42 2022]  el1_irq+0xb8/0x180
[Tue Aug 30 16:50:42 2022]  snd_power_wait+0x0/0xe8
[Tue Aug 30 16:50:42 2022]  snd_pcm_ioctl+0x2c/0x40
[Tue Aug 30 16:50:42 2022]  do_vfs_ioctl+0x964/0xb48
[Tue Aug 30 16:50:42 2022]  ksys_ioctl+0x78/0xa8
[Tue Aug 30 16:50:42 2022]  __arm64_sys_ioctl+0x1c/0xb8
[Tue Aug 30 16:50:42 2022]  el0_svc_common.constprop.0+0x68/0x160
[Tue Aug 30 16:50:42 2022]  el0_svc_handler+0x20/0x80
[Tue Aug 30 16:50:42 2022]  el0_svc+0x8/0x208
[Tue Aug 30 16:50:42 2022] retire_capture_urb: 307 callbacks suppressed
```

Commands used to start the two processes:
`/usr/bin/alsaloop -P ec25 -C default -t 500000 -n -r 8000 -f S16_LE -c 1`
`/usr/bin/alsaloop -C ec25 -P default -t 500000 -n -r 8000 -f S16_LE -c 1`

Our current alsa .asoundrc conf file:
```
pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_key_add_uid false   # let multiple users share
    ipc_perm 0666           # IPC permissions for multi-user sharing (octal, default 0600)
    slave {
        pcm "hw:tas5722,0"
    }
    bindings {
        0 0
        1 1
    }
}

pcm.dsnooped {
    type dsnoop
    ipc_key 1027
    ipc_key_add_uid false   # let multiple users share
    ipc_perm 0666           # IPC permissions for multi-user sharing (octal, default 0600)
    slave {
        pcm "hw:ics43432,0"
        channels 1
        format S32_LE
    }
}

pcm.asymed {
    type asym
    playback.pcm "dmixer"
    capture.pcm "softvol"
}

pcm.!default {
    type plug
    slave.pcm "asymed"
}

pcm_slave.ec25 {
    pcm "hw:EC25E,0"
    format S16_LE
    channels 1
    rate 8000
}

pcm.ec25 {
    type plug
    slave ec25
}

pcm.softvol {
    type softvol
    slave.pcm dsnooped
    control {
        name "Boost Capture Volume"
        card ics43432
    }
    min_dB -3.0
    max_dB 50.0
}
```

This one is not very easy to debug so it would be great if I could get some pointers in are we dealing with:
- potential bugs
- alsaloop misuse in approach
- problems in existing configuration

Any info would be appreciated!

Issue URL     : https://github.com/alsa-project/alsa-utils/issues/168
Repository URL: https://github.com/alsa-project/alsa-utils


More information about the Alsa-devel mailing list