Re: Attempted summary of suspend-blockers LKML thread

Florian Mickler
2010-08-04T06:12:09Z

On Tue, 3 Aug 2010 21:55:07 -0700 (PDT)
david@lang.hm wrote:

> On Tue, 3 Aug 2010, Arjan van de Ven wrote:
>
> > On Tue, 3 Aug 2010 17:10:15 -0700
> > "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> wrote:
> >>
> >> OK, I'll bite...
> >>
> >>> From an Android perspective, the differences are as follows:
> >>
> >> 1. Deep idle states are entered only if there are no runnable
> >> tasks. In contrast, opportunistic suspend can happen even when there
> >> are tasks that are ready, willing, and able to run.
> >
> > for "system suspend", this is an absolutely valid statement.
> > for "use suspend as idle state", it's not so clearly valid.
> > (but this is sort of a separate problem, basically the "when do we
> > freeze the tasks that we don't like for power reasons" problem,
> > which in first order is independent on what kind of idle power state
> > you pick, and discussed extensively elsewhere in this thread)
>
> note that what I'm speculating about would never freeze some of the tasks,
> it would run everything if anything is run, but it would not consider the
> actions of some of the programs when deciding if it can shutdown.
>
> so if you have all your privilaged applications in long sleeps, but still
> have your bouncing cows running, peggng the CPU, making noise, and
> updating the screen, the system would decide the system is 'idle' and go
> into the 'suspend' low power state until there is a wake activity.
>
> but if you have a privilaged application doing other stuff (say you are
> talking on the phone, have a GPS mapping program running and giving you
> directions, etc), the bouncing cows would continue to run and there would
> never be an attempt to freeze them while leaving the other stuff active.
>
> David Lang

I think the only difference between your proposition and the
current android practice is that in your scheme the partition is along
the process/task boundary (i.e. good apps vs bad apps) whereas the
android looks at actions or events or ... let's call it "stuff" and
blocks suspend whenever "stuff" needs to be done.

The main thing is that even an process that is allowed to block suspend
doesn't do so all the time. Only when it is critical that "stuff" get's
done right away.

One way to make an application work the same way with your scheme (as
I understand it) on android could be to split the
application into an "blocker" part, that is not part of the
"ignore-cgroup" (the "trusted" part) and another one that is in the
"ignore-cgroup" (the "untrusted" part). Whenever the untrusted part
needs to block suspend it notices the "trusted" part via ipc and the
trusted part goes into some sort of "activity loop". This looks kind of
stupid. But I bet it is what application developers are going to do if
there is no provision for a flexible runtime enable/disable "suspend
blocker".

hmmm...

Cheers,
Flo