bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] rename var for slice refill event and add helper
@ 2025-04-17  8:07 Honglei Wang
  2025-04-17  8:07 ` [PATCH 1/2] sched_ext: change the variable name for slice refill event Honglei Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Honglei Wang @ 2025-04-17  8:07 UTC (permalink / raw)
  To: tj, void, arighi, changwoo
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, vschneid, joshdon, brho, linux-kernel,
	bpf, jameshongleiwang

SCX_EV_ENQ_SLICE_DFL gives the impression that the event only occurs
when the tasks were enqueued, which seems not accurate. So rename the
variable to SCX_EV_REFILL_SLICE_DFL.

The slice refilling with default slice always come with event
statistics together, add a helper routine to make it cleaner.

Honglei Wang (2):
  sched_ext: change the variable name for slice refill event
  sched_ext: add helper for refill task with default slice

 kernel/sched/ext.c             | 36 +++++++++++++++++-----------------
 tools/sched_ext/scx_qmap.bpf.c |  4 ++--
 2 files changed, 20 insertions(+), 20 deletions(-)

-- 
2.45.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] sched_ext: change the variable name for slice refill event
  2025-04-17  8:07 [PATCH 0/2] rename var for slice refill event and add helper Honglei Wang
@ 2025-04-17  8:07 ` Honglei Wang
  2025-04-17 18:30   ` Andrea Righi
  2025-04-17  8:07 ` [PATCH 2/2] sched_ext: add helper for refill task with default slice Honglei Wang
  2025-04-17 17:32 ` [PATCH 0/2] rename var for slice refill event and add helper Tejun Heo
  2 siblings, 1 reply; 6+ messages in thread
From: Honglei Wang @ 2025-04-17  8:07 UTC (permalink / raw)
  To: tj, void, arighi, changwoo
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, vschneid, joshdon, brho, linux-kernel,
	bpf, jameshongleiwang

SCX_EV_ENQ_SLICE_DFL gives the impression that the event only occurs
when the tasks were enqueued, which seems not accurate. What it actually
means is the refilling with defalt slice, and this can occur either when
enqueue or pick_task. Let's change the variable to
SCX_EV_REFILL_SLICE_DFL.

Signed-off-by: Honglei Wang <jameshongleiwang@126.com>
---
 kernel/sched/ext.c             | 22 +++++++++++-----------
 tools/sched_ext/scx_qmap.bpf.c |  4 ++--
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index 66bcd40a28ca..594087ac4c9e 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -1517,10 +1517,10 @@ struct scx_event_stats {
 	s64		SCX_EV_ENQ_SKIP_MIGRATION_DISABLED;
 
 	/*
-	 * The total number of tasks enqueued (or pick_task-ed) with a
-	 * default time slice (SCX_SLICE_DFL).
+	 * The total number of tasks slice refill with default time slice
+	 * (SCX_SLICE_DFL).
 	 */
-	s64		SCX_EV_ENQ_SLICE_DFL;
+	s64		SCX_EV_REFILL_SLICE_DFL;
 
 	/*
 	 * The total duration of bypass modes in nanoseconds.
@@ -2197,7 +2197,7 @@ static void do_enqueue_task(struct rq *rq, struct task_struct *p, u64 enq_flags,
 	 */
 	touch_core_sched(rq, p);
 	p->scx.slice = SCX_SLICE_DFL;
-	__scx_add_event(SCX_EV_ENQ_SLICE_DFL, 1);
+	__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
 local_norefill:
 	dispatch_enqueue(&rq->scx.local_dsq, p, enq_flags);
 	return;
@@ -2205,7 +2205,7 @@ static void do_enqueue_task(struct rq *rq, struct task_struct *p, u64 enq_flags,
 global:
 	touch_core_sched(rq, p);	/* see the comment in local: */
 	p->scx.slice = SCX_SLICE_DFL;
-	__scx_add_event(SCX_EV_ENQ_SLICE_DFL, 1);
+	__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
 	dispatch_enqueue(find_global_dsq(p), p, enq_flags);
 }
 
@@ -3296,7 +3296,7 @@ static struct task_struct *pick_task_scx(struct rq *rq)
 		p = prev;
 		if (!p->scx.slice) {
 			p->scx.slice = SCX_SLICE_DFL;
-			__scx_add_event(SCX_EV_ENQ_SLICE_DFL, 1);
+			__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
 		}
 	} else {
 		p = first_local_task(rq);
@@ -3313,7 +3313,7 @@ static struct task_struct *pick_task_scx(struct rq *rq)
 				scx_warned_zero_slice = true;
 			}
 			p->scx.slice = SCX_SLICE_DFL;
-			__scx_add_event(SCX_EV_ENQ_SLICE_DFL, 1);
+			__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
 		}
 	}
 
@@ -3399,7 +3399,7 @@ static int select_task_rq_scx(struct task_struct *p, int prev_cpu, int wake_flag
 		if (cpu >= 0) {
 			p->scx.slice = SCX_SLICE_DFL;
 			p->scx.ddsp_dsq_id = SCX_DSQ_LOCAL;
-			__scx_add_event(SCX_EV_ENQ_SLICE_DFL, 1);
+			__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
 		} else {
 			cpu = prev_cpu;
 		}
@@ -4413,7 +4413,7 @@ static ssize_t scx_attr_events_show(struct kobject *kobj,
 	at += scx_attr_event_show(buf, at, &events, SCX_EV_DISPATCH_KEEP_LAST);
 	at += scx_attr_event_show(buf, at, &events, SCX_EV_ENQ_SKIP_EXITING);
 	at += scx_attr_event_show(buf, at, &events, SCX_EV_ENQ_SKIP_MIGRATION_DISABLED);
-	at += scx_attr_event_show(buf, at, &events, SCX_EV_ENQ_SLICE_DFL);
+	at += scx_attr_event_show(buf, at, &events, SCX_EV_REFILL_SLICE_DFL);
 	at += scx_attr_event_show(buf, at, &events, SCX_EV_BYPASS_DURATION);
 	at += scx_attr_event_show(buf, at, &events, SCX_EV_BYPASS_DISPATCH);
 	at += scx_attr_event_show(buf, at, &events, SCX_EV_BYPASS_ACTIVATE);
@@ -5148,7 +5148,7 @@ static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len)
 	scx_dump_event(s, &events, SCX_EV_DISPATCH_KEEP_LAST);
 	scx_dump_event(s, &events, SCX_EV_ENQ_SKIP_EXITING);
 	scx_dump_event(s, &events, SCX_EV_ENQ_SKIP_MIGRATION_DISABLED);
-	scx_dump_event(s, &events, SCX_EV_ENQ_SLICE_DFL);
+	scx_dump_event(s, &events, SCX_EV_REFILL_SLICE_DFL);
 	scx_dump_event(s, &events, SCX_EV_BYPASS_DURATION);
 	scx_dump_event(s, &events, SCX_EV_BYPASS_DISPATCH);
 	scx_dump_event(s, &events, SCX_EV_BYPASS_ACTIVATE);
@@ -7313,7 +7313,7 @@ __bpf_kfunc void scx_bpf_events(struct scx_event_stats *events,
 		scx_agg_event(&e_sys, e_cpu, SCX_EV_DISPATCH_KEEP_LAST);
 		scx_agg_event(&e_sys, e_cpu, SCX_EV_ENQ_SKIP_EXITING);
 		scx_agg_event(&e_sys, e_cpu, SCX_EV_ENQ_SKIP_MIGRATION_DISABLED);
-		scx_agg_event(&e_sys, e_cpu, SCX_EV_ENQ_SLICE_DFL);
+		scx_agg_event(&e_sys, e_cpu, SCX_EV_REFILL_SLICE_DFL);
 		scx_agg_event(&e_sys, e_cpu, SCX_EV_BYPASS_DURATION);
 		scx_agg_event(&e_sys, e_cpu, SCX_EV_BYPASS_DISPATCH);
 		scx_agg_event(&e_sys, e_cpu, SCX_EV_BYPASS_ACTIVATE);
diff --git a/tools/sched_ext/scx_qmap.bpf.c b/tools/sched_ext/scx_qmap.bpf.c
index 26c40ca4f36c..c3cd9a17d48e 100644
--- a/tools/sched_ext/scx_qmap.bpf.c
+++ b/tools/sched_ext/scx_qmap.bpf.c
@@ -784,8 +784,8 @@ static int monitor_timerfn(void *map, int *key, struct bpf_timer *timer)
 		   scx_read_event(&events, SCX_EV_DISPATCH_KEEP_LAST));
 	bpf_printk("%35s: %lld", "SCX_EV_ENQ_SKIP_EXITING",
 		   scx_read_event(&events, SCX_EV_ENQ_SKIP_EXITING));
-	bpf_printk("%35s: %lld", "SCX_EV_ENQ_SLICE_DFL",
-		   scx_read_event(&events, SCX_EV_ENQ_SLICE_DFL));
+	bpf_printk("%35s: %lld", "SCX_EV_REFILL_SLICE_DFL",
+		   scx_read_event(&events, SCX_EV_REFILL_SLICE_DFL));
 	bpf_printk("%35s: %lld", "SCX_EV_BYPASS_DURATION",
 		   scx_read_event(&events, SCX_EV_BYPASS_DURATION));
 	bpf_printk("%35s: %lld", "SCX_EV_BYPASS_DISPATCH",
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] sched_ext: add helper for refill task with default slice
  2025-04-17  8:07 [PATCH 0/2] rename var for slice refill event and add helper Honglei Wang
  2025-04-17  8:07 ` [PATCH 1/2] sched_ext: change the variable name for slice refill event Honglei Wang
