利用ftrace进行内核性能分析

2024-04-26 03:38

本文主要是介绍利用ftrace进行内核性能分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在内核层面上分析事件有很多的工具:SystemTap、ktap、Sysdig、LTTNG 等等,你也可以在网络上找到关于这些工具的大量介绍文章和资料。

而对于使用 Linux 原生机制去跟踪系统事件以及检索/分析故障信息的方面的资料却很少找的到。这就是 ftrace,它是添加到内核中的第一款跟踪工具,今天我们来看一下它都能做什么.

ftrace 是 Function Trace 的简写,但它能做的远不止这些:它可以跟踪上下文切换、测量进程阻塞时间、计算高优先级任务的活动时间等等。

ftrace 是由 Steven Rostedt 开发的,从 2008 年发布的内核 2.6.27 中开始就内置了。这是为记录数据提供的一个调试 Ring 缓冲区的框架。这些数据由集成到内核中的跟踪程序来采集。

ftrace 工作在 debugfs 文件系统上,在大多数现代 Linux 发行版中都默认挂载了。要开始使用 ftrace,你将进入到 sys/kernel/debug/tracing 目录(仅对 root 用户可用):

第一步:确认机器已经挂载debugfs

第二步: 查看系统当前支持的tracer

root@czl-VirtualBox:/sys/kernel/debug/tracing# cat available_tracers 
hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop
root@czl-VirtualBox:/sys/kernel/debug/tracing# 

第三步:设置其中一个tracer:

echo wakeup_rt >current_tracer 
echo 1 > tracing_on
echo 0 > tracing_on

在echo 1和 echo 0中间停留片刻,等待ftrace将ringbuffer填充

之后执行如下命令查看结果:

cat trace
root@czl-VirtualBox:/sys/kernel/debug/tracing# cat trace
# tracer: wakeup_rt
#
# wakeup_rt latency trace v1.1.5 on 5.4.0-81-generic
# --------------------------------------------------------------------
# latency: 112 us, #154/154, CPU#0 | (M:desktop VP:0, KP:0, SP:0 HP:0 #P:1)
#    -----------------
#    | task: migration/0-12 (uid:0 nice:0 policy:1 rt_prio:99)
#    -----------------
#
#                    _------=> CPU#            
#                   / _-----=> irqs-off        
#                  | / _----=> need-resched    
#                  || / _---=> hardirq/softirq 
#                  ||| / _--=> preempt-depth   
#                  |||| /     delay            
#  cmd     pid     ||||| time  |   caller      
#     \   /        |||||  \    |   /         <idle>-0         0dNh.    1us+:        0:120:R   + [000]      12:  0:R migration/0<idle>-0         0dNh.   20us : <stack trace>=> __trace_stack=> probe_wakeup=> ttwu_do_wakeup=> ttwu_do_activate=> try_to_wake_up=> wake_up_q=> cpu_stop_queue_work=> stop_one_cpu_nowait=> watchdog_timer_fn=> __hrtimer_run_queues=> hrtimer_interrupt=> smp_apic_timer_interrupt=> apic_timer_interrupt=> mwait_idle=> arch_cpu_idle=> default_idle_call=> do_idle=> cpu_startup_entry=> rest_init=> arch_call_rest_init=> start_kernel=> x86_64_start_reservations=> x86_64_start_kernel=> secondary_startup_64<idle>-0         0dNh.   21us : ttwu_do_activate <-try_to_wake_up<idle>-0         0dNh.   21us : _raw_spin_unlock_irqrestore <-try_to_wake_up<idle>-0         0dNh.   22us : ktime_get <-watchdog_timer_fn<idle>-0         0dNh.   22us : hrtimer_forward <-watchdog_timer_fn<idle>-0         0dNh.   23us : _raw_spin_lock_irq <-__hrtimer_run_queues<idle>-0         0dNh.   23us : enqueue_hrtimer <-__hrtimer_run_queues<idle>-0         0dNh.   26us : __remove_hrtimer <-__hrtimer_run_queues<idle>-0         0dNh.   27us : _raw_spin_unlock_irqrestore <-__hrtimer_run_queues<idle>-0         0dNh.   27us : tick_sched_timer <-__hrtimer_run_queues<idle>-0         0dNh.   28us : ktime_get <-tick_sched_timer<idle>-0         0dNh.   28us : tick_sched_do_timer <-tick_sched_timer<idle>-0         0dNh.   29us : tick_do_update_jiffies64.part.14 <-tick_sched_do_timer<idle>-0         0dNh.   29us : _raw_spin_lock <-tick_do_update_jiffies64.part.14<idle>-0         0dNh.   29us : do_timer <-tic

这篇关于利用ftrace进行内核性能分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936620

相关文章

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT