背景及简介
strace:用来跟踪 Linux 进程执行时的系统调用和接收所接收的信号,可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
ftrace:是一个 Linux 内核函数跟踪器,function tracer,旨在帮助开发人员和系统设计者可以找到内核内部发生的事情,从 Linux-2.6 内核就支持了。
atrace:Android tracer,使用 ftrace 来跟踪 Android 上层的函数调用。
systrace:Android 的 trace 数据分析工具,将 atrace 采集上来的数据,以图形化的方式展现出来。systrace 是分析 Android 设备性能的主要工具。不过,它实际上是多种其他工具的封装容器:它是 atrace 的主机端封装容器。atrace 是用于控制用户空间跟踪和设置 ftrace 的设备端可执行文件,也是 Linux 内核中的主要跟踪机制。systrace 使用 atrace 来启用跟踪,然后读取 ftrace 缓冲区并将其全部封装到一个独立的 HTML 查看器中。
perfetto:新一代 systrace 分析工具,使用 perfetto 工具,可以通过 Android 调试桥 (ADB) 在 Android 设备上收集性能信息。perfetto 从您的设备上收集性能跟踪数据时会使用多种来源,例如:使用 ftrace 收集内核信息、使用 atrace 收集服务和应用中的用户空间注释、使用 heapprofd 收集服务和应用的本地内存使用情况信息。
在 Android 9 § 及以上版本平台都可用,但只有在 Android 11 ® 及以上的版本中才默认启用。在Android 9 § 和 10 (Q) 上,你需要执行下面的命令,以确保在一切开始之前跟踪服务正常启动:
# Needed only on Android 9 (P) and 10 (Q) on non-Pixel phones.
adb shell setprop persist.traced.enable 1
perfconv:CPU Freq 分析工具
LTR:Long Trace Recoder,可以录制长达半个小时的 trace,主要用于分析游戏场景。
因此,首先需要学习 ftrace,它是其他 trace 的基础。
在使用 ftrace 之前,需要确保内核配置编译了其配置选项。
#默认打开跟踪器,通过/boot/config_*文件查看
CONFIG_FTRACE=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_TRACER=Y
CONFIG_IRQSOFF_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_ENABLE_DEFAULT_TRACERS=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_PREEMPT_TRACER=y
而后在 /sys/kernel/debug/trace 目录下提供了各种跟踪器(tracer)和 event 事件,一些常用的选项如下。
(1).available_tracers:列出当前系统支持的跟踪器。
(2).available_events:列出当前系统支持的 event 事件。
(3).current_tracer:设置和显示当前正在使用的跟踪器。使用 echo 命令可以把跟踪器的名字写入该文件,即可以切换不同的跟踪器。默认为 nop,即不做任何跟踪操作。
(4).trace:读取跟踪信息。通过 cat 命令查看 ftrace 记录下来的跟踪信息。
(5).tracing_on:用于开始或暂停跟踪。
(6).trace_options:设置 ftrace 的一些相关选项。
ftrace 当前包含多个跟踪器,很方便用户用来跟踪不同类型的信息,例如进程睡眠唤醒、抢占延迟的信息。查看 available_tracers 可以知道当前系统支持哪些跟踪器,如果系统支持的跟踪器上没有用户想要的,那就必须在配置内核时自行打开,然后重新编译内核。常用的 ftrace 跟踪器如下。
(1).nop:不会跟踪任何内核活动,将 nop 写入 current_tracer 文件可以删除之前所使用的跟踪器,并清空之前收集到的跟踪信息,即刷新 trace 文件
(2).function:函数调用追踪器,可以看出哪个函数何时调用,可以通过过滤器指定要跟踪的函数。
(3).function_graph:函数调用图表追踪器,可以看出哪个函数被哪个函数调用,何时返回
(4).wakeup:跟踪进程唤醒信息,进程调度延迟追踪器(wakeup tracer追踪普通进程从被唤醒到真正得到执行之间的延迟,打开看看那些函数被跟踪)
(5).irqsoff:跟踪关闭中断信息,并记录关闭的最大时长。
(6).preemptoff:跟踪关闭禁止抢占信息,并记录关闭的最大时长。
(7).preemptirqsoff:综合了 irqoff 和 preemptoff 两个功能。
(8).sched_switch:对内核中的进程调度活动进行跟踪。
(9)blk:block I/O追踪器,blktrace用户应用程序 使用的跟踪器
(10)mmiotrace:MMIO(Memory Mapped I/O)追踪器,用于Nouveau驱动程序等逆向工程
(11)wakeup_rt:与wakeup相同,但以实时进程为对象(non-RT进程通常看平均延迟。RT进程的最大延迟非常有意义,反应了调度器的性能,命令cat trace | head -400)
(12)wakeup_dl:跟踪并记录唤醒SCHED_DEADLINE任务所需的最大延迟(如"wakeup”和"wak

本文介绍了Linux和Android中的性能追踪工具,如strace,ftrace,atrace,systrace以及perfetto,讲述了它们的作用、功能和在系统监控、内核调试中的应用,以及如何配置和使用这些工具进行系统性能分析。
最低0.47元/天 解锁文章
114

被折叠的 条评论
为什么被折叠?



