ebpf_exporter
40 строк · 982.0 Байт
1#include <vmlinux.h>2#include <bpf/bpf_tracing.h>3#include "maps.bpf.h"4
5#define MAX_CPUS 5126
7struct {8__uint(type, BPF_MAP_TYPE_HASH);9__uint(max_entries, MAX_CPUS);10__type(key, u32);11__type(value, u64);12} llc_references_total SEC(".maps");13
14struct {15__uint(type, BPF_MAP_TYPE_HASH);16__uint(max_entries, MAX_CPUS);17__type(key, u32);18__type(value, u64);19} llc_misses_total SEC(".maps");20
21static int trace_event(void *map, u32 cpu, u64 sample_period)22{
23increment_map(map, &cpu, sample_period);24
25return 0;26}
27
28SEC("perf_event/type=0,config=3,frequency=1")29int on_cache_miss(struct bpf_perf_event_data *ctx)30{
31return trace_event(&llc_misses_total, bpf_get_smp_processor_id(), ctx->sample_period);32}
33
34SEC("perf_event/type=0,config=2,frequency=1")35int on_cache_reference(struct bpf_perf_event_data *ctx)36{
37return trace_event(&llc_references_total, bpf_get_smp_processor_id(), ctx->sample_period);38}
39
40char LICENSE[] SEC("license") = "GPL";41