aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2022-01-10 00:17:43 +0000
committerAlexander Motin <mav@FreeBSD.org>2022-01-10 00:25:56 +0000
commitcb1f5d11366dc9b803f2755d83fe02599830882a (patch)
tree4fba7848449dbaf04ae2ef4a0753d3b9aa9daef4
parent7ef56fb0498461edf4bf4c482fd8bc6fa126e0e9 (diff)
downloadsrc-cb1f5d11366dc9b803f2755d83fe02599830882a.tar.gz
src-cb1f5d11366dc9b803f2755d83fe02599830882a.zip
Reduce minimum idle hardclock rate from 2Hz to 1Hz.
On idle 80-thread system it allows to improve package-level idle state residency and so power consumption by several percent. MFC after: 2 weeks
-rw-r--r--sys/kern/kern_clocksource.c5
-rw-r--r--sys/kern/kern_timeout.c5
2 files changed, 5 insertions, 5 deletions
diff --git a/sys/kern/kern_clocksource.c b/sys/kern/kern_clocksource.c
index dfc9081ba9f6..48e06ee082fc 100644
--- a/sys/kern/kern_clocksource.c
+++ b/sys/kern/kern_clocksource.c
@@ -239,13 +239,14 @@ getnextcpuevent(int idle)
/* Handle hardclock() events, skipping some if CPU is idle. */
event = state->nexthard;
if (idle) {
- hardfreq = (u_int)hz / 2;
- if (tc_min_ticktock_freq > 2
+ if (tc_min_ticktock_freq > 1
#ifdef SMP
&& curcpu == CPU_FIRST()
#endif
)
hardfreq = hz / tc_min_ticktock_freq;
+ else
+ hardfreq = hz;
if (hardfreq > 1)
event += tick_sbt * (hardfreq - 1);
}
diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c
index 91882ddb5fba..d0fb19661fa4 100644
--- a/sys/kern/kern_timeout.c
+++ b/sys/kern/kern_timeout.c
@@ -434,8 +434,7 @@ callout_process(sbintime_t now)
struct callout_cpu *cc;
struct callout_list *sc;
struct thread *td;
- sbintime_t first, last, max, tmp_max;
- uint32_t lookahead;
+ sbintime_t first, last, lookahead, max, tmp_max;
u_int firstb, lastb, nowb;
#ifdef CALLOUT_PROFILING
int depth_dir = 0, mpcalls_dir = 0, lockcalls_dir = 0;
@@ -455,7 +454,7 @@ callout_process(sbintime_t now)
else if (nowb - firstb == 1)
lookahead = (SBT_1S / 8);
else
- lookahead = (SBT_1S / 2);
+ lookahead = SBT_1S;
first = last = now;
first += (lookahead / 2);
last += lookahead;