@ 2025-04-17  8:07 ` Honglei Wang
  2025-04-17 17:32 ` [PATCH 0/2] rename var for slice refill event and add helper Tejun Heo
  2 siblings, 0 replies; 6+ messages in thread
From: Honglei Wang @ 2025-04-17  8:07 UTC (permalink / raw)
  To: tj, void, arighi, changwoo
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, vschneid, joshdon, brho, linux-kernel,
	bpf, jameshongleiwang

Add helper for refilling task with default slice and event
statistics accordingly.

Signed-off-by: Honglei Wang <jameshongleiwang@126.com>
---
 kernel/sched/ext.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index 594087ac4c9e..df7319bd9079 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -1815,6 +1815,12 @@ static void dsq_mod_nr(struct scx_dispatch_q *dsq, s32 delta)
 	WRITE_ONCE(dsq->nr, dsq->nr + delta);
 }
 
+static void refill_task_slice_dfl(struct task_struct *p)
+{
+	p->scx.slice = SCX_SLICE_DFL;
+	__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
+}
+
 static void dispatch_enqueue(struct scx_dispatch_q *dsq, struct task_struct *p,
 			     u64 enq_flags)
 {
@@ -2196,16 +2202,14 @@ static void do_enqueue_task(struct rq *rq, struct task_struct *p, u64 enq_flags,
 	 * higher priority it becomes from scx_prio_less()'s POV.
 	 */
 	touch_core_sched(rq, p);
-	p->scx.slice = SCX_SLICE_DFL;
-	__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
+	refill_task_slice_dfl(p);
 local_norefill:
 	dispatch_enqueue(&rq->scx.local_dsq, p, enq_flags);
 	return;
 
 global:
 	touch_core_sched(rq, p);	/* see the comment in local: */
-	p->scx.slice = SCX_SLICE_DFL;
-	__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
+	refill_task_slice_dfl(p);
 	dispatch_enqueue(find_global_dsq(p), p, enq_flags);
 }
 
@@ -3294,10 +3298,8 @@ static struct task_struct *pick_task_scx(struct rq *rq)
 	 */
 	if (keep_prev) {
 		p = prev;
-		if (!p->scx.slice) {
-			p->scx.slice = SCX_SLICE_DFL;
-			__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
-		}
+		if (!p->scx.slice)
+			refill_task_slice_dfl(p);
 	} else {
 		p = first_local_task(rq);
 		if (!p) {
@@ -3312,8 +3314,7 @@ static struct task_struct *pick_task_scx(struct rq *rq)
 						p->comm, p->pid, __func__);
 				scx_warned_zero_slice = true;
 			}
-			p->scx.slice = SCX_SLICE_DFL;
-			__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
+			refill_task_slice_dfl(p);
 		}
 	}
 
