Linux 如何将/kernel/sched/*包含到BPF程序中?

Linux 如何将/kernel/sched/*包含到BPF程序中?,linux,linux-kernel,bpf,ebpf,kprobe,Linux,Linux Kernel,Bpf,Ebpf,Kprobe,根据《bpf性能工具》一书,我正在尝试在Linux中使用bpftrace制作一个自定义bpf程序。我试图包含linux/kernel/sched/sched.h路径中的一些文件。我怎样才能包括它们?(不仅是/include文件夹,还来自linux中的linux/kernel/*文件夹?) 我试图合并#include/kernel/sched/sched.h以使用“struct rq” 我的程序示例如下: #!/usr/local/bin/bpftrace #include <kernel

根据《bpf性能工具》一书,我正在尝试在Linux中使用bpftrace制作一个自定义bpf程序。我试图包含linux/kernel/sched/sched.h路径中的一些文件。我怎样才能包括它们?(不仅是/include文件夹,还来自linux中的linux/kernel/*文件夹?)

我试图合并#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");
}
#/usr/local/bin/bpftrace
#包括
kprobe:负载平衡
{
$rq=(结构rq*)arg1;
printf(“--------------\n”);
printf(“\n”);
printf(“负载平衡:%s pid:%d\n”,comm,pid);
printf(“--------------\n”);
}

该标题未公开,因此如果要使用它或其任何字段,您必须在自己的程序中复制
rq
结构定义


例如,这种定义副本已经出现在bpftrace的示例中。

谢谢!但是有没有一种方法可以使用路径“/kernel/sched/sched.h”来在我的BPF程序中使用sched.h中的“struct rq”?基本上,我想动态(kprobe)使用函数(load_balance)并使用该函数的所有参数(arg0、arg1、arg2…)。这个函数的原型是:静态int-load\u-balance(int-this\u-cpu,struct*this\u-rq,struct-sched\u-domain*sd,emum-cpu\u-idle\u-type-idle,int*continue\u-balance)啊,对不起。我在那里读得有点太快了。我已经更新了我的答案。