linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Colin Cross <ccross@android.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: "Linux PM list" <linux-pm@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	"Arve Hjønnevåg" <arve@android.com>,
	"Len Brown" <len.brown@intel.com>
Subject: Re: [PATCH 03/10] freezer: add new freezable helpers using freezer_do_not_count()
Date: Thu, 2 May 2013 10:05:43 -0700	[thread overview]
Message-ID: <CAMbhsRRhcM=59xVgitYPyY-rzJTjV1mgwwusOzqFUqT2=__JDg@mail.gmail.com> (raw)
In-Reply-To: <20130502124826.GE22618@amd.pavel.ucw.cz>

On Thu, May 2, 2013 at 5:48 AM, Pavel Machek <pavel@ucw.cz> wrote:
> On Mon 2013-04-29 14:45:39, Colin Cross wrote:
>> Freezing tasks will wake up almost every userspace task from
>> where it is blocking and force it to run until it hits a
>> call to try_to_sleep(), generally on the exit path from the syscall
>> it is blocking in.  On resume each task will run again, usually
>> restarting the syscall and running until it hits the same
>> blocking call as it was originally blocked in.
>
> Ok, so you are optimizing suspend at the cost of runtime operations,
> right?
The runtime operations are negligible, it is setting a bit before
blocking, and then clearing the bit and checking a single global
counter as the fast-path after blocking.  Both will be lost in the
noise of the context switch that is happening.

> Would it make sense to do suspends entirely without freezer in your
> configurations? With the right drivers, it should work ok.

No, we need userspace tasks to freeze.  That is one of the main
reasons we go to suspend, to prevent recurring timers from firing.

> Actually, would it make sense to simply enter deep idle and do runtime
> powersaving in the drivers... n900 does that rather successfully and
> it is certainly cleaner design.

It depends on the SoC if that is even possible, and if we did do it we
would still use cgroup freezers to prevent apps from running and
eating the battery so this patch would still be applicable.

>> +/* Like schedule_timeout(), but should not block the freezer. */
>> +#define freezable_schedule_timeout(timeout)                          \
>> +({                                                                   \
>> +     long __retval;                                                  \
>> +     freezer_do_not_count();                                         \
>> +     __retval = schedule_timeout(timeout);                           \
>> +     freezer_count();                                                \
>> +     __retval;                                                       \
>> +})
>
> You plan to use this a lot during normal operation, right? Is it going
> to have some measureable impact?

It has a very measurable impact on suspend/resume operations (reducing
freeze time by a factor of 10, reducing context switches from 1000 to
25).  I haven't measured the impact on total energy used for a
suspend/resume cycle, but based on previous measurements I expect it
to be beneficial.

> Also, why not static inline?

I copied the style of the existing helpers.  I can change them all to
static inlines if you prefer.

  parent reply	other threads:[~2013-05-02 17:05 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-29 21:45 [PATCH 00/10] optimize freezing tasks by reducing task wakeups Colin Cross
2013-04-29 21:45 ` [PATCH 01/10] freezer: shorten freezer sleep time using exponential backoff Colin Cross
2013-05-02 12:28   ` Pavel Machek
     [not found] ` <1367271946-7239-1-git-send-email-ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>
2013-04-29 21:45   ` [PATCH 02/10] freezer: skip waking up tasks with PF_FREEZER_SKIP set Colin Cross
     [not found]     ` <1367271946-7239-3-git-send-email-ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>
2013-04-29 21:51       ` Tejun Heo
     [not found]         ` <20130429215157.GA2395-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2013-04-29 21:57           ` Tejun Heo
2013-04-29 22:02             ` Colin Cross
     [not found]               ` <CAMbhsRQHkm=XTYtummEZq1h4sa-tRGwLpk8Uyhpj9D3+jQF3dg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-04-29 22:08                 ` Tejun Heo
     [not found]                   ` <20130429220831.GC2395-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2013-04-29 22:16                     ` Tejun Heo
2013-04-30 11:48                       ` Rafael J. Wysocki
2013-04-30 17:10     ` Oleg Nesterov
2013-04-30 17:15       ` Oleg Nesterov
2013-04-29 21:45 ` [PATCH 03/10] freezer: add new freezable helpers using freezer_do_not_count() Colin Cross
2013-05-02 12:48   ` Pavel Machek
2013-05-02 13:05     ` Oliver Neukum
2013-05-02 13:46       ` Pavel Machek
2013-05-02 17:05     ` Colin Cross [this message]
2013-05-03 14:00       ` Pavel Machek
2013-04-29 21:45 ` [PATCH 04/10] binder: use freezable blocking calls Colin Cross
2013-04-29 21:45 ` [PATCH 05/10] epoll: use freezable blocking call Colin Cross
2013-04-29 21:45 ` [PATCH 06/10] select: " Colin Cross
2013-04-29 21:45 ` [PATCH 07/10] futex: " Colin Cross
2013-04-29 22:52   ` Darren Hart
2013-04-29 23:46     ` Colin Cross
2013-05-02 19:52     ` Matt Helsley
2013-04-29 21:45 ` [PATCH 08/10] nanosleep: " Colin Cross
2013-04-29 21:45 ` [PATCH 09/10] sigtimedwait: " Colin Cross
2013-04-30 16:38   ` Oleg Nesterov
2013-04-30 16:56     ` Oleg Nesterov
2013-04-30 16:58     ` Colin Cross
2013-04-30 17:00       ` Oleg Nesterov
2013-04-29 21:45 ` [PATCH 10/10] af_unix: use freezable blocking calls in read Colin Cross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAMbhsRRhcM=59xVgitYPyY-rzJTjV1mgwwusOzqFUqT2=__JDg@mail.gmail.com' \
    --to=ccross@android.com \
    --cc=arve@android.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=rjw@sisk.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).