@@ -3397,9 +3398,8 @@ static int select_task_rq_scx(struct task_struct *p, int prev_cpu, int wake_flag
 
 		cpu = scx_select_cpu_dfl(p, prev_cpu, wake_flags, 0);
 		if (cpu >= 0) {
-			p->scx.slice = SCX_SLICE_DFL;
+			refill_task_slice_dfl(p);
 			p->scx.ddsp_dsq_id = SCX_DSQ_LOCAL;
-			__scx_add_event(SCX_EV_REFILL_SLICE_DFL, 1);
 		} else {
 			cpu = prev_cpu;
 		}
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] rename var for slice refill event and add helper
  2025-04-17  8:07 [PATCH 0/2] rename var for slice refill event and add helper Honglei Wang
  2025-04-17  8:07 ` [PATCH 1/2] sched_ext: change the variable name for slice refill event Honglei Wang
  2025-04-17  8:07 ` [PATCH 2/2] sched_ext: add helper for refill task with default slice Honglei Wang
@ 2025-04-17 17:32 ` Tejun Heo
  2 siblings, 0 replies; 6+ messages in thread
From: Tejun Heo @ 2025-04-17 17:32 UTC (permalink / raw)
  To: Honglei Wang
  Cc: void, arighi, changwoo, mingo, peterz, juri.lelli,
	vincent.guittot, dietmar.eggemann, rostedt, bsegall, mgorman,
	vschneid, joshdon, brho, linux-kernel, bpf

On Thu, Apr 17, 2025 at 04:07:06PM +0800, Honglei Wang wrote:
> SCX_EV_ENQ_SLICE_DFL gives the impression that the event only occurs
> when the tasks were enqueued, which seems not accurate. So rename the
> variable to SCX_EV_REFILL_SLICE_DFL.
> 
> The slice refilling with default slice always come with event
> statistics together, add a helper routine to make it cleaner.
> 
> Honglei Wang (2):
>   sched_ext: change the variable name for slice refill event
>   sched_ext: add helper for refill task with default slice

They look fine to me. Changwoo?

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] sched_ext: change the variable name for slice refill event
  2025-04-17  8:07 ` [PATCH 1/2] sched_ext: change the variable name for slice refill event Honglei Wang
