利用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

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装