![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
ftrace/kprobe/perf
内核的trace机制介绍
程序猿Ricky的日常干货
擅长扫地、打杂、开车。。
展开
-
CVM抖动问题分析思路
抖动是一个极其复杂的问题,它涉及到的原因非常多,本文试图理一下排查的思路,可能并不能涵盖所有内容。1.对于虚拟机来说,引起抖动的问题可能发生在虚拟机内部或者发生在宿主机上,那么第一步就是要先找出这个问题机器。比如网络抖动,那么直接就分别在宿主机和虚拟机中进行抓包来找出问题机器,定位到问题机之后再进一步查看。2.针对抖动问题,首先就是要抓到现场的数据,抖动一般都是比较短暂时间出发的行为,因此需要比较细粒度的trace方法常用的有atop、perf record等等3.引起抖动问题的因素有多种,需要一原创 2021-01-05 11:30:25 · 428 阅读 · 0 评论 -
如何理解perf工具中的-F选项和-c选项
perf -c count和perf -F freq选项都是用来指定采样频率的。对于-c来说,当perf启动后PMU会记录event事件信息,那么当event信息数量超过count时就会采样一次。对于-F来说,它的维度是按照一秒钟内的采样次数来计算,它试图在一秒钟内采样freq次来达到预期采样周期的目的。这两者实际上实现的功能是类似的。参考:https://stackoverflow.com/questions/53449001/linux-perf-record-difference-betwe原创 2021-01-05 11:08:02 · 1707 阅读 · 0 评论 -
strace统计系统调用耗时
strace -cp 1命令输出:strace: Process 1 attachedstrace: Process 1 detached% time seconds usecs/call calls errors syscall------ ----------- ----------- --------- --------- ---------------- 28.09 0.000084 16 5 clon原创 2020-12-28 11:33:40 · 1826 阅读 · 0 评论 -
perf trace跟踪系统调用
perf trace -p $pid --duration 50 命令输出如下: 0.076 (1249.922 ms): epoll_wait(epfd: 4<anon_inode:[eventpoll]>, events: 0x7ffe92ab3af0, maxevents: 36, timeout: 4294967295) = 1 1250.074 (1249.927 ms): epoll_wait(epfd: 4<anon_inode:[eventpoll]>原创 2020-12-28 11:32:28 · 3717 阅读 · 0 评论 -
perf sched命令跟踪调度延迟
使用perf sched命令抓取系统调度延迟:perf sched record -- sleep 15 抓取系统全局的sched信息perf sched latency -s max 解析perf数据中的sched latency信息perf sched script | grep 2862458.143656 -B 30 查看perf sched数据假如细化要求,抓取特定CPU上的调度延迟,可以使用如下方法:perf record -e sched:sched_wakeup,sc原创 2020-12-28 11:31:41 · 1472 阅读 · 0 评论 -
ftrace stack trace
内核栈大小是有限的,为了跟踪内核栈的使用情况,可以使用ftrace stack trace。使能和关闭方法:echo 1 > /proc/sys/kernel/stack_tracer_enabledecho 0 > /proc/sys/kernel/stack_tracer_enabledstack trace的信息输出通过如下的节点上送给用户态:/sys/kernel/debug/tracing/stack_max_size/sys/kernel/debug/tracing原创 2020-11-26 11:55:08 · 1377 阅读 · 0 评论 -
从kprobe注销场景来探讨一下synchronize_sched的使用
首先抛出我的问题:当我在编译一个kprobe内核插桩模块时,我是这样实现的,先动态申请一块内存,用于存放我的kprobe结构体,然后执行kprobe的注册,完成一系列的内核数据收集之后,执行kprobe注销操作,最后释放内存,那么大家觉得我这个设计有问题吗?对于初学者可能觉得:没有什么问题呀?kprobe有注册和有注销,内存有申请有释放,怎么出问题的,实际上正确答案就是没有问题。。。哈哈,是不是感觉被我忽悠了一下。下面我来说说我当时的顾虑,由于我是动态申请的内存,kprobe机制是这样的,注册了对应k原创 2020-09-02 22:15:37 · 538 阅读 · 0 评论 -
kprobe(二)
上一篇文章介绍了kprobe的使用方法,这么这一篇进一步介绍kprobe的实现机制。概要Kprobes可以让你动态的中断任何函数并且在此处收集debug信息和性能信息。基本大多数的内核代码地址都可以设置为断点,并且触发运行我们想要的handler。kprobe由两部分组成,core部分需要编译到内核中,另一部分是可以以module形式存在的。之所以这么设计,就是为了动态的调试内核,...原创 2018-05-04 16:06:14 · 405 阅读 · 0 评论 -
kprobe(一)
Kprobe configCONFIG_KPROBES=y CONFIG_KALLSYMS=y or CONFIG_KALLSYMS_ALL=yKprobe struct struct kprobe { struct hlist_node hlist; /* list of kprobes for multi-handler support */ ...原创 2018-05-04 10:54:14 · 1341 阅读 · 0 评论 -
ftrace(一)
Ftrace相对于其他的工具,比如Dtrace/systemTap来说,是一种轻量级的trace工具,利用静态代码插装技术来实现,实现更加可靠,以一种友好 的可视化方式来进行输出,支持ASCII。相对于其他的工具,它更加受内核开发者推崇,目前已经合入的内核主线。它的实现也依赖很多其他内核特性,比如 tracepoint,debugfs,kprobe等。(1)debugfsdebugfs...原创 2018-04-27 14:40:20 · 1236 阅读 · 0 评论 -
ftrace(二)
即上一篇ftrace(一)简介了ftrace对应的debug目录下的各个文件的用途,这一篇主要介绍可以配置几个常用的Tracers。Tracersfunction用于trace内核中的所有functionsfunction_graph和function tracer类似,只是function graph以一种更加容易查看的方式来呈现函数调用关系。类似与C代码的编写风格。...原创 2018-04-27 16:01:52 · 1038 阅读 · 0 评论 -
ftrace(三)(实例)
抓取event trace实例1.设置eventecho 1 &gt; /sys/kernel/debug/tracing/events/enable2.使能ftraceecho 1 &gt; /sys/kernel/debug/tracing/tracing_on3.关闭ftraceecho 0 &gt; /sys/kernel/debug/tracing/traci...原创 2018-04-27 17:17:36 · 2449 阅读 · 1 评论 -
ftrace在实际问题中的应用
我在自己的其他博文中有介绍ftrace的介绍和使用方法,那么在实际的工作中,ftrace可以用来做什么呢?在实际问题场景中ftrace主要用来跟踪延时和调用流程,分析性能问题。function/function_graph 分析内核函数调用流程function/function_graph是利用的GCC的编译选项来完成对函数的插桩的,ftrace自带的function tracer和fun...原创 2019-07-08 18:12:27 · 2630 阅读 · 0 评论 -
内核中的插桩调试
插桩法是内核常用的一种调试手段,利用代码中插桩,执行到此时执行对应的钩子函数(hook)来达到调试的目的,从实现来说,它不可避免的会带来一些性能上的开销,不过随着实现的不断优化,这部分的开销已经越来越小了。比如使能了 dynamic ftrace 后的内核,在关闭 ftrace 开关的情况下,实际上只是多了个几个 nop 指令,并不会带来很大的性能开销。下面就来看下内核中都有哪几种常用的插桩调试机制。ftrace 我在其他博客中有介绍过,它的原理是使用 gcc 编译器的 -pg 选项,达到在内核代码中插桩原创 2020-05-15 18:02:25 · 2137 阅读 · 0 评论