From: Colin Cross <ccross@android.com>
To: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, "Rafael J. Wysocki" <rjw@sisk.pl>,
arve@android.com, Tejun Heo <tj@kernel.org>,
Oleg Nesterov <oleg@redhat.com>, Colin Cross <ccross@android.com>,
Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>
Subject: [PATCH v2 01/10] freezer: shorten freezer sleep time using exponential backoff
Date: Wed, 1 May 2013 18:34:59 -0700 [thread overview]
Message-ID: <1367458508-9133-2-git-send-email-ccross@android.com> (raw)
In-Reply-To: <1367458508-9133-1-git-send-email-ccross@android.com>
All tasks can easily be frozen in under 10 ms, switch to using
an initial 1 ms sleep followed by exponential backoff until
8 ms. Also convert the printed time to ms instead of centiseconds.
Signed-off-by: Colin Cross <ccross@android.com>
---
kernel/power/process.c | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/kernel/power/process.c b/kernel/power/process.c
index 98088e0..eb7e6c1 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -30,9 +30,10 @@ static int try_to_freeze_tasks(bool user_only)
unsigned int todo;
bool wq_busy = false;
struct timeval start, end;
- u64 elapsed_csecs64;
- unsigned int elapsed_csecs;
+ u64 elapsed_msecs64;
+ unsigned int elapsed_msecs;
bool wakeup = false;
+ int sleep_usecs = USEC_PER_MSEC;
do_gettimeofday(&start);
@@ -70,20 +71,22 @@ static int try_to_freeze_tasks(bool user_only)
* We need to retry, but first give the freezing tasks some
* time to enter the refrigerator.
*/
- msleep(10);
+ usleep_range(sleep_usecs / 2, sleep_usecs);
+ if (sleep_usecs < 8 * USEC_PER_MSEC)
+ sleep_usecs *= 2;
}
do_gettimeofday(&end);
- elapsed_csecs64 = timeval_to_ns(&end) - timeval_to_ns(&start);
- do_div(elapsed_csecs64, NSEC_PER_SEC / 100);
- elapsed_csecs = elapsed_csecs64;
+ elapsed_msecs64 = timeval_to_ns(&end) - timeval_to_ns(&start);
+ do_div(elapsed_msecs64, NSEC_PER_MSEC);
+ elapsed_msecs = elapsed_msecs64;
if (todo) {
printk("\n");
- printk(KERN_ERR "Freezing of tasks %s after %d.%02d seconds "
+ printk(KERN_ERR "Freezing of tasks %s after %d.%03d seconds "
"(%d tasks refusing to freeze, wq_busy=%d):\n",
wakeup ? "aborted" : "failed",
- elapsed_csecs / 100, elapsed_csecs % 100,
+ elapsed_msecs / 1000, elapsed_msecs % 1000,
todo - wq_busy, wq_busy);
if (!wakeup) {
@@ -96,8 +99,8 @@ static int try_to_freeze_tasks(bool user_only)
read_unlock(&tasklist_lock);
}
} else {
- printk("(elapsed %d.%02d seconds) ", elapsed_csecs / 100,
- elapsed_csecs % 100);
+ printk("(elapsed %d.%03d seconds) ", elapsed_msecs / 1000,
+ elapsed_msecs % 1000);
}
return todo ? -EBUSY : 0;
--
1.8.2.1
next prev parent reply other threads:[~2013-05-02 1:35 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-02 1:34 [PATCH v2 00/10] optimize freezing tasks by reducing task wakeups Colin Cross
2013-05-02 1:34 ` Colin Cross [this message]
2013-05-02 23:20 ` [PATCH v2 01/10] freezer: shorten freezer sleep time using exponential backoff Tejun Heo
2013-05-02 1:35 ` [PATCH v2 02/10] freezer: skip waking up tasks with PF_FREEZER_SKIP set Colin Cross
2013-05-02 23:24 ` Tejun Heo
2013-05-03 9:24 ` Pavel Machek
2013-05-02 1:35 ` [PATCH v2 03/10] freezer: add new freezable helpers using freezer_do_not_count() Colin Cross
2013-05-02 23:55 ` Tejun Heo
2013-05-03 0:03 ` Tejun Heo
2013-05-03 2:16 ` Colin Cross
2013-05-03 2:41 ` Colin Cross
2013-05-03 4:09 ` Tejun Heo
2013-05-03 4:12 ` Tejun Heo
2013-05-03 4:17 ` Colin Cross
2013-05-03 4:20 ` Tejun Heo
2013-05-03 14:18 ` Alan Stern
2013-05-03 16:54 ` Tejun Heo
2013-05-02 1:35 ` [PATCH v2 04/10] binder: use freezable blocking calls Colin Cross
2013-05-02 1:35 ` Colin Cross
2013-05-02 1:35 ` [PATCH v2 05/10] epoll: use freezable blocking call Colin Cross
2013-05-02 1:35 ` [PATCH v2 06/10] select: " Colin Cross
2013-05-02 1:35 ` [PATCH v2 07/10] futex: " Colin Cross
2013-05-02 19:45 ` Thomas Gleixner
2013-05-03 3:12 ` Darren Hart
2013-06-25 21:15 ` [tip:core/locking] futex: Use " tip-bot for Colin Cross
2013-05-02 1:35 ` [PATCH v2 08/10] nanosleep: use " Colin Cross
2013-05-02 19:46 ` Thomas Gleixner
2013-05-02 1:35 ` [PATCH v2 09/10] sigtimedwait: " Colin Cross
2013-05-02 1:35 ` [PATCH v2 10/10] af_unix: use freezable blocking calls in read Colin Cross
2013-05-03 0:08 ` Tejun Heo
2013-05-04 19:19 ` Rafael J. Wysocki
2013-05-04 20:39 ` Tejun Heo
2013-05-04 22:23 ` Colin Cross
2013-05-05 11:23 ` Rafael J. Wysocki
2013-05-02 21:06 ` [PATCH v2 00/10] optimize freezing tasks by reducing task wakeups Rafael J. Wysocki
2013-05-03 0:10 ` Tejun Heo
2013-05-03 11:43 ` Rafael J. Wysocki
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=1367458508-9133-2-git-send-email-ccross@android.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=oleg@redhat.com \
--cc=pavel@ucw.cz \
--cc=rjw@sisk.pl \
--cc=tj@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.