git: 179f5b2bfedc - main - sched: fix kern.sched.{4bsd,ule}.slice
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 18 Sep 2026 14:14:52 UTC
The branch main has been updated by mchoo:
URL: https://cgit.FreeBSD.org/src/commit/?id=179f5b2bfedccc762352f06057f4e389bfabb2ea
commit 179f5b2bfedccc762352f06057f4e389bfabb2ea
Author: Minsoo Choo <mchoo@FreeBSD.org>
AuthorDate: 2026-08-24 02:25:35 +0000
Commit: Minsoo Choo <mchoo@FreeBSD.org>
CommitDate: 2026-09-18 14:14:13 +0000
sched: fix kern.sched.{4bsd,ule}.slice
Fix three problems with kern.sched.{4bsd,ule}.slice:
* Guarantee minimum slice is 1.
* Recalculate hogticks on sysctl write.
* For ULE, recalculate sched_slice_min on sysctl write.
Reviewed by: olce
Approved by: olce (mentor)
MFC after: 2 weeks
Sponsored by: FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D59401
---
sys/kern/sched_4bsd.c | 21 ++++++++++++++++++++-
sys/kern/sched_ule.c | 22 +++++++++++++++++++++-
2 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c
index 7965357e072e..4db2364785f6 100644
--- a/sys/kern/sched_4bsd.c
+++ b/sys/kern/sched_4bsd.c
@@ -211,6 +211,23 @@ sysctl_kern_4bsd_quantum(SYSCTL_HANDLER_ARGS)
return (0);
}
+static int
+sysctl_kern_slice(SYSCTL_HANDLER_ARGS)
+{
+ int error, new_val;
+
+ new_val = sched_slice;
+ error = sysctl_handle_int(oidp, &new_val, 0, req);
+ if (error != 0 || req->newptr == NULL)
+ return (error);
+ if (new_val <= 0)
+ return (EINVAL);
+ sched_slice = new_val;
+ hogticks = imax(1, (2 * hz * sched_slice + realstathz / 2) /
+ realstathz);
+ return (0);
+}
+
SYSCTL_NODE(_kern_sched, OID_AUTO, 4bsd, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
"4BSD Scheduler");
@@ -218,7 +235,9 @@ SYSCTL_PROC(_kern_sched_4bsd, OID_AUTO, quantum,
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, 0,
sysctl_kern_4bsd_quantum, "I",
"Quantum for timeshare threads in microseconds");
-SYSCTL_INT(_kern_sched_4bsd, OID_AUTO, slice, CTLFLAG_RW, &sched_slice, 0,
+SYSCTL_PROC(_kern_sched_4bsd, OID_AUTO, slice,
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, 0,
+ sysctl_kern_slice, "I",
"Quantum for timeshare threads in stathz ticks");
#ifdef SMP
/* Enable forwarding of wakeups to all other cpus */
diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c
index 6f6b78488253..8217c536d440 100644
--- a/sys/kern/sched_ule.c
+++ b/sys/kern/sched_ule.c
@@ -3484,6 +3484,24 @@ sysctl_kern_quantum(SYSCTL_HANDLER_ARGS)
return (0);
}
+static int
+sysctl_kern_slice(SYSCTL_HANDLER_ARGS)
+{
+ int error, new_val;
+
+ new_val = sched_slice;
+ error = sysctl_handle_int(oidp, &new_val, 0, req);
+ if (error != 0 || req->newptr == NULL)
+ return (error);
+ if (new_val <= 0)
+ return (EINVAL);
+ sched_slice = new_val;
+ sched_slice_min = imax(1, sched_slice / SCHED_SLICE_MIN_DIVISOR);
+ hogticks = imax(1, (2 * hz * sched_slice + realstathz / 2) /
+ realstathz);
+ return (0);
+}
+
SYSCTL_NODE(_kern_sched, OID_AUTO, ule, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
"ULE Scheduler");
@@ -3491,7 +3509,9 @@ SYSCTL_PROC(_kern_sched_ule, OID_AUTO, quantum,
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, 0,
sysctl_kern_quantum, "I",
"Quantum for timeshare threads in microseconds");
-SYSCTL_INT(_kern_sched_ule, OID_AUTO, slice, CTLFLAG_RW, &sched_slice, 0,
+SYSCTL_PROC(_kern_sched_ule, OID_AUTO, slice,
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, 0,
+ sysctl_kern_slice, "I",
"Quantum for timeshare threads in stathz ticks");
SYSCTL_UINT(_kern_sched_ule, OID_AUTO, interact, CTLFLAG_RWTUN, &sched_interact, 0,
"Interactivity score threshold");