aboutsummaryrefslogtreecommitdiffstats
path: root/resources/templates/telemetry/bpf_runtime.yaml
diff options
context:
space:
mode:
authorpmikus <pmikus@cisco.com>2021-04-19 12:22:20 +0000
committerPeter Mikus <pmikus@cisco.com>2021-05-28 05:51:32 +0000
commitd255d2545ee6cdc871bc35314fad72c3c48b225b (patch)
treef4a0a6462ec9cc856829caa0641e87bcaf37cc4c /resources/templates/telemetry/bpf_runtime.yaml
parent82863d5b8422b1b817d86bd6b1829a06a49feb02 (diff)
Framework: Telemetry retake
Signed-off-by: pmikus <pmikus@cisco.com> Change-Id: I2f019a083916aec9f7816266f6ad5b92dcc31fa0
Diffstat (limited to 'resources/templates/telemetry/bpf_runtime.yaml')
-rw-r--r--resources/templates/telemetry/bpf_runtime.yaml130
1 files changed, 130 insertions, 0 deletions
diff --git a/resources/templates/telemetry/bpf_runtime.yaml b/resources/templates/telemetry/bpf_runtime.yaml
new file mode 100644
index 0000000000..88ad7eb64f
--- /dev/null
+++ b/resources/templates/telemetry/bpf_runtime.yaml
@@ -0,0 +1,130 @@
+---
+logging:
+ version: 1
+ formatters:
+ console:
+ format: '%(asctime)s - %(name)s - %(message)s'
+ prom:
+ format: '%(message)s'
+ handlers:
+ console:
+ class: logging.StreamHandler
+ level: INFO
+ formatter: console
+ stream: ext://sys.stdout
+ prom:
+ class: logging.handlers.RotatingFileHandler
+ level: INFO
+ formatter: prom
+ filename: /tmp/metric.prom
+ mode: w
+ loggers:
+ prom:
+ handlers: [prom]
+ level: INFO
+ propagate: False
+ root:
+ level: INFO
+ handlers: [console]
+scheduler:
+ duration: 1
+programs:
+ - name: bundle_bpf
+ metrics:
+ counter:
+ - name: cpu_cycle
+ documentation: Cycles processed by CPUs
+ namespace: bpf
+ labelnames:
+ - name
+ - cpu
+ - pid
+ - name: cpu_instruction
+ documentation: Instructions retired by CPUs
+ namespace: bpf
+ labelnames:
+ - name
+ - cpu
+ - pid
+ - name: llc_reference
+ documentation: Last level cache operations by type
+ namespace: bpf
+ labelnames:
+ - name
+ - cpu
+ - pid
+ - name: llc_miss
+ documentation: Last level cache operations by type
+ namespace: bpf
+ labelnames:
+ - name
+ - cpu
+ - pid
+ events:
+ - type: 0x0 # HARDWARE
+ name: 0x0 # PERF_COUNT_HW_CPU_CYCLES
+ target: on_cpu_cycle
+ table: cpu_cycle
+ - type: 0x0 # HARDWARE
+ name: 0x1 # PERF_COUNT_HW_INSTRUCTIONS
+ target: on_cpu_instruction
+ table: cpu_instruction
+ - type: 0x0 # HARDWARE
+ name: 0x2 # PERF_COUNT_HW_CACHE_REFERENCES
+ target: on_cache_reference
+ table: llc_reference
+ - type: 0x0 # HARDWARE
+ name: 0x3 # PERF_COUNT_HW_CACHE_MISSES
+ target: on_cache_miss
+ table: llc_miss
+ code: |
+ #include <linux/ptrace.h>
+ #include <uapi/linux/bpf_perf_event.h>
+
+ const int max_cpus = 256;
+
+ struct key_t {
+ int cpu;
+ int pid;
+ char name[TASK_COMM_LEN];
+ };
+
+ BPF_HASH(llc_miss, struct key_t);
+ BPF_HASH(llc_reference, struct key_t);
+ BPF_HASH(cpu_instruction, struct key_t);
+ BPF_HASH(cpu_cycle, struct key_t);
+
+ static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+ key->cpu = bpf_get_smp_processor_id();
+ key->pid = bpf_get_current_pid_tgid();
+ bpf_get_current_comm(&(key->name), sizeof(key->name));
+ }
+
+ int on_cpu_cycle(struct bpf_perf_event_data *ctx) {
+ struct key_t key = {};
+ get_key(&key);
+
+ cpu_cycle.increment(key, ctx->sample_period);
+ return 0;
+ }
+ int on_cpu_instruction(struct bpf_perf_event_data *ctx) {
+ struct key_t key = {};
+ get_key(&key);
+
+ cpu_instruction.increment(key, ctx->sample_period);
+ return 0;
+ }
+ int on_cache_reference(struct bpf_perf_event_data *ctx) {
+ struct key_t key = {};
+ get_key(&key);
+
+ llc_reference.increment(key, ctx->sample_period);
+ return 0;
+ }
+ int on_cache_miss(struct bpf_perf_event_data *ctx) {
+ struct key_t key = {};
+ get_key(&key);
+
+ llc_miss.increment(key, ctx->sample_period);
+ return 0;
+ }