首页
学习
活动
专区
工具
TVP
发布

使用eBPF追踪Linux内核

前言我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。...与其它的跟踪技术相比,使用BPF的主要优点是几乎可以访问Linux内核和应用程序的任何信息,同时,BPF对系统性能影响很小,执行效率很高,而且开发人员不需要因为收集数据而修改程序。...内核静态跟踪 tracepointtracepoint是内核静态跟踪,它与kprobe类程序的主要区别在于tracepoint由内核开发人员在内核中编写和修改。...4.1 tracepoint 程序的优缺点优点跟踪是静态的,ABI更稳定,不随内核版本的变化而致不可用。缺点跟踪内核人员添加的,不会全面涵盖内核的所有子系统。...:图片对于bcc程序来说,以监控kfree_skb为例,tracepoint程序可以这样写:b.attach_tracepoint(tp="skb:kfree_skb", fn_name="trace_kfree_skb

1.3K20

使用EBPF追踪LINUX内核

前言 我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。...内核静态跟踪 tracepoint tracepoint是内核静态跟踪,它与kprobe类程序的主要区别在于tracepoint由内核开发人员在内核中编写和修改。...4.1 tracepoint 程序的优缺点 优点 跟踪是静态的,ABI更稳定,不随内核版本的变化而致不可用。 缺点 跟踪内核人员添加的,不会全面涵盖内核的所有子系统。...对于bcc程序来说,以监控kfree_skb为例,tracepoint程序可以这样写: b.attach_tracepoint(tp="skb:kfree_skb", fn_name="trace_kfree_skb...内核观测技术 BPF》 本文来源于陈莉君老师“Linux内核之旅”。

1.5K51
您找到你想要的搜索结果了吗?
是的
没有找到

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

前言:之前的文章介绍了基于 tracepoint 静态追踪技术的实现,本文再介绍基于 kprobe 的动态追踪即使的实现。同样,动态追踪也是排查问题的利器。...kprobe 是内核提供的动态追踪技术机制,它允许动态安装内核模块的方式安装系统钩子,非常强大。下面先看一个内核中的例子。...#include #include #include #define MAX_SYMBOL_LEN...,等到函数执行完后,弹出返回地址时,就会执行内核 hack 的代码,从而执行我们的钩子,执行完后再跳回到真正的返回地址继续执行。...总结:内核通过劫持的方式实现了 kprobe,基于 kprobe 的动态追踪技术可谓是非常复杂而强大,我们可以利用这个机制,动态修改逻辑,收集信息。

68722

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

所以需要深入一去了解更多的排查问题方式。而这些方向往往都涉及到底层的东西,所以就自然需要去了解内核提供的一些技术,内核提供的能力,经过多年的发展,可谓是百花齐放,而且非常复杂。...本文简单分享一下内核的静态追踪技术的实现。追踪,其实就是收集代码在执行时的一些信息,以便协助排查问题。...不过和打日志不一样的是,我们想在哪里打就在哪里加对应的代码,而 Tracepoints 则几乎是依赖于内核决定哪里可以插桩,说几乎是因为我们也可以写内核模块注册到内核来通知插桩。...2 trace event 有了 Tracepoint 机制后,我们就可以写模块加载到内核中实现自己的插桩。但是内核也为我们内置提供了非常多的插桩。具体是通过 trace event 来实现的。...总的来说,Linux 下的追踪技术多种多样,虽然非常复杂,但是上层也提供了各种更方便的工具,这些能力是我们深入排查问题的利器。

1.7K20

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.1K32

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

linux内核编程_linux内核是什么

内核——操作系统的内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类的用户界面—-操作系统的外在表象 基本的文件管理工具和系统工具 Linux内核的组成 Linux内核源代码目录结构是什么...Linux内核的有哪些组成部分? 进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC) Linux内核的的组成部分之间有什么关系?...Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编译规则。 配置文件(Kconfig):给用户提供配置选择的功能。...记录哪些部分被编译入内核、哪些部分被编译为内核模块。 在Linux 内核中增加程序需要完成哪些工作? 将编写的源代码复制到Linux 内核源代码的相应目录。...次引导加载程序加载Linux内核和可选的初始RAM 磁盘,将控制权交给Linux内核源代码。 运行被加载的内核,并启动用户空间应用程序。

18.8K30

LINUX内核

一、Linux内核2.6特点: 1.新的调度器 2.内核抢占 3.改进线程模型 4.虚拟内存 5.文件系统 6.音频:音频体系结构ALSA.支持USB音频和MIDI设备,并支持全双工重放功能。...二、LINUX内核的组成 1.LINUX内核源代码目录结构 1)arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如i386,arm,powerpc,mips等。...4)Documentation:内核各部分通用解释和注释。...模块 16)sound:ALSA,OSS音频中设备的核心代码和常用设备驱动 17)usr:实现了用于打包和压缩的CPIO等 2.LINUX内核组成部分 2.1 LINUX主要用进程调度,虚拟文件系统,...3.Linux内核空间与用户空间 Linux只能通过系统调用和硬件中断来完成用户空间到内核空间的控制转移

