summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorOlav Haugan <ohaugan@codeaurora.org>2014-08-07 18:24:21 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:00:19 -0700
commit8eede4a8d50a1d4e7203a4bbaa3209ddf346c985 (patch)
tree89ab46834e4014d61a28f2d75efebc5e435563a4 /include
parent778ce1a13c3f199fc44c53078fc2419075b9a0b8 (diff)
sched: Make RAVG_HIST_SIZE tunable
Make RAVG_HIST_SIZE available from /proc/sys/kernel/sched_ravg_hist_size to allow tuning of the size of the history that is used in computation of task demand. CRs-fixed: 706138 Change-Id: Id54c1e4b6e974a62d787070a0af1b4e8ce3b4be6 Signed-off-by: Olav Haugan <ohaugan@codeaurora.org> [joonwoop@codeaurora.org: fixed minor conflict in sysctl.h] Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/sched.h9
-rw-r--r--include/linux/sched/sysctl.h4
-rw-r--r--include/trace/events/sched.h4
3 files changed, 11 insertions, 6 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 67b849a7df2c..f582c99d624f 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1253,7 +1253,7 @@ struct sched_statistics {
};
#endif
-#define RAVG_HIST_SIZE 5
+#define RAVG_HIST_SIZE_MAX 5
/* ravg represents frequency scaled cpu-demand of tasks */
struct ravg {
@@ -1269,8 +1269,9 @@ struct ravg {
* RAVG_HIST_SIZE windows. Windows where task was entirely sleeping are
* ignored.
*
- * 'demand' represents maximum sum seen over previous RAVG_HIST_SIZE
- * windows. 'demand' could drive frequency demand for tasks.
+ * 'demand' represents maximum sum seen over previous
+ * sysctl_sched_ravg_hist_size windows. 'demand' could drive frequency
+ * demand for tasks.
*
* 'prev_window' is the history in the most recent window. This value
* may be zero if there was no task activity in that window - that is
@@ -1282,7 +1283,7 @@ struct ravg {
*/
u64 mark_start;
u32 sum, demand, prev_window, partial_demand, flags;
- u32 sum_history[RAVG_HIST_SIZE];
+ u32 sum_history[RAVG_HIST_SIZE_MAX];
};
struct sched_entity {
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
index 47dd5253fd94..de111f548637 100644
--- a/include/linux/sched/sysctl.h
+++ b/include/linux/sched/sysctl.h
@@ -43,6 +43,7 @@ extern unsigned int sysctl_sched_wake_to_idle;
extern unsigned int sysctl_sched_wakeup_load_threshold;
extern unsigned int sysctl_sched_window_stats_policy;
extern unsigned int sysctl_sched_account_wait_time;
+extern unsigned int sysctl_sched_ravg_hist_size;
#if defined(CONFIG_SCHED_FREQ_INPUT) || defined(CONFIG_SCHED_HMP)
extern unsigned int sysctl_sched_init_task_load_pct;
@@ -110,6 +111,9 @@ extern int sched_acct_wait_time_update_handler(struct ctl_table *table,
extern int sched_window_stats_policy_update_handler(struct ctl_table *table,
int write, void __user *buffer, size_t *lenp, loff_t *ppos);
+extern int sched_ravg_hist_size_update_handler(struct ctl_table *table,
+ int write, void __user *buffer, size_t *lenp, loff_t *ppos);
+
/*
* control realtime throttling:
*
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index d7d5cc5088f7..dc89c38010ae 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -286,7 +286,7 @@ TRACE_EVENT(sched_update_history,
__field(enum task_event, evt )
__field(unsigned int, partial_demand )
__field(unsigned int, demand )
- __array( u32, hist, RAVG_HIST_SIZE )
+ __array( u32, hist, RAVG_HIST_SIZE_MAX)
__field(unsigned int, nr_big_tasks )
__field(unsigned int, nr_small_tasks )
__field( int, cpu )
@@ -303,7 +303,7 @@ TRACE_EVENT(sched_update_history,
__entry->partial_demand = p->ravg.partial_demand;
__entry->demand = p->ravg.demand;
memcpy(__entry->hist, p->ravg.sum_history,
- RAVG_HIST_SIZE*sizeof(u32));
+ RAVG_HIST_SIZE_MAX * sizeof(u32));
#ifdef CONFIG_SCHED_HMP
__entry->nr_big_tasks = rq->nr_big_tasks;
__entry->nr_small_tasks = rq->nr_small_tasks;