Re: [RFC PATCH] ASoC: core: Optimise suspend/resume of DAPM widgets

From: Mark Brown
Date: Tue Aug 14 2018 - 10:40:15 EST

On Mon, Aug 13, 2018 at 07:19:16PM +0100, Jon Hunter wrote:
> I had taken some ftrace graphs but there was not one thing that really
> stood out. Looking again it seems that each call to
> async_schedule_domain() can take tens of uS and so it there are a lot of
> DAPM widgets (100+) this can take some time. I will dig into it a bit
> further.

We don't call that per widget, we call that per context. We might have
a lot of contexts but it's definitely not number of widgets level.
Perhaps what we need there is something which remembers if we actually
changed anything in each context and/or there's relevant operations and
then doesn't do this if not, we're working on the basis that these
operations are fairly cheap.

> > One thing that it occurs to me might help is to start the suspend
> > process by powering down all the input and output widgets that aren't
> > ignoring suspend in one operation, that should hopefully have the effect
> > of ensuring that most of the system that's going to get powered down
> > does so on the first pass through.

> If the async_schedule_domain() calls are the problem, then it may not
> help as we call that for all dapms apart from the card->dapm.

No, we actually need to run the operations on all contexts - they can
all do things if they want to. We just want them all to run in parallel
so if we are doing things like waiting for capacitors to charge we don't
do it in series.

Attachment: signature.asc
Description: PGP signature