13.9K30

Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

文章目录 一、解压内核源码 二、查询当前 Linux 内核版本号 三、进入并查看 linux 内核源码目录 一、解压内核源码 ---- 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz...拷贝到 Ubuntu 虚拟机中 , 执行 tar xvf linux-5.6.14.tar.gz 命令 , 解压 Linux 内核源码 ; 解压完毕后 , linux-5.6.14 目录中就是解压后的...Linux 内核源码 ; 二、查询当前 Linux 内核版本号 ---- 执行 uname -a 命令 , 查询当前 Ubuntu 系统的 Linux 内核版本号 , 执行过程如下 : root@ubuntu...x86_64 x86_64 x86_64 GNU/Linux root@ubuntu:~/kernel# root@ubuntu:~/kernel# 当前的内核版本号是 4.13.0 ; 三...、进入并查看 linux 内核源码目录 ---- 进入之前解压的 linux-5.6.14 内核源码目录 ; root@ubuntu:~/kernel# ls linux-5.6.14 linux-5.6.14

86.4K60

Linux 内核 vs Windows 内核

完成第一版 Linux 后,Linux Torvalds 就在网络上发布了 Linux 内核的源代码,每个人都可以免费下载和使用。...Linux 内核设计的理念主要有这几个: MutiTask,多任务 SMP,对称多处理 ELF,可执行文件链接格式 Monolithic Kernel,宏内核 MutiTask MutiTask 的意思是多任务...Monolithic Kernel Monolithic Kernel 的意思是宏内核Linux 内核架构就是宏内核,意味着 Linux内核是一个完整的可执行程序,且拥有最高的权限。...微内核内核功能少,可移植性高,相比宏内核有一不好的地方在于,由于驱动程序不在内核中,而且驱动程序一般会频繁调用底层能力的,于是驱动和硬件设备交互就需要频繁切换到内核态,这样会带来性能损耗。...PE 的结构你可以从下图中看到,它与 ELF 结构有一相似。 ?

16.3K30

Linux内核开发_1_编译LInux内核

准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 2....Makefile:28: recipe for target ‘menuconfig’ failed” 意思是,这个配置工具在编写时对我们的终端窗口大小进行了限制,长和宽必须满足19*80 这里我们把终端窗口扩大一,...,而gnu的软件体系在不断的升级进化,每次的升级,都会被用在正在开发中最新的Linux内核,而除了原始版的Linux内核不是在Linux上编译出来的以外,其余的Linux内核版本都是在Linux内核上开发而来的...如正在编译Linux2.6,他使用的glib是3,那么我们当前的发行版使用的是6 一旦编译起来,gcc会从系统环境里把6的一些依赖lib链接到2.6里去了,从而导致某些函数可能在未来的运行结果或者参数要求发生了一变化...不确定的因素很多,所以这里我给大家的建议是,如果你想编译Linux内核,最好选择一个与它使用的Linux内核版本相仿的Linux发行版来编译它 如我选择学习Linux内核,并且选择的Linux

19.3K20

linux 切换内核版本,切换 Linux 内核版本

