Re: [PATCH] ASoC: SOF: Use high-priority workqueue for PCM period elapsed
Péter Ujfalusi <[email protected]> Fri, 31 Jul 2026 12:31:19 +0300
| Newsgroups | org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
On 31/07/2026 12:20, Pierre-Louis Bossart wrote: > On 7/30/26 15:04, Peter Ujfalusi wrote: >> From: Yu-Hsuan Hsu <[email protected]> >> >> The snd_sof_pcm_period_elapsed function currently schedules work on the >> system-wide workqueue. This can lead to potential delays or jitter in >> audio processing if the system workqueue is busy with other tasks. >> >> To improve real-time performance and ensure timely processing of PCM >> periods, we can use the system_highpri_wq instead of the default work >> queue. >> >> In performance testing, this change significantly reduced the observed >> scheduling delays. For instance, under load(stressapptest -M 15000 -m >> 60), the maximum delay dropped from 9ms on the system workqueue to 5ms >> on the dedicated high-priority workqueue. >> >> Suggested-by: Kai Vehmanen <[email protected]> >> Signed-off-by: Yu-Hsuan Hsu <[email protected]> >> Reviewed-by: Péter Ujfalusi <[email protected]> >> Reviewed-by: Kai Vehmanen <[email protected]> >> Reviewed-by: Bard Liao <[email protected]> >> Signed-off-by: Peter Ujfalusi <[email protected]> > > Sounds good but should this higher priority queue be used for other > things as well? > > e.g. > > period-elapsed for compressed streams: > schedule_work(&spcm->stream[cstream->direction].period_elapsed_work); > > and the SoundWire interrupt handling with additional workqueues: > schedule_work(&amd_manager->amd_sdw_irq_thread); > schedule_work(&amd_manager->amd_sdw_work); > schedule_work(&cdns->work); we also have: sound/soc/sof/core.c: schedule_work(&sdev->probe_work); sound/soc/sof/intel/ptl.c: schedule_work(&hdev->mic_privacy.work); > Not sure what the rules are to define what's high-priority and what's > not... It could be that different systems have different requirements... I think the 'rule' is that what is time critical and what can tolerate a bit of a delay. The PCM period is time critical while the others are not that much, that includes the compress elapsed, it is not that real-time as the PCM. But fair point, I will check if anything else would needs to be higher priority than what they are. > >> --- >> sound/soc/sof/pcm.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/sound/soc/sof/pcm.c b/sound/soc/sof/pcm.c >> index b2071edeaea6..f748d072109a 100644 >> --- a/sound/soc/sof/pcm.c >> +++ b/sound/soc/sof/pcm.c >> @@ -62,7 +62,7 @@ void snd_sof_pcm_period_elapsed(struct snd_pcm_substream *substream) >> * To avoid sending IPC before the previous IPC is handled, we >> * schedule delayed work here to call the snd_pcm_period_elapsed(). >> */ >> - schedule_work(&spcm->stream[substream->stream].period_elapsed_work); >> + queue_work(system_highpri_wq, &spcm->stream[substream->stream].period_elapsed_work); >> } >> EXPORT_SYMBOL(snd_sof_pcm_period_elapsed); >> > -- Péter