From: Aboorva Devarajan <aboorvad@linux.ibm.com>
To: "Rafael J . Wysocki" <rafael@kernel.org>,
Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Christian Loehle <christian.loehle@arm.com>,
Gautam Menghani <gautam@linux.ibm.com>,
Aboorva Devarajan <aboorvad@linux.ibm.com>,
linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v2 1/1] cpuidle: menu: Prefer polling state for short idle durations
Date: Mon, 17 Mar 2025 11:33:57 +0530 [thread overview]
Message-ID: <20250317060357.29451-1-aboorvad@linux.ibm.com> (raw)
Avoid selecting deep idle state when the predicted idle duration is
shorter than its target residency, as this leads to unnecessary state
transitions without energy savings.
On virtualized PowerPC (pseries) systems, where only one polling state
(Snooze) and one deep state (CEDE) are available, selecting CEDE when
its target residency exceeds the predicted idle duration hurts
performance.
For example, if the predicted idle duration is 15 us and the first
non-polling state has a target residency of 120 us, selecting it
would be suboptimal.
Remove the condition introduced in commit 69d25870f20c
("cpuidle: fix the menu governor to boost IO performance") that
prioritized non-polling states even when their target residency
exceeded the predicted idle duration and allow polling states to
be selected when appropriate.
Performance improvement observed with pgbench on PowerPC (pseries)
system:
+---------------------------+------------+------------+------------+
| Metric | Baseline | Patched | Change (%) |
+---------------------------+------------+------------+------------+
| Transactions/sec (TPS) | 494,834 | 538,707 | +8.85% |
| Avg latency (ms) | 0.162 | 0.149 | -8.02% |
+---------------------------+------------+------------+------------+
CPUIdle state usage:
+--------------+--------------+-------------+
| Metric | Baseline | Patched |
+--------------+--------------+-------------+
| Total usage | 12,703,630 | 13,941,966 |
| Above usage | 11,388,990 | 1,620,474 |
| Below usage | 19,973 | 684,708 |
+--------------+--------------+-------------+
Above/Total and Below/Total usage percentages:
+------------------------+-----------+---------+
| Metric | Baseline | Patched |
+------------------------+-----------+---------+
| Above % (Above/Total) | 89.67% | 11.63% |
| Below % (Below/Total) | 0.16% | 4.91% |
| Total cpuidle miss (%) | 89.83% | 16.54% |
+------------------------+-----------+---------+
Signed-off-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
---
v1: https://lore.kernel.org/all/20240809073120.250974-1-aboorvad@linux.ibm.com/
v1 -> v2:
- Drop cover letter and improve commit message.
---
| 11 -----------
1 file changed, 11 deletions(-)
--git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index 28363bfa3e4c..4b199377e4be 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -296,17 +296,6 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
idx = i; /* first enabled state */
if (s->target_residency_ns > predicted_ns) {
- /*
- * Use a physical idle state, not busy polling, unless
- * a timer is going to trigger soon enough.
- */
- if ((drv->states[idx].flags & CPUIDLE_FLAG_POLLING) &&
- s->exit_latency_ns <= latency_req &&
- s->target_residency_ns <= data->next_timer_ns) {
- predicted_ns = s->target_residency_ns;
- idx = i;
- break;
- }
if (predicted_ns < TICK_NSEC)
break;
--
2.43.5
next reply other threads:[~2025-03-17 6:04 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-17 6:03 Aboorva Devarajan [this message]
2025-03-17 8:35 ` [PATCH v2 1/1] cpuidle: menu: Prefer polling state for short idle durations Christian Loehle
2025-04-01 16:58 ` Rafael J. Wysocki
2025-04-14 6:01 ` Aboorva Devarajan
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=20250317060357.29451-1-aboorvad@linux.ibm.com \
--to=aboorvad@linux.ibm.com \
--cc=christian.loehle@arm.com \
--cc=daniel.lezcano@linaro.org \
--cc=gautam@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rafael@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox