eBPF
文章平均质量分 84
geshifei
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
eBPF/Sched Ext 编程注意事项
访问数组元素,要显示限制索引值。如果不限制索引值,运行时报错:Global function XXX doesn't return scalar. Only those are supported. “doesn't return scalar.”是 verifier 在控制流分析失败时最常见的“兜底错误”,并不一定是函数返回值不对。下面代码在 cst->buckets[idx]前,判断idx >= NBUCKETS就return。原创 2025-12-29 14:30:27 · 1053 阅读 · 0 评论 -
sched_ext的update_idle函数(linux 6.15.7)
先看注释,见 kernel/sched/ext.c当cpu进入或退出idle状态时(对应的是,cpu开始执行init_task、停止执行init_task),调度器框架代码会执行struct sched_ext_ops -> update_idle。原创 2025-11-19 15:27:17 · 921 阅读 · 0 评论 -
sched_ext调度器task stall分析
cpu 32因高负载导致local DSQ非空,一致无法执行dispatch函数,无法运行kworker/32:2线程线程。其他部分cpu空闲,虽然可执行dispatch函数,但因为kworker/32:2线程的cpu mask不允许运行在“非32核”上,也不能运行kworker/32:2线程。整个系统无任何cpu可运行kworker/32:2,导致kworker/32:2 task stall异常。原创 2025-09-25 21:22:09 · 848 阅读 · 0 评论 -
eBPF Skeleton
本文介绍了eBPF程序的基本结构和加载方式。eBPF程序分为内核空间的hook函数和用户空间的加载程序,前者有严格限制,后者可自由编写。加载方式包括底层的bpf()系统调用、基于libbpf库的加载以及更高级的Skeleton方式。Skeleton是libbpf生成的代码,封装了eBPF程序的ELF文件信息,简化了加载流程,支持CO-RE技术。文章详细说明了Skeleton的生成方法、使用示例以及如何通过Skeleton修改eBPF变量和map。最后解释了Skeleton的数据结构,展示了其如何通过&quo原创 2025-10-05 22:27:03 · 1039 阅读 · 0 评论 -
eBPF per-CPU map用法示例
本文介绍了eBPF中per-CPU类型map的使用方法。首先定义了一个包含CPU空闲时间统计信息的per-CPU数组map,每个CPU副本中只有一个元素。在用户态程序中,通过bpf_map_update_elem()一次性初始化所有CPU的map值。使用bpftool工具可以查看map内容,确认各CPU的idle_ns值被正确设置。在eBPF程序中,通过bpf_map_lookup_elem()获取当前CPU的map值,注意key要设为0表示访问该CPU副本中的唯一元素。最后展示了eBPF程序读取并打印各C原创 2025-10-24 17:10:23 · 322 阅读 · 0 评论 -
eBPF的helper函数
helper函数,是内核提供给 eBPF 程序调用的辅助函数。eBPF 程序本身是个小型沙盒程序,不能直接访问内核的所有资源。这些helper函数是内核预先实现的,可以让eBPF程序完成复杂功能,而不用自己写复杂的代码。原创 2025-08-13 10:17:06 · 156 阅读 · 0 评论 -
运行sched_ext调度器
系统信息Linux内核从6.12版本开始正式支持sched_ext调度程序,所以需升级内核至6.15.7或其他高版本。原创 2025-08-15 15:31:30 · 1130 阅读 · 0 评论 -
eBPF简明使用教程
编译生成bpf可执行程序bpf_program.o和加载器bpfload。从upstream或者欧拉社区,下载对应版本的内核源码,并mv到根目录。修改helloword中的loader.c源码,增加如下。原创 2025-08-06 20:26:36 · 106 阅读 · 0 评论
分享