// SPDX-License-Identifier: GPL-3.0-or-later
#include "../../libnetdata/libnetdata.h"
#include <linux/perf_event.h>
#define PLUGIN_PERF_NAME "perf.plugin"
// Hardware counters
#define NETDATA_CHART_PRIO_PERF_CPU_CYCLES 8800
#define NETDATA_CHART_PRIO_PERF_INSTRUCTIONS 8801
#define NETDATA_CHART_PRIO_PERF_BRANCH_INSTRUSTIONS 8802
#define NETDATA_CHART_PRIO_PERF_CACHE 8803
#define NETDATA_CHART_PRIO_PERF_BUS_CYCLES 8804
#define NETDATA_CHART_PRIO_PERF_FRONT_BACK_CYCLES 8805
// Software counters
#define NETDATA_CHART_PRIO_PERF_MIGRATIONS 8810
#define NETDATA_CHART_PRIO_PERF_ALIGNMENT 8811
#define NETDATA_CHART_PRIO_PERF_EMULATION 8812
// Hardware cache counters
#define NETDATA_CHART_PRIO_PERF_L1D 8820
#define NETDATA_CHART_PRIO_PERF_L1D_PREFETCH 8821
#define NETDATA_CHART_PRIO_PERF_L1I 8822
#define NETDATA_CHART_PRIO_PERF_LL 8823
#define NETDATA_CHART_PRIO_PERF_DTLB 8824
#define NETDATA_CHART_PRIO_PERF_ITLB 8825
#define NETDATA_CHART_PRIO_PERF_PBU 8826
// callback required by fatal()
void netdata_cleanup_and_exit(int ret) {
exit(ret);
}
void send_statistics( const char *action, const char *action_result, const char *action_data) {
(void) action;
(void) action_result;
(void) action_data;
return;
}
// callbacks required by popen()
void signals_block(void) {};
void signals_unblock(void) {};
void signals_reset(void) {};
// callback required by eval()
int health_variable_lookup(const char *variable, uint32_t hash, struct rrdcalc *rc, calculated_number *result) {
(void)variable;
(void)hash;
(void)rc;
(void)result;
return 0;
};
// required by get_system_cpus()
char *netdata_configured_host_prefix = "";
// Variables
#define RRD_TYPE_PERF "perf"
#define RRD_FAMILY_HW "hardware"
#define RRD_FAMILY_SW "software"
#define RRD_FAMILY_CACHE "cache"
#define NO_FD -1
#define ALL_PIDS -1
#define RUNNING_THRESHOLD 100
static int debug = 0;
static int update_every = 1;
static int freq = 0;
typedef enum