Linux 内核是开源类 Unix 系统宏内核。仅仅一个内核并不是一套完整的操作系统。有一套基于 Linux 内核的完整操作系统叫作 Linux 操作系统。...Kernel 是 Linux 系统的核心,主要负责硬件的支持。 Linux 内核提供了安全补丁, bugfix 和新特性。 Linux 内核在 GNU 通用公共许可证第 2 版之下发布。...Linux 内核版本变更可能导致网络访问异常,声音异常,甚至是桌面环境无法启动。...Linux 内核版本号的意义 Linux 内核版本号由 3 组数字组成:第一个组数字。第二组数字。第三组数字 第一个组数字:目前发布的内核主版本。...查看内核版本 在 Linux 机器上执行如下命令查看当前正在使用的内核版本 uname -r 使用如下命令查看当前系统安装的内核版本 dpkg -l | grep linux-image 如果使用的是

23.4K20

Linux内核编程_linux内核开发工具

【转载】Linux内核编程与应用编程对比 转载链接1:http://www.arrowapex.cn/archives/66.html 在此之前也不清楚linux内核编程跟用户应用程序编程之间有什么不同...,正好这几天做了一linux模块编程,遇到问题请教朋友并查一些资料,感觉对内核编程和用户应用程序编程的几点不同有了一体会,就写了下来。...3.要查询一个函数能否在内核编程中用,可以通过http://lxr-itec.uni-klu.ac.at/linux-2.6.4/ident查 (这是针对linux2.6内核,也有针对2.4内核的),如果能查到...如上面的例子,内核从来没有说过两个hook之间,skb是一样的,skb的数据空间即skb->data是一样的。...对于在linux内核实现网关的某些功能时,我发现,虽然linux已经提供了很多现成的东西,可以保证快速开发。但是内核本身架构是一个通用计算机,不是专门针对网络处理的。

12.9K20

Linux 内核】编译 Linux 内核 ⑦ ( 安装内核模块 | 安装内核 | 重启系统 | 查看当前内核版本 )

文章目录 一、安装内核模块 二、安装内核 三、重启系统 四、查看当前内核版本 一、安装内核模块 ---- 确保 Linux 内核编译完成 , 没有任何报错之后 ; 参考 【Linux 内核】编译 Linux...内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 ) 博客 ; 进入 Linux 内核源码的根目录 , 执行 sudo make modules_install 命令 , 安装编译好的内核模块...-5.6.14# root@ubuntu:~/kernel/linux-5.6.14# 二、安装内核 ---- 内核模块安装完成后 , 执行 sudo make install 命令 , 安装内核...; 下面的内核安装过程会持续很长时间 ; 内核安装过程 : root@ubuntu:~# cd kernel/linux-5.6.14 root@ubuntu:~/kernel/linux-5.6.14...查看当前的内核版本 , 发现当前内核版本已经

15.2K50

Linux内核分析及内核编程

、原理及组成框架,主要分析了Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux 内核,精通Linux内核编程。...作为一名Linux编程者,我一向颇为留意内核编程方面的图书,我理想中的这本书应该是一本实践性很强的书,是真正从事Linux内核开发的人士写作的。...Linux 2.6版内核改写了以前版本内核的绝大部分,本书主要针对目前Linux的最新版本2.6.11版,对以后的新版本也具有普适性。...关于本书作者 笔者从在清华大学电子系读研究生起,就开始从事Linux内核编程,后又一直在外国著名公司从事Linux内核编程工作。...、原理及组成框架,主要分析了Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux 内核,精通Linux内核编程。

11.3K20

Linux内核学习(一)之Linux内核源码目录

: ——linux版本号由3组数字组成: 第一组数字:表示目前发布的内核主版本。...这个文件就是linux内核特有的内核编译体系需要用到的文件 MAINTAINERS:这个文件主要是介绍了维护人员列表以及如何提交内核更改 Makefile:这个是linux内核的总makefile,整个内核工程用这个...init:init是初始化的意思,这个目录下的代码就是linux内核启动时初始化内核的代码。...ipc:ipc就是inter process commuication,进程间通信,里面都是linux支持的IPC的代码实现 kernel:kernel就是内核,就是linux内核,所以这个文件夹下放的就是内核本身需要的一些代码文件...scripts:脚本,这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。

10.6K51
领券