首页 > 其他分享 >perf与ftrace

perf与ftrace

时间:2024-02-13 19:24:41浏览次数:36  
标签:ftrace perf 用户 跟踪 Linux 内核

ftrace
ftrace 是一种调试工具,用于了解 Linux 内核中的情况。如需详细了解 ftrace 高级功能,请参阅 ftrace 文档:/Documentation/trace/ftrace.txt

Ftrace 的设计目标简单,本质上是一种静态代码插装技术,不需要支持某种编程接口让用户自定义 trace 行为。静态代码插装技术更加可靠,不会因为用户的不当使用而导致内核崩溃。 ftrace 代码量很小,稳定可靠。实际上,即使是 Dtrace,大多数用户也只使用其静态 trace 功能。因此 ftrace 的设计非常务实。

它内置在内核中,可以使用跟踪点,kprobes和uprobes,并提供以下功能:事件跟踪,带有可选的过滤器和参数; 事件计数和时间安排,内核摘要; 和功能流漫游。

缺点主要是它不是可编程的(programmable),因此,举个例子说,你不能保存和获取时间戳、计算延迟,以及将其保存为直方图。你需要转储事件到用户级以便于进行后期处理,这需要花费一些成本。它也许可以通过 eBPF 实现可编程。

perf
Perf 是内置于 Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,可用于性能瓶颈的查找与热点代码的定位。

ftrace的跟踪方法是一种总体跟踪法,它是统计了一个事件到下一个事件所有的时间长度,然后把它们放到时间轴上,这样就可以知道整个系统运行在时间轴上的分布。这种方法很准确,但跟踪成本很高。所以,我们也需要一种抽样形态的跟踪方法。perf提供的就是这样的跟踪方法。

perf的原理大致是这样的:每隔一个固定的时间,就在CPU上(每个核上都有)产生一个中断,在中断上看看,当前是哪个pid,哪个函数,然后给对应的pid和函数加一个统计值,这样,我们就知道CPU有百分几的时间在某个pid,或者某个函数上了。

perf-event是 Linux 用户的主要跟踪工具,它的源代码位于 Linux 内核中,一般是通过 linux-tools-common 包来添加的。它又称为perf,后者指的是它的前端,它相当高效(动态缓存),一般用于跟踪并转储到一个文件中(perf.data),然后可以在之后进行后期处理。它可以做大部分 ftrace 能做的事情。它不能进行函数流步进,并且不太容易调校(而它的安全/错误检查做的更好一些)。但它可以做剖析(采样)、CPU 性能计数、用户级的栈转换、以及使用本地变量利用调试信息(debuginfo)进行行级跟踪(line tracing)。它也支持多个并发用户。与 ftrace 一样,它也不是内核可编程的,除非 eBPF 支持(补丁已经在计划中)。

参考文章:https://zhuanlan.zhihu.com/p/113478603

标签:ftrace,perf,用户,跟踪,Linux,内核
From: https://www.cnblogs.com/wendyann/p/18014748

相关文章

  • 安装netperf和perf
    这是一篇发疯随笔X.X我的环境是虚拟机debian12,出于种种原因,之前直接使用apt-getinstallnetperfapt-getinstallperf指令直接安装,报错找不到包然后上网搜了一堆教程,有说下载netperf源码编译的,那些教程里面有的给的地址是netperf.org,但是!!这个网站根本上不去!!之后又搜了一些教......
  • 扒开源安卓性能测试工具moblieperf源码——开发属于你自己的性能稳定性测试工具
    moblieperf下载和使用moblieperf由阿里巴巴开源的Android性能测试工具下载:官方源码地址mobileperfgithub使用:使用pycharm打开下载的项目使用只需要修改配置文件config.conf即可运行采集:a.mac、linux在mobileperf工具根目录下执行shrun.sh;b.windows双击run.bat配置......
  • CF1338C Perfect Triples 题解
    解题思路没什么好说的,就是打表找规律……表在这里不难发现,三元组中第一个数的最后两位按照\(00\to01\to10\to11\)的顺序变化,其他位也一样,同样,第二个数和第三个数中每两位分别按照\(00\to10\to11\to01\)和\(00\to11\to01\to10\)的顺序变化,且与第一个数对应变化......
  • CF1413C Perform Easily 题解
    解题思路其实是很简单的一道题,考虑计算出所有\(b_i\)在减去每一个\(a_j\)后所有可能的值,将这个值按照从小到大的顺序排序,那么我们可以考虑固定最小值,查找最大值,这个时候从最小值到最大值的区间内应该每一种\(b_i\)都出现了一次。那么,我们可以使用一个桶或者map搭配双指针......
  • CF1603E A Perfect Problem
    一个完美的序列满足任何非空子序列的最大值与最小值乘积大于等于其总和,求长度为\(n\),值域为\([1,n+1]\)的完美序列个数,对质数\(M\)取模。\(n\le200\)给这个序列排序后,注意到如果所有前缀合法,那么任何子序列都合法。一个观察是,如果第一个数太小,那么总是无解。设第一个数......
  • [Performance] Memory pool
    Amemorypool,alsoknownasamemorybufferpool,isamethodusedinsoftwaredevelopmentformanagingmemoryallocation.Insteadofallocatinganddeallocatingmemoryindividuallyforeachnewobjectatruntime,whichcanbecostlyintermsofperforma......
  • perf_event_open 学习 —— 通过read的方式读取硬件技术器
    目录示例程序1单计数器多计数器示例程序2ConfigureasinglecounterConfiguremultiplecounters(nomultiplexing)示例程序1Linuxperf子系统的使用(一)——计数刚刚入职的时候我就研究了perf_event_open()这个巨无霸级别的系统调用,还用Python封装了一层,非常便于获取计数器......
  • perf_event_open学习 —— mmap方式读取
    目录示例程序2采集单个值采集多个值示例程序2示例程序3示例程序2Linuxperf子系统的使用(二)——采样(signal方式)在上一篇《Linuxperf子系统的使用(一)——计数》已经讲解了如何使用perf_event_open、read和ioctl对perf子系统进行编程。但有时我们并不需要计数,而是要采样。比如这......
  • perf_event_open 学习 —— 手册学习
    目录参考NAMESYNOPSISDESCRIPTIONArgumentspid和cpugroup_fdflagsperf_event_attrtypesizeconfigkprobe_func,uprobe_path,kprobe_addr,andprobe_offsetsample_period,sample_freqsample_typeread_formatdisabledinheritpinnedexclusiveexclude_userexclude_kernelexclude_hv......
  • Error: unable to perform an operation on node 'rabbit@pro'. Please see diagnosti
    简短的和全限定RabbitMQ节点名称rabbitmq支持简短的和全限定域名作为节点名称,但是默认的是简短的,我这里使用了全限定的域名,所以在集群操作stop_app的时候报错了  在rabbitmq安装目录下的/etc/rabbitmq加上配置文件rabbitmq-env.conf(环境变量)就可以了#开启使用全限定节点名......