Skip to contentSkip to conversation

sched: Remove sched_switch completely from runqueue structure.

PATCH In review Rakib Mullick 2 participants 3 messages Jan 24, 2012 – Jan 28, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sched: Remove sched_switch completely from runqueue structure.

Currently we don't utilize sched_switch field properly for counting context switch numbers. We can remove it. But, simply removing sched_switch field from sched_stat output will break ABI integrity. So, we make sure /proc/sched_stat output remains as it is by hardcoding zero in place of sched_switch field's output and remove sched_switch from sched_debug output too. And update scheduler-stat documentation accordingly.

---

Documentation/scheduler/sched-stats.txt +2 -1
index 1cd5d51..8259b34 100644
@@ -38,7 +38,8 @@ First field is a sched_yield() statistic:
      1) # of times sched_yield() was called
 
 Next three are schedule() statistics:
-     2) # of times we switched to the expired queue and reused it
+     2) This field is a legacy array expiration count field used in the O(1)
+	scheduler. We kept it for ABI compatibility, but it is always set to zero.
      3) # of times schedule() was called
      4) # of times schedule() left the processor idle
 
kernel/sched/debug.c +0 -1
index 2a075e1..09acaa1 100644
@@ -288,7 +288,6 @@ static void print_cpu(struct seq_file *m, int cpu)
 
 	P(yld_count);
 
-	P(sched_switch);
 	P(sched_count);
 	P(sched_goidle);
 #ifdef CONFIG_SMP
kernel/sched/sched.h +0 -1
index 98c0c26..8a2c768 100644
@@ -462,7 +462,6 @@ struct rq {
 	unsigned int yld_count;
 
 	/* schedule() stats */
-	unsigned int sched_switch;
 	unsigned int sched_count;
 	unsigned int sched_goidle;
 
kernel/sched/stats.c +2 -2
index 2a581ba..903ffa9e 100644
@@ -32,9 +32,9 @@ static int show_schedstat(struct seq_file *seq, void *v)
 
 		/* runqueue-specific stats */
 		seq_printf(seq,
-		    "cpu%d %u %u %u %u %u %u %llu %llu %lu",
+		    "cpu%d %u 0 %u %u %u %u %llu %llu %lu",
 		    cpu, rq->yld_count,
-		    rq->sched_switch, rq->sched_count, rq->sched_goidle,
+		    rq->sched_count, rq->sched_goidle,
 		    rq->ttwu_count, rq->ttwu_local,
 		    rq->rq_cpu_time,
 		    rq->rq_sched_info.run_delay, rq->rq_sched_info.pcount);
#1 lore raw
Quoted 10 lines · Rakib Mullick

Currently we don't utilize sched_switch field properly for counting context switch numbers. We can remove it.
But, simply removing sched_switch field from sched_stat output will break ABI integrity. So, we make sure
/proc/sched_stat output remains as it is by hardcoding zero in place of sched_switch field's output and remove
sched_switch from sched_debug output too. And update scheduler-stat documentation accordingly.

Thanks

#2 lore raw

[tip:sched/core] sched: Remove sched_switch

In reply to Rakib Mullick
Commit-ID:  30fd049afcfed50e022704036e8629d6bdfe84e6
Gitweb:     http://git.kernel.org/tip/30fd049afcfed50e022704036e8629d6bdfe84e6
Author:     Rakib Mullick <[email protected]>
AuthorDate: Tue, 24 Jan 2012 22:33:56 +0600
Committer:  Ingo Molnar <[email protected]>
CommitDate: Fri, 27 Jan 2012 13:28:53 +0100

sched: Remove sched_switch

Currently we don't utilize the sched_switch field anymore.

But, simply removing sched_switch field from the middle of the sched_stat output will break tools.

So, to stay compatible we hardcode it to zero and remove the field from the scheduler data structures.

Update the schedstat documentation accordingly.

---
 Documentation/scheduler/sched-stats.txt |    3 ++-
 kernel/sched/debug.c                    |    1 -
 kernel/sched/sched.h                    |    1 -
 kernel/sched/stats.c                    |    4 ++--
 4 files changed, 4 insertions(+), 5 deletions(-)
Documentation/scheduler/sched-stats.txt +2 -1
index 1cd5d51..8259b34 100644
@@ -38,7 +38,8 @@ First field is a sched_yield() statistic:
      1) # of times sched_yield() was called
 
 Next three are schedule() statistics:
-     2) # of times we switched to the expired queue and reused it
+     2) This field is a legacy array expiration count field used in the O(1)
+	scheduler. We kept it for ABI compatibility, but it is always set to zero.
      3) # of times schedule() was called
      4) # of times schedule() left the processor idle
 
kernel/sched/debug.c +0 -1
index 2a075e1..09acaa1 100644
@@ -288,7 +288,6 @@ static void print_cpu(struct seq_file *m, int cpu)
 
 	P(yld_count);
 
-	P(sched_switch);
 	P(sched_count);
 	P(sched_goidle);
 #ifdef CONFIG_SMP
kernel/sched/sched.h +0 -1
index 98c0c26..8a2c768 100644
@@ -462,7 +462,6 @@ struct rq {
 	unsigned int yld_count;
 
 	/* schedule() stats */
-	unsigned int sched_switch;
 	unsigned int sched_count;
 	unsigned int sched_goidle;
 
kernel/sched/stats.c +2 -2
index 2a581ba..903ffa9e 100644
@@ -32,9 +32,9 @@ static int show_schedstat(struct seq_file *seq, void *v)
 
 		/* runqueue-specific stats */
 		seq_printf(seq,
-		    "cpu%d %u %u %u %u %u %u %llu %llu %lu",
+		    "cpu%d %u 0 %u %u %u %u %llu %llu %lu",
 		    cpu, rq->yld_count,
-		    rq->sched_switch, rq->sched_count, rq->sched_goidle,
+		    rq->sched_count, rq->sched_goidle,
 		    rq->ttwu_count, rq->ttwu_local,
 		    rq->rq_cpu_time,
 		    rq->rq_sched_info.run_delay, rq->rq_sched_info.pcount);