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.
This commit is contained in:
Willy Tarreau 2021-09-30 08:52:11 +02:00
parent beeabf5314
commit 6136989a22
4 changed files with 21 additions and 18 deletions

View File

@ -110,6 +110,9 @@ void task_kill(struct task *t);
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[]);
/*

View File

@ -581,22 +581,6 @@ static inline void measure_idle()
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.
*/

View File

@ -3446,7 +3446,7 @@ static void stats_dump_html_info(struct stream_interface *si, struct uri_auth *u
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 @@ int stats_fill_info(struct field *info, int len, uint flags)
#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);

View File

@ -859,6 +859,22 @@ void process_runnable_tasks()
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
*/