3#ifndef pRC_CORE_PROFILING_PERFEVENT_H
4#define pRC_CORE_PROFILING_PERFEVENT_H
13#include <linux/perf_event.h>
15#include <sys/syscall.h>
31 template<Events Event>
35 static constexpr auto type()
42 return PERF_TYPE_HARDWARE;
46 static constexpr auto config()
50 return PERF_COUNT_HW_CPU_CYCLES;
54 return PERF_COUNT_HW_INSTRUCTIONS;
58 return PERF_COUNT_HW_CACHE_REFERENCES;
62 return PERF_COUNT_HW_CACHE_MISSES;
69 struct perf_event_attr pea;
70 std::memset(&pea, 0,
sizeof(
struct perf_event_attr));
72 pea.size =
sizeof(
struct perf_event_attr);
73 pea.config = config();
75 pea.exclude_kernel = 1;
79 mFD = syscall(__NR_perf_event_open, &pea, 0, -1, -1, 0);
88 , mValue(other.mValue)
112 ioctl(mFD, PERF_EVENT_IOC_RESET, 0);
113 ioctl(mFD, PERF_EVENT_IOC_ENABLE, 0);
122 ioctl(mFD, PERF_EVENT_IOC_DISABLE, 0);
124 if(read(mFD, &
value,
sizeof(std::uint64_t)) !=
125 sizeof(std::uint64_t))
138 ioctl(mFD, PERF_EVENT_IOC_RESET, 0);
150 std::uint64_t mValue = 0;
Definition perfevent.hpp:33
~PerfEvent()
Definition perfevent.hpp:100
PerfEvent()
Definition perfevent.hpp:67
PerfEvent(PerfEvent const &)=delete
auto start()
Definition perfevent.hpp:108
auto reset()
Definition perfevent.hpp:134
PerfEvent & operator=(PerfEvent const &)=delete
auto stop()
Definition perfevent.hpp:118
auto value() const
Definition perfevent.hpp:143
PerfEvent & operator=(PerfEvent &&rhs) &
Definition perfevent.hpp:93
PerfEvent(PerfEvent &&other)
Definition perfevent.hpp:86
Definition perfevent.hpp:22
Events
Definition perfevent.hpp:24
static void warning(Xs &&...args)
Definition log.hpp:21
static void error(Xs &&...args)
Definition log.hpp:14
Integer(Integer< true, 8 >::Fundamental const) -> Integer< true, 8 >