From 1efddfa6bfdcaf57198866db67e49b40442d278f Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 7 Sep 2022 16:16:39 +0200 Subject: [PATCH] MINOR: sched: store the current profile entry in the thread context The profile entry that corresponds to the current task/tasklet being profiled is now stored into the thread's context. This will allow it to be accessed from the tasks themselves. This is needed for an upcoming fix. --- include/haproxy/tinfo-t.h | 1 + src/task.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/include/haproxy/tinfo-t.h b/include/haproxy/tinfo-t.h index 155543902..10fe7e988 100644 --- a/include/haproxy/tinfo-t.h +++ b/include/haproxy/tinfo-t.h @@ -131,6 +131,7 @@ struct thread_ctx { uint32_t sched_wake_date; /* current task/tasklet's wake date or 0 */ uint32_t sched_call_date; /* current task/tasklet's call date (valid if sched_wake_date > 0) */ + struct sched_activity *sched_profile_entry; /* profile entry in use by the current task/tasklet, only if sched_wake_date>0 */ uint64_t prev_cpu_time; /* previous per thread CPU time */ uint64_t prev_mono_time; /* previous system wide monotonic time */ diff --git a/src/task.c b/src/task.c index 5cebbbb0f..3d7868077 100644 --- a/src/task.c +++ b/src/task.c @@ -575,6 +575,7 @@ unsigned int run_tasks_from_lists(unsigned int budgets[]) ((struct tasklet *)t)->wake_date = 0; th_ctx->sched_call_date = now_ns; profile_entry = sched_activity_entry(sched_activity, t->process); + th_ctx->sched_profile_entry = profile_entry; HA_ATOMIC_ADD(&profile_entry->lat_time, lat); HA_ATOMIC_INC(&profile_entry->calls); } @@ -614,6 +615,7 @@ unsigned int run_tasks_from_lists(unsigned int budgets[]) t->wake_date = 0; th_ctx->sched_call_date = now_ns; profile_entry = sched_activity_entry(sched_activity, t->process); + th_ctx->sched_profile_entry = profile_entry; HA_ATOMIC_ADD(&profile_entry->lat_time, lat); HA_ATOMIC_INC(&profile_entry->calls); }