perf: scheduler: add periodic ll exec performance counter

Simple measument of periodically run ll scheduler task
execution routine.

Signed-off-by: Marcin Maka <marcin.maka@linux.intel.com>
This commit is contained in:
Marcin Maka 2020-01-10 12:10:29 +01:00 committed by Liam Girdwood
parent 05f2a626d1
commit 85525efe59
1 changed files with 10 additions and 0 deletions

View File

@ -15,6 +15,7 @@
#include <sof/lib/clk.h>
#include <sof/lib/cpu.h>
#include <sof/lib/notifier.h>
#include <sof/lib/perf_cnt.h>
#include <sof/list.h>
#include <sof/platform.h>
#include <sof/schedule/ll_schedule.h>
@ -23,14 +24,19 @@
#include <sof/schedule/task.h>
#include <sof/spinlock.h>
#include <ipc/topology.h>
#include <config.h>
#include <errno.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
/* one instance of data allocated per core */
struct ll_schedule_data {
struct list_item tasks; /* list of ll tasks */
atomic_t num_tasks; /* number of ll tasks */
#if CONFIG_PERFORMANCE_COUNTERS
struct perf_cnt_data pcd;
#endif
struct ll_schedule_domain *domain; /* scheduling domain */
};
@ -152,10 +158,14 @@ static void schedule_ll_tasks_run(void *data)
spin_unlock(sch->domain->lock);
perf_cnt_init(&sch->pcd);
/* run tasks if there are any pending */
if (schedule_ll_is_pending(sch))
schedule_ll_tasks_execute(sch, last_tick);
perf_cnt_stamp(TRACE_CLASS_SCHEDULE_LL, &sch->pcd, true);
spin_lock(sch->domain->lock);
/* reschedule only if all clients are done */