mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
069057239a
Add the expr literals like "#smt_on" as tool events, this allows stat events to give the values. On my laptop with hyperthreading enabled: ``` $ perf stat -e "has_pmem,num_cores,num_cpus,num_cpus_online,num_dies,num_packages,smt_on,system_tsc_freq" true Performance counter stats for 'true': 0 has_pmem 8 num_cores 16 num_cpus 16 num_cpus_online 1 num_dies 1 num_packages 1 smt_on 2,496,000,000 system_tsc_freq 0.001113637 seconds time elapsed 0.001218000 seconds user 0.000000000 seconds sys ``` And with hyperthreading disabled: ``` $ perf stat -e "has_pmem,num_cores,num_cpus,num_cpus_online,num_dies,num_packages,smt_on,system_tsc_freq" true Performance counter stats for 'true': 0 has_pmem 8 num_cores 16 num_cpus 8 num_cpus_online 1 num_dies 1 num_packages 0 smt_on 2,496,000,000 system_tsc_freq 0.000802115 seconds time elapsed 0.000000000 seconds user 0.000806000 seconds sys ``` As zero matters for these values, in stat-display should_skip_zero_counter only skip the zero value if it is not the first aggregation index. The tool event implementations are used in expr but not evaluated as events for simplicity. Also core_wide isn't made a tool event as it requires command line parameters. Signed-off-by: Ian Rogers <irogers@google.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Link: https://lore.kernel.org/r/20241002032016.333748-8-irogers@google.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
33 lines
707 B
C
33 lines
707 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __PERF_TSC_H
|
|
#define __PERF_TSC_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include "event.h"
|
|
|
|
struct perf_tsc_conversion {
|
|
u16 time_shift;
|
|
u32 time_mult;
|
|
u64 time_zero;
|
|
u64 time_cycles;
|
|
u64 time_mask;
|
|
|
|
bool cap_user_time_zero;
|
|
bool cap_user_time_short;
|
|
};
|
|
|
|
struct perf_event_mmap_page;
|
|
|
|
int perf_read_tsc_conversion(const struct perf_event_mmap_page *pc,
|
|
struct perf_tsc_conversion *tc);
|
|
|
|
u64 perf_time_to_tsc(u64 ns, struct perf_tsc_conversion *tc);
|
|
u64 tsc_to_perf_time(u64 cyc, struct perf_tsc_conversion *tc);
|
|
u64 rdtsc(void);
|
|
u64 arch_get_tsc_freq(void);
|
|
|
|
size_t perf_event__fprintf_time_conv(union perf_event *event, FILE *fp);
|
|
|
|
#endif // __PERF_TSC_H
|