mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 06:33:34 +00:00
perf counters: implement PERF_COUNT_TASK_CLOCK
Impact: add new perf-counter type The 'task clock' counter counts the amount of time a task is executing, in nanoseconds. It stops ticking when a task is scheduled out either due to it blocking, sleeping or it being preempted. This counter type is a Linux kernel based abstraction, it is available even if the hardware does not support native hardware performance counters. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
01b2838c42
commit
bae43c9945
@ -50,8 +50,11 @@ enum hw_event_types {
|
||||
*/
|
||||
PERF_COUNT_CPU_CLOCK = -1,
|
||||
PERF_COUNT_TASK_CLOCK = -2,
|
||||
PERF_COUNT_PAGE_FAULTS = -3,
|
||||
PERF_COUNT_CONTEXT_SWITCHES = -4,
|
||||
/*
|
||||
* Future software events:
|
||||
*/
|
||||
/* PERF_COUNT_PAGE_FAULTS = -3,
|
||||
PERF_COUNT_CONTEXT_SWITCHES = -4, */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -855,6 +855,25 @@ static const struct hw_perf_counter_ops perf_ops_cpu_clock = {
|
||||
.hw_perf_counter_read = cpu_clock_perf_counter_read,
|
||||
};
|
||||
|
||||
static void task_clock_perf_counter_enable(struct perf_counter *counter)
|
||||
{
|
||||
}
|
||||
|
||||
static void task_clock_perf_counter_disable(struct perf_counter *counter)
|
||||
{
|
||||
}
|
||||
|
||||
static void task_clock_perf_counter_read(struct perf_counter *counter)
|
||||
{
|
||||
atomic64_counter_set(counter, current->se.sum_exec_runtime);
|
||||
}
|
||||
|
||||
static const struct hw_perf_counter_ops perf_ops_task_clock = {
|
||||
.hw_perf_counter_enable = task_clock_perf_counter_enable,
|
||||
.hw_perf_counter_disable = task_clock_perf_counter_disable,
|
||||
.hw_perf_counter_read = task_clock_perf_counter_read,
|
||||
};
|
||||
|
||||
static const struct hw_perf_counter_ops *
|
||||
sw_perf_counter_init(struct perf_counter *counter)
|
||||
{
|
||||
@ -864,6 +883,9 @@ sw_perf_counter_init(struct perf_counter *counter)
|
||||
case PERF_COUNT_CPU_CLOCK:
|
||||
hw_ops = &perf_ops_cpu_clock;
|
||||
break;
|
||||
case PERF_COUNT_TASK_CLOCK:
|
||||
hw_ops = &perf_ops_task_clock;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user