44#if !defined INCLUDED_VT_METRICS_PERF_DATA_H
45#define INCLUDED_VT_METRICS_PERF_DATA_H
53#include <linux/perf_event.h>
55#include <sys/syscall.h>
59#include <unordered_map>
166 std::unordered_map<std::string, PerfEventDescriptor>
getEventMap()
const;
186 std::string
name()
override;
191 template <
typename SerializerT>
260 static long perfEventOpen(
struct perf_event_attr *hw_event, pid_t pid,
int cpu,
int group_fd,
unsigned long flags);
Definition example_events.h:52
std::unordered_map< std::string, PerfEventDescriptor > PerfEventDescriptorMap
Definition perf_event_groups.h:56
metrics::PerfData * thePerfData()
Definition perf_data.h:199
std::unordered_map< uint64_t, std::string > event_ids_
Definition perf_data.h:202
PerfEventGroupInfo info_
Definition perf_data.h:200
int leader_fd_
Definition perf_data.h:201
Definition perf_data.h:78
double getScalingRatio() const
Definition perf_data.h:84
std::unordered_map< std::string, uint64_t > measurements_
Definition perf_data.h:82
uint64_t time_enabled_
Definition perf_data.h:80
double getRunningFraction() const
Definition perf_data.h:93
uint64_t time_running_
Definition perf_data.h:81
PerfEventGroupInfo group_
Definition perf_data.h:79
Tracks performance metrics per task.
Definition perf_data.h:76
void startup() override
Component startup method.
Definition perf_data.cc:329
PerfEventDescriptorMap event_map_
Map of event names to event type and configuration.
Definition perf_data.h:208
std::string name() override
Get the component name.
Definition perf_data.cc:334
std::vector< std::string > event_names_
List of event names being tracked.
Definition perf_data.h:213
static long perfEventOpen(struct perf_event_attr *hw_event, pid_t pid, int cpu, int group_fd, unsigned long flags)
Open a performance counter event.
Definition perf_data.cc:346
std::vector< PerfEventGroupInfo > event_groups_
Resolved event groups after explicit and automatic grouping.
Definition perf_data.h:218
std::unordered_map< std::string, uint64_t > getTaskMeasurements()
Get the measurements collected during the task execution.
Definition perf_data.cc:300
std::vector< TaskGroupMeasurements > readTaskGroupMeasurements() const
Common implementation for grouped perf reads.
Definition perf_data.cc:232
void serialize(SerializerT &s)
Serialize the PerfData object.
Definition perf_data.h:192
void maybePrintEventGroups() const
Print resolved perf event groups when requested by the environment.
Definition perf_data.cc:121
virtual ~PerfData()
Destructor for PerfData.
Definition perf_data.cc:207
void cleanupBeforeAbort()
Cleanup resources before aborting.
Definition perf_data.cc:336
void startTaskMeasurement()
Start performance measurement for a task.
Definition perf_data.cc:215
std::vector< GroupState > group_states_
Runtime state for each opened event group.
Definition perf_data.h:223
std::unordered_map< std::string, PerfEventDescriptor > getEventMap() const
Retrieve the current event map.
Definition perf_data.cc:321
PerfData()
Constructor for PerfData.
Definition perf_data.cc:142
std::vector< TaskGroupMeasurements > getTaskGroupMeasurements()
Get grouped task measurements and raw perf multiplexing metadata.
Definition perf_data.cc:317
void stopTaskMeasurement()
Stop performance measurement for a task.
Definition perf_data.cc:224
std::vector< PerfEventGroupInfo > getEventGroups() const
Retrieve resolved event grouping metadata.
Definition perf_data.cc:325
std::vector< int > open_fds_
Flat list of open file descriptors to simplify cleanup.
Definition perf_data.h:228
Definition perf_event_groups.h:59
Component class for a generic VT runtime module, CRTP'ed over the component's actual type
Definition component.h:95