From dc2e5a6347901b4a277c0bed3112a4ffb4199860 Mon Sep 17 00:00:00 2001 From: ferreo Date: Thu, 10 Oct 2024 18:22:46 +0200 Subject: [PATCH] Update patches/0003-bore-cachy-ext.patch --- patches/0003-bore-cachy-ext.patch | 53 ++++++++++++++++--------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/patches/0003-bore-cachy-ext.patch b/patches/0003-bore-cachy-ext.patch index 17eedcf..c1f3c3d 100644 --- a/patches/0003-bore-cachy-ext.patch +++ b/patches/0003-bore-cachy-ext.patch @@ -1,6 +1,6 @@ -From 02401e1df25c88de792f9f7261ac827e488e607b Mon Sep 17 00:00:00 2001 +From e91f8d993bc2b1a1424cb2f5a931fe8f31eb97b9 Mon Sep 17 00:00:00 2001 From: Eric Naim -Date: Fri, 4 Oct 2024 14:55:16 +0800 +Date: Tue, 8 Oct 2024 23:02:55 +0800 Subject: [PATCH] bore-cachy-ext Signed-off-by: Eric Naim @@ -11,18 +11,18 @@ Signed-off-by: Eric Naim kernel/Kconfig.hz | 17 ++ kernel/fork.c | 5 + kernel/sched/Makefile | 1 + - kernel/sched/bore.c | 380 +++++++++++++++++++++++++++++++++++++ + kernel/sched/bore.c | 381 +++++++++++++++++++++++++++++++++++++ kernel/sched/core.c | 7 + kernel/sched/debug.c | 60 +++++- kernel/sched/fair.c | 102 ++++++++-- kernel/sched/features.h | 4 + kernel/sched/sched.h | 7 + - 12 files changed, 639 insertions(+), 18 deletions(-) + 12 files changed, 640 insertions(+), 18 deletions(-) create mode 100644 include/linux/sched/bore.h create mode 100644 kernel/sched/bore.c diff --git a/include/linux/sched.h b/include/linux/sched.h -index 5b4f78fe379d..bb4567e29671 100644 +index c5a7901b2580..bab2d659b667 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -537,6 +537,14 @@ struct sched_statistics { @@ -163,7 +163,7 @@ index 0f78364efd4f..83a6b919ab29 100644 config SCHED_HRTICK def_bool HIGH_RES_TIMERS diff --git a/kernel/fork.c b/kernel/fork.c -index 69a0a7210060..68737ef70d5c 100644 +index eb290420d926..8f060c73877b 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -116,6 +116,8 @@ @@ -175,7 +175,7 @@ index 69a0a7210060..68737ef70d5c 100644 #include #define CREATE_TRACE_POINTS -@@ -2354,6 +2356,9 @@ __latent_entropy struct task_struct *copy_process( +@@ -2351,6 +2353,9 @@ __latent_entropy struct task_struct *copy_process( retval = sched_fork(clone_flags, p); if (retval) goto bad_fork_cleanup_policy; @@ -196,10 +196,10 @@ index 976092b7bd45..293aad675444 100644 +obj-y += bore.o diff --git a/kernel/sched/bore.c b/kernel/sched/bore.c new file mode 100644 -index 000000000000..62a0191a32d7 +index 000000000000..cd7e8a8d6075 --- /dev/null +++ b/kernel/sched/bore.c -@@ -0,0 +1,380 @@ +@@ -0,0 +1,381 @@ +/* + * Burst-Oriented Response Enhancer (BORE) CPU Scheduler + * Copyright (C) 2021-2024 Masahito Suzuki @@ -320,6 +320,9 @@ index 000000000000..62a0191a32d7 + } +} + ++static inline bool task_is_bore_eligible(struct task_struct *p) ++{return p->sched_class == &fair_sched_class;} ++ +static void reset_task_weights_bore(void) { + struct task_struct *task; + struct rq *rq; @@ -327,6 +330,7 @@ index 000000000000..62a0191a32d7 + + write_lock_irq(&tasklist_lock); + for_each_process(task) { ++ if (!task_is_bore_eligible(task)) continue; + rq = task_rq(task); + rq_lock_irqsave(rq, &rf); + reweight_task_by_prio(task, effective_prio(task)); @@ -353,9 +357,6 @@ index 000000000000..62a0191a32d7 + return cnt; +} + -+static inline bool task_is_bore_eligible(struct task_struct *p) -+{return p->sched_class == &fair_sched_class;} -+ +static inline bool burst_cache_expired(struct sched_burst_cache *bc, u64 now) +{return (s64)(bc->timestamp + sched_burst_cache_lifetime - now) < 0;} + @@ -581,7 +582,7 @@ index 000000000000..62a0191a32d7 +#endif // CONFIG_SYSCTL +#endif // CONFIG_SCHED_BORE diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index c792a6feb7a9..447ab2bb147e 100644 +index 8ae04bd4a5a4..4aa992f99c36 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -97,6 +97,8 @@ @@ -593,12 +594,12 @@ index c792a6feb7a9..447ab2bb147e 100644 EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_send_cpu); EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_send_cpumask); -@@ -8283,6 +8285,11 @@ void __init sched_init(void) +@@ -8290,6 +8292,11 @@ void __init sched_init(void) BUG_ON(!sched_class_above(&ext_sched_class, &idle_sched_class)); #endif +#ifdef CONFIG_SCHED_BORE -+ printk(KERN_INFO "BORE (Burst-Oriented Response Enhancer) CPU Scheduler modification 5.6.0 by Masahito Suzuki"); ++ printk(KERN_INFO "BORE (Burst-Oriented Response Enhancer) CPU Scheduler modification 5.6.1 by Masahito Suzuki"); + init_task_bore(&init_task); +#endif // CONFIG_SCHED_BORE + @@ -713,7 +714,7 @@ index c057ef46c5f8..3cab39e34824 100644 P(se.avg.runnable_sum); P(se.avg.util_sum); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 2928026d76a3..90c96ecded2d 100644 +index a36e37a674e8..603d72b9e6e8 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -55,6 +55,8 @@ @@ -856,7 +857,7 @@ index 2928026d76a3..90c96ecded2d 100644 curr->vruntime += calc_delta_fair(delta_exec, curr); update_deadline(cfs_rq, curr); update_min_vruntime(cfs_rq); -@@ -3795,7 +3822,7 @@ static void reweight_eevdf(struct sched_entity *se, u64 avruntime, +@@ -3804,7 +3831,7 @@ static void reweight_eevdf(struct sched_entity *se, u64 avruntime, se->deadline = avruntime + vslice; } @@ -865,7 +866,7 @@ index 2928026d76a3..90c96ecded2d 100644 unsigned long weight) { bool curr = cfs_rq->curr == se; -@@ -5203,6 +5230,9 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) +@@ -5212,6 +5239,9 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) * * EEVDF: placement strategy #1 / #2 */ @@ -875,7 +876,7 @@ index 2928026d76a3..90c96ecded2d 100644 if (sched_feat(PLACE_LAG) && cfs_rq->nr_running) { struct sched_entity *curr = cfs_rq->curr; unsigned long load; -@@ -5273,6 +5303,16 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) +@@ -5282,6 +5312,16 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) se->vruntime = vruntime - lag; @@ -892,7 +893,7 @@ index 2928026d76a3..90c96ecded2d 100644 /* * When joining the competition; the existing tasks will be, * on average, halfway through their slice, as such start tasks -@@ -5382,6 +5422,7 @@ static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq); +@@ -5391,6 +5431,7 @@ static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq); static void dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) { @@ -900,7 +901,7 @@ index 2928026d76a3..90c96ecded2d 100644 int action = UPDATE_TG; if (entity_is_task(se) && task_on_rq_migrating(task_of(se))) -@@ -5409,6 +5450,11 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) +@@ -5418,6 +5459,11 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) clear_buddies(cfs_rq, se); update_entity_lag(cfs_rq, se); @@ -912,7 +913,7 @@ index 2928026d76a3..90c96ecded2d 100644 if (se != cfs_rq->curr) __dequeue_entity(cfs_rq, se); se->on_rq = 0; -@@ -6860,6 +6906,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags) +@@ -6869,6 +6915,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags) bool was_sched_idle = sched_idle_rq(rq); util_est_dequeue(&rq->cfs, p); @@ -927,7 +928,7 @@ index 2928026d76a3..90c96ecded2d 100644 for_each_sched_entity(se) { cfs_rq = cfs_rq_of(se); -@@ -8646,16 +8700,25 @@ static void yield_task_fair(struct rq *rq) +@@ -8651,16 +8705,25 @@ static void yield_task_fair(struct rq *rq) /* * Are we the only task in the tree? */ @@ -953,7 +954,7 @@ index 2928026d76a3..90c96ecded2d 100644 /* * Tell update_rq_clock() that we've just updated, * so we don't do microscopic update in schedule() -@@ -12720,6 +12783,9 @@ static void task_fork_fair(struct task_struct *p) +@@ -12725,6 +12788,9 @@ static void task_fork_fair(struct task_struct *p) curr = cfs_rq->curr; if (curr) update_curr(cfs_rq); @@ -963,7 +964,7 @@ index 2928026d76a3..90c96ecded2d 100644 place_entity(cfs_rq, se, ENQUEUE_INITIAL); rq_unlock(rq, &rf); } -@@ -12832,6 +12898,10 @@ static void attach_task_cfs_rq(struct task_struct *p) +@@ -12837,6 +12903,10 @@ static void attach_task_cfs_rq(struct task_struct *p) static void switched_from_fair(struct rq *rq, struct task_struct *p) { @@ -1016,4 +1017,4 @@ index 48d893de632b..62e7e9e5fd9c 100644 #ifdef CONFIG_SCHED_DEBUG extern int sysctl_resched_latency_warn_ms; -- -2.46.2 +2.47.0