MINOR: time: uninline report_idle() and move it to task.c
I don't know why I inlined this one, this makes no sense given that it's
only used for stats, and it starts a circular dependency on tinfo.h which
can be problematic in the future. In addition, all the stuff related to
idle time calculation should be with the rest of the scheduler, which
currently is in task.{c,h}, so let's move it there.
diff --git a/include/haproxy/task.h b/include/haproxy/task.h
index 7b9b4e6..f7aebed 100644
--- a/include/haproxy/task.h
+++ b/include/haproxy/task.h
@@ -110,6 +110,9 @@
void tasklet_kill(struct tasklet *t);
void __task_wakeup(struct task *t);
void __task_queue(struct task *task, struct eb_root *wq);
+
+uint sched_report_idle();
+
unsigned int run_tasks_from_lists(unsigned int budgets[]);
/*
diff --git a/include/haproxy/time.h b/include/haproxy/time.h
index e9baab4..ad3a1db 100644
--- a/include/haproxy/time.h
+++ b/include/haproxy/time.h
@@ -581,22 +581,6 @@
idle_time = samp_time = 0;
}
-/* report the average CPU idle percentage over all running threads, between 0 and 100 */
-static inline uint report_idle()
-{
- uint total = 0;
- uint rthr = 0;
- uint thr;
-
- for (thr = 0; thr < MAX_THREADS; thr++) {
- if (!(all_threads_mask & (1UL << thr)))
- continue;
- total += HA_ATOMIC_LOAD(&ha_thread_info[thr].idle_pct);
- rthr++;
- }
- return rthr ? total / rthr : 0;
-}
-
/* Collect date and time information before calling poll(). This will be used
* to count the run time of the past loop and the sleep time of the next poll.
*/
diff --git a/src/stats.c b/src/stats.c
index 99efac0..8cc3bad 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -3446,7 +3446,7 @@
actconn, pipes_used, pipes_used+pipes_free, read_freq_ctr(&global.conn_per_sec),
bps >= 1000000000UL ? (bps / 1000000000.0) : bps >= 1000000UL ? (bps / 1000000.0) : (bps / 1000.0),
bps >= 1000000000UL ? 'G' : bps >= 1000000UL ? 'M' : 'k',
- total_run_queues(), total_allocated_tasks(), report_idle()
+ total_run_queues(), total_allocated_tasks(), sched_report_idle()
);
/* scope_txt = search query, appctx->ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
@@ -4479,7 +4479,7 @@
#endif
info[INF_TASKS] = mkf_u32(0, total_allocated_tasks());
info[INF_RUN_QUEUE] = mkf_u32(0, total_run_queues());
- info[INF_IDLE_PCT] = mkf_u32(FN_AVG, report_idle());
+ info[INF_IDLE_PCT] = mkf_u32(FN_AVG, sched_report_idle());
info[INF_NODE] = mkf_str(FO_CONFIG|FN_OUTPUT|FS_SERVICE, global.node);
if (global.desc)
info[INF_DESCRIPTION] = mkf_str(FO_CONFIG|FN_OUTPUT|FS_SERVICE, global.desc);
diff --git a/src/task.c b/src/task.c
index 2d063d9..ce544c1 100644
--- a/src/task.c
+++ b/src/task.c
@@ -859,6 +859,22 @@
activity[tid].long_rq++;
}
+/* report the average CPU idle percentage over all running threads, between 0 and 100 */
+uint sched_report_idle()
+{
+ uint total = 0;
+ uint rthr = 0;
+ uint thr;
+
+ for (thr = 0; thr < MAX_THREADS; thr++) {
+ if (!(all_threads_mask & (1UL << thr)))
+ continue;
+ total += HA_ATOMIC_LOAD(&ha_thread_info[thr].idle_pct);
+ rthr++;
+ }
+ return rthr ? total / rthr : 0;
+}
+
/*
* Delete every tasks before running the master polling loop
*/