@ 2025-04-17 18:30   ` Andrea Righi
  2025-04-18  2:05     ` Honglei Wang
  0 siblings, 1 reply; 6+ messages in thread
From: Andrea Righi @ 2025-04-17 18:30 UTC (permalink / raw)
  To: Honglei Wang
  Cc: tj, void, changwoo, mingo, peterz, juri.lelli, vincent.guittot,
	dietmar.eggemann, rostedt, bsegall, mgorman, vschneid, joshdon,
	brho, linux-kernel, bpf

Hi Honglei,

On Thu, Apr 17, 2025 at 04:07:07PM +0800, Honglei Wang wrote:
> SCX_EV_ENQ_SLICE_DFL gives the impression that the event only occurs
> when the tasks were enqueued, which seems not accurate. What it actually
> means is the refilling with defalt slice, and this can occur either when
> enqueue or pick_task. Let's change the variable to
> SCX_EV_REFILL_SLICE_DFL.
> 
> Signed-off-by: Honglei Wang <jameshongleiwang@126.com>
> ---
>  kernel/sched/ext.c             | 22 +++++++++++-----------
>  tools/sched_ext/scx_qmap.bpf.c |  4 ++--
>  2 files changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
> index 66bcd40a28ca..594087ac4c9e 100644
> --- a/kernel/sched/ext.c
> +++ b/kernel/sched/ext.c
> @@ -1517,10 +1517,10 @@ struct scx_event_stats {
>  	s64		SCX_EV_ENQ_SKIP_MIGRATION_DISABLED;
>  
>  	/*
> -	 * The total number of tasks enqueued (or pick_task-ed) with a
> -	 * default time slice (SCX_SLICE_DFL).
> +	 * The total number of tasks slice refill with default time slice
> +	 * (SCX_SLICE_DFL).

Nit, how about:

Total number of times a task's time slice was refilled with the default
value (SCX_SLICE_DFL).

Thanks,
-Andrea

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] sched_ext: change the variable name for slice refill event
  2025-04-17 18:30   ` Andrea Righi
@ 2025-04-18  2:05     ` Honglei Wang
  0 siblings, 0 replies; 6+ messages in thread
From: Honglei Wang @ 2025-04-18  2:05 UTC (permalink / raw)
  To: Andrea Righi
  Cc: tj, void, changwoo, mingo, peterz, juri.lelli, vincent.guittot,
	dietmar.eggemann, rostedt, bsegall, mgorman, vschneid, joshdon,
	brho, linux-kernel, bpf

Hi Andrea,

On 2025/4/18 02:30, Andrea Righi wrote:
> Hi Honglei,
> 
> On Thu, Apr 17, 2025 at 04:07:07PM +0800, Honglei Wang wrote:
>> SCX_EV_ENQ_SLICE_DFL gives the impression that the event only occurs
>> when the tasks were enqueued, which seems not accurate. What it actually
>> means is the refilling with defalt slice, and this can occur either when
>> enqueue or pick_task. Let's change the variable to
>> SCX_EV_REFILL_SLICE_DFL.
>>
>> Signed-off-by: Honglei Wang <jameshongleiwang@126.com>
>> ---
>>  kernel/sched/ext.c             | 22 +++++++++++-----------
>>  tools/sched_ext/scx_qmap.bpf.c |  4 ++--
>>  2 files changed, 13 insertions(+), 13 deletions(-)
>>
>> diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
>> index 66bcd40a28ca..594087ac4c9e 100644
>> --- a/kernel/sched/ext.c
>> +++ b/kernel/sched/ext.c
>> @@ -1517,10 +1517,10 @@ struct scx_event_stats {
>>  	s64		SCX_EV_ENQ_SKIP_MIGRATION_DISABLED;
>>  
>>  	/*
>> -	 * The total number of tasks enqueued (or pick_task-ed) with a
>> -	 * default time slice (SCX_SLICE_DFL).
>> +	 * The total number of tasks slice refill with default time slice
>> +	 * (SCX_SLICE_DFL).
> 
> Nit, how about:
> 
> Total number of times a task's time slice was refilled with the default
> value (SCX_SLICE_DFL).
> 

OK, will send a update later.

Thanks,
Honglei

> Thanks,
> -Andrea


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-04-18  2:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-17  8:07 [PATCH 0/2] rename var for slice refill event and add helper Honglei Wang
2025-04-17  8:07 ` [PATCH 1/2] sched_ext: change the variable name for slice refill event Honglei Wang
2025-04-17 18:30   ` Andrea Righi
2025-04-18  2:05     ` Honglei Wang
2025-04-17  8:07 ` [PATCH 2/2] sched_ext: add helper for refill task with default slice Honglei Wang
2025-04-17 17:32 ` [PATCH 0/2] rename var for slice refill event and add helper Tejun Heo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).