Как включить /kernel/sched/* в программу BPF?

Я пытаюсь создать пользовательскую программу bpf с помощью bpftrace в Linux, согласно книге BPF Performance Tools. Я попытался включить некоторые файлы из пути linux/kernel/sched/sched.h. Как я могу включить их? (не только из папки /include, но и из папки linux/kernel/* в Linux?)

Я пытаюсь включить #include /kernel/sched/sched.h, чтобы использовать «struct rq».

Пример моей программы:

#!/usr/local/bin/bpftrace

#include <kernel/sched/sched.h>

kprobe:load_balance
{
     $rq = (struct rq *)arg1;
     printf("-------------------\n");
     printf("\n");
     printf("load_balance: %s pid: %d\n", comm, pid);
     printf("-------------------\n");
}

person Panagiotis Papoulidis    schedule 12.04.2020    source источник


Ответы (1)


Этот заголовок не отображается, поэтому вам придется скопировать определение структуры rq в свою собственную программу, если вы хотите использовать его или любое из его полей.

Такие копии определений уже присутствуют в примерах bpftrace, например, для struct cfs_rq_partial.

person pchaigno    schedule 12.04.2020
comment
Спасибо! Но есть ли способ использовать путь «/kernel/sched/sched.h», чтобы использовать «struct rq» внутри sched.h в моей программе BPF? - person Panagiotis Papoulidis; 12.04.2020
comment
По сути, я хочу динамически (kprobe) использовать функцию (load_balance) и использовать все аргументы (arg0, arg1, arg2...) этой функции. Прототип этой функции: static int load_balance(int this_cpu, struct *this_rq, struct sched_domain *sd, emum cpu_idle_type idle, int *continue_balancing) - person Panagiotis Papoulidis; 12.04.2020
comment
Ах, извините. Я там слишком быстро прочитал. Я обновил свой ответ. - person pchaigno; 12.04.2020