首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏linux驱动个人学习

    linux tracepoint增加

    每个tracepoint提供一个钩子来调用probe函数。一个tracepoint可以打开或关闭。打开时,probe函数关联到tracepoint;关闭时,probe函数不关联到tracepoint。 当一个tracepoint打开时,用户提供的probe函数在每次这个tracepoint执行都会被调用。 直接使用tracepoint并不是那么的容易,因此内核提供了event trace功能。 :mm_compaction_isolate_migratepages [Tracepoint event] Tracepoint数据格式 每个tracepoint都会按照自己定义的格式来输出信息 如何使用Tracepoint tracepoint复用了ftrace的ringbuffer,当使能了一个tracepoint之后,可以通过cat /sys/kernel/debug/tracing/trace 如果用户准备为kernel加入新的tracepoint,每个tracepoint则以下列格式声明: #include <linux/tracepoint.h> DECLARE_TRACE(tracepoint_name

    1.6K11编辑于 2024-04-04
  • 来自专栏嵌入式与Linux那些事

    ftrace(二)新增tracepoint

    使用 TRACE_EVENT 定义 tracepoint 我们仿照events/timer/timer_start,添加一个timer_stat的跟踪点,获取start_pid和slack参数。

    1.3K31编辑于 2023-03-24
  • 来自专栏程栩的性能优化笔记

    结合例子学习eBPF与bcc:kretprobe与Tracepoint

    引 在前面的文章中,我们学习了如何通过追踪kprobe,今天我们来学习更多的追踪机制: kretprobe:类似于kprobe,但是是追踪其返回值或输出值; Tracepoint:静态的追踪点,在内核中已编译好 urandomread 这一小节我们要学习的是Tracepoint的使用,Tracepoint和kprobe类似,也可以追踪内核的一些信息,但是Tracepoint是预制好的hook,已经提前在内核中编译好了 先看代码: urandonread 可以看到我们直接在C中用TRACEPOINT_PROBE宏来进行了声明,这个宏指向的目标是内核断点 random:urandom_read,这个断点已经在内核中静态编译好了 我们可以通过perf list命令来查看Tracepoint的列表: Tracepoint 这里宏的参数做了自动填充,我们可以用args->xxx来访问结构体变量。 disksnoopTracepoint 现在我们尝试用block:block_rq_issue和block:block_rq_complete这两个Tracepoint来改写disksnoop。

    1K20编辑于 2023-11-01
  • 来自专栏笔记+

    tracepoint类型的ebpf程序是如何被执行的

    +", TRACEPOINT, 0, SEC_NONE, attach_tp), SEC_DEF("tp+", TRACEPOINT, 注册以及使能并将ebpf程序handler函数挂载到指定的event tracepoint上 perf_event_open_tracepoint通过/sys/kernel/debug/tracing/ probe, data, TRACEPOINT_DEFAULT_PRIO); } /*tp_func初始化后通过tracepoint_add_func加入到tracepoint的funcs的尾部。 tracepoint __tracepoint_kfree_skb.funcs尾巴上,另外tracepoint_add_func 调用static_key_slow_inc将__tracepoint_kfree_skb.key 加1使能该event tracepoint/ struct tracepoint { const char *name; /* Tracepoint name

    2.2K10编辑于 2024-01-04
  • 好技能 | 在云原生平台上使用eBPF程序

    task_rename;而到使用 raw tracepoint 方式的时候,输入参数又变成了 struct bpf_raw_tracepoint_args。 prog(struct bpf_raw_tracepoint_args *ctx){return 0;}这个问题的答案,其实还是要从内核中 kprobe、tracepoint 等内核追踪技术里得到。 对于每一个 tracepoint,它都是内核中的一个特别的函数。比如上面例子中的函数 trace_task_rename(), 函数的实现是通过 tracepoint 的一个固定模板(宏)定义的。 通过 bpf tracepoint 的 commit,我们看到,在 tracepoint 被调用的时候,TP_STRUCT__entry 里的变量会被赋值,tracepoint eBPF program 这是 eBPF 引入的 raw tracepoint program ,其目的就是访问 tracepoint 定义里的 TP_PROTO 参数。

    47110编辑于 2024-11-27
  • 来自专栏原创分享

    Linux 内核静态追踪技术的实现

    了解了两个宏之后,来看一下如何使用 Tracepoint。 int tracepoint_probe_register(struct tracepoint *tp, void *probe, void *data){ return tracepoint_probe_register_prio (tp, probe, data, TRACEPOINT_DEFAULT_PRIO);} int tracepoint_probe_register_prio(struct tracepoint *tp 中定义了一个 tracepoint_func 结构体用于表示钩子信息,然后调用 tracepoint_add_func,其中 tp 就刚才自定义的 tracepoint 结构体。 static int tracepoint_add_func(struct tracepoint *tp, struct tracepoint_func *func, int prio){ struct

    2.1K20发布于 2021-11-19
  • 来自专栏绿盟科技研究通讯

    【云原生技术研究】 从bpftrace看如何利用eBPF实现内核追踪

    root@u18-181:/tmp# bpftrace -l 'tracepoint:*' tracepoint:syscalls:sys_enter_socket tracepoint:syscalls :sys_enter_socketpair tracepoint:syscalls:sys_enter_bind tracepoint:syscalls:sys_enter_listen tracepoint 执行的程序中,tracepoint:syscalls:sys_enter_openat表示这是一个tracepoint探针,当进入openat()系统调用时执行该探针。 args是一个指针,指向该tracepoint的参数。这个结构时由bpftrace根据tracepoint信息自动生成的。 tracepoint:syscalls:sys_exit_statfs, tracepoint:syscalls:sys_exit_statx, tracepoint:syscalls:sys_exit_newstat

    3.2K30发布于 2020-09-01
  • 来自专栏云微的一点分享

    eBPF 入门开发实践指南四:在 eBPF 中捕获进程打开文件的系统调用集合,使用全局变量过滤进程 pid

    /syscalls/sys_enter_openat") int tracepoint__syscalls__sys_enter_openat(struct trace_event_raw_sys_enter __syscalls__sys_enter_openat 并使用 SEC 宏把它们附加到 sys_enter_openat 的 tracepoint(即在进入 openat 系统调用时执行)。 在 tracepoint__syscalls__sys_enter_open 和 tracepoint__syscalls__sys_enter_openat 函数中,我们可以使用这个全局变量来过滤输出 在 eBPF 程序中,我们可以通过定义 tracepoint__syscalls__sys_enter_open 和 tracepoint__syscalls__sys_enter_openat 函数并使用 SEC 宏把它们附加到 sys_enter_open 和 sys_enter_openat 两个 tracepoint 来捕获进程打开文件的系统调用。

    2.5K10编辑于 2023-02-24
  • 来自专栏linux驱动个人学习

    Linux性能工具-bpftrace入门

    tracepoint为静态跟踪、用户级探针。 3.2.1 单行语句 如系统函数raw_syscalls:sys_enter的调用统计,语法为:bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm 其他单行函数示例如下: # Files opened by process bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s \n", comm, str(args->filename)); }' # Syscall count by program bpftrace -e 'tracepoint:raw_syscalls: /args->ret/ { @[comm] = sum(args->ret); }' # Read size distribution by process: bpftrace -e 'tracepoint

    3.8K21编辑于 2022-11-23
  • 来自专栏深度技术专栏

    用BPF实现用户态tracing

    tracepoint只有一个参数,该参数是一个递增的整数变量。 如果要定义有两个或更多参数的tracepoint,要用DTRACE_PROBE2、DTRACE_PROBE3,以此类推。 如果tracepoint不带参数,则用DTRACE_PROBE来定义。 ,并打印出该tracepoint的第一个参数的值。 的组名,也可以省略不写; test_idx是tracepoint的名称。 tracepoint上下文中读取tracepoint的第一个参数的值; bpf_trace_printk("test_idx=%d tracepoint cachted\\n", idx);打印输出结果

    3.5K21发布于 2020-07-14
  • 来自专栏后端开发技术

    从小白到精通:揭秘perf工具的全部功能与操作技巧

    [Tracepoint event] block:block_getrq [Tracepoint event] block:block_plug [Tracepoint event] ext4:ext4_allocate_blocks [Tracepoint event] ext4:ext4_ [Tracepoint event] ext4:ext4_ext_map_blocks_enter [Tracepoint event] ext4:ext4_ [Tracepoint event] ext4:ext4_ind_map_blocks_enter [Tracepoint event] ext4:ext4_ [Tracepoint event] ext4:ext4_remove_blocks [Tracepoint event](2)perf trace

    2.5K11编辑于 2024-11-03
  • 来自专栏云计算与大数据

    bpf| 系统分析工具

    ] = count(); }' count syscalls by process name bpftrace -e 'tracepoint:syscalls:sys_enter_open { ("%s %s\n",comm,str(args->filename));}' bpftrace -l 'tracepoint:syscalls:sys_enter_open*' tracepoint: syscalls:sys_enter_open_by_handle_at tracepoint:syscalls:sys_enter_open_tree tracepoint:syscalls:sys_enter_open tracepoint:syscalls:sys_enter_openat tracepoint:syscalls:sys_enter_openat2 root@heidsoft-dev:~# bpftrace -e 'tracepoint:syscalls:sys_enter_open* { @[probe] = count(); }' Attaching 5 probes...

    1.6K10编辑于 2022-04-18
  • 鸿蒙next版开发:使用HiTraceChain打点(ArkTS)

    void OH_HiTrace_Tracepoint(HiTrace_Communication_Mode mode, HiTrace_Tracepoint_Type type, const HiTraceId 示例代码以下是一个使用HiTraceChain在ArkTS中打点的示例:import { OH_HiTrace_BeginChain, OH_HiTrace_EndChain, OH_HiTrace_Tracepoint MyPerformanceTracking', 0); // 执行一些需要跟踪的性能操作 this.performTask(); // 打印跟踪点信息 OH_HiTrace_Tracepoint 在操作完成后,我们使用OH_HiTrace_Tracepoint打印跟踪点信息,并结束跟踪链。

    31000编辑于 2024-11-13
  • 来自专栏mazhen.tech

    从源码构建 perf

    sched:sched_switch 这个 tracepoint。 [Tracepoint event] sched:sched_swap_numa [Tracepoint event] sched:sched_switch [Tracepoint event] ... 因此我们安装的预编译二进制包不能进行 tracepoint 追踪。我们需要自己从源码构建 perf。 从源码构建 perf 源码下载 首先下载 perf 的源代码。 libtraceevent: [ on ] # HAVE_LIBTRACEEVENT 这次 libtraceevent 打开了,支持 tracepoint 的追踪。

    2.4K21编辑于 2023-11-24
  • 来自专栏人人都是极客

    万字长文解读 Linux 内核追踪机制

    tracepoint。 再说回 raw tracepoint 类型的 eBPF 程序,从使用上来说,它的函数参数结构体变成了 struct bpf_raw_tracepoint_args,不在需要我们定义 tracepoint 直接附加在 tracepoint 的意思是,tracepoint 对应的函数执行时,内核将直接调用 bpf 程序执行,为此内核提供了 tracepoint 注册 bpf 程序的注册接口 bpf_raw_tracepoint_open 而参数的原始访问不好描述,但可以对比 raw_tracepointtracepoint 参数传递方式来理解。 更短的调用链和跳过参数处理,相比于 tracepoint ,raw tracepoint 有更好的性能。

    3.6K53编辑于 2023-08-22
  • 来自专栏LINUX阅码场

    使用EBPF追踪LINUX内核

    内核静态跟踪点 tracepoint tracepoint是内核静态跟踪点,它与kprobe类程序的主要区别在于tracepoint由内核开发人员在内核中编写和修改。 4.2 tracepoint 可用跟踪点 系统中所有的跟踪点都定义在/sys/kernel/debug/traceing/events目录中: ? 使用命令perf list 也可以列出可使用的tracepoint点: ? 对于bcc程序来说,以监控kfree_skb为例,tracepoint程序可以这样写: b.attach_tracepoint(tp="skb:kfree_skb", fn_name="trace_kfree_skb ") bcc遵循tracepoint命名约定,首先是指定要跟踪的子系统,这里是“skb:”,然后是子系统中的跟踪点“kfree_skb”: ?

    2K51发布于 2021-07-09
  • 来自专栏云微的一点分享

    eBPF 入门开发实践教程四:在 eBPF 中捕获进程打开文件的系统调用集合,使用全局变量过滤进程 pid

    使用 SEC 宏定义一个 eBPF 程序,关联到 tracepoint "tracepoint/syscalls/sys_enter_openat"。 这个 tracepoint 会在进程发起 sys_openat 系统调用时触发。 实现 eBPF 程序 tracepoint__syscalls__sys_enter_openat,它接收一个类型为 struct trace_event_raw_sys_enter 的参数 ctx。 在 eBPF 程序中,我们可以通过定义 tracepoint__syscalls__sys_enter_open 和 tracepoint__syscalls__sys_enter_openat 函数并使用 SEC 宏把它们附加到 sys_enter_open 和 sys_enter_openat 两个 tracepoint 来捕获进程打开文件的系统调用。

    1.5K10编辑于 2023-08-14
  • 来自专栏云微的一点分享

    三分钟学会编写 eBPF 程序:使用 eBPF 程序监控打开文件路径并使用 Prometheus 可视化

    = uid) { return false; } } return true; } SEC("tracepoint/syscalls/sys_enter_open") int tracepoint args.flags = (int)ctx->args[1]; bpf_map_update_elem(&start, &pid, &args, 0); } return 0; } SEC("tracepoint /syscalls/sys_enter_openat") int tracepoint__syscalls__sys_enter_openat(struct trace_event_raw_sys_enter /syscalls/sys_exit_open") int tracepoint__syscalls__sys_exit_open(struct trace_event_raw_sys_exit* ctx ) { return trace_exit(ctx); } SEC("tracepoint/syscalls/sys_exit_openat") int tracepoint__syscalls__

    1.3K20编辑于 2023-02-24
  • 来自专栏Seebug漏洞平台

    原创Paper | 在 Android 中开发 eBPF 程序学习总结(二)

    ) = 3 close(4) = 0 perf_event_open({type=PERF_TYPE_TRACEPOINT \n"); return fd; } prog_fd[prog_cnt] = fd; efd = attach_tracepoint(abpf->tp_category , abpf->tp_name); if (efd <= 0) { printf("[debug] attach_tracepoint error. 我们重新再来理解一下loader的操作: BPF_OBJ_GET prog_bpftest_tracepoint_raw_syscalls_sys_enter,获取prog对象 读取SEC定义的section 的id,从/sys/kernel/tracing/events/raw_syscalls/sys_enter/id获取 perf_event_open打开相应时间,因为是tracepoint,所以type

    96910编辑于 2023-01-05
  • 来自专栏Serverless+

    使用 BPF 记录 TCP 重传和丢包记录

    List of pre-defined events (to be used in -e): tcp:tcp_destroy_sock [Tracepoint event] tcp:tcp_probe [Tracepoint event] tcp:tcp_rcv_space_adjust [Tracepoint event] tcp:tcp_receive_reset [Tracepoint event] tcp:tcp_retransmit_skb [Tracepoint event] tcp:tcp_retransmit_synack [Tracepoint event] tcp:tcp_send_reset [Tracepoint

    3.8K90发布于 2021-03